@lodestar/db 1.35.0-rc.0 → 1.35.0-rc.2

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.
@@ -1,4 +1,3 @@
1
1
  export type { DatabaseController, Db, DbReqOpts, FilterOptions, KeyValue } from "./interface.js";
2
- export { LevelDbController } from "./level.js";
3
2
  export type { LevelDbControllerMetrics } from "./metrics.js";
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,kBAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAC7C,YAAY,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,kBAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAC/F,YAAY,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC"}
@@ -1,2 +1,2 @@
1
- export { LevelDbController } from "./level.js";
1
+ export {};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controller/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { DB } from "@lodestar/bun";
2
+ import { Logger } from "@lodestar/utils";
3
+ import { DatabaseController, DatabaseOptions, DbReqOpts, FilterOptions, KeyValue } from "./interface.js";
4
+ import { LevelDbControllerMetrics } from "./metrics.js";
5
+ export type LevelDbControllerModules = {
6
+ logger: Logger;
7
+ metrics?: LevelDbControllerMetrics | null;
8
+ };
9
+ export declare enum Status {
10
+ started = "started",
11
+ closed = "closed"
12
+ }
13
+ export declare class LevelDbController implements DatabaseController<Uint8Array, Uint8Array> {
14
+ private readonly db;
15
+ private metrics;
16
+ private status;
17
+ constructor(db: DB, metrics: LevelDbControllerMetrics | null);
18
+ static create(options: DatabaseOptions, { metrics }: LevelDbControllerModules): Promise<LevelDbController>;
19
+ static destroy(location: string): Promise<void>;
20
+ close(): Promise<void>;
21
+ setMetrics(metrics: LevelDbControllerMetrics): void;
22
+ get(key: Uint8Array, opts?: DbReqOpts): Promise<Uint8Array | null>;
23
+ getMany(keys: Uint8Array[], opts?: DbReqOpts): Promise<(Uint8Array | undefined)[]>;
24
+ put(key: Uint8Array, value: Uint8Array, opts?: DbReqOpts): Promise<void>;
25
+ delete(key: Uint8Array, opts?: DbReqOpts): Promise<void>;
26
+ batchPut(items: KeyValue<Uint8Array, Uint8Array>[], opts?: DbReqOpts): Promise<void>;
27
+ batchDelete(keys: Uint8Array[], opts?: DbReqOpts): Promise<void>;
28
+ keysStream(opts?: FilterOptions<Uint8Array>): AsyncIterable<Uint8Array>;
29
+ keys(opts?: FilterOptions<Uint8Array>): Promise<Uint8Array[]>;
30
+ valuesStream(opts?: FilterOptions<Uint8Array>): AsyncIterable<Uint8Array>;
31
+ values(opts?: FilterOptions<Uint8Array>): Promise<Uint8Array[]>;
32
+ entriesStream(opts?: FilterOptions<Uint8Array>): AsyncIterable<KeyValue<Uint8Array, Uint8Array>>;
33
+ entries(opts?: FilterOptions<Uint8Array>): Promise<KeyValue<Uint8Array, Uint8Array>[]>;
34
+ }
35
+ //# sourceMappingURL=level_bun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level_bun.d.ts","sourceRoot":"","sources":["../../src/controller/level_bun.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,EAiBH,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,kBAAkB,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACvG,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,oBAAY,MAAM;IAChB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAID,qBAAa,iBAAkB,YAAW,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC;IAIhF,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,MAAM,CAAkB;gBAGb,EAAE,EAAE,EAAE,EACf,OAAO,EAAE,wBAAwB,GAAG,IAAI;WAGrC,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,EAAC,OAAO,EAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC;WAKjG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,UAAU,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAO7C,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAOlE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;IAOlF,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxE,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpF,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtE,UAAU,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IA+BrE,IAAI,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA2BvE,YAAY,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IAgCvE,MAAM,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA4BzE,aAAa,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAgC9F,OAAO,CAAC,IAAI,GAAE,aAAa,CAAC,UAAU,CAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;CA2BjG"}
@@ -0,0 +1,269 @@
1
+ import { dbBatchDelete, dbBatchPut, dbClose, dbDelete, dbDestroy, dbGet, dbIterator, dbOpen, dbPut, iteratorDestroy, iteratorKey, iteratorNext, iteratorSeek, iteratorSeekToFirst, iteratorValid, iteratorValue, } from "@lodestar/bun";
2
+ export var Status;
3
+ (function (Status) {
4
+ Status["started"] = "started";
5
+ Status["closed"] = "closed";
6
+ })(Status || (Status = {}));
7
+ const BUCKET_ID_UNKNOWN = "unknown";
8
+ export class LevelDbController {
9
+ db;
10
+ metrics;
11
+ status = Status.started;
12
+ constructor(db, metrics) {
13
+ this.db = db;
14
+ this.metrics = metrics;
15
+ }
16
+ static async create(options, { metrics }) {
17
+ const db = dbOpen(options.name, { create_if_missing: true });
18
+ return new LevelDbController(db, metrics ?? null);
19
+ }
20
+ static async destroy(location) {
21
+ dbDestroy(location);
22
+ }
23
+ async close() {
24
+ if (this.status === Status.closed) {
25
+ return;
26
+ }
27
+ this.status = Status.closed;
28
+ dbClose(this.db);
29
+ }
30
+ setMetrics(metrics) {
31
+ if (this.metrics !== null) {
32
+ throw new Error("Metrics already set");
33
+ }
34
+ this.metrics = metrics;
35
+ }
36
+ async get(key, opts) {
37
+ this.metrics?.dbReadReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
38
+ this.metrics?.dbReadItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
39
+ return dbGet(this.db, key);
40
+ }
41
+ async getMany(keys, opts) {
42
+ this.metrics?.dbReadReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
43
+ this.metrics?.dbReadItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, keys.length);
44
+ return keys.map((key) => dbGet(this.db, key) ?? undefined);
45
+ }
46
+ async put(key, value, opts) {
47
+ this.metrics?.dbWriteReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
48
+ this.metrics?.dbWriteItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
49
+ dbPut(this.db, key, value);
50
+ }
51
+ async delete(key, opts) {
52
+ this.metrics?.dbWriteReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
53
+ this.metrics?.dbWriteItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
54
+ dbDelete(this.db, key);
55
+ }
56
+ async batchPut(items, opts) {
57
+ this.metrics?.dbWriteReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
58
+ this.metrics?.dbWriteItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, items.length);
59
+ dbBatchPut(this.db, items);
60
+ }
61
+ async batchDelete(keys, opts) {
62
+ this.metrics?.dbWriteReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
63
+ this.metrics?.dbWriteItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, keys.length);
64
+ dbBatchDelete(this.db, keys);
65
+ }
66
+ keysStream(opts = {}) {
67
+ const iterator = dbIterator(this.db);
68
+ if (opts.gt) {
69
+ iteratorSeek(iterator, opts.gt);
70
+ iteratorNext(iterator);
71
+ }
72
+ else if (opts.gte) {
73
+ iteratorSeek(iterator, opts.gte);
74
+ }
75
+ else {
76
+ iteratorSeekToFirst(iterator);
77
+ }
78
+ const bucket = opts.bucketId ?? BUCKET_ID_UNKNOWN;
79
+ const metrics = this.metrics;
80
+ metrics?.dbReadReq.inc({ bucket }, 1);
81
+ let itemsRead = 0;
82
+ return (async function* () {
83
+ try {
84
+ while (iteratorValid(iterator)) {
85
+ const key = iteratorKey(iterator);
86
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0)
87
+ break;
88
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0)
89
+ break;
90
+ itemsRead++;
91
+ yield key;
92
+ iteratorNext(iterator);
93
+ }
94
+ }
95
+ finally {
96
+ metrics?.dbReadItems.inc({ bucket }, itemsRead);
97
+ iteratorDestroy(iterator);
98
+ }
99
+ })();
100
+ }
101
+ async keys(opts = {}) {
102
+ const iterator = dbIterator(this.db);
103
+ if (opts.gt) {
104
+ iteratorSeek(iterator, opts.gt);
105
+ iteratorNext(iterator);
106
+ }
107
+ else if (opts.gte) {
108
+ iteratorSeek(iterator, opts.gte);
109
+ }
110
+ else {
111
+ iteratorSeekToFirst(iterator);
112
+ }
113
+ const keys = [];
114
+ this.metrics?.dbReadReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
115
+ try {
116
+ while (iteratorValid(iterator)) {
117
+ const key = iteratorKey(iterator);
118
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0)
119
+ break;
120
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0)
121
+ break;
122
+ keys.push(key);
123
+ iteratorNext(iterator);
124
+ }
125
+ return keys;
126
+ }
127
+ finally {
128
+ this.metrics?.dbReadItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, keys.length);
129
+ iteratorDestroy(iterator);
130
+ }
131
+ }
132
+ valuesStream(opts = {}) {
133
+ const iterator = dbIterator(this.db);
134
+ if (opts.gt) {
135
+ iteratorSeek(iterator, opts.gt);
136
+ iteratorNext(iterator);
137
+ }
138
+ else if (opts.gte) {
139
+ iteratorSeek(iterator, opts.gte);
140
+ }
141
+ else {
142
+ iteratorSeekToFirst(iterator);
143
+ }
144
+ const bucket = opts.bucketId ?? BUCKET_ID_UNKNOWN;
145
+ const metrics = this.metrics;
146
+ metrics?.dbReadReq.inc({ bucket }, 1);
147
+ let itemsRead = 0;
148
+ return (async function* () {
149
+ try {
150
+ while (iteratorValid(iterator)) {
151
+ const key = iteratorKey(iterator);
152
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0)
153
+ break;
154
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0)
155
+ break;
156
+ itemsRead++;
157
+ const value = iteratorValue(iterator);
158
+ yield value;
159
+ iteratorNext(iterator);
160
+ }
161
+ }
162
+ finally {
163
+ metrics?.dbReadItems.inc({ bucket }, itemsRead);
164
+ iteratorDestroy(iterator);
165
+ }
166
+ })();
167
+ }
168
+ async values(opts = {}) {
169
+ const iterator = dbIterator(this.db);
170
+ if (opts.gt) {
171
+ iteratorSeek(iterator, opts.gt);
172
+ iteratorNext(iterator);
173
+ }
174
+ else if (opts.gte) {
175
+ iteratorSeek(iterator, opts.gte);
176
+ }
177
+ else {
178
+ iteratorSeekToFirst(iterator);
179
+ }
180
+ const values = [];
181
+ this.metrics?.dbReadReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
182
+ try {
183
+ while (iteratorValid(iterator)) {
184
+ const key = iteratorKey(iterator);
185
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0)
186
+ break;
187
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0)
188
+ break;
189
+ const value = iteratorValue(iterator);
190
+ values.push(value);
191
+ iteratorNext(iterator);
192
+ }
193
+ return values;
194
+ }
195
+ finally {
196
+ this.metrics?.dbReadItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, values.length);
197
+ iteratorDestroy(iterator);
198
+ }
199
+ }
200
+ entriesStream(opts = {}) {
201
+ const iterator = dbIterator(this.db);
202
+ if (opts.gt) {
203
+ iteratorSeek(iterator, opts.gt);
204
+ iteratorNext(iterator);
205
+ }
206
+ else if (opts.gte) {
207
+ iteratorSeek(iterator, opts.gte);
208
+ }
209
+ else {
210
+ iteratorSeekToFirst(iterator);
211
+ }
212
+ const bucket = opts.bucketId ?? BUCKET_ID_UNKNOWN;
213
+ const metrics = this.metrics;
214
+ metrics?.dbReadReq.inc({ bucket }, 1);
215
+ let itemsRead = 0;
216
+ return (async function* () {
217
+ try {
218
+ while (iteratorValid(iterator)) {
219
+ const key = iteratorKey(iterator);
220
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0)
221
+ break;
222
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0)
223
+ break;
224
+ itemsRead++;
225
+ const value = iteratorValue(iterator);
226
+ yield { key, value };
227
+ iteratorNext(iterator);
228
+ }
229
+ }
230
+ finally {
231
+ metrics?.dbReadItems.inc({ bucket }, itemsRead);
232
+ iteratorDestroy(iterator);
233
+ }
234
+ })();
235
+ }
236
+ async entries(opts = {}) {
237
+ const iterator = dbIterator(this.db);
238
+ if (opts.gt) {
239
+ iteratorSeek(iterator, opts.gt);
240
+ iteratorNext(iterator);
241
+ }
242
+ else if (opts.gte) {
243
+ iteratorSeek(iterator, opts.gte);
244
+ }
245
+ else {
246
+ iteratorSeekToFirst(iterator);
247
+ }
248
+ const entries = [];
249
+ this.metrics?.dbReadReq.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, 1);
250
+ try {
251
+ while (iteratorValid(iterator)) {
252
+ const key = iteratorKey(iterator);
253
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0)
254
+ break;
255
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0)
256
+ break;
257
+ const value = iteratorValue(iterator);
258
+ entries.push({ key, value });
259
+ iteratorNext(iterator);
260
+ }
261
+ return entries;
262
+ }
263
+ finally {
264
+ this.metrics?.dbReadItems.inc({ bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN }, entries.length);
265
+ iteratorDestroy(iterator);
266
+ }
267
+ }
268
+ }
269
+ //# sourceMappingURL=level_bun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"level_bun.js","sourceRoot":"","sources":["../../src/controller/level_bun.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodestar/db",
3
- "version": "1.35.0-rc.0",
3
+ "version": "1.35.0-rc.2",
4
4
  "description": "DB modules of Lodestar",
