datafolder 1.0.9 → 1.0.10

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.
Files changed (82) hide show
  1. package/README.md +3 -1
  2. package/SSD.md +60 -0
  3. package/index.js +1 -0
  4. package/package.json +1 -1
  5. package/sample.js +4 -4
  6. package/scripts/airbnb.js +1 -0
  7. package/scripts/airbnb2.js +1 -0
  8. package/scripts/convertBinFiles.js +1 -0
  9. package/scripts/express.js +2 -1
  10. package/scripts/fastify.js +1 -0
  11. package/scripts/flights.js +1 -0
  12. package/scripts/flights2.js +1 -0
  13. package/scripts/flights_queries.js +1 -0
  14. package/src/QyAcl.d.ts +3 -3
  15. package/src/QyAcl.js +7 -7
  16. package/src/QyAclSaver_Worker.d.ts +1 -0
  17. package/src/QyAclSaver_Worker.js +1 -0
  18. package/src/QyAclWriter.d.ts +2 -1
  19. package/src/QyAclWriter.js +7 -6
  20. package/src/QyBatch.d.ts +29 -22
  21. package/src/QyBatch.js +85 -72
  22. package/src/QyBinWriter.d.ts +9 -4
  23. package/src/QyBinWriter.js +83 -70
  24. package/src/QyCD.d.ts +19 -19
  25. package/src/QyCD.js +2 -2
  26. package/src/QyCache.d.ts +22 -23
  27. package/src/QyCache.js +47 -36
  28. package/src/QyCompressor_Worker.js +2 -2
  29. package/src/QyDB.d.ts +6 -9
  30. package/src/QyDB.js +1 -1
  31. package/src/QyFile.d.ts +2 -0
  32. package/src/QyFile.js +42 -40
  33. package/src/QyFileContentUtils.d.ts +1 -4
  34. package/src/QyFileLogger.d.ts +4 -0
  35. package/src/QyFileLogger.js +30 -26
  36. package/src/QyIndex.d.ts +2 -2
  37. package/src/QyIndex.js +84 -80
  38. package/src/QyIndexPropTree.d.ts +4 -0
  39. package/src/QyIndexPropTree.js +19 -10
  40. package/src/QyIntersectNode.d.ts +1 -0
  41. package/src/QyIntersectNode.js +1 -0
  42. package/src/QyJsonSaver.d.ts +2 -2
  43. package/src/QyJsonSaver.js +4 -4
  44. package/src/QyKVData.d.ts +18 -1
  45. package/src/QyKVData.js +98 -78
  46. package/src/QyKVDataCleaner_Worker.d.ts +7 -1
  47. package/src/QyKVDataCleaner_Worker.js +69 -55
  48. package/src/QyKVDataLoader.d.ts +10 -2
  49. package/src/QyKVDataLoader.js +27 -21
  50. package/src/QyKVDataSaver_Worker.d.ts +10 -0
  51. package/src/QyKVDataSaver_Worker.js +23 -9
  52. package/src/QyLogFileSaver_Worker.d.ts +1 -0
  53. package/src/QyLogFileSaver_Worker.js +7 -6
  54. package/src/QyLogger.d.ts +20 -10
  55. package/src/QyLogger.js +110 -67
  56. package/src/QyMessageWorker.d.ts +1 -1
  57. package/src/QyMessageWorker.js +5 -5
  58. package/src/QyMessager.d.ts +5 -1
  59. package/src/QyMessager.js +6 -1
  60. package/src/QyMod.js +9 -8
  61. package/src/QyOpRunner.d.ts +5 -1
  62. package/src/QyOpRunner.js +7 -7
  63. package/src/QyQueue.d.ts +5 -1
  64. package/src/QyQueue.js +6 -7
  65. package/src/QySaver.d.ts +3 -0
  66. package/src/QySaver.js +26 -15
  67. package/src/QySnapshotCompactor_Worker.d.ts +7 -0
  68. package/src/QySnapshotCompactor_Worker.js +37 -26
  69. package/src/QySnapshotSaver_Worker.d.ts +8 -1
  70. package/src/QySnapshotSaver_Worker.js +21 -14
  71. package/src/QySnapshots.d.ts +19 -7
  72. package/src/QySnapshots.js +195 -172
  73. package/src/QyTrigger.d.ts +5 -1
  74. package/src/QyTrigger.js +44 -34
  75. package/src/QyUnionNode.d.ts +10 -1
  76. package/src/QyUnionNode.js +34 -36
  77. package/src/QyUtils.d.ts +2 -2
  78. package/src/QyUtils.js +116 -111
  79. package/src/simulate.js +34 -31
  80. package/src/simulate2.js +49 -46
  81. package/src/soc_pokec.js +17 -11
  82. package/static/codemirror.bundle/editor.bundle.js +2 -0
package/src/QyKVData.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  } from "node:path";
4
4
 
5
5
  import {
6
- open as v
6
+ open as f
7
7
  } from "node:fs/promises";
8
8
 
9
9
  import {
@@ -11,11 +11,11 @@ import {
11
11
  } from "./QyDefaultOptions.js";
12
12
 
13
13
  import {
14
- QyKVDataSaver as p
14
+ QyKVDataSaver as i
15
15
  } from "./QyKVDataSaver.js";
16
16
 
17
17
  import {
18
- QySnapshotCompactor as i
18
+ QySnapshotCompactor as p
19
19
  } from "./QySnapshotCompactor.js";
20
20
 
21
21
  import {
@@ -24,11 +24,32 @@ import {
24
24
 
25
25
  import {
26
26
  arrayLast as y,
27
- readBufferAsync as g,
27
+ readBufferAsync as C,
28
28
  sleep as c
29
29
  } from "./QyUtils.js";
30
30
 
31
+ import {
32
+ logger as g
33
+ } from "./QyLogger.js";
34
+
31
35
  class a {
36
+ kvFolder;
37
+ snapshotFolder;
38
+ qyCache;
39
+ options;
40
+ qyKVDataSaver;
41
+ qySnapshotCompactor;
42
+ qyKVDataCleaner;
43
+ compactState = 1;
44
+ compactMaxChangeId = 0;
45
+ snapshotSavedChangeId = 0;
46
+ maxChangeId = 0;
47
+ emptySnapshotNumVersionList = [];
48
+ isStopping = !1;
49
+ qySnapshots;
50
+ aclKeyValueMap;
51
+ compactInterval;
52
+ unloadInterval;
32
53
  constructor(a, t, o) {
33
54
  t = {
34
55
  ...s("QyKVData"),
@@ -40,25 +61,21 @@ class a {
40
61
  options: t,
41
62
  kvFolder: a,
42
63
  snapshotFolder: e,
43
- qyKVDataSaver: new p(this, a, t),
44
- qySnapshotCompactor: new i(this, a, t),
45
- qyKVDataCleaner: new r(this, a, t),
46
- compactState: 1,
47
- compactMaxChangeId: 0,
48
- snapshotSavedChangeId: 0,
49
- emptySnapshotNumList: []
64
+ qyKVDataSaver: new i(this, a, t),
65
+ qySnapshotCompactor: new p(this, a, t),
66
+ qyKVDataCleaner: new r(this, a, t)
50
67
  });
51
68
  }
52
69
  start(a, t, o, e) {
53
70
  var {
54
71
  options: n,
55
72
  qyKVDataSaver: s,
56
- qySnapshotCompactor: p,
57
- qyKVDataCleaner: i
73
+ qySnapshotCompactor: i,
74
+ qyKVDataCleaner: p
58
75
  } = this, {
59
76
  maxSnapshotNum: r,
60
77
  snapshotMaxChangeId: h
61
- } = o, s = (s.start(a, r, t, e), p.start(), i.start(), setInterval(() => l(this), n.compactSnapshotsInterval)), r = setInterval(() => (async o => {
78
+ } = o, s = (s.start(a, r, t, e), i.start(), p.start(), setInterval(() => l(this), n.compactSnapshotsInterval)), r = setInterval(() => (async o => {
62
79
  if (!o.unloadingMemory) {
63
80
  o.unloadingMemory = !0;
64
81
  var {
@@ -67,9 +84,9 @@ class a {
67
84
  } = o;
68
85
  let a = 0, t = 0;
69
86
  if (e) {
70
- var s, p = n.maxFileCountToUnload, n = e.rootDir;
87
+ var s, i = n.maxFileCountToUnload, n = e.rootDir;
71
88
  t = d(o, n), a = t;
72
- for (s of n.allLoadedSubdirs()) if ((t += d(o, s)) > p && (a += t,
89
+ for (s of n.allLoadedSubdirs()) if ((t += d(o, s)) > i && (a += t,
73
90
  t = 0, await c(0), o.isStopping)) break;
74
91
  }
75
92
  a += t, global.gc && global.gc(), o.unloadingMemory = !1;
@@ -89,32 +106,32 @@ class a {
89
106
  } = a;
90
107
  console.time("bgLoadPosMaps");
91
108
  for (t of Object.keys(o.numToSnapshotMap).sort((a, t) => t - a)) {
92
- if (await async function s(p, i, r, h, c, l) {
93
- if (p.isStopping) return void (l && l.close());
94
- let d = p.qySnapshots;
109
+ if (await async function s(i, p, r = void 0, h = void 0, c = void 0, l = void 0) {
110
+ if (i.isStopping) return void (l && l.close());
111
+ let d = i.qySnapshots;
95
112
  let m = d.numToSnapshotMap;
96
- let u = m[i];
97
- if (!u) return void (l && l.close());
113
+ let S = m[p];
114
+ if (!S) return void (l && l.close());
98
115
  let {
99
- info: S,
100
- prefixPM: f
101
- } = u;
102
- r = r || Object.keys(f).sort().reverse();
116
+ info: u,
117
+ prefixPM: v
118
+ } = S;
119
+ r = r || Object.keys(v).sort().reverse();
103
120
  if (0 == r.length) return void (l && l.close());
104
- if (null == h || h != S.pMVersion) return l && l.close(), c = d.getPMFilePath(u),
105
- s(p, i, r, S.pMVersion, c, await v(c));
121
+ if (null == h || h != u.pMVersion) return l && l.close(), c = d.getPMFilePath(S),
122
+ s(i, p, r, u.pMVersion, c, await f(c));
106
123
  for (;0 < r.length; ) {
107
- let e = y(r), n = f[e];
124
+ let e = y(r), n = v[e];
108
125
  if (n) {
109
- let [ a, t ] = n, o = await g(c, l, a, t);
110
- if (p.isStopping || !m[i]) return void l.close();
111
- if (h != S.pMVersion) return l.close(), s(p, i, r);
112
- e in f && d.loadPartialPosMapBuffer(u, e, o);
126
+ let [ a, t ] = n, o = await C(c, l, a, t);
127
+ if (i.isStopping || !m[p]) return void l.close();
128
+ if (h != u.pMVersion) return l.close(), s(i, p, r);
129
+ e in v && d.loadPartialPosMapBuffer(S, e, o);
113
130
  }
114
131
  r.pop();
115
132
  }
116
133
  l.close();
117
- logger.info("bgLoadPosMap:" + i);
134
+ g.info("bgLoadPosMap:" + p);
118
135
  }(a, t), a.isStopping) break;
119
136
  if (await c(0), a.isStopping) break;
120
137
  }
@@ -160,20 +177,20 @@ class a {
160
177
  if (!(a in o)) return t.removeKey(a);
161
178
  o[a] = void 0;
162
179
  }
163
- onSnapshotSavedChangeId(a, t) {
180
+ onSnapshotSavedChangeId(a, t = void 0) {
164
181
  this.snapshotSavedChangeId = a;
165
182
  var {
166
183
  compactState: o,
167
184
  compactMaxChangeId: e,
168
185
  qyKVDataSaver: n
169
186
  } = this;
170
- if (3 == o && e <= a && (x(this), this.compactState = 1), t) {
171
- var s, o = t, p = this.qySnapshots, i = p.keyToSnapshotMap;
187
+ if (3 == o && e <= a && (L(this), this.compactState = 1), t) {
188
+ var s, o = t, i = this.qySnapshots, p = i.keyToSnapshotMap;
172
189
  for (s in o.posMap) {
173
- var r = i[s];
174
- r && p.removeKeyFromSnapshot(r, s);
190
+ var r = p[s];
191
+ r && i.removeKeyFromSnapshot(r, s);
175
192
  }
176
- p.addMaxSnapshot(o), logger.info("addPMOnlySnapshot: " + p.snapshotMaxChangeId),
193
+ i.addMaxSnapshot(o), g.info("addPMOnlySnapshot: " + i.snapshotMaxChangeId),
177
194
  n.releaseSnapshot(t.snapshotNum);
178
195
  }
179
196
  }
@@ -182,17 +199,18 @@ class a {
182
199
  var l = this, {
183
200
  pMUpdates: a,
184
201
  vLUpdates: d,
185
- combineUpdate: m
202
+ combinationUpdate: m
186
203
  } = a = a;
187
204
  if (a) {
188
205
  var t = a, o = l.qySnapshots.numToSnapshotMap;
189
206
  for (s in t) {
190
207
  var e, n = t[s], s = o[s], {
191
- prefixPM: p,
192
- info: i
208
+ prefixPM: i,
209
+ info: p
193
210
  } = s;
194
- for (e in p) p[e] = n[e];
195
- ++i.pMVersion, (a => {
211
+ for (e in ++p.pMVersion, p.verList[0] = p.pMVersion + p.vLVersion,
212
+ i) i[e] = n[e];
213
+ (a => {
196
214
  var {
197
215
  info: t,
198
216
  compactOutedCount: o
@@ -203,18 +221,19 @@ class a {
203
221
  }
204
222
  if (d) {
205
223
  var r = d, h = (a = l).qySnapshots.numToSnapshotMap;
206
- for (v in r) {
207
- var c, u, {
208
- posMap: S,
209
- prefixPM: f
210
- } = r[v], v = h[v], {
224
+ for (f in r) {
225
+ var c, S, {
226
+ posMap: u,
227
+ prefixPM: v
228
+ } = r[f], f = h[f], {
211
229
  posMap: y,
212
- prefixPM: g,
213
- info: C
214
- } = v;
215
- for (c in y) y[c] = S[c];
216
- for (u in g) g[u] = f[u];
217
- ++C.pMVersion, ++C.vLVersion, V(v);
230
+ prefixPM: C,
231
+ info: g
232
+ } = f;
233
+ for (c in ++g.pMVersion, ++g.vLVersion, g.verList[0] = g.pMVersion + g.vLVersion,
234
+ y) y[c] = u[c];
235
+ for (S in C) C[S] = v[S];
236
+ q(f);
218
237
  }
219
238
  }
220
239
  if (m) {
@@ -224,32 +243,33 @@ class a {
224
243
  keyToSnapshotMap: s
225
244
  } = e, {
226
245
  snapshotNum: a,
227
- combinedSnapshotNumList: t,
228
- posMap: p
229
- } = d, i = n[a], {
246
+ combinedSnapshotNumVersionList: t,
247
+ posMap: i
248
+ } = d, p = n[a], {
230
249
  posMap: r,
231
250
  info: o
232
- } = i;
233
- for (M in r) r[M] = p[M];
234
- V(i);
235
- let h = o.totalCount, c = i.outdatedCount;
236
- for (let o of t) {
237
- var I, q = n[o];
251
+ } = p;
252
+ for (M in ++o.pMVersion, ++o.vLVersion, o.verList[0] = o.pMVersion + o.vLVersion,
253
+ r) r[M] = i[M];
254
+ q(p);
255
+ let h = o.totalCount, c = p.outdatedCount;
256
+ for (let [ o ] of t) {
257
+ var V, I = n[o];
238
258
  let {
239
259
  posMap: a,
240
260
  info: t
241
- } = q;
242
- for (I in a) r[I] = p[I], s[I] = i;
243
- V(q), h += t.totalCount, c += q.outdatedCount, e.delSnapshot(q);
261
+ } = I;
262
+ for (V in a) r[V] = i[V], s[V] = p;
263
+ q(I), h += t.totalCount, c += I.outdatedCount, e.delSnapshot(I);
244
264
  }
245
- ++o.pMVersion, ++o.vLVersion, o.totalCount = h, i.outdatedCount = c;
265
+ o.totalCount = h, p.outdatedCount = c;
246
266
  }
247
- this.snapshotSavedChangeId >= this.compactMaxChangeId ? (x(this), this.compactState = 1) : this.compactState = 3;
267
+ this.snapshotSavedChangeId >= this.compactMaxChangeId ? (L(this), this.compactState = 1) : this.compactState = 3;
248
268
  }
249
269
  }
250
270
  }
251
271
 
252
- function V(a) {
272
+ function q(a) {
253
273
  var {
254
274
  info: t,
255
275
  compactOutedCount: o
@@ -265,20 +285,20 @@ function l(a) {
265
285
  qySnapshots: o,
266
286
  qySnapshotCompactor: e
267
287
  } = a, {
268
- emptySnapshotNumList: o,
288
+ emptySnapshotNumVersionList: o,
269
289
  pMCompactSnapshotList: n,
270
290
  vLCompactSnapshotList: s,
271
- combiningSnapshotList: p
291
+ combiningSnapshotList: i
272
292
  } = o.calOutdates();
273
- if (0 < p.length || 0 < n.length || 0 < s.length) {
293
+ if (0 < i.length || 0 < n.length || 0 < s.length) {
274
294
  Object.assign(a, {
275
295
  compactState: 2,
276
296
  compactMaxChangeId: t
277
297
  });
278
- for (var i of [ n, s, p ]) for (var r of i) r.compactOutedCount = r.outdatedCount;
279
- e.compactSnapshots(n, s, p);
298
+ for (var p of [ n, s, i ]) for (var r of p) r.compactOutedCount = r.outdatedCount;
299
+ e.compactSnapshots(n, s, i);
280
300
  }
281
- 0 < o.length && (a.emptySnapshotNumList.push(...o), a.snapshotSavedChangeId >= t ? h(a) : 1 == a.compactState && Object.assign(a, {
301
+ 0 < o.length && (a.emptySnapshotNumVersionList.push(...o), a.snapshotSavedChangeId >= t ? h(a) : 1 == a.compactState && Object.assign(a, {
282
302
  compactState: 3,
283
303
  compactMaxChangeId: t
284
304
  }));
@@ -295,12 +315,12 @@ function d(a, t) {
295
315
  function h(a) {
296
316
  var {
297
317
  qyKVDataCleaner: a,
298
- emptySnapshotNumList: t
318
+ emptySnapshotNumVersionList: t
299
319
  } = a;
300
320
  0 < t.length && (a.removeSnapshotsFiles(t), t.length = 0);
301
321
  }
302
322
 
303
- function x(a) {
323
+ function L(a) {
304
324
  a.qySnapshotCompactor.saveSnapshotInfos(), h(a);
305
325
  }
306
326
 
@@ -1,5 +1,11 @@
1
1
  import { QyMessageWorker } from "./QyMessageWorker.ts";
2
2
  export default class QyKVDataCleaner_Worker extends QyMessageWorker {
3
+ kvFolder: any;
4
+ snapshotFolder: any;
5
+ snapshotInfoFolder: any;
6
+ aclFolder: any;
7
+ historyAclFolder: any;
8
+ historySnapshotFolder: any;
3
9
  constructor({ kvFolder, options }: {
4
10
  kvFolder: any;
5
11
  options: any;
@@ -9,5 +15,5 @@ export default class QyKVDataCleaner_Worker extends QyMessageWorker {
9
15
  _op_cleanAclFiles(maxSnapshotNum: any): Promise<void>;
10
16
  _op_cleanPMFiles(pMChangeList: any): Promise<void>;
11
17
  _op_cleanVLFiles(snapshotNum: any, vLVersion: any): Promise<void>;
12
- _op_removeSnapshotsFiles(snapshotNumList: any): Promise<void>;
18
+ _op_removeSnapshotsFiles(snapshotNumVersionList: any): Promise<void>;
13
19
  }
@@ -1,24 +1,24 @@
1
1
  import {
2
- join as c
2
+ join as m
3
3
  } from "node:path";
4
4
 
5
5
  import {
6
- rm as m,
6
+ rm as c,
7
7
  rename as r,
8
- readdir as f
8
+ readdir as h
9
9
  } from "node:fs/promises";
10
10
 
11
11
  import {
12
- getDefaultOptions as o
12
+ getDefaultOptions as a
13
13
  } from "./QyDefaultOptions.js";
14
14
 
15
15
  import {
16
- QyMessageWorker as e
16
+ QyMessageWorker as s
17
17
  } from "./QyMessageWorker.js";
18
18
 
19
19
  import {
20
- folderOrFileExists as h,
21
- ensureDir as d
20
+ folderOrFileExists as d,
21
+ ensureDir as F
22
22
  } from "./QyUtils.js";
23
23
 
24
24
  import {
@@ -26,85 +26,99 @@ import {
26
26
  Zip_File_Extension as i
27
27
  } from "./QyCompressor.js";
28
28
 
29
- export default class extends e {
29
+ import {
30
+ logger as f
31
+ } from "./QyLogger.js";
32
+
33
+ import {
34
+ getSnapshotInfoFileName as l
35
+ } from "./QySnapshots.js";
36
+
37
+ export default class extends s {
38
+ kvFolder;
39
+ snapshotFolder;
40
+ snapshotInfoFolder;
41
+ aclFolder;
42
+ historyAclFolder;
43
+ historySnapshotFolder;
30
44
  constructor({
31
- kvFolder: e,
32
- options: s
45
+ kvFolder: s,
46
+ options: e
33
47
  }) {
34
- super(s = {
35
- ...o("QyKVDataCleaner_Worker"),
36
- ...s
48
+ super(e = {
49
+ ...a("QyKVDataCleaner_Worker"),
50
+ ...e
37
51
  }, [], [ "cleanAclFiles", "cleanPMFiles", "cleanVLFiles", "removeSnapshotsFiles" ]);
38
- var s = c(e, "history"), a = c(e, "snapshot");
52
+ var e = m(s, "history"), o = m(s, "snapshot");
39
53
  Object.assign(this, {
40
- kvFolder: e,
41
- snapshotFolder: a,
42
- snapshotInfoFolder: c(a, "info"),
43
- aclFolder: c(e, "acl"),
44
- historyAclFolder: c(s, "acl"),
45
- historySnapshotFolder: c(s, "snapshot")
54
+ kvFolder: s,
55
+ snapshotFolder: o,
56
+ snapshotInfoFolder: m(o, "info"),
57
+ aclFolder: m(s, "acl"),
58
+ historyAclFolder: m(e, "acl"),
59
+ historySnapshotFolder: m(e, "snapshot")
46
60
  });
47
61
  }
48
62
  _op_start() {}
49
63
  _op_stop() {}
50
- async _op_cleanAclFiles(e) {
51
- var s = this, a = e, e = s.aclFolder;
52
- if (await h(e)) {
53
- var o, r = [];
54
- for (o of (await f(e)).filter(e => /^[1-9]/.test(e))) parseInt(o) <= a && r.push((async (e, s) => {
64
+ async _op_cleanAclFiles(s) {
65
+ var e = this, o = s, s = e.aclFolder;
66
+ if (await d(s)) {
67
+ var a, r = [];
68
+ for (a of (await h(s)).filter(s => /^[1-9]/.test(s))) parseInt(a) <= o && r.push((async (s, e) => {
55
69
  var {
56
- aclFolder: a,
57
- historyAclFolder: o
58
- } = e;
59
- return await d(o), F(e, s, a, o);
60
- })(s, o));
70
+ aclFolder: o,
71
+ historyAclFolder: a
72
+ } = s;
73
+ return await F(a), y(s, e, o, a);
74
+ })(e, a));
61
75
  0 < r.length && await Promise.allSettled(r);
62
76
  }
63
77
  }
64
- async _op_cleanPMFiles(e) {
65
- await Promise.allSettled(e.map(([ e, s ]) => {
66
- return a = this, o = e, r = s, Promise.all([ "pM", "prefixPM" ].map(e => l(a, o, r, e)));
67
- var a, o, r;
78
+ async _op_cleanPMFiles(s) {
79
+ await Promise.allSettled(s.map(([ s, e ]) => {
80
+ return o = this, a = s, r = e, Promise.all([ "pM", "prefixPM" ].map(s => n(o, a, r, s)));
81
+ var o, a, r;
68
82
  }));
69
83
  }
70
- async _op_cleanVLFiles(e, s) {
71
- await l(this, e, s, "vL");
84
+ async _op_cleanVLFiles(s, e) {
85
+ await n(this, s, e, "vL");
72
86
  }
73
- async _op_removeSnapshotsFiles(e) {
87
+ async _op_removeSnapshotsFiles(s) {
74
88
  let {
75
- snapshotFolder: a,
76
- snapshotInfoFolder: o
89
+ snapshotFolder: o,
90
+ snapshotInfoFolder: a
77
91
  } = this;
78
- await Promise.all(e.map(async s => {
79
- await m(c(o, s + ".json")), await Promise.all([ "pM", "prefixPM", "vL" ].map(e => l(this, s, 1 / 0, e))),
80
- await m(c(a, "" + s), {
92
+ await Promise.all(s.map(async ([ e, s ]) => {
93
+ await c(m(a, l(e, s))), await Promise.all([ "pM", "prefixPM", "vL" ].map(s => n(this, e, 1 / 0, s))),
94
+ await c(m(o, "" + e), {
81
95
  recursive: !0
82
96
  });
83
97
  }));
84
98
  }
85
99
  }
86
100
 
87
- function F(e, s, a, o) {
88
- a = c(a, s), o = c(o, s);
89
- return e.options.compressRedundantFile ? t(a, o + i, {
101
+ function y(s, e, o, a) {
102
+ o = m(o, e), a = m(a, e);
103
+ return s.options.compressRedundantFile ? t(o, a + i, {
90
104
  override: !0,
91
105
  removeSrcAfterSuccess: !0
92
- }) : (logger.info(`rename ${a} to ` + o), r(a, o));
106
+ }) : (f.info(`rename ${o} to ` + a), r(o, a));
93
107
  }
94
108
 
95
- async function l(s, a, o, r) {
109
+ async function n(e, o, a, r) {
96
110
  var {
97
- snapshotFolder: e,
111
+ snapshotFolder: s,
98
112
  historySnapshotFolder: t
99
- } = s, i = c(e, "" + a);
100
- if (await h(i)) {
101
- let e;
113
+ } = e, i = m(s, "" + o);
114
+ if (await d(i)) {
115
+ let s;
102
116
  var l, n = [];
103
- for (l of await f(i)) {
117
+ for (l of await h(i)) {
104
118
  var p = new RegExp("^([0-9]+)_" + r).exec(l);
105
- p && (p = parseInt(p[1])) < o && (1 == p ? (e || (e = c(t, "" + a),
106
- await d(e)), n.push(F(s, l, i, e))) : (p = c(i, l), logger.info("Removing " + p),
107
- n.push(m(p))));
119
+ p && (p = parseInt(p[1])) < a && (1 == p ? (s || (s = m(t, "" + o),
120
+ await F(s)), n.push(y(e, l, i, s))) : (p = m(i, l), f.info("Removing " + p),
121
+ n.push(c(p))));
108
122
  }
109
123
  0 < n.length && await Promise.allSettled(n);
110
124
  }
@@ -1,8 +1,16 @@
1
1
  export declare class QyKVDataLoader {
2
+ options: any;
3
+ kvFolder: any;
4
+ aclFolder: any;
5
+ snapshotFolder: any;
6
+ qySnapshots: any;
7
+ loadedMaxAclNum: number;
8
+ aclKeyValueMap: any;
9
+ maxChangeId: number;
2
10
  constructor(kvFolder: any, options: any);
3
11
  load(): Promise<{
4
- maxChangeId: any;
5
- loadedMaxAclNum: any;
12
+ maxChangeId: number;
13
+ loadedMaxAclNum: number;
6
14
  qySnapshots: any;
7
15
  aclKeyValueMap: any;
8
16
  }>;
@@ -1,10 +1,10 @@
1
1
  import {
2
- readFile as y,
2
+ readFile as u,
3
3
  readdir as x
4
4
  } from "node:fs/promises";
5
5
 
6
6
  import {
7
- join as o
7
+ join as t
8
8
  } from "node:path";
9
9
 
10
10
  import {
@@ -12,7 +12,7 @@ import {
12
12
  } from "./QyUtils.js";
13
13
 
14
14
  import {
15
- readAclBuffer as M
15
+ readAclBuffer as F
16
16
  } from "./QyAcl.js";
17
17
 
18
18
  import {
@@ -24,20 +24,26 @@ import {
24
24
  } from "./QyDefaultOptions.js";
25
25
 
26
26
  class a {
27
+ options;
28
+ kvFolder;
29
+ aclFolder;
30
+ snapshotFolder;
31
+ qySnapshots;
32
+ loadedMaxAclNum = 0;
33
+ aclKeyValueMap = {};
34
+ maxChangeId = 0;
27
35
  constructor(a, s) {
28
36
  s = {
29
37
  ...l("QyKVDataLoader"),
30
38
  ...s
31
39
  };
32
- var t = o(a, "snapshot");
40
+ var o = t(a, "snapshot");
33
41
  Object.assign(this, {
34
42
  kvFolder: a,
35
43
  options: s,
36
- aclFolder: o(a, "acl"),
37
- snapshotFolder: t,
38
- loadedMaxAclNum: 0,
39
- aclKeyValueMap: {},
40
- qySnapshots: new e(t, s)
44
+ aclFolder: t(a, "acl"),
45
+ snapshotFolder: o,
46
+ qySnapshots: new e(o, s)
41
47
  });
42
48
  }
43
49
  async load() {
@@ -45,19 +51,19 @@ class a {
45
51
  if (a = a.aclFolder, await g(a)) return (await x(a)).filter(a => /^[1-9]/.test(a)).map(a => parseInt(a));
46
52
  })(this), a.loadSnapshotInfos() ]);
47
53
  let {
48
- maxSnapshotNum: t,
49
- snapshotMaxChangeId: o
54
+ maxSnapshotNum: o,
55
+ snapshotMaxChangeId: t
50
56
  } = a;
51
- if (this.maxChangeId = o, s) {
52
- var e = this, l = s.filter(a => a > t), {
57
+ if (this.maxChangeId = t, s) {
58
+ var e = this, l = s.filter(a => a > o), {
53
59
  aclKeyValueMap: r,
54
- qySnapshots: i,
60
+ qySnapshots: n,
55
61
  options: s
56
- } = (l.sort((a, s) => a - s), e), n = s.autoRepairAclFile, p = await Promise.all(l.map(async a => y(F(e, a))));
62
+ } = (l.sort((a, s) => a - s), e), i = s.autoRepairAclFile, p = await Promise.all(l.map(async a => u(I(e, a))));
57
63
  for (let a = 0; a < l.length; ++a) {
58
- var d = l[a], m = F(e, d), m = await M(m, p[a], n, e.maxChangeId);
64
+ var d = l[a], m = I(e, d), m = await F(m, p[a], i, e.maxChangeId);
59
65
  if (0 < m.length) {
60
- for (var [ h, c ] of m) i.applyCmdObj(c, r), e.maxChangeId = h;
66
+ for (var [ h, c ] of m) n.applyCmdObj(c, r), e.maxChangeId = h;
61
67
  e.loadedMaxAclNum = d;
62
68
  }
63
69
  }
@@ -66,19 +72,19 @@ class a {
66
72
  var {
67
73
  maxChangeId: s,
68
74
  loadedMaxAclNum: f,
69
- aclKeyValueMap: u
75
+ aclKeyValueMap: y
70
76
  } = this;
71
77
  return {
72
78
  maxChangeId: s,
73
79
  loadedMaxAclNum: f,
74
80
  qySnapshots: a,
75
- aclKeyValueMap: u
81
+ aclKeyValueMap: y
76
82
  };
77
83
  }
78
84
  }
79
85
 
80
- function F(a, s) {
81
- return o(a.aclFolder, s + "_acl.txt");
86
+ function I(a, s) {
87
+ return t(a.aclFolder, s + "_acl.txt");
82
88
  }
83
89
 
84
90
  export {
@@ -1,5 +1,15 @@
1
1
  import { QyMessageWorker } from "./QyMessageWorker.ts";
2
2
  export default class QyKVDataSaver_Worker extends QyMessageWorker {
3
+ kvFolder: any;
4
+ aclFolder: any;
5
+ qyAclSaver: any;
6
+ qySnapshotSaver: any;
7
+ isStopping: any;
8
+ currentAclNum: any;
9
+ maxChangeId: any;
10
+ snapshotMaxChangeId: any;
11
+ isSavingSnapshot: any;
12
+ saveSnapshotResolve: any;
3
13
  constructor({ kvFolder, options }: {
4
14
  kvFolder: any;
5
15
  options: any;