Skip to content

Fork recovery erases round from rounds table #2935

@alessiodf

Description

@alessiodf

During fork recovery, the last round that it rolls back to gets erased from the rounds database table and is not reinserted. This makes it impossible to use the roundCalculator for any calculations on that round.

For example:

[2019-09-12 05:04:12.528] INFO : Starting fork recovery
[2019-09-12 05:04:12.530] INFO : Removing 66 blocks. Reset to height 3,581,817
[2019-09-12 05:04:12.530] INFO : Undoing block 3,581,883
[2019-09-12 05:04:12.531] INFO : Back to previous round: 70,233
[2019-09-12 05:04:12.633] DEBUG: Loaded 51 active delegates
[2019-09-12 05:04:12.634] INFO : Analysing fork
[2019-09-12 05:04:12.642] INFO : Undoing block 3,581,882
[2019-09-12 05:04:12.644] INFO : Undoing block 3,581,881
[2019-09-12 05:04:12.646] INFO : Undoing block 3,581,880
[2019-09-12 05:04:12.647] INFO : Undoing block 3,581,879
[2019-09-12 05:04:12.649] INFO : Undoing block 3,581,878
[2019-09-12 05:04:12.650] INFO : Undoing block 3,581,877
[2019-09-12 05:04:12.651] INFO : Undoing block 3,581,876
[2019-09-12 05:04:12.652] INFO : Undoing block 3,581,875
[2019-09-12 05:04:12.653] INFO : Undoing block 3,581,874
[2019-09-12 05:04:12.654] INFO : Undoing block 3,581,873
[2019-09-12 05:04:12.656] INFO : Undoing block 3,581,872
[2019-09-12 05:04:12.657] INFO : Undoing block 3,581,871
[2019-09-12 05:04:12.658] INFO : Undoing block 3,581,870
[2019-09-12 05:04:12.661] INFO : Undoing block 3,581,869
[2019-09-12 05:04:12.663] INFO : Undoing block 3,581,868
[2019-09-12 05:04:12.668] INFO : Undoing block 3,581,867
[2019-09-12 05:04:12.670] INFO : Undoing block 3,581,866
[2019-09-12 05:04:12.671] INFO : Undoing block 3,581,865
[2019-09-12 05:04:12.672] INFO : Undoing block 3,581,864
[2019-09-12 05:04:12.673] INFO : Undoing block 3,581,863
[2019-09-12 05:04:12.674] INFO : Undoing block 3,581,862
[2019-09-12 05:04:12.675] INFO : Undoing block 3,581,861
[2019-09-12 05:04:12.677] INFO : Undoing block 3,581,860
[2019-09-12 05:04:12.680] INFO : Undoing block 3,581,859
[2019-09-12 05:04:12.681] INFO : Undoing block 3,581,858
[2019-09-12 05:04:12.682] INFO : Undoing block 3,581,857
[2019-09-12 05:04:12.683] INFO : Undoing block 3,581,856
[2019-09-12 05:04:12.684] INFO : Undoing block 3,581,855
[2019-09-12 05:04:12.697] INFO : Undoing block 3,581,854
[2019-09-12 05:04:12.705] INFO : Undoing block 3,581,853
[2019-09-12 05:04:12.707] INFO : Undoing block 3,581,852
[2019-09-12 05:04:12.708] INFO : Undoing block 3,581,851
[2019-09-12 05:04:12.710] INFO : Undoing block 3,581,850
[2019-09-12 05:04:12.710] INFO : Undoing block 3,581,849
[2019-09-12 05:04:12.711] INFO : Undoing block 3,581,848
[2019-09-12 05:04:12.714] INFO : Undoing block 3,581,847
[2019-09-12 05:04:12.715] INFO : Undoing block 3,581,846
[2019-09-12 05:04:12.716] INFO : Undoing block 3,581,845
[2019-09-12 05:04:12.717] INFO : Undoing block 3,581,844
[2019-09-12 05:04:12.718] INFO : Undoing block 3,581,843
[2019-09-12 05:04:12.719] INFO : Undoing block 3,581,842
[2019-09-12 05:04:12.720] INFO : Undoing block 3,581,841
[2019-09-12 05:04:12.721] INFO : Undoing block 3,581,840
[2019-09-12 05:04:12.722] INFO : Undoing block 3,581,839
[2019-09-12 05:04:12.723] INFO : Undoing block 3,581,838
[2019-09-12 05:04:12.724] INFO : Undoing block 3,581,837
[2019-09-12 05:04:12.725] INFO : Undoing block 3,581,836
[2019-09-12 05:04:12.725] INFO : Undoing block 3,581,835
[2019-09-12 05:04:12.736] INFO : Undoing block 3,581,834
[2019-09-12 05:04:12.738] INFO : Undoing block 3,581,833
[2019-09-12 05:04:12.740] INFO : Undoing block 3,581,832
[2019-09-12 05:04:12.740] INFO : Back to previous round: 70,232
[2019-09-12 05:04:12.867] DEBUG: Loaded 51 active delegates
[2019-09-12 05:04:12.877] INFO : Undoing block 3,581,831
[2019-09-12 05:04:12.878] INFO : Undoing block 3,581,830
[2019-09-12 05:04:12.879] INFO : Undoing block 3,581,829
[2019-09-12 05:04:12.880] INFO : Undoing block 3,581,828
[2019-09-12 05:04:12.881] INFO : Undoing block 3,581,827
[2019-09-12 05:04:12.883] INFO : Undoing block 3,581,826
[2019-09-12 05:04:12.884] INFO : Undoing block 3,581,825
[2019-09-12 05:04:12.885] INFO : Undoing block 3,581,824
[2019-09-12 05:04:12.886] INFO : Undoing block 3,581,823
[2019-09-12 05:04:12.887] INFO : Undoing block 3,581,822
[2019-09-12 05:04:12.888] INFO : Undoing block 3,581,821
[2019-09-12 05:04:12.889] INFO : Undoing block 3,581,820
[2019-09-12 05:04:12.891] INFO : Undoing block 3,581,819
[2019-09-12 05:04:12.892] INFO : Undoing block 3,581,818
[2019-09-12 05:04:12.961] INFO : 178.62.246.188 has downloaded 15 blocks from height 3,581,819
[2019-09-12 05:04:12.961] INFO : 173.253.129.10 has downloaded 31 blocks from height 3,581,803
[2019-09-12 05:04:12.984] INFO : Removed 66 blocks
[2019-09-12 05:04:12.999] INFO : Transaction Pool Manager build wallets complete
[2019-09-12 05:04:13.000] INFO : Refreshing 127 peers after fork.
[2019-09-12 05:04:13.000] INFO : Checking 127 peers

