Preserve committed global configuration versions across protocol upgrades - #13841
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
tclinkenbeard-oai
left a comment
There was a problem hiding this comment.
Generated by Codex.
What is it trying to do?
Prevent protocol upgrades from applying stale global-configuration snapshots by preserving the committed configuration version and rejecting outdated GRV-proxy responses before they affect client state.
Is it correct?
Yes, based on inspection. The durable versionstamp decoding matches existing GRV-proxy behavior and historical 7.3/7.4 formats. The client rejects stale responses before applying configuration or invoking callbacks, while preserving cancellation, retries, and legacy sentinel behavior.
Both added regression tests exercise their intended failure modes.
Current-head clang-format, clang-tidy, Windows, builder, and cluster checks have all passed. No builds or tests were run during this independent review.
Are there bugs?
I did not find any correctness bugs.
Are there omissions?
The PR description does not mention the new client-side freshness check or its fdbclient_test regression. This is nonblocking.
Are there better ways of doing things?
No changes recommended. Checking freshness before mutating configuration is the appropriate fix.
Should this CL be LGTMd?
Yes, LGTM.
…ent-transaction-profiling-refresh-commit-version
Result of foundationdb-pr-clang-ide on Linux RHEL 9
|
Result of foundationdb-pr-macos-m1 on macOS 14.x
|
Result of foundationdb-pr-clang-arm on Linux RHEL 9
|
Result of foundationdb-pr-macos on macOS 14.x
|
Result of foundationdb-pr-clang on Linux RHEL 9
|
Result of foundationdb-pr on Linux RHEL 9
|
Result of foundationdb-pr-cluster-tests on Linux RHEL 9
|
Problem
After a protocol upgrade, global-configuration history can contain entries serialized by an older protocol. The cluster controller currently replaces that history with a maximum-version sentinel, allowing a refresh to accept an older cached GRV-proxy snapshot and permanently miss the latest committed configuration update.
For the paired
ClientTransactionProfilingCorrectnessrestart test, stale profiling settings can keep server roles writing profiling data after sampling is disabled, preventing the storage queue from draining.Change
Validation
fdbserver_clustercontroller_test: 30 tests passed.tests/restarting/from_7.3.29/ClientTransactionProfilingCorrectness-{1,2}.tomlrestart from 7.3.43: reproduced the failure before the change; both phases passed after the change.