rocksdb-native 3.5.0 → 3.5.1

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 CHANGED
@@ -13,7 +13,7 @@ if(target MATCHES "win32")
13
13
  add_compile_options(/MT$<$<CONFIG:Debug>:d>)
14
14
  endif()
15
15
 
16
- fetch_package("github:holepunchto/librocksdb#c254e48")
16
+ fetch_package("github:holepunchto/librocksdb#d2b6760")
17
17
 
18
18
  add_bare_module(rocksdb_native_bare)
19
19
 
package/binding.c CHANGED
@@ -190,10 +190,15 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
190
190
  err = js_get_array_length(env, column_families, &len);
191
191
  assert(err == 0);
192
192
 
193
+ js_value_t **elements = malloc(len * sizeof(js_value_t *));
194
+
195
+ uint32_t fetched;
196
+ err = js_get_array_elements(env, column_families, elements, len, 0, &fetched);
197
+ assert(err == 0);
198
+ assert(fetched == len);
199
+
193
200
  for (uint32_t i = 0; i < len; i++) {
194
- js_value_t *handle;
195
- err = js_get_element(env, column_families, i, &handle);
196
- assert(err == 0);
201
+ js_value_t *handle = elements[i];
197
202
 
198
203
  rocksdb_native_column_family_t *column_family;
199
204
  err = js_get_arraybuffer_info(env, handle, (void **) &column_family, NULL);
@@ -207,6 +212,8 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
207
212
  err = js_add_teardown_callback(env, rocksdb_native__on_column_family_teardown, (void *) column_family);
208
213
  assert(err == 0);
209
214
  }
215
+
216
+ free(elements);
210
217
  }
211
218
 
212
219
  js_call_function_with_checkpoint(env, ctx, cb, 1, (js_value_t *[]) {error}, NULL);