5
5
  "author": "ChainSafe Systems",
6
6
  "homepage": "https://github.com/ChainSafe/lodestar#readme",
@@ -16,6 +16,16 @@
16
16
  ".": {
17
17
  "bun": "./src/index.ts",
18
18
  "import": "./lib/index.js"
19
+ },
20
+ "./controller/level": {
21
+ "bun": "./src/controller/level_bun.ts",
22
+ "import": "./lib/controller/level.js"
23
+ }
24
+ },
25
+ "imports": {
26
+ "#controller/level": {
27
+ "bun": "./src/controller/level_bun.ts",
28
+ "import": "./src/controller/level.js"
19
29
  }
20
30
  },
21
31
  "types": "./lib/index.d.ts",
@@ -40,13 +50,14 @@
40
50
  },
41
51
  "dependencies": {
42
52
  "@chainsafe/ssz": "^1.2.2",
43
- "@lodestar/config": "1.35.0-rc.0",
44
- "@lodestar/utils": "1.35.0-rc.0",
53
+ "@lodestar/bun": "git+https://github.com/ChainSafe/lodestar-bun.git",
54
+ "@lodestar/config": "1.35.0-rc.2",
55
+ "@lodestar/utils": "1.35.0-rc.2",
45
56
  "classic-level": "^1.4.1",
46
57
  "it-all": "^3.0.4"
47
58
  },
