Skip to content

fix: fulfill snapshot promise on leadership change#6141

Open
Qian-Cheng-nju wants to merge 2 commits intovesoft-inc:masterfrom
specula-org:fix/snapshot-promise-unfulfilled
Open

fix: fulfill snapshot promise on leadership change#6141
Qian-Cheng-nju wants to merge 2 commits intovesoft-inc:masterfrom
specula-org:fix/snapshot-promise-unfulfilled

Conversation

@Qian-Cheng-nju
Copy link
Copy Markdown

@Qian-Cheng-nju Qian-Cheng-nju commented Mar 25, 2026

Hi, thanks for nebula!

We noticed an issue in SnapshotManager::sendSnapshot() and put together a fix — would appreciate a look when you get a chance.

When sendSnapshot() detects that leadership has changed (line 42-46), it returns early without fulfilling the promise p created at line 33. The promise destructor then triggers a BrokenPromise on the future side, but Host's cleanup code (sendingSnapshot_ = false at line 372-373) is only registered via .thenValue(), so it never runs on error. The Host ends up permanently stuck with sendingSnapshot_=true and can't send anything to that peer anymore.

The fix just adds p.setValue(Status::Error("Leader changed")) before the early return.

We also included a standalone reproduction (tests/nb5_snapshot_promise_wedge.cpp) that shows the wedging behavior using std::promise/std::future.

@CLAassistant
Copy link
Copy Markdown

CLAassistant commented Mar 25, 2026

CLA assistant check
All committers have signed the CLA.

@Qian-Cheng-nju
Copy link
Copy Markdown
Author

recheck

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