release: v0.6.0 — 完全移除 IndexedDB,自研 KVStore 事务存储引擎(多key原子写/快照日志恢复/CRC自愈)+ KVStoreEngine + 旧库迁移工具 + 10万级压力验证 + 崩溃注入e2e
This commit is contained in:
@@ -12,7 +12,8 @@
|
||||
import { AriaEngine } from '../../src/engine/aria/index';
|
||||
import { createSchema } from '../../src/table/schema';
|
||||
import { installOPFSMock } from '../helpers/opfs-mock';
|
||||
import 'fake-indexeddb/auto';
|
||||
|
||||
beforeEach(() => { installOPFSMock(new Map()); });
|
||||
|
||||
let idbCounter = 0;
|
||||
function uniqueDB(): string {
|
||||
@@ -32,7 +33,7 @@ describe('AriaEngine — repair 自愈增强', () => {
|
||||
it('清理孤儿页面(meta 未引用的 pg_ 文件)', async () => {
|
||||
const dbName = uniqueDB();
|
||||
const engine = new AriaEngine({
|
||||
storageBackend: 'indexeddb',
|
||||
storageBackend: 'opfs',
|
||||
pageStorage: true, // 强制页面化(IDB 上也启用,便于断言页面文件)
|
||||
memtableSizeThreshold: 64 * 1024 * 1024,
|
||||
checkpointInterval: 100000,
|
||||
@@ -86,7 +87,7 @@ describe('AriaEngine — repair 自愈增强', () => {
|
||||
|
||||
it('WAL 空洞 + repair → 截断清空(不再重放错位数据)', async () => {
|
||||
const dbName = uniqueDB();
|
||||
const engine = new AriaEngine({ storageBackend: 'indexeddb', checkpointInterval: 100000 });
|
||||
const engine = new AriaEngine({ storageBackend: 'opfs', checkpointInterval: 100000 });
|
||||
await engine.open(dbName, 1);
|
||||
await engine.createTable(SCHEMA());
|
||||
// 数据落盘 + checkpoint 清 WAL
|
||||
@@ -116,7 +117,7 @@ describe('AriaEngine — repair 自愈增强', () => {
|
||||
|
||||
it('repair 幂等(连续调用无副作用)', async () => {
|
||||
const dbName = uniqueDB();
|
||||
const engine = new AriaEngine({ storageBackend: 'indexeddb', checkpointInterval: 100000 });
|
||||
const engine = new AriaEngine({ storageBackend: 'opfs', checkpointInterval: 100000 });
|
||||
await engine.open(dbName, 1);
|
||||
await engine.createTable(SCHEMA());
|
||||
await engine.insert('items', [{ id: 'a', val: 1, tag: 'x' }]);
|
||||
@@ -135,7 +136,7 @@ describe('AriaEngine — 随机操作压力 + 模拟崩溃', () => {
|
||||
it('500 随机操作(insert/update/delete)→ 模拟崩溃 → 重开验证全部已确认写入', async () => {
|
||||
const dbName = uniqueDB();
|
||||
const engine = new AriaEngine({
|
||||
storageBackend: 'indexeddb',
|
||||
storageBackend: 'opfs',
|
||||
memtableSizeThreshold: 8 * 1024,
|
||||
checkpointInterval: 50,
|
||||
walSyncMode: 'full',
|
||||
@@ -178,7 +179,7 @@ describe('AriaEngine — 随机操作压力 + 模拟崩溃', () => {
|
||||
(engine as any).opened = false;
|
||||
|
||||
// 重开:WAL 重放 + SSTable 加载
|
||||
const engine2 = new AriaEngine({ storageBackend: 'indexeddb', checkpointInterval: 50, walSyncMode: 'full' });
|
||||
const engine2 = new AriaEngine({ storageBackend: 'opfs', checkpointInterval: 50, walSyncMode: 'full' });
|
||||
await engine2.open(dbName, 1);
|
||||
const rows = await engine2.find('items', { table: 'items' });
|
||||
const byId = new Map(rows.map((r) => [r.id, r]));
|
||||
|
||||
Reference in New Issue
Block a user