hyperdex 1.4.5.3.g9d31c19 → 1.4.5.5.gf1ae4e6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ext/client.c +3 -5
- data/lib/hyperdex/client.rb +43 -77
- data/lib/hyperdex/client/client.rb +3 -8
- data/lib/hyperdex/client/exception.rb +109 -0
- data/lib/hyperdex/client/iterator.rb +1 -3
- data/lib/hyperdex/client/response.rb +1 -4
- metadata +4 -4
- data/lib/hyperdex/client/hyperdex_client_exception.rb +0 -9
data/ext/client.c
CHANGED
@@ -40,7 +40,6 @@
|
|
40
40
|
|
41
41
|
extern VALUE mod_hyperdex;
|
42
42
|
static VALUE mod_hyperdex_client;
|
43
|
-
static VALUE class_exception;
|
44
43
|
static VALUE Set;
|
45
44
|
static VALUE class_client;
|
46
45
|
static VALUE class_predicate;
|
@@ -71,7 +70,9 @@ hyperdex_ruby_client_throw_exception(enum hyperdex_client_returncode status,
|
|
71
70
|
const char* error_message)
|
72
71
|
{
|
73
72
|
VALUE args[2] = { INT2NUM(status), rb_str_new2(error_message) };
|
74
|
-
|
73
|
+
VALUE klass = rb_path2class("HyperDex::Client");
|
74
|
+
|
75
|
+
rb_exc_raise(rb_funcall2(klass, rb_intern("exception"), 2, args));
|
75
76
|
}
|
76
77
|
|
77
78
|
/******************************* Predicate class ******************************/
|
@@ -904,9 +905,6 @@ Init_hyperdex_client()
|
|
904
905
|
/* setup the module */
|
905
906
|
mod_hyperdex_client = rb_define_module_under(mod_hyperdex, "Client");
|
906
907
|
|
907
|
-
/* create the Exception class */
|
908
|
-
class_exception = rb_define_class_under(mod_hyperdex_client, "HyperDexClientException", rb_eStandardError);
|
909
|
-
|
910
908
|
/* create the Client class */
|
911
909
|
class_client = rb_define_class_under(mod_hyperdex_client, "Client", rb_cObject);
|
912
910
|
|
data/lib/hyperdex/client.rb
CHANGED
@@ -11,6 +11,10 @@ module HyperDex::Client
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
def self.exception(status, message)
|
15
|
+
HyperDex::Client::Exception::Map[status].new(message)
|
16
|
+
end
|
17
|
+
|
14
18
|
def self.build_attribute(attr)
|
15
19
|
type = attr[:datatype]
|
16
20
|
value = attr[:value].read_string(attr[:value_sz])
|
@@ -22,10 +26,8 @@ module HyperDex::Client
|
|
22
26
|
when :INT64
|
23
27
|
i = ::FFI::MemoryPointer.new(:int64_t)
|
24
28
|
if HyperDex::FFI::DS.unpack_int(attr[:value], attr[:value_sz], i) < 0
|
25
|
-
raise HyperDex::Client::
|
26
|
-
|
27
|
-
"server sent malformed int attribute (#{value.inspect})"
|
28
|
-
)
|
29
|
+
raise HyperDex::Client::ServerError,
|
30
|
+
"server sent malformed int attribute (#{value.inspect})"
|
29
31
|
end
|
30
32
|
|
31
33
|
i.read_int64
|
@@ -33,10 +35,8 @@ module HyperDex::Client
|
|
33
35
|
when :FLOAT
|
34
36
|
d = ::FFI::MemoryPointer.new(:double)
|
35
37
|
if HyperDex::FFI::DS.unpack_float(attr[:value], attr[:value_sz], d) < 0
|
36
|
-
raise HyperDex::Client::
|
37
|
-
|
38
|
-
"server sent malformed float attribute (#{value.inspect})"
|
39
|
-
)
|
38
|
+
raise HyperDex::Client::ServerError,
|
39
|
+
"server sent malformed float attribute (#{value.inspect})"
|
40
40
|
end
|
41
41
|
|
42
42
|
d.read_double
|
@@ -45,10 +45,8 @@ module HyperDex::Client
|
|
45
45
|
begin
|
46
46
|
JSON.parse(value)
|
47
47
|
rescue JSON::ParserError
|
48
|
-
raise HyperDex::Client::
|
49
|
-
|
50
|
-
"server sent malformed attribute(document)"
|
51
|
-
)
|
48
|
+
raise HyperDex::Client::ServerError,
|
49
|
+
"server sent malformed attribute(document)"
|
52
50
|
end
|
53
51
|
|
54
52
|
when :LIST_STRING
|
@@ -59,10 +57,8 @@ module HyperDex::Client
|
|
59
57
|
res = []
|
60
58
|
while (result = HyperDex::FFI::DS.iterate_list_string_next(iter, ptr, len)) > 0
|
61
59
|
if result < 0
|
62
|
-
raise HyperDex::Client::
|
63
|
-
|
64
|
-
"server sent malformed list(string)"
|
65
|
-
)
|
60
|
+
raise HyperDex::Client::ServerError,
|
61
|
+
"server sent malformed list(string)"
|
66
62
|
end
|
67
63
|
|
68
64
|
str = ptr.read_pointer
|
@@ -78,10 +74,8 @@ module HyperDex::Client
|
|
78
74
|
res = []
|
79
75
|
while (result = HyperDex::FFI::DS.iterate_list_int_next(iter, int)) > 0
|
80
76
|
if result < 0
|
81
|
-
raise HyperDex::Client::
|
82
|
-
|
83
|
-
"server sent malformed list(int)"
|
84
|
-
)
|
77
|
+
raise HyperDex::Client::ServerError,
|
78
|
+
"server sent malformed list(int)"
|
85
79
|
end
|
86
80
|
|
87
81
|
res << int.read_int64
|
@@ -96,10 +90,8 @@ module HyperDex::Client
|
|
96
90
|
res = []
|
97
91
|
while (result = HyperDex::FFI::DS.iterate_list_float_next(iter, dbl)) > 0
|
98
92
|
if result < 0
|
99
|
-
raise HyperDex::Client::
|
100
|
-
|
101
|
-
"server sent malformed list(float)"
|
102
|
-
)
|
93
|
+
raise HyperDex::Client::ServerError,
|
94
|
+
"server sent malformed list(float)"
|
103
95
|
end
|
104
96
|
|
105
97
|
res << dbl.read_double
|
@@ -115,10 +107,8 @@ module HyperDex::Client
|
|
115
107
|
res = Set.new
|
116
108
|
while (result = HyperDex::FFI::DS.iterate_set_string_next(iter, ptr, len)) > 0
|
117
109
|
if result < 0
|
118
|
-
raise HyperDex::Client::
|
119
|
-
|
120
|
-
"server sent malformed set(string)"
|
121
|
-
)
|
110
|
+
raise HyperDex::Client::ServerError,
|
111
|
+
"server sent malformed set(string)"
|
122
112
|
end
|
123
113
|
|
124
114
|
str = ptr.read_pointer
|
@@ -134,10 +124,8 @@ module HyperDex::Client
|
|
134
124
|
res = Set.new
|
135
125
|
while (result = HyperDex::FFI::DS.iterate_set_int_next(iter, int)) > 0
|
136
126
|
if result < 0
|
137
|
-
raise HyperDex::Client::
|
138
|
-
|
139
|
-
"server sent malformed set(int)"
|
140
|
-
)
|
127
|
+
raise HyperDex::Client::ServerError,
|
128
|
+
"server sent malformed set(int)"
|
141
129
|
end
|
142
130
|
|
143
131
|
res << int.read_int64
|
@@ -152,10 +140,8 @@ module HyperDex::Client
|
|
152
140
|
res = Set.new
|
153
141
|
while (result = HyperDex::FFI::DS.iterate_set_float_next(iter, dbl)) > 0
|
154
142
|
if result < 0
|
155
|
-
raise HyperDex::Client::
|
156
|
-
|
157
|
-
"server sent malformed set(float)"
|
158
|
-
)
|
143
|
+
raise HyperDex::Client::ServerError,
|
144
|
+
"server sent malformed set(float)"
|
159
145
|
end
|
160
146
|
|
161
147
|
res << dbl.read_double
|
@@ -173,10 +159,8 @@ module HyperDex::Client
|
|
173
159
|
res = {}
|
174
160
|
while (result = HyperDex::FFI::DS.iterate_map_string_string_next(iter, kptr, klen, vptr, vlen)) > 0
|
175
161
|
if result < 0
|
176
|
-
raise HyperDex::Client::
|
177
|
-
|
178
|
-
"server sent malformed map(string, string)"
|
179
|
-
)
|
162
|
+
raise HyperDex::Client::ServerError,
|
163
|
+
"server sent malformed map(string, string)"
|
180
164
|
end
|
181
165
|
|
182
166
|
kstr = kptr.read_pointer
|
@@ -197,10 +181,8 @@ module HyperDex::Client
|
|
197
181
|
res = {}
|
198
182
|
while (result = HyperDex::FFI::DS.iterate_map_string_int_next(iter, kptr, klen, vint)) > 0
|
199
183
|
if result < 0
|
200
|
-
raise HyperDex::Client::
|
201
|
-
|
202
|
-
"server sent malformed map(string, int)"
|
203
|
-
)
|
184
|
+
raise HyperDex::Client::ServerError,
|
185
|
+
"server sent malformed map(string, int)"
|
204
186
|
end
|
205
187
|
|
206
188
|
kstr = kptr.read_pointer
|
@@ -219,10 +201,8 @@ module HyperDex::Client
|
|
219
201
|
res = {}
|
220
202
|
while (result = HyperDex::FFI::DS.iterate_map_string_float_next(iter, kptr, klen, vdbl)) > 0
|
221
203
|
if result < 0
|
222
|
-
raise HyperDex::Client::
|
223
|
-
|
224
|
-
"server sent malformed map(string, float)"
|
225
|
-
)
|
204
|
+
raise HyperDex::Client::ServerError,
|
205
|
+
"server sent malformed map(string, float)"
|
226
206
|
end
|
227
207
|
|
228
208
|
kstr = kptr.read_pointer
|
@@ -241,10 +221,8 @@ module HyperDex::Client
|
|
241
221
|
res = {}
|
242
222
|
while (result = HyperDex::FFI::DS.iterate_map_int_string_next(iter, kint, vptr, vlen)) > 0
|
243
223
|
if result < 0
|
244
|
-
raise HyperDex::Client::
|
245
|
-
|
246
|
-
"server sent malformed map(int, string)"
|
247
|
-
)
|
224
|
+
raise HyperDex::Client::ServerError,
|
225
|
+
"server sent malformed map(int, string)"
|
248
226
|
end
|
249
227
|
|
250
228
|
vstr = vptr.read_pointer
|
@@ -262,10 +240,8 @@ module HyperDex::Client
|
|
262
240
|
res = {}
|
263
241
|
while (result = HyperDex::FFI::DS.iterate_map_int_int_next(iter, kint, vint)) > 0
|
264
242
|
if result < 0
|
265
|
-
raise HyperDex::Client::
|
266
|
-
|
267
|
-
"server sent malformed map(int, int)"
|
268
|
-
)
|
243
|
+
raise HyperDex::Client::ServerError,
|
244
|
+
"server sent malformed map(int, int)"
|
269
245
|
end
|
270
246
|
|
271
247
|
res[kint.read_int64] = vint.read_int64
|
@@ -281,10 +257,8 @@ module HyperDex::Client
|
|
281
257
|
res = {}
|
282
258
|
while (result = HyperDex::FFI::DS.iterate_map_int_float_next(iter, kint, vdbl)) > 0
|
283
259
|
if result < 0
|
284
|
-
raise HyperDex::Client::
|
285
|
-
|
286
|
-
"server sent malformed map(int, float)"
|
287
|
-
)
|
260
|
+
raise HyperDex::Client::ServerError,
|
261
|
+
"server sent malformed map(int, float)"
|
288
262
|
end
|
289
263
|
|
290
264
|
res[kint.read_int64] = vdbl.read_double
|
@@ -301,10 +275,8 @@ module HyperDex::Client
|
|
301
275
|
res = {}
|
302
276
|
while (result = HyperDex::FFI::DS.iterate_map_float_string_next(iter, kdbl, vptr, vlen)) > 0
|
303
277
|
if result < 0
|
304
|
-
raise HyperDex::Client::
|
305
|
-
|
306
|
-
"server sent malformed map(float, string)"
|
307
|
-
)
|
278
|
+
raise HyperDex::Client::ServerError,
|
279
|
+
"server sent malformed map(float, string)"
|
308
280
|
end
|
309
281
|
|
310
282
|
vstr = vptr.read_pointer
|
@@ -322,10 +294,8 @@ module HyperDex::Client
|
|
322
294
|
res = {}
|
323
295
|
while (result = HyperDex::FFI::DS.iterate_map_float_int_next(iter, kdbl, vint)) > 0
|
324
296
|
if result < 0
|
325
|
-
raise HyperDex::Client::
|
326
|
-
|
327
|
-
"server sent malformed map(float, int)"
|
328
|
-
)
|
297
|
+
raise HyperDex::Client::ServerError,
|
298
|
+
"server sent malformed map(float, int)"
|
329
299
|
end
|
330
300
|
|
331
301
|
res[kdbl.read_double] = vint.read_int64
|
@@ -341,10 +311,8 @@ module HyperDex::Client
|
|
341
311
|
res = {}
|
342
312
|
while (result = HyperDex::FFI::DS.iterate_map_float_float_next(iter, kdbl, vdbl)) > 0
|
343
313
|
if result < 0
|
344
|
-
raise HyperDex::Client::
|
345
|
-
|
346
|
-
"server sent malformed map(int, float)"
|
347
|
-
)
|
314
|
+
raise HyperDex::Client::ServerError,
|
315
|
+
"server sent malformed map(int, float)"
|
348
316
|
end
|
349
317
|
|
350
318
|
res[kdbl.read_double] = vdbl.read_double
|
@@ -353,10 +321,8 @@ module HyperDex::Client
|
|
353
321
|
res
|
354
322
|
|
355
323
|
else
|
356
|
-
raise HyperDex::Client::
|
357
|
-
|
358
|
-
"server sent malformed attributes"
|
359
|
-
)
|
324
|
+
raise HyperDex::Client::ServerError,
|
325
|
+
"server sent malformed attributes"
|
360
326
|
end
|
361
327
|
end
|
362
328
|
|
@@ -372,6 +338,6 @@ end
|
|
372
338
|
|
373
339
|
require_relative 'client/client'
|
374
340
|
require_relative 'client/deferred'
|
375
|
-
require_relative 'client/
|
341
|
+
require_relative 'client/exception'
|
376
342
|
require_relative 'client/iterator'
|
377
343
|
require_relative 'client/response'
|
@@ -16,10 +16,7 @@ class HyperDex::Client::Client
|
|
16
16
|
rc = ::FFI::MemoryPointer.new(HyperDex::FFI::Client.enum_type(:hyperdex_client_returncode).native_type)
|
17
17
|
while (ret = HyperDex::FFI::Client.hyperdex_client_loop(@client, timeout, rc)) < 0
|
18
18
|
if rc.read_int32 != HyperDex::Client::INTERRUPTED
|
19
|
-
raise HyperDex::Client
|
20
|
-
rc.read_int32,
|
21
|
-
self.error_message
|
22
|
-
)
|
19
|
+
raise HyperDex::Client.exception(rc.read_int32, self.error_message)
|
23
20
|
end
|
24
21
|
end
|
25
22
|
|
@@ -28,10 +25,8 @@ class HyperDex::Client::Client
|
|
28
25
|
|
29
26
|
def poll_fd
|
30
27
|
if (fd = HyperDex::FFI::Client.hyperdex_client_poll(@client)) < 0
|
31
|
-
raise HyperDex::Client::
|
32
|
-
|
33
|
-
"CAN'T HAPPEN: hyperdex_client_poll failed!"
|
34
|
-
)
|
28
|
+
raise HyperDex::Client::PollFailed,
|
29
|
+
self.error_messsage
|
35
30
|
end
|
36
31
|
|
37
32
|
fd
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module HyperDex::Client
|
2
|
+
class Exception < StandardError
|
3
|
+
@status = HyperDex::Client::EXCEPTION
|
4
|
+
|
5
|
+
def status
|
6
|
+
self.class.status
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.status
|
10
|
+
self.class.instance_variable_get(:@status)
|
11
|
+
end
|
12
|
+
|
13
|
+
def symbol
|
14
|
+
HyperDex::FFI::Client.
|
15
|
+
hyperdex_client_returncode_to_string(status).
|
16
|
+
read_string
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
HyperDexClientException = Exception
|
21
|
+
|
22
|
+
class UnknownSpaceError < Exception
|
23
|
+
@status = HyperDex::Client::UNKNOWNSPACE
|
24
|
+
end
|
25
|
+
|
26
|
+
class CoordFailError < Exception
|
27
|
+
@status = HyperDex::Client::COORDFAIL
|
28
|
+
end
|
29
|
+
|
30
|
+
class ServerError < Exception
|
31
|
+
@status = HyperDex::Client::SERVERERROR
|
32
|
+
end
|
33
|
+
|
34
|
+
class PollFailedError < Exception
|
35
|
+
@status = HyperDex::Client::POLLFAILED
|
36
|
+
end
|
37
|
+
|
38
|
+
class OverflowError < Exception
|
39
|
+
@status = HyperDex::Client::OVERFLOW
|
40
|
+
end
|
41
|
+
|
42
|
+
class ReconfigureError < Exception
|
43
|
+
@status = HyperDex::Client::RECONFIGURE
|
44
|
+
end
|
45
|
+
|
46
|
+
class TimeoutError < Exception
|
47
|
+
@status = HyperDex::Client::TIMEOUT
|
48
|
+
end
|
49
|
+
|
50
|
+
class UnknownAttrError < Exception
|
51
|
+
@status = HyperDex::Client::UNKNOWNATTR
|
52
|
+
end
|
53
|
+
|
54
|
+
class DupeAttrError < Exception
|
55
|
+
@status = HyperDex::Client::DUPEATTR
|
56
|
+
end
|
57
|
+
|
58
|
+
class NonePendingError < Exception
|
59
|
+
@status = HyperDex::Client::NONEPENDING
|
60
|
+
end
|
61
|
+
|
62
|
+
class DontUseKeyError < Exception
|
63
|
+
@status = HyperDex::Client::DONTUSEKEY
|
64
|
+
end
|
65
|
+
|
66
|
+
class WrongTypeError < Exception
|
67
|
+
@status = HyperDex::Client::WRONGTYPE
|
68
|
+
end
|
69
|
+
|
70
|
+
class NoMemError < Exception
|
71
|
+
@status = HyperDex::Client::NOMEM
|
72
|
+
end
|
73
|
+
|
74
|
+
class InterruptedError < Exception
|
75
|
+
@status = HyperDex::Client::INTERRUPTED
|
76
|
+
end
|
77
|
+
|
78
|
+
class ClusterJumpError < Exception
|
79
|
+
@status = HyperDex::Client::CLUSTER_JUMP
|
80
|
+
end
|
81
|
+
|
82
|
+
class OfflineError < Exception
|
83
|
+
@status = HyperDex::Client::OFFLINE
|
84
|
+
end
|
85
|
+
|
86
|
+
class InternalError < Exception
|
87
|
+
@status = HyperDex::Client::INTERNAL
|
88
|
+
end
|
89
|
+
|
90
|
+
class GarbageError < Exception
|
91
|
+
@status = HyperDex::Client::GARBAGE
|
92
|
+
end
|
93
|
+
|
94
|
+
EXCEPTION_STATUS_MAP = ObjectSpace.each_object(Class).reduce({}) do |h, ex|
|
95
|
+
if ex.ancestors.include?(::HyperDex::Client::Exception)
|
96
|
+
h[ex.status] = ex
|
97
|
+
end
|
98
|
+
h
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.exception(status, message)
|
102
|
+
klass = EXCEPTION_STATUS_MAP[status]
|
103
|
+
if klass.nil?
|
104
|
+
klass = HyperDex::Client::Exception
|
105
|
+
end
|
106
|
+
|
107
|
+
klass.new(message)
|
108
|
+
end
|
109
|
+
end
|
@@ -12,9 +12,7 @@ class HyperDex::Client::Iterator < HyperDex::Client::Response
|
|
12
12
|
elsif status == HyperDex::Client::SUCCESS
|
13
13
|
@backlog << encode_return
|
14
14
|
else
|
15
|
-
@backlog << HyperDex::Client::
|
16
|
-
status, @client.error_message
|
17
|
-
)
|
15
|
+
@backlog << HyperDex::Client::exception(status, @client.error_message)
|
18
16
|
end
|
19
17
|
end
|
20
18
|
|
@@ -61,10 +61,7 @@ class HyperDex::Client::Response
|
|
61
61
|
when HyperDex::Client::CMPFAIL
|
62
62
|
false
|
63
63
|
else
|
64
|
-
raise HyperDex::Client
|
65
|
-
status,
|
66
|
-
@client.error_message
|
67
|
-
)
|
64
|
+
raise HyperDex::Client.exception(status, @client.error_message)
|
68
65
|
end
|
69
66
|
end
|
70
67
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyperdex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.5.
|
4
|
+
version: 1.4.5.5.gf1ae4e6
|
5
5
|
prerelease: 8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-11-
|
12
|
+
date: 2014-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi-enum-generator
|
@@ -241,7 +241,7 @@ files:
|
|
241
241
|
- lib/hyperdex/client.rb
|
242
242
|
- lib/hyperdex/client/client.rb
|
243
243
|
- lib/hyperdex/client/deferred.rb
|
244
|
-
- lib/hyperdex/client/
|
244
|
+
- lib/hyperdex/client/exception.rb
|
245
245
|
- lib/hyperdex/client/iterator.rb
|
246
246
|
- lib/hyperdex/client/response.rb
|
247
247
|
- lib/hyperdex/ffi.rb
|
@@ -264,7 +264,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
264
264
|
version: '0'
|
265
265
|
segments:
|
266
266
|
- 0
|
267
|
-
hash: -
|
267
|
+
hash: -2098128700064581276
|
268
268
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
269
269
|
none: false
|
270
270
|
requirements:
|