In this case the last round in the fork recovery was 70,232. Following the fork recovery:

ark=> select * from rounds where round = 70232;
 public_key | balance | round 
------------+---------+-------
(0 rows)

Similarly:

[2019-09-13 02:43:27.449] INFO : Rolling back to most common height 3591455. Own height: 3591457
[2019-09-13 02:43:27.450] DEBUG: event 'FORK': {"syncWithNetwork":"syncing"} -> {"fork":"analysing"} -> actions: [startForkRecovery, analyseFork]
[2019-09-13 02:43:27.452] INFO : Starting fork recovery
[2019-09-13 02:43:27.452] INFO : Removing 2 blocks. Reset to height 3,591,455
[2019-09-13 02:43:27.453] INFO : Undoing block 3,591,457
[2019-09-13 02:43:27.454] INFO : Undoing block 3,591,456
[2019-09-13 02:43:27.456] INFO : Analysing fork
[2019-09-13 02:43:27.460] INFO : Removed 77 blocks
[2019-09-13 02:43:27.460] INFO : Transaction Pool Manager build wallets complete
[2019-09-13 02:43:27.461] INFO : Refreshing 126 peers after fork.
[2019-09-13 02:43:27.461] INFO : Checking 126 peers

Height 3,591,455 was in round 70,421. Incidentally I don't know why it said it removed 77 blocks when it in fact only removed 2.

After fork recovery:

ark=> select * from rounds where round = 70421;
 public_key | balance | round 
------------+---------+-------
(0 rows)

Expected Behavior

The rounds table should contain data for all rounds up to and including the last round that was rolled back and there should not be any gaps in the rounds table.

Current Behavior

The rounds table does not contain data for the last round that was rolled back during any fork recovery, resulting in missing data in that table.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions