mirror of
https://github.com/ceph/ceph
synced 2024-12-18 01:16:55 +00:00
HashIndex: sync top directory during start_split,merge,col_split
Otherwise, the links might be ordered after the in progress operation tag write. We need the in progress operation tag to correctly recover from an interrupted merge, split, or col_split. Fixes: #5180 Backport: cuttlefish, bobtail Signed-off-by: Samuel Just <sam.just@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
This commit is contained in:
parent
8c1c2d98c6
commit
5bca9c38ef
@ -368,21 +368,30 @@ int HashIndex::start_col_split(const vector<string> &path) {
|
||||
bufferlist bl;
|
||||
InProgressOp op_tag(InProgressOp::COL_SPLIT, path);
|
||||
op_tag.encode(bl);
|
||||
return add_attr_path(vector<string>(), IN_PROGRESS_OP_TAG, bl);
|
||||
int r = add_attr_path(vector<string>(), IN_PROGRESS_OP_TAG, bl);
|
||||
if (r < 0)
|
||||
return r;
|
||||
return fsync_dir(vector<string>());
|
||||
}
|
||||
|
||||
int HashIndex::start_split(const vector<string> &path) {
|
||||
bufferlist bl;
|
||||
InProgressOp op_tag(InProgressOp::SPLIT, path);
|
||||
op_tag.encode(bl);
|
||||
return add_attr_path(vector<string>(), IN_PROGRESS_OP_TAG, bl);
|
||||
int r = add_attr_path(vector<string>(), IN_PROGRESS_OP_TAG, bl);
|
||||
if (r < 0)
|
||||
return r;
|
||||
return fsync_dir(vector<string>());
|
||||
}
|
||||
|
||||
int HashIndex::start_merge(const vector<string> &path) {
|
||||
bufferlist bl;
|
||||
InProgressOp op_tag(InProgressOp::MERGE, path);
|
||||
op_tag.encode(bl);
|
||||
return add_attr_path(vector<string>(), IN_PROGRESS_OP_TAG, bl);
|
||||
int r = add_attr_path(vector<string>(), IN_PROGRESS_OP_TAG, bl);
|
||||
if (r < 0)
|
||||
return r;
|
||||
return fsync_dir(vector<string>());
|
||||
}
|
||||
|
||||
int HashIndex::end_split_or_merge(const vector<string> &path) {
|
||||
|
Loading…
Reference in New Issue
Block a user