kriszyp / lmdb-js

Simple, efficient, ultra-fast, scalable data store wrapper for LMDB
Other
505 stars 41 forks source link

Failed to get() after put() with ifVersion #124

Closed kenmick closed 2 years ago

kenmick commented 2 years ago

Description

Failed to get() after put() with ifVersion succeeded. Seems something goes wrong when decoding data. node version: 17.2.0 lmdb version: 2.1.3

How to reproduce

  1. Insert data by put(key, value, version)
  2. Update data by put(key, value, version, ifVersion)
  3. Fetch data by get(key)

    Sample code

    
    let db = lmdb.open({
    path: 'my-db',
    compression: true,
    useVersions: true
    });

const key = 'test';

async function test() { const success1 = await db.put(key, { a: 1, b: 2 }, 1); console.log(success1 is ${success1}); const entry1 = db.getEntry(key); console.log(entry1 is ${JSON.stringify(entry1)}); const success2 = await db.put(key, { a: 2, b: 3 }, 2, 1); console.log(success2 is ${success2}) const entry2 = db.get(key); console.log(entry2 is ${JSON.stringify(entry2)}); }

// Error output success1 is true entry1 is {"value":{"a":1,"b":2},"version":1} success2 is true /home/xxx/develop/lmdb-test/node_modules/msgpackr/dist/node.cjs:175 throw new Error('Data read, but end of buffer not reached') ^

Error: Data read, but end of buffer not reached at checkedRead (/home/xxx/develop/lmdb-test/node_modules/msgpackr/dist/node.cjs:175:10) at Packr.unpack (/home/xxx/develop/lmdb-test/node_modules/msgpackr/dist/node.cjs:91:10) at Packr.decode (/home/xxx/develop/lmdb-test/node_modules/msgpackr/dist/node.cjs:150:15) at LMDBStore.get (/home/xxx/develop/lmdb-test/node_modules/lmdb/dist/index.cjs:1337:34) at test (/home/xxx/develop/lmdb-test/index.js:18:21)

kriszyp commented 2 years ago

Thank you for the report, should be fixed in v2.1.4.

kenmick commented 2 years ago

Great! Thanks.