@@ -287,6 +287,16 @@ export class HyperionMaster {
287
287
this . total_range = this . head - msg . block_num ;
288
288
}
289
289
} ,
290
+ 'kill_worker' : ( msg : any ) => {
291
+ for ( let workersKey in cluster . workers ) {
292
+ const w = cluster . workers [ workersKey ] ;
293
+ if ( w . id === parseInt ( msg . id ) ) {
294
+ const idx = this . workerMap . findIndex ( value => value . worker_id === w . id ) ;
295
+ this . workerMap . splice ( idx , 1 ) ;
296
+ w . kill ( ) ;
297
+ }
298
+ }
299
+ } ,
290
300
'completed' : ( msg : any ) => {
291
301
if ( msg . id === this . doctorId . toString ( ) ) {
292
302
hLog ( 'repair worker completed' , msg ) ;
@@ -645,7 +655,7 @@ export class HyperionMaster {
645
655
index : new_index
646
656
} ) ;
647
657
} catch ( e ) {
648
- console . log ( e ) ;
658
+ hLog ( e ) ;
649
659
process . exit ( 1 ) ;
650
660
}
651
661
@@ -657,7 +667,7 @@ export class HyperionMaster {
657
667
name : `${ queue_prefix } -${ index . type } `
658
668
} ) ;
659
669
} catch ( e ) {
660
- console . log ( e ) ;
670
+ hLog ( e ) ;
661
671
process . exit ( 1 ) ;
662
672
}
663
673
@@ -1500,7 +1510,11 @@ export class HyperionMaster {
1500
1510
hLog ( log_msg . join ( ' | ' ) ) ;
1501
1511
}
1502
1512
1503
- if ( this . indexedObjects === 0 && this . deserializedActions === 0 && this . consumedBlocks === 0 && ! this . mode_transition ) {
1513
+ if ( this . liveConsumedBlocks > 0 && this . consumedBlocks === 0 && this . conf . indexer . abi_scan_mode ) {
1514
+ hLog ( 'Warning: Live reading on ABI SCAN mode' )
1515
+ }
1516
+
1517
+ if ( this . liveConsumedBlocks + this . indexedObjects + this . deserializedActions + this . consumedBlocks === 0 && ! this . mode_transition ) {
1504
1518
1505
1519
// Report completed range (parallel reading)
1506
1520
if ( this . total_blocks === this . total_range && ! this . range_completed ) {
@@ -1549,6 +1563,13 @@ export class HyperionMaster {
1549
1563
}
1550
1564
} else {
1551
1565
if ( ! this . shutdownStarted ) {
1566
+ const readers = this . workerMap . filter ( value => {
1567
+ return value . worker_role === 'reader' || value . worker_role === 'continuous_reader' ;
1568
+ } ) ;
1569
+ if ( readers . length === 0 ) {
1570
+ hLog ( `No more active workers, stopping now...` ) ;
1571
+ process . exit ( ) ;
1572
+ }
1552
1573
const idleMsg = 'No blocks are being processed, please check your state-history node!' ;
1553
1574
if ( this . idle_count === 2 ) {
1554
1575
this . emitAlert ( 'warning' , idleMsg ) ;
@@ -1715,7 +1736,16 @@ export class HyperionMaster {
1715
1736
this . ioRedisClient = new IORedis ( this . manager . conn . redis ) ;
1716
1737
1717
1738
// Remove first indexed block from cache (v2/health)
1718
- await this . ioRedisClient . del ( `${ this . manager . chain } ::fib` )
1739
+ await this . ioRedisClient . del ( `${ this . manager . chain } ::fib` ) ;
1740
+
1741
+ // check nodeos
1742
+ try {
1743
+ const info = await this . rpc . get_info ( ) ;
1744
+ hLog ( `Nodeos version: ${ info . server_version_string } ` ) ;
1745
+ } catch ( e ) {
1746
+ hLog ( `Chain API Error: ${ e . message } ` ) ;
1747
+ process . exit ( ) ;
1748
+ }
1719
1749
1720
1750
// Elasticsearch
1721
1751
this . client = this . manager . elasticsearchClient ;
@@ -1822,9 +1852,9 @@ export class HyperionMaster {
1822
1852
// handle worker disconnection events
1823
1853
cluster . on ( 'disconnect' , ( worker ) => {
1824
1854
if ( ! this . mode_transition && ! this . shutdownStarted ) {
1825
- hLog ( `The worker #${ worker . id } has disconnected, attempting to re-launch in 5 seconds...` ) ;
1826
1855
const workerReference = this . workerMap . find ( value => value . worker_id === worker . id ) ;
1827
1856
if ( workerReference ) {
1857
+ hLog ( `The worker #${ worker . id } has disconnected, attempting to re-launch in 5 seconds...` ) ;
1828
1858
workerReference . wref = null ;
1829
1859
workerReference . failures ++ ;
1830
1860
hLog ( `New worker defined: ${ workerReference . worker_role } for ${ workerReference . worker_queue } ` ) ;
@@ -1840,7 +1870,7 @@ export class HyperionMaster {
1840
1870
} , 1000 ) ;
1841
1871
} , 5000 ) ;
1842
1872
} else {
1843
- console . log ( `Worker #${ worker . id } not found in map! `) ;
1873
+ hLog ( `The worker #${ worker . id } has disconnected `) ;
1844
1874
}
1845
1875
}
1846
1876
} ) ;
@@ -2216,9 +2246,7 @@ export class HyperionMaster {
2216
2246
await this . setupIndexers ( ) ;
2217
2247
await this . setupStreaming ( ) ;
2218
2248
await this . setupDSPool ( ) ;
2219
- this . addWorker ( {
2220
- worker_role : "delta_updater"
2221
- } ) ;
2249
+ this . addWorker ( { worker_role : "delta_updater" } ) ;
2222
2250
}
2223
2251
2224
2252
private async findRange ( ) {
@@ -2244,8 +2272,7 @@ export class HyperionMaster {
2244
2272
try {
2245
2273
this . chain_data = await this . rpc . get_info ( ) ;
2246
2274
} catch ( e ) {
2247
- console . log ( e . message ) ;
2248
- console . error ( 'failed to connect to chain api' ) ;
2275
+ hLog ( 'Failed to connect to chain api: ' + e . message ) ;
2249
2276
process . exit ( 1 ) ;
2250
2277
}
2251
2278
this . head = this . chain_data . head_block_num ;
0 commit comments