osd: Correct scrub analysis for optimised EC#62952
Conversation
|
(I'll try to get to this on Sunday) |
|
|
||
| // used to verify our "cleanliness" before scrubbing | ||
| virtual bool is_waiting_for_unreadable_object() const = 0; | ||
| virtual bool get_is_nonprimary_shard(const pg_shard_t &pg_shard) const = 0; |
There was a problem hiding this comment.
Will add. The nonprimary shard is one that can never be a primary (or by implication authoritative)
There was a problem hiding this comment.
I may be forgetting something here, but: why can't it be authoritative? in replicated pools - it surely can.
There was a problem hiding this comment.
The nonprimary shards in new EC contain an old OI and do not have the snapset attributes, as such I don't think they can be authoritative.
There was a problem hiding this comment.
Does that mean that we do not have any redundancy regarding the snapset attribute?
There was a problem hiding this comment.
The snapset (and all other xattrs) is on shard 0 and all the parity shards. This gives the same redundancy as the data (i.e. m failures for a k+m EC)
|
@aainscow - this is marked as draft, so, just to be sure: this is the correct PR to review? thanks |
Yes please. I marked as draft as I was getting some scrub errors, but it turns out they were fast-EC bugs, rather than scrubs. |
|
Can we implement the new mechanism for all EC PGs, "optimized" or not? |
| const bufferlist& auth_bl = auth_attr->second; | ||
| if (auth_oi.get_version_for_shard(shard.shard) == auth_oi.version) { | ||
| // The expected version of the shard and the authoritative shard are the | ||
| // same, so we can do a simple memcmp of the OI attr. |
There was a problem hiding this comment.
Might be worth a separate PR (which can be backported)
There was a problem hiding this comment.
The shard_version in OI does not exist pre-tentacle. I think this whole PR needs backporting to tentacle.
I can split out if you want, however.
There was a problem hiding this comment.
I think it's a good idea. Not just for backporting, but it would help there for sure.
I am not sure what is useful for non-optimized EC in here. All the non-primary changes are new-EC specific, as is the shard versioning. |
…xactly match. With optimised EC, some shards do not receive every IO updates (partial writes). In such cases, the OI on these "nonprimary" shards is expected to be out of date. This commit allows for the mismatch and instead checks that the OI can be decoded and checks the version against the shard versions in the authoritative OI. Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
9bc8d43 to
ab5284f
Compare
|
@aainscow - I am still missing something. isn't it that not_usable_no_err is set (also) for the replicas in replicated pools? |
This is the only thing to set not_usable_no_err: nonprimary can only be true for new EC profiles. So I don't agree, or am I looking at the wrong thing? |
32cc9bf to
8c7e79f
Compare
|
I believe open comments should now be addressed. Requesting re-review. |
|
LGTM. I have emailed @athanatos , and asked him to go over this PR and the other one. |
|
jenkins test make check arm64 |
This is a collection of minor changes to make scrub compatible with new EC. Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
8c7e79f to
b762e98
Compare
athanatos
left a comment
There was a problem hiding this comment.
Seems reasonable to me.
|
jenkins test make check arm64 |
|
jenkins retest this please Looks like this doesn't clear the default thing! |
is not marked as 'required'. Just ignore it |
This PR changes the scrub code, adjusting for new EC. It does not attempt to fix any bugs which were detected (these will come in EC PRs).
There are two major areas where optimised EC differs:
NOTE: this PR is NOT implementing any deep-scrub CRC checking, this will be a later PR.
Tracker: https://tracker.ceph.com/issues/71285
Contribution Guidelines
To sign and title your commits, please refer to Submitting Patches to Ceph.
If you are submitting a fix for a stable branch (e.g. "quincy"), please refer to Submitting Patches to Ceph - Backports for the proper workflow.
When filling out the below checklist, you may click boxes directly in the GitHub web UI. When entering or editing the entire PR message in the GitHub web UI editor, you may also select a checklist item by adding an
xbetween the brackets:[x]. Spaces and capitalization matter when checking off items this way.Checklist
Show available Jenkins commands
jenkins test classic perfJenkins Job | Jenkins Job Definitionjenkins test crimson perfJenkins Job | Jenkins Job Definitionjenkins test signedJenkins Job | Jenkins Job Definitionjenkins test make checkJenkins Job | Jenkins Job Definitionjenkins test make check arm64Jenkins Job | Jenkins Job Definitionjenkins test submodulesJenkins Job | Jenkins Job Definitionjenkins test dashboardJenkins Job | Jenkins Job Definitionjenkins test dashboard cephadmJenkins Job | Jenkins Job Definitionjenkins test apiJenkins Job | Jenkins Job Definitionjenkins test docsReadTheDocs | Github Workflow Definitionjenkins test ceph-volume allJenkins Jobs | Jenkins Jobs Definitionjenkins test windowsJenkins Job | Jenkins Job Definitionjenkins test rook e2eJenkins Job | Jenkins Job Definition