@based/db 0.0.53 → 0.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
Binary file
@@ -340,11 +340,17 @@ export class BasedDbQuery extends QueryBranch {
340
340
  const res = await this.db.hooks.getQueryBuf(buf);
341
341
  if (res.byteLength === 1) {
342
342
  if (res[0] === 0) {
343
- if (this.db.schema?.hash !== this.def.schemaChecksum) {
343
+ if (this.def && this.db.schema?.hash !== this.def.schemaChecksum) {
344
+ this.reset();
345
+ this.db.emit('info', 'query get schema mismatch - awaiting new schema');
346
+ await this.db.once('schema');
347
+ return this.#getInternal(resolve, reject);
348
+ }
349
+ else {
350
+ this.db.emit('info', 'query get schema mismatch - got the same already');
344
351
  this.reset();
345
352
  return this.#getInternal(resolve, reject);
346
353
  }
347
- reject(new Error('schema mismatch'));
348
354
  }
349
355
  else {
350
356
  reject(new Error('unexpected error'));
@@ -1,4 +1,4 @@
1
- import { BasedDb } from '../../index.js';
1
+ import { BasedDb, save } from '../../index.js';
2
2
  import { dirname, join } from 'path';
3
3
  import { Worker, MessageChannel, receiveMessageOnPort, } from 'node:worker_threads';
4
4
  import native from '../../native.js';
@@ -31,7 +31,11 @@ const parseTransform = (transform) => {
31
31
  export const migrate = async (server, fromSchema, toSchema, transform) => {
32
32
  const migrationId = toSchema.hash;
33
33
  server.migrating = migrationId;
34
- const abort = () => server.migrating !== migrationId;
34
+ server.emit('info', `migrating schema ${migrationId}`);
35
+ const abort = () => {
36
+ server.emit('info', `abort migration - migrating: ${server.migrating} abort: ${migrationId}`);
37
+ return server.migrating !== migrationId;
38
+ };
35
39
  const tmpDb = new BasedDb({
36
40
  path: null,
37
41
  });
@@ -73,7 +77,7 @@ export const migrate = async (server, fromSchema, toSchema, transform) => {
73
77
  // Block handling
74
78
  let i = 0;
75
79
  let rangesToMigrate = [];
76
- await server.save();
80
+ await save(server, false, false, true);
77
81
  server.merkleTree.visitLeafNodes((leaf) => {
78
82
  const [_typeId, start] = destructureCsmtKey(leaf.key);
79
83
  if (start == specialBlock)
@@ -132,13 +136,15 @@ export const migrate = async (server, fromSchema, toSchema, transform) => {
132
136
  }
133
137
  // -----------------------------------------
134
138
  tmpDb.server.dbCtxExternal = fromCtx;
135
- await writeSchemaFile(server, toSchema);
139
+ // TODO makes this SYNC
136
140
  const promises = server.workers.map((worker) => worker.updateCtx(toAddress));
137
- promises.push(tmpDb.destroy(), worker.terminate(), server.save({ forceFullDump: true }));
141
+ promises.push(tmpDb.destroy(), worker.terminate());
138
142
  await Promise.all(promises);
139
143
  if (abort()) {
140
144
  return;
141
145
  }
146
+ await save(server, false, true, true);
147
+ await writeSchemaFile(server, toSchema);
142
148
  server.migrating = 0;
143
149
  process.nextTick(() => server.emit('schema', server.schema));
144
150
  };
@@ -81,7 +81,7 @@ else if (workerData?.isDbMigrateWorker) {
81
81
  const nodes = fromDb
82
82
  .query(type)
83
83
  .include(include)
84
- .range(leafData.start - 1, leafData.end - 1)
84
+ .range(leafData.start - 1, leafData.end)
85
85
  ._getSync(fromCtx);
86
86
  for (const node of nodes) {
87
87
  const res = typeTransformFn(node);
@@ -100,7 +100,7 @@ else if (workerData?.isDbMigrateWorker) {
100
100
  const nodes = fromDb
101
101
  .query(type)
102
102
  .include(include)
103
- .range(leafData.start - 1, leafData.end - 1)
103
+ .range(leafData.start - 1, leafData.end)
104
104
  ._getSync(fromCtx);
105
105
  for (const node of nodes) {
106
106
  toDb.create(type, node, { unsafe: true });
@@ -18,4 +18,4 @@ export type Writelog = {
18
18
  }[];
19
19
  };
20
20
  };
21
- export declare function save<T extends boolean>(db: DbServer, sync?: T, forceFullDump?: boolean): T extends true ? void : Promise<void>;
21
+ export declare function save<T extends boolean>(db: DbServer, sync?: T, forceFullDump?: boolean, skipMigrationCheck?: boolean): T extends true ? void : Promise<void>;
@@ -22,10 +22,13 @@ function saveRange(db, typeId, start, end, hashOut) {
22
22
  }
23
23
  return file;
24
24
  }
25
- export function save(db, sync = false, forceFullDump = false) {
25
+ export function save(db, sync = false, forceFullDump = false, skipMigrationCheck = false) {
26
26
  if (!(isMainThread && (db.dirtyRanges.size || forceFullDump))) {
27
27
  return;
28
28
  }
29
+ if (db.migrating && !skipMigrationCheck) {
30
+ return;
31
+ }
29
32
  let err;
30
33
  const ts = Date.now();
31
34
  err = native.saveCommon(join(db.fileSystemPath, COMMON_SDB_FILE), db.dbCtxExternal);
@@ -1,6 +1,7 @@
1
1
  import { DbSchema } from '../schema.js';
2
2
  export type EventMap = {
3
3
  schema: DbSchema;
4
+ info: string;
4
5
  };
5
6
  export type Event = keyof EventMap;
6
7
  export type Listener<T> = (data: T) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@based/db",
3
- "version": "0.0.53",
3
+ "version": "0.0.57",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -38,7 +38,7 @@
38
38
  "basedDbNative.cjs"
39
39
  ],
40
40
  "dependencies": {
41
- "@based/schema": "5.0.0-alpha.16",
41
+ "@based/schema": "5.0.0-alpha.17",
42
42
  "@saulx/hash": "^3.0.0",
43
43
  "@saulx/utils": "^6.7.0",
44
44
  "exit-hook": "^4.0.0",