rocksdb-native 1.1.0 → 2.0.0
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/README.md +6 -6
- package/binding.c +257 -98
- package/index.js +9 -5
- package/lib/batch.js +182 -63
- package/lib/iterator.js +38 -31
- package/package.json +2 -1
- 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/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-x64/rocksdb-native.bare +0 -0
- package/prebuilds/win32-x64/rocksdb-native.node +0 -0
- package/vendor/librocksdb/include/rocksdb.h +57 -58
- package/vendor/librocksdb/src/rocksdb.cc +57 -184
|
@@ -366,119 +366,6 @@ rocksdb__iterator_refresh (Iterator *iterator, T *req) {
|
|
|
366
366
|
rocksdb__iterator_seek(iterator, req);
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
-
static void
|
|
370
|
-
rocksdb__on_after_read_range (uv_work_t *handle, int status) {
|
|
371
|
-
auto req = reinterpret_cast<rocksdb_read_range_t *>(handle->data);
|
|
372
|
-
|
|
373
|
-
auto error = req->error;
|
|
374
|
-
|
|
375
|
-
req->cb(req, status);
|
|
376
|
-
|
|
377
|
-
if (error) free(error);
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
static void
|
|
381
|
-
rocksdb__on_read_range (uv_work_t *handle) {
|
|
382
|
-
auto req = reinterpret_cast<rocksdb_read_range_t *>(handle->data);
|
|
383
|
-
|
|
384
|
-
auto iterator = rocksdb__iterator_open(req);
|
|
385
|
-
|
|
386
|
-
rocksdb__iterator_read(iterator, req);
|
|
387
|
-
|
|
388
|
-
auto status = iterator->status();
|
|
389
|
-
|
|
390
|
-
if (status.ok()) {
|
|
391
|
-
req->error = nullptr;
|
|
392
|
-
} else {
|
|
393
|
-
req->error = strdup(status.getState());
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
delete iterator;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
extern "C" int
|
|
400
|
-
rocksdb_read_range (rocksdb_t *db, rocksdb_read_range_t *req, rocksdb_range_t range, bool reverse, rocksdb_slice_t *keys, rocksdb_slice_t *values, size_t capacity, rocksdb_read_range_cb cb) {
|
|
401
|
-
req->db = db;
|
|
402
|
-
req->range = range;
|
|
403
|
-
req->reverse = reverse;
|
|
404
|
-
req->keys = keys;
|
|
405
|
-
req->values = values;
|
|
406
|
-
req->len = 0;
|
|
407
|
-
req->capacity = capacity;
|
|
408
|
-
req->cb = cb;
|
|
409
|
-
|
|
410
|
-
req->worker.data = static_cast<void *>(req);
|
|
411
|
-
|
|
412
|
-
return uv_queue_work(db->loop, &req->worker, rocksdb__on_read_range, rocksdb__on_after_read_range);
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
static void
|
|
416
|
-
rocksdb__on_after_delete_range (uv_work_t *handle, int status) {
|
|
417
|
-
auto req = reinterpret_cast<rocksdb_delete_range_t *>(handle->data);
|
|
418
|
-
|
|
419
|
-
auto error = req->error;
|
|
420
|
-
|
|
421
|
-
req->cb(req, status);
|
|
422
|
-
|
|
423
|
-
if (error) free(error);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
static void
|
|
427
|
-
rocksdb__on_delete_range (uv_work_t *handle) {
|
|
428
|
-
auto req = reinterpret_cast<rocksdb_delete_range_t *>(handle->data);
|
|
429
|
-
|
|
430
|
-
auto db = reinterpret_cast<DB *>(req->db->handle);
|
|
431
|
-
|
|
432
|
-
const auto &range = req->range;
|
|
433
|
-
|
|
434
|
-
if (range.gte.len && range.lt.len) {
|
|
435
|
-
auto status = db->DeleteRange(WriteOptions(), rocksdb__slice_cast(range.gte), rocksdb__slice_cast(range.lt));
|
|
436
|
-
|
|
437
|
-
if (status.ok()) {
|
|
438
|
-
req->error = nullptr;
|
|
439
|
-
} else {
|
|
440
|
-
req->error = strdup(status.getState());
|
|
441
|
-
}
|
|
442
|
-
} else {
|
|
443
|
-
auto iterator = rocksdb__iterator_open(db, req->range);
|
|
444
|
-
|
|
445
|
-
req->error = nullptr;
|
|
446
|
-
|
|
447
|
-
while (rocksdb__iterator_valid(iterator, req->range)) {
|
|
448
|
-
auto status = db->Delete(WriteOptions(), iterator->key());
|
|
449
|
-
|
|
450
|
-
if (status.ok()) {
|
|
451
|
-
rocksdb__iterator_next(iterator);
|
|
452
|
-
} else {
|
|
453
|
-
req->error = strdup(status.getState());
|
|
454
|
-
break;
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
delete iterator;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
extern "C" int
|
|
463
|
-
rocksdb_delete_range (rocksdb_t *db, rocksdb_delete_range_t *req, rocksdb_range_t range, rocksdb_delete_range_cb cb) {
|
|
464
|
-
req->db = db;
|
|
465
|
-
req->range = range;
|
|
466
|
-
req->cb = cb;
|
|
467
|
-
|
|
468
|
-
req->worker.data = static_cast<void *>(req);
|
|
469
|
-
|
|
470
|
-
return uv_queue_work(db->loop, &req->worker, rocksdb__on_delete_range, rocksdb__on_after_delete_range);
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
extern "C" int
|
|
474
|
-
rocksdb_iterator_init (rocksdb_t *db, rocksdb_iterator_t *iterator) {
|
|
475
|
-
iterator->db = db;
|
|
476
|
-
|
|
477
|
-
iterator->worker.data = static_cast<void *>(iterator);
|
|
478
|
-
|
|
479
|
-
return 0;
|
|
480
|
-
}
|
|
481
|
-
|
|
482
369
|
static void
|
|
483
370
|
rocksdb__on_after_iterator (uv_work_t *handle, int status) {
|
|
484
371
|
auto req = reinterpret_cast<rocksdb_iterator_t *>(handle->data);
|
|
@@ -508,11 +395,14 @@ rocksdb__on_iterator_open (uv_work_t *handle) {
|
|
|
508
395
|
}
|
|
509
396
|
|
|
510
397
|
extern "C" int
|
|
511
|
-
rocksdb_iterator_open (rocksdb_iterator_t *iterator, rocksdb_range_t range, bool reverse, rocksdb_iterator_cb cb) {
|
|
398
|
+
rocksdb_iterator_open (rocksdb_t *db, rocksdb_iterator_t *iterator, rocksdb_range_t range, bool reverse, rocksdb_iterator_cb cb) {
|
|
399
|
+
iterator->db = db;
|
|
512
400
|
iterator->range = range;
|
|
513
401
|
iterator->reverse = reverse;
|
|
514
402
|
iterator->cb = cb;
|
|
515
403
|
|
|
404
|
+
iterator->worker.data = static_cast<void *>(iterator);
|
|
405
|
+
|
|
516
406
|
return uv_queue_work(iterator->db->loop, &iterator->worker, rocksdb__on_iterator_open, rocksdb__on_after_iterator);
|
|
517
407
|
}
|
|
518
408
|
|
|
@@ -586,18 +476,9 @@ rocksdb_iterator_read (rocksdb_iterator_t *iterator, rocksdb_slice_t *keys, rock
|
|
|
586
476
|
return uv_queue_work(iterator->db->loop, &iterator->worker, rocksdb__on_iterator_read, rocksdb__on_after_iterator);
|
|
587
477
|
}
|
|
588
478
|
|
|
589
|
-
extern "C" int
|
|
590
|
-
rocksdb_batch_init (rocksdb_t *db, rocksdb_batch_t *batch) {
|
|
591
|
-
batch->db = db;
|
|
592
|
-
|
|
593
|
-
batch->worker.data = static_cast<void *>(batch);
|
|
594
|
-
|
|
595
|
-
return 0;
|
|
596
|
-
}
|
|
597
|
-
|
|
598
479
|
static void
|
|
599
480
|
rocksdb__on_after_read (uv_work_t *handle, int status) {
|
|
600
|
-
auto req = reinterpret_cast<
|
|
481
|
+
auto req = reinterpret_cast<rocksdb_read_batch_t *>(handle->data);
|
|
601
482
|
|
|
602
483
|
req->cb(req, status);
|
|
603
484
|
|
|
@@ -608,47 +489,72 @@ rocksdb__on_after_read (uv_work_t *handle, int status) {
|
|
|
608
489
|
|
|
609
490
|
static void
|
|
610
491
|
rocksdb__on_batch_read (uv_work_t *handle) {
|
|
611
|
-
auto req = reinterpret_cast<
|
|
492
|
+
auto req = reinterpret_cast<rocksdb_read_batch_t *>(handle->data);
|
|
612
493
|
|
|
613
494
|
auto db = reinterpret_cast<DB *>(req->db->handle);
|
|
614
495
|
|
|
615
496
|
if (req->len) {
|
|
497
|
+
std::vector<Slice> keys(req->len);
|
|
498
|
+
|
|
499
|
+
for (size_t i = 0, n = req->len; i < n; i++) {
|
|
500
|
+
auto op = &req->reads[i];
|
|
501
|
+
|
|
502
|
+
switch (op->type) {
|
|
503
|
+
case rocksdb_get:
|
|
504
|
+
keys[i] = rocksdb__slice_cast(op->key);
|
|
505
|
+
break;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
616
509
|
std::vector<PinnableSlice> values(req->len);
|
|
617
510
|
|
|
618
511
|
std::vector<Status> statuses(req->len);
|
|
619
512
|
|
|
620
|
-
db->MultiGet(ReadOptions(), db->DefaultColumnFamily(), req->len,
|
|
513
|
+
db->MultiGet(ReadOptions(), db->DefaultColumnFamily(), req->len, keys.data(), values.data(), statuses.data());
|
|
621
514
|
|
|
622
515
|
for (size_t i = 0, n = req->len; i < n; i++) {
|
|
516
|
+
auto op = &req->reads[i];
|
|
517
|
+
|
|
623
518
|
auto status = statuses[i];
|
|
624
519
|
|
|
520
|
+
auto value = rocksdb_slice_empty();
|
|
521
|
+
|
|
625
522
|
if (status.ok()) {
|
|
626
|
-
|
|
523
|
+
value = rocksdb__slice_copy(values[i]);
|
|
524
|
+
|
|
627
525
|
req->errors[i] = nullptr;
|
|
628
526
|
} else if (status.code() == Status::kNotFound) {
|
|
629
|
-
req->values[i] = {.data = nullptr, .len = 0};
|
|
630
527
|
req->errors[i] = nullptr;
|
|
631
528
|
} else {
|
|
632
529
|
req->errors[i] = strdup(status.getState());
|
|
530
|
+
continue;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
switch (op->type) {
|
|
534
|
+
case rocksdb_get:
|
|
535
|
+
op->value = value;
|
|
536
|
+
break;
|
|
633
537
|
}
|
|
634
538
|
}
|
|
635
539
|
}
|
|
636
540
|
}
|
|
637
541
|
|
|
638
542
|
extern "C" int
|
|
639
|
-
|
|
640
|
-
batch->
|
|
641
|
-
batch->
|
|
543
|
+
rocksdb_read (rocksdb_t *db, rocksdb_read_batch_t *batch, rocksdb_read_t *reads, char **errors, size_t len, rocksdb_read_batch_cb cb) {
|
|
544
|
+
batch->db = db;
|
|
545
|
+
batch->reads = reads;
|
|
642
546
|
batch->errors = errors;
|
|
643
547
|
batch->len = len;
|
|
644
548
|
batch->cb = cb;
|
|
645
549
|
|
|
550
|
+
batch->worker.data = static_cast<void *>(batch);
|
|
551
|
+
|
|
646
552
|
return uv_queue_work(batch->db->loop, &batch->worker, rocksdb__on_batch_read, rocksdb__on_after_read);
|
|
647
553
|
}
|
|
648
554
|
|
|
649
555
|
static void
|
|
650
556
|
rocksdb__on_after_write (uv_work_t *handle, int status) {
|
|
651
|
-
auto req = reinterpret_cast<
|
|
557
|
+
auto req = reinterpret_cast<rocksdb_write_batch_t *>(handle->data);
|
|
652
558
|
|
|
653
559
|
auto error = req->error;
|
|
654
560
|
|
|
@@ -659,7 +565,7 @@ rocksdb__on_after_write (uv_work_t *handle, int status) {
|
|
|
659
565
|
|
|
660
566
|
static void
|
|
661
567
|
rocksdb__on_batch_write (uv_work_t *handle) {
|
|
662
|
-
auto req = reinterpret_cast<
|
|
568
|
+
auto req = reinterpret_cast<rocksdb_write_batch_t *>(handle->data);
|
|
663
569
|
|
|
664
570
|
auto db = reinterpret_cast<DB *>(req->db->handle);
|
|
665
571
|
|
|
@@ -667,56 +573,21 @@ rocksdb__on_batch_write (uv_work_t *handle) {
|
|
|
667
573
|
WriteBatch batch;
|
|
668
574
|
|
|
669
575
|
for (size_t i = 0, n = req->len; i < n; i++) {
|
|
670
|
-
|
|
671
|
-
batch.Delete(db->DefaultColumnFamily(), reinterpret_cast<const Slice &>(req->keys[i]));
|
|
672
|
-
} else {
|
|
673
|
-
batch.Put(db->DefaultColumnFamily(), reinterpret_cast<const Slice &>(req->keys[i]), reinterpret_cast<const Slice &>(req->values[i]));
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
auto status = db->Write(WriteOptions(), &batch);
|
|
576
|
+
auto op = &req->writes[i];
|
|
678
577
|
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
extern "C" int
|
|
688
|
-
rocksdb_batch_write (rocksdb_batch_t *batch, const rocksdb_slice_t *keys, const rocksdb_slice_t *values, size_t len, rocksdb_batch_cb cb) {
|
|
689
|
-
batch->keys = keys;
|
|
690
|
-
batch->values = const_cast<rocksdb_slice_t *>(values);
|
|
691
|
-
batch->error = nullptr;
|
|
692
|
-
batch->len = len;
|
|
693
|
-
batch->cb = cb;
|
|
694
|
-
|
|
695
|
-
return uv_queue_work(batch->db->loop, &batch->worker, rocksdb__on_batch_write, rocksdb__on_after_write);
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
static void
|
|
699
|
-
rocksdb__on_after_delete (uv_work_t *handle, int status) {
|
|
700
|
-
auto req = reinterpret_cast<rocksdb_batch_t *>(handle->data);
|
|
701
|
-
|
|
702
|
-
auto error = req->error;
|
|
703
|
-
|
|
704
|
-
req->cb(req, status);
|
|
705
|
-
|
|
706
|
-
if (error) free(error);
|
|
707
|
-
}
|
|
708
|
-
|
|
709
|
-
static void
|
|
710
|
-
rocksdb__on_batch_delete (uv_work_t *handle) {
|
|
711
|
-
auto req = reinterpret_cast<rocksdb_batch_t *>(handle->data);
|
|
712
|
-
|
|
713
|
-
auto db = reinterpret_cast<DB *>(req->db->handle);
|
|
578
|
+
switch (op->type) {
|
|
579
|
+
case rocksdb_put:
|
|
580
|
+
batch.Put(db->DefaultColumnFamily(), rocksdb__slice_cast(op->key), rocksdb__slice_cast(op->value));
|
|
581
|
+
break;
|
|
714
582
|
|
|
715
|
-
|
|
716
|
-
|
|
583
|
+
case rocksdb_delete:
|
|
584
|
+
batch.Delete(db->DefaultColumnFamily(), rocksdb__slice_cast(op->key));
|
|
585
|
+
break;
|
|
717
586
|
|
|
718
|
-
|
|
719
|
-
|
|
587
|
+
case rocksdb_delete_range:
|
|
588
|
+
batch.DeleteRange(db->DefaultColumnFamily(), rocksdb__slice_cast(op->start), rocksdb__slice_cast(op->end));
|
|
589
|
+
break;
|
|
590
|
+
}
|
|
720
591
|
}
|
|
721
592
|
|
|
722
593
|
auto status = db->Write(WriteOptions(), &batch);
|
|
@@ -730,12 +601,14 @@ rocksdb__on_batch_delete (uv_work_t *handle) {
|
|
|
730
601
|
}
|
|
731
602
|
|
|
732
603
|
extern "C" int
|
|
733
|
-
|
|
734
|
-
batch->
|
|
735
|
-
batch->
|
|
604
|
+
rocksdb_write (rocksdb_t *db, rocksdb_write_batch_t *batch, rocksdb_write_t *writes, size_t len, rocksdb_write_batch_cb cb) {
|
|
605
|
+
batch->db = db;
|
|
606
|
+
batch->writes = writes;
|
|
736
607
|
batch->error = nullptr;
|
|
737
608
|
batch->len = len;
|
|
738
609
|
batch->cb = cb;
|
|
739
610
|
|
|
740
|
-
|
|
611
|
+
batch->worker.data = static_cast<void *>(batch);
|
|
612
|
+
|
|
613
|
+
return uv_queue_work(batch->db->loop, &batch->worker, rocksdb__on_batch_write, rocksdb__on_after_write);
|
|
741
614
|
}
|