envio 3.2.1 → 3.3.0-alpha.0
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/package.json +6 -7
- package/src/Batch.res +12 -15
- package/src/Batch.res.mjs +4 -5
- package/src/BatchProcessing.res +199 -0
- package/src/BatchProcessing.res.mjs +125 -0
- package/src/ChainFetching.res +375 -0
- package/src/ChainFetching.res.mjs +206 -0
- package/src/ChainMetadata.res +27 -0
- package/src/ChainMetadata.res.mjs +27 -0
- package/src/ChainState.res +618 -0
- package/src/ChainState.res.mjs +461 -0
- package/src/ChainState.resi +85 -0
- package/src/Config.res +13 -4
- package/src/Config.res.mjs +8 -3
- package/src/ContractRegisterContext.res +106 -0
- package/src/ContractRegisterContext.res.mjs +76 -0
- package/src/Core.res +3 -0
- package/src/CrossChainState.res +269 -0
- package/src/CrossChainState.res.mjs +197 -0
- package/src/CrossChainState.resi +47 -0
- package/src/Ecosystem.res +58 -0
- package/src/Ecosystem.res.mjs +43 -1
- package/src/Env.res +7 -2
- package/src/Env.res.mjs +5 -2
- package/src/EventConfigBuilder.res +2 -2
- package/src/EventProcessing.res +60 -46
- package/src/EventProcessing.res.mjs +33 -32
- package/src/EventUtils.res +0 -4
- package/src/EventUtils.res.mjs +0 -4
- package/src/ExitOnCaughtUp.res +10 -0
- package/src/ExitOnCaughtUp.res.mjs +22 -0
- package/src/FetchState.res +124 -62
- package/src/FetchState.res.mjs +159 -93
- package/src/InMemoryStore.res +36 -451
- package/src/InMemoryStore.res.mjs +20 -369
- package/src/IndexerLoop.res +44 -0
- package/src/IndexerLoop.res.mjs +46 -0
- package/src/IndexerState.res +544 -0
- package/src/IndexerState.res.mjs +547 -0
- package/src/IndexerState.resi +132 -0
- package/src/Internal.res +29 -8
- package/src/LoadLayer.res +20 -18
- package/src/LoadLayer.res.mjs +14 -12
- package/src/LoadLayer.resi +6 -3
- package/src/Logging.res +11 -44
- package/src/Logging.res.mjs +10 -42
- package/src/Main.res +54 -79
- package/src/Main.res.mjs +44 -56
- package/src/PgStorage.res +8 -71
- package/src/PgStorage.res.mjs +3 -47
- package/src/Prometheus.res +7 -8
- package/src/Prometheus.res.mjs +7 -4
- package/src/PruneStaleHistory.res +45 -0
- package/src/PruneStaleHistory.res.mjs +46 -0
- package/src/RawEvent.res +73 -0
- package/src/RawEvent.res.mjs +51 -0
- package/src/Rollback.res +204 -0
- package/src/Rollback.res.mjs +118 -0
- package/src/SimulateItems.res +12 -10
- package/src/SimulateItems.res.mjs +1 -1
- package/src/UserContext.res +26 -114
- package/src/UserContext.res.mjs +15 -78
- package/src/Writing.res +242 -0
- package/src/Writing.res.mjs +215 -0
- package/src/db/InternalTable.res +14 -27
- package/src/sources/Evm.res +40 -1
- package/src/sources/Evm.res.mjs +94 -84
- package/src/sources/Fuel.res +40 -1
- package/src/sources/Fuel.res.mjs +36 -26
- package/src/sources/HyperFuel.res +41 -120
- package/src/sources/HyperFuel.res.mjs +42 -80
- package/src/sources/HyperFuel.resi +1 -24
- package/src/sources/HyperFuelClient.res +16 -297
- package/src/sources/HyperFuelClient.res.mjs +5 -4
- package/src/sources/HyperFuelSource.res +33 -8
- package/src/sources/HyperFuelSource.res.mjs +56 -10
- package/src/sources/HyperSyncSource.res +5 -3
- package/src/sources/HyperSyncSource.res.mjs +1 -1
- package/src/sources/RpcSource.res +2 -2
- package/src/sources/RpcSource.res.mjs +1 -1
- package/src/sources/SourceManager.res +8 -18
- package/src/sources/SourceManager.res.mjs +8 -5
- package/src/sources/SourceManager.resi +4 -1
- package/src/sources/Svm.res +18 -1
- package/src/sources/Svm.res.mjs +30 -22
- package/src/sources/SvmHyperSyncSource.res +1 -1
- package/src/sources/SvmHyperSyncSource.res.mjs +1 -1
- package/src/tui/Tui.res +38 -36
- package/src/tui/Tui.res.mjs +51 -51
- package/src/ChainFetcher.res +0 -519
- package/src/ChainFetcher.res.mjs +0 -314
- package/src/ChainManager.res +0 -358
- package/src/ChainManager.res.mjs +0 -291
- package/src/Ctx.res +0 -6
- package/src/Ctx.res.mjs +0 -2
- package/src/GlobalState.res +0 -1056
- package/src/GlobalState.res.mjs +0 -1086
- package/src/GlobalStateManager.res +0 -57
- package/src/GlobalStateManager.res.mjs +0 -68
- package/src/GlobalStateManager.resi +0 -7
- package/src/Ports.res +0 -5
- package/src/Ports.res.mjs +0 -9
- package/src/adapters/MarkBatchProcessedAdapter.res +0 -5
- package/src/adapters/MarkBatchProcessedAdapter.res.mjs +0 -14
- package/src/sources/EnvioApiClient.res +0 -15
- package/src/sources/EnvioApiClient.res.mjs +0 -24
package/src/GlobalState.res.mjs
DELETED
|
@@ -1,1086 +0,0 @@
|
|
|
1
|
-
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
-
|
|
3
|
-
import * as Env from "./Env.res.mjs";
|
|
4
|
-
import * as Utils from "./Utils.res.mjs";
|
|
5
|
-
import * as Config from "./Config.res.mjs";
|
|
6
|
-
import * as Hrtime from "./bindings/Hrtime.res.mjs";
|
|
7
|
-
import * as Logging from "./Logging.res.mjs";
|
|
8
|
-
import * as Process from "process";
|
|
9
|
-
import * as ChainMap from "./ChainMap.res.mjs";
|
|
10
|
-
import * as Throttler from "./Throttler.res.mjs";
|
|
11
|
-
import * as FetchState from "./FetchState.res.mjs";
|
|
12
|
-
import * as Prometheus from "./Prometheus.res.mjs";
|
|
13
|
-
import * as LoadManager from "./LoadManager.res.mjs";
|
|
14
|
-
import * as Stdlib_Null from "@rescript/runtime/lib/es6/Stdlib_Null.js";
|
|
15
|
-
import * as ChainFetcher from "./ChainFetcher.res.mjs";
|
|
16
|
-
import * as ChainManager from "./ChainManager.res.mjs";
|
|
17
|
-
import * as Stdlib_Float from "@rescript/runtime/lib/es6/Stdlib_Float.js";
|
|
18
|
-
import * as ErrorHandling from "./ErrorHandling.res.mjs";
|
|
19
|
-
import * as InMemoryStore from "./InMemoryStore.res.mjs";
|
|
20
|
-
import * as Primitive_int from "@rescript/runtime/lib/es6/Primitive_int.js";
|
|
21
|
-
import * as SourceManager from "./sources/SourceManager.res.mjs";
|
|
22
|
-
import * as Stdlib_Option from "@rescript/runtime/lib/es6/Stdlib_Option.js";
|
|
23
|
-
import * as ReorgDetection from "./ReorgDetection.res.mjs";
|
|
24
|
-
import * as Stdlib_JsError from "@rescript/runtime/lib/es6/Stdlib_JsError.js";
|
|
25
|
-
import * as EventProcessing from "./EventProcessing.res.mjs";
|
|
26
|
-
import * as Primitive_object from "@rescript/runtime/lib/es6/Primitive_object.js";
|
|
27
|
-
import * as S$RescriptSchema from "rescript-schema/src/S.res.mjs";
|
|
28
|
-
import * as Primitive_exceptions from "@rescript/runtime/lib/es6/Primitive_exceptions.js";
|
|
29
|
-
import * as SafeCheckpointTracking from "./SafeCheckpointTracking.res.mjs";
|
|
30
|
-
|
|
31
|
-
function make() {
|
|
32
|
-
let intervalMillis = Env.ThrottleWrites.pruneStaleDataIntervalMillis;
|
|
33
|
-
let logger = Logging.createChild({
|
|
34
|
-
context: "Throttler for pruning stale entity history data",
|
|
35
|
-
intervalMillis: intervalMillis
|
|
36
|
-
});
|
|
37
|
-
let pruneStaleEntityHistory = Throttler.make(intervalMillis, logger);
|
|
38
|
-
return {
|
|
39
|
-
pruneStaleEntityHistory: pruneStaleEntityHistory
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
let WriteThrottlers = {
|
|
44
|
-
make: make
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
function make$1(ctx, chainManager, isDevelopmentModeOpt, shouldUseTuiOpt, exitAfterFirstEventBlockOpt, onError) {
|
|
48
|
-
let isDevelopmentMode = isDevelopmentModeOpt !== undefined ? isDevelopmentModeOpt : false;
|
|
49
|
-
let shouldUseTui = shouldUseTuiOpt !== undefined ? shouldUseTuiOpt : false;
|
|
50
|
-
let exitAfterFirstEventBlock = exitAfterFirstEventBlockOpt !== undefined ? exitAfterFirstEventBlockOpt : false;
|
|
51
|
-
return {
|
|
52
|
-
ctx: ctx,
|
|
53
|
-
chainManager: chainManager,
|
|
54
|
-
rollbackState: "NoRollback",
|
|
55
|
-
indexerStartTime: new Date(),
|
|
56
|
-
writeThrottlers: make(),
|
|
57
|
-
loadManager: LoadManager.make(),
|
|
58
|
-
keepProcessAlive: isDevelopmentMode || shouldUseTui,
|
|
59
|
-
exitAfterFirstEventBlock: exitAfterFirstEventBlock,
|
|
60
|
-
onError: onError,
|
|
61
|
-
id: 0
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function getId(self) {
|
|
66
|
-
return self.id;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function setChainManager(self, chainManager) {
|
|
70
|
-
return {
|
|
71
|
-
ctx: self.ctx,
|
|
72
|
-
chainManager: chainManager,
|
|
73
|
-
rollbackState: self.rollbackState,
|
|
74
|
-
indexerStartTime: self.indexerStartTime,
|
|
75
|
-
writeThrottlers: self.writeThrottlers,
|
|
76
|
-
loadManager: self.loadManager,
|
|
77
|
-
keepProcessAlive: self.keepProcessAlive,
|
|
78
|
-
exitAfterFirstEventBlock: self.exitAfterFirstEventBlock,
|
|
79
|
-
onError: self.onError,
|
|
80
|
-
id: self.id
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function isPreparingRollback(state) {
|
|
85
|
-
let match = state.rollbackState;
|
|
86
|
-
if (typeof match !== "object") {
|
|
87
|
-
return match !== "NoRollback";
|
|
88
|
-
} else {
|
|
89
|
-
return match.TAG !== "RollbackReady";
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function updateChainMetadataTable(cm, inMemoryStore) {
|
|
94
|
-
let chainsData = {};
|
|
95
|
-
ChainMap.values(cm.chainFetchers).forEach(cf => {
|
|
96
|
-
chainsData[cf.chainConfig.id.toString()] = {
|
|
97
|
-
first_event_block: Stdlib_Null.fromOption(cf.fetchState.firstEventBlock),
|
|
98
|
-
buffer_block: FetchState.bufferBlockNumber(cf.fetchState),
|
|
99
|
-
ready_at: Stdlib_Null.fromOption(cf.timestampCaughtUpToHeadOrEndblock),
|
|
100
|
-
_is_hyper_sync: SourceManager.getActiveSource(cf.sourceManager).poweredByHyperSync
|
|
101
|
-
};
|
|
102
|
-
});
|
|
103
|
-
InMemoryStore.setChainMeta(inMemoryStore, chainsData);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function validatePartitionQueryResponse(state, partitionQueryResponse) {
|
|
107
|
-
let response = partitionQueryResponse.response;
|
|
108
|
-
let chain = partitionQueryResponse.chain;
|
|
109
|
-
let chainFetcher = ChainMap.get(state.chainManager.chainFetchers, chain);
|
|
110
|
-
let stats = response.stats;
|
|
111
|
-
let knownHeight = response.knownHeight;
|
|
112
|
-
if (knownHeight > chainFetcher.fetchState.knownHeight) {
|
|
113
|
-
Prometheus.SourceHeight.set(SourceManager.getActiveSource(chainFetcher.sourceManager).name, chainFetcher.chainConfig.id, knownHeight);
|
|
114
|
-
}
|
|
115
|
-
Prometheus.FetchingBlockRange.increment(chain, stats["total time elapsed (s)"], Stdlib_Option.getOr(stats["parsing time (s)"], 0), response.parsedQueueItems.length, (response.latestFetchedBlockNumber - response.fromBlockQueried | 0) + 1 | 0);
|
|
116
|
-
let match = ReorgDetection.registerReorgGuard(chainFetcher.reorgDetection, response.blockHashes, knownHeight);
|
|
117
|
-
let reorgResult = match[1];
|
|
118
|
-
let updatedChainFetcher_logger = chainFetcher.logger;
|
|
119
|
-
let updatedChainFetcher_fetchState = chainFetcher.fetchState;
|
|
120
|
-
let updatedChainFetcher_sourceManager = chainFetcher.sourceManager;
|
|
121
|
-
let updatedChainFetcher_chainConfig = chainFetcher.chainConfig;
|
|
122
|
-
let updatedChainFetcher_isProgressAtHead = chainFetcher.isProgressAtHead;
|
|
123
|
-
let updatedChainFetcher_timestampCaughtUpToHeadOrEndblock = chainFetcher.timestampCaughtUpToHeadOrEndblock;
|
|
124
|
-
let updatedChainFetcher_committedProgressBlockNumber = chainFetcher.committedProgressBlockNumber;
|
|
125
|
-
let updatedChainFetcher_numEventsProcessed = chainFetcher.numEventsProcessed;
|
|
126
|
-
let updatedChainFetcher_reorgDetection = match[0];
|
|
127
|
-
let updatedChainFetcher_safeCheckpointTracking = chainFetcher.safeCheckpointTracking;
|
|
128
|
-
let updatedChainFetcher = {
|
|
129
|
-
logger: updatedChainFetcher_logger,
|
|
130
|
-
fetchState: updatedChainFetcher_fetchState,
|
|
131
|
-
sourceManager: updatedChainFetcher_sourceManager,
|
|
132
|
-
chainConfig: updatedChainFetcher_chainConfig,
|
|
133
|
-
isProgressAtHead: updatedChainFetcher_isProgressAtHead,
|
|
134
|
-
timestampCaughtUpToHeadOrEndblock: updatedChainFetcher_timestampCaughtUpToHeadOrEndblock,
|
|
135
|
-
committedProgressBlockNumber: updatedChainFetcher_committedProgressBlockNumber,
|
|
136
|
-
numEventsProcessed: updatedChainFetcher_numEventsProcessed,
|
|
137
|
-
reorgDetection: updatedChainFetcher_reorgDetection,
|
|
138
|
-
safeCheckpointTracking: updatedChainFetcher_safeCheckpointTracking
|
|
139
|
-
};
|
|
140
|
-
let init = state.chainManager;
|
|
141
|
-
let nextState_ctx = state.ctx;
|
|
142
|
-
let nextState_chainManager = {
|
|
143
|
-
chainFetchers: ChainMap.set(state.chainManager.chainFetchers, chain, updatedChainFetcher),
|
|
144
|
-
isInReorgThreshold: init.isInReorgThreshold,
|
|
145
|
-
isRealtime: init.isRealtime
|
|
146
|
-
};
|
|
147
|
-
let nextState_rollbackState = state.rollbackState;
|
|
148
|
-
let nextState_indexerStartTime = state.indexerStartTime;
|
|
149
|
-
let nextState_writeThrottlers = state.writeThrottlers;
|
|
150
|
-
let nextState_loadManager = state.loadManager;
|
|
151
|
-
let nextState_keepProcessAlive = state.keepProcessAlive;
|
|
152
|
-
let nextState_exitAfterFirstEventBlock = state.exitAfterFirstEventBlock;
|
|
153
|
-
let nextState_onError = state.onError;
|
|
154
|
-
let nextState_id = state.id;
|
|
155
|
-
let nextState = {
|
|
156
|
-
ctx: nextState_ctx,
|
|
157
|
-
chainManager: nextState_chainManager,
|
|
158
|
-
rollbackState: nextState_rollbackState,
|
|
159
|
-
indexerStartTime: nextState_indexerStartTime,
|
|
160
|
-
writeThrottlers: nextState_writeThrottlers,
|
|
161
|
-
loadManager: nextState_loadManager,
|
|
162
|
-
keepProcessAlive: nextState_keepProcessAlive,
|
|
163
|
-
exitAfterFirstEventBlock: nextState_exitAfterFirstEventBlock,
|
|
164
|
-
onError: nextState_onError,
|
|
165
|
-
id: nextState_id
|
|
166
|
-
};
|
|
167
|
-
let rollbackWithReorgDetectedBlockNumber;
|
|
168
|
-
if (typeof reorgResult !== "object") {
|
|
169
|
-
rollbackWithReorgDetectedBlockNumber = undefined;
|
|
170
|
-
} else {
|
|
171
|
-
let reorgDetected = reorgResult._0;
|
|
172
|
-
Logging.childInfo(chainFetcher.logger, ReorgDetection.reorgDetectedToLogParams(reorgDetected, state.ctx.config.shouldRollbackOnReorg));
|
|
173
|
-
Prometheus.ReorgCount.increment(chain);
|
|
174
|
-
Prometheus.ReorgDetectionBlockNumber.set(reorgDetected.scannedBlock.blockNumber, chain);
|
|
175
|
-
rollbackWithReorgDetectedBlockNumber = state.ctx.config.shouldRollbackOnReorg ? reorgDetected.scannedBlock.blockNumber : undefined;
|
|
176
|
-
}
|
|
177
|
-
if (rollbackWithReorgDetectedBlockNumber === undefined) {
|
|
178
|
-
return [
|
|
179
|
-
nextState,
|
|
180
|
-
[{
|
|
181
|
-
TAG: "ProcessPartitionQueryResponse",
|
|
182
|
-
_0: partitionQueryResponse
|
|
183
|
-
}]
|
|
184
|
-
];
|
|
185
|
-
}
|
|
186
|
-
let match$1 = state.rollbackState;
|
|
187
|
-
let chainManager;
|
|
188
|
-
if (typeof match$1 !== "object" || match$1.TAG !== "RollbackReady") {
|
|
189
|
-
chainManager = state.chainManager;
|
|
190
|
-
} else {
|
|
191
|
-
let eventsProcessedDiffByChain = match$1.eventsProcessedDiffByChain;
|
|
192
|
-
let init$1 = state.chainManager;
|
|
193
|
-
chainManager = {
|
|
194
|
-
chainFetchers: ChainMap.mapWithKey(state.chainManager.chainFetchers, (c, chainFetcher) => {
|
|
195
|
-
let eventsProcessedDiff = eventsProcessedDiffByChain[c];
|
|
196
|
-
if (eventsProcessedDiff !== undefined) {
|
|
197
|
-
return {
|
|
198
|
-
logger: chainFetcher.logger,
|
|
199
|
-
fetchState: chainFetcher.fetchState,
|
|
200
|
-
sourceManager: chainFetcher.sourceManager,
|
|
201
|
-
chainConfig: chainFetcher.chainConfig,
|
|
202
|
-
isProgressAtHead: chainFetcher.isProgressAtHead,
|
|
203
|
-
timestampCaughtUpToHeadOrEndblock: chainFetcher.timestampCaughtUpToHeadOrEndblock,
|
|
204
|
-
committedProgressBlockNumber: chainFetcher.committedProgressBlockNumber,
|
|
205
|
-
numEventsProcessed: chainFetcher.numEventsProcessed + eventsProcessedDiff,
|
|
206
|
-
reorgDetection: chainFetcher.reorgDetection,
|
|
207
|
-
safeCheckpointTracking: chainFetcher.safeCheckpointTracking
|
|
208
|
-
};
|
|
209
|
-
} else {
|
|
210
|
-
return chainFetcher;
|
|
211
|
-
}
|
|
212
|
-
}),
|
|
213
|
-
isInReorgThreshold: init$1.isInReorgThreshold,
|
|
214
|
-
isRealtime: init$1.isRealtime
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
return [
|
|
218
|
-
{
|
|
219
|
-
ctx: nextState_ctx,
|
|
220
|
-
chainManager: {
|
|
221
|
-
chainFetchers: ChainMap.map(chainManager.chainFetchers, chainFetcher => ({
|
|
222
|
-
logger: chainFetcher.logger,
|
|
223
|
-
fetchState: FetchState.resetPendingQueries(chainFetcher.fetchState),
|
|
224
|
-
sourceManager: chainFetcher.sourceManager,
|
|
225
|
-
chainConfig: chainFetcher.chainConfig,
|
|
226
|
-
isProgressAtHead: chainFetcher.isProgressAtHead,
|
|
227
|
-
timestampCaughtUpToHeadOrEndblock: chainFetcher.timestampCaughtUpToHeadOrEndblock,
|
|
228
|
-
committedProgressBlockNumber: chainFetcher.committedProgressBlockNumber,
|
|
229
|
-
numEventsProcessed: chainFetcher.numEventsProcessed,
|
|
230
|
-
reorgDetection: chainFetcher.reorgDetection,
|
|
231
|
-
safeCheckpointTracking: chainFetcher.safeCheckpointTracking
|
|
232
|
-
})),
|
|
233
|
-
isInReorgThreshold: chainManager.isInReorgThreshold,
|
|
234
|
-
isRealtime: chainManager.isRealtime
|
|
235
|
-
},
|
|
236
|
-
rollbackState: {
|
|
237
|
-
TAG: "ReorgDetected",
|
|
238
|
-
chain: chain,
|
|
239
|
-
blockNumber: rollbackWithReorgDetectedBlockNumber
|
|
240
|
-
},
|
|
241
|
-
indexerStartTime: nextState_indexerStartTime,
|
|
242
|
-
writeThrottlers: nextState_writeThrottlers,
|
|
243
|
-
loadManager: nextState_loadManager,
|
|
244
|
-
keepProcessAlive: nextState_keepProcessAlive,
|
|
245
|
-
exitAfterFirstEventBlock: nextState_exitAfterFirstEventBlock,
|
|
246
|
-
onError: nextState_onError,
|
|
247
|
-
id: nextState_id + 1 | 0
|
|
248
|
-
},
|
|
249
|
-
["Rollback"]
|
|
250
|
-
];
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
function submitPartitionQueryResponse(state, newItems, newItemsWithDcs, knownHeight, latestFetchedBlock, query, chain) {
|
|
254
|
-
let chainFetcher = ChainMap.get(state.chainManager.chainFetchers, chain);
|
|
255
|
-
let updatedChainFetcher = ChainFetcher.handleQueryResult(chainFetcher, query, newItems, newItemsWithDcs, latestFetchedBlock, knownHeight);
|
|
256
|
-
let updatedChainFetcher$1;
|
|
257
|
-
if (state.exitAfterFirstEventBlock && newItems.length !== 0) {
|
|
258
|
-
let firstEventBlock = newItems[0].blockNumber;
|
|
259
|
-
let currentEndBlock = updatedChainFetcher.fetchState.endBlock;
|
|
260
|
-
if (currentEndBlock !== undefined) {
|
|
261
|
-
if (firstEventBlock < currentEndBlock) {
|
|
262
|
-
let init = updatedChainFetcher.fetchState;
|
|
263
|
-
updatedChainFetcher$1 = {
|
|
264
|
-
logger: updatedChainFetcher.logger,
|
|
265
|
-
fetchState: {
|
|
266
|
-
optimizedPartitions: init.optimizedPartitions,
|
|
267
|
-
startBlock: init.startBlock,
|
|
268
|
-
endBlock: firstEventBlock,
|
|
269
|
-
normalSelection: init.normalSelection,
|
|
270
|
-
indexingAddresses: init.indexingAddresses,
|
|
271
|
-
contractConfigs: init.contractConfigs,
|
|
272
|
-
chainId: init.chainId,
|
|
273
|
-
latestOnBlockBlockNumber: init.latestOnBlockBlockNumber,
|
|
274
|
-
blockLag: init.blockLag,
|
|
275
|
-
buffer: init.buffer,
|
|
276
|
-
targetBufferSize: init.targetBufferSize,
|
|
277
|
-
onBlockConfigs: init.onBlockConfigs,
|
|
278
|
-
knownHeight: init.knownHeight,
|
|
279
|
-
firstEventBlock: init.firstEventBlock
|
|
280
|
-
},
|
|
281
|
-
sourceManager: updatedChainFetcher.sourceManager,
|
|
282
|
-
chainConfig: updatedChainFetcher.chainConfig,
|
|
283
|
-
isProgressAtHead: updatedChainFetcher.isProgressAtHead,
|
|
284
|
-
timestampCaughtUpToHeadOrEndblock: updatedChainFetcher.timestampCaughtUpToHeadOrEndblock,
|
|
285
|
-
committedProgressBlockNumber: updatedChainFetcher.committedProgressBlockNumber,
|
|
286
|
-
numEventsProcessed: updatedChainFetcher.numEventsProcessed,
|
|
287
|
-
reorgDetection: updatedChainFetcher.reorgDetection,
|
|
288
|
-
safeCheckpointTracking: updatedChainFetcher.safeCheckpointTracking
|
|
289
|
-
};
|
|
290
|
-
} else {
|
|
291
|
-
updatedChainFetcher$1 = updatedChainFetcher;
|
|
292
|
-
}
|
|
293
|
-
} else {
|
|
294
|
-
let init$1 = updatedChainFetcher.fetchState;
|
|
295
|
-
updatedChainFetcher$1 = {
|
|
296
|
-
logger: updatedChainFetcher.logger,
|
|
297
|
-
fetchState: {
|
|
298
|
-
optimizedPartitions: init$1.optimizedPartitions,
|
|
299
|
-
startBlock: init$1.startBlock,
|
|
300
|
-
endBlock: firstEventBlock,
|
|
301
|
-
normalSelection: init$1.normalSelection,
|
|
302
|
-
indexingAddresses: init$1.indexingAddresses,
|
|
303
|
-
contractConfigs: init$1.contractConfigs,
|
|
304
|
-
chainId: init$1.chainId,
|
|
305
|
-
latestOnBlockBlockNumber: init$1.latestOnBlockBlockNumber,
|
|
306
|
-
blockLag: init$1.blockLag,
|
|
307
|
-
buffer: init$1.buffer,
|
|
308
|
-
targetBufferSize: init$1.targetBufferSize,
|
|
309
|
-
onBlockConfigs: init$1.onBlockConfigs,
|
|
310
|
-
knownHeight: init$1.knownHeight,
|
|
311
|
-
firstEventBlock: init$1.firstEventBlock
|
|
312
|
-
},
|
|
313
|
-
sourceManager: updatedChainFetcher.sourceManager,
|
|
314
|
-
chainConfig: updatedChainFetcher.chainConfig,
|
|
315
|
-
isProgressAtHead: updatedChainFetcher.isProgressAtHead,
|
|
316
|
-
timestampCaughtUpToHeadOrEndblock: updatedChainFetcher.timestampCaughtUpToHeadOrEndblock,
|
|
317
|
-
committedProgressBlockNumber: updatedChainFetcher.committedProgressBlockNumber,
|
|
318
|
-
numEventsProcessed: updatedChainFetcher.numEventsProcessed,
|
|
319
|
-
reorgDetection: updatedChainFetcher.reorgDetection,
|
|
320
|
-
safeCheckpointTracking: updatedChainFetcher.safeCheckpointTracking
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
} else {
|
|
324
|
-
updatedChainFetcher$1 = updatedChainFetcher;
|
|
325
|
-
}
|
|
326
|
-
if (!chainFetcher.isProgressAtHead && updatedChainFetcher$1.isProgressAtHead) {
|
|
327
|
-
Logging.childInfo(updatedChainFetcher$1.logger, "All events have been fetched");
|
|
328
|
-
}
|
|
329
|
-
let init$2 = state.chainManager;
|
|
330
|
-
let nextState_ctx = state.ctx;
|
|
331
|
-
let nextState_chainManager = {
|
|
332
|
-
chainFetchers: ChainMap.set(state.chainManager.chainFetchers, chain, updatedChainFetcher$1),
|
|
333
|
-
isInReorgThreshold: init$2.isInReorgThreshold,
|
|
334
|
-
isRealtime: init$2.isRealtime
|
|
335
|
-
};
|
|
336
|
-
let nextState_rollbackState = state.rollbackState;
|
|
337
|
-
let nextState_indexerStartTime = state.indexerStartTime;
|
|
338
|
-
let nextState_writeThrottlers = state.writeThrottlers;
|
|
339
|
-
let nextState_loadManager = state.loadManager;
|
|
340
|
-
let nextState_keepProcessAlive = state.keepProcessAlive;
|
|
341
|
-
let nextState_exitAfterFirstEventBlock = state.exitAfterFirstEventBlock;
|
|
342
|
-
let nextState_onError = state.onError;
|
|
343
|
-
let nextState_id = state.id;
|
|
344
|
-
let nextState = {
|
|
345
|
-
ctx: nextState_ctx,
|
|
346
|
-
chainManager: nextState_chainManager,
|
|
347
|
-
rollbackState: nextState_rollbackState,
|
|
348
|
-
indexerStartTime: nextState_indexerStartTime,
|
|
349
|
-
writeThrottlers: nextState_writeThrottlers,
|
|
350
|
-
loadManager: nextState_loadManager,
|
|
351
|
-
keepProcessAlive: nextState_keepProcessAlive,
|
|
352
|
-
exitAfterFirstEventBlock: nextState_exitAfterFirstEventBlock,
|
|
353
|
-
onError: nextState_onError,
|
|
354
|
-
id: nextState_id
|
|
355
|
-
};
|
|
356
|
-
return [
|
|
357
|
-
nextState,
|
|
358
|
-
[
|
|
359
|
-
{
|
|
360
|
-
TAG: "UpdateChainMetaDataAndCheckForExit",
|
|
361
|
-
_0: "NoExit"
|
|
362
|
-
},
|
|
363
|
-
"ProcessEventBatch",
|
|
364
|
-
{
|
|
365
|
-
TAG: "NextQuery",
|
|
366
|
-
_0: {
|
|
367
|
-
TAG: "Chain",
|
|
368
|
-
_0: chain
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
]
|
|
372
|
-
];
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
async function processPartitionQueryResponse(state, param, dispatchAction) {
|
|
376
|
-
let response = param.response;
|
|
377
|
-
let parsedQueueItems = response.parsedQueueItems;
|
|
378
|
-
let itemsWithContractRegister = [];
|
|
379
|
-
let newItems = [];
|
|
380
|
-
for (let idx = 0, idx_finish = parsedQueueItems.length; idx < idx_finish; ++idx) {
|
|
381
|
-
let item = parsedQueueItems[idx];
|
|
382
|
-
if (item.eventConfig.contractRegister !== undefined) {
|
|
383
|
-
itemsWithContractRegister.push(item);
|
|
384
|
-
}
|
|
385
|
-
newItems.push(item);
|
|
386
|
-
}
|
|
387
|
-
let newItemsWithDcs = itemsWithContractRegister.length !== 0 ? await ChainFetcher.runContractRegistersOrThrow(itemsWithContractRegister, state.ctx.config) : itemsWithContractRegister;
|
|
388
|
-
return dispatchAction({
|
|
389
|
-
TAG: "SubmitPartitionQueryResponse",
|
|
390
|
-
newItems: newItems,
|
|
391
|
-
newItemsWithDcs: newItemsWithDcs,
|
|
392
|
-
knownHeight: response.knownHeight,
|
|
393
|
-
latestFetchedBlock: {
|
|
394
|
-
blockNumber: response.latestFetchedBlockNumber,
|
|
395
|
-
blockTimestamp: response.latestFetchedBlockTimestamp
|
|
396
|
-
},
|
|
397
|
-
query: param.query,
|
|
398
|
-
chain: param.chain
|
|
399
|
-
});
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
function updateChainFetcher(chainFetcherUpdate, state, chain) {
|
|
403
|
-
let init = state.chainManager;
|
|
404
|
-
return [
|
|
405
|
-
{
|
|
406
|
-
ctx: state.ctx,
|
|
407
|
-
chainManager: {
|
|
408
|
-
chainFetchers: ChainMap.update(state.chainManager.chainFetchers, chain, chainFetcherUpdate),
|
|
409
|
-
isInReorgThreshold: init.isInReorgThreshold,
|
|
410
|
-
isRealtime: init.isRealtime
|
|
411
|
-
},
|
|
412
|
-
rollbackState: state.rollbackState,
|
|
413
|
-
indexerStartTime: state.indexerStartTime,
|
|
414
|
-
writeThrottlers: state.writeThrottlers,
|
|
415
|
-
loadManager: state.loadManager,
|
|
416
|
-
keepProcessAlive: state.keepProcessAlive,
|
|
417
|
-
exitAfterFirstEventBlock: state.exitAfterFirstEventBlock,
|
|
418
|
-
onError: state.onError,
|
|
419
|
-
id: state.id
|
|
420
|
-
},
|
|
421
|
-
[]
|
|
422
|
-
];
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
function onEnterReorgThreshold(state) {
|
|
426
|
-
Logging.info("Reorg threshold reached");
|
|
427
|
-
Prometheus.ReorgThreshold.set(true);
|
|
428
|
-
let chainFetchers = ChainMap.map(state.chainManager.chainFetchers, chainFetcher => ({
|
|
429
|
-
logger: chainFetcher.logger,
|
|
430
|
-
fetchState: FetchState.updateInternal(chainFetcher.fetchState, undefined, undefined, undefined, chainFetcher.chainConfig.blockLag, undefined),
|
|
431
|
-
sourceManager: chainFetcher.sourceManager,
|
|
432
|
-
chainConfig: chainFetcher.chainConfig,
|
|
433
|
-
isProgressAtHead: chainFetcher.isProgressAtHead,
|
|
434
|
-
timestampCaughtUpToHeadOrEndblock: chainFetcher.timestampCaughtUpToHeadOrEndblock,
|
|
435
|
-
committedProgressBlockNumber: chainFetcher.committedProgressBlockNumber,
|
|
436
|
-
numEventsProcessed: chainFetcher.numEventsProcessed,
|
|
437
|
-
reorgDetection: chainFetcher.reorgDetection,
|
|
438
|
-
safeCheckpointTracking: chainFetcher.safeCheckpointTracking
|
|
439
|
-
}));
|
|
440
|
-
let init = state.chainManager;
|
|
441
|
-
return {
|
|
442
|
-
ctx: state.ctx,
|
|
443
|
-
chainManager: {
|
|
444
|
-
chainFetchers: chainFetchers,
|
|
445
|
-
isInReorgThreshold: true,
|
|
446
|
-
isRealtime: init.isRealtime
|
|
447
|
-
},
|
|
448
|
-
rollbackState: state.rollbackState,
|
|
449
|
-
indexerStartTime: state.indexerStartTime,
|
|
450
|
-
writeThrottlers: state.writeThrottlers,
|
|
451
|
-
loadManager: state.loadManager,
|
|
452
|
-
keepProcessAlive: state.keepProcessAlive,
|
|
453
|
-
exitAfterFirstEventBlock: state.exitAfterFirstEventBlock,
|
|
454
|
-
onError: state.onError,
|
|
455
|
-
id: state.id
|
|
456
|
-
};
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
function injectedActionReducer(markBatchProcessed) {
|
|
460
|
-
return (state, action) => {
|
|
461
|
-
if (typeof action !== "object") {
|
|
462
|
-
switch (action) {
|
|
463
|
-
case "StartFindingReorgDepth" :
|
|
464
|
-
return [
|
|
465
|
-
{
|
|
466
|
-
ctx: state.ctx,
|
|
467
|
-
chainManager: state.chainManager,
|
|
468
|
-
rollbackState: "FindingReorgDepth",
|
|
469
|
-
indexerStartTime: state.indexerStartTime,
|
|
470
|
-
writeThrottlers: state.writeThrottlers,
|
|
471
|
-
loadManager: state.loadManager,
|
|
472
|
-
keepProcessAlive: state.keepProcessAlive,
|
|
473
|
-
exitAfterFirstEventBlock: state.exitAfterFirstEventBlock,
|
|
474
|
-
onError: state.onError,
|
|
475
|
-
id: state.id
|
|
476
|
-
},
|
|
477
|
-
[]
|
|
478
|
-
];
|
|
479
|
-
case "EnterReorgThreshold" :
|
|
480
|
-
return [
|
|
481
|
-
onEnterReorgThreshold(state),
|
|
482
|
-
[{
|
|
483
|
-
TAG: "NextQuery",
|
|
484
|
-
_0: "CheckAllChains"
|
|
485
|
-
}]
|
|
486
|
-
];
|
|
487
|
-
case "SuccessExit" :
|
|
488
|
-
Logging.info("Exiting with success");
|
|
489
|
-
Process.exit(0);
|
|
490
|
-
return [
|
|
491
|
-
state,
|
|
492
|
-
[]
|
|
493
|
-
];
|
|
494
|
-
}
|
|
495
|
-
} else {
|
|
496
|
-
switch (action.TAG) {
|
|
497
|
-
case "ValidatePartitionQueryResponse" :
|
|
498
|
-
return validatePartitionQueryResponse(state, action._0);
|
|
499
|
-
case "SubmitPartitionQueryResponse" :
|
|
500
|
-
return submitPartitionQueryResponse(state, action.newItems, action.newItemsWithDcs, action.knownHeight, action.latestFetchedBlock, action.query, action.chain);
|
|
501
|
-
case "FinishWaitingForNewBlock" :
|
|
502
|
-
let knownHeight = action.knownHeight;
|
|
503
|
-
let chain = action.chain;
|
|
504
|
-
let updatedChainFetchers = ChainMap.update(state.chainManager.chainFetchers, chain, chainFetcher => {
|
|
505
|
-
let updatedFetchState = FetchState.updateKnownHeight(chainFetcher.fetchState, knownHeight);
|
|
506
|
-
if (updatedFetchState !== chainFetcher.fetchState) {
|
|
507
|
-
return {
|
|
508
|
-
logger: chainFetcher.logger,
|
|
509
|
-
fetchState: updatedFetchState,
|
|
510
|
-
sourceManager: chainFetcher.sourceManager,
|
|
511
|
-
chainConfig: chainFetcher.chainConfig,
|
|
512
|
-
isProgressAtHead: chainFetcher.isProgressAtHead,
|
|
513
|
-
timestampCaughtUpToHeadOrEndblock: chainFetcher.timestampCaughtUpToHeadOrEndblock,
|
|
514
|
-
committedProgressBlockNumber: chainFetcher.committedProgressBlockNumber,
|
|
515
|
-
numEventsProcessed: chainFetcher.numEventsProcessed,
|
|
516
|
-
reorgDetection: chainFetcher.reorgDetection,
|
|
517
|
-
safeCheckpointTracking: chainFetcher.safeCheckpointTracking
|
|
518
|
-
};
|
|
519
|
-
} else {
|
|
520
|
-
return chainFetcher;
|
|
521
|
-
}
|
|
522
|
-
});
|
|
523
|
-
let isBelowReorgThreshold = !state.chainManager.isInReorgThreshold && state.ctx.config.shouldRollbackOnReorg;
|
|
524
|
-
let shouldEnterReorgThreshold = isBelowReorgThreshold && ChainMap.values(updatedChainFetchers).every(chainFetcher => FetchState.isReadyToEnterReorgThreshold(chainFetcher.fetchState));
|
|
525
|
-
let init = state.chainManager;
|
|
526
|
-
let state_ctx = state.ctx;
|
|
527
|
-
let state_chainManager = {
|
|
528
|
-
chainFetchers: updatedChainFetchers,
|
|
529
|
-
isInReorgThreshold: init.isInReorgThreshold,
|
|
530
|
-
isRealtime: init.isRealtime
|
|
531
|
-
};
|
|
532
|
-
let state_rollbackState = state.rollbackState;
|
|
533
|
-
let state_indexerStartTime = state.indexerStartTime;
|
|
534
|
-
let state_writeThrottlers = state.writeThrottlers;
|
|
535
|
-
let state_loadManager = state.loadManager;
|
|
536
|
-
let state_keepProcessAlive = state.keepProcessAlive;
|
|
537
|
-
let state_exitAfterFirstEventBlock = state.exitAfterFirstEventBlock;
|
|
538
|
-
let state_onError = state.onError;
|
|
539
|
-
let state_id = state.id;
|
|
540
|
-
let state$1 = {
|
|
541
|
-
ctx: state_ctx,
|
|
542
|
-
chainManager: state_chainManager,
|
|
543
|
-
rollbackState: state_rollbackState,
|
|
544
|
-
indexerStartTime: state_indexerStartTime,
|
|
545
|
-
writeThrottlers: state_writeThrottlers,
|
|
546
|
-
loadManager: state_loadManager,
|
|
547
|
-
keepProcessAlive: state_keepProcessAlive,
|
|
548
|
-
exitAfterFirstEventBlock: state_exitAfterFirstEventBlock,
|
|
549
|
-
onError: state_onError,
|
|
550
|
-
id: state_id
|
|
551
|
-
};
|
|
552
|
-
if (shouldEnterReorgThreshold) {
|
|
553
|
-
return [
|
|
554
|
-
onEnterReorgThreshold(state$1),
|
|
555
|
-
[
|
|
556
|
-
{
|
|
557
|
-
TAG: "NextQuery",
|
|
558
|
-
_0: "CheckAllChains"
|
|
559
|
-
},
|
|
560
|
-
"ProcessEventBatch"
|
|
561
|
-
]
|
|
562
|
-
];
|
|
563
|
-
} else {
|
|
564
|
-
return [
|
|
565
|
-
state$1,
|
|
566
|
-
[
|
|
567
|
-
{
|
|
568
|
-
TAG: "NextQuery",
|
|
569
|
-
_0: {
|
|
570
|
-
TAG: "Chain",
|
|
571
|
-
_0: chain
|
|
572
|
-
}
|
|
573
|
-
},
|
|
574
|
-
"ProcessEventBatch"
|
|
575
|
-
]
|
|
576
|
-
];
|
|
577
|
-
}
|
|
578
|
-
case "EventBatchProcessed" :
|
|
579
|
-
let maybePruneEntityHistory = Config.shouldPruneHistory(state.ctx.config, state.chainManager.isInReorgThreshold) ? ["PruneStaleEntityHistory"] : [];
|
|
580
|
-
markBatchProcessed();
|
|
581
|
-
let state_ctx$1 = state.ctx;
|
|
582
|
-
let state_chainManager$1 = ChainManager.updateProgressedChains(state.chainManager, action.batch);
|
|
583
|
-
let state_indexerStartTime$1 = state.indexerStartTime;
|
|
584
|
-
let state_writeThrottlers$1 = state.writeThrottlers;
|
|
585
|
-
let state_loadManager$1 = state.loadManager;
|
|
586
|
-
let state_keepProcessAlive$1 = state.keepProcessAlive;
|
|
587
|
-
let state_exitAfterFirstEventBlock$1 = state.exitAfterFirstEventBlock;
|
|
588
|
-
let state_onError$1 = state.onError;
|
|
589
|
-
let state_id$1 = state.id;
|
|
590
|
-
let state$2 = {
|
|
591
|
-
ctx: state_ctx$1,
|
|
592
|
-
chainManager: state_chainManager$1,
|
|
593
|
-
rollbackState: "NoRollback",
|
|
594
|
-
indexerStartTime: state_indexerStartTime$1,
|
|
595
|
-
writeThrottlers: state_writeThrottlers$1,
|
|
596
|
-
loadManager: state_loadManager$1,
|
|
597
|
-
keepProcessAlive: state_keepProcessAlive$1,
|
|
598
|
-
exitAfterFirstEventBlock: state_exitAfterFirstEventBlock$1,
|
|
599
|
-
onError: state_onError$1,
|
|
600
|
-
id: state_id$1
|
|
601
|
-
};
|
|
602
|
-
let shouldExit = EventProcessing.allChainsEventsProcessedToEndblock(state_chainManager$1.chainFetchers) ? (Logging.info("All chains are caught up to end blocks."), state_keepProcessAlive$1 ? "NoExit" : "ExitWithSuccess") : (
|
|
603
|
-
state_exitAfterFirstEventBlock$1 && ChainMap.values(state_chainManager$1.chainFetchers).every(cf => {
|
|
604
|
-
if (cf.isProgressAtHead) {
|
|
605
|
-
return Stdlib_Option.isNone(cf.fetchState.endBlock);
|
|
606
|
-
} else {
|
|
607
|
-
return false;
|
|
608
|
-
}
|
|
609
|
-
}) ? ({
|
|
610
|
-
TAG: "ExitWithError",
|
|
611
|
-
_0: "No events found between startBlock and chain head. Cannot auto-detect endBlock."
|
|
612
|
-
}) : "NoExit"
|
|
613
|
-
);
|
|
614
|
-
let tasks;
|
|
615
|
-
tasks = typeof shouldExit !== "object" ? (
|
|
616
|
-
shouldExit === "ExitWithSuccess" ? [{
|
|
617
|
-
TAG: "UpdateChainMetaDataAndCheckForExit",
|
|
618
|
-
_0: shouldExit
|
|
619
|
-
}] : [
|
|
620
|
-
{
|
|
621
|
-
TAG: "UpdateChainMetaDataAndCheckForExit",
|
|
622
|
-
_0: shouldExit
|
|
623
|
-
},
|
|
624
|
-
"ProcessEventBatch"
|
|
625
|
-
].concat(maybePruneEntityHistory)
|
|
626
|
-
) : [{
|
|
627
|
-
TAG: "UpdateChainMetaDataAndCheckForExit",
|
|
628
|
-
_0: shouldExit
|
|
629
|
-
}];
|
|
630
|
-
return [
|
|
631
|
-
state$2,
|
|
632
|
-
tasks
|
|
633
|
-
];
|
|
634
|
-
case "FindReorgDepth" :
|
|
635
|
-
return [
|
|
636
|
-
{
|
|
637
|
-
ctx: state.ctx,
|
|
638
|
-
chainManager: state.chainManager,
|
|
639
|
-
rollbackState: {
|
|
640
|
-
TAG: "FoundReorgDepth",
|
|
641
|
-
chain: action.chain,
|
|
642
|
-
rollbackTargetBlockNumber: action.rollbackTargetBlockNumber
|
|
643
|
-
},
|
|
644
|
-
indexerStartTime: state.indexerStartTime,
|
|
645
|
-
writeThrottlers: state.writeThrottlers,
|
|
646
|
-
loadManager: state.loadManager,
|
|
647
|
-
keepProcessAlive: state.keepProcessAlive,
|
|
648
|
-
exitAfterFirstEventBlock: state.exitAfterFirstEventBlock,
|
|
649
|
-
onError: state.onError,
|
|
650
|
-
id: state.id
|
|
651
|
-
},
|
|
652
|
-
["Rollback"]
|
|
653
|
-
];
|
|
654
|
-
case "UpdateQueues" :
|
|
655
|
-
let shouldEnterReorgThreshold$1 = action.shouldEnterReorgThreshold;
|
|
656
|
-
let progressedChainsById = action.progressedChainsById;
|
|
657
|
-
let chainFetchers = ChainMap.mapWithKey(state.chainManager.chainFetchers, (chain, cf) => {
|
|
658
|
-
let chainAfterBatch = progressedChainsById[chain];
|
|
659
|
-
let fs = chainAfterBatch !== undefined ? chainAfterBatch.fetchState : cf.fetchState;
|
|
660
|
-
return {
|
|
661
|
-
logger: cf.logger,
|
|
662
|
-
fetchState: shouldEnterReorgThreshold$1 ? FetchState.updateInternal(fs, undefined, undefined, undefined, cf.chainConfig.blockLag, undefined) : fs,
|
|
663
|
-
sourceManager: cf.sourceManager,
|
|
664
|
-
chainConfig: cf.chainConfig,
|
|
665
|
-
isProgressAtHead: cf.isProgressAtHead,
|
|
666
|
-
timestampCaughtUpToHeadOrEndblock: cf.timestampCaughtUpToHeadOrEndblock,
|
|
667
|
-
committedProgressBlockNumber: cf.committedProgressBlockNumber,
|
|
668
|
-
numEventsProcessed: cf.numEventsProcessed,
|
|
669
|
-
reorgDetection: cf.reorgDetection,
|
|
670
|
-
safeCheckpointTracking: cf.safeCheckpointTracking
|
|
671
|
-
};
|
|
672
|
-
});
|
|
673
|
-
let init$1 = state.chainManager;
|
|
674
|
-
let chainManager_isInReorgThreshold = init$1.isInReorgThreshold;
|
|
675
|
-
let chainManager_isRealtime = init$1.isRealtime;
|
|
676
|
-
let chainManager = {
|
|
677
|
-
chainFetchers: chainFetchers,
|
|
678
|
-
isInReorgThreshold: chainManager_isInReorgThreshold,
|
|
679
|
-
isRealtime: chainManager_isRealtime
|
|
680
|
-
};
|
|
681
|
-
return [
|
|
682
|
-
{
|
|
683
|
-
ctx: state.ctx,
|
|
684
|
-
chainManager: chainManager,
|
|
685
|
-
rollbackState: state.rollbackState,
|
|
686
|
-
indexerStartTime: state.indexerStartTime,
|
|
687
|
-
writeThrottlers: state.writeThrottlers,
|
|
688
|
-
loadManager: state.loadManager,
|
|
689
|
-
keepProcessAlive: state.keepProcessAlive,
|
|
690
|
-
exitAfterFirstEventBlock: state.exitAfterFirstEventBlock,
|
|
691
|
-
onError: state.onError,
|
|
692
|
-
id: state.id
|
|
693
|
-
},
|
|
694
|
-
[{
|
|
695
|
-
TAG: "NextQuery",
|
|
696
|
-
_0: "CheckAllChains"
|
|
697
|
-
}]
|
|
698
|
-
];
|
|
699
|
-
case "ErrorExit" :
|
|
700
|
-
state.onError(action._0);
|
|
701
|
-
return [
|
|
702
|
-
state,
|
|
703
|
-
[]
|
|
704
|
-
];
|
|
705
|
-
case "SetRollbackState" :
|
|
706
|
-
return [
|
|
707
|
-
{
|
|
708
|
-
ctx: state.ctx,
|
|
709
|
-
chainManager: action.rollbackedChainManager,
|
|
710
|
-
rollbackState: {
|
|
711
|
-
TAG: "RollbackReady",
|
|
712
|
-
eventsProcessedDiffByChain: action.eventsProcessedDiffByChain
|
|
713
|
-
},
|
|
714
|
-
indexerStartTime: state.indexerStartTime,
|
|
715
|
-
writeThrottlers: state.writeThrottlers,
|
|
716
|
-
loadManager: state.loadManager,
|
|
717
|
-
keepProcessAlive: state.keepProcessAlive,
|
|
718
|
-
exitAfterFirstEventBlock: state.exitAfterFirstEventBlock,
|
|
719
|
-
onError: state.onError,
|
|
720
|
-
id: state.id
|
|
721
|
-
},
|
|
722
|
-
[
|
|
723
|
-
{
|
|
724
|
-
TAG: "NextQuery",
|
|
725
|
-
_0: "CheckAllChains"
|
|
726
|
-
},
|
|
727
|
-
"ProcessEventBatch"
|
|
728
|
-
]
|
|
729
|
-
];
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
};
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
function injectedInvalidatedActionReducer(markBatchProcessed, actionReducer) {
|
|
736
|
-
return (state, action) => {
|
|
737
|
-
if (typeof action === "object") {
|
|
738
|
-
switch (action.TAG) {
|
|
739
|
-
case "EventBatchProcessed" :
|
|
740
|
-
if (isPreparingRollback(state)) {
|
|
741
|
-
Logging.info("Finished processing batch before rollback, actioning rollback");
|
|
742
|
-
markBatchProcessed();
|
|
743
|
-
return [
|
|
744
|
-
{
|
|
745
|
-
ctx: state.ctx,
|
|
746
|
-
chainManager: ChainManager.updateProgressedChains(state.chainManager, action.batch),
|
|
747
|
-
rollbackState: state.rollbackState,
|
|
748
|
-
indexerStartTime: state.indexerStartTime,
|
|
749
|
-
writeThrottlers: state.writeThrottlers,
|
|
750
|
-
loadManager: state.loadManager,
|
|
751
|
-
keepProcessAlive: state.keepProcessAlive,
|
|
752
|
-
exitAfterFirstEventBlock: state.exitAfterFirstEventBlock,
|
|
753
|
-
onError: state.onError,
|
|
754
|
-
id: state.id
|
|
755
|
-
},
|
|
756
|
-
["Rollback"]
|
|
757
|
-
];
|
|
758
|
-
}
|
|
759
|
-
break;
|
|
760
|
-
case "ErrorExit" :
|
|
761
|
-
return actionReducer(state, action);
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
Logging.trace({
|
|
765
|
-
msg: "Invalidated action discarded",
|
|
766
|
-
action: S$RescriptSchema.convertOrThrow(action, Utils.Schema.variantTag)
|
|
767
|
-
});
|
|
768
|
-
return [
|
|
769
|
-
state,
|
|
770
|
-
[]
|
|
771
|
-
];
|
|
772
|
-
};
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
function checkAndFetchForChain(waitForNewBlock, executeQuery, state, dispatchAction) {
|
|
776
|
-
return async chain => {
|
|
777
|
-
let chainFetcher = ChainMap.get(state.chainManager.chainFetchers, chain);
|
|
778
|
-
if (isPreparingRollback(state)) {
|
|
779
|
-
return;
|
|
780
|
-
}
|
|
781
|
-
let fetchState = chainFetcher.fetchState;
|
|
782
|
-
let isRealtime = state.chainManager.isRealtime;
|
|
783
|
-
let reducedPolling = !isRealtime;
|
|
784
|
-
return await SourceManager.fetchNext(chainFetcher.sourceManager, fetchState, async query => {
|
|
785
|
-
try {
|
|
786
|
-
let response = await executeQuery(chainFetcher.sourceManager, query, fetchState.knownHeight, isRealtime);
|
|
787
|
-
return dispatchAction({
|
|
788
|
-
TAG: "ValidatePartitionQueryResponse",
|
|
789
|
-
_0: {
|
|
790
|
-
chain: chain,
|
|
791
|
-
response: response,
|
|
792
|
-
query: query
|
|
793
|
-
}
|
|
794
|
-
});
|
|
795
|
-
} catch (raw_exn) {
|
|
796
|
-
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
797
|
-
return dispatchAction({
|
|
798
|
-
TAG: "ErrorExit",
|
|
799
|
-
_0: ErrorHandling.make(exn, undefined, undefined)
|
|
800
|
-
});
|
|
801
|
-
}
|
|
802
|
-
}, knownHeight => waitForNewBlock(chainFetcher.sourceManager, knownHeight, isRealtime, reducedPolling), knownHeight => dispatchAction({
|
|
803
|
-
TAG: "FinishWaitingForNewBlock",
|
|
804
|
-
chain: chain,
|
|
805
|
-
knownHeight: knownHeight
|
|
806
|
-
}), state.id);
|
|
807
|
-
};
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
function injectedTaskReducer(waitForNewBlock, executeQuery, getLastKnownValidBlock) {
|
|
811
|
-
return async (state, task, dispatchAction) => {
|
|
812
|
-
if (typeof task !== "object") {
|
|
813
|
-
switch (task) {
|
|
814
|
-
case "ProcessEventBatch" :
|
|
815
|
-
if (state.ctx.inMemoryStore.isProcessing || isPreparingRollback(state)) {
|
|
816
|
-
return;
|
|
817
|
-
}
|
|
818
|
-
let match = state.rollbackState;
|
|
819
|
-
let isRollbackBatch;
|
|
820
|
-
isRollbackBatch = typeof match !== "object" ? false : match.TAG === "RollbackReady";
|
|
821
|
-
let batch = ChainManager.createBatch(state.chainManager, state.ctx.inMemoryStore.processedCheckpointId, state.ctx.config.batchSize, isRollbackBatch);
|
|
822
|
-
let progressedChainsById = batch.progressedChainsById;
|
|
823
|
-
let isBelowReorgThreshold = !state.chainManager.isInReorgThreshold && state.ctx.config.shouldRollbackOnReorg;
|
|
824
|
-
let shouldEnterReorgThreshold = isBelowReorgThreshold && ChainMap.values(state.chainManager.chainFetchers).every(chainFetcher => {
|
|
825
|
-
let chainAfterBatch = progressedChainsById[chainFetcher.fetchState.chainId];
|
|
826
|
-
return FetchState.isReadyToEnterReorgThreshold(chainAfterBatch !== undefined ? chainAfterBatch.fetchState : chainFetcher.fetchState);
|
|
827
|
-
});
|
|
828
|
-
if (shouldEnterReorgThreshold) {
|
|
829
|
-
dispatchAction("EnterReorgThreshold");
|
|
830
|
-
}
|
|
831
|
-
if (Utils.Dict.isEmpty(progressedChainsById)) {
|
|
832
|
-
if (EventProcessing.allChainsEventsProcessedToEndblock(state.chainManager.chainFetchers)) {
|
|
833
|
-
Logging.info("All chains are caught up to end blocks.");
|
|
834
|
-
if (!state.keepProcessAlive) {
|
|
835
|
-
updateChainMetadataTable(state.chainManager, state.ctx.inMemoryStore);
|
|
836
|
-
await InMemoryStore.flush(state.ctx.inMemoryStore);
|
|
837
|
-
return dispatchAction("SuccessExit");
|
|
838
|
-
} else {
|
|
839
|
-
return;
|
|
840
|
-
}
|
|
841
|
-
} else {
|
|
842
|
-
return;
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
let inMemoryStore = state.ctx.inMemoryStore;
|
|
846
|
-
inMemoryStore.isProcessing = true;
|
|
847
|
-
dispatchAction({
|
|
848
|
-
TAG: "UpdateQueues",
|
|
849
|
-
progressedChainsById: progressedChainsById,
|
|
850
|
-
shouldEnterReorgThreshold: shouldEnterReorgThreshold
|
|
851
|
-
});
|
|
852
|
-
InMemoryStore.setBatchDcs(inMemoryStore, batch);
|
|
853
|
-
let res;
|
|
854
|
-
try {
|
|
855
|
-
res = await EventProcessing.processEventBatch(batch, inMemoryStore, state.loadManager, state.ctx, state.chainManager.chainFetchers);
|
|
856
|
-
} catch (raw_exn) {
|
|
857
|
-
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
858
|
-
let errHandler = ErrorHandling.make(exn, undefined, "A top level unexpected error occurred during processing");
|
|
859
|
-
return dispatchAction({
|
|
860
|
-
TAG: "ErrorExit",
|
|
861
|
-
_0: errHandler
|
|
862
|
-
});
|
|
863
|
-
}
|
|
864
|
-
if (res.TAG === "Ok") {
|
|
865
|
-
return dispatchAction({
|
|
866
|
-
TAG: "EventBatchProcessed",
|
|
867
|
-
batch: batch
|
|
868
|
-
});
|
|
869
|
-
} else {
|
|
870
|
-
return dispatchAction({
|
|
871
|
-
TAG: "ErrorExit",
|
|
872
|
-
_0: res._0
|
|
873
|
-
});
|
|
874
|
-
}
|
|
875
|
-
break;
|
|
876
|
-
case "Rollback" :
|
|
877
|
-
let match$1 = state.rollbackState;
|
|
878
|
-
if (typeof match$1 !== "object") {
|
|
879
|
-
if (match$1 === "NoRollback") {
|
|
880
|
-
return Stdlib_JsError.throwWithMessage("Internal error: Rollback initiated with invalid state");
|
|
881
|
-
} else {
|
|
882
|
-
return;
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
switch (match$1.TAG) {
|
|
886
|
-
case "ReorgDetected" :
|
|
887
|
-
let chain = match$1.chain;
|
|
888
|
-
let chainFetcher = ChainMap.get(state.chainManager.chainFetchers, chain);
|
|
889
|
-
dispatchAction("StartFindingReorgDepth");
|
|
890
|
-
let rollbackTargetBlockNumber = await getLastKnownValidBlock(chainFetcher, match$1.blockNumber, state.chainManager.isRealtime);
|
|
891
|
-
SourceManager.onReorg(chainFetcher.sourceManager, rollbackTargetBlockNumber);
|
|
892
|
-
return dispatchAction({
|
|
893
|
-
TAG: "FindReorgDepth",
|
|
894
|
-
chain: chain,
|
|
895
|
-
rollbackTargetBlockNumber: rollbackTargetBlockNumber
|
|
896
|
-
});
|
|
897
|
-
case "FoundReorgDepth" :
|
|
898
|
-
let rollbackTargetBlockNumber$1 = match$1.rollbackTargetBlockNumber;
|
|
899
|
-
let reorgChain = match$1.chain;
|
|
900
|
-
if (state.ctx.inMemoryStore.isProcessing) {
|
|
901
|
-
return Logging.info("Waiting for batch to finish processing before executing rollback");
|
|
902
|
-
}
|
|
903
|
-
let startTime = Hrtime.makeTimer();
|
|
904
|
-
let chainFetcher$1 = ChainMap.get(state.chainManager.chainFetchers, reorgChain);
|
|
905
|
-
let logger = Logging.createChildFrom(chainFetcher$1.logger, {
|
|
906
|
-
action: "Rollback",
|
|
907
|
-
reorgChain: reorgChain,
|
|
908
|
-
targetBlockNumber: rollbackTargetBlockNumber$1
|
|
909
|
-
});
|
|
910
|
-
Logging.childInfo(logger, "Started rollback on reorg");
|
|
911
|
-
Prometheus.RollbackTargetBlockNumber.set(rollbackTargetBlockNumber$1, reorgChain);
|
|
912
|
-
await InMemoryStore.flush(state.ctx.inMemoryStore);
|
|
913
|
-
let checkpointId = await state.ctx.persistence.storage.getRollbackTargetCheckpoint(reorgChain, rollbackTargetBlockNumber$1);
|
|
914
|
-
let rollbackTargetCheckpointId = checkpointId !== undefined ? checkpointId : 0n;
|
|
915
|
-
let eventsProcessedDiffByChain = {};
|
|
916
|
-
let newProgressBlockNumberPerChain = {};
|
|
917
|
-
let rollbackedProcessedEvents = 0;
|
|
918
|
-
let rollbackProgressDiff = await state.ctx.persistence.storage.getRollbackProgressDiff(rollbackTargetCheckpointId);
|
|
919
|
-
for (let idx = 0, idx_finish = rollbackProgressDiff.length; idx < idx_finish; ++idx) {
|
|
920
|
-
let diff = rollbackProgressDiff[idx];
|
|
921
|
-
let eventsProcessedDiff = Stdlib_Option.getOrThrow(Stdlib_Float.fromString(diff.events_processed_diff), undefined);
|
|
922
|
-
rollbackedProcessedEvents = rollbackedProcessedEvents + eventsProcessedDiff;
|
|
923
|
-
eventsProcessedDiffByChain[diff.chain_id] = eventsProcessedDiff;
|
|
924
|
-
newProgressBlockNumberPerChain[diff.chain_id] = rollbackTargetCheckpointId === 0n && diff.chain_id === reorgChain ? Primitive_int.min(diff.new_progress_block_number, rollbackTargetBlockNumber$1) : diff.new_progress_block_number;
|
|
925
|
-
}
|
|
926
|
-
let chainFetchers = ChainMap.mapWithKey(state.chainManager.chainFetchers, (chain, cf) => {
|
|
927
|
-
let newProgressBlockNumber = newProgressBlockNumberPerChain[chain];
|
|
928
|
-
if (newProgressBlockNumber === undefined) {
|
|
929
|
-
if (Primitive_object.equal(chain, reorgChain)) {
|
|
930
|
-
return {
|
|
931
|
-
logger: cf.logger,
|
|
932
|
-
fetchState: FetchState.rollback(cf.fetchState, rollbackTargetBlockNumber$1),
|
|
933
|
-
sourceManager: cf.sourceManager,
|
|
934
|
-
chainConfig: cf.chainConfig,
|
|
935
|
-
isProgressAtHead: cf.isProgressAtHead,
|
|
936
|
-
timestampCaughtUpToHeadOrEndblock: cf.timestampCaughtUpToHeadOrEndblock,
|
|
937
|
-
committedProgressBlockNumber: Primitive_int.min(cf.committedProgressBlockNumber, rollbackTargetBlockNumber$1),
|
|
938
|
-
numEventsProcessed: cf.numEventsProcessed,
|
|
939
|
-
reorgDetection: ReorgDetection.rollbackToValidBlockNumber(cf.reorgDetection, rollbackTargetBlockNumber$1),
|
|
940
|
-
safeCheckpointTracking: cf.safeCheckpointTracking
|
|
941
|
-
};
|
|
942
|
-
} else {
|
|
943
|
-
return cf;
|
|
944
|
-
}
|
|
945
|
-
}
|
|
946
|
-
let fetchState = FetchState.rollback(cf.fetchState, newProgressBlockNumber);
|
|
947
|
-
let newTotalEventsProcessed = cf.numEventsProcessed - eventsProcessedDiffByChain[chain];
|
|
948
|
-
if (cf.committedProgressBlockNumber !== newProgressBlockNumber) {
|
|
949
|
-
Prometheus.ProgressBlockNumber.set(newProgressBlockNumber, chain);
|
|
950
|
-
}
|
|
951
|
-
if (cf.numEventsProcessed !== newTotalEventsProcessed) {
|
|
952
|
-
Prometheus.ProgressEventsCount.set(newTotalEventsProcessed, chain);
|
|
953
|
-
}
|
|
954
|
-
let safeCheckpointTracking = cf.safeCheckpointTracking;
|
|
955
|
-
return {
|
|
956
|
-
logger: cf.logger,
|
|
957
|
-
fetchState: fetchState,
|
|
958
|
-
sourceManager: cf.sourceManager,
|
|
959
|
-
chainConfig: cf.chainConfig,
|
|
960
|
-
isProgressAtHead: cf.isProgressAtHead,
|
|
961
|
-
timestampCaughtUpToHeadOrEndblock: cf.timestampCaughtUpToHeadOrEndblock,
|
|
962
|
-
committedProgressBlockNumber: newProgressBlockNumber,
|
|
963
|
-
numEventsProcessed: newTotalEventsProcessed,
|
|
964
|
-
reorgDetection: Primitive_object.equal(chain, reorgChain) ? ReorgDetection.rollbackToValidBlockNumber(cf.reorgDetection, rollbackTargetBlockNumber$1) : cf.reorgDetection,
|
|
965
|
-
safeCheckpointTracking: safeCheckpointTracking !== undefined ? SafeCheckpointTracking.rollback(safeCheckpointTracking, newProgressBlockNumber) : undefined
|
|
966
|
-
};
|
|
967
|
-
});
|
|
968
|
-
let diff$1 = await InMemoryStore.prepareRollbackDiff(state.ctx.inMemoryStore, state.ctx.persistence, rollbackTargetCheckpointId, state.ctx.inMemoryStore.committedCheckpointId + 1n, newProgressBlockNumberPerChain);
|
|
969
|
-
let init = state.chainManager;
|
|
970
|
-
let chainManager_isInReorgThreshold = init.isInReorgThreshold;
|
|
971
|
-
let chainManager_isRealtime = init.isRealtime;
|
|
972
|
-
let chainManager = {
|
|
973
|
-
chainFetchers: chainFetchers,
|
|
974
|
-
isInReorgThreshold: chainManager_isInReorgThreshold,
|
|
975
|
-
isRealtime: chainManager_isRealtime
|
|
976
|
-
};
|
|
977
|
-
Logging.childTrace(logger, {
|
|
978
|
-
msg: "Finished rollback on reorg",
|
|
979
|
-
entityChanges: {
|
|
980
|
-
deleted: diff$1.deletedEntities,
|
|
981
|
-
upserted: diff$1.setEntities
|
|
982
|
-
},
|
|
983
|
-
rollbackedEvents: rollbackedProcessedEvents,
|
|
984
|
-
beforeCheckpointId: state.ctx.inMemoryStore.committedCheckpointId,
|
|
985
|
-
targetCheckpointId: rollbackTargetCheckpointId
|
|
986
|
-
});
|
|
987
|
-
Prometheus.RollbackSuccess.increment(Hrtime.toSecondsFloat(Hrtime.timeSince(startTime)), rollbackedProcessedEvents);
|
|
988
|
-
return dispatchAction({
|
|
989
|
-
TAG: "SetRollbackState",
|
|
990
|
-
rollbackedChainManager: chainManager,
|
|
991
|
-
eventsProcessedDiffByChain: eventsProcessedDiffByChain
|
|
992
|
-
});
|
|
993
|
-
case "RollbackReady" :
|
|
994
|
-
return Stdlib_JsError.throwWithMessage("Internal error: Rollback initiated with invalid state");
|
|
995
|
-
}
|
|
996
|
-
case "PruneStaleEntityHistory" :
|
|
997
|
-
let runPrune = async () => {
|
|
998
|
-
let safeCheckpointId = ChainManager.getSafeCheckpointId(state.chainManager);
|
|
999
|
-
if (safeCheckpointId === undefined) {
|
|
1000
|
-
return;
|
|
1001
|
-
}
|
|
1002
|
-
await state.ctx.persistence.storage.pruneStaleCheckpoints(safeCheckpointId);
|
|
1003
|
-
for (let idx = 0, idx_finish = state.ctx.persistence.allEntities.length; idx < idx_finish; ++idx) {
|
|
1004
|
-
if (idx !== 0) {
|
|
1005
|
-
await Utils.delay(1000);
|
|
1006
|
-
}
|
|
1007
|
-
let entityConfig = state.ctx.persistence.allEntities[idx];
|
|
1008
|
-
let timeRef = Hrtime.makeTimer();
|
|
1009
|
-
try {
|
|
1010
|
-
await state.ctx.persistence.storage.pruneStaleEntityHistory(entityConfig.name, entityConfig.index, safeCheckpointId);
|
|
1011
|
-
} catch (raw_exn) {
|
|
1012
|
-
let exn = Primitive_exceptions.internalToException(raw_exn);
|
|
1013
|
-
ErrorHandling.mkLogAndRaise(Logging.createChild({
|
|
1014
|
-
entityName: entityConfig.name,
|
|
1015
|
-
safeCheckpointId: safeCheckpointId
|
|
1016
|
-
}), `Failed to prune stale entity history`, exn);
|
|
1017
|
-
}
|
|
1018
|
-
Prometheus.RollbackHistoryPrune.increment(Hrtime.toSecondsFloat(Hrtime.timeSince(timeRef)), entityConfig.name);
|
|
1019
|
-
}
|
|
1020
|
-
};
|
|
1021
|
-
return Throttler.schedule(state.writeThrottlers.pruneStaleEntityHistory, runPrune);
|
|
1022
|
-
}
|
|
1023
|
-
} else {
|
|
1024
|
-
switch (task.TAG) {
|
|
1025
|
-
case "NextQuery" :
|
|
1026
|
-
let chainCheck = task._0;
|
|
1027
|
-
let fetchForChain = checkAndFetchForChain(waitForNewBlock, executeQuery, state, dispatchAction);
|
|
1028
|
-
if (typeof chainCheck === "object") {
|
|
1029
|
-
return await fetchForChain(chainCheck._0);
|
|
1030
|
-
}
|
|
1031
|
-
await Promise.all(ChainMap.keys(state.chainManager.chainFetchers).map(__x => fetchForChain(__x)));
|
|
1032
|
-
return;
|
|
1033
|
-
case "ProcessPartitionQueryResponse" :
|
|
1034
|
-
processPartitionQueryResponse(state, task._0, dispatchAction);
|
|
1035
|
-
return;
|
|
1036
|
-
case "UpdateChainMetaDataAndCheckForExit" :
|
|
1037
|
-
let chainManager$1 = state.chainManager;
|
|
1038
|
-
let shouldExit = task._0;
|
|
1039
|
-
if (typeof shouldExit === "object") {
|
|
1040
|
-
return dispatchAction({
|
|
1041
|
-
TAG: "ErrorExit",
|
|
1042
|
-
_0: ErrorHandling.make(Stdlib_JsError.throwWithMessage(shouldExit._0), undefined, undefined)
|
|
1043
|
-
});
|
|
1044
|
-
}
|
|
1045
|
-
if (shouldExit !== "ExitWithSuccess") {
|
|
1046
|
-
return updateChainMetadataTable(chainManager$1, state.ctx.inMemoryStore);
|
|
1047
|
-
}
|
|
1048
|
-
updateChainMetadataTable(chainManager$1, state.ctx.inMemoryStore);
|
|
1049
|
-
await InMemoryStore.flush(state.ctx.inMemoryStore);
|
|
1050
|
-
return dispatchAction("SuccessExit");
|
|
1051
|
-
}
|
|
1052
|
-
}
|
|
1053
|
-
};
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
function makeReducers(waitForNewBlockOpt, executeQueryOpt, getLastKnownValidBlockOpt, markBatchProcessed) {
|
|
1057
|
-
let waitForNewBlock = waitForNewBlockOpt !== undefined ? waitForNewBlockOpt : SourceManager.waitForNewBlock;
|
|
1058
|
-
let executeQuery = executeQueryOpt !== undefined ? executeQueryOpt : SourceManager.executeQuery;
|
|
1059
|
-
let getLastKnownValidBlock = getLastKnownValidBlockOpt !== undefined ? getLastKnownValidBlockOpt : ChainFetcher.getLastKnownValidBlock;
|
|
1060
|
-
let actionReducer = injectedActionReducer(markBatchProcessed);
|
|
1061
|
-
return {
|
|
1062
|
-
actionReducer: actionReducer,
|
|
1063
|
-
invalidatedActionReducer: injectedInvalidatedActionReducer(markBatchProcessed, actionReducer),
|
|
1064
|
-
taskReducer: injectedTaskReducer(waitForNewBlock, executeQuery, getLastKnownValidBlock)
|
|
1065
|
-
};
|
|
1066
|
-
}
|
|
1067
|
-
|
|
1068
|
-
export {
|
|
1069
|
-
WriteThrottlers,
|
|
1070
|
-
make$1 as make,
|
|
1071
|
-
getId,
|
|
1072
|
-
setChainManager,
|
|
1073
|
-
isPreparingRollback,
|
|
1074
|
-
updateChainMetadataTable,
|
|
1075
|
-
validatePartitionQueryResponse,
|
|
1076
|
-
submitPartitionQueryResponse,
|
|
1077
|
-
processPartitionQueryResponse,
|
|
1078
|
-
updateChainFetcher,
|
|
1079
|
-
onEnterReorgThreshold,
|
|
1080
|
-
injectedActionReducer,
|
|
1081
|
-
injectedInvalidatedActionReducer,
|
|
1082
|
-
checkAndFetchForChain,
|
|
1083
|
-
injectedTaskReducer,
|
|
1084
|
-
makeReducers,
|
|
1085
|
-
}
|
|
1086
|
-
/* Env Not a pure module */
|