mpackdb
All repositories: gitoria
1.4 KB
import MPackDB from '../src/MPackDB.js';import { rm } from 'fs/promises';import { spawn } from 'child_process';const TEST_DB_PATH = 'db/concurrent';console.log('--- Concurrent Lock Test ---');// Clean upawait rm(TEST_DB_PATH, { recursive: true, force: true });// Test 1: Concurrent writes from same processconsole.log('\nTest 1: Concurrent writes (same process)');const db = new MPackDB(`${TEST_DB_PATH}/db`, { debug: true });const writes = [];const startTime = Date.now();// Fire 10 concurrent insertsfor (let i = 0; i < 10; i++) {writes.push(db.insert({ id: i, data: `record-${i}` }));}await Promise.all(writes);const duration = Date.now() - startTime;console.log(`✓ Completed 10 concurrent inserts in ${duration}ms`);console.log(` Average: ${(duration / 10).toFixed(1)}ms per insert`);const all = await db.find();console.log(`✓ All ${all.length} records written correctly`);// Test 2: Verify serialization (they should have waited for each other)if (duration < 50) {console.log('⚠ Warning: Inserts were too fast - lock might not be working');} else {console.log('✓ Inserts were serialized (lock is working)');}// Test 3: Check no corruptionconst uniqueIds = new Set(all.map(r => r.id));if (uniqueIds.size === 10) {console.log('✓ No data corruption - all records unique');} else {throw new Error('❌ Data corruption detected!');}console.log('\n✓ Concurrent lock test passed!');
Branches
- mastermain branch
Latest commits
- cde73eb4release 1.0.6caramboleyo
- d01dda02add index hints, intersection, boundingBox; remove findByIndexcaramboleyo
- b8ffc1a0release 1.0.5caramboleyo
- d47876a1reimplemented lost features like indexed find and more testscaramboleyo
- 7f08da9afixed insert ignoring model definitioncaramboleyo
- 705774a9added flush before findcaramboleyo
- b4db6391initial commitcaramboleyo