Repository navigation
perf(sdk): set-wide storage calls ask every member at once; the settle's steps logged - #1093
Merged
Merged
Conversation
…tle's steps are logged On the rig a SoFi trade's settle was 70-80 s of a ~127 s trade. It resolved in its first round; inside that one resolution, fast cell reads alternated with 6-12 s of silence. The silence was `SetClient` asking the five members one after another for every object read and put, index read and append, and cell read and put. A phone paid five round trips per object, and the settle's objects carry SPHINCS+ signatures. - Every `SetClient` call asks all members at once and keeps their answers in member order; nothing a member answers changes. - `fetch_verified` reads every member at once and keeps the first answer, in member order, whose bytes re-hash to the address. - The settle logs where each stage ends, and Core logs each generation a chain establishes. Nothing reads a clock; the log's timestamps time it. Test: `a_set_asks_every_member_at_once`. Each member sits behind a relay that holds its first connection until every member has one, so a client that asks the members in turn is never answered. Mutation: object reads in turn, red (1 of 5 members answered). Rig after the change: the same chain trade in 53 s (126-129 s before); the settle in 28.7 s (70-80 s before).
…(§6.59) The rig's settle timeline before and after, the change, its test and mutation control, and what remains: the owner walks from activation (A8, the owner's question), the chain walk's repeated cell reads over a sibling leg, and establishing the facts.
126 stale rows repinned, every one code-class. Evidence at 7a6c6e7: the 96 tests of those rows, all passed. `make requirement-map-intent` on CI's code map: 0 failing rows, 635 pinned, 0 failing pins.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The trade's settle, from the rig: the SDK's storage client asked the five storage members one after another for every object, index and cell. Now it asks them all at once. The settle's steps are logged.
Found on the rig (APK = main 0d36d20)
SetClient. Every object read and put, index read and append, and cell read and put asked the members in turn. The settle's objects carry SPHINCS+ signatures, so a phone paid five round trips per object.Change
SetClientcall asks all members at once and keeps their answers in member order. Nothing a member answers changes.fetch_verified. It reads every member at once and keeps the first answer, in member order, whose bytes re-hash to the address.ci/no_clock_and_no_json.shpasses); logcat's timestamps time each stage.Rig after the change (APK = this branch, same fleet)
The same kind of trade, a chain ERA → RIGT → HOP with no setup, realized at position 13 in 53 s, against 126–129 s. The quote took 20 s.
Tests (release, Postgres node fleet)
a_set_asks_every_member_at_once. Each member sits behind a relay that holds its first connection until every member has one, so a client that asks the members in turn is never answered. An object put directly is read through the relays from all five members, and a put through them is taken by all five.dsmsofi::, 237 passed, 0 failed.make lintexit 0; guard clean;conformance_evidence805 rows.What remains (§6.59), from the step logs
Pins
INTENT_PINS will be repinned once from this PR's Code map.