rocksdb-native 3.5.4 → 3.5.6
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 +20 -40
- package/lib/batch.js +10 -5
- package/lib/iterator.js +49 -21
- package/lib/state.js +8 -3
- package/package.json +1 -1
- package/prebuilds/android-arm/rocksdb-native.bare +0 -0
- 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
|
@@ -85,7 +85,6 @@ typedef struct {
|
|
|
85
85
|
rocksdb_read_batch_t handle;
|
|
86
86
|
|
|
87
87
|
rocksdb_read_t *reads;
|
|
88
|
-
char **errors;
|
|
89
88
|
|
|
90
89
|
size_t capacity;
|
|
91
90
|
|
|
@@ -98,7 +97,6 @@ typedef struct {
|
|
|
98
97
|
rocksdb_write_batch_t handle;
|
|
99
98
|
|
|
100
99
|
rocksdb_write_t *writes;
|
|
101
|
-
char **errors;
|
|
102
100
|
|
|
103
101
|
size_t capacity;
|
|
104
102
|
|
|
@@ -141,6 +139,10 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
|
|
|
141
139
|
|
|
142
140
|
js_env_t *env = req->env;
|
|
143
141
|
|
|
142
|
+
const rocksdb_column_family_descriptor_t *descriptors = handle->column_families;
|
|
143
|
+
|
|
144
|
+
rocksdb_column_family_t **handles = handle->handles;
|
|
145
|
+
|
|
144
146
|
if (db->exiting) {
|
|
145
147
|
err = js_delete_reference(env, req->on_open);
|
|
146
148
|
assert(err == 0);
|
|
@@ -192,10 +194,8 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
|
|
|
192
194
|
|
|
193
195
|
js_value_t **elements = malloc(len * sizeof(js_value_t *));
|
|
194
196
|
|
|
195
|
-
|
|
196
|
-
err = js_get_array_elements(env, column_families, elements, len, 0, &fetched);
|
|
197
|
+
err = js_get_array_elements(env, column_families, elements, len, 0, NULL);
|
|
197
198
|
assert(err == 0);
|
|
198
|
-
assert(fetched == len);
|
|
199
199
|
|
|
200
200
|
for (uint32_t i = 0; i < len; i++) {
|
|
201
201
|
js_value_t *handle = elements[i];
|
|
@@ -222,9 +222,9 @@ rocksdb_native__on_open(rocksdb_open_t *handle, int status) {
|
|
|
222
222
|
assert(err == 0);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
-
free((void *)
|
|
225
|
+
free((void *) descriptors);
|
|
226
226
|
|
|
227
|
-
free(
|
|
227
|
+
free(handles);
|
|
228
228
|
}
|
|
229
229
|
|
|
230
230
|
static void
|
|
@@ -397,10 +397,8 @@ rocksdb_native_open(js_env_t *env, js_callback_info_t *info) {
|
|
|
397
397
|
|
|
398
398
|
js_value_t **elements = malloc(len * sizeof(js_value_t *));
|
|
399
399
|
|
|
400
|
-
|
|
401
|
-
err = js_get_array_elements(env, argv[3], elements, len, 0, &fetched);
|
|
400
|
+
err = js_get_array_elements(env, argv[3], elements, len, 0, NULL);
|
|
402
401
|
assert(err == 0);
|
|
403
|
-
assert(fetched == len);
|
|
404
402
|
|
|
405
403
|
for (uint32_t i = 0; i < len; i++) {
|
|
406
404
|
js_value_t *handle = elements[i];
|
|
@@ -1268,19 +1266,12 @@ rocksdb_native_read_buffer(js_env_t *env, js_callback_info_t *info) {
|
|
|
1268
1266
|
|
|
1269
1267
|
js_value_t *handle;
|
|
1270
1268
|
|
|
1271
|
-
|
|
1272
|
-
err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_read_t)
|
|
1269
|
+
rocksdb_read_t *reads;
|
|
1270
|
+
err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_read_t), (void **) &reads, &handle);
|
|
1273
1271
|
assert(err == 0);
|
|
1274
1272
|
|
|
1275
1273
|
req->capacity = capacity;
|
|
1276
|
-
|
|
1277
|
-
size_t offset = 0;
|
|
1278
|
-
|
|
1279
|
-
req->reads = (rocksdb_read_t *) &data[offset];
|
|
1280
|
-
|
|
1281
|
-
offset += capacity * sizeof(rocksdb_read_t);
|
|
1282
|
-
|
|
1283
|
-
req->errors = (char **) &data[offset];
|
|
1274
|
+
req->reads = reads;
|
|
1284
1275
|
|
|
1285
1276
|
return handle;
|
|
1286
1277
|
}
|
|
@@ -1304,7 +1295,7 @@ rocksdb_native__on_read(rocksdb_read_batch_t *handle, int status) {
|
|
|
1304
1295
|
for (size_t i = 0; i < len; i++) {
|
|
1305
1296
|
js_value_t *result;
|
|
1306
1297
|
|
|
1307
|
-
char *error = req->errors[i];
|
|
1298
|
+
char *error = req->handle.errors[i];
|
|
1308
1299
|
|
|
1309
1300
|
if (error) continue;
|
|
1310
1301
|
|
|
@@ -1333,7 +1324,7 @@ rocksdb_native__on_read(rocksdb_read_batch_t *handle, int status) {
|
|
|
1333
1324
|
for (size_t i = 0; i < len; i++) {
|
|
1334
1325
|
js_value_t *result;
|
|
1335
1326
|
|
|
1336
|
-
char *error = req->errors[i];
|
|
1327
|
+
char *error = req->handle.errors[i];
|
|
1337
1328
|
|
|
1338
1329
|
if (error) {
|
|
1339
1330
|
err = js_create_string_utf8(env, (utf8_t *) error, -1, &result);
|
|
@@ -1410,10 +1401,8 @@ rocksdb_native_read(js_env_t *env, js_callback_info_t *info) {
|
|
|
1410
1401
|
|
|
1411
1402
|
js_value_t **elements = malloc(len * sizeof(js_value_t *));
|
|
1412
1403
|
|
|
1413
|
-
|
|
1414
|
-
err = js_get_array_elements(env, argv[2], elements, len, 0, &fetched);
|
|
1404
|
+
err = js_get_array_elements(env, argv[2], elements, len, 0, NULL);
|
|
1415
1405
|
assert(err == 0);
|
|
1416
|
-
assert(fetched == len);
|
|
1417
1406
|
|
|
1418
1407
|
for (uint32_t i = 0; i < len; i++) {
|
|
1419
1408
|
js_value_t *read = elements[i];
|
|
@@ -1467,7 +1456,7 @@ rocksdb_native_read(js_env_t *env, js_callback_info_t *info) {
|
|
|
1467
1456
|
assert(err == 0);
|
|
1468
1457
|
}
|
|
1469
1458
|
|
|
1470
|
-
err = rocksdb_read(&db->handle, &req->handle, req->reads,
|
|
1459
|
+
err = rocksdb_read(&db->handle, &req->handle, req->reads, len, &options, rocksdb_native__on_read);
|
|
1471
1460
|
assert(err == 0);
|
|
1472
1461
|
|
|
1473
1462
|
return NULL;
|
|
@@ -1511,19 +1500,12 @@ rocksdb_native_write_buffer(js_env_t *env, js_callback_info_t *info) {
|
|
|
1511
1500
|
|
|
1512
1501
|
js_value_t *handle;
|
|
1513
1502
|
|
|
1514
|
-
|
|
1515
|
-
err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_write_t)
|
|
1503
|
+
rocksdb_write_t *writes;
|
|
1504
|
+
err = js_create_arraybuffer(env, capacity * sizeof(rocksdb_write_t), (void **) &writes, &handle);
|
|
1516
1505
|
assert(err == 0);
|
|
1517
1506
|
|
|
1518
1507
|
req->capacity = capacity;
|
|
1519
|
-
|
|
1520
|
-
size_t offset = 0;
|
|
1521
|
-
|
|
1522
|
-
req->writes = (rocksdb_write_t *) &data[offset];
|
|
1523
|
-
|
|
1524
|
-
offset += capacity * sizeof(rocksdb_write_t);
|
|
1525
|
-
|
|
1526
|
-
req->errors = (char **) &data[offset];
|
|
1508
|
+
req->writes = writes;
|
|
1527
1509
|
|
|
1528
1510
|
return handle;
|
|
1529
1511
|
}
|
|
@@ -1614,10 +1596,8 @@ rocksdb_native_write(js_env_t *env, js_callback_info_t *info) {
|
|
|
1614
1596
|
|
|
1615
1597
|
js_value_t **elements = malloc(len * sizeof(js_value_t *));
|
|
1616
1598
|
|
|
1617
|
-
|
|
1618
|
-
err = js_get_array_elements(env, argv[2], elements, len, 0, &fetched);
|
|
1599
|
+
err = js_get_array_elements(env, argv[2], elements, len, 0, NULL);
|
|
1619
1600
|
assert(err == 0);
|
|
1620
|
-
assert(fetched == len);
|
|
1621
1601
|
|
|
1622
1602
|
for (uint32_t i = 0; i < len; i++) {
|
|
1623
1603
|
js_value_t *write = elements[i];
|
|
@@ -1794,7 +1774,7 @@ rocksdb_native_flush(js_env_t *env, js_callback_info_t *info) {
|
|
|
1794
1774
|
err = rocksdb_flush(&db->handle, &req->handle, column_family->handle, NULL, rocksdb_native__on_flush);
|
|
1795
1775
|
assert(err == 0);
|
|
1796
1776
|
|
|
1797
|
-
return
|
|
1777
|
+
return handle;
|
|
1798
1778
|
}
|
|
1799
1779
|
|
|
1800
1780
|
static js_value_t *
|
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
|
|
133
|
-
this._destroyed
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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)
|
|
171
|
+
if (this._opened === false) {
|
|
172
|
+
this._db._state.io.dec()
|
|
173
|
+
|
|
174
|
+
return this._onclose(null)
|
|
175
|
+
}
|
|
153
176
|
|
|
154
|
-
|
|
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
|
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
|
|
Binary file
|