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
Insert data by put(key, value, version)
Update data by put(key, value, version, ifVersion)
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)
Description
Failed to
get()
afterput()
with ifVersion succeeded. Seems something goes wrong when decoding data. node version: 17.2.0 lmdb version: 2.1.3How to reproduce
put(key, value, version)
put(key, value, version, ifVersion)
get(key)
Sample code
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)