Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

beacon, registry: Fix beacon history stall #2731

Merged

Conversation

jamescowens
Copy link
Member

@jamescowens jamescowens commented Jan 14, 2024

We have had some problems with beacon history causing the wallet to get stuck. The symptoms are the wallet stops syncing and one thread is constantly running. This is cleared by having the users start the wallet with -clearbeaconhistory, which clears out the leveldb beacon registry area and rebuilds it from a contract replay. This would indicate that the beacon chainlets are somehow corrupted and causing an infinite loop during the chainlet walkback that is done in several consensus critical areas.

This PR corrects some flaws found in the beacon contract handling code, refactors chainlet walkbacks that were in several places in the code into one BeaconRegistry::GetBeaconChainletRoot, which also has corruption detection, and also expands the logging in the beacon test harness to help with troubleshooting. Code comments have also been corrected and updated.

@jamescowens jamescowens added bug refactor This is for refactoring (if also an enhancement, use that label too). test suite labels Jan 14, 2024
@jamescowens jamescowens self-assigned this Jan 14, 2024
@jamescowens jamescowens marked this pull request as draft January 14, 2024 20:39
@jamescowens jamescowens added this to the Miss Piggy milestone Jan 15, 2024
@martini1992
Copy link

Had this bug on my server for a couple of weeks had no idea how to clear it, then I found this PR, adding -clearbeaconhistory fixed the issue, added it commented to my docker-compose file for future reference. Thank you 🙂

@jamescowens jamescowens force-pushed the fix_beacon_history_stall branch 2 times, most recently from e5bda8c to 557015f Compare January 15, 2024 20:05
@jamescowens
Copy link
Member Author

Clearing the entire chain history and resyncing from zero also fixes it, but that is applying a sledgehammer to hammer a nail... :)

@martini1992
Copy link

That was going to be my next move, but thank you for saving me the bandwidth 😄

@jamescowens jamescowens force-pushed the fix_beacon_history_stall branch 8 times, most recently from 12e3fb3 to 026eb34 Compare January 28, 2024 06:59
@jamescowens jamescowens force-pushed the fix_beacon_history_stall branch 7 times, most recently from 0c91450 to b7f7fe7 Compare February 3, 2024 22:07
@jamescowens jamescowens marked this pull request as ready for review February 4, 2024 01:33
This commit corrects the algorithms that deal with the expiry
of pending beacons during a superblock activation and the
inverse, which is the resurrection of pending beacons that were
marked expired during the deactivation of a superblock in a
chain reorganization scenario.
This also fixes the HandleCurrentHistoricalEntries specialization
in the beacon registry to properly deal with expired pending beacons.
The beacon renewable method originally only checked
that the minimum amount of time has passed since the advertisement
or last renewal. This commit also adds an expiry check, as
an expired beacon cannot be successfully renewed.
Compiling with Clang 15 caught an extra unneeded lock
on cs_main and also an unnecessary exclusive lock required
on IsV13Enabled. The gArgs global methods are thread-safe via
the internal cs in ArgsManager.
Also make a few other improvements, such as verification that the
previous beacon to the original activated beacon has a status of
pending.
The catch for std::runtime_exception in the Tally code
will cause a std::abort(). The RPC code will throw a
RPC_INTERNAL_ERROR.
@jamescowens jamescowens merged commit 616fc2d into gridcoin-community:development Feb 11, 2024
17 checks passed
jamescowens added a commit to jamescowens/Gridcoin-Research that referenced this pull request Mar 2, 2024
Added
 - contrib: add nix file for compilation environment gridcoin-community#2660 (@div72)
 - gui: Make main Gridcoin window geometry save unique to datadir location gridcoin-community#2661 (@jamescowens)
 - build: Initial CMake support gridcoin-community#2676 (@CyberTailor)
 - util: Add `-shutdownnotify` and `startupnotify` options from upstream gridcoin-community#2688 (@barton2526)
 - gui, staking: Implement facilities for mandatory sidestakes and sidestake GUI gridcoin-community#2704 (@jamescowens)
 - gui, voting: Implement poll result caching and poll stale indicator gridcoin-community#2709 (@jamescowens)
 - gui, projects: Implement greylist state for projects in GUI projects table gridcoin-community#2715 (@jamescowens)
 - gui, poll: Implement poll expiration reminders gridcoin-community#2716 (@jamescowens)
 - serialize: allow variants to be serialized gridcoin-community#2729 (@div72)
 - gui: Implement poll field length limiters in GUI forms gridcoin-community#2742 (@jamescowens)

Changed
 - consensus, contract, scraper, protocol, project, beacon, rpc: Replace remaining appcache sections with native structures gridcoin-community#2639 (@jamescowens)
 - build: update libsecp256k1 to v0.3.0 gridcoin-community#2655 (@div72)
 - build: Replace $(AT) with .SILENT gridcoin-community#2674 (@barton2526)
 - build: allow system bdb gridcoin-community#2675 (@div72)
 - Resize Header Column with Additional Text gridcoin-community#2683 (@PrestackI)
 - rpc: use RPCErrorCode everywhere gridcoin-community#2687 (@Pythonix)
 - wallet: SecureString to allow null characters gridcoin-community#2690 (@barton2526)
 - random: port some upstream changes gridcoin-community#2696 (@div72)
 - depends: Bump dependencies gridcoin-community#2692 (@barton2526)
 - doc: Update link to Discord server gridcoin-community#2693 (@adriaanjoubert)
 - rpc: Change capitalization, remove whitespace of rpc keys gridcoin-community#2711 (@Pythonix)
 - ci: bump MacOS version to 12 gridcoin-community#2713 (@div72)
 - depends: no-longer nuke libc++abi.so* in native_clang package gridcoin-community#2719 (@div72)
 - doc: update windows `-fstack-clash-protection` doc gridcoin-community#2720 (@div72)
 - Silence `-Wcast-function-type` warning gridcoin-community#2721 (@div72)
 - build: Use newest `config.{guess,sub}` available gridcoin-community#2722 (@div72)
 - refactor: use the try_lock result in TryEnter gridcoin-community#2723 (@div72)
 - Updates for file src/qt/locale/bitcoin_en.ts in pt_PT gridcoin-community#2726 (@gridcoin-community)
 - ci: do not silently fail gridcoin-community#2727 (@div72)
 - Properly include Boost Array header gridcoin-community#2730 (@theMarix)
 - build: Update depends zlib to 1.3.1 gridcoin-community#2734 (@jamescowens)
 - util: Enhance Fraction class overflow resistance gridcoin-community#2735 (@jamescowens)
 - refactor: Fix compilation warnings gridcoin-community#2737 (@jamescowens)
 - gui, util: Improve upgrade dialog gridcoin-community#2738 (@jamescowens)
 - util: Improve allocation class gridcoin-community#2740 (@jamescowens)
 - translations: translation updates for Miss Piggy release gridcoin-community#2745 (@jamescowens)

Removed
 - gui: Disable snapshot GUI action gridcoin-community#2700 (@jamescowens)
 - build, crypto, script: remove most of OpenSSL usage gridcoin-community#2705 (@div72)
 - util: remove WSL 1 workaround in fs gridcoin-community#2717 (@div72)

Fixed
 - diagnostics: fix missing arg in ETTS warning gridcoin-community#2684 (@div72)
 - misc: fix include guard in netaddress.h gridcoin-community#2695 (@div72)
 - gui: Fix expired pending beacon display gridcoin-community#2698 (@jamescowens)
 - consensus: Fix 20230904 testnet forking issue gridcoin-community#2703 (@jamescowens)
 - gui: Fix filter by type in Transaction View gridcoin-community#2708 (@jamescowens)
 - depends: make fontconfig build under clang-16 gridcoin-community#2718 (@div72)
 - diag: fix researcher mode check gridcoin-community#2725 (@div72)
 - gui: Add missing switch cases for ALREADY_IN_MEMPOOL gridcoin-community#2728 (@jamescowens)
 - beacon, registry: Fix beacon history stall gridcoin-community#2731 (@jamescowens)
 - build: Implement comp_double comparison function in certain tests gridcoin-community#2741 (@jamescowens)
 - ci: change Qt path in CMake CI gridcoin-community#2743 (@div72)
 - net: Correct -tor argument handling gridcoin-community#2744 (@jamescowens)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug refactor This is for refactoring (if also an enhancement, use that label too). test suite
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants