-
Notifications
You must be signed in to change notification settings - Fork 21
Return when VCRs match in target_replace
#1661
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
base: main
Are you sure you want to change the base?
Conversation
Notifications to Nexus from an Upstairs are best-effort only: they can be missed or dropped, or suffer from all sorts of bad weather. For this reason, Nexus will poll an Upstairs (eg a Pantry attachment or Propolis disk backed by Crucible) to query the state of a repair (especially during region replacement). For a given VCR replacement request, Propolis will: - call `target_replace(original, replacement)` - update its stored VCR after the replacement has taken place. The next time that Nexus sends the same VCR replacement request, Propolis will end up calling what amounts to `target_replace(replacement, replacement)`, and before this commit that would fail with "The VCRs have no difference". Nexus will poll using with VCR replacement requests, so this commit changes `target_replace` to return `VcrMatches` instead of an error. Note that Nexus will _not_ consider this a signal that a replacement has completed.
A possible wrinkle: If Propolis is stuck in If Propolis is This could lead to Nexus attempting to perform multiple target replacements on the same volume because it could believe a replacement is done (read: the live repair has completed) before it is, or it would have to rely on a finished notification, which we've already said is best effort. |
In this situation, could crucible tell Nexus "the VCRs match what I have, and there is no repair in progress" Enum type? |
Also, just a side note for this issue. If we activate with 2/3 downstairs, that will mean that "activation" is no longer a signal that all the regions in a VCR are considered "replaced". |
Notifications to Nexus from an Upstairs are best-effort only: they can be missed or dropped, or suffer from all sorts of bad weather. For this reason, Nexus will poll an Upstairs (eg a Pantry attachment or Propolis disk backed by Crucible) to query the state of a repair (especially during region replacement).
For a given VCR replacement request, Propolis will:
target_replace(original, replacement)
The next time that Nexus sends the same VCR replacement request, Propolis will end up calling what amounts to
target_replace(replacement, replacement)
, and before this commit that would fail with "The VCRs have no difference".Nexus will poll using with VCR replacement requests, so this commit changes
target_replace
to returnVcrMatches
instead of an error. Note that Nexus will not consider this a signal that a replacement has completed.