rocksdb-native 3.5.4 → 3.5.5

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#d2b6760")
16
+ fetch_package("github:holepunchto/librocksdb#dbebf66")
17
17
 
18
18
  add_bare_module(rocksdb_native_bare)
19
19
 
package/binding.c CHANGED
@@ -192,10 +192,8 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
192
192
 
193
193
  js_value_t **elements = malloc(len * sizeof(js_value_t *));
194
194
 
195
- uint32_t fetched;
196
- err = js_get_array_elements(env, column_families, elements, len, 0, &fetched);
195
+ err = js_get_array_elements(env, column_families, elements, len, 0, NULL);
197
196
  assert(err == 0);
198
- assert(fetched == len);
199
197
 
200
198
  for (uint32_t i = 0; i < len; i++) {
201
199
  js_value_t *handle = elements[i];
@@ -397,10 +395,8 @@ rocksdb_native_open(js_env_t *env, js_callback_info_t *info) {
397
395
 
398
396
  js_value_t **elements = malloc(len * sizeof(js_value_t *));
399
397
 
400
- uint32_t fetched;
401
- err = js_get_array_elements(env, argv[3], elements, len, 0, &fetched);
398
+ err = js_get_array_elements(env, argv[3], elements, len, 0, NULL);
402
399
  assert(err == 0);
403
- assert(fetched == len);
404
400
 
405
401
  for (uint32_t i = 0; i < len; i++) {
406
402
  js_value_t *handle = elements[i];
@@ -1410,10 +1406,8 @@ rocksdb_native_read(js_env_t *env, js_callback_info_t *info) {
1410
1406
 
1411
1407
  js_value_t **elements = malloc(len * sizeof(js_value_t *));
1412
1408
 
1413
- uint32_t fetched;
1414
- err = js_get_array_elements(env, argv[2], elements, len, 0, &fetched);
1409
+ err = js_get_array_elements(env, argv[2], elements, len, 0, NULL);
1415
1410
  assert(err == 0);
1416
- assert(fetched == len);
1417
1411
 
1418
1412
  for (uint32_t i = 0; i < len; i++) {
1419
1413
  js_value_t *read = elements[i];
@@ -1614,10 +1608,8 @@ rocksdb_native_write(js_env_t *env, js_callback_info_t *info) {
1614
1608
 
1615
1609
  js_value_t **elements = malloc(len * sizeof(js_value_t *));
1616
1610
 
1617
- uint32_t fetched;
1618
- err = js_get_array_elements(env, argv[2], elements, len, 0, &fetched);
1611
+ err = js_get_array_elements(env, argv[2], elements, len, 0, NULL);
1619
1612
  assert(err == 0);
1620
- assert(fetched == len);
1621
1613
 
1622
1614
  for (uint32_t i = 0; i < len; i++) {
1623
1615
  js_value_t *write = elements[i];
package/lib/batch.js CHANGED
@@ -96,6 +96,8 @@ class RocksDBBatch {
96
96
  const promise = this._promises[i]
97
97
  if (promise !== null) promise.reject(new Error('Batch is destroyed'))
98
98
  }
99
+
100
+ this._onfinished(new Error('Batch is destroyed'))
99
101
  }
100
102
 
101
103
  async flush() {
@@ -129,11 +131,14 @@ class RocksDBBatch {
129
131
  if (this._db._state.resumed !== null) {
130
132
  const resumed = await this._db._state.resumed.promise
131
133
 
132
- if (!resumed && !this._destroyed) {
133
- this._destroyed = true
134
- this._abort()
135
- this._db._state.io.dec()
136
- this._db._unref()
134
+ if (!resumed) {
135
+ if (this._destroyed) {
136
+ this._db._state.io.dec()
137
+ } else {
138
+ this._destroyed = true
139
+ this._abort()
140
+ this._db._unref()
141
+ }
137
142
  }
138
143
  }
139
144
  }
package/lib/iterator.js CHANGED
@@ -75,6 +75,7 @@ module.exports = class RocksDBIterator extends Readable {
75
75
  _onclose(err) {
76
76
  const cb = this._pendingDestroy
77
77
  this._pendingDestroy = null
78
+ this._db._state.io.dec()
78
79
  this._db._unref()
79
80
  cb(err)
80
81
  }
@@ -115,43 +116,70 @@ module.exports = class RocksDBIterator extends Readable {
115
116
 
116
117
  this._pendingOpen = cb
117
118
 
118
- binding.iteratorOpen(
119
- this._db._state._handle,
120
- this._handle,
121
- this._db._columnFamily._handle,
122
- this._gt,
123
- this._gte,
124
- this._lt,
125
- this._lte,
126
- this._reverse,
127
- this._db._snapshot ? this._db._snapshot._handle : null,
128
- this,
129
- this._onopen,
130
- this._onclose,
131
- this._onread
132
- )
119
+ try {
120
+ binding.iteratorOpen(
121
+ this._db._state._handle,
122
+ this._handle,
123
+ this._db._columnFamily._handle,
124
+ this._gt,
125
+ this._gte,
126
+ this._lt,
127
+ this._lte,
128
+ this._reverse,
129
+ this._db._snapshot ? this._db._snapshot._handle : null,
130
+ this,
131
+ this._onopen,
132
+ this._onclose,
133
+ this._onread
134
+ )
135
+ } catch (err) {
136
+ this._db._state.io.dec()
137
+ throw err
138
+ }
133
139
  }
134
140
 
135
141
  async _read(cb) {
142
+ this._db._state.io.inc()
143
+
136
144
  if (this._db._state.resumed !== null) {
137
- await this._db._state.resumed.promise
145
+ const resumed = await this._db._state.resumed.promise
146
+
147
+ if (!resumed) {
148
+ this._db._state.io.dec()
149
+
150
+ return cb(new Error('RocksDB session is closed'))
151
+ }
138
152
  }
139
153
 
140
154
  this._pendingRead = cb
141
155
 
142
- binding.iteratorRead(this._handle, Math.min(this._capacity, this._limit))
143
-
144
- this._db._state.io.inc()
156
+ try {
157
+ binding.iteratorRead(this._handle, Math.min(this._capacity, this._limit))
158
+ } catch (err) {
159
+ this._db._state.io.dec()
160
+ throw err
161
+ }
145
162
  }
146
163
 
147
164
  async _destroy(cb) {
148
165
  await this.ready()
149
166
 
167
+ this._db._state.io.inc()
168
+
150
169
  this._pendingDestroy = cb
151
170
 
152
- if (this._opened === false) return this._onclose(null)
171
+ if (this._opened === false) {
172
+ this._db._state.io.dec()
173
+
174
+ return this._onclose(null)
175
+ }
153
176
 
154
- binding.iteratorClose(this._handle)
177
+ try {
178
+ binding.iteratorClose(this._handle)
179
+ } catch (err) {
180
+ this._db._state.io.dec()
181
+ throw err
182
+ }
155
183
  }
156
184
 
157
185
  _encodeKey(k) {
package/lib/state.js CHANGED
@@ -160,6 +160,7 @@ module.exports = class RocksDBState extends ReadyResource {
160
160
  async _close() {
161
161
  if (this.resumed) this.resumed.resolve(false)
162
162
 
163
+ while (!this.io.isIdle()) await this.io.idle()
163
164
  while (!this.handles.isIdle()) await this.handles.idle()
164
165
 
165
166
  while (this.sessions.length > 0) {
@@ -188,14 +189,12 @@ module.exports = class RocksDBState extends ReadyResource {
188
189
  async flush(db, opts) {
189
190
  if (this.opened === false) await this.ready()
190
191
 
191
- this.handles.inc()
192
192
  this.io.inc()
193
193
 
194
194
  if (this.resumed !== null) {
195
195
  const resumed = await this.resumed.promise
196
196
 
197
197
  if (!resumed) {
198
- this.handles.dec()
199
198
  this.io.dec()
200
199
 
201
200
  throw new Error('RocksDB session is closed')
@@ -219,7 +218,6 @@ module.exports = class RocksDBState extends ReadyResource {
219
218
 
220
219
  await promise
221
220
  } finally {
222
- this.handles.dec()
223
221
  this.io.dec()
224
222
  }
225
223
 
@@ -241,6 +239,7 @@ module.exports = class RocksDBState extends ReadyResource {
241
239
 
242
240
  while (!this.io.isIdle()) await this.io.idle()
243
241
 
242
+ this.io.inc()
244
243
  this.resumed = rrp()
245
244
 
246
245
  const req = { resolve: null, reject: null, handle: null }
@@ -257,6 +256,8 @@ module.exports = class RocksDBState extends ReadyResource {
257
256
 
258
257
  this._suspended = true
259
258
  } finally {
259
+ this.io.dec()
260
+
260
261
  this._suspending = null
261
262
  }
262
263
 
@@ -276,6 +277,8 @@ module.exports = class RocksDBState extends ReadyResource {
276
277
  if (this._suspending !== null) await this._suspending
277
278
  if (this._suspended === false) return
278
279
 
280
+ this.io.inc()
281
+
279
282
  const req = { resolve: null, reject: null, handle: null }
280
283
 
281
284
  const promise = new Promise((resolve, reject) => {
@@ -290,6 +293,8 @@ module.exports = class RocksDBState extends ReadyResource {
290
293
 
291
294
  this._suspended = false
292
295
  } finally {
296
+ this.io.dec()
297
+
293
298
  this._resuming = null
294
299
  }
295
300
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rocksdb-native",
3
- "version": "3.5.4",
3
+ "version": "3.5.5",
4
4
  "description": "librocksdb bindings for JavaScript",
5
5
  "exports": {
6
6
  ".": "./index.js",