@@ -388,10 +395,15 @@ rocksdb_native_open(js_env_t *env, js_callback_info_t *info) {
388
395
 
389
396
  rocksdb_column_family_descriptor_t *column_families = calloc(len, sizeof(rocksdb_column_family_descriptor_t));
390
397
 
398
+ js_value_t **elements = malloc(len * sizeof(js_value_t *));
399
+
400
+ uint32_t fetched;
401
+ err = js_get_array_elements(env, argv[3], elements, len, 0, &fetched);
402
+ assert(err == 0);
403
+ assert(fetched == len);
404
+
391
405
  for (uint32_t i = 0; i < len; i++) {
392
- js_value_t *handle;
393
- err = js_get_element(env, argv[3], i, &handle);
394
- assert(err == 0);
406
+ js_value_t *handle = elements[i];
395
407
 
396
408
  rocksdb_native_column_family_t *column_family;
397
409
  err = js_get_arraybuffer_info(env, handle, (void **) &column_family, NULL);
@@ -402,6 +414,8 @@ rocksdb_native_open(js_env_t *env, js_callback_info_t *info) {
402
414
  column_family->db = &db->handle;
403
415
  }
404
416
 
417
+ free(elements);
418
+
405
419
  rocksdb_column_family_t **handles = calloc(len, sizeof(rocksdb_column_family_t *));
406
420
 
407
421
  js_value_t *handle;
@@ -1394,10 +1408,15 @@ rocksdb_native_read(js_env_t *env, js_callback_info_t *info) {
1394
1408
  err = js_create_reference(env, argv[5], 1, &req->on_status);
1395
1409
  assert(err == 0);
1396
1410
 
1411
+ js_value_t **elements = malloc(len * sizeof(js_value_t *));
1412
+
1413
+ uint32_t fetched;
1414
+ err = js_get_array_elements(env, argv[2], elements, len, 0, &fetched);
1415
+ assert(err == 0);
1416
+ assert(fetched == len);
1417
+
1397
1418
  for (uint32_t i = 0; i < len; i++) {
1398
- js_value_t *read;
1399
- err = js_get_element(env, argv[2], i, &read);
1400
- assert(err == 0);
1419
+ js_value_t *read = elements[i];
1401
1420
 
1402
1421
  js_value_t *property;
1403
1422
 
@@ -1433,6 +1452,8 @@ rocksdb_native_read(js_env_t *env, js_callback_info_t *info) {
1433
1452
  }
1434
1453
  }
1435
1454
 
1455
+ free(elements);
1456
+
1436
1457
  rocksdb_read_options_t options = {
1437
1458
  .version = 0,
1438
1459
  };
@@ -1591,10 +1612,15 @@ rocksdb_native_write(js_env_t *env, js_callback_info_t *info) {
1591
1612
  err = js_create_reference(env, argv[4], 1, &req->on_status);
1592
1613
  assert(err == 0);
1593
1614
 
1615
+ js_value_t **elements = malloc(len * sizeof(js_value_t *));
1616
+
1617
+ uint32_t fetched;
1618
+ err = js_get_array_elements(env, argv[2], elements, len, 0, &fetched);
1619
+ assert(err == 0);
1620
+ assert(fetched == len);
1621
+
1594
1622
  for (uint32_t i = 0; i < len; i++) {
1595
- js_value_t *write;
1596
- err = js_get_element(env, argv[2], i, &write);
1597
- assert(err == 0);
1623
+ js_value_t *write = elements[i];
1598
1624
 
1599
1625
  js_value_t *property;
1600
1626
 
@@ -1668,6 +1694,8 @@ rocksdb_native_write(js_env_t *env, js_callback_info_t *info) {
1668
1694
  }
1669
1695
  }
1670
1696
 
1697
+ free(elements);
1698
+
1671
1699
  err = rocksdb_write(&db->handle, &req->handle, req->writes, len, NULL, rocksdb_native__on_write);
1672
1700
  assert(err == 0);
1673
1701
 
package/index.js CHANGED
@@ -172,10 +172,20 @@ class RocksDB {
172
172
  this._state.activity.inc()
173
173
  }
174
174
 
175
+ _refBatch() {
176
+ this._ref()
177
+ this._state.activeBatches.inc()
178
+ }
179
+
175
180
  _unref() {
176
181
  if (this._snapshot) this._snapshot.unref()
177
182
  this._state.activity.dec()
178
183
  }
184
+
185
+ _unrefBatch() {
186
+ this._unref()
187
+ this._state.activeBatches.dec()
188
+ }
179
189
  }
180
190
 
181
191
  module.exports = exports = RocksDB
package/lib/batch.js CHANGED
@@ -8,7 +8,7 @@ class RocksDBBatch {
8
8
  constructor(db, opts = {}) {
9
9
  const { capacity = 8, autoDestroy = false } = opts
10
10
 
11
- db._ref()
11
+ db._refBatch()
12
12
 
13
13
  this._db = db
14
14
  this._destroyed = false
@@ -32,7 +32,7 @@ class RocksDBBatch {
32
32
  _reuse(db, opts = {}) {
33
33
  const { autoDestroy = false } = opts
34
34
 
35
- db._ref()
35
+ db._refBatch()
36
36
 
37
37
  this._db = db
38
38
  this._destroyed = false
@@ -81,7 +81,7 @@ class RocksDBBatch {
81
81
 
82
82
  if (this._promises.length) this._abort()
83
83
 
84
- this._db._unref()
84
+ this._db._unrefBatch()
85
85
  this._onfree()
86
86
  }
87
87
 
package/lib/state.js CHANGED
@@ -25,6 +25,7 @@ module.exports = class RocksDBState extends ReadyResource {
25
25
  this.path = path
26
26
  this.db = db
27
27
  this.activity = new RefCounter()
28
+ this.activeBatches = new RefCounter()
28
29
  this.sessions = []
29
30
  this.columnFamilies = [columnFamily]
30
31
  this.deferSnapshotInit = true
@@ -204,14 +205,17 @@ module.exports = class RocksDBState extends ReadyResource {
204
205
  }
205
206
 
206
207
  async suspend() {
208
+ if (this._suspended === true) return
207
209
  if (this._suspending === null) this._suspending = this._suspend()
208
210
  return this._suspending
209
211
  }
210
212
 
211
213
  async _suspend() {
212
- if (this._resuming) await this._resuming
214
+ if (this._resuming !== null) await this._resuming
213
215
  if (this.opened === false) await this.ready()
214
216
 
217
+ while (!this.activeBatches.isIdle()) await this.activeBatches.idle()
218
+
215
219
  const req = { resolve: null, reject: null, handle: null }
216
220
 
217
221
  const promise = new Promise((resolve, reject) => {
@@ -236,12 +240,13 @@ module.exports = class RocksDBState extends ReadyResource {
236
240
  }
237
241
 
238
242
  resume() {
243
+ if (this._suspended === false) return
239
244
  if (this._resuming === null) this._resuming = this._resume()
240
245
  return this._resuming
241
246
  }
242
247
 
243
248
  async _resume() {
244
- if (this._suspending) await this._suspending
249
+ if (this._suspending !== null) await this._suspending
245
250
  if (this.opened === false) await this.ready()
246
251
 
247
252
  const req = { resolve: null, reject: null, handle: null }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rocksdb-native",
3
- "version": "3.5.0",
3
+ "version": "3.5.1",
4
4
  "description": "librocksdb bindings for JavaScript",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "homepage": "https://github.com/holepunchto/rocksdb-native",
35
35
  "engines": {
36
- "bare": ">=1.7.0"
36
+ "bare": ">=1.16.0"
37
37
  },
38
38
  "dependencies": {
39
39
  "compact-encoding": "^2.15.0",
@@ -43,7 +43,7 @@
43
43
  "streamx": "^2.16.1"
44
44
  },
45
45
  "devDependencies": {
46
- "bare-compat-napi": "^1.1.0",
46
+ "bare-compat-napi": "^1.3.0",
47
47
  "brittle": "^3.5.0",
48
48
  "cmake-bare": "^1.1.14",
49
49
  "cmake-fetch": "^1.0.1",