@subql/node-ethereum 2.0.1 → 2.0.2-1
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/dist/.tsbuildinfo +1 -1
- package/dist/configure/SubqueryProject.d.ts +2 -4
- package/dist/configure/SubqueryProject.js +17 -17
- package/dist/configure/SubqueryProject.js.map +1 -1
- package/dist/configure/configure.module.d.ts +1 -4
- package/dist/configure/configure.module.js +24 -71
- package/dist/configure/configure.module.js.map +1 -1
- package/dist/ethereum/api.ethereum.d.ts +8 -6
- package/dist/ethereum/api.ethereum.js +13 -6
- package/dist/ethereum/api.ethereum.js.map +1 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +1 -0
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
- package/dist/indexer/dictionary.service.js +1 -1
- package/dist/indexer/dictionary.service.js.map +1 -1
- package/dist/indexer/ds-processor.service.d.ts +4 -21
- package/dist/indexer/ds-processor.service.js +6 -97
- package/dist/indexer/ds-processor.service.js.map +1 -1
- package/dist/indexer/dynamic-ds.service.js +1 -1
- package/dist/indexer/dynamic-ds.service.js.map +1 -1
- package/dist/indexer/fetch.module.js +8 -1
- package/dist/indexer/fetch.module.js.map +1 -1
- package/dist/indexer/fetch.service.d.ts +18 -43
- package/dist/indexer/fetch.service.js +28 -286
- package/dist/indexer/fetch.service.js.map +1 -1
- package/dist/indexer/indexer.manager.d.ts +33 -18
- package/dist/indexer/indexer.manager.js +29 -164
- package/dist/indexer/indexer.manager.js.map +1 -1
- package/dist/indexer/indexer.module.js +0 -1
- package/dist/indexer/indexer.module.js.map +1 -1
- package/dist/indexer/project.service.d.ts +5 -35
- package/dist/indexer/project.service.js +6 -203
- package/dist/indexer/project.service.js.map +1 -1
- package/dist/indexer/sandbox.service.d.ts +6 -5
- package/dist/indexer/sandbox.service.js +14 -18
- package/dist/indexer/sandbox.service.js.map +1 -1
- package/dist/indexer/unfinalizedBlocks.service.d.ts +10 -33
- package/dist/indexer/unfinalizedBlocks.service.js +23 -166
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker/worker.d.ts +2 -1
- package/dist/indexer/worker/worker.js.map +1 -1
- package/dist/indexer/worker/worker.service.d.ts +2 -8
- package/dist/indexer/worker/worker.service.js +1 -3
- package/dist/indexer/worker/worker.service.js.map +1 -1
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +8 -5
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +10 -0
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -1
- package/dist/main.js +4 -1
- package/dist/main.js.map +1 -1
- package/dist/meta/meta.controller.d.ts +4 -6
- package/dist/meta/meta.module.js +1 -52
- package/dist/meta/meta.module.js.map +1 -1
- package/dist/meta/meta.service.d.ts +7 -40
- package/dist/meta/meta.service.js +9 -83
- package/dist/meta/meta.service.js.map +1 -1
- package/dist/subcommands/forceClean.init.js +1 -2
- package/dist/subcommands/forceClean.init.js.map +1 -1
- package/dist/subcommands/forceClean.module.js +2 -2
- package/dist/subcommands/forceClean.module.js.map +1 -1
- package/dist/subcommands/mmrMigrate.init.d.ts +2 -0
- package/dist/subcommands/mmrMigrate.init.js +28 -0
- package/dist/subcommands/mmrMigrate.init.js.map +1 -0
- package/dist/subcommands/mmrMigrate.module.d.ts +4 -0
- package/dist/subcommands/mmrMigrate.module.js +48 -0
- package/dist/subcommands/mmrMigrate.module.js.map +1 -0
- package/dist/subcommands/mmrRegenerate.init.d.ts +1 -0
- package/dist/subcommands/mmrRegenerate.init.js +27 -0
- package/dist/subcommands/mmrRegenerate.init.js.map +1 -0
- package/dist/subcommands/mmrRegenerate.module.d.ts +4 -0
- package/dist/subcommands/mmrRegenerate.module.js +46 -0
- package/dist/subcommands/mmrRegenerate.module.js.map +1 -0
- package/dist/subcommands/reindex.module.js +3 -2
- package/dist/subcommands/reindex.module.js.map +1 -1
- package/dist/subcommands/reindex.service.d.ts +1 -2
- package/dist/subcommands/reindex.service.js +5 -10
- package/dist/subcommands/reindex.service.js.map +1 -1
- package/dist/subcommands/testing.init.js.map +1 -1
- package/dist/subcommands/testing.module.js +1 -0
- package/dist/subcommands/testing.module.js.map +1 -1
- package/dist/subcommands/testing.service.d.ts +1 -1
- package/dist/subcommands/testing.service.js +0 -1
- package/dist/subcommands/testing.service.js.map +1 -1
- package/dist/utils/project.d.ts +4 -11
- package/dist/utils/project.js +9 -138
- package/dist/utils/project.js.map +1 -1
- package/dist/yargs.d.ts +90 -2
- package/dist/yargs.js +113 -0
- package/dist/yargs.js.map +1 -1
- package/package.json +11 -19
- package/dist/configure/configure.module.spec.d.ts +0 -1
- package/dist/configure/configure.module.spec.js +0 -26
- package/dist/configure/configure.module.spec.js.map +0 -1
- package/dist/indexer/unfinalizedBlocks.spec.d.ts +0 -1
- package/dist/indexer/unfinalizedBlocks.spec.js +0 -195
- package/dist/indexer/unfinalizedBlocks.spec.js.map +0 -1
- package/dist/subcommands/forceClean.service.d.ts +0 -10
- package/dist/subcommands/forceClean.service.js +0 -89
- package/dist/subcommands/forceClean.service.js.map +0 -1
- package/dist/utils/reindex.d.ts +0 -6
- package/dist/utils/reindex.js +0 -48
- package/dist/utils/reindex.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unfinalizedBlocks.spec.js","sourceRoot":"","sources":["../../src/indexer/unfinalizedBlocks.spec.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Block } from '@ethersproject/abstract-provider';\nimport {\n ApiService,\n CacheMetadataModel,\n StoreCacheService,\n} from '@subql/node-core';\nimport { EthereumBlock } from '@subql/types-ethereum';\nimport {\n METADATA_LAST_FINALIZED_PROCESSED_KEY,\n METADATA_UNFINALIZED_BLOCKS_KEY,\n UnfinalizedBlocksService,\n} from './unfinalizedBlocks.service';\n\n/* Notes:\n * Block hashes all have the format '0xabc' + block number\n * If they are forked they will have an `f` at the end\n */\n\nfunction mockApiService(): ApiService {\n const mockApi = {\n getFinalizedBlockHeight: jest.fn(() => 110),\n getRuntimeChain: jest.fn(() => 'ethereum'),\n getBlockByHeightOrHash: (heightOrHash: string | number): Block => {\n if (typeof heightOrHash === 'string') {\n const height = Number(\n heightOrHash.toString().replace('0xabc', '').replace('f', ''),\n );\n\n return {\n number: height,\n hash: heightOrHash,\n parentHash: `0xabc${height - 1}f`,\n } as unknown as Block;\n } else {\n const hash = `0xabc${heightOrHash}f`;\n return {\n number: heightOrHash,\n hash: hash,\n parentHash: `0xabc${heightOrHash - 1}f`,\n } as unknown as Block;\n }\n },\n };\n return {\n api: mockApi,\n } as any;\n}\n\nfunction getMockMetadata(): any {\n const data: Record<string, any> = {};\n return {\n upsert: ({ key, value }) => (data[key] = value),\n findOne: ({ where: { key } }) => ({ value: data[key] }),\n findByPk: (key: string) => data[key],\n } as any;\n}\n\nfunction mockStoreCache(): StoreCacheService {\n return {\n metadata: new CacheMetadataModel(getMockMetadata()),\n } as StoreCacheService;\n}\n\nfunction mockBlock(\n height: number,\n hash: string,\n parentHash?: string,\n): EthereumBlock {\n return {\n number: height,\n hash: hash,\n parentHash: parentHash,\n } as unknown as EthereumBlock;\n}\n\ndescribe('UnfinalizedBlocksService', () => {\n let apiService: ApiService;\n let unfinalizedBlocksService: UnfinalizedBlocksService;\n\n beforeEach(async () => {\n apiService = mockApiService();\n unfinalizedBlocksService = new UnfinalizedBlocksService(\n apiService,\n { unfinalizedBlocks: true } as any,\n mockStoreCache(),\n );\n\n await unfinalizedBlocksService.init(() => Promise.resolve());\n });\n\n afterEach(() => {\n (unfinalizedBlocksService as unknown as any).unfinalizedBlocks = {};\n });\n\n it('can set finalized block', () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n expect((unfinalizedBlocksService as any).finalizedBlockNumber).toBe(110);\n });\n\n it('cant set a lower finalized block', () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(99),\n );\n\n expect((unfinalizedBlocksService as any).finalizedBlockNumber).toBe(110);\n });\n\n it('keeps track of unfinalized blocks', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(111, '0xabc111'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(112, '0xabc112'),\n );\n\n expect((unfinalizedBlocksService as any).unfinalizedBlocks).toEqual([\n [111, '0xabc111'],\n [112, '0xabc112'],\n ]);\n });\n\n it('doesnt keep track of finalized blocks', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(120),\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(111, '0xabc111'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(112, '0xabc112'),\n );\n\n expect((unfinalizedBlocksService as any).unfinalizedBlocks).toEqual([]);\n });\n\n it('can process unfinalized blocks', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(111, '0xabc111'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(112, '0xabc112'),\n );\n\n unfinalizedBlocksService.registerFinalizedBlock(\n mockBlock(112, '0xabc112', '0xabc111') as unknown as Block,\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(113, '0xabc113'),\n );\n\n expect((unfinalizedBlocksService as any).unfinalizedBlocks).toEqual([\n [113, '0xabc113'],\n ]);\n });\n\n it('can handle a fork and rewind to the last finalized height', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(111, '0xabc111'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(112, '0xabc112'),\n );\n\n // Forked block\n unfinalizedBlocksService.registerFinalizedBlock(\n mockBlock(112, '0xabc112f', '0xabc111') as unknown as Block,\n );\n\n const res = await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(113, '0xabc113'),\n );\n\n // Last valid block\n expect(res).toBe(111);\n\n // After this the call stack is something like:\n // indexerManager -> blockDispatcher -> project -> project -> reindex -> blockDispatcher.resetUnfinalizedBlocks\n unfinalizedBlocksService.resetUnfinalizedBlocks();\n\n expect((unfinalizedBlocksService as any).unfinalizedBlocks).toEqual([]);\n });\n\n it('can handle a fork when some unfinalized blocks are invalid', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(111, '0xabc111'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(112, '0xabc112'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(113, '0xabc113'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(114, '0xabc114'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(115, '0xabc115'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(116, '0xabc116'),\n );\n\n // Forked block\n unfinalizedBlocksService.registerFinalizedBlock(\n mockBlock(113, '0xabc113f', '0xabc112') as unknown as Block,\n );\n\n const res = await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(117, '0xabc117'),\n );\n\n // Last valid block\n expect(res).toBe(112);\n });\n\n it('can handle a fork when all unfinalized blocks are invalid', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(111, '0xabc111'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(112, '0xabc112'),\n );\n\n // Forked block\n unfinalizedBlocksService.registerFinalizedBlock(\n mockBlock(111, '0xabc111f', '0xabc110') as unknown as Block,\n );\n\n const res = await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(113, '0xabc113'),\n );\n\n // Last valid block\n expect(res).toBe(110);\n });\n\n it('can handle a fork and when unfinalized blocks < finalized head', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(111, '0xabc111'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(112, '0xabc112'),\n );\n\n // Forked block\n unfinalizedBlocksService.registerFinalizedBlock(\n mockBlock(120, '0xabc120f', '0xabc119f') as unknown as Block,\n );\n\n const res = await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(113, '0xabc113'),\n );\n\n // Last valid block\n expect(res).toBe(110);\n });\n\n it('can handle a fork and when unfinalized blocks < finalized head 2', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n (unfinalizedBlocksService as any).lastCheckedBlockHeight = 110;\n\n await (unfinalizedBlocksService as any).registerUnfinalizedBlock(\n 111,\n '0xabc111',\n );\n await (unfinalizedBlocksService as any).registerUnfinalizedBlock(\n 112,\n '0xabc112',\n );\n\n // Forked block\n unfinalizedBlocksService.registerFinalizedBlock(\n mockBlock(120, '0xabc120f', '0xabc119f') as unknown as Block,\n );\n\n const res = await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(113, '0xabc113'),\n );\n\n // Last valid block\n expect(res).toBe(110);\n });\n\n it('can handle a fork and when unfinalized blocks < finalized head with a large difference', async () => {\n unfinalizedBlocksService.registerFinalizedBlock(\n apiService.api.getBlockByHeightOrHash(110),\n );\n\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(111, '0xabc111'),\n );\n await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(112, '0xabc112'),\n );\n\n // Forked block\n unfinalizedBlocksService.registerFinalizedBlock(\n mockBlock(1200, '0xabc1200f', '0xabc1199f') as unknown as Block,\n );\n\n const res = await unfinalizedBlocksService.processUnfinalizedBlocks(\n mockBlock(113, '0xabc113'),\n );\n\n // Last valid block\n expect(res).toBe(110);\n });\n\n it('can rewind any unfinalized blocks when restarted and unfinalized blocks is disabled', async () => {\n const metadata = getMockMetadata();\n\n metadata.upsert({\n key: METADATA_UNFINALIZED_BLOCKS_KEY,\n value: JSON.stringify([\n [90, '0xabcd'],\n [91, '0xabc91'],\n [92, '0xabc92'],\n ]),\n });\n\n metadata.upsert({\n key: METADATA_LAST_FINALIZED_PROCESSED_KEY,\n value: 90,\n });\n\n const unfinalizedBlocksService2 = new UnfinalizedBlocksService(\n apiService,\n { unfinalizedBlocks: false } as any,\n {\n transaction: () => Promise.resolve({ commit: () => undefined }),\n } as any,\n );\n\n const reindex = jest.fn().mockReturnValue(Promise.resolve());\n\n await unfinalizedBlocksService2.init(reindex);\n\n expect(reindex).toBeCalledWith(90);\n expect((unfinalizedBlocksService2 as any).lastCheckedBlockHeight).toBe(90);\n });\n});\n"]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { NodeConfig } from '@subql/node-core';
|
|
2
|
-
import { Sequelize } from 'sequelize';
|
|
3
|
-
import { SubqueryProject } from '../configure/SubqueryProject';
|
|
4
|
-
export declare class ForceCleanService {
|
|
5
|
-
private readonly sequelize;
|
|
6
|
-
private readonly nodeConfig;
|
|
7
|
-
protected project: SubqueryProject;
|
|
8
|
-
constructor(sequelize: Sequelize, nodeConfig: NodeConfig, project: SubqueryProject);
|
|
9
|
-
forceClean(): Promise<void>;
|
|
10
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
-
};
|
|
10
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
12
|
-
};
|
|
13
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
14
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
15
|
-
};
|
|
16
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
-
};
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.ForceCleanService = void 0;
|
|
21
|
-
const fs_1 = __importDefault(require("fs"));
|
|
22
|
-
const common_1 = require("@nestjs/common");
|
|
23
|
-
const node_core_1 = require("@subql/node-core");
|
|
24
|
-
const utils_1 = require("@subql/utils");
|
|
25
|
-
const sequelize_1 = require("sequelize");
|
|
26
|
-
const SubqueryProject_1 = require("../configure/SubqueryProject");
|
|
27
|
-
const logger = (0, node_core_1.getLogger)('Force-clean');
|
|
28
|
-
let ForceCleanService = class ForceCleanService {
|
|
29
|
-
constructor(sequelize, nodeConfig, project) {
|
|
30
|
-
this.sequelize = sequelize;
|
|
31
|
-
this.nodeConfig = nodeConfig;
|
|
32
|
-
this.project = project;
|
|
33
|
-
}
|
|
34
|
-
async forceClean() {
|
|
35
|
-
const schema = await (0, node_core_1.getExistingProjectSchema)(this.nodeConfig, this.sequelize);
|
|
36
|
-
if (!schema) {
|
|
37
|
-
logger.error('Unable to locate schema');
|
|
38
|
-
throw new Error('Schema does not exist.');
|
|
39
|
-
}
|
|
40
|
-
const modelsRelation = (0, utils_1.getAllEntitiesRelations)(this.project.schema);
|
|
41
|
-
try {
|
|
42
|
-
// drop existing project schema and metadata table
|
|
43
|
-
await this.sequelize.dropSchema(`"${schema}"`, {
|
|
44
|
-
logging: false,
|
|
45
|
-
benchmark: false,
|
|
46
|
-
});
|
|
47
|
-
// TODO, remove this soon, once original enum are cleaned
|
|
48
|
-
// Deprecate, now enums are moved under schema, drop schema will remove project enums
|
|
49
|
-
await Promise.all(modelsRelation.enums.map(async (e) => {
|
|
50
|
-
const enumTypeNameDeprecated = `${schema}_enum_${(0, node_core_1.enumNameToHash)(e.name)}`;
|
|
51
|
-
const resultsDeprecated = await (0, node_core_1.getEnumDeprecated)(this.sequelize, enumTypeNameDeprecated);
|
|
52
|
-
if (resultsDeprecated.length !== 0) {
|
|
53
|
-
await this.sequelize.query(`
|
|
54
|
-
DROP TYPE "${enumTypeNameDeprecated}";
|
|
55
|
-
`);
|
|
56
|
-
}
|
|
57
|
-
}));
|
|
58
|
-
// remove schema from subquery table (might not exist)
|
|
59
|
-
const checker = await this.sequelize.query(`
|
|
60
|
-
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'public' AND TABLE_NAME = 'subqueries'`);
|
|
61
|
-
if (checker[1].rowCount > 0) {
|
|
62
|
-
await this.sequelize.query(` DELETE
|
|
63
|
-
FROM public.subqueries
|
|
64
|
-
WHERE name = :name`, {
|
|
65
|
-
replacements: { name: this.nodeConfig.subqueryName },
|
|
66
|
-
type: sequelize_1.QueryTypes.DELETE,
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
logger.info('force cleaned schema and tables');
|
|
70
|
-
if (fs_1.default.existsSync(this.nodeConfig.mmrPath)) {
|
|
71
|
-
await fs_1.default.promises.unlink(this.nodeConfig.mmrPath);
|
|
72
|
-
logger.info('force cleaned file based mmr');
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch (err) {
|
|
76
|
-
logger.error(err, 'failed to force clean');
|
|
77
|
-
throw err;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
ForceCleanService = __decorate([
|
|
82
|
-
(0, common_1.Injectable)(),
|
|
83
|
-
__param(2, (0, common_1.Inject)('ISubqueryProject')),
|
|
84
|
-
__metadata("design:paramtypes", [sequelize_1.Sequelize,
|
|
85
|
-
node_core_1.NodeConfig,
|
|
86
|
-
SubqueryProject_1.SubqueryProject])
|
|
87
|
-
], ForceCleanService);
|
|
88
|
-
exports.ForceCleanService = ForceCleanService;
|
|
89
|
-
//# sourceMappingURL=forceClean.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"forceClean.service.js","sourceRoot":"","sources":["../../src/subcommands/forceClean.service.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport fs from 'fs';\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n getLogger,\n NodeConfig,\n getExistingProjectSchema,\n enumNameToHash,\n getEnumDeprecated,\n} from '@subql/node-core';\nimport { getAllEntitiesRelations } from '@subql/utils';\nimport { QueryTypes, Sequelize } from 'sequelize';\nimport { SubqueryProject } from '../configure/SubqueryProject';\n\nconst logger = getLogger('Force-clean');\n\n@Injectable()\nexport class ForceCleanService {\n constructor(\n private readonly sequelize: Sequelize,\n private readonly nodeConfig: NodeConfig,\n @Inject('ISubqueryProject') protected project: SubqueryProject,\n ) {}\n\n async forceClean(): Promise<void> {\n const schema = await getExistingProjectSchema(\n this.nodeConfig,\n this.sequelize,\n );\n if (!schema) {\n logger.error('Unable to locate schema');\n throw new Error('Schema does not exist.');\n }\n const modelsRelation = getAllEntitiesRelations(this.project.schema);\n\n try {\n // drop existing project schema and metadata table\n await this.sequelize.dropSchema(`\"${schema}\"`, {\n logging: false,\n benchmark: false,\n });\n\n // TODO, remove this soon, once original enum are cleaned\n // Deprecate, now enums are moved under schema, drop schema will remove project enums\n await Promise.all(\n modelsRelation.enums.map(async (e) => {\n const enumTypeNameDeprecated = `${schema}_enum_${enumNameToHash(\n e.name,\n )}`;\n const resultsDeprecated = await getEnumDeprecated(\n this.sequelize,\n enumTypeNameDeprecated,\n );\n if (resultsDeprecated.length !== 0) {\n await this.sequelize.query(`\n DROP TYPE \"${enumTypeNameDeprecated}\";\n `);\n }\n }),\n );\n\n // remove schema from subquery table (might not exist)\n const checker = await this.sequelize.query(\n `\n SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'public' AND TABLE_NAME = 'subqueries'`,\n );\n\n if ((checker[1] as any).rowCount > 0) {\n await this.sequelize.query(\n ` DELETE\n FROM public.subqueries\n WHERE name = :name`,\n {\n replacements: { name: this.nodeConfig.subqueryName },\n type: QueryTypes.DELETE,\n },\n );\n }\n\n logger.info('force cleaned schema and tables');\n\n if (fs.existsSync(this.nodeConfig.mmrPath)) {\n await fs.promises.unlink(this.nodeConfig.mmrPath);\n logger.info('force cleaned file based mmr');\n }\n } catch (err) {\n logger.error(err, 'failed to force clean');\n throw err;\n }\n }\n}\n"]}
|
package/dist/utils/reindex.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { MmrService, StoreService } from '@subql/node-core';
|
|
2
|
-
import { Sequelize } from 'sequelize';
|
|
3
|
-
import { DynamicDsService } from '../indexer/dynamic-ds.service';
|
|
4
|
-
import { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service';
|
|
5
|
-
import { ForceCleanService } from '../subcommands/forceClean.service';
|
|
6
|
-
export declare function reindex(startHeight: number, blockOffset: number | undefined, targetBlockHeight: number, lastProcessedHeight: number, storeService: StoreService, unfinalizedBlockService: UnfinalizedBlocksService, dynamicDsService: DynamicDsService, mmrService: MmrService, sequelize: Sequelize, forceCleanService?: ForceCleanService): Promise<void>;
|
package/dist/utils/reindex.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.reindex = void 0;
|
|
6
|
-
const node_core_1 = require("@subql/node-core");
|
|
7
|
-
const logger = (0, node_core_1.getLogger)('Reindex');
|
|
8
|
-
async function reindex(startHeight, blockOffset, targetBlockHeight, lastProcessedHeight, storeService, unfinalizedBlockService, dynamicDsService, mmrService, sequelize, forceCleanService) {
|
|
9
|
-
if (!lastProcessedHeight || lastProcessedHeight < targetBlockHeight) {
|
|
10
|
-
logger.warn(`Skipping reindexing to block ${targetBlockHeight}: current indexing height ${lastProcessedHeight} is behind requested block`);
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
// if startHeight is greater than the targetHeight, just force clean
|
|
14
|
-
if (targetBlockHeight < startHeight) {
|
|
15
|
-
logger.info(`targetHeight: ${targetBlockHeight} is less than startHeight: ${startHeight}. Hence executing force-clean`);
|
|
16
|
-
if (!forceCleanService) {
|
|
17
|
-
logger.error('ForceCleanService not provided, cannot force clean');
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
await forceCleanService.forceClean();
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
logger.info(`Reindexing to block: ${targetBlockHeight}`);
|
|
24
|
-
const transaction = await sequelize.transaction();
|
|
25
|
-
try {
|
|
26
|
-
await Promise.all([
|
|
27
|
-
storeService.rewind(targetBlockHeight, transaction),
|
|
28
|
-
unfinalizedBlockService.resetUnfinalizedBlocks(),
|
|
29
|
-
unfinalizedBlockService.resetLastFinalizedVerifiedHeight(),
|
|
30
|
-
dynamicDsService.resetDynamicDatasource(targetBlockHeight),
|
|
31
|
-
]);
|
|
32
|
-
if (blockOffset) {
|
|
33
|
-
await mmrService.deleteMmrNode(targetBlockHeight + 1, blockOffset);
|
|
34
|
-
}
|
|
35
|
-
// Flush metadata changes from above Promise.all
|
|
36
|
-
await storeService.storeCache.metadata.flush(transaction);
|
|
37
|
-
await transaction.commit();
|
|
38
|
-
logger.info('Reindex Success');
|
|
39
|
-
}
|
|
40
|
-
catch (err) {
|
|
41
|
-
logger.error(err, 'Reindexing failed');
|
|
42
|
-
await transaction.rollback();
|
|
43
|
-
throw err;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.reindex = reindex;
|
|
48
|
-
//# sourceMappingURL=reindex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reindex.js","sourceRoot":"","sources":["../../src/utils/reindex.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;AAEtC,gDAAuE;AAMvE,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,SAAS,CAAC,CAAC;AAE7B,KAAK,UAAU,OAAO,CAC3B,WAAmB,EACnB,WAA+B,EAC/B,iBAAyB,EACzB,mBAA2B,EAC3B,YAA0B,EAC1B,uBAAiD,EACjD,gBAAkC,EAClC,UAAsB,EACtB,SAAoB,EACpB,iBAAqC;IAErC,IAAI,CAAC,mBAAmB,IAAI,mBAAmB,GAAG,iBAAiB,EAAE;QACnE,MAAM,CAAC,IAAI,CACT,gCAAgC,iBAAiB,6BAA6B,mBAAmB,4BAA4B,CAC9H,CAAC;QACF,OAAO;KACR;IAED,oEAAoE;IACpE,IAAI,iBAAiB,GAAG,WAAW,EAAE;QACnC,MAAM,CAAC,IAAI,CACT,iBAAiB,iBAAiB,8BAA8B,WAAW,+BAA+B,CAC3G,CAAC;QACF,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QACD,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAC;KACtC;SAAM;QACL,MAAM,CAAC,IAAI,CAAC,wBAAwB,iBAAiB,EAAE,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI;YACF,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,YAAY,CAAC,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;gBACnD,uBAAuB,CAAC,sBAAsB,EAAE;gBAChD,uBAAuB,CAAC,gCAAgC,EAAE;gBAC1D,gBAAgB,CAAC,sBAAsB,CAAC,iBAAiB,CAAC;aAC3D,CAAC,CAAC;YAEH,IAAI,WAAW,EAAE;gBACf,MAAM,UAAU,CAAC,aAAa,CAAC,iBAAiB,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;aACpE;YAED,gDAAgD;YAChD,MAAM,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE1D,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAChC;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YACvC,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,CAAC;SACX;KACF;AACH,CAAC;AAvDD,0BAuDC","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getLogger, MmrService, StoreService } from '@subql/node-core';\nimport { Sequelize } from 'sequelize';\nimport { DynamicDsService } from '../indexer/dynamic-ds.service';\nimport { UnfinalizedBlocksService } from '../indexer/unfinalizedBlocks.service';\nimport { ForceCleanService } from '../subcommands/forceClean.service';\n\nconst logger = getLogger('Reindex');\n\nexport async function reindex(\n startHeight: number,\n blockOffset: number | undefined,\n targetBlockHeight: number,\n lastProcessedHeight: number,\n storeService: StoreService,\n unfinalizedBlockService: UnfinalizedBlocksService,\n dynamicDsService: DynamicDsService,\n mmrService: MmrService,\n sequelize: Sequelize,\n forceCleanService?: ForceCleanService,\n): Promise<void> {\n if (!lastProcessedHeight || lastProcessedHeight < targetBlockHeight) {\n logger.warn(\n `Skipping reindexing to block ${targetBlockHeight}: current indexing height ${lastProcessedHeight} is behind requested block`,\n );\n return;\n }\n\n // if startHeight is greater than the targetHeight, just force clean\n if (targetBlockHeight < startHeight) {\n logger.info(\n `targetHeight: ${targetBlockHeight} is less than startHeight: ${startHeight}. Hence executing force-clean`,\n );\n if (!forceCleanService) {\n logger.error('ForceCleanService not provided, cannot force clean');\n process.exit(1);\n }\n await forceCleanService.forceClean();\n } else {\n logger.info(`Reindexing to block: ${targetBlockHeight}`);\n const transaction = await sequelize.transaction();\n try {\n await Promise.all([\n storeService.rewind(targetBlockHeight, transaction),\n unfinalizedBlockService.resetUnfinalizedBlocks(),\n unfinalizedBlockService.resetLastFinalizedVerifiedHeight(),\n dynamicDsService.resetDynamicDatasource(targetBlockHeight),\n ]);\n\n if (blockOffset) {\n await mmrService.deleteMmrNode(targetBlockHeight + 1, blockOffset);\n }\n\n // Flush metadata changes from above Promise.all\n await storeService.storeCache.metadata.flush(transaction);\n\n await transaction.commit();\n logger.info('Reindex Success');\n } catch (err) {\n logger.error(err, 'Reindexing failed');\n await transaction.rollback();\n throw err;\n }\n }\n}\n"]}
|