Module: TokyoMessenger
- Defined in:
- lib/tokyo_messenger/balancer.rb,
lib/tokyo_messenger/balancer.rb,
lib/tokyo_messenger/balancer.rb,
ext/tokyo_messenger.c
Defined Under Namespace
Modules: Balancer Classes: DB, Query, Table
Constant Summary collapse
- ESUCCESS =
INT2NUM(TTESUCCESS)
- EINVALID =
INT2NUM(TTEINVALID)
- ENOHOST =
INT2NUM(TTENOHOST)
- EREFUSED =
INT2NUM(TTEREFUSED)
- ESEND =
INT2NUM(TTESEND)
- ERECV =
INT2NUM(TTERECV)
- EKEEP =
INT2NUM(TTEKEEP)
- ENOREC =
INT2NUM(TTENOREC)
- EMISC =
INT2NUM(TTEMISC)
- ITLEXICAL =
INT2NUM(RDBITLEXICAL)
- ITDECIMAL =
INT2NUM(RDBITDECIMAL)
- ITVOID =
INT2NUM(RDBITVOID)
- ITKEEP =
INT2NUM(RDBITKEEP)
Instance Method Summary collapse
- #add_double(*args) ⇒ Object (also: #adddouble)
- #add_int(*args) ⇒ Object (also: #addint, #increment)
-
#check(vkey) ⇒ Object
(also: #has_key?, #key?, #include?, #member?)
Rufus Compat.
- #close ⇒ Object
- #copy(path) ⇒ Object
-
#db_size ⇒ Object
Rufus Compat.
-
#delete_keys_with_prefix(*args) ⇒ Object
(also: #dfwmkeys)
Rufus Compat.
- #each_key ⇒ Object
- #ecode ⇒ Object
- #empty? ⇒ Boolean
- #errmsg(*args) ⇒ Object
- #ext(vext, vkey, vvalue) ⇒ Object (also: #run)
- #fwmkeys(*args) ⇒ Object
- #get_double(vkey) ⇒ Object
- #get_int(vkey) ⇒ Object
- #iterinit ⇒ Object
- #iternext ⇒ Object
- #keys ⇒ Object
- #misc(*args) ⇒ Object
- #optimize(*args) ⇒ Object
- #out(vkey) ⇒ Object (also: #delete)
-
#outlist(*args) ⇒ Object
(also: #mdelete, #ldelete)
TODO: merge out and mout?.
- #reconnect ⇒ Object
- #restore(vpath, vts, vopts) ⇒ Object
- #rnum ⇒ Object (also: #count, #size)
- #server ⇒ Object
- #setmst(vhost, vport, vts, vopts) ⇒ Object
- #stat ⇒ Object
- #sync ⇒ Object
- #vanish ⇒ Object (also: #clear)
Instance Method Details
#add_double(*args) ⇒ Object Also known as: adddouble
256 257 258 259 260 261 262 263 264 265 |
# File 'ext/tokyo_messenger_module.c', line 256
static VALUE mTokyoMessenger_add_double(int argc, VALUE *argv, VALUE vself){
VALUE vkey, vnum;
double dnum = 1.0;
rb_scan_args(argc, argv, "11", &vkey, &vnum);
vkey = StringValueEx(vkey);
if(NIL_P(vnum)) vnum = rb_float_new(dnum);
return mTokyoMessenger_adddouble(vself, vkey, NUM2DBL(vnum));
}
|
#add_int(*args) ⇒ Object Also known as: addint, increment
233 234 235 236 237 238 239 240 241 242 |
# File 'ext/tokyo_messenger_module.c', line 233
static VALUE mTokyoMessenger_add_int(int argc, VALUE *argv, VALUE vself){
VALUE vkey, vnum;
int inum = 1;
rb_scan_args(argc, argv, "11", &vkey, &vnum);
vkey = StringValueEx(vkey);
if(NIL_P(vnum)) vnum = INT2NUM(inum);
return mTokyoMessenger_addint(vself, vkey, NUM2INT(vnum));
}
|
#check(vkey) ⇒ Object Also known as: has_key?, key?, include?, member?
Rufus Compat
145 146 147 148 149 150 |
# File 'ext/tokyo_messenger_module.c', line 145
static VALUE mTokyoMessenger_check(VALUE vself, VALUE vkey){
TCRDB *db = mTokyoMessenger_getdb(vself);
vkey = StringValueEx(vkey);
return tcrdbvsiz(db, RSTRING_PTR(vkey), RSTRING_LEN(vkey)) >= 0 ? Qtrue : Qfalse;
}
|
#close ⇒ Object
25 26 27 28 29 30 31 32 33 34 |
# File 'ext/tokyo_messenger_module.c', line 25
static VALUE mTokyoMessenger_close(VALUE vself){
int ecode;
TCRDB *db = mTokyoMessenger_getdb(vself);
if(!tcrdbclose(db)){
ecode = tcrdbecode(db);
rb_raise(eTokyoMessengerError, "close error: %s", tcrdberrmsg(ecode));
}
return Qtrue;
}
|
#copy(path) ⇒ Object
294 295 296 297 298 299 |
# File 'ext/tokyo_messenger_module.c', line 294
static VALUE mTokyoMessenger_copy(VALUE vself, VALUE path){
TCRDB *db = mTokyoMessenger_getdb(vself);
Check_Type(path, T_STRING);
return tcrdbcopy(db, RSTRING_PTR(path)) ? Qtrue : Qfalse;
}
|
#db_size ⇒ Object
Rufus Compat
334 335 336 337 338 |
# File 'ext/tokyo_messenger_module.c', line 334 static VALUE mTokyoMessenger_size(VALUE vself){ TCRDB *db = mTokyoMessenger_getdb(vself); return LL2NUM(tcrdbsize(db)); } |
#delete_keys_with_prefix(*args) ⇒ Object Also known as: dfwmkeys
Rufus Compat
185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'ext/tokyo_messenger_module.c', line 185
static VALUE mTokyoMessenger_delete_keys_with_prefix(int argc, VALUE *argv, VALUE vself){
VALUE vprefix, vmax;
TCLIST *keys;
int max;
TCRDB *db = mTokyoMessenger_getdb(vself);
rb_scan_args(argc, argv, "11", &vprefix, &vmax);
vprefix = StringValueEx(vprefix);
max = (vmax == Qnil) ? -1 : NUM2INT(vmax);
keys = tcrdbfwmkeys(db, RSTRING_PTR(vprefix), RSTRING_LEN(vprefix), max);
tcrdbmisc(db, "outlist", 0, keys);
tclistdel(keys);
return Qnil;
}
|
#each_key ⇒ Object
376 377 378 379 380 381 382 383 384 385 386 387 |
# File 'ext/tokyo_messenger_module.c', line 376
static VALUE mTokyoMessenger_each_key(VALUE vself){
VALUE vrv;
char *kxstr;
if(rb_block_given_p() != Qtrue) rb_raise(rb_eArgError, "no block given");
TCRDB *db = mTokyoMessenger_getdb(vself);
vrv = Qnil;
tcrdbiterinit(db);
while((kxstr = tcrdbiternext2(db)) != NULL){
vrv = rb_yield_values(1, rb_str_new2(kxstr));
}
return vrv;
}
|
#ecode ⇒ Object
100 101 102 103 104 |
# File 'ext/tokyo_messenger_module.c', line 100 static VALUE mTokyoMessenger_ecode(VALUE vself){ TCRDB *db = mTokyoMessenger_getdb(vself); return INT2NUM(tcrdbecode(db)); } |
#empty? ⇒ Boolean
328 329 330 331 332 |
# File 'ext/tokyo_messenger_module.c', line 328 static VALUE mTokyoMessenger_empty(VALUE vself){ TCRDB *db = mTokyoMessenger_getdb(vself); return tcrdbrnum(db) < 1 ? Qtrue : Qfalse; } |
#errmsg(*args) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 |
# File 'ext/tokyo_messenger_module.c', line 88
static VALUE mTokyoMessenger_errmsg(int argc, VALUE *argv, VALUE vself){
VALUE vecode;
const char *msg;
int ecode;
TCRDB *db = mTokyoMessenger_getdb(vself);
rb_scan_args(argc, argv, "01", &vecode);
ecode = (vecode == Qnil) ? tcrdbecode(db) : NUM2INT(vecode);
msg = tcrdberrmsg(ecode);
return rb_str_new2(msg);
}
|
#ext(vext, vkey, vvalue) ⇒ Object Also known as: run
361 362 363 364 365 366 367 368 369 370 371 372 373 374 |
# File 'ext/tokyo_messenger_module.c', line 361
static VALUE mTokyoMessenger_ext(VALUE vself, VALUE vext, VALUE vkey, VALUE vvalue){
int vsiz;
char *vbuf;
TCRDB *db = mTokyoMessenger_getdb(vself);
vext = StringValueEx(vext);
vkey = StringValueEx(vkey);
vvalue = StringValueEx(vvalue);
if(!(vbuf = tcrdbext(db, RSTRING_PTR(vext), 0, RSTRING_PTR(vkey), RSTRING_LEN(vkey), RSTRING_PTR(vvalue), RSTRING_LEN(vvalue), &vsiz))){
return Qnil;
} else {
return rb_str_new(vbuf, vsiz);
}
}
|
#fwmkeys(*args) ⇒ Object
170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'ext/tokyo_messenger_module.c', line 170
static VALUE mTokyoMessenger_fwmkeys(int argc, VALUE *argv, VALUE vself){
VALUE vprefix, vmax, vary;
TCLIST *keys;
int max;
TCRDB *db = mTokyoMessenger_getdb(vself);
rb_scan_args(argc, argv, "11", &vprefix, &vmax);
vprefix = StringValueEx(vprefix);
max = (vmax == Qnil) ? -1 : NUM2INT(vmax);
keys = tcrdbfwmkeys(db, RSTRING_PTR(vprefix), RSTRING_LEN(vprefix), max);
vary = listtovary(keys);
tclistdel(keys);
return vary;
}
|
#get_double(vkey) ⇒ Object
267 268 269 |
# File 'ext/tokyo_messenger_module.c', line 267
static VALUE mTokyoMessenger_get_double(VALUE vself, VALUE vkey){
return mTokyoMessenger_adddouble(vself, vkey, 0.0);
}
|
#get_int(vkey) ⇒ Object
244 245 246 |
# File 'ext/tokyo_messenger_module.c', line 244
static VALUE mTokyoMessenger_get_int(VALUE vself, VALUE vkey){
return mTokyoMessenger_addint(vself, vkey, 0);
}
|
#iterinit ⇒ Object
152 153 154 155 156 |
# File 'ext/tokyo_messenger_module.c', line 152 static VALUE mTokyoMessenger_iterinit(VALUE vself){ TCRDB *db = mTokyoMessenger_getdb(vself); return tcrdbiterinit(db) ? Qtrue : Qfalse; } |
#iternext ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 |
# File 'ext/tokyo_messenger_module.c', line 158
static VALUE mTokyoMessenger_iternext(VALUE vself){
VALUE vval;
char *vbuf;
TCRDB *db = mTokyoMessenger_getdb(vself);
if(!(vbuf = tcrdbiternext2(db))) return Qnil;
vval = rb_str_new2(vbuf);
tcfree(vbuf);
return vval;
}
|
#keys ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'ext/tokyo_messenger_module.c', line 200
static VALUE mTokyoMessenger_keys(VALUE vself){
/*
VALUE vary;
char *kxstr;
TCRDB *db = mTokyoMessenger_getdb(vself);
vary = rb_ary_new2(tcrdbrnum(db));
tcrdbiterinit(db);
while((kxstr = tcrdbiternext2(db)) != NULL){
rb_ary_push(vary, rb_str_new2(kxstr));
}
return vary;
*/
// Using forward matching keys with an empty string is 100x faster than iternext+get
VALUE vary;
TCLIST *keys;
char *prefix;
TCRDB *db = mTokyoMessenger_getdb(vself);
prefix = "";
keys = tcrdbfwmkeys2(db, prefix, -1);
vary = listtovary(keys);
tclistdel(keys);
return vary;
}
|
#misc(*args) ⇒ Object
346 347 348 349 350 351 352 353 354 355 356 357 358 359 |
# File 'ext/tokyo_messenger_module.c', line 346
static VALUE mTokyoMessenger_misc(int argc, VALUE *argv, VALUE vself){
VALUE vname, vopts, vargs, vary;
TCLIST *list, *args;
TCRDB *db = mTokyoMessenger_getdb(vself);
rb_scan_args(argc, argv, "13", &vname, &vopts, &vargs);
args = varytolist(vargs);
vname = StringValueEx(vname);
list = tcrdbmisc(db, RSTRING_PTR(vname), NUM2INT(vopts), args);
vary = listtovary(list);
tclistdel(list);
return vary;
}
|
#optimize(*args) ⇒ Object
277 278 279 280 281 282 283 284 285 286 |
# File 'ext/tokyo_messenger_module.c', line 277
static VALUE mTokyoMessenger_optimize(int argc, VALUE *argv, VALUE vself){
VALUE vparams;
const char *params = NULL;
TCRDB *db = mTokyoMessenger_getdb(vself);
rb_scan_args(argc, argv, "01", &vparams);
if(NIL_P(vparams)) vparams = Qnil;
if(vparams != Qnil) params = RSTRING_PTR(vparams);
return tcrdboptimize(db, params) ? Qtrue : Qfalse;
}
|
#out(vkey) ⇒ Object Also known as: delete
106 107 108 109 110 111 |
# File 'ext/tokyo_messenger_module.c', line 106
static VALUE mTokyoMessenger_out(VALUE vself, VALUE vkey){
TCRDB *db = mTokyoMessenger_getdb(vself);
vkey = StringValueEx(vkey);
return tcrdbout(db, RSTRING_PTR(vkey), RSTRING_LEN(vkey)) ? Qtrue : Qfalse;
}
|
#outlist(*args) ⇒ Object Also known as: mdelete, ldelete
TODO: merge out and mout?
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'ext/tokyo_messenger_module.c', line 114
static VALUE mTokyoMessenger_outlist(int argc, VALUE *argv, VALUE vself){
VALUE vkeys, vary, vvalue;
TCLIST *list, *result;
TCRDB *db = mTokyoMessenger_getdb(vself);
rb_scan_args(argc, argv, "*", &vkeys);
// I really hope there is a better way to do this
if (RARRAY_LEN(vkeys) == 1) {
vvalue = rb_ary_entry(vkeys, 0);
switch (TYPE(vvalue)){
case T_STRING:
case T_FIXNUM:
break;
case T_ARRAY:
vkeys = vvalue;
break;
case T_OBJECT:
vkeys = rb_convert_type(vvalue, T_ARRAY, "Array", "to_a");
break;
}
}
Check_Type(vkeys, T_ARRAY);
list = varytolist(vkeys);
result = tcrdbmisc(db, "outlist", 0, list);
tclistdel(list);
vary = listtovary(result);
tclistdel(result);
return vary;
}
|
#reconnect ⇒ Object
58 59 60 61 62 63 64 65 |
# File 'ext/tokyo_messenger_module.c', line 58
static VALUE mTokyoMessenger_reconnect(VALUE vself){
TCRDB *db = mTokyoMessenger_getdb(vself);
if(db->fd != -1) mTokyoMessenger_close(vself);
db = tcrdbnew();
rb_iv_set(vself, RDBVNDATA, Data_Wrap_Struct(rb_cObject, 0, mTokyoMessenger_free, db));
return mTokyoMessenger_connect(vself);
}
|
#restore(vpath, vts, vopts) ⇒ Object
301 302 303 304 305 306 307 308 309 310 |
# File 'ext/tokyo_messenger_module.c', line 301
static VALUE mTokyoMessenger_restore(VALUE vself, VALUE vpath, VALUE vts, VALUE vopts){
uint64_t ts;
int opts;
TCRDB *db = mTokyoMessenger_getdb(vself);
Check_Type(vpath, T_STRING);
ts = (uint64_t) FIX2INT(vts);
opts = FIX2INT(vopts);
return tcrdbrestore(db, RSTRING_PTR(vpath), ts, opts) ? Qtrue : Qfalse;
}
|
#rnum ⇒ Object Also known as: count, size
322 323 324 325 326 |
# File 'ext/tokyo_messenger_module.c', line 322 static VALUE mTokyoMessenger_rnum(VALUE vself){ TCRDB *db = mTokyoMessenger_getdb(vself); return LL2NUM(tcrdbrnum(db)); } |
#server ⇒ Object
21 22 23 |
# File 'ext/tokyo_messenger_module.c', line 21 static VALUE mTokyoMessenger_server(VALUE vself){ return rb_iv_get(vself, "@server"); } |
#setmst(vhost, vport, vts, vopts) ⇒ Object
312 313 314 315 316 317 318 319 320 |
# File 'ext/tokyo_messenger_module.c', line 312
static VALUE mTokyoMessenger_setmst(VALUE vself, VALUE vhost, VALUE vport, VALUE vts, VALUE vopts){
uint64_t ts;
int opts;
TCRDB *db = mTokyoMessenger_getdb(vself);
ts = (uint64_t) FIX2INT(vts);
opts = FIX2INT(vopts);
return tcrdbsetmst(db, RSTRING_PTR(vhost), FIX2INT(vport), ts, opts) ? Qtrue : Qfalse;
}
|
#stat ⇒ Object
340 341 342 343 344 |
# File 'ext/tokyo_messenger_module.c', line 340 static VALUE mTokyoMessenger_stat(VALUE vself){ TCRDB *db = mTokyoMessenger_getdb(vself); return rb_str_new2(tcrdbstat(db)); } |
#sync ⇒ Object
271 272 273 274 275 |
# File 'ext/tokyo_messenger_module.c', line 271 static VALUE mTokyoMessenger_sync(VALUE vself){ TCRDB *db = mTokyoMessenger_getdb(vself); return tcrdbsync(db) ? Qtrue : Qfalse; } |
#vanish ⇒ Object Also known as: clear
288 289 290 291 292 |
# File 'ext/tokyo_messenger_module.c', line 288 static VALUE mTokyoMessenger_vanish(VALUE vself){ TCRDB *db = mTokyoMessenger_getdb(vself); return tcrdbvanish(db) ? Qtrue : Qfalse; } |