rocksdb-native 2.6.6 → 2.6.8
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.
- package/CMakeLists.txt +1 -1
- package/binding.c +299 -242
- package/lib/iterator.js +6 -7
- package/package.json +1 -1
- package/prebuilds/android-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/android-ia32/rocksdb-native.bare +0 -0
- package/prebuilds/android-x64/rocksdb-native.bare +0 -0
- package/prebuilds/darwin-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/darwin-arm64/rocksdb-native.node +0 -0
- package/prebuilds/darwin-x64/rocksdb-native.bare +0 -0
- package/prebuilds/darwin-x64/rocksdb-native.node +0 -0
- package/prebuilds/ios-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/ios-arm64-simulator/rocksdb-native.bare +0 -0
- package/prebuilds/ios-x64-simulator/rocksdb-native.bare +0 -0
- package/prebuilds/linux-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/linux-arm64/rocksdb-native.node +0 -0
- package/prebuilds/linux-x64/rocksdb-native.bare +0 -0
- package/prebuilds/linux-x64/rocksdb-native.node +0 -0
- package/prebuilds/win32-arm64/rocksdb-native.bare +0 -0
- package/prebuilds/win32-arm64/rocksdb-native.node +0 -0
- package/prebuilds/win32-x64/rocksdb-native.bare +0 -0
- package/prebuilds/win32-x64/rocksdb-native.node +0 -0
package/CMakeLists.txt
CHANGED
package/binding.c
CHANGED
|
@@ -63,6 +63,11 @@ typedef struct {
|
|
|
63
63
|
js_ref_t *on_open;
|
|
64
64
|
js_ref_t *on_close;
|
|
65
65
|
js_ref_t *on_read;
|
|
66
|
+
|
|
67
|
+
bool closing;
|
|
68
|
+
bool exiting;
|
|
69
|
+
|
|
70
|
+
js_deferred_teardown_t *teardown;
|
|
66
71
|
} rocksdb_native_iterator_t;
|
|
67
72
|
|
|
68
73
|
typedef struct {
|
|
@@ -114,30 +119,40 @@ rocksdb_native__on_close(rocksdb_close_t *handle, int status) {
|
|
|
114
119
|
|
|
115
120
|
js_deferred_teardown_t *teardown = db->teardown;
|
|
116
121
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
122
|
+
if (db->exiting) {
|
|
123
|
+
if (db->closing) {
|
|
124
|
+
err = js_delete_reference(env, req->on_close);
|
|
125
|
+
assert(err == 0);
|
|
120
126
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
127
|
+
err = js_delete_reference(env, req->ctx);
|
|
128
|
+
assert(err == 0);
|
|
129
|
+
} else {
|
|
130
|
+
free(req);
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
js_handle_scope_t *scope;
|
|
134
|
+
err = js_open_handle_scope(env, &scope);
|
|
135
|
+
assert(err == 0);
|
|
124
136
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
137
|
+
js_value_t *ctx;
|
|
138
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
139
|
+
assert(err == 0);
|
|
128
140
|
|
|
129
|
-
|
|
130
|
-
|
|
141
|
+
js_value_t *cb;
|
|
142
|
+
err = js_get_reference_value(env, req->on_close, &cb);
|
|
143
|
+
assert(err == 0);
|
|
131
144
|
|
|
132
|
-
|
|
133
|
-
|
|
145
|
+
err = js_delete_reference(env, req->on_close);
|
|
146
|
+
assert(err == 0);
|
|
147
|
+
|
|
148
|
+
err = js_delete_reference(env, req->ctx);
|
|
149
|
+
assert(err == 0);
|
|
134
150
|
|
|
135
|
-
if (!db->exiting) {
|
|
136
151
|
js_call_function_with_checkpoint(env, ctx, cb, 0, NULL, NULL);
|
|
137
|
-
}
|
|
138
152
|
|
|
139
|
-
|
|
140
|
-
|
|
153
|
+
err = js_close_handle_scope(env, scope);
|
|
154
|
+
assert(err == 0);
|
|
155
|
+
}
|
|
141
156
|
|
|
142
157
|
err = js_finish_deferred_teardown_callback(teardown);
|
|
143
158
|
assert(err == 0);
|
|
@@ -155,40 +170,46 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
|
|
|
155
170
|
|
|
156
171
|
js_env_t *env = req->env;
|
|
157
172
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
js_value_t *ctx;
|
|
163
|
-
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
164
|
-
assert(err == 0);
|
|
165
|
-
|
|
166
|
-
js_value_t *cb;
|
|
167
|
-
err = js_get_reference_value(env, req->on_open, &cb);
|
|
168
|
-
assert(err == 0);
|
|
173
|
+
if (db->exiting) {
|
|
174
|
+
err = js_delete_reference(env, req->on_open);
|
|
175
|
+
assert(err == 0);
|
|
169
176
|
|
|
170
|
-
|
|
171
|
-
|
|
177
|
+
err = js_delete_reference(env, req->ctx);
|
|
178
|
+
assert(err == 0);
|
|
179
|
+
} else {
|
|
180
|
+
js_handle_scope_t *scope;
|
|
181
|
+
err = js_open_handle_scope(env, &scope);
|
|
182
|
+
assert(err == 0);
|
|
172
183
|
|
|
173
|
-
|
|
174
|
-
|
|
184
|
+
js_value_t *ctx;
|
|
185
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
186
|
+
assert(err == 0);
|
|
175
187
|
|
|
176
|
-
|
|
188
|
+
js_value_t *cb;
|
|
189
|
+
err = js_get_reference_value(env, req->on_open, &cb);
|
|
190
|
+
assert(err == 0);
|
|
177
191
|
|
|
178
|
-
|
|
179
|
-
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
192
|
+
err = js_delete_reference(env, req->on_open);
|
|
180
193
|
assert(err == 0);
|
|
181
|
-
|
|
182
|
-
err =
|
|
194
|
+
|
|
195
|
+
err = js_delete_reference(env, req->ctx);
|
|
183
196
|
assert(err == 0);
|
|
184
|
-
}
|
|
185
197
|
|
|
186
|
-
|
|
198
|
+
js_value_t *error;
|
|
199
|
+
|
|
200
|
+
if (req->handle.error) {
|
|
201
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
202
|
+
assert(err == 0);
|
|
203
|
+
} else {
|
|
204
|
+
err = js_get_null(env, &error);
|
|
205
|
+
assert(err == 0);
|
|
206
|
+
}
|
|
207
|
+
|
|
187
208
|
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
188
|
-
}
|
|
189
209
|
|
|
190
|
-
|
|
191
|
-
|
|
210
|
+
err = js_close_handle_scope(env, scope);
|
|
211
|
+
assert(err == 0);
|
|
212
|
+
}
|
|
192
213
|
}
|
|
193
214
|
|
|
194
215
|
static void
|
|
@@ -203,36 +224,12 @@ rocksdb_native__on_teardown(js_deferred_teardown_t *handle, void *data) {
|
|
|
203
224
|
|
|
204
225
|
if (db->closing) return;
|
|
205
226
|
|
|
206
|
-
|
|
207
|
-
err = js_open_handle_scope(env, &scope);
|
|
208
|
-
assert(err == 0);
|
|
209
|
-
|
|
210
|
-
js_value_t *ctx;
|
|
211
|
-
|
|
212
|
-
rocksdb_native_close_t *req;
|
|
213
|
-
err = js_create_arraybuffer(env, sizeof(rocksdb_native_close_t), (void **) &req, &ctx);
|
|
214
|
-
assert(err == 0);
|
|
227
|
+
rocksdb_native_close_t *req = malloc(sizeof(rocksdb_native_close_t));
|
|
215
228
|
|
|
216
|
-
req->env = env;
|
|
217
229
|
req->handle.data = (void *) req;
|
|
218
230
|
|
|
219
|
-
err = js_create_reference(env, ctx, 1, &req->ctx);
|
|
220
|
-
assert(err == 0);
|
|
221
|
-
|
|
222
|
-
js_value_t *on_close;
|
|
223
|
-
err = js_get_null(env, &on_close);
|
|
224
|
-
assert(err == 0);
|
|
225
|
-
|
|
226
|
-
err = js_create_reference(env, on_close, 1, &req->on_close);
|
|
227
|
-
assert(err == 0);
|
|
228
|
-
|
|
229
|
-
db->closing = true;
|
|
230
|
-
|
|
231
231
|
err = rocksdb_close(&db->handle, &req->handle, rocksdb_native__on_close);
|
|
232
232
|
assert(err == 0);
|
|
233
|
-
|
|
234
|
-
err = js_close_handle_scope(env, scope);
|
|
235
|
-
assert(err == 0);
|
|
236
233
|
}
|
|
237
234
|
|
|
238
235
|
static js_value_t *
|
|
@@ -371,14 +368,6 @@ static js_value_t *
|
|
|
371
368
|
rocksdb_native_iterator_init(js_env_t *env, js_callback_info_t *info) {
|
|
372
369
|
int err;
|
|
373
370
|
|
|
374
|
-
size_t argc = 4;
|
|
375
|
-
js_value_t *argv[4];
|
|
376
|
-
|
|
377
|
-
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
378
|
-
assert(err == 0);
|
|
379
|
-
|
|
380
|
-
assert(argc == 4);
|
|
381
|
-
|
|
382
371
|
js_value_t *handle;
|
|
383
372
|
|
|
384
373
|
rocksdb_native_iterator_t *req;
|
|
@@ -386,20 +375,10 @@ rocksdb_native_iterator_init(js_env_t *env, js_callback_info_t *info) {
|
|
|
386
375
|
assert(err == 0);
|
|
387
376
|
|
|
388
377
|
req->env = env;
|
|
378
|
+
req->closing = false;
|
|
379
|
+
req->exiting = false;
|
|
389
380
|
req->handle.data = (void *) req;
|
|
390
381
|
|
|
391
|
-
err = js_create_reference(env, argv[0], 1, &req->ctx);
|
|
392
|
-
assert(err == 0);
|
|
393
|
-
|
|
394
|
-
err = js_create_reference(env, argv[1], 1, &req->on_open);
|
|
395
|
-
assert(err == 0);
|
|
396
|
-
|
|
397
|
-
err = js_create_reference(env, argv[2], 1, &req->on_close);
|
|
398
|
-
assert(err == 0);
|
|
399
|
-
|
|
400
|
-
err = js_create_reference(env, argv[3], 1, &req->on_read);
|
|
401
|
-
assert(err == 0);
|
|
402
|
-
|
|
403
382
|
return handle;
|
|
404
383
|
}
|
|
405
384
|
|
|
@@ -440,6 +419,75 @@ rocksdb_native_iterator_buffer(js_env_t *env, js_callback_info_t *info) {
|
|
|
440
419
|
return handle;
|
|
441
420
|
}
|
|
442
421
|
|
|
422
|
+
static void
|
|
423
|
+
rocksdb_native__on_iterator_close(rocksdb_iterator_t *handle, int status) {
|
|
424
|
+
int err;
|
|
425
|
+
|
|
426
|
+
assert(status == 0);
|
|
427
|
+
|
|
428
|
+
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
|
|
429
|
+
|
|
430
|
+
js_env_t *env = req->env;
|
|
431
|
+
|
|
432
|
+
js_deferred_teardown_t *teardown = req->teardown;
|
|
433
|
+
|
|
434
|
+
if (req->exiting) {
|
|
435
|
+
err = js_delete_reference(env, req->on_open);
|
|
436
|
+
assert(err == 0);
|
|
437
|
+
|
|
438
|
+
err = js_delete_reference(env, req->on_close);
|
|
439
|
+
assert(err == 0);
|
|
440
|
+
|
|
441
|
+
err = js_delete_reference(env, req->on_read);
|
|
442
|
+
assert(err == 0);
|
|
443
|
+
|
|
444
|
+
err = js_delete_reference(env, req->ctx);
|
|
445
|
+
assert(err == 0);
|
|
446
|
+
} else {
|
|
447
|
+
js_handle_scope_t *scope;
|
|
448
|
+
err = js_open_handle_scope(env, &scope);
|
|
449
|
+
assert(err == 0);
|
|
450
|
+
|
|
451
|
+
js_value_t *ctx;
|
|
452
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
453
|
+
assert(err == 0);
|
|
454
|
+
|
|
455
|
+
js_value_t *cb;
|
|
456
|
+
err = js_get_reference_value(env, req->on_close, &cb);
|
|
457
|
+
assert(err == 0);
|
|
458
|
+
|
|
459
|
+
err = js_delete_reference(env, req->on_open);
|
|
460
|
+
assert(err == 0);
|
|
461
|
+
|
|
462
|
+
err = js_delete_reference(env, req->on_close);
|
|
463
|
+
assert(err == 0);
|
|
464
|
+
|
|
465
|
+
err = js_delete_reference(env, req->on_read);
|
|
466
|
+
assert(err == 0);
|
|
467
|
+
|
|
468
|
+
err = js_delete_reference(env, req->ctx);
|
|
469
|
+
assert(err == 0);
|
|
470
|
+
|
|
471
|
+
js_value_t *error;
|
|
472
|
+
|
|
473
|
+
if (req->handle.error) {
|
|
474
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
475
|
+
assert(err == 0);
|
|
476
|
+
} else {
|
|
477
|
+
err = js_get_null(env, &error);
|
|
478
|
+
assert(err == 0);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
482
|
+
|
|
483
|
+
err = js_close_handle_scope(env, scope);
|
|
484
|
+
assert(err == 0);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
err = js_finish_deferred_teardown_callback(teardown);
|
|
488
|
+
assert(err == 0);
|
|
489
|
+
}
|
|
490
|
+
|
|
443
491
|
static void
|
|
444
492
|
rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
|
|
445
493
|
int err;
|
|
@@ -448,7 +496,7 @@ rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
|
|
|
448
496
|
|
|
449
497
|
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
|
|
450
498
|
|
|
451
|
-
|
|
499
|
+
if (req->exiting) return;
|
|
452
500
|
|
|
453
501
|
js_env_t *env = req->env;
|
|
454
502
|
|
|
@@ -474,25 +522,37 @@ rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
|
|
|
474
522
|
assert(err == 0);
|
|
475
523
|
}
|
|
476
524
|
|
|
477
|
-
|
|
478
|
-
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
479
|
-
}
|
|
525
|
+
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
480
526
|
|
|
481
527
|
err = js_close_handle_scope(env, scope);
|
|
482
528
|
assert(err == 0);
|
|
483
529
|
}
|
|
484
530
|
|
|
531
|
+
static void
|
|
532
|
+
rocksdb_native__on_iterator_teardown(js_deferred_teardown_t *handle, void *data) {
|
|
533
|
+
int err;
|
|
534
|
+
|
|
535
|
+
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) data;
|
|
536
|
+
|
|
537
|
+
req->exiting = true;
|
|
538
|
+
|
|
539
|
+
if (req->closing) return;
|
|
540
|
+
|
|
541
|
+
err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close);
|
|
542
|
+
assert(err == 0);
|
|
543
|
+
}
|
|
544
|
+
|
|
485
545
|
static js_value_t *
|
|
486
546
|
rocksdb_native_iterator_open(js_env_t *env, js_callback_info_t *info) {
|
|
487
547
|
int err;
|
|
488
548
|
|
|
489
|
-
size_t argc =
|
|
490
|
-
js_value_t *argv[
|
|
549
|
+
size_t argc = 12;
|
|
550
|
+
js_value_t *argv[12];
|
|
491
551
|
|
|
492
552
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
493
553
|
assert(err == 0);
|
|
494
554
|
|
|
495
|
-
assert(argc ==
|
|
555
|
+
assert(argc == 12);
|
|
496
556
|
|
|
497
557
|
rocksdb_native_t *db;
|
|
498
558
|
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
@@ -533,64 +593,25 @@ rocksdb_native_iterator_open(js_env_t *env, js_callback_info_t *info) {
|
|
|
533
593
|
assert(err == 0);
|
|
534
594
|
}
|
|
535
595
|
|
|
536
|
-
err =
|
|
596
|
+
err = js_create_reference(env, argv[8], 1, &req->ctx);
|
|
537
597
|
assert(err == 0);
|
|
538
598
|
|
|
539
|
-
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
static void
|
|
543
|
-
rocksdb_native__on_iterator_close(rocksdb_iterator_t *handle, int status) {
|
|
544
|
-
int err;
|
|
545
|
-
|
|
546
|
-
assert(status == 0);
|
|
547
|
-
|
|
548
|
-
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
|
|
549
|
-
|
|
550
|
-
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
551
|
-
|
|
552
|
-
js_env_t *env = req->env;
|
|
553
|
-
|
|
554
|
-
js_handle_scope_t *scope;
|
|
555
|
-
err = js_open_handle_scope(env, &scope);
|
|
599
|
+
err = js_create_reference(env, argv[9], 1, &req->on_open);
|
|
556
600
|
assert(err == 0);
|
|
557
601
|
|
|
558
|
-
|
|
559
|
-
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
602
|
+
err = js_create_reference(env, argv[10], 1, &req->on_close);
|
|
560
603
|
assert(err == 0);
|
|
561
604
|
|
|
562
|
-
|
|
563
|
-
err = js_get_reference_value(env, req->on_close, &cb);
|
|
564
|
-
assert(err == 0);
|
|
565
|
-
|
|
566
|
-
err = js_delete_reference(env, req->on_open);
|
|
567
|
-
assert(err == 0);
|
|
568
|
-
|
|
569
|
-
err = js_delete_reference(env, req->on_close);
|
|
605
|
+
err = js_create_reference(env, argv[11], 1, &req->on_read);
|
|
570
606
|
assert(err == 0);
|
|
571
607
|
|
|
572
|
-
err =
|
|
608
|
+
err = rocksdb_iterator_open(&db->handle, &req->handle, range, reverse, &options, rocksdb_native__on_iterator_open);
|
|
573
609
|
assert(err == 0);
|
|
574
610
|
|
|
575
|
-
err =
|
|
611
|
+
err = js_add_deferred_teardown_callback(env, rocksdb_native__on_iterator_teardown, (void *) req, &req->teardown);
|
|
576
612
|
assert(err == 0);
|
|
577
613
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
if (req->handle.error) {
|
|
581
|
-
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
582
|
-
assert(err == 0);
|
|
583
|
-
} else {
|
|
584
|
-
err = js_get_null(env, &error);
|
|
585
|
-
assert(err == 0);
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
if (!db->exiting) {
|
|
589
|
-
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
err = js_close_handle_scope(env, scope);
|
|
593
|
-
assert(err == 0);
|
|
614
|
+
return NULL;
|
|
594
615
|
}
|
|
595
616
|
|
|
596
617
|
static js_value_t *
|
|
@@ -609,6 +630,8 @@ rocksdb_native_iterator_close(js_env_t *env, js_callback_info_t *info) {
|
|
|
609
630
|
err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
|
|
610
631
|
assert(err == 0);
|
|
611
632
|
|
|
633
|
+
req->closing = true;
|
|
634
|
+
|
|
612
635
|
err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close);
|
|
613
636
|
assert(err == 0);
|
|
614
637
|
|
|
@@ -625,66 +648,76 @@ rocksdb_native__on_iterator_read(rocksdb_iterator_t *handle, int status) {
|
|
|
625
648
|
|
|
626
649
|
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
627
650
|
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
js_handle_scope_t *scope;
|
|
631
|
-
err = js_open_handle_scope(env, &scope);
|
|
632
|
-
assert(err == 0);
|
|
633
|
-
|
|
634
|
-
js_value_t *ctx;
|
|
635
|
-
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
636
|
-
assert(err == 0);
|
|
651
|
+
size_t len = req->handle.len;
|
|
637
652
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
653
|
+
if (db->exiting) {
|
|
654
|
+
if (status == 0 && req->handle.error == NULL) {
|
|
655
|
+
for (size_t i = 0; i < len; i++) {
|
|
656
|
+
js_value_t *result;
|
|
641
657
|
|
|
642
|
-
|
|
658
|
+
rocksdb_slice_destroy(&req->keys[i]);
|
|
643
659
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
660
|
+
rocksdb_slice_destroy(&req->values[i]);
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
} else {
|
|
664
|
+
js_env_t *env = req->env;
|
|
647
665
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
666
|
+
js_handle_scope_t *scope;
|
|
667
|
+
err = js_open_handle_scope(env, &scope);
|
|
668
|
+
assert(err == 0);
|
|
651
669
|
|
|
652
|
-
|
|
670
|
+
js_value_t *ctx;
|
|
671
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
672
|
+
assert(err == 0);
|
|
653
673
|
|
|
654
|
-
|
|
655
|
-
err =
|
|
674
|
+
js_value_t *cb;
|
|
675
|
+
err = js_get_reference_value(env, req->on_read, &cb);
|
|
656
676
|
assert(err == 0);
|
|
657
|
-
|
|
658
|
-
|
|
677
|
+
|
|
678
|
+
js_value_t *keys;
|
|
679
|
+
err = js_create_array_with_length(env, len, &keys);
|
|
659
680
|
assert(err == 0);
|
|
660
681
|
|
|
661
|
-
|
|
662
|
-
|
|
682
|
+
js_value_t *values;
|
|
683
|
+
err = js_create_array_with_length(env, len, &values);
|
|
684
|
+
assert(err == 0);
|
|
663
685
|
|
|
664
|
-
|
|
686
|
+
js_value_t *error;
|
|
665
687
|
|
|
666
|
-
|
|
688
|
+
if (req->handle.error) {
|
|
689
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
667
690
|
assert(err == 0);
|
|
668
|
-
|
|
669
|
-
err =
|
|
691
|
+
} else {
|
|
692
|
+
err = js_get_null(env, &error);
|
|
670
693
|
assert(err == 0);
|
|
671
694
|
|
|
672
|
-
|
|
695
|
+
for (size_t i = 0; i < len; i++) {
|
|
696
|
+
js_value_t *result;
|
|
673
697
|
|
|
674
|
-
|
|
675
|
-
assert(err == 0);
|
|
698
|
+
rocksdb_slice_t *key = &req->keys[i];
|
|
676
699
|
|
|
677
|
-
|
|
678
|
-
|
|
700
|
+
err = js_create_external_arraybuffer(env, (void *) key->data, key->len, rocksdb_native__on_free, NULL, &result);
|
|
701
|
+
assert(err == 0);
|
|
702
|
+
|
|
703
|
+
err = js_set_element(env, keys, i, result);
|
|
704
|
+
assert(err == 0);
|
|
705
|
+
|
|
706
|
+
rocksdb_slice_t *value = &req->values[i];
|
|
707
|
+
|
|
708
|
+
err = js_create_external_arraybuffer(env, (void *) value->data, value->len, rocksdb_native__on_free, NULL, &result);
|
|
709
|
+
assert(err == 0);
|
|
710
|
+
|
|
711
|
+
err = js_set_element(env, values, i, result);
|
|
712
|
+
assert(err == 0);
|
|
713
|
+
}
|
|
679
714
|
}
|
|
680
|
-
}
|
|
681
715
|
|
|
682
|
-
if (!db->exiting) {
|
|
683
716
|
js_call_function_with_checkpoint(env, ctx, cb, 3, (js_value_t *[]) {error, keys, values}, NULL);
|
|
684
|
-
}
|
|
685
717
|
|
|
686
|
-
|
|
687
|
-
|
|
718
|
+
err = js_close_handle_scope(env, scope);
|
|
719
|
+
assert(err == 0);
|
|
720
|
+
}
|
|
688
721
|
}
|
|
689
722
|
|
|
690
723
|
static js_value_t *
|
|
@@ -780,62 +813,80 @@ rocksdb_native__on_read(rocksdb_read_batch_t *handle, int status) {
|
|
|
780
813
|
|
|
781
814
|
js_env_t *env = req->env;
|
|
782
815
|
|
|
783
|
-
js_handle_scope_t *scope;
|
|
784
|
-
err = js_open_handle_scope(env, &scope);
|
|
785
|
-
assert(err == 0);
|
|
786
|
-
|
|
787
816
|
size_t len = req->handle.len;
|
|
788
817
|
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
818
|
+
if (db->exiting) {
|
|
819
|
+
if (status == 0) {
|
|
820
|
+
for (size_t i = 0; i < len; i++) {
|
|
821
|
+
js_value_t *result;
|
|
792
822
|
|
|
793
|
-
|
|
794
|
-
err = js_create_array_with_length(env, len, &values);
|
|
795
|
-
assert(err == 0);
|
|
823
|
+
char *error = req->errors[i];
|
|
796
824
|
|
|
797
|
-
|
|
798
|
-
js_value_t *result;
|
|
825
|
+
if (error) continue;
|
|
799
826
|
|
|
800
|
-
|
|
827
|
+
rocksdb_slice_destroy(&req->reads[i].value);
|
|
828
|
+
}
|
|
829
|
+
}
|
|
801
830
|
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
assert(err == 0);
|
|
831
|
+
err = js_delete_reference(env, req->on_status);
|
|
832
|
+
assert(err == 0);
|
|
805
833
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
834
|
+
err = js_delete_reference(env, req->ctx);
|
|
835
|
+
assert(err == 0);
|
|
836
|
+
} else {
|
|
837
|
+
js_handle_scope_t *scope;
|
|
838
|
+
err = js_open_handle_scope(env, &scope);
|
|
839
|
+
assert(err == 0);
|
|
810
840
|
|
|
811
|
-
|
|
812
|
-
|
|
841
|
+
js_value_t *errors;
|
|
842
|
+
err = js_create_array_with_length(env, len, &errors);
|
|
843
|
+
assert(err == 0);
|
|
813
844
|
|
|
814
|
-
|
|
815
|
-
|
|
845
|
+
js_value_t *values;
|
|
846
|
+
err = js_create_array_with_length(env, len, &values);
|
|
847
|
+
assert(err == 0);
|
|
848
|
+
|
|
849
|
+
for (size_t i = 0; i < len; i++) {
|
|
850
|
+
js_value_t *result;
|
|
851
|
+
|
|
852
|
+
char *error = req->errors[i];
|
|
853
|
+
|
|
854
|
+
if (error) {
|
|
855
|
+
err = js_create_string_utf8(env, (utf8_t *) error, -1, &result);
|
|
856
|
+
assert(err == 0);
|
|
857
|
+
|
|
858
|
+
err = js_set_element(env, errors, i, result);
|
|
859
|
+
assert(err == 0);
|
|
860
|
+
} else {
|
|
861
|
+
rocksdb_slice_t *slice = &req->reads[i].value;
|
|
862
|
+
|
|
863
|
+
err = js_create_external_arraybuffer(env, (void *) slice->data, slice->len, rocksdb_native__on_free, NULL, &result);
|
|
864
|
+
assert(err == 0);
|
|
865
|
+
|
|
866
|
+
err = js_set_element(env, values, i, result);
|
|
867
|
+
assert(err == 0);
|
|
868
|
+
}
|
|
816
869
|
}
|
|
817
|
-
}
|
|
818
870
|
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
871
|
+
js_value_t *ctx;
|
|
872
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
873
|
+
assert(err == 0);
|
|
822
874
|
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
875
|
+
js_value_t *cb;
|
|
876
|
+
err = js_get_reference_value(env, req->on_status, &cb);
|
|
877
|
+
assert(err == 0);
|
|
826
878
|
|
|
827
|
-
|
|
828
|
-
|
|
879
|
+
err = js_delete_reference(env, req->on_status);
|
|
880
|
+
assert(err == 0);
|
|
829
881
|
|
|
830
|
-
|
|
831
|
-
|
|
882
|
+
err = js_delete_reference(env, req->ctx);
|
|
883
|
+
assert(err == 0);
|
|
832
884
|
|
|
833
|
-
if (!db->exiting) {
|
|
834
885
|
js_call_function_with_checkpoint(env, ctx, cb, 2, (js_value_t *[]) {errors, values}, NULL);
|
|
835
|
-
}
|
|
836
886
|
|
|
837
|
-
|
|
838
|
-
|
|
887
|
+
err = js_close_handle_scope(env, scope);
|
|
888
|
+
assert(err == 0);
|
|
889
|
+
}
|
|
839
890
|
}
|
|
840
891
|
|
|
841
892
|
static js_value_t *
|
|
@@ -983,40 +1034,46 @@ rocksdb_native__on_write(rocksdb_write_batch_t *handle, int status) {
|
|
|
983
1034
|
|
|
984
1035
|
js_env_t *env = req->env;
|
|
985
1036
|
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
js_value_t *error;
|
|
1037
|
+
if (db->exiting) {
|
|
1038
|
+
err = js_delete_reference(env, req->on_status);
|
|
1039
|
+
assert(err == 0);
|
|
991
1040
|
|
|
992
|
-
|
|
993
|
-
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
1041
|
+
err = js_delete_reference(env, req->ctx);
|
|
994
1042
|
assert(err == 0);
|
|
995
1043
|
} else {
|
|
996
|
-
|
|
1044
|
+
js_handle_scope_t *scope;
|
|
1045
|
+
err = js_open_handle_scope(env, &scope);
|
|
997
1046
|
assert(err == 0);
|
|
998
|
-
}
|
|
999
1047
|
|
|
1000
|
-
|
|
1001
|
-
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
1002
|
-
assert(err == 0);
|
|
1048
|
+
js_value_t *error;
|
|
1003
1049
|
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1050
|
+
if (req->handle.error) {
|
|
1051
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
1052
|
+
assert(err == 0);
|
|
1053
|
+
} else {
|
|
1054
|
+
err = js_get_null(env, &error);
|
|
1055
|
+
assert(err == 0);
|
|
1056
|
+
}
|
|
1007
1057
|
|
|
1008
|
-
|
|
1009
|
-
|
|
1058
|
+
js_value_t *ctx;
|
|
1059
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
1060
|
+
assert(err == 0);
|
|
1010
1061
|
|
|
1011
|
-
|
|
1012
|
-
|
|
1062
|
+
js_value_t *cb;
|
|
1063
|
+
err = js_get_reference_value(env, req->on_status, &cb);
|
|
1064
|
+
assert(err == 0);
|
|
1065
|
+
|
|
1066
|
+
err = js_delete_reference(env, req->on_status);
|
|
1067
|
+
assert(err == 0);
|
|
1068
|
+
|
|
1069
|
+
err = js_delete_reference(env, req->ctx);
|
|
1070
|
+
assert(err == 0);
|
|
1013
1071
|
|
|
1014
|
-
if (!db->exiting) {
|
|
1015
1072
|
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
1016
|
-
}
|
|
1017
1073
|
|
|
1018
|
-
|
|
1019
|
-
|
|
1074
|
+
err = js_close_handle_scope(env, scope);
|
|
1075
|
+
assert(err == 0);
|
|
1076
|
+
}
|
|
1020
1077
|
}
|
|
1021
1078
|
|
|
1022
1079
|
static js_value_t *
|
package/lib/iterator.js
CHANGED
|
@@ -99,12 +99,7 @@ module.exports = class RocksDBIterator extends Readable {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
_init() {
|
|
102
|
-
this._handle = binding.iteratorInit(
|
|
103
|
-
this,
|
|
104
|
-
this._onopen,
|
|
105
|
-
this._onclose,
|
|
106
|
-
this._onread
|
|
107
|
-
)
|
|
102
|
+
this._handle = binding.iteratorInit()
|
|
108
103
|
this._buffer = binding.iteratorBuffer(this._handle, this._capacity)
|
|
109
104
|
}
|
|
110
105
|
|
|
@@ -121,7 +116,11 @@ module.exports = class RocksDBIterator extends Readable {
|
|
|
121
116
|
this._lt,
|
|
122
117
|
this._lte,
|
|
123
118
|
this._reverse,
|
|
124
|
-
this._snapshot ? this._snapshot._handle : null
|
|
119
|
+
this._snapshot ? this._snapshot._handle : null,
|
|
120
|
+
this,
|
|
121
|
+
this._onopen,
|
|
122
|
+
this._onclose,
|
|
123
|
+
this._onread
|
|
125
124
|
)
|
|
126
125
|
}
|
|
127
126
|
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|