From 38b8ffb7353f951e50a8706647da9d4aa79de0b6 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Wed, 29 May 2024 12:06:39 +0200 Subject: [PATCH] Revert "chore: consolidate classic-level usage (#6795)" This reverts commit b439da2f6ea4607770092f00c6fa292bcc76dac1. --- packages/beacon-node/package.json | 2 + .../e2e/eth1/eth1ForBlockProduction.test.ts | 6 +- packages/db/package.json | 4 +- packages/db/src/controller/level.ts | 20 +++--- .../db/test/unit/controller/level.test.ts | 8 ++- yarn.lock | 72 +++++++++++++++++-- 6 files changed, 92 insertions(+), 20 deletions(-) diff --git a/packages/beacon-node/package.json b/packages/beacon-node/package.json index 0cbac2aabf5d..ebfb2cff6352 100644 --- a/packages/beacon-node/package.json +++ b/packages/beacon-node/package.json @@ -153,10 +153,12 @@ }, "devDependencies": { "@types/datastore-level": "^3.0.0", + "@types/leveldown": "^4.0.3", "@types/qs": "^6.9.7", "@types/tmp": "^0.2.3", "it-drain": "^3.0.3", "it-pair": "^2.0.6", + "leveldown": "^6.1.1", "rewiremock": "^3.14.5", "rimraf": "^4.4.1", "tmp": "^0.2.1" diff --git a/packages/beacon-node/test/e2e/eth1/eth1ForBlockProduction.test.ts b/packages/beacon-node/test/e2e/eth1/eth1ForBlockProduction.test.ts index 17692cfcca3a..1a80d95c1fdc 100644 --- a/packages/beacon-node/test/e2e/eth1/eth1ForBlockProduction.test.ts +++ b/packages/beacon-node/test/e2e/eth1/eth1ForBlockProduction.test.ts @@ -1,4 +1,6 @@ +import {promisify} from "node:util"; import {describe, it, beforeAll, afterAll, expect} from "vitest"; +import leveldown from "leveldown"; import {fromHexString, toHexString} from "@chainsafe/ssz"; import {sleep} from "@lodestar/utils"; import {LevelDbController} from "@lodestar/db"; @@ -36,7 +38,7 @@ describe.skip("eth1 / Eth1Provider", function () { beforeAll(async () => { // Nuke DB to make sure it's empty - await LevelDbController.destroy(dbLocation); + await promisify(leveldown.destroy)(dbLocation); db = new BeaconDb(config, await LevelDbController.create({name: dbLocation}, {logger})); }); @@ -45,7 +47,7 @@ describe.skip("eth1 / Eth1Provider", function () { clearInterval(interval); controller.abort(); await db.close(); - await LevelDbController.destroy(dbLocation); + await promisify(leveldown.destroy)(dbLocation); }); it("Should fetch real Pyrmont eth1 data for block proposing", async function () { diff --git a/packages/db/package.json b/packages/db/package.json index 2ff5421c7ea9..457daefff899 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -38,8 +38,8 @@ "@chainsafe/ssz": "^0.15.1", "@lodestar/config": "^1.19.0", "@lodestar/utils": "^1.19.0", - "classic-level": "^1.4.1", - "it-all": "^3.0.4" + "it-all": "^3.0.4", + "level": "^8.0.0" }, "devDependencies": { "@lodestar/logger": "^1.19.0" diff --git a/packages/db/src/controller/level.ts b/packages/db/src/controller/level.ts index 07ebef8e8a22..1a8f75ed875c 100644 --- a/packages/db/src/controller/level.ts +++ b/packages/db/src/controller/level.ts @@ -1,4 +1,5 @@ -import {ClassicLevel} from "classic-level"; +import {Level} from "level"; +import type {ClassicLevel} from "classic-level"; import {Logger} from "@lodestar/utils"; import {DbReqOpts, DatabaseController, DatabaseOptions, FilterOptions, KeyValue} from "./interface.js"; import {LevelDbControllerMetrics} from "./metrics.js"; @@ -8,8 +9,10 @@ enum Status { closed = "closed", } +type LevelNodeJS = ClassicLevel; + export interface LevelDBOptions extends DatabaseOptions { - db?: ClassicLevel; + db?: Level; } export type LevelDbControllerModules = { @@ -32,7 +35,7 @@ export class LevelDbController implements DatabaseController, + private readonly db: Level, private metrics: LevelDbControllerMetrics | null ) { this.metrics = metrics ?? null; @@ -43,8 +46,7 @@ export class LevelDbController implements DatabaseController { - const db = - opts.db || new ClassicLevel(opts.name || "beaconchain", {keyEncoding: "binary", valueEncoding: "binary"}); + const db = opts.db || new Level(opts.name || "beaconchain", {keyEncoding: "binary", valueEncoding: "binary"}); try { await db.open(); @@ -160,14 +162,14 @@ export class LevelDbController implements DatabaseController { - return this.db.approximateSize(start, end); + return (this.db as LevelNodeJS).approximateSize(start, end); } /** * Manually trigger a database compaction in the range [start..end]. */ compactRange(start: Uint8Array, end: Uint8Array): Promise { - return this.db.compactRange(start, end); + return (this.db as LevelNodeJS).compactRange(start, end); } /** Capture metrics for db.iterator, db.keys, db.values .all() calls */ @@ -219,10 +221,6 @@ export class LevelDbController implements DatabaseController { - return ClassicLevel.destroy(location); - } } /** From https://www.npmjs.com/package/level */ diff --git a/packages/db/test/unit/controller/level.test.ts b/packages/db/test/unit/controller/level.test.ts index 11ef0f929fda..33d5b9a86c2a 100644 --- a/packages/db/test/unit/controller/level.test.ts +++ b/packages/db/test/unit/controller/level.test.ts @@ -1,6 +1,7 @@ import {execSync} from "node:child_process"; import os from "node:os"; import {describe, it, expect, beforeAll, afterAll} from "vitest"; +import leveldown from "leveldown"; import all from "it-all"; import {getEnvLogger} from "@lodestar/logger/env"; import {LevelDbController} from "../../../src/controller/index.js"; @@ -15,7 +16,12 @@ describe("LevelDB controller", () => { afterAll(async () => { await db.close(); - await LevelDbController.destroy(dbLocation); + await new Promise((resolve, reject) => { + leveldown.destroy(dbLocation, (err) => { + if (err) reject(err); + else resolve(); + }); + }); }); it("test get not found", async () => { diff --git a/yarn.lock b/yarn.lock index bd6f349fb5e5..30f54678d55e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2826,6 +2826,11 @@ "@tufjs/canonical-json" "1.0.0" minimatch "^9.0.0" +"@types/abstract-leveldown@*": + version "5.0.1" + resolved "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz" + integrity sha512-wYxU3kp5zItbxKmeRYCEplS2MW7DzyBnxPGj+GJVHZEUZiK/nn5Ei1sUFgURDh+X051+zsGe28iud3oHjrYWQQ== + "@types/argparse@1.0.38": version "1.0.38" resolved "https://registry.yarnpkg.com/@types/argparse/-/argparse-1.0.38.tgz#a81fd8606d481f873a3800c6ebae4f1d768a56a9" @@ -2945,6 +2950,14 @@ dependencies: "@types/node" "*" +"@types/leveldown@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/leveldown/-/leveldown-4.0.3.tgz#4b868fd747808d378df6ffb27de7f889cae46aad" + integrity sha512-fzIXOuUCSZQKkRadWhURwu6mMYbfqi/nRDA+yBwz8kj7AK/L7L//u6A0MqSv0gsilzo7N/5+FlZOx8G6m03EVQ== + dependencies: + "@types/abstract-leveldown" "*" + "@types/node" "*" + "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" @@ -3607,6 +3620,18 @@ abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" +abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + abstract-logging@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" @@ -4644,7 +4669,7 @@ case@^1.6.3: resolved "https://registry.npmjs.org/case/-/case-1.6.3.tgz" integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== -catering@^2.1.0, catering@^2.1.1: +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== @@ -4777,7 +4802,7 @@ classic-level@^1.2.0: abstract-level "^1.0.2" catering "^2.1.0" module-error "^1.0.1" - napi-macros "~2.0.0" + napi-macros "^2.2.2" node-gyp-build "^4.3.0" clean-stack@^2.0.0: @@ -8492,6 +8517,18 @@ lerna@^7.3.0: yargs "16.2.0" yargs-parser "20.2.4" +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + level-supports@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" @@ -8513,6 +8550,15 @@ level@^8.0.0: browser-level "^1.0.1" classic-level "^1.2.0" +leveldown@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.1.tgz#0f0e480fa88fd807abf94c33cb7e40966ea4b5ce" + integrity sha512-88c+E+Eizn4CkQOBHwqlCJaTNEjGpaEIikn1S+cINc5E9HEvJ77bqY4JY/HxT5u0caWqsc3P3DcFIKBI1vHt+A== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -11784,7 +11830,16 @@ string-argv@~0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -13419,7 +13474,16 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==