Merge pull request #4589 from ceph/wip-11549

librbd: ignore lack of support for metadata on older OSDs

Reviewed-by: Josh Durgin <jdurgin@redhat.com>
This commit is contained in:
Josh Durgin 2015-05-06 14:20:30 -07:00
commit 1c8978fdbd
2 changed files with 19 additions and 14 deletions

View File

@ -847,8 +847,11 @@ namespace librbd {
map<string, bufferlist> pairs, res;
r = cls_client::metadata_list(&md_ctx, header_oid, start, max_conf_items,
&pairs);
if (r < 0) {
lderr(cct) << __func__ << " couldn't list conf metadatas: " << r
if (r == -EOPNOTSUPP || r == -EIO) {
ldout(cct, 10) << "config metadata not supported by OSD" << dendl;
break;
} else if (r < 0) {
lderr(cct) << __func__ << " couldn't list config metadata: " << r
<< dendl;
break;
}

View File

@ -1417,14 +1417,15 @@ reprotect_and_return_err:
}
r = cls_client::metadata_list(&p_ioctx, p_imctx->header_oid, "", 0, &pairs);
if (r < 0) {
if (r < 0 && r != -EOPNOTSUPP && r != -EIO) {
lderr(cct) << "couldn't list metadata: " << r << dendl;
goto err_close_child;
}
r = cls_client::metadata_set(&c_ioctx, c_imctx->header_oid, pairs);
if (r < 0) {
lderr(cct) << "couldn't set metadata: " << r << dendl;
goto err_close_child;
} else if (r == 0 && !pairs.empty()) {
r = cls_client::metadata_set(&c_ioctx, c_imctx->header_oid, pairs);
if (r < 0) {
lderr(cct) << "couldn't set metadata: " << r << dendl;
goto err_close_child;
}
}
p_imctx->md_lock.get_write();
@ -2658,14 +2659,15 @@ reprotect_and_return_err:
map<string, bufferlist> pairs;
r = cls_client::metadata_list(&src->md_ctx, src->header_oid, "", 0, &pairs);
if (r < 0) {
if (r < 0 && r != -EOPNOTSUPP && r != -EIO) {
lderr(cct) << "couldn't list metadata: " << r << dendl;
return r;
}
r = cls_client::metadata_set(&dest->md_ctx, dest->header_oid, pairs);
if (r < 0) {
lderr(cct) << "couldn't set metadata: " << r << dendl;
return r;
} else if (r == 0 && !pairs.empty()) {
r = cls_client::metadata_set(&dest->md_ctx, dest->header_oid, pairs);
if (r < 0) {
lderr(cct) << "couldn't set metadata: " << r << dendl;
return r;
}
}
SimpleThrottle throttle(src->concurrent_management_ops, false);