Save block data to prevent sync from block 0 when a fresh node crashes
#370
Open
opened 5 months ago by onryo
·
10 comments
No Branch/Tag Specified
arm
asyncnotedecryption
danger
dev
dev-aarch64
dev-mac
dev-old-randomx
divzaddrs
dragonx
duke
freebsd
getfilterednotes
hip39
hushutils
insync
jahway603
master
mvstuff
onryo
p2p_privacy
ramhash
relaytx
rx-largepages
setbestchain
warmup
witness_cache
wolfssl
wolfssl_win
z_createrawtransaction
z_importwallet
z_signmessage
v0.11.2.z0
v0.11.2.z1
v0.11.2.z2
v0.11.2.z3
v0.11.2.z4
v0.11.2.z5
v0.11.2.z6
v0.11.2.z7
v0.11.2.z8
v0.11.2.z9
v1.0.0
v1.0.0-beta1
v1.0.0-beta2
v1.0.0-rc1
v1.0.0-rc2
v1.0.0-rc3
v1.0.0-rc4
v1.0.1
v1.0.10
v1.0.10-1
v1.0.11
v1.0.11-rc1
v1.0.12
v1.0.12-rc1
v1.0.13
v1.0.13-rc1
v1.0.13-rc2
v1.0.14
v1.0.14-rc1
v1.0.15
v1.0.15-rc1
v1.0.2
v1.0.3
v1.0.4
v1.0.5
v1.0.6
v1.0.7-1
v1.0.8
v1.0.8-1
v1.0.9
v1.1.0
v1.1.0-rc1
v1.1.1
v1.1.1-rc1
v1.1.1-rc2
v1.1.2
v1.1.2-rc1
v2.0.0
v2.0.0-rc1
v2.0.1
v3.0.0
v3.1.0
v3.1.1
v3.10.0
v3.10.1
v3.10.2
v3.2.0
v3.2.1
v3.2.1-alpha
v3.2.1-beta
v3.2.2
v3.2.3
v3.3.0
v3.3.1
v3.3.2
v3.4.0
v3.4.1
v3.5.0
v3.5.1
v3.5.2
v3.6.0
v3.6.1
v3.6.2
v3.6.3
v3.7.0
v3.7.1
v3.8.0
v3.9.0
v3.9.1
v3.9.2
v3.9.3
v3.9.4
Labels
bounty up to 500 HUSH 2001-5000 bounty
bounty between 2001 and 5000 HUSH 501-2000 bounty
bounty between 501 and 2000 HUSH arm
something doesn't work on arm beginners
for new developers bug
may or may not be a bug build
problems building documentation
not enough information feature
new feature high priority
high priority i2p
related to i2p low priority
low priority medium priority
medium priority question
something is not clear release
release label or issue related to it testing
related to testing tor
related to tor wontfix
this won't be fixed
Apply labels
Clear labels
0-500 bounty
bounty up to 500 HUSH 2001-5000 bounty
bounty between 2001 and 5000 HUSH 501-2000 bounty
bounty between 501 and 2000 HUSH arm
something doesn't work on arm beginners
for new developers bug
may or may not be a bug build
problems building documentation
not enough information feature
new feature high priority
high priority i2p
related to i2p low priority
low priority medium priority
medium priority question
something is not clear release
release label or issue related to it testing
related to testing tor
related to tor wontfix
this won't be fixed
No Label
0-500 bounty
2001-5000 bounty
501-2000 bounty
arm
beginners
bug
build
documentation
feature
high priority
i2p
low priority
medium priority
question
release
testing
tor
wontfix
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
This issue currently doesn't have any dependencies.
Reference in new issue
There is no content yet.
Delete Branch '%!s(MISSING)'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
A node may crash on a fresh sync and when restarting the node it starts from 0. Would be useful to write changes every X blocks so when the node crashes it won't start from block 0.
I believe we need to add lines 1403-1425 from zcash ChainTipAdded() function to the end of our ChainTip() function : https://github.com/zcash/zcash/blob/master/src/wallet/wallet.cpp#L1403
That code calls SetBestChain() every WITNESS_WRITE_UPDATES blocks, which they set to 10000. That stores the "bestblock" key in wallet.dat which stores what height the wallet knows about.
@onryo ok, we have some potential untested code on the
setbestchain
branch. It needs a lot of testing, since this is a pretty low-level change. Testing could include letting the OOM Killer kill it and/or kill -9 .Some testing with mining and calling getblocktemplate should be done on this branch as these changes affect how
ChainTip()
works and could affect mining.My fresh node crashed at block 728560, I restarted and now it says
Activating best chain...
every time I callgetblockcount
, in stdout I see that it started syncing from block 0:I stopped the node and it's core dumped:
@onryo ok, I pushed another commit to the branch, please test again.
No more coredump.
@onryo glad to hear there is no more coredump when calling
stop
, that is progress. Please also test what happens when running out of memory and/or kill -9.When calling
stop
the existing behavior is to save the bestchain height to the wallet, so you should still see that happen with the new code. The new behavior we are looking for is: does it save a recent bestchain height when killed by the kernel or user?It only saves the bestchain every 10K blocks that are added, so you should see it save a height within 10K blocks of when it's killed.
Forgot to mention, but it's possible that the wallet.dat gets corrupted with the OOM killer or
kill -9
kills hushd so make sure you are not testing with an important wallet and/or you have a recent backup. I think testing these changes on an empty wallet that hushd creates on startup is fine. A wallet with transactions is just going to make the testing slower.I only confirm there is no more coredump but syncing still starts from 0.
@onryo do you see a line like
wrote bestchain to wallet at height
in your debug.log ?