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

fix: sync: atomically switch chains when checkpointing #11595

Merged
merged 1 commit into from
Jan 26, 2024

Conversation

Stebalien
Copy link
Member

@Stebalien Stebalien commented Jan 23, 2024


Related Issues

F3

Proposed Changes

We can now atomically switch chains when checkpointing. Previously, we'd call SetHead followed by SetCheckpoint. Unfortunately, that's not atomic and the "head" could have reverted before we called SetCheckpoint (causing the latter to fail).

Now, we just call SetCheckpoint and let SetCheckpoint adjust our head. This changes the behavior of ChainStore.SetCheckpoint, but Syncer.SyncCheckpoint is the only caller anyways.

Checklist

Before you mark the PR ready for review, please make sure that:

  • Commits have a clear commit message.
  • PR title is in the form of of <PR type>: <area>: <change being made>
    • example: fix: mempool: Introduce a cache for valid signatures
    • PR type: fix, feat, build, chore, ci, docs, perf, refactor, revert, style, test
    • area, e.g. api, chain, state, market, mempool, multisig, networking, paych, proving, sealing, wallet, deps
  • If the PR affects users (e.g., new feature, bug fix, system requirements change), update the CHANGELOG.md and add details to the UNRELEASED section.
  • Tests exist for new functionality or change in behavior
  • CI is green

@Stebalien Stebalien requested a review from a team as a code owner January 23, 2024 20:04
@Stebalien Stebalien marked this pull request as draft January 23, 2024 20:15
@Stebalien Stebalien marked this pull request as ready for review January 23, 2024 20:28
We can now atomically switch chains when checkpointing. Previously,
we'd call `SetHead` followed by `SetCheckpoint`. Unfortunately, that's
not atomic and the "head" could have reverted before we called
`SetCheckpoint` (causing the latter to fail).

Now, we just call `SetCheckpoint` and let `SetCheckpoint` adjust our
head. This changes the behavior of `ChainStore.SetCheckpoint`, but
`Syncer.SyncCheckpoint` is the only caller anyways.
Copy link
Contributor

@Kubuxu Kubuxu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SGWM

@Stebalien Stebalien merged commit 6cbeb9a into master Jan 26, 2024
88 checks passed
@Stebalien Stebalien deleted the steb/checkpoint-race branch January 26, 2024 16:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants