datafolder 1.0.10 → 1.0.12
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.
- package/{internal.md → Internal.md} +8 -1
- package/README.md +15 -1
- package/SKILL.md +191 -0
- package/SSD.md +3 -3
- package/package.json +2 -2
- package/scripts/flights2.js +2 -0
- package/src/QyAcl.d.ts +13 -7
- package/src/QyAcl.js +122 -138
- package/src/QyAclSaver.js +2 -2
- package/src/QyAclSaver_Worker.d.ts +2 -2
- package/src/QyAclWriter.d.ts +1 -1
- package/src/QyBatch.d.ts +8 -11
- package/src/QyBatch.js +239 -211
- package/src/QyBinWriter.d.ts +2 -2
- package/src/QyBinWriter.js +15 -15
- package/src/QyCD.d.ts +2 -2
- package/src/QyCD.js +29 -29
- package/src/QyCache.d.ts +6 -1
- package/src/QyCache.js +72 -53
- package/src/QyCompressor.d.ts +2 -2
- package/src/QyCompressor.js +13 -13
- package/src/QyDB.d.ts +1 -22
- package/src/QyDB.js +23 -78
- package/src/QyDefaultOptions.js +5 -0
- package/src/QyDir.js +26 -27
- package/src/QyExpire.d.ts +21 -0
- package/src/QyExpire.js +113 -0
- package/src/QyExpireClock.d.ts +15 -0
- package/src/QyExpireClock.js +53 -0
- package/src/QyExpire_Worker.d.ts +20 -0
- package/src/QyExpire_Worker.js +127 -0
- package/src/QyFile.js +36 -25
- package/src/QyFileContentUtils.js +21 -21
- package/src/QyItem.d.ts +1 -0
- package/src/QyItem.js +15 -9
- package/src/QyJsonSaver.d.ts +1 -1
- package/src/QyJsonSaver.js +1 -1
- package/src/QyKVData.d.ts +5 -2
- package/src/QyKVData.js +126 -114
- package/src/QyKVDataCleaner.js +2 -2
- package/src/QyKVDataCleaner_Worker.js +37 -37
- package/src/QyKVDataSaver.js +2 -2
- package/src/QyKVDataSaver_Worker.d.ts +2 -2
- package/src/QyKVDataSaver_Worker.js +5 -5
- package/src/QyLogFileSaver.js +2 -2
- package/src/QyLogger.d.ts +1 -0
- package/src/QyLogger.js +1 -0
- package/src/QyMessageWorker.d.ts +1 -1
- package/src/QyMessageWorker.js +10 -10
- package/src/QyMessager.d.ts +1 -1
- package/src/QyMessager.js +37 -36
- package/src/QyMessager_Run.js +12 -8
- package/src/QyQueue.js +8 -12
- package/src/QySaver.d.ts +1 -1
- package/src/QySaver.js +1 -1
- package/src/QySnapshotCompactor.js +2 -2
- package/src/QySnapshotCompactor_Worker.d.ts +1 -1
- package/src/QySnapshotCompactor_Worker.js +5 -5
- package/src/QySnapshotSaver.js +2 -2
- package/src/QySnapshotSaver_Worker.js +4 -4
- package/src/QySnapshots.d.ts +2 -2
- package/src/QySnapshots.js +38 -38
- package/src/QyTrigger.d.ts +1 -1
- package/src/QyTrigger.js +20 -21
- package/src/QyUtils.d.ts +3 -2
- package/src/QyUtils.js +93 -86
- package/src/hackernews.js +1 -1
- package/src/simulate.js +6 -6
- package/src/simulate2.js +5 -5
- package/src/soc_pokec.js +1 -1
- package/static/codemirror.bundle/editor.bundle.js +43 -9
- package/static/datafolderui/QyUIFolderViewer.js +1 -5
package/src/QyKVData.js
CHANGED
|
@@ -23,16 +23,19 @@ import {
|
|
|
23
23
|
} from "./QyKVDataCleaner.js";
|
|
24
24
|
|
|
25
25
|
import {
|
|
26
|
-
|
|
27
|
-
readBufferAsync as C,
|
|
26
|
+
readBufferAsync as y,
|
|
28
27
|
sleep as c
|
|
29
28
|
} from "./QyUtils.js";
|
|
30
29
|
|
|
31
30
|
import {
|
|
32
|
-
logger as
|
|
31
|
+
logger as C
|
|
33
32
|
} from "./QyLogger.js";
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
import {
|
|
35
|
+
QyExpire as h
|
|
36
|
+
} from "./QyExpire.js";
|
|
37
|
+
|
|
38
|
+
class t {
|
|
36
39
|
kvFolder;
|
|
37
40
|
snapshotFolder;
|
|
38
41
|
qyCache;
|
|
@@ -44,29 +47,31 @@ class a {
|
|
|
44
47
|
compactMaxChangeId = 0;
|
|
45
48
|
snapshotSavedChangeId = 0;
|
|
46
49
|
maxChangeId = 0;
|
|
47
|
-
|
|
50
|
+
emptySnapshotNumVerList = [];
|
|
48
51
|
isStopping = !1;
|
|
49
52
|
qySnapshots;
|
|
50
53
|
aclKeyValueMap;
|
|
51
54
|
compactInterval;
|
|
52
55
|
unloadInterval;
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
qyExpire;
|
|
57
|
+
constructor(t, a, o) {
|
|
58
|
+
a = {
|
|
55
59
|
...s("QyKVData"),
|
|
56
|
-
...
|
|
60
|
+
...a
|
|
57
61
|
};
|
|
58
|
-
var e = n(
|
|
62
|
+
var e = n(t, "snapshot");
|
|
59
63
|
Object.assign(this, {
|
|
60
64
|
qyCache: o,
|
|
61
|
-
options:
|
|
62
|
-
kvFolder:
|
|
65
|
+
options: a,
|
|
66
|
+
kvFolder: t,
|
|
63
67
|
snapshotFolder: e,
|
|
64
|
-
qyKVDataSaver: new i(this,
|
|
65
|
-
qySnapshotCompactor: new p(this,
|
|
66
|
-
qyKVDataCleaner: new r(this,
|
|
68
|
+
qyKVDataSaver: new i(this, t, a),
|
|
69
|
+
qySnapshotCompactor: new p(this, t, a),
|
|
70
|
+
qyKVDataCleaner: new r(this, t, a),
|
|
71
|
+
qyExpire: new h(o, a)
|
|
67
72
|
});
|
|
68
73
|
}
|
|
69
|
-
start(
|
|
74
|
+
start(t, a, o, e) {
|
|
70
75
|
var {
|
|
71
76
|
options: n,
|
|
72
77
|
qyKVDataSaver: s,
|
|
@@ -75,86 +80,87 @@ class a {
|
|
|
75
80
|
} = this, {
|
|
76
81
|
maxSnapshotNum: r,
|
|
77
82
|
snapshotMaxChangeId: h
|
|
78
|
-
} = o, s = (s.start(
|
|
83
|
+
} = o, s = (s.start(t, r, a, e), i.start(), p.start(), this.qyExpire.start(),
|
|
84
|
+
setInterval(() => l(this), n.compactSnapshotsInterval)), r = setInterval(() => (async o => {
|
|
79
85
|
if (!o.unloadingMemory) {
|
|
80
86
|
o.unloadingMemory = !0;
|
|
81
87
|
var {
|
|
82
88
|
qyCache: e,
|
|
83
89
|
options: n
|
|
84
90
|
} = o;
|
|
85
|
-
let
|
|
91
|
+
let t = 0, a = 0;
|
|
86
92
|
if (e) {
|
|
87
93
|
var s, i = n.maxFileCountToUnload, n = e.rootDir;
|
|
88
|
-
|
|
89
|
-
for (s of n.allLoadedSubdirs()) if ((
|
|
90
|
-
|
|
94
|
+
a = d(o, n), t = a;
|
|
95
|
+
for (s of n.allLoadedSubdirs()) if ((a += d(o, s)) > i && (t += a,
|
|
96
|
+
a = 0, await c(0), o.isStopping)) break;
|
|
91
97
|
}
|
|
92
|
-
|
|
98
|
+
t += a, global.gc && global.gc(), o.unloadingMemory = !1;
|
|
93
99
|
}
|
|
94
100
|
})(this), n.unloadMemInterval);
|
|
95
101
|
return Object.assign(this, {
|
|
96
|
-
maxChangeId:
|
|
102
|
+
maxChangeId: t,
|
|
97
103
|
snapshotSavedChangeId: h,
|
|
98
104
|
qySnapshots: o,
|
|
99
105
|
aclKeyValueMap: e,
|
|
100
106
|
compactInterval: s,
|
|
101
107
|
unloadInterval: r
|
|
102
|
-
}), n.bgLoadPosMaps ? (async
|
|
103
|
-
var
|
|
108
|
+
}), n.bgLoadPosMaps ? (async t => {
|
|
109
|
+
var a, {
|
|
104
110
|
qySnapshots: o,
|
|
105
111
|
options: e
|
|
106
|
-
} =
|
|
112
|
+
} = t;
|
|
107
113
|
console.time("bgLoadPosMaps");
|
|
108
|
-
for (
|
|
114
|
+
for (a of Object.keys(o.numToSnapshotMap).sort((t, a) => a - t)) {
|
|
109
115
|
if (await async function s(i, p, r = void 0, h = void 0, c = void 0, l = void 0) {
|
|
110
116
|
if (i.isStopping) return void (l && l.close());
|
|
111
117
|
let d = i.qySnapshots;
|
|
112
118
|
let m = d.numToSnapshotMap;
|
|
113
|
-
let
|
|
114
|
-
if (!
|
|
119
|
+
let u = m[p];
|
|
120
|
+
if (!u) return void (l && l.close());
|
|
115
121
|
let {
|
|
116
|
-
info:
|
|
122
|
+
info: S,
|
|
117
123
|
prefixPM: v
|
|
118
|
-
} =
|
|
124
|
+
} = u;
|
|
119
125
|
r = r || Object.keys(v).sort().reverse();
|
|
120
126
|
if (0 == r.length) return void (l && l.close());
|
|
121
|
-
if (null == h || h !=
|
|
122
|
-
s(i, p, r,
|
|
127
|
+
if (null == h || h != S.pMVersion) return l && l.close(), c = d.getPMFilePath(u),
|
|
128
|
+
s(i, p, r, S.pMVersion, c, await f(c));
|
|
123
129
|
for (;0 < r.length; ) {
|
|
124
|
-
let e =
|
|
130
|
+
let e = r.at(-1), n = v[e];
|
|
125
131
|
if (n) {
|
|
126
|
-
let [
|
|
132
|
+
let [ t, a ] = n, o = await y(c, l, t, a);
|
|
127
133
|
if (i.isStopping || !m[p]) return void l.close();
|
|
128
|
-
if (h !=
|
|
129
|
-
e in v && d.loadPartialPosMapBuffer(
|
|
134
|
+
if (h != S.pMVersion) return l.close(), s(i, p, r);
|
|
135
|
+
e in v && d.loadPartialPosMapBuffer(u, e, o);
|
|
130
136
|
}
|
|
131
137
|
r.pop();
|
|
132
138
|
}
|
|
133
139
|
l.close();
|
|
134
|
-
|
|
135
|
-
}(
|
|
136
|
-
if (await c(0),
|
|
140
|
+
C.info("bgLoadPosMap:" + p);
|
|
141
|
+
}(t, a), t.isStopping) break;
|
|
142
|
+
if (await c(0), t.isStopping) break;
|
|
137
143
|
}
|
|
138
|
-
console.timeEnd("bgLoadPosMaps"), !
|
|
144
|
+
console.timeEnd("bgLoadPosMaps"), !t.isStopping && e.compactAtStart && l(t);
|
|
139
145
|
})(this) : n.compactAtStart && l(this), this;
|
|
140
146
|
}
|
|
141
147
|
async stop() {
|
|
142
148
|
this.isStopping = !0;
|
|
143
149
|
var {
|
|
144
|
-
qyKVDataSaver:
|
|
145
|
-
qySnapshotCompactor:
|
|
150
|
+
qyKVDataSaver: t,
|
|
151
|
+
qySnapshotCompactor: a,
|
|
146
152
|
qySnapshots: o,
|
|
147
153
|
compactInterval: e,
|
|
148
154
|
unloadInterval: n,
|
|
149
155
|
qyKVDataCleaner: s
|
|
150
156
|
} = this;
|
|
151
|
-
clearInterval(e), clearInterval(n), this.onSnapshotSavedChangeId(await
|
|
152
|
-
o && o.closeAllFDs(), await
|
|
157
|
+
clearInterval(e), clearInterval(n), this.onSnapshotSavedChangeId(await t.stop()),
|
|
158
|
+
o && o.closeAllFDs(), await a.stop(), await s.stop(), await this.qyExpire.stop();
|
|
153
159
|
}
|
|
154
|
-
save(
|
|
160
|
+
save(t, a, o, e) {
|
|
155
161
|
var n = this.qyKVDataSaver;
|
|
156
|
-
if (e) return n.callSave(
|
|
157
|
-
n.castSave(
|
|
162
|
+
if (e) return n.callSave(t, a, o);
|
|
163
|
+
n.castSave(t, a, o);
|
|
158
164
|
}
|
|
159
165
|
increaseChangeId() {
|
|
160
166
|
return ++this.maxChangeId;
|
|
@@ -162,68 +168,68 @@ class a {
|
|
|
162
168
|
decreaseChangeId() {
|
|
163
169
|
--this.maxChangeId;
|
|
164
170
|
}
|
|
165
|
-
getValueSync(
|
|
171
|
+
getValueSync(t) {
|
|
166
172
|
var {
|
|
167
|
-
qySnapshots:
|
|
173
|
+
qySnapshots: a,
|
|
168
174
|
aclKeyValueMap: o
|
|
169
175
|
} = this;
|
|
170
|
-
return
|
|
176
|
+
return t in o ? o[t] : a.getValueSync(t);
|
|
171
177
|
}
|
|
172
|
-
removeKey(
|
|
178
|
+
removeKey(t) {
|
|
173
179
|
var {
|
|
174
|
-
qySnapshots:
|
|
180
|
+
qySnapshots: a,
|
|
175
181
|
aclKeyValueMap: o
|
|
176
182
|
} = this;
|
|
177
|
-
if (!(
|
|
178
|
-
o[
|
|
183
|
+
if (!(t in o)) return a.removeKey(t);
|
|
184
|
+
o[t] = void 0;
|
|
179
185
|
}
|
|
180
|
-
onSnapshotSavedChangeId(
|
|
181
|
-
this.snapshotSavedChangeId =
|
|
186
|
+
onSnapshotSavedChangeId(t, a = void 0) {
|
|
187
|
+
this.snapshotSavedChangeId = t;
|
|
182
188
|
var {
|
|
183
189
|
compactState: o,
|
|
184
190
|
compactMaxChangeId: e,
|
|
185
191
|
qyKVDataSaver: n
|
|
186
192
|
} = this;
|
|
187
|
-
if (3 == o && e <=
|
|
188
|
-
var s, o =
|
|
193
|
+
if (3 == o && e <= t && (x(this), this.compactState = 1), a) {
|
|
194
|
+
var s, o = a, i = this.qySnapshots, p = i.keyToSnapshotMap;
|
|
189
195
|
for (s in o.posMap) {
|
|
190
196
|
var r = p[s];
|
|
191
197
|
r && i.removeKeyFromSnapshot(r, s);
|
|
192
198
|
}
|
|
193
|
-
i.addMaxSnapshot(o),
|
|
194
|
-
n.releaseSnapshot(
|
|
199
|
+
i.addMaxSnapshot(o), C.info("addPMOnlySnapshot: " + i.snapshotMaxChangeId),
|
|
200
|
+
n.releaseSnapshot(a.snapshotNum);
|
|
195
201
|
}
|
|
196
202
|
}
|
|
197
|
-
onCompactUpdates(
|
|
203
|
+
onCompactUpdates(t) {
|
|
198
204
|
if (2 == this.compactState) {
|
|
199
205
|
var l = this, {
|
|
200
|
-
pMUpdates:
|
|
206
|
+
pMUpdates: t,
|
|
201
207
|
vLUpdates: d,
|
|
202
208
|
combinationUpdate: m
|
|
203
|
-
} =
|
|
204
|
-
if (
|
|
205
|
-
var
|
|
206
|
-
for (s in
|
|
207
|
-
var e, n =
|
|
209
|
+
} = t = t;
|
|
210
|
+
if (t) {
|
|
211
|
+
var a = t, o = l.qySnapshots.numToSnapshotMap;
|
|
212
|
+
for (s in a) {
|
|
213
|
+
var e, n = a[s], s = o[s], {
|
|
208
214
|
prefixPM: i,
|
|
209
215
|
info: p
|
|
210
216
|
} = s;
|
|
211
217
|
for (e in ++p.pMVersion, p.verList[0] = p.pMVersion + p.vLVersion,
|
|
212
218
|
i) i[e] = n[e];
|
|
213
|
-
(
|
|
219
|
+
(t => {
|
|
214
220
|
var {
|
|
215
|
-
info:
|
|
221
|
+
info: a,
|
|
216
222
|
compactOutedCount: o
|
|
217
|
-
} =
|
|
218
|
-
|
|
223
|
+
} = t;
|
|
224
|
+
a.outdatedCount += o, t.outdatedCount -= o, t.compactOutedCount = 0;
|
|
219
225
|
})(s);
|
|
220
226
|
}
|
|
221
227
|
}
|
|
222
228
|
if (d) {
|
|
223
|
-
var r = d, h = (
|
|
229
|
+
var r = d, h = (t = l).qySnapshots.numToSnapshotMap;
|
|
224
230
|
for (f in r) {
|
|
225
|
-
var c,
|
|
226
|
-
posMap:
|
|
231
|
+
var c, u, {
|
|
232
|
+
posMap: S,
|
|
227
233
|
prefixPM: v
|
|
228
234
|
} = r[f], f = h[f], {
|
|
229
235
|
posMap: y,
|
|
@@ -231,9 +237,9 @@ class a {
|
|
|
231
237
|
info: g
|
|
232
238
|
} = f;
|
|
233
239
|
for (c in ++g.pMVersion, ++g.vLVersion, g.verList[0] = g.pMVersion + g.vLVersion,
|
|
234
|
-
y) y[c] =
|
|
235
|
-
for (
|
|
236
|
-
|
|
240
|
+
y) y[c] = S[c];
|
|
241
|
+
for (u in C) C[u] = v[u];
|
|
242
|
+
I(f);
|
|
237
243
|
}
|
|
238
244
|
}
|
|
239
245
|
if (m) {
|
|
@@ -242,88 +248,94 @@ class a {
|
|
|
242
248
|
numToSnapshotMap: n,
|
|
243
249
|
keyToSnapshotMap: s
|
|
244
250
|
} = e, {
|
|
245
|
-
snapshotNum:
|
|
246
|
-
|
|
251
|
+
snapshotNum: t,
|
|
252
|
+
combinedSnapshotNumVerList: a,
|
|
247
253
|
posMap: i
|
|
248
|
-
} = d, p = n[
|
|
254
|
+
} = d, p = n[t], {
|
|
249
255
|
posMap: r,
|
|
250
256
|
info: o
|
|
251
257
|
} = p;
|
|
252
258
|
for (M in ++o.pMVersion, ++o.vLVersion, o.verList[0] = o.pMVersion + o.vLVersion,
|
|
253
259
|
r) r[M] = i[M];
|
|
254
|
-
|
|
260
|
+
I(p);
|
|
255
261
|
let h = o.totalCount, c = p.outdatedCount;
|
|
256
|
-
for (let [ o ] of
|
|
257
|
-
var V,
|
|
262
|
+
for (let [ o ] of a) {
|
|
263
|
+
var V, q = n[o];
|
|
258
264
|
let {
|
|
259
|
-
posMap:
|
|
260
|
-
info:
|
|
261
|
-
} =
|
|
262
|
-
for (V in
|
|
263
|
-
q
|
|
265
|
+
posMap: t,
|
|
266
|
+
info: a
|
|
267
|
+
} = q;
|
|
268
|
+
for (V in t) r[V] = i[V], s[V] = p;
|
|
269
|
+
I(q), h += a.totalCount, c += q.outdatedCount, e.delSnapshot(q);
|
|
264
270
|
}
|
|
265
271
|
o.totalCount = h, p.outdatedCount = c;
|
|
266
272
|
}
|
|
267
|
-
this.snapshotSavedChangeId >= this.compactMaxChangeId ? (
|
|
273
|
+
this.snapshotSavedChangeId >= this.compactMaxChangeId ? (x(this), this.compactState = 1) : this.compactState = 3;
|
|
268
274
|
}
|
|
269
275
|
}
|
|
276
|
+
monitorContentExpire(t, a) {
|
|
277
|
+
this.qyExpire.monitorContentExpire(t, a);
|
|
278
|
+
}
|
|
279
|
+
unmonitorContentExpire(t, a) {
|
|
280
|
+
this.qyExpire.unmonitorContentExpire(t, a);
|
|
281
|
+
}
|
|
270
282
|
}
|
|
271
283
|
|
|
272
|
-
function
|
|
284
|
+
function I(t) {
|
|
273
285
|
var {
|
|
274
|
-
info:
|
|
286
|
+
info: a,
|
|
275
287
|
compactOutedCount: o
|
|
276
|
-
} =
|
|
277
|
-
|
|
278
|
-
|
|
288
|
+
} = t;
|
|
289
|
+
a.totalCount -= a.outdatedCount + o, a.outdatedCount = 0, t.outdatedCount -= o,
|
|
290
|
+
t.compactOutedCount = 0;
|
|
279
291
|
}
|
|
280
292
|
|
|
281
|
-
function l(
|
|
282
|
-
if (1 ==
|
|
293
|
+
function l(t) {
|
|
294
|
+
if (1 == t.compactState) {
|
|
283
295
|
var {
|
|
284
|
-
maxChangeId:
|
|
296
|
+
maxChangeId: a,
|
|
285
297
|
qySnapshots: o,
|
|
286
298
|
qySnapshotCompactor: e
|
|
287
|
-
} =
|
|
288
|
-
|
|
299
|
+
} = t, {
|
|
300
|
+
emptySnapshotNumVerList: o,
|
|
289
301
|
pMCompactSnapshotList: n,
|
|
290
302
|
vLCompactSnapshotList: s,
|
|
291
303
|
combiningSnapshotList: i
|
|
292
304
|
} = o.calOutdates();
|
|
293
305
|
if (0 < i.length || 0 < n.length || 0 < s.length) {
|
|
294
|
-
Object.assign(
|
|
306
|
+
Object.assign(t, {
|
|
295
307
|
compactState: 2,
|
|
296
|
-
compactMaxChangeId:
|
|
308
|
+
compactMaxChangeId: a
|
|
297
309
|
});
|
|
298
310
|
for (var p of [ n, s, i ]) for (var r of p) r.compactOutedCount = r.outdatedCount;
|
|
299
311
|
e.compactSnapshots(n, s, i);
|
|
300
312
|
}
|
|
301
|
-
0 < o.length && (
|
|
313
|
+
0 < o.length && (t.emptySnapshotNumVerList.push(...o), t.snapshotSavedChangeId >= a ? m(t) : 1 == t.compactState && Object.assign(t, {
|
|
302
314
|
compactState: 3,
|
|
303
|
-
compactMaxChangeId:
|
|
315
|
+
compactMaxChangeId: a
|
|
304
316
|
}));
|
|
305
317
|
}
|
|
306
318
|
}
|
|
307
319
|
|
|
308
|
-
function d(
|
|
309
|
-
var o =
|
|
320
|
+
function d(t, a) {
|
|
321
|
+
var o = t.qySnapshots.snapshotMaxChangeId;
|
|
310
322
|
let e = 0;
|
|
311
|
-
if (
|
|
323
|
+
if (a.fileMapLoaded) for (var n of a.fileList) ++e, n.cChangeId <= o && (n.visited ? n.visited = !1 : n.unloadFileContent());
|
|
312
324
|
return e;
|
|
313
325
|
}
|
|
314
326
|
|
|
315
|
-
function
|
|
327
|
+
function m(t) {
|
|
316
328
|
var {
|
|
317
|
-
qyKVDataCleaner:
|
|
318
|
-
|
|
319
|
-
} =
|
|
320
|
-
0 <
|
|
329
|
+
qyKVDataCleaner: t,
|
|
330
|
+
emptySnapshotNumVerList: a
|
|
331
|
+
} = t;
|
|
332
|
+
0 < a.length && (t.removeSnapshotsFiles(a), a.length = 0);
|
|
321
333
|
}
|
|
322
334
|
|
|
323
|
-
function
|
|
324
|
-
|
|
335
|
+
function x(t) {
|
|
336
|
+
t.qySnapshotCompactor.saveSnapshotInfos(), m(t);
|
|
325
337
|
}
|
|
326
338
|
|
|
327
339
|
export {
|
|
328
|
-
|
|
340
|
+
t as QyKVData
|
|
329
341
|
};
|
package/src/QyKVDataCleaner.js
CHANGED
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
|
|
9
9
|
class s extends e {
|
|
10
10
|
constructor(e, s, a) {
|
|
11
|
-
super(
|
|
11
|
+
super("QyKVDataCleaner_Worker", {
|
|
12
12
|
kvFolder: s,
|
|
13
13
|
options: a = {
|
|
14
14
|
...r("QyKVDataCleaner"),
|
|
15
15
|
...a
|
|
16
16
|
}
|
|
17
|
-
}, a, [], [ "cleanAclFiles", "cleanPMFiles", "cleanVLFiles", "removeSnapshotsFiles" ]);
|
|
17
|
+
}, a, [], [ "cleanAclFiles", "cleanPMFiles", "cleanVLFiles", "removeSnapshotsFiles" ], e);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./QyDefaultOptions.js";
|
|
14
14
|
|
|
15
15
|
import {
|
|
16
|
-
QyMessageWorker as
|
|
16
|
+
QyMessageWorker as e
|
|
17
17
|
} from "./QyMessageWorker.js";
|
|
18
18
|
|
|
19
19
|
import {
|
|
@@ -31,10 +31,10 @@ import {
|
|
|
31
31
|
} from "./QyLogger.js";
|
|
32
32
|
|
|
33
33
|
import {
|
|
34
|
-
|
|
34
|
+
getInfoFileName as l
|
|
35
35
|
} from "./QySnapshots.js";
|
|
36
36
|
|
|
37
|
-
export default class extends
|
|
37
|
+
export default class extends e {
|
|
38
38
|
kvFolder;
|
|
39
39
|
snapshotFolder;
|
|
40
40
|
snapshotInfoFolder;
|
|
@@ -42,82 +42,82 @@ export default class extends s {
|
|
|
42
42
|
historyAclFolder;
|
|
43
43
|
historySnapshotFolder;
|
|
44
44
|
constructor({
|
|
45
|
-
kvFolder:
|
|
46
|
-
options:
|
|
45
|
+
kvFolder: e,
|
|
46
|
+
options: s
|
|
47
47
|
}) {
|
|
48
|
-
super(
|
|
48
|
+
super(s = {
|
|
49
49
|
...a("QyKVDataCleaner_Worker"),
|
|
50
|
-
...
|
|
50
|
+
...s
|
|
51
51
|
}, [], [ "cleanAclFiles", "cleanPMFiles", "cleanVLFiles", "removeSnapshotsFiles" ]);
|
|
52
|
-
var
|
|
52
|
+
var s = m(e, "history"), o = m(e, "snapshot");
|
|
53
53
|
Object.assign(this, {
|
|
54
|
-
kvFolder:
|
|
54
|
+
kvFolder: e,
|
|
55
55
|
snapshotFolder: o,
|
|
56
56
|
snapshotInfoFolder: m(o, "info"),
|
|
57
|
-
aclFolder: m(
|
|
58
|
-
historyAclFolder: m(
|
|
59
|
-
historySnapshotFolder: m(
|
|
57
|
+
aclFolder: m(e, "acl"),
|
|
58
|
+
historyAclFolder: m(s, "acl"),
|
|
59
|
+
historySnapshotFolder: m(s, "snapshot")
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
_op_start() {}
|
|
63
63
|
_op_stop() {}
|
|
64
|
-
async _op_cleanAclFiles(
|
|
65
|
-
var
|
|
66
|
-
if (await d(
|
|
64
|
+
async _op_cleanAclFiles(e) {
|
|
65
|
+
var s = this, o = e, e = s.aclFolder;
|
|
66
|
+
if (await d(e)) {
|
|
67
67
|
var a, r = [];
|
|
68
|
-
for (a of (await h(
|
|
68
|
+
for (a of (await h(e)).filter(e => /^[1-9]/.test(e))) parseInt(a) <= o && r.push((async (e, s) => {
|
|
69
69
|
var {
|
|
70
70
|
aclFolder: o,
|
|
71
71
|
historyAclFolder: a
|
|
72
|
-
} =
|
|
73
|
-
return await F(a), y(
|
|
74
|
-
})(
|
|
72
|
+
} = e;
|
|
73
|
+
return await F(a), y(e, s, o, a);
|
|
74
|
+
})(s, a));
|
|
75
75
|
0 < r.length && await Promise.allSettled(r);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
async _op_cleanPMFiles(
|
|
79
|
-
await Promise.allSettled(
|
|
80
|
-
return o = this, a =
|
|
78
|
+
async _op_cleanPMFiles(e) {
|
|
79
|
+
await Promise.allSettled(e.map(([ e, s ]) => {
|
|
80
|
+
return o = this, a = e, r = s, Promise.all([ "pM", "prefixPM" ].map(e => n(o, a, r, e)));
|
|
81
81
|
var o, a, r;
|
|
82
82
|
}));
|
|
83
83
|
}
|
|
84
|
-
async _op_cleanVLFiles(
|
|
85
|
-
await n(this,
|
|
84
|
+
async _op_cleanVLFiles(e, s) {
|
|
85
|
+
await n(this, e, s, "vL");
|
|
86
86
|
}
|
|
87
|
-
async _op_removeSnapshotsFiles(
|
|
87
|
+
async _op_removeSnapshotsFiles(e) {
|
|
88
88
|
let {
|
|
89
89
|
snapshotFolder: o,
|
|
90
90
|
snapshotInfoFolder: a
|
|
91
91
|
} = this;
|
|
92
|
-
await Promise.all(
|
|
93
|
-
await c(m(a, l(
|
|
94
|
-
await c(m(o, "" +
|
|
92
|
+
await Promise.all(e.map(async ([ s, e ]) => {
|
|
93
|
+
await c(m(a, l(s, e))), await Promise.all([ "pM", "prefixPM", "vL" ].map(e => n(this, s, 1 / 0, e))),
|
|
94
|
+
await c(m(o, "" + s), {
|
|
95
95
|
recursive: !0
|
|
96
96
|
});
|
|
97
97
|
}));
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
function y(
|
|
102
|
-
o = m(o,
|
|
103
|
-
return
|
|
101
|
+
function y(e, s, o, a) {
|
|
102
|
+
o = m(o, s), a = m(a, s);
|
|
103
|
+
return e.options.compressRedundantFile ? t(o, a + i, {
|
|
104
104
|
override: !0,
|
|
105
105
|
removeSrcAfterSuccess: !0
|
|
106
106
|
}) : (f.info(`rename ${o} to ` + a), r(o, a));
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
async function n(
|
|
109
|
+
async function n(s, o, a, r) {
|
|
110
110
|
var {
|
|
111
|
-
snapshotFolder:
|
|
111
|
+
snapshotFolder: e,
|
|
112
112
|
historySnapshotFolder: t
|
|
113
|
-
} =
|
|
113
|
+
} = s, i = m(e, "" + o);
|
|
114
114
|
if (await d(i)) {
|
|
115
|
-
let
|
|
115
|
+
let e;
|
|
116
116
|
var l, n = [];
|
|
117
117
|
for (l of await h(i)) {
|
|
118
118
|
var p = new RegExp("^([0-9]+)_" + r).exec(l);
|
|
119
|
-
p && (p = parseInt(p[1])) < a && (1 == p ? (
|
|
120
|
-
await F(
|
|
119
|
+
p && (p = parseInt(p[1])) < a && (1 == p ? (e || (e = m(t, "" + o),
|
|
120
|
+
await F(e)), n.push(y(s, l, i, e))) : (p = m(i, l), f.info("Removing " + p),
|
|
121
121
|
n.push(c(p))));
|
|
122
122
|
}
|
|
123
123
|
0 < n.length && await Promise.allSettled(n);
|
package/src/QyKVDataSaver.js
CHANGED
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
|
|
9
9
|
class a extends e {
|
|
10
10
|
constructor(e, a, s) {
|
|
11
|
-
super(
|
|
11
|
+
super("QyKVDataSaver_Worker", {
|
|
12
12
|
kvFolder: a,
|
|
13
13
|
options: s = {
|
|
14
14
|
...r("QyKVDataSaver"),
|
|
15
15
|
...s
|
|
16
16
|
}
|
|
17
|
-
}, s, [ "callSave" ], [ "castSave", "releaseSnapshot" ]);
|
|
17
|
+
}, s, [ "callSave" ], [ "castSave", "releaseSnapshot" ], e);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -16,8 +16,8 @@ export default class QyKVDataSaver_Worker extends QyMessageWorker {
|
|
|
16
16
|
});
|
|
17
17
|
_op_start(maxChangeId: any, maxSnapshotNum: any, loadedMaxAclNum: any, aclKeyValueMap: any): void;
|
|
18
18
|
_op_stop(): Promise<any>;
|
|
19
|
-
callSave(changeId: any,
|
|
20
|
-
castSave(changeId: any,
|
|
19
|
+
callSave(changeId: any, cmdArgAsListChanges: any, syncList: any): any;
|
|
20
|
+
castSave(changeId: any, cmdArgAsListChanges: any, syncList: any): any;
|
|
21
21
|
releaseSnapshot(snapshotNum: any): void;
|
|
22
22
|
onSnapshotSavedChangeId(snapshotSavedChangeId: any, pMOnlySnapshot: any): void;
|
|
23
23
|
}
|
|
@@ -84,7 +84,7 @@ export default class extends a {
|
|
|
84
84
|
this.qySnapshotSaver.releaseSnapshot(a);
|
|
85
85
|
}
|
|
86
86
|
onSnapshotSavedChangeId(a, s) {
|
|
87
|
-
this.isSavingSnapshot = !1, this.saveSnapshotResolve ? this.saveSnapshotResolve() : this.isStopping || this.
|
|
87
|
+
this.isSavingSnapshot = !1, this.saveSnapshotResolve ? this.saveSnapshotResolve() : this.isStopping || this.postParent("onSnapshotSavedChangeId", a, s);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -93,8 +93,8 @@ function h(a, s, t, e, o = !1) {
|
|
|
93
93
|
qyAclSaver: n,
|
|
94
94
|
qySnapshotSaver: r,
|
|
95
95
|
options: h,
|
|
96
|
-
snapshotMaxChangeId:
|
|
97
|
-
currentAclNum:
|
|
96
|
+
snapshotMaxChangeId: p,
|
|
97
|
+
currentAclNum: i,
|
|
98
98
|
isSavingSnapshot: S
|
|
99
99
|
} = a;
|
|
100
100
|
let v;
|
|
@@ -104,8 +104,8 @@ function h(a, s, t, e, o = !1) {
|
|
|
104
104
|
var g = c.length;
|
|
105
105
|
for (let a = 0; a < g; a += 2) m(l, c[a]);
|
|
106
106
|
}
|
|
107
|
-
return r.castSave(s, t, e), a.maxChangeId = s, !S && s -
|
|
108
|
-
n && n.switch(d(a)), r.saveSnapshot(
|
|
107
|
+
return r.castSave(s, t, e), a.maxChangeId = s, !S && s - p >= h.snapshotMaxChangeCount && (++a.currentAclNum,
|
|
108
|
+
n && n.switch(d(a)), r.saveSnapshot(i), Object.assign(a, {
|
|
109
109
|
snapshotMaxChangeId: s,
|
|
110
110
|
isSavingSnapshot: !0
|
|
111
111
|
})), v;
|
package/src/QyLogFileSaver.js
CHANGED
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
|
|
9
9
|
class s extends e {
|
|
10
10
|
constructor(e, s) {
|
|
11
|
-
super(
|
|
11
|
+
super("QyLogFileSaver_Worker", s = {
|
|
12
12
|
...r("QyLogFileSaver"),
|
|
13
13
|
...s
|
|
14
|
-
}, s, [], [ "switch", "save" ]);
|
|
14
|
+
}, s, [], [ "switch", "save" ], e);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
|
package/src/QyLogger.d.ts
CHANGED