@certik/skynet 0.10.43 → 0.10.45
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/CHANGELOG.md +4 -0
- package/indexer.js +88 -80
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/indexer.js
CHANGED
|
@@ -126,53 +126,71 @@ function createModeIndexerApp({
|
|
|
126
126
|
process.exit(0);
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
from = await finalState.getMinId(selectorFlags);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
inline.log(
|
|
134
|
-
`[MODE INDEXER] mode=${mode}, from=${from}, to=${
|
|
135
|
-
to ? to : "undefined"
|
|
136
|
-
}, env=${getEnvironment()}, ${toSelectorString(selectorFlags, ", ")}`
|
|
137
|
-
);
|
|
129
|
+
inline.log(`[MODE INDEXER] mode=${mode}, env=${getEnvironment()}, ${toSelectorString(selectorFlags, ", ")}`);
|
|
138
130
|
|
|
139
131
|
if (mode === "reset") {
|
|
140
132
|
await runReset(selectorFlags);
|
|
141
133
|
} else if (mode === "rebuild") {
|
|
134
|
+
const rebuildFrom = from || (await finalState.getMinId(selectorFlags));
|
|
135
|
+
const rebuildTo = to || (await finalState.getMaxId(selectorFlags));
|
|
136
|
+
|
|
142
137
|
await runReset(selectorFlags);
|
|
143
|
-
await runRebuild(selectorFlags,
|
|
138
|
+
await runRebuild(selectorFlags, rebuildFrom, rebuildTo, verbose);
|
|
144
139
|
} else if (mode === "resume-rebuild") {
|
|
145
140
|
const previousRebuildEnds = await getIndexerLatestId(name, selectorFlags);
|
|
146
141
|
|
|
147
|
-
|
|
148
|
-
selectorFlags
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
);
|
|
142
|
+
const rebuildFrom =
|
|
143
|
+
from || increaseId(finalState.type, previousRebuildEnds, 1) || (await finalState.getMinId(selectorFlags));
|
|
144
|
+
const rebuildTo = to || (await finalState.getMaxId(selectorFlags));
|
|
145
|
+
|
|
146
|
+
await runRebuild(selectorFlags, rebuildFrom, rebuildTo, verbose);
|
|
153
147
|
} else if (mode === "validate" || mode === "validation") {
|
|
154
148
|
const previousRebuildEnds = await getIndexerLatestId(name, selectorFlags);
|
|
155
149
|
|
|
150
|
+
if (!previousRebuildEnds) {
|
|
151
|
+
inline.log(`[MODE INDEXER] cannot validate without a successful rebuild`);
|
|
152
|
+
process.exit(0);
|
|
153
|
+
}
|
|
154
|
+
|
|
156
155
|
const previousValidatedTo = await getIndexerValidatedId(name, selectorFlags);
|
|
157
156
|
|
|
158
|
-
const
|
|
157
|
+
const validateFrom = from || previousValidatedTo || (await finalState.getMinId(selectorFlags));
|
|
158
|
+
const validateTo = to || previousRebuildEnds;
|
|
159
|
+
const shouldSaveState = !to; // should not save state for manual validations, those are for testing
|
|
159
160
|
|
|
160
|
-
await runValidate(
|
|
161
|
-
selectorFlags,
|
|
162
|
-
from ? from : previousValidatedTo,
|
|
163
|
-
to ? to : previousRebuildEnds,
|
|
164
|
-
shouldSaveState,
|
|
165
|
-
verbose
|
|
166
|
-
);
|
|
161
|
+
await runValidate(selectorFlags, validateFrom, validateTo, shouldSaveState, verbose);
|
|
167
162
|
} else if (mode === "one") {
|
|
168
163
|
if (to) {
|
|
169
164
|
inline.log("[MODE INDEXER] one mode ignores --to option. you may want to use range mode instead");
|
|
170
165
|
}
|
|
166
|
+
if (!from) {
|
|
167
|
+
inline.log(`[MODE INDEXER] must provide --from option for one mode`);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
171
|
await runRange(selectorFlags, from, from, verbose);
|
|
172
172
|
} else if (mode === "range") {
|
|
173
|
+
if (!from || !to) {
|
|
174
|
+
inline.log(`[MODE INDEXER] must provide --from and --to option for range mode`);
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
|
|
173
178
|
await runRange(selectorFlags, from, to, verbose);
|
|
174
179
|
} else {
|
|
175
|
-
await
|
|
180
|
+
const stateItem = await getRecordByKey(STATE_TABLE_NAME, {
|
|
181
|
+
name: `${name}RebuildState(${toSelectorString(selectorFlags)})`,
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// only build when rebuild succeed
|
|
185
|
+
if (!stateItem || stateItem.value !== "succeed") {
|
|
186
|
+
inline.log("[MODE INDEXER] skip because rebuild hasn't done yet");
|
|
187
|
+
process.exit(0);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const deltaFrom = increaseId(finalState.type, await getIndexerLatestId(name, selectorFlags), 1);
|
|
191
|
+
const deltaTo = await state.getMaxId(selectorFlags);
|
|
192
|
+
|
|
193
|
+
await runDelta(selectorFlags, deltaFrom, deltaTo, verbose);
|
|
176
194
|
}
|
|
177
195
|
}
|
|
178
196
|
|
|
@@ -377,80 +395,70 @@ function createModeIndexerApp({
|
|
|
377
395
|
process.exit(1);
|
|
378
396
|
} else {
|
|
379
397
|
inline.log(
|
|
380
|
-
`[MODE INDEXER] built ${offsetRange(from, to)} ${finalState.type}(s) successfully in ${
|
|
398
|
+
`[MODE INDEXER] built ${offsetRange(from, to)} ${finalState.type}(s) successfully in ${
|
|
399
|
+
Date.now() - startTime
|
|
400
|
+
}ms`
|
|
381
401
|
);
|
|
382
402
|
process.exit(0);
|
|
383
403
|
}
|
|
384
404
|
}
|
|
385
405
|
|
|
386
|
-
async function runDelta(selectorFlags, verbose) {
|
|
387
|
-
const
|
|
388
|
-
name: `${name}RebuildState(${toSelectorString(selectorFlags)})`,
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
// only build when rebuild succeed
|
|
392
|
-
if (stateItem && stateItem.value === "succeed") {
|
|
393
|
-
const from = increaseId(await getIndexerLatestId(name, selectorFlags), 1);
|
|
394
|
-
|
|
395
|
-
const startTime = Date.now();
|
|
396
|
-
const to = await state.getMaxId(selectorFlags);
|
|
397
|
-
|
|
398
|
-
if (to <= from) {
|
|
399
|
-
inline.log(
|
|
400
|
-
`[MODE INDEXER] skip delta because there're no items need to be processed, ${toSelectorString(
|
|
401
|
-
selectorFlags,
|
|
402
|
-
", "
|
|
403
|
-
)}`
|
|
404
|
-
);
|
|
405
|
-
|
|
406
|
-
return;
|
|
407
|
-
}
|
|
406
|
+
async function runDelta(selectorFlags, from, to, verbose) {
|
|
407
|
+
const startTime = Date.now();
|
|
408
408
|
|
|
409
|
+
if (to < from) {
|
|
409
410
|
inline.log(
|
|
410
|
-
`[MODE INDEXER]
|
|
411
|
+
`[MODE INDEXER] skip delta, there're no more items need to be processed, from=${from}, to=${to}, ${toSelectorString(
|
|
411
412
|
selectorFlags,
|
|
412
413
|
", "
|
|
413
|
-
)}
|
|
414
|
+
)}`
|
|
414
415
|
);
|
|
415
416
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
if (failedIds.length > 0) {
|
|
420
|
-
inline.log("[MODE INDEXER] built with some failed txs", failedIds);
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
421
419
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
420
|
+
inline.log(
|
|
421
|
+
`[MODE INDEXER] starting delta, from=${from}, to=${to}, ${toSelectorString(
|
|
422
|
+
selectorFlags,
|
|
423
|
+
", "
|
|
424
|
+
)}, batchSize=${buildBatchSize}, concurrency=${buildConcurrency}`
|
|
425
|
+
);
|
|
426
426
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
value: Math.min(to, failedIds[0]),
|
|
430
|
-
});
|
|
427
|
+
try {
|
|
428
|
+
const failedIds = await execBuild(selectorFlags, from, to, verbose, true);
|
|
431
429
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
await createRecord(STATE_TABLE_NAME, {
|
|
435
|
-
name: `${name}DeltaState(${toSelectorString(selectorFlags)})`,
|
|
436
|
-
value: "succeed",
|
|
437
|
-
});
|
|
430
|
+
if (failedIds.length > 0) {
|
|
431
|
+
inline.log("[MODE INDEXER] built with some failed txs", failedIds);
|
|
438
432
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
433
|
+
await createRecord(STATE_TABLE_NAME, {
|
|
434
|
+
name: `${name}DeltaState(${toSelectorString(selectorFlags)})`,
|
|
435
|
+
value: "failed",
|
|
436
|
+
});
|
|
443
437
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
inline.error("[MODE INDEXER] delta build failed", from, to, err);
|
|
438
|
+
await createRecord(STATE_TABLE_NAME, {
|
|
439
|
+
name: `${name}Since(${toSelectorString(selectorFlags)})`,
|
|
440
|
+
value: Math.min(to, failedIds[0]),
|
|
441
|
+
});
|
|
449
442
|
|
|
450
443
|
process.exit(1);
|
|
444
|
+
} else {
|
|
445
|
+
await createRecord(STATE_TABLE_NAME, {
|
|
446
|
+
name: `${name}DeltaState(${toSelectorString(selectorFlags)})`,
|
|
447
|
+
value: "succeed",
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
await createRecord(STATE_TABLE_NAME, {
|
|
451
|
+
name: `${name}Since(${toSelectorString(selectorFlags)})`,
|
|
452
|
+
value: to,
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
inline.log(`[MODE INDEXER] built successfully in ${Date.now() - startTime}ms`);
|
|
456
|
+
process.exit(0);
|
|
451
457
|
}
|
|
452
|
-
}
|
|
453
|
-
inline.
|
|
458
|
+
} catch (err) {
|
|
459
|
+
inline.error("[MODE INDEXER] delta build failed", from, to, err);
|
|
460
|
+
|
|
461
|
+
process.exit(1);
|
|
454
462
|
}
|
|
455
463
|
}
|
|
456
464
|
|