48
59
  "devDependencies": {
49
- "@lodestar/logger": "1.35.0-rc.0"
60
+ "@lodestar/logger": "1.35.0-rc.2"
50
61
  },
51
- "gitHead": "54ad807aa5800d66681c2dd9cab2a0f9dd2861e6"
62
+ "gitHead": "f621d71a81568fbe5d339e23ed4ac5fabcf735dc"
52
63
  }
@@ -1,3 +1,2 @@
1
1
  export type {DatabaseController, Db, DbReqOpts, FilterOptions, KeyValue} from "./interface.js";
2
- export {LevelDbController} from "./level.js";
3
2
  export type {LevelDbControllerMetrics} from "./metrics.js";
@@ -0,0 +1,288 @@
1
+ import {
2
+ DB,
3
+ dbBatchDelete,
4
+ dbBatchPut,
5
+ dbClose,
6
+ dbDelete,
7
+ dbDestroy,
8
+ dbGet,
9
+ dbIterator,
10
+ dbOpen,
11
+ dbPut,
12
+ iteratorDestroy,
13
+ iteratorKey,
14
+ iteratorNext,
15
+ iteratorSeek,
16
+ iteratorSeekToFirst,
17
+ iteratorValid,
18
+ iteratorValue,
19
+ } from "@lodestar/bun";
20
+ import {Logger} from "@lodestar/utils";
21
+ import {DatabaseController, DatabaseOptions, DbReqOpts, FilterOptions, KeyValue} from "./interface.js";
22
+ import {LevelDbControllerMetrics} from "./metrics.js";
23
+
24
+ export type LevelDbControllerModules = {
25
+ logger: Logger;
26
+ metrics?: LevelDbControllerMetrics | null;
27
+ };
28
+
29
+ export enum Status {
30
+ started = "started",
31
+ closed = "closed",
32
+ }
33
+
34
+ const BUCKET_ID_UNKNOWN = "unknown";
35
+
36
+ export class LevelDbController implements DatabaseController<Uint8Array, Uint8Array> {
37
+ private status = Status.started;
38
+
39
+ constructor(
40
+ private readonly db: DB,
41
+ private metrics: LevelDbControllerMetrics | null
42
+ ) {}
43
+
44
+ static async create(options: DatabaseOptions, {metrics}: LevelDbControllerModules): Promise<LevelDbController> {
45
+ const db = dbOpen(options.name, {create_if_missing: true});
46
+ return new LevelDbController(db, metrics ?? null);
47
+ }
48
+
49
+ static async destroy(location: string): Promise<void> {
50
+ dbDestroy(location);
51
+ }
52
+
53
+ async close(): Promise<void> {
54
+ if (this.status === Status.closed) {
55
+ return;
56
+ }
57
+ this.status = Status.closed;
58
+
59
+ dbClose(this.db);
60
+ }
61
+
62
+ setMetrics(metrics: LevelDbControllerMetrics): void {
63
+ if (this.metrics !== null) {
64
+ throw new Error("Metrics already set");
65
+ }
66
+ this.metrics = metrics;
67
+ }
68
+
69
+ async get(key: Uint8Array, opts?: DbReqOpts): Promise<Uint8Array | null> {
70
+ this.metrics?.dbReadReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
71
+ this.metrics?.dbReadItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
72
+
73
+ return dbGet(this.db, key);
74
+ }
75
+
76
+ async getMany(keys: Uint8Array[], opts?: DbReqOpts): Promise<(Uint8Array | undefined)[]> {
77
+ this.metrics?.dbReadReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
78
+ this.metrics?.dbReadItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, keys.length);
79
+
80
+ return keys.map((key) => dbGet(this.db, key) ?? undefined);
81
+ }
82
+
83
+ async put(key: Uint8Array, value: Uint8Array, opts?: DbReqOpts): Promise<void> {
84
+ this.metrics?.dbWriteReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
85
+ this.metrics?.dbWriteItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
86
+
87
+ dbPut(this.db, key, value);
88
+ }
89
+
90
+ async delete(key: Uint8Array, opts?: DbReqOpts): Promise<void> {
91
+ this.metrics?.dbWriteReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
92
+ this.metrics?.dbWriteItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
93
+
94
+ dbDelete(this.db, key);
95
+ }
96
+
97
+ async batchPut(items: KeyValue<Uint8Array, Uint8Array>[], opts?: DbReqOpts): Promise<void> {
98
+ this.metrics?.dbWriteReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
99
+ this.metrics?.dbWriteItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, items.length);
100
+
101
+ dbBatchPut(this.db, items);
102
+ }
103
+
104
+ async batchDelete(keys: Uint8Array[], opts?: DbReqOpts): Promise<void> {
105
+ this.metrics?.dbWriteReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
106
+ this.metrics?.dbWriteItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, keys.length);
107
+
108
+ dbBatchDelete(this.db, keys);
109
+ }
110
+
111
+ keysStream(opts: FilterOptions<Uint8Array> = {}): AsyncIterable<Uint8Array> {
112
+ const iterator = dbIterator(this.db);
113
+ if (opts.gt) {
114
+ iteratorSeek(iterator, opts.gt);
115
+ iteratorNext(iterator);
116
+ } else if (opts.gte) {
117
+ iteratorSeek(iterator, opts.gte);
118
+ } else {
119
+ iteratorSeekToFirst(iterator);
120
+ }
121
+ const bucket = opts.bucketId ?? BUCKET_ID_UNKNOWN;
122
+ const metrics = this.metrics;
123
+ metrics?.dbReadReq.inc({bucket}, 1);
124
+ let itemsRead = 0;
125
+ return (async function* () {
126
+ try {
127
+ while (iteratorValid(iterator)) {
128
+ const key = iteratorKey(iterator);
129
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0) break;
130
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0) break;
131
+ itemsRead++;
132
+ yield key;
133
+ iteratorNext(iterator);
134
+ }
135
+ } finally {
136
+ metrics?.dbReadItems.inc({bucket}, itemsRead);
137
+ iteratorDestroy(iterator);
138
+ }
139
+ })();
140
+ }
141
+
142
+ async keys(opts: FilterOptions<Uint8Array> = {}): Promise<Uint8Array[]> {
143
+ const iterator = dbIterator(this.db);
144
+ if (opts.gt) {
145
+ iteratorSeek(iterator, opts.gt);
146
+ iteratorNext(iterator);
147
+ } else if (opts.gte) {
148
+ iteratorSeek(iterator, opts.gte);
149
+ } else {
150
+ iteratorSeekToFirst(iterator);
151
+ }
152
+ const keys = [];
153
+ this.metrics?.dbReadReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
154
+ try {
155
+ while (iteratorValid(iterator)) {
156
+ const key = iteratorKey(iterator);
157
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0) break;
158
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0) break;
159
+ keys.push(key);
160
+ iteratorNext(iterator);
161
+ }
162
+ return keys;
163
+ } finally {
164
+ this.metrics?.dbReadItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, keys.length);
165
+ iteratorDestroy(iterator);
166
+ }
167
+ }
168
+
169
+ valuesStream(opts: FilterOptions<Uint8Array> = {}): AsyncIterable<Uint8Array> {
170
+ const iterator = dbIterator(this.db);
171
+ if (opts.gt) {
172
+ iteratorSeek(iterator, opts.gt);
173
+ iteratorNext(iterator);
174
+ } else if (opts.gte) {
175
+ iteratorSeek(iterator, opts.gte);
176
+ } else {
177
+ iteratorSeekToFirst(iterator);
178
+ }
179
+ const bucket = opts.bucketId ?? BUCKET_ID_UNKNOWN;
180
+ const metrics = this.metrics;
181
+ metrics?.dbReadReq.inc({bucket}, 1);
182
+ let itemsRead = 0;
183
+ return (async function* () {
184
+ try {
185
+ while (iteratorValid(iterator)) {
186
+ const key = iteratorKey(iterator);
187
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0) break;
188
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0) break;
189
+ itemsRead++;
190
+ const value = iteratorValue(iterator);
191
+ yield value;
192
+ iteratorNext(iterator);
193
+ }
194
+ } finally {
195
+ metrics?.dbReadItems.inc({bucket}, itemsRead);
196
+ iteratorDestroy(iterator);
197
+ }
198
+ })();
199
+ }
200
+
201
+ async values(opts: FilterOptions<Uint8Array> = {}): Promise<Uint8Array[]> {
202
+ const iterator = dbIterator(this.db);
203
+ if (opts.gt) {
204
+ iteratorSeek(iterator, opts.gt);
205
+ iteratorNext(iterator);
206
+ } else if (opts.gte) {
207
+ iteratorSeek(iterator, opts.gte);
208
+ } else {
209
+ iteratorSeekToFirst(iterator);
210
+ }
211
+ const values = [];
212
+ this.metrics?.dbReadReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
213
+ try {
214
+ while (iteratorValid(iterator)) {
215
+ const key = iteratorKey(iterator);
216
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0) break;
217
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0) break;
218
+ const value = iteratorValue(iterator);
219
+ values.push(value);
220
+ iteratorNext(iterator);
221
+ }
222
+ return values;
223
+ } finally {
224
+ this.metrics?.dbReadItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, values.length);
225
+ iteratorDestroy(iterator);
226
+ }
227
+ }
228
+
229
+ entriesStream(opts: FilterOptions<Uint8Array> = {}): AsyncIterable<KeyValue<Uint8Array, Uint8Array>> {
230
+ const iterator = dbIterator(this.db);
231
+ if (opts.gt) {
232
+ iteratorSeek(iterator, opts.gt);
233
+ iteratorNext(iterator);
234
+ } else if (opts.gte) {
235
+ iteratorSeek(iterator, opts.gte);
236
+ } else {
237
+ iteratorSeekToFirst(iterator);
238
+ }
239
+ const bucket = opts.bucketId ?? BUCKET_ID_UNKNOWN;
240
+ const metrics = this.metrics;
241
+ metrics?.dbReadReq.inc({bucket}, 1);
242
+ let itemsRead = 0;
243
+ return (async function* () {
244
+ try {
245
+ while (iteratorValid(iterator)) {
246
+ const key = iteratorKey(iterator);
247
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0) break;
248
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0) break;
249
+ itemsRead++;
250
+ const value = iteratorValue(iterator);
251
+ yield {key, value};
252
+ iteratorNext(iterator);
253
+ }
254
+ } finally {
255
+ metrics?.dbReadItems.inc({bucket}, itemsRead);
256
+ iteratorDestroy(iterator);
257
+ }
258
+ })();
259
+ }
260
+
261
+ async entries(opts: FilterOptions<Uint8Array> = {}): Promise<KeyValue<Uint8Array, Uint8Array>[]> {
262
+ const iterator = dbIterator(this.db);
263
+ if (opts.gt) {
264
+ iteratorSeek(iterator, opts.gt);
265
+ iteratorNext(iterator);
266
+ } else if (opts.gte) {
267
+ iteratorSeek(iterator, opts.gte);
268
+ } else {
269
+ iteratorSeekToFirst(iterator);
270
+ }
271
+ const entries = [];
272
+ this.metrics?.dbReadReq.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, 1);
273
+ try {
274
+ while (iteratorValid(iterator)) {
275
+ const key = iteratorKey(iterator);
276
+ if (opts.lt && Buffer.compare(key, opts.lt) >= 0) break;
277
+ if (opts.lte && Buffer.compare(key, opts.lte) > 0) break;
278
+ const value = iteratorValue(iterator);
279
+ entries.push({key, value});
280
+ iteratorNext(iterator);
281
+ }
282
+ return entries;
283
+ } finally {
284
+ this.metrics?.dbReadItems.inc({bucket: opts?.bucketId ?? BUCKET_ID_UNKNOWN}, entries.length);
285
+ iteratorDestroy(iterator);
286
+ }
287
+ }
288
+ }