From: Jason Dillaman Date: Wed, 18 Mar 2015 14:21:17 +0000 (-0400) Subject: librbd: add new notify payload for rebuild object map X-Git-Tag: v9.0.1~149^2~22 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a8f828b8b82a05365a1609f18534a89cca990285;p=ceph.git librbd: add new notify payload for rebuild object map The request will be sent to the client which owns the exclusive lock to rebuild the object map for the current image HEAD. Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/WatchNotifyTypes.cc b/src/librbd/WatchNotifyTypes.cc index 1f02ac1330b8..91936b360ce7 100644 --- a/src/librbd/WatchNotifyTypes.cc +++ b/src/librbd/WatchNotifyTypes.cc @@ -241,6 +241,22 @@ void SnapCreatePayload::dump(Formatter *f) const { f->dump_string("snap_name", snap_name); } +void RebuildObjectMapPayload::encode(bufferlist &bl) const { + ::encode(static_cast(NOTIFY_OP_REBUILD_OBJECT_MAP), bl); + ::encode(async_request_id, bl); +} + +void RebuildObjectMapPayload::decode(__u8 version, bufferlist::iterator &iter) { + ::decode(async_request_id, iter); +} + +void RebuildObjectMapPayload::dump(Formatter *f) const { + f->dump_string("notify_op", stringify(NOTIFY_OP_REBUILD_OBJECT_MAP)); + f->open_object_section("async_request_id"); + async_request_id.dump(f); + f->close_section(); +} + void UnknownPayload::encode(bufferlist &bl) const { assert(false); } @@ -292,6 +308,9 @@ void NotifyMessage::decode(bufferlist::iterator& iter) { case NOTIFY_OP_SNAP_CREATE: payload = SnapCreatePayload(); break; + case NOTIFY_OP_REBUILD_OBJECT_MAP: + payload = RebuildObjectMapPayload(); + break; default: payload = UnknownPayload(); break; @@ -315,6 +334,7 @@ void NotifyMessage::generate_test_instances(std::list &o) { o.push_back(new NotifyMessage(FlattenPayload(AsyncRequestId(ClientId(0, 1), 2)))); o.push_back(new NotifyMessage(ResizePayload(123, AsyncRequestId(ClientId(0, 1), 2)))); o.push_back(new NotifyMessage(SnapCreatePayload("foo"))); + o.push_back(new NotifyMessage(RebuildObjectMapPayload(AsyncRequestId(ClientId(0, 1), 2)))); } void ResponseMessage::encode(bufferlist& bl) const { @@ -372,6 +392,9 @@ std::ostream &operator<<(std::ostream &out, case NOTIFY_OP_SNAP_CREATE: out << "SnapCreate"; break; + case NOTIFY_OP_REBUILD_OBJECT_MAP: + out << "RebuildObjectMap"; + break; default: out << "Unknown (" << static_cast(op) << ")"; break; diff --git a/src/librbd/WatchNotifyTypes.h b/src/librbd/WatchNotifyTypes.h index 2b3c34b61633..2dd6d1d53fae 100644 --- a/src/librbd/WatchNotifyTypes.h +++ b/src/librbd/WatchNotifyTypes.h @@ -73,15 +73,16 @@ struct AsyncRequestId { }; enum NotifyOp { - NOTIFY_OP_ACQUIRED_LOCK = 0, - NOTIFY_OP_RELEASED_LOCK = 1, - NOTIFY_OP_REQUEST_LOCK = 2, - NOTIFY_OP_HEADER_UPDATE = 3, - NOTIFY_OP_ASYNC_PROGRESS = 4, - NOTIFY_OP_ASYNC_COMPLETE = 5, - NOTIFY_OP_FLATTEN = 6, - NOTIFY_OP_RESIZE = 7, - NOTIFY_OP_SNAP_CREATE = 8 + NOTIFY_OP_ACQUIRED_LOCK = 0, + NOTIFY_OP_RELEASED_LOCK = 1, + NOTIFY_OP_REQUEST_LOCK = 2, + NOTIFY_OP_HEADER_UPDATE = 3, + NOTIFY_OP_ASYNC_PROGRESS = 4, + NOTIFY_OP_ASYNC_COMPLETE = 5, + NOTIFY_OP_FLATTEN = 6, + NOTIFY_OP_RESIZE = 7, + NOTIFY_OP_SNAP_CREATE = 8, + NOTIFY_OP_REBUILD_OBJECT_MAP = 9 }; struct AcquiredLockPayload { @@ -179,7 +180,18 @@ struct SnapCreatePayload { SnapCreatePayload(const std::string &name) : snap_name(name) {} std::string snap_name; - + + void encode(bufferlist &bl) const; + void decode(__u8 version, bufferlist::iterator &iter); + void dump(Formatter *f) const; +}; + +struct RebuildObjectMapPayload { + RebuildObjectMapPayload() {} + RebuildObjectMapPayload(const AsyncRequestId &id) : async_request_id(id) {} + + AsyncRequestId async_request_id; + void encode(bufferlist &bl) const; void decode(__u8 version, bufferlist::iterator &iter); void dump(Formatter *f) const; @@ -200,6 +212,7 @@ typedef boost::variant Payload; struct NotifyMessage {