-
Notifications
You must be signed in to change notification settings - Fork 19
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
Pantry region replacement can only handle a single failed region #1593
Comments
A possible fix for this could be allowing read only upstairs to activate with < 3 downstairs present. It still does not solve what to do with a VCR that has multiple sub volume needing repair (of which we don't currently have). |
RO activation will less than three issue: #1599 |
Allow a read only upstairs to activate with one a single downstairs present. In upstairs/src/upstairs.rs, I've added a check when a downstairs transitions to `WaitQuorum`. If we are read-only, then we can skip reconciliation and activate the upstairs. If we are already active (and read only), then a new downstairs can go to active. Added some tests and a bit of additional test framework to verify an upstairs can activate with only a single downstairs ready. This "fixes" the feature request in #1599 and may help with #1593
With #1608 fix in, and no support yet for For support of multiple sub-volumes, I'll create another issue for that as we have not |
When we have a disk that contains a downstairs that needs repair, and that disk is not attached to a running propolis, we will spin up an upstairs off the pantry and send that upstairs the VCR with the "fix" in it. We then rely on the upstairs to repair the new downstairs during the initial reconciliation process that happens on activation at startup.
This process is fine when there is just one bad downstairs in a VCR, and once the pantry upstairs has completed activation, we can tell nexus that all is good and the disk is repaired.
However, we don't have a simple disk in this case. We have a VCR with a RW sub-volume, and a tree of read only parents.
Consider this disk:
How the pantry (or propolis) works with multi level VCR is that it spins up an upstairs instance for each sub-volume (of which there is currently only ever one) and one upstairs for each level of the read only parent. In order for the pantry to consider a repair completed, all the upstairs instances have to make it through activation. In the VCR received by the pantry, the pantry does not know which sub-volume or read only parent level is the one that we want to repair, so it activates (or tries to activate) all of them.
And, here is the problem. While the upstairs instance that needed to do a repair will do so and activate, there are other parts of this VCR that also need to be repaired, (in the example above, any layer that has a
fd00:1122:3344:121:
address is on the expunged sled) and these instances will not be able to activate as they cannot contact the expunged sled.This also explains the dtrace output that found an upstairs instance with two WQ and one NEW:
This would be an upstairs instance that was still trying to contact a downstairs on an expunged sled.
Originally posted by @leftwo in #1591
The text was updated successfully, but these errors were encountered: