rocksdb-native 2.6.7 → 2.6.9
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/binding.c +317 -250
- package/index.js +1 -1
- 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/binding.c
CHANGED
|
@@ -29,6 +29,7 @@ typedef struct {
|
|
|
29
29
|
rocksdb_t handle;
|
|
30
30
|
|
|
31
31
|
js_env_t *env;
|
|
32
|
+
js_ref_t *ctx;
|
|
32
33
|
|
|
33
34
|
bool closing;
|
|
34
35
|
bool exiting;
|
|
@@ -63,6 +64,11 @@ typedef struct {
|
|
|
63
64
|
js_ref_t *on_open;
|
|
64
65
|
js_ref_t *on_close;
|
|
65
66
|
js_ref_t *on_read;
|
|
67
|
+
|
|
68
|
+
bool closing;
|
|
69
|
+
bool exiting;
|
|
70
|
+
|
|
71
|
+
js_deferred_teardown_t *teardown;
|
|
66
72
|
} rocksdb_native_iterator_t;
|
|
67
73
|
|
|
68
74
|
typedef struct {
|
|
@@ -114,30 +120,46 @@ rocksdb_native__on_close(rocksdb_close_t *handle, int status) {
|
|
|
114
120
|
|
|
115
121
|
js_deferred_teardown_t *teardown = db->teardown;
|
|
116
122
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
123
|
+
if (db->exiting) {
|
|
124
|
+
if (db->closing) {
|
|
125
|
+
err = js_delete_reference(env, req->on_close);
|
|
126
|
+
assert(err == 0);
|
|
120
127
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
assert(err == 0);
|
|
128
|
+
err = js_delete_reference(env, req->ctx);
|
|
129
|
+
assert(err == 0);
|
|
124
130
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
131
|
+
err = js_delete_reference(env, db->ctx);
|
|
132
|
+
assert(err == 0);
|
|
133
|
+
} else {
|
|
134
|
+
free(req);
|
|
135
|
+
}
|
|
136
|
+
} else {
|
|
137
|
+
js_handle_scope_t *scope;
|
|
138
|
+
err = js_open_handle_scope(env, &scope);
|
|
139
|
+
assert(err == 0);
|
|
128
140
|
|
|
129
|
-
|
|
130
|
-
|
|
141
|
+
js_value_t *ctx;
|
|
142
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
143
|
+
assert(err == 0);
|
|
131
144
|
|
|
132
|
-
|
|
133
|
-
|
|
145
|
+
js_value_t *cb;
|
|
146
|
+
err = js_get_reference_value(env, req->on_close, &cb);
|
|
147
|
+
assert(err == 0);
|
|
148
|
+
|
|
149
|
+
err = js_delete_reference(env, req->on_close);
|
|
150
|
+
assert(err == 0);
|
|
151
|
+
|
|
152
|
+
err = js_delete_reference(env, req->ctx);
|
|
153
|
+
assert(err == 0);
|
|
154
|
+
|
|
155
|
+
err = js_delete_reference(env, db->ctx);
|
|
156
|
+
assert(err == 0);
|
|
134
157
|
|
|
135
|
-
if (!db->exiting) {
|
|
136
158
|
js_call_function_with_checkpoint(env, ctx, cb, 0, NULL, NULL);
|
|
137
|
-
}
|
|
138
159
|
|
|
139
|
-
|
|
140
|
-
|
|
160
|
+
err = js_close_handle_scope(env, scope);
|
|
161
|
+
assert(err == 0);
|
|
162
|
+
}
|
|
141
163
|
|
|
142
164
|
err = js_finish_deferred_teardown_callback(teardown);
|
|
143
165
|
assert(err == 0);
|
|
@@ -155,40 +177,46 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
|
|
|
155
177
|
|
|
156
178
|
js_env_t *env = req->env;
|
|
157
179
|
|
|
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);
|
|
180
|
+
if (db->exiting) {
|
|
181
|
+
err = js_delete_reference(env, req->on_open);
|
|
182
|
+
assert(err == 0);
|
|
169
183
|
|
|
170
|
-
|
|
171
|
-
|
|
184
|
+
err = js_delete_reference(env, req->ctx);
|
|
185
|
+
assert(err == 0);
|
|
186
|
+
} else {
|
|
187
|
+
js_handle_scope_t *scope;
|
|
188
|
+
err = js_open_handle_scope(env, &scope);
|
|
189
|
+
assert(err == 0);
|
|
172
190
|
|
|
173
|
-
|
|
174
|
-
|
|
191
|
+
js_value_t *ctx;
|
|
192
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
193
|
+
assert(err == 0);
|
|
175
194
|
|
|
176
|
-
|
|
195
|
+
js_value_t *cb;
|
|
196
|
+
err = js_get_reference_value(env, req->on_open, &cb);
|
|
197
|
+
assert(err == 0);
|
|
177
198
|
|
|
178
|
-
|
|
179
|
-
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
199
|
+
err = js_delete_reference(env, req->on_open);
|
|
180
200
|
assert(err == 0);
|
|
181
|
-
|
|
182
|
-
err =
|
|
201
|
+
|
|
202
|
+
err = js_delete_reference(env, req->ctx);
|
|
183
203
|
assert(err == 0);
|
|
184
|
-
}
|
|
185
204
|
|
|
186
|
-
|
|
205
|
+
js_value_t *error;
|
|
206
|
+
|
|
207
|
+
if (req->handle.error) {
|
|
208
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
209
|
+
assert(err == 0);
|
|
210
|
+
} else {
|
|
211
|
+
err = js_get_null(env, &error);
|
|
212
|
+
assert(err == 0);
|
|
213
|
+
}
|
|
214
|
+
|
|
187
215
|
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
188
|
-
}
|
|
189
216
|
|
|
190
|
-
|
|
191
|
-
|
|
217
|
+
err = js_close_handle_scope(env, scope);
|
|
218
|
+
assert(err == 0);
|
|
219
|
+
}
|
|
192
220
|
}
|
|
193
221
|
|
|
194
222
|
static void
|
|
@@ -203,36 +231,12 @@ rocksdb_native__on_teardown(js_deferred_teardown_t *handle, void *data) {
|
|
|
203
231
|
|
|
204
232
|
if (db->closing) return;
|
|
205
233
|
|
|
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);
|
|
234
|
+
rocksdb_native_close_t *req = malloc(sizeof(rocksdb_native_close_t));
|
|
215
235
|
|
|
216
|
-
req->env = env;
|
|
217
236
|
req->handle.data = (void *) req;
|
|
218
237
|
|
|
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
238
|
err = rocksdb_close(&db->handle, &req->handle, rocksdb_native__on_close);
|
|
232
239
|
assert(err == 0);
|
|
233
|
-
|
|
234
|
-
err = js_close_handle_scope(env, scope);
|
|
235
|
-
assert(err == 0);
|
|
236
240
|
}
|
|
237
241
|
|
|
238
242
|
static js_value_t *
|
|
@@ -268,24 +272,24 @@ static js_value_t *
|
|
|
268
272
|
rocksdb_native_open(js_env_t *env, js_callback_info_t *info) {
|
|
269
273
|
int err;
|
|
270
274
|
|
|
271
|
-
size_t argc =
|
|
272
|
-
js_value_t *argv[
|
|
275
|
+
size_t argc = 6;
|
|
276
|
+
js_value_t *argv[6];
|
|
273
277
|
|
|
274
278
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
275
279
|
assert(err == 0);
|
|
276
280
|
|
|
277
|
-
assert(argc ==
|
|
281
|
+
assert(argc == 6);
|
|
278
282
|
|
|
279
283
|
rocksdb_native_t *db;
|
|
280
|
-
err = js_get_arraybuffer_info(env, argv[
|
|
284
|
+
err = js_get_arraybuffer_info(env, argv[1], (void **) &db, NULL);
|
|
281
285
|
assert(err == 0);
|
|
282
286
|
|
|
283
287
|
utf8_t path[4096 + 1 /* NULL */];
|
|
284
|
-
err = js_get_value_string_utf8(env, argv[
|
|
288
|
+
err = js_get_value_string_utf8(env, argv[2], path, sizeof(path), NULL);
|
|
285
289
|
assert(err == 0);
|
|
286
290
|
|
|
287
291
|
rocksdb_native_open_options_t *o;
|
|
288
|
-
err = js_get_typedarray_info(env, argv[
|
|
292
|
+
err = js_get_typedarray_info(env, argv[3], NULL, (void **) &o, NULL, NULL, NULL);
|
|
289
293
|
assert(err == 0);
|
|
290
294
|
|
|
291
295
|
rocksdb_options_t options = {
|
|
@@ -313,10 +317,13 @@ rocksdb_native_open(js_env_t *env, js_callback_info_t *info) {
|
|
|
313
317
|
req->env = env;
|
|
314
318
|
req->handle.data = (void *) req;
|
|
315
319
|
|
|
316
|
-
err = js_create_reference(env, argv[
|
|
320
|
+
err = js_create_reference(env, argv[0], 1, &db->ctx);
|
|
317
321
|
assert(err == 0);
|
|
318
322
|
|
|
319
|
-
err = js_create_reference(env, argv[4], 1, &req->
|
|
323
|
+
err = js_create_reference(env, argv[4], 1, &req->ctx);
|
|
324
|
+
assert(err == 0);
|
|
325
|
+
|
|
326
|
+
err = js_create_reference(env, argv[5], 1, &req->on_open);
|
|
320
327
|
assert(err == 0);
|
|
321
328
|
|
|
322
329
|
err = rocksdb_open(&db->handle, &req->handle, (const char *) path, &options, rocksdb_native__on_open);
|
|
@@ -371,14 +378,6 @@ static js_value_t *
|
|
|
371
378
|
rocksdb_native_iterator_init(js_env_t *env, js_callback_info_t *info) {
|
|
372
379
|
int err;
|
|
373
380
|
|
|
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
381
|
js_value_t *handle;
|
|
383
382
|
|
|
384
383
|
rocksdb_native_iterator_t *req;
|
|
@@ -386,20 +385,10 @@ rocksdb_native_iterator_init(js_env_t *env, js_callback_info_t *info) {
|
|
|
386
385
|
assert(err == 0);
|
|
387
386
|
|
|
388
387
|
req->env = env;
|
|
388
|
+
req->closing = false;
|
|
389
|
+
req->exiting = false;
|
|
389
390
|
req->handle.data = (void *) req;
|
|
390
391
|
|
|
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
392
|
return handle;
|
|
404
393
|
}
|
|
405
394
|
|
|
@@ -440,6 +429,75 @@ rocksdb_native_iterator_buffer(js_env_t *env, js_callback_info_t *info) {
|
|
|
440
429
|
return handle;
|
|
441
430
|
}
|
|
442
431
|
|
|
432
|
+
static void
|
|
433
|
+
rocksdb_native__on_iterator_close(rocksdb_iterator_t *handle, int status) {
|
|
434
|
+
int err;
|
|
435
|
+
|
|
436
|
+
assert(status == 0);
|
|
437
|
+
|
|
438
|
+
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
|
|
439
|
+
|
|
440
|
+
js_env_t *env = req->env;
|
|
441
|
+
|
|
442
|
+
js_deferred_teardown_t *teardown = req->teardown;
|
|
443
|
+
|
|
444
|
+
if (req->exiting) {
|
|
445
|
+
err = js_delete_reference(env, req->on_open);
|
|
446
|
+
assert(err == 0);
|
|
447
|
+
|
|
448
|
+
err = js_delete_reference(env, req->on_close);
|
|
449
|
+
assert(err == 0);
|
|
450
|
+
|
|
451
|
+
err = js_delete_reference(env, req->on_read);
|
|
452
|
+
assert(err == 0);
|
|
453
|
+
|
|
454
|
+
err = js_delete_reference(env, req->ctx);
|
|
455
|
+
assert(err == 0);
|
|
456
|
+
} else {
|
|
457
|
+
js_handle_scope_t *scope;
|
|
458
|
+
err = js_open_handle_scope(env, &scope);
|
|
459
|
+
assert(err == 0);
|
|
460
|
+
|
|
461
|
+
js_value_t *ctx;
|
|
462
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
463
|
+
assert(err == 0);
|
|
464
|
+
|
|
465
|
+
js_value_t *cb;
|
|
466
|
+
err = js_get_reference_value(env, req->on_close, &cb);
|
|
467
|
+
assert(err == 0);
|
|
468
|
+
|
|
469
|
+
err = js_delete_reference(env, req->on_open);
|
|
470
|
+
assert(err == 0);
|
|
471
|
+
|
|
472
|
+
err = js_delete_reference(env, req->on_close);
|
|
473
|
+
assert(err == 0);
|
|
474
|
+
|
|
475
|
+
err = js_delete_reference(env, req->on_read);
|
|
476
|
+
assert(err == 0);
|
|
477
|
+
|
|
478
|
+
err = js_delete_reference(env, req->ctx);
|
|
479
|
+
assert(err == 0);
|
|
480
|
+
|
|
481
|
+
js_value_t *error;
|
|
482
|
+
|
|
483
|
+
if (req->handle.error) {
|
|
484
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
485
|
+
assert(err == 0);
|
|
486
|
+
} else {
|
|
487
|
+
err = js_get_null(env, &error);
|
|
488
|
+
assert(err == 0);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
492
|
+
|
|
493
|
+
err = js_close_handle_scope(env, scope);
|
|
494
|
+
assert(err == 0);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
err = js_finish_deferred_teardown_callback(teardown);
|
|
498
|
+
assert(err == 0);
|
|
499
|
+
}
|
|
500
|
+
|
|
443
501
|
static void
|
|
444
502
|
rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
|
|
445
503
|
int err;
|
|
@@ -448,7 +506,7 @@ rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
|
|
|
448
506
|
|
|
449
507
|
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) handle->data;
|
|
450
508
|
|
|
451
|
-
|
|
509
|
+
if (req->exiting) return;
|
|
452
510
|
|
|
453
511
|
js_env_t *env = req->env;
|
|
454
512
|
|
|
@@ -474,25 +532,37 @@ rocksdb_native__on_iterator_open(rocksdb_iterator_t *handle, int status) {
|
|
|
474
532
|
assert(err == 0);
|
|
475
533
|
}
|
|
476
534
|
|
|
477
|
-
|
|
478
|
-
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
479
|
-
}
|
|
535
|
+
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
480
536
|
|
|
481
537
|
err = js_close_handle_scope(env, scope);
|
|
482
538
|
assert(err == 0);
|
|
483
539
|
}
|
|
484
540
|
|
|
541
|
+
static void
|
|
542
|
+
rocksdb_native__on_iterator_teardown(js_deferred_teardown_t *handle, void *data) {
|
|
543
|
+
int err;
|
|
544
|
+
|
|
545
|
+
rocksdb_native_iterator_t *req = (rocksdb_native_iterator_t *) data;
|
|
546
|
+
|
|
547
|
+
req->exiting = true;
|
|
548
|
+
|
|
549
|
+
if (req->closing) return;
|
|
550
|
+
|
|
551
|
+
err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close);
|
|
552
|
+
assert(err == 0);
|
|
553
|
+
}
|
|
554
|
+
|
|
485
555
|
static js_value_t *
|
|
486
556
|
rocksdb_native_iterator_open(js_env_t *env, js_callback_info_t *info) {
|
|
487
557
|
int err;
|
|
488
558
|
|
|
489
|
-
size_t argc =
|
|
490
|
-
js_value_t *argv[
|
|
559
|
+
size_t argc = 12;
|
|
560
|
+
js_value_t *argv[12];
|
|
491
561
|
|
|
492
562
|
err = js_get_callback_info(env, info, &argc, argv, NULL, NULL);
|
|
493
563
|
assert(err == 0);
|
|
494
564
|
|
|
495
|
-
assert(argc ==
|
|
565
|
+
assert(argc == 12);
|
|
496
566
|
|
|
497
567
|
rocksdb_native_t *db;
|
|
498
568
|
err = js_get_arraybuffer_info(env, argv[0], (void **) &db, NULL);
|
|
@@ -533,64 +603,25 @@ rocksdb_native_iterator_open(js_env_t *env, js_callback_info_t *info) {
|
|
|
533
603
|
assert(err == 0);
|
|
534
604
|
}
|
|
535
605
|
|
|
536
|
-
err =
|
|
606
|
+
err = js_create_reference(env, argv[8], 1, &req->ctx);
|
|
537
607
|
assert(err == 0);
|
|
538
608
|
|
|
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);
|
|
609
|
+
err = js_create_reference(env, argv[9], 1, &req->on_open);
|
|
556
610
|
assert(err == 0);
|
|
557
611
|
|
|
558
|
-
|
|
559
|
-
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
612
|
+
err = js_create_reference(env, argv[10], 1, &req->on_close);
|
|
560
613
|
assert(err == 0);
|
|
561
614
|
|
|
562
|
-
|
|
563
|
-
err = js_get_reference_value(env, req->on_close, &cb);
|
|
615
|
+
err = js_create_reference(env, argv[11], 1, &req->on_read);
|
|
564
616
|
assert(err == 0);
|
|
565
617
|
|
|
566
|
-
err =
|
|
567
|
-
assert(err == 0);
|
|
568
|
-
|
|
569
|
-
err = js_delete_reference(env, req->on_close);
|
|
570
|
-
assert(err == 0);
|
|
571
|
-
|
|
572
|
-
err = js_delete_reference(env, req->on_read);
|
|
618
|
+
err = rocksdb_iterator_open(&db->handle, &req->handle, range, reverse, &options, rocksdb_native__on_iterator_open);
|
|
573
619
|
assert(err == 0);
|
|
574
620
|
|
|
575
|
-
err =
|
|
621
|
+
err = js_add_deferred_teardown_callback(env, rocksdb_native__on_iterator_teardown, (void *) req, &req->teardown);
|
|
576
622
|
assert(err == 0);
|
|
577
623
|
|
|
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);
|
|
624
|
+
return NULL;
|
|
594
625
|
}
|
|
595
626
|
|
|
596
627
|
static js_value_t *
|
|
@@ -609,6 +640,8 @@ rocksdb_native_iterator_close(js_env_t *env, js_callback_info_t *info) {
|
|
|
609
640
|
err = js_get_arraybuffer_info(env, argv[0], (void **) &req, NULL);
|
|
610
641
|
assert(err == 0);
|
|
611
642
|
|
|
643
|
+
req->closing = true;
|
|
644
|
+
|
|
612
645
|
err = rocksdb_iterator_close(&req->handle, rocksdb_native__on_iterator_close);
|
|
613
646
|
assert(err == 0);
|
|
614
647
|
|
|
@@ -625,66 +658,76 @@ rocksdb_native__on_iterator_read(rocksdb_iterator_t *handle, int status) {
|
|
|
625
658
|
|
|
626
659
|
rocksdb_native_t *db = (rocksdb_native_t *) req->handle.req.db;
|
|
627
660
|
|
|
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);
|
|
661
|
+
size_t len = req->handle.len;
|
|
637
662
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
663
|
+
if (db->exiting) {
|
|
664
|
+
if (status == 0 && req->handle.error == NULL) {
|
|
665
|
+
for (size_t i = 0; i < len; i++) {
|
|
666
|
+
js_value_t *result;
|
|
641
667
|
|
|
642
|
-
|
|
668
|
+
rocksdb_slice_destroy(&req->keys[i]);
|
|
643
669
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
670
|
+
rocksdb_slice_destroy(&req->values[i]);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
} else {
|
|
674
|
+
js_env_t *env = req->env;
|
|
647
675
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
676
|
+
js_handle_scope_t *scope;
|
|
677
|
+
err = js_open_handle_scope(env, &scope);
|
|
678
|
+
assert(err == 0);
|
|
651
679
|
|
|
652
|
-
|
|
680
|
+
js_value_t *ctx;
|
|
681
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
682
|
+
assert(err == 0);
|
|
653
683
|
|
|
654
|
-
|
|
655
|
-
err =
|
|
684
|
+
js_value_t *cb;
|
|
685
|
+
err = js_get_reference_value(env, req->on_read, &cb);
|
|
656
686
|
assert(err == 0);
|
|
657
|
-
|
|
658
|
-
|
|
687
|
+
|
|
688
|
+
js_value_t *keys;
|
|
689
|
+
err = js_create_array_with_length(env, len, &keys);
|
|
659
690
|
assert(err == 0);
|
|
660
691
|
|
|
661
|
-
|
|
662
|
-
|
|
692
|
+
js_value_t *values;
|
|
693
|
+
err = js_create_array_with_length(env, len, &values);
|
|
694
|
+
assert(err == 0);
|
|
663
695
|
|
|
664
|
-
|
|
696
|
+
js_value_t *error;
|
|
665
697
|
|
|
666
|
-
|
|
698
|
+
if (req->handle.error) {
|
|
699
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
667
700
|
assert(err == 0);
|
|
668
|
-
|
|
669
|
-
err =
|
|
701
|
+
} else {
|
|
702
|
+
err = js_get_null(env, &error);
|
|
670
703
|
assert(err == 0);
|
|
671
704
|
|
|
672
|
-
|
|
705
|
+
for (size_t i = 0; i < len; i++) {
|
|
706
|
+
js_value_t *result;
|
|
673
707
|
|
|
674
|
-
|
|
675
|
-
assert(err == 0);
|
|
708
|
+
rocksdb_slice_t *key = &req->keys[i];
|
|
676
709
|
|
|
677
|
-
|
|
678
|
-
|
|
710
|
+
err = js_create_external_arraybuffer(env, (void *) key->data, key->len, rocksdb_native__on_free, NULL, &result);
|
|
711
|
+
assert(err == 0);
|
|
712
|
+
|
|
713
|
+
err = js_set_element(env, keys, i, result);
|
|
714
|
+
assert(err == 0);
|
|
715
|
+
|
|
716
|
+
rocksdb_slice_t *value = &req->values[i];
|
|
717
|
+
|
|
718
|
+
err = js_create_external_arraybuffer(env, (void *) value->data, value->len, rocksdb_native__on_free, NULL, &result);
|
|
719
|
+
assert(err == 0);
|
|
720
|
+
|
|
721
|
+
err = js_set_element(env, values, i, result);
|
|
722
|
+
assert(err == 0);
|
|
723
|
+
}
|
|
679
724
|
}
|
|
680
|
-
}
|
|
681
725
|
|
|
682
|
-
if (!db->exiting) {
|
|
683
726
|
js_call_function_with_checkpoint(env, ctx, cb, 3, (js_value_t *[]) {error, keys, values}, NULL);
|
|
684
|
-
}
|
|
685
727
|
|
|
686
|
-
|
|
687
|
-
|
|
728
|
+
err = js_close_handle_scope(env, scope);
|
|
729
|
+
assert(err == 0);
|
|
730
|
+
}
|
|
688
731
|
}
|
|
689
732
|
|
|
690
733
|
static js_value_t *
|
|
@@ -780,62 +823,80 @@ rocksdb_native__on_read(rocksdb_read_batch_t *handle, int status) {
|
|
|
780
823
|
|
|
781
824
|
js_env_t *env = req->env;
|
|
782
825
|
|
|
783
|
-
js_handle_scope_t *scope;
|
|
784
|
-
err = js_open_handle_scope(env, &scope);
|
|
785
|
-
assert(err == 0);
|
|
786
|
-
|
|
787
826
|
size_t len = req->handle.len;
|
|
788
827
|
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
828
|
+
if (db->exiting) {
|
|
829
|
+
if (status == 0) {
|
|
830
|
+
for (size_t i = 0; i < len; i++) {
|
|
831
|
+
js_value_t *result;
|
|
792
832
|
|
|
793
|
-
|
|
794
|
-
err = js_create_array_with_length(env, len, &values);
|
|
795
|
-
assert(err == 0);
|
|
833
|
+
char *error = req->errors[i];
|
|
796
834
|
|
|
797
|
-
|
|
798
|
-
js_value_t *result;
|
|
835
|
+
if (error) continue;
|
|
799
836
|
|
|
800
|
-
|
|
837
|
+
rocksdb_slice_destroy(&req->reads[i].value);
|
|
838
|
+
}
|
|
839
|
+
}
|
|
801
840
|
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
assert(err == 0);
|
|
841
|
+
err = js_delete_reference(env, req->on_status);
|
|
842
|
+
assert(err == 0);
|
|
805
843
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
844
|
+
err = js_delete_reference(env, req->ctx);
|
|
845
|
+
assert(err == 0);
|
|
846
|
+
} else {
|
|
847
|
+
js_handle_scope_t *scope;
|
|
848
|
+
err = js_open_handle_scope(env, &scope);
|
|
849
|
+
assert(err == 0);
|
|
810
850
|
|
|
811
|
-
|
|
812
|
-
|
|
851
|
+
js_value_t *errors;
|
|
852
|
+
err = js_create_array_with_length(env, len, &errors);
|
|
853
|
+
assert(err == 0);
|
|
813
854
|
|
|
814
|
-
|
|
815
|
-
|
|
855
|
+
js_value_t *values;
|
|
856
|
+
err = js_create_array_with_length(env, len, &values);
|
|
857
|
+
assert(err == 0);
|
|
858
|
+
|
|
859
|
+
for (size_t i = 0; i < len; i++) {
|
|
860
|
+
js_value_t *result;
|
|
861
|
+
|
|
862
|
+
char *error = req->errors[i];
|
|
863
|
+
|
|
864
|
+
if (error) {
|
|
865
|
+
err = js_create_string_utf8(env, (utf8_t *) error, -1, &result);
|
|
866
|
+
assert(err == 0);
|
|
867
|
+
|
|
868
|
+
err = js_set_element(env, errors, i, result);
|
|
869
|
+
assert(err == 0);
|
|
870
|
+
} else {
|
|
871
|
+
rocksdb_slice_t *slice = &req->reads[i].value;
|
|
872
|
+
|
|
873
|
+
err = js_create_external_arraybuffer(env, (void *) slice->data, slice->len, rocksdb_native__on_free, NULL, &result);
|
|
874
|
+
assert(err == 0);
|
|
875
|
+
|
|
876
|
+
err = js_set_element(env, values, i, result);
|
|
877
|
+
assert(err == 0);
|
|
878
|
+
}
|
|
816
879
|
}
|
|
817
|
-
}
|
|
818
880
|
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
881
|
+
js_value_t *ctx;
|
|
882
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
883
|
+
assert(err == 0);
|
|
822
884
|
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
885
|
+
js_value_t *cb;
|
|
886
|
+
err = js_get_reference_value(env, req->on_status, &cb);
|
|
887
|
+
assert(err == 0);
|
|
826
888
|
|
|
827
|
-
|
|
828
|
-
|
|
889
|
+
err = js_delete_reference(env, req->on_status);
|
|
890
|
+
assert(err == 0);
|
|
829
891
|
|
|
830
|
-
|
|
831
|
-
|
|
892
|
+
err = js_delete_reference(env, req->ctx);
|
|
893
|
+
assert(err == 0);
|
|
832
894
|
|
|
833
|
-
if (!db->exiting) {
|
|
834
895
|
js_call_function_with_checkpoint(env, ctx, cb, 2, (js_value_t *[]) {errors, values}, NULL);
|
|
835
|
-
}
|
|
836
896
|
|
|
837
|
-
|
|
838
|
-
|
|
897
|
+
err = js_close_handle_scope(env, scope);
|
|
898
|
+
assert(err == 0);
|
|
899
|
+
}
|
|
839
900
|
}
|
|
840
901
|
|
|
841
902
|
static js_value_t *
|
|
@@ -983,40 +1044,46 @@ rocksdb_native__on_write(rocksdb_write_batch_t *handle, int status) {
|
|
|
983
1044
|
|
|
984
1045
|
js_env_t *env = req->env;
|
|
985
1046
|
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
js_value_t *error;
|
|
1047
|
+
if (db->exiting) {
|
|
1048
|
+
err = js_delete_reference(env, req->on_status);
|
|
1049
|
+
assert(err == 0);
|
|
991
1050
|
|
|
992
|
-
|
|
993
|
-
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
1051
|
+
err = js_delete_reference(env, req->ctx);
|
|
994
1052
|
assert(err == 0);
|
|
995
1053
|
} else {
|
|
996
|
-
|
|
1054
|
+
js_handle_scope_t *scope;
|
|
1055
|
+
err = js_open_handle_scope(env, &scope);
|
|
997
1056
|
assert(err == 0);
|
|
998
|
-
}
|
|
999
1057
|
|
|
1000
|
-
|
|
1001
|
-
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
1002
|
-
assert(err == 0);
|
|
1058
|
+
js_value_t *error;
|
|
1003
1059
|
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1060
|
+
if (req->handle.error) {
|
|
1061
|
+
err = js_create_string_utf8(env, (utf8_t *) req->handle.error, -1, &error);
|
|
1062
|
+
assert(err == 0);
|
|
1063
|
+
} else {
|
|
1064
|
+
err = js_get_null(env, &error);
|
|
1065
|
+
assert(err == 0);
|
|
1066
|
+
}
|
|
1007
1067
|
|
|
1008
|
-
|
|
1009
|
-
|
|
1068
|
+
js_value_t *ctx;
|
|
1069
|
+
err = js_get_reference_value(env, req->ctx, &ctx);
|
|
1070
|
+
assert(err == 0);
|
|
1010
1071
|
|
|
1011
|
-
|
|
1012
|
-
|
|
1072
|
+
js_value_t *cb;
|
|
1073
|
+
err = js_get_reference_value(env, req->on_status, &cb);
|
|
1074
|
+
assert(err == 0);
|
|
1075
|
+
|
|
1076
|
+
err = js_delete_reference(env, req->on_status);
|
|
1077
|
+
assert(err == 0);
|
|
1078
|
+
|
|
1079
|
+
err = js_delete_reference(env, req->ctx);
|
|
1080
|
+
assert(err == 0);
|
|
1013
1081
|
|
|
1014
|
-
if (!db->exiting) {
|
|
1015
1082
|
js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
|
|
1016
|
-
}
|
|
1017
1083
|
|
|
1018
|
-
|
|
1019
|
-
|
|
1084
|
+
err = js_close_handle_scope(env, scope);
|
|
1085
|
+
assert(err == 0);
|
|
1086
|
+
}
|
|
1020
1087
|
}
|
|
1021
1088
|
|
|
1022
1089
|
static js_value_t *
|
package/index.js
CHANGED
|
@@ -79,7 +79,7 @@ module.exports = class RocksDB extends ReadyResource {
|
|
|
79
79
|
req.reject = reject
|
|
80
80
|
})
|
|
81
81
|
|
|
82
|
-
req.handle = binding.open(this._handle, this.path, opts, req, onopen)
|
|
82
|
+
req.handle = binding.open(this, this._handle, this.path, opts, req, onopen)
|
|
83
83
|
|
|
84
84
|
await promise
|
|
85
85
|
|
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
|