Skip to content

Commit

Permalink
Sync 20221209 (#86)
Browse files Browse the repository at this point in the history
* [SKIP CI] Prerelease

* exit rather than throw error when api connection dropped (#1212)

* [SKIP CI] Prerelease

* [release] 202207027 Substrate (#1215)

* [release] 202207027 Substrate

* Update changelog

* Update CHANGELOG.md

* Update packages/types/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update packages/cli/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update packages/types/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>
Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* removed rmraf on .github (#1223)

* [SKIP CI] Prerelease

* Export TypedEventRecord type (#1225)

* [SKIP CI] Prerelease

* Fix one off events being missed on startup (#1224)

* Fix ready service never being ready

Since introducing the project service, the event for ready was emit before the ready service was init and listening for the event.

The solution is to check directly with the project service which is considered ready when a schema exists.

* Revert ready service, manually init services outside of factories to not miss one time events

* Fix up more events/metrics

* [SKIP CI] Prerelease

* add aggregate flag (#1219)

* [SKIP CI] Prerelease

* [release] 20220803 subql-node patch (#1229)

* [CLI] Add algorand publish support (#1228)

* [CLI] Add algorand publish support

* Update validator and network types for algorand

* Update deps, fix release script when pacakage name doesnt match path

* Update readme to refer to other packages

* Update README.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* [SKIP CI] Prerelease

* Fix dictionary being disabled with modulo filter (#1232)

* Fix dictionary being disabled with modulo filter

* Update changelog

* [SKIP CI] Prerelease

* [release] 20220804 (#1231)

* Update polkadot 9 (#1234)

* Update polkadot api to 9

* ignore init runtime decorate error

* Bring back profiling fetchBlocksBatches, remove unnessary await (#1235)

* [SKIP CI] Prerelease

* schema migration (#1226)

* [SKIP CI] Prerelease

* Fix Queue exceeds max size error (#1239)

* [SKIP CI] Prerelease

* fix config db selection when subscription is enabled (#1241)

* [SKIP CI] Prerelease

* Fork OrderByAggregatesPlugin and modify to be compatible with historical feature (#1242)

* [SKIP CI] Prerelease

* Fix block height being applied to all queries (#1238)

* [SKIP CI] Prerelease

* Fix running custom ds processors in parallel on different data (#1243)

* [SKIP CI] Prerelease

* [release] 20220811 (#1245)

* [release] 20220811

* update changelog

* support bulkGet and add bulkUpdate  (#1246)

* add bulkUpdate

* tidy up

* support historical

* improve bulkUpdate

* fix

* [SKIP CI] Prerelease

* Fix issue with db sync and workers enabled (#1250)

* Fix issue with db sync and workers enabled. Improved worker error handling

* Remove cpu count workers limit

* [SKIP CI] Prerelease

* Improve Performance logging (#1244)

* profilewrap for handler

* wip

* tidying up

* remove console.log

* tidy up

* add transactions

* Subql init mono (#1236)

* draft

* Tidy up

* tidy up

* Fix tests

* [SKIP CI] Prerelease

* [SKIP CI] Prerelease

* Fix bigInt array entity being treated as a big int (#1252)

* [SKIP CI] Prerelease

* [release] 20220817 (#1254)

* [release] 20220817

* Fix typo

* Address comments

* Update packages/types/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update README.md

* Node core (#1222)

* both packages working

* working on node core

* avalanche with types avalanche

* adding provider

* provider extends ethersproject provider

* Fix build issues

* Remove avalanche packages

* Add noImplicitAny flag to node-core and fix errors

* Update build tooling and changelogs

* Move events to node-core

* Move store service to node-core

* Use logger/profiler from node-core

* Move poi service to node core

* Move mmr service to node-core

* Move over meta controllers/services to node-core

* Fix imports

* Fix build issues

* Fix linter warning

* Fix lint issues, move worker builder to node core

* Remove BlockedQueue, fix more lint errors

* Move some test files

* Fix rebase issues, remove avax deps from node core

* Fix build issue

* Fix some tests

* fix processBlockCount metric with workers

Co-authored-by: roduquen <duquenne.robin42@gmail.com>
Co-authored-by: JQQQ <jiqiang90@hotmail.com>

* Add limit and offset options to store.getByField (#1259)

* Add limit and offset options to store.getByField

* Revert types change

* Add delay and don't break loop when process queue is full (#1261)

* Update cmd options in subql-node README (#1265)

* Update README.md

* Update packages/node/README.md

* Fix symbol type being possible in string interpolation (#1264)

* Fix symbol type being possible in string interpolation (#1266)

* [SKIP CI] Prerelease

* [release] 20220826 (#1263)

* Fix imports not being relative (#1268)

* [SKIP CI] Prerelease

* [release] node-core 20220826 (#1269)

* prerelease with @subql/node-core (#1270)

* [SKIP CI] Prerelease

* fix node-core import in node (#1272)

* [SKIP CI] Prerelease

* [release] 20220829 (#1273)

* Move auto queue to node core (#1278)

* [SKIP CI] Prerelease

* update polkadot and types, to support with wasm (#1280)

* update polkadot and types, to support with wasm

* move logic to ds processor, update change for interface

* remove dsAssets

* remove dsAssets

* update

* fix fetch due to type changed (#1282)

* fix fetch due to type changed

* prerelease for types

* [SKIP CI] Prerelease

* fix missing await for dictionary (#1283)

* [SKIP CI] Prerelease

* rollback changes (#1286)

* [SKIP CI] Prerelease

* Fix tests failing with  Cannot read properties of null (reading 'getProcessedBlockCount') (#1285)

* Fix tests failing with  Cannot read properties of null (reading 'getProcessedBlockCount')

* Fix same error in more tests

* Fix lint issue

* [SKIP CI] Prerelease

* fix remote gitpath (#1288)

* [SKIP CI] Prerelease

* Fix tests (#1297)

* fix tests

* tidy up

* removed v0.0.1 test

* [release] 20220913 (#1291)

* [release] 20220913

* Updated CHANGELOG.MD

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Set useragent headers on polkadot api (#1296)

* [SKIP CI] Prerelease

* change dictionary to use equalToInsensitive (#1301)

* change dictionary to use equalToInsensitive

* add comments

* [SKIP CI] Prerelease

* [release] 20220919 (#1302)

* [release] 20220919

* Update packages/node/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* update sequelize (#1311)

* update sequelize

* update sequelize query

* [SKIP CI] Prerelease

* Subcommands for force-clean and reindex (#1281)

* draft pr for documentation

* merge

* force-clean command working, refactoring needed

* refactor force-clean

* unsafe bug, in sandboxService, export package.json bug

* updated package.json node-core

* subql-node starting

* refactor

* fix up

* node test suites still broken

* Fix init logger with tests

* Use old logger defaults

* tests passes

* tidy up

* builds

* Fix exporting logger (#1300)

* tidy up, skip db.module tests

* fixed db.module

* tidy up getExistingProjectSchema

* Reindex command (#1307)

* init reindex command

* add services to module

* reindex functioning

* add force-clean for issue  #1230

* tidy up

* tidy up based on comments

* remove comments

* edit command des

* remove reindex from nodeconfig

* moved functions into node-core from utils

* update version

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

* Fixes #1309 (#1314)

* fix publish failed due to file object is null (#1316)

* [SKIP CI] Prerelease

* [release] 20220924 (#1317)

* chnage from multi branch to main (#1318)

* fix logger undefined (#1315)

* [SKIP CI] Prerelease

* change max connection to 10 and query service 10000 (#1322)

Co-authored-by: Louise wang <louisewang118@.gmail.com>

* [SKIP CI] Prerelease

* update polkadot api to 9.4.2 (#1325)

* functioning hot schema reload (#1321)

* [SKIP CI] Prerelease

* improve codegen error log (#1324)

Co-authored-by: Louise wang <louisewang118@.gmail.com>

* change createproject URL , project create issue, regx for project nam… (#1323)

* change createproject URL , project create issue, regx for project name and project key

* project name can be cap case

* code improve by Jay comment

Co-authored-by: Louise wang <louisewang118@.gmail.com>

* [SKIP CI] Prerelease

* manual prerelease (#1326)

* [SKIP CI] Prerelease

* enable historical by default (#1327)

* [SKIP CI] Prerelease

* [release] 20220929 (#1328)

* [release] 20220929

* update

* Update packages/node/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update packages/query/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update packages/utils/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update packages/query/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update packages/node/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update packages/node-core/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update packages/common/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

Co-authored-by: JQQQ <jiqiang90@hotmail.com>
Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Update ipfs endpoints, improve error handling (#1337)

* [SKIP CI] Prerelease

* Fix nodeConfig not being provided to benchmark service (#1338)

* [SKIP CI] Prerelease

* [release] 20221006 (#1339)

* Remove Subqueries table (#1340)

* Remove Subqueries table

* Fix NOT_SUPPORT function in project

* Remove tests relating to old subqueries table

* [SKIP CI] Prerelease

* [release] 20221010 (#1342)

* [release] 20221010

* Update packages/node/CHANGELOG.md

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>

* Validate ds processor in worker threads (#1343)

* [SKIP CI] Prerelease

* Fix publish ipfs 503 (#1331)

* add comments

* publish ipfs issue

* publish ipfs issue

* Update packages/cli/src/controller/publish-controller.ts

Co-authored-by: bz888 <ziyu.ben158@gmail.com>
Co-authored-by: Louise wang <louisewang118@.gmail.com>
Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

* [SKIP CI] Prerelease

* Move common dictionary service to node-core (#1345)

* Move common dictionary service to node-core

* Apply matcher from cosmos dictionary

* Move sandbox code to node-core

* Remove testing log

* [SKIP CI] Prerelease

* [release] 20221011

* Back port changes in algorand sdk to dictionary service (#1346)

* [SKIP CI] Prerelease

* temp disable hot schema reload (#1349)

* temp disable hot schema reload

* add CLI flag for hotschema reload

* fix

* print node version (#1348)

* print node version

* update logger info

* update with node name

Co-authored-by: Louise wang <louisewang118@.gmail.com>

* [SKIP CI] Prerelease

* [SKIP CI] Prerelease

* fix output-format flag on node (#1351)

* fix typo

* update workers and yargs outputFmt

* [SKIP CI] Prerelease

* Timestamp block filters (#1310)

* add block timestamp filter

* bug fixes

* bug fixes

* clean code and write test for timestamp filter

* move cron generation to SubqueryProject

* fix next timestamp log bug

* remove modifiedDataSources

* [SKIP CI] Prerelease

* Update to latest polkadot api (#1356)

* [SKIP CI] Prerelease

* add ad flags (#1352)

* add ad flags

* add interface for all AD flags and add prefix for indexer/query flags

* change string of to for

* some variable name change and update interface

Co-authored-by: Louise wang <louisewang118@.gmail.com>

* support version without v (#1354)

* support version without v

* improvement addv FUNC and solved undefined input

Co-authored-by: Louise wang <louisewang118@.gmail.com>

* fix deploy-test (#1357)

* [SKIP CI] Prerelease

* add dedicate data base flag for create project (#1355)

* add dedicate data base flag for create project

* test with latest createproject api host service and update wording

Co-authored-by: Louise wang <louisewang118@.gmail.com>

* Optimise modulo filter (#1358)

* scale batch size if modulo filter used

* add comments

* add comments

* fix logic runModuloblock

* remove comments

* remove more comments

* add check datasources, check height logic

* removed comments

* refactor

* flatten handler array

* Fix template issues (#1363)

* Fix the problem of creating multiple templates in the same block with the same template address

* refactor: cache ds in same block

Co-authored-by: Orion <orion@starfish.finance>

* fix deployment and project tests (#1364)

* fix deployment and project tests

* fix linting error

* [SKIP CI] Prerelease

* [release] 20221027 (#1365)

* fix: incomplete ds data in same block (#1370)

Co-authored-by: Orion <orion@starfish.finance>

* [SKIP CI] Prerelease

* Best Block (#1308)

* Draft

* update changes

* rebase changes

* fix

* fix (#1329)

* disable best blocks for workers until we support it

* Rename bestBlock to unfinalizedBlocks, other clean up

* Clean up

* Further clean up

* Dedupe reindex function

* Fix tests

* Clean up

* Update checking finalization to use parent hash

* Rename logger

* Refactor unfinalized blocks

* Use header rather than full block, improve detecting forks

* Verify unfinalized blocks when disabled.

Use sorted array for storing unfinalized blocks

* Clean up logs

* Fix not indexing unfinalized blocks right away, exit if historical not enabled

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

* [SKIP CI] Prerelease

* Fix bugs with unfinalized blocks (#1374)

* Fix bugs with unfinalized blocks

- Fix using wrong hash for unfinalized blocks
- Fix not removing unfinalized blocks when the latest unfinalized block < finalized

* Fix tests getting stuck

* Fix issue finding where fork occurred

* [SKIP CI] Prerelease

* [release] 20221028 (#1372)

* hot fix tests (#1360)

* update tests: api.service.spec, init-controller.test, publish-controller.spec

* update tests following comments

* [SKIP CI] Prerelease

* add ethereum to CLI and Validator (#1378)

* Imporve dictionary query (#1371)

* wip

* wip

* wip

* broken wip

* wip refactoring

* seperate dictionaryQueryEntries

* fix logic for setDicitonaryQueryEntries

* cleaning up

* move dictionaryEntry.ts to node-core

* remove comments

* create class for dictionaryqueryentries

* update tests

* move dictionaryQueryService into dicitonaryService

* refactor

* update logic for useDicitonary

* relocated dictionaryQuery funcs

* add test for dictquerymap

* tests failing on windows?

* test getDictionaryQueryEntries

* test fixed for getDictioanryQueryEntries

* added test for sorting

* conflict fixed ?

* fix conflict_2

* fix conflict_3

* add delete temp ds records back

* clean up with new logic

* clean up, add comments for test

* fix

* update logic

* add generic type

* [SKIP CI] Prerelease

* Enable for better inheritance of generated entity modeld (#1377)

* refactor: enable for entity inheritance

* refactor: include also filed getters

* [SKIP CI] Prerelease

* fix comments issue with new package (#1380)

* fix comments issue with new package

* moved yaml package

* [SKIP CI] Prerelease

* fix logic with reindex and unfinalized height and dynamic ds (#1382)

* fix logic with reindex and unfinalized height

* fix

* include fix for #1379

* update polkadot to 9.7.1 (#1384)

* [release] 20221107

* Fix remove alter table (#1387)

* remove migrate alter table

* remove

* [SKIP CI] Prerelease

* [release] 20221108 (#1388)

* fix missing sequelize sync (#1389)

* [SKIP CI] Prerelease

* [release] 20221108 patch (#1390)

* reindex bind (#1391)

* [SKIP CI] Prerelease

* [release] 20221109 (#1393)

* Handle fetch errors, then retry (#1386)

* add retryOnFail function

* add retryOnFail

* add test, fix logic

* [SKIP CI] Prerelease

* fix (#1395)

* [SKIP CI] Prerelease

* [release] 20221109 node-core (#1394)

* Fix tests hanging (#1396)

* Fix tests hanging

* Update base docker image with newer git version

* [SKIP CI] Prerelease

* Add distinct query plugin (#1274)

* Add distinct query plugin

* Clean up log

* Fix distinct not being provided to query

* Uppercase enum to be consistent with other enums

* Update dictionary queries to try distinct argument

* [SKIP CI] Prerelease

* Add query distinct dependencies (#1398)

* fix missing update forked graphile dependencies

* tidy up

* tidy up

* [SKIP CI] Prerelease

* Break block dispatcher file up and move common code to base class (#1397)

* [SKIP CI] Prerelease

* Hot schema trigger (#1401)

* implement trigger with notification

* working prior clean up

* refactor and clean up on async and await

* clean up

* clear comments

* add filter

* fix

* fix err

* [SKIP CI] Prerelease

* [release] 20221115 (#1402)

* [release] 20221115

* [release] 20221115

* [release] 20221115

* fix hot schema (#1404)

* fix and refactor

* refactor getTriggers

* [SKIP CI] Prerelease

* [release] 20221115 (#1408)

* [release] 20221115

* [release] 20221115

* fix fetchblock for works (#1410)

* [SKIP CI] Prerelease

* fix row estimate (#1417)

* fix row estimate

* tidy up

* [SKIP CI] Prerelease

* Add support to cli/validator for flare (#1416)

* [SKIP CI] Prerelease

* missing validator missing ipfs chainTypes (#1419)

* [SKIP CI] Prerelease

* query explain include graphql query (#1426)

* [SKIP CI] Prerelease

* dictionary auth link integration (#1411)

* add required dependancies and add flag for feature

* update modules and add logic to dictionary

* update dictionary parameters, update tests, remove hardcoded values

* simplify auth dictionary handling

* add apollo link type, remove un-needed from wrapper

* remove dictionary from indexer module

* update flag name, add error check

* update yargs flag description

* Update appolo-links

* update @subql/apollo-links version, remove apollo/client version change

* fix yarn.lock

* add await init to dictionary tests

* fix fetch test dictionary provider, update yarn.lock

Co-authored-by: Lachlan McCrae <8554309+lachlan1m@users.noreply.github.com>
Co-authored-by: HZ <zhaihaohk@gmail.com>

* Fix missing speChanged logic with getRuntime (#1421)

* init

* need fix worker

* fix test

* tidy up

* fix test, fix missing dictionary

* inject service to runtime

* remove unused code

* [SKIP CI] Prerelease

* Feat/multi chain indexing (#1375)

* [SKIP CI] Prerelease

* remove enums (#1427)

* [SKIP CI] Prerelease

* change to print graphql sql on request (#1428)

* [SKIP CI] Prerelease

* fix missing util-crptyo in util package (#1429)

* fix missing util-crptyo in util package

* need prerelease in query service

* [SKIP CI] Prerelease

* fix import issue in query service (#1430)

* [SKIP CI] Prerelease

* fix missing query (#1432)

* [SKIP CI] Prerelease

* change fetch module SubqueryProject => ISubqueryProject (#1433)

Co-authored-by: Lachlan McCrae <8554309+lachlan1m@users.noreply.github.com>

* [SKIP CI] Prerelease

* Update polkadot 9.9.1 (#1434)

* update polkadot api, also fix force-clean dependencies issue

* tidy up

* [SKIP CI] Prerelease

* [release] 20221123 (#1431)

* [release] 20221123

* Update packages/query/CHANGELOG.md

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

* Update packages/node-core/CHANGELOG.md

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

* Update packages/node/CHANGELOG.md

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

* Update packages/node-core/CHANGELOG.md

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

* Update packages/validator/CHANGELOG.md

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

Co-authored-by: Scott Twiname <skott.twiname@gmail.com>

* Add a way to pass settings to the graphql playground (#1436)

* Add a way to pass settings to the graphql playground

* Add a changelog entry

* [SKIP CI] Prerelease

* Fix the changelog entry for the last PR (#1437)

* [SKIP CI] Prerelease

* fix enum name missing issue (#1441)

* fix enum name missing issue

* tidy up

* [SKIP CI] Prerelease

* hash sql queries (#1438)

* hashed sql

* add comments

* add comment for hashName function

* update function

* update hashName function

* [SKIP CI] Prerelease

* [release] 20221130 (#1442)

* [release] 20221130

* [release] 20221130

* Add --file flag for codegen (#1446)

* init

* change flag behaviour so -f can overwrite -l

* update getManifestPath method, fix typo

* update argument description

* update variable names

* update arg description

* add error message on bad --file path

Co-authored-by: Lachlan McCrae <8554309+lachlan1m@users.noreply.github.com>

* [SKIP CI] Prerelease

* add try and catch for hsr (#1449)

* [SKIP CI] Prerelease

* Bypass blocks (#1435)

* wip

* manifest error

* manfiest passed

* added logging for bypassing blocks

* sync main, moved bypassBlocks under networks

* pass all tests

* mock dictioanry case

* fix metadata

* clean up

* allow range

* bypass working, needs more testing

* wip on bypass with setting new bufferHeight

* working

* added runtime test

* add test for latestBufferHeight (blocked)

* removed unneeded test, improve logic

* clean up

* add comments

* add comments for latestBufferHeight reasoning

* update logic

* refactor

* update logic

* refactor

* [SKIP CI] Prerelease

* [release] 20221205 (#1448)

* [release] 20221205

* [release] 20221205

* [release] 20221206

* details for bypassBlocks

* Remove unused RuntimeService from indexer module, it had missing dependencies (#1453)

* [SKIP CI] Prerelease

* Fix/subcommands (#1451)

* updated forceClean

* update reindex

* [SKIP CI] Prerelease

* bumped polkadot/utils

* Enable env vars parsing at node and query commands (#1452)

* [SKIP CI] Prerelease

* Workers: Fix SequelizeDatabaseError - tuple concurrently updated (#1458)

* add flag for hot-schema reload on node, ensure query is on main thread

* remove flags

* [SKIP CI] Prerelease

* Add start height to project (#1456)

* [SKIP CI] Prerelease

* Fix poi offset is 0 (#1459)

* [SKIP CI] Prerelease

Co-authored-by: Jay Ji <jiqiang90@hotmail.com>
Co-authored-by: Scott Twiname <skott.twiname@gmail.com>
Co-authored-by: Marta Adamczyk <marta.kowalska.987@gmail.com>
Co-authored-by: James Bayly <46693720+jamesbayly@users.noreply.github.com>
Co-authored-by: roduquen <duquenne.robin42@gmail.com>
Co-authored-by: HAO ZHAI <zhaihaohk@gmail.com>
Co-authored-by: bighammerw <92004774+bighammerw@users.noreply.github.com>
Co-authored-by: Louise wang <louisewang118@.gmail.com>
Co-authored-by: Naveen V <velnaveen99@gmail.com>
Co-authored-by: hariu-starfish <103621490+hariu-starfish@users.noreply.github.com>
Co-authored-by: Orion <orion@starfish.finance>
Co-authored-by: Filippo <filippo@embriotech.ch>
Co-authored-by: Lachlan McCrae <8554309+lamcc21@users.noreply.github.com>
Co-authored-by: Lachlan McCrae <8554309+lachlan1m@users.noreply.github.com>
Co-authored-by: MOZGIII <mike-n@narod.ru>
  • Loading branch information
16 people committed Dec 19, 2022
1 parent 91e665e commit 1bbd9af
Show file tree
Hide file tree
Showing 26 changed files with 1,331 additions and 190 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
},
"resolutions": {
"@polkadot/api": "9.5.2",
"@polkadot/util": "10.1.11",
"@polkadot/util": "10.2.1",
"@cosmjs/cosmwasm-stargate": "0.28.9",
"node-fetch": "2.6.7"
},
Expand Down
1 change: 1 addition & 0 deletions packages/common-cosmos/src/project/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ export type ICosmosProjectManifest = IProjectManifest<SubqlCosmosDatasource>;

export interface CosmosProjectNetworkConfig extends ProjectNetworkConfig {
chainId?: string;
bypassBlocks?: (number | string)[];
}
2 changes: 1 addition & 1 deletion packages/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"@polkadot/api": "9.5.2",
"@subql/common": "latest",
"@subql/common-cosmos": "workspace:*",
"@subql/node-core": "1.4.2-0",
"@subql/node-core": "1.6.1-1",
"@subql/types-cosmos": "workspace:*",
"@subql/utils": "latest",
"@subql/x-merkle-mountain-range": "2.0.0-0.1.2",
Expand Down
3 changes: 2 additions & 1 deletion packages/node/src/configure/SubqueryProject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0

import { Block } from '@cosmjs/stargate';
import { ApiPromise } from '@polkadot/api';
import { Injectable } from '@nestjs/common';
import { RegisteredTypes } from '@polkadot/types/types';
import {
ReaderFactory,
Expand Down Expand Up @@ -60,6 +60,7 @@ const NOT_SUPPORT = (name: string) => {
throw new Error(`Manifest specVersion ${name}() is not supported`);
};

@Injectable()
export class SubqueryProject {
id: string;
root: string;
Expand Down
6 changes: 3 additions & 3 deletions packages/node/src/configure/configure.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ export class ConfigureModule {
} else {
if (!argv.subquery) {
logger.error(
'subquery path is missing neither in cli options nor in config file',
'Subquery path is missing neither in cli options nor in config file',
);
yargsOptions.showHelp();
process.exit(1);
Expand Down Expand Up @@ -198,11 +198,11 @@ export class ConfigureModule {
useValue: config,
},
{
provide: SubqueryProject,
provide: 'ISubqueryProject',
useFactory: project,
},
],
exports: [NodeConfig, SubqueryProject],
exports: [NodeConfig, 'ISubqueryProject'],
};
}
}
7 changes: 4 additions & 3 deletions packages/node/src/indexer/api.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
toRfc3339WithNanoseconds,
BlockResultsResponse,
} from '@cosmjs/tendermint-rpc';
import { Injectable } from '@nestjs/common';
import { Inject, Injectable } from '@nestjs/common';
import {
getLogger,
NetworkMetadataPayload,
Expand All @@ -33,6 +33,7 @@ import {
} from '../configure/SubqueryProject';
import { DsProcessorService } from './ds-processor.service';
import { HttpClient, WebsocketClient } from './rpc-clients';

// eslint-disable-next-line @typescript-eslint/no-var-requires
const { version: packageVersion } = require('../../package.json');

Expand All @@ -44,9 +45,9 @@ export class ApiService {
private api: CosmosClient;
private tendermint: Tendermint34Client;
networkMeta: NetworkMetadataPayload;
dsProcessor: DsProcessorService;
registry: Registry;
constructor(protected project: SubqueryProject) {}

constructor(@Inject('ISubqueryProject') protected project: SubqueryProject) {}

async init(): Promise<ApiService> {
try {
Expand Down
24 changes: 12 additions & 12 deletions packages/node/src/indexer/blockDispatcher/base-block-dispatcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,15 @@ import { ProjectService } from '../project.service';

const logger = getLogger('BaseBlockDispatcherService');

export type ProcessBlockResponse = {
dynamicDsCreated: boolean;
operationHash: Uint8Array;
reindexBlockHeight: number;
};

export interface IBlockDispatcher {
init(onDynamicDsCreated: (height: number) => Promise<void>): Promise<void>;
enqueueBlocks(heights: number[]): void;
enqueueBlocks(heights: number[], latestBufferHeight?: number): void;

queueSize: number;
freeSize: number;
Expand All @@ -22,12 +28,6 @@ export interface IBlockDispatcher {
rewind(height: number): Promise<void>;
}

export type ProcessBlockResponse = {
dynamicDsCreated: boolean;
operationHash: Uint8Array;
reindexBlockHeight: number;
};

const NULL_MERKEL_ROOT = hexToU8a('0x00');

function isNullMerkelRoot(operationHash: Uint8Array): boolean {
Expand All @@ -42,7 +42,6 @@ export abstract class BaseBlockDispatcher<Q extends IQueue>
protected latestProcessedHeight: number;
protected currentProcessingHeight: number;
protected onDynamicDsCreated: (height: number) => Promise<void>;
// private processQueue: AutoQueue<void>;

constructor(
protected nodeConfig: NodeConfig,
Expand Down Expand Up @@ -75,7 +74,7 @@ export abstract class BaseBlockDispatcher<Q extends IQueue>
this._latestBufferedHeight = height;
}

protected setProcessedBlockCount(processedBlockCount: number) {
protected setProcessedBlockCount(processedBlockCount: number): void {
this._processedBlockCount = processedBlockCount;
this.eventEmitter.emit(IndexerEvent.BlockProcessedCount, {
processedBlockCount,
Expand All @@ -98,8 +97,7 @@ export abstract class BaseBlockDispatcher<Q extends IQueue>

flushQueue(height: number): void {
this.latestBufferedHeight = height;
this.queue.flush(); // Empty
// this.processQueue.flush();
this.queue.flush();
}

protected preProcessBlock(height: number): void {
Expand All @@ -122,10 +120,12 @@ export abstract class BaseBlockDispatcher<Q extends IQueue>
this.latestProcessedHeight = reindexBlockHeight;
} else {
if (this.nodeConfig.proofOfIndex && !isNullMerkelRoot(operationHash)) {
if (!this.projectService.blockOffset) {
// We only check if it is undefined, need to be caution here when blockOffset is 0
if (this.projectService.blockOffset === undefined) {
// Which means during project init, it has not found offset and set value
await this.projectService.upsertMetadataBlockOffset(height - 1);
}
// this will return if project service blockOffset already exist
void this.projectService.setBlockOffset(height - 1);
}
if (dynamicDsCreated) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,42 +19,21 @@ import { IndexerManager } from '../indexer.manager';
import { ProjectService } from '../project.service';
import { BaseBlockDispatcher } from './base-block-dispatcher';

export interface IBlockDispatcher {
init(onDynamicDsCreated: (height: number) => Promise<void>): Promise<void>;
enqueueBlocks(heights: number[]): void;

queueSize: number;
freeSize: number;
latestBufferedHeight: number | undefined;

// Remove all enqueued blocks, used when a dynamic ds is created
flushQueue(height: number): void;
rewind(height: number): Promise<void>;
}

const logger = getLogger('BlockDispatcherService');

// TODO move to another file
/**
* @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing
*/
@Injectable()
export class BlockDispatcherService
extends BaseBlockDispatcher<Queue<number>>
implements IBlockDispatcher, OnApplicationShutdown
implements OnApplicationShutdown
{
// private fetchQueue: Queue<number>;
private processQueue: AutoQueue<void>;

private fetching = false;
private isShutdown = false;
// private onDynamicDsCreated: (height: number) => Promise<void>;
// private _latestBufferedHeight: number;
// private _processedBlockCount: number;

private readonly fetchBlocksBatches = CosmosUtil.fetchBlocksBatches;
// private latestProcessedHeight: number;
// private currentProcessingHeight: number;

constructor(
private apiService: ApiService,
Expand All @@ -69,7 +48,6 @@ export class BlockDispatcherService
projectService,
new Queue(nodeConfig.batchSize * 3),
);
// this.fetchQueue = new Queue(nodeConfig.batchSize * 3);
this.processQueue = new AutoQueue(nodeConfig.batchSize * 3);

if (this.nodeConfig.profiler) {
Expand All @@ -94,18 +72,24 @@ export class BlockDispatcherService
this.processQueue.abort();
}

enqueueBlocks(heights: number[]): void {
if (!heights.length) return;
enqueueBlocks(cleanedBlocks: number[], latestBufferHeight?: number): void {
// // In the case where factors of batchSize is equal to bypassBlock or when cleanedBatchBlocks is []
// // to ensure block is bypassed, latestBufferHeight needs to be manually set
// If cleanedBlocks = []
if (!!latestBufferHeight && !cleanedBlocks.length) {
this.latestBufferedHeight = latestBufferHeight;
return;
}

logger.info(
`Enqueing blocks ${heights[0]}...${last(heights)}, total ${
heights.length
`Enqueueing blocks ${cleanedBlocks[0]}...${last(cleanedBlocks)}, total ${
cleanedBlocks.length
} blocks`,
);

this.queue.putMany(heights);
this.latestBufferedHeight = last(heights);
this.queue.putMany(cleanedBlocks);

this.latestBufferedHeight = latestBufferHeight ?? last(cleanedBlocks);
void this.fetchBlocksFromQueue().catch((e) => {
logger.error(e, 'Failed to fetch blocks from queue');
if (!this.isShutdown) {
Expand All @@ -115,13 +99,9 @@ export class BlockDispatcherService
}

flushQueue(height: number): void {
// this.latestBufferedHeight = height;
super.flushQueue(height); // Empty
super.flushQueue(height);
this.processQueue.flush();
}
// Compare it with current indexing number, if last corrected is already indexed
// rewind, also flush queued blocks, drop current indexing transaction, set last processed to correct block too
// if rollback is greater than current index flush queue only

private async fetchBlocksFromQueue(): Promise<void> {
if (this.fetching || this.isShutdown) return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import {
} from '../worker/worker';
import { BaseBlockDispatcher } from './base-block-dispatcher';

const logger = getLogger('WorkerBlockDispatcherService');

type IIndexerWorker = {
processBlock: ProcessBlock;
fetchBlock: FetchBlock;
Expand All @@ -42,8 +44,6 @@ type IndexerWorker = IIndexerWorker & {
terminate: () => Promise<number>;
};

const logger = getLogger('WorkerBlockDispatcherService');

async function createIndexerWorker(): Promise<IndexerWorker> {
const indexerWorker = Worker.create<IInitIndexerWorker>(
path.resolve(__dirname, '../../../dist/indexer/worker/worker.js'),
Expand Down Expand Up @@ -96,6 +96,7 @@ export class WorkerBlockDispatcherService
'Sorry, best block feature is not supported with workers yet.',
);
}

this.workers = await Promise.all(
new Array(this.numWorkers).fill(0).map(() => createIndexerWorker()),
);
Expand All @@ -117,7 +118,7 @@ export class WorkerBlockDispatcherService
}
}

enqueueBlocks(heights: number[]): void {
enqueueBlocks(heights: number[], latestBufferHeight?: number): void {
if (!heights.length) return;
logger.info(
`Enqueing blocks [${heights[0]}...${last(heights)}], total ${
Expand Down Expand Up @@ -145,7 +146,7 @@ export class WorkerBlockDispatcherService
);
}

this.latestBufferedHeight = last(heights);
this.latestBufferedHeight = latestBufferHeight ?? last(heights);
}

private enqueueBlock(height: number, workerIdx: number) {
Expand All @@ -155,7 +156,7 @@ export class WorkerBlockDispatcherService
assert(worker, `Worker ${workerIdx} not found`);

// Used to compare before and after as a way to check if queue was flushed
const bufferedHeight = this._latestBufferedHeight;
const bufferedHeight = this.latestBufferedHeight;
const pendingBlock = worker.fetchBlock(height);

const processBlock = async () => {
Expand All @@ -164,7 +165,7 @@ export class WorkerBlockDispatcherService
const result = await pendingBlock;
const end = new Date();

if (bufferedHeight > this._latestBufferedHeight) {
if (bufferedHeight > this.latestBufferedHeight) {
logger.debug(`Queue was reset for new DS, discarding fetched blocks`);
return;
}
Expand Down Expand Up @@ -218,6 +219,7 @@ export class WorkerBlockDispatcherService
}
}

// Getter doesn't seem to cary from abstract class
get latestBufferedHeight(): number {
return this._latestBufferedHeight;
}
Expand Down
9 changes: 6 additions & 3 deletions packages/node/src/indexer/dictionary.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright 2020-2022 OnFinality Limited authors & contributors
// SPDX-License-Identifier: Apache-2.0

import { Injectable, OnApplicationShutdown } from '@nestjs/common';
import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';
import {
NodeConfig,
DictionaryService as CoreDictionaryService,
Expand All @@ -13,8 +13,11 @@ export class DictionaryService
extends CoreDictionaryService
implements OnApplicationShutdown
{
constructor(protected project: SubqueryProject, nodeConfig: NodeConfig) {
super(project.network.dictionary, nodeConfig, [
constructor(
@Inject('ISubqueryProject') protected project: SubqueryProject,
nodeConfig: NodeConfig,
) {
super(project.network.dictionary, project.network.chainId, nodeConfig, [
'lastProcessedHeight',
'chain',
]);
Expand Down
4 changes: 2 additions & 2 deletions packages/node/src/indexer/ds-processor.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import fs from 'fs';
import path from 'path';
import { Injectable } from '@nestjs/common';
import { Inject, Injectable } from '@nestjs/common';
import { isCustomCosmosDs } from '@subql/common-cosmos';
import { getLogger, NodeConfig, Sandbox } from '@subql/node-core';
import {
Expand Down Expand Up @@ -115,7 +115,7 @@ export class DsProcessorService {
[entry: string]: SubqlCosmosDatasourceProcessor<string, undefined>;
} = {};
constructor(
private project: SubqueryProject,
@Inject('ISubqueryProject') private project: SubqueryProject,
private readonly nodeConfig: NodeConfig,
private readonly apiService: ApiService,
) {}
Expand Down
Loading

0 comments on commit 1bbd9af

Please sign in to comment.