From 7d5d1aed5c92fdc98232ab49d5977b9067a90560 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Wed, 8 Jul 2015 15:57:15 -0400 Subject: [PATCH] librbd: simplify watch/notify type encoding Signed-off-by: Jason Dillaman --- src/librbd/WatchNotifyTypes.cc | 33 ++++----------------- src/librbd/WatchNotifyTypes.h | 52 +++++++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 40 deletions(-) diff --git a/src/librbd/WatchNotifyTypes.cc b/src/librbd/WatchNotifyTypes.cc index be5ce88923197..af2e434d3afa2 100644 --- a/src/librbd/WatchNotifyTypes.cc +++ b/src/librbd/WatchNotifyTypes.cc @@ -17,6 +17,7 @@ public: template inline void operator()(const Payload &payload) const { + ::encode(static_cast(Payload::NOTIFY_OP), m_bl); payload.encode(m_bl); } @@ -45,6 +46,8 @@ public: template inline void operator()(const Payload &payload) const { + NotifyOp notify_op = Payload::NOTIFY_OP; + m_formatter->dump_string("notify_op", stringify(notify_op)); payload.dump(m_formatter); } @@ -87,7 +90,6 @@ void AsyncRequestId::dump(Formatter *f) const { } void AcquiredLockPayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_ACQUIRED_LOCK), bl); ::encode(client_id, bl); } @@ -98,14 +100,12 @@ void AcquiredLockPayload::decode(__u8 version, bufferlist::iterator &iter) { } void AcquiredLockPayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_ACQUIRED_LOCK)); f->open_object_section("client_id"); client_id.dump(f); f->close_section(); } void ReleasedLockPayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_RELEASED_LOCK), bl); ::encode(client_id, bl); } @@ -116,14 +116,12 @@ void ReleasedLockPayload::decode(__u8 version, bufferlist::iterator &iter) { } void ReleasedLockPayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_RELEASED_LOCK)); f->open_object_section("client_id"); client_id.dump(f); f->close_section(); } void RequestLockPayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_REQUEST_LOCK), bl); ::encode(client_id, bl); } @@ -134,25 +132,21 @@ void RequestLockPayload::decode(__u8 version, bufferlist::iterator &iter) { } void RequestLockPayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_REQUEST_LOCK)); f->open_object_section("client_id"); client_id.dump(f); f->close_section(); } void HeaderUpdatePayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_HEADER_UPDATE), bl); } void HeaderUpdatePayload::decode(__u8 version, bufferlist::iterator &iter) { } void HeaderUpdatePayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_HEADER_UPDATE)); } void AsyncProgressPayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_ASYNC_PROGRESS), bl); ::encode(async_request_id, bl); ::encode(offset, bl); ::encode(total, bl); @@ -165,7 +159,6 @@ void AsyncProgressPayload::decode(__u8 version, bufferlist::iterator &iter) { } void AsyncProgressPayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_ASYNC_PROGRESS)); f->open_object_section("async_request_id"); async_request_id.dump(f); f->close_section(); @@ -174,7 +167,6 @@ void AsyncProgressPayload::dump(Formatter *f) const { } void AsyncCompletePayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_ASYNC_COMPLETE), bl); ::encode(async_request_id, bl); ::encode(result, bl); } @@ -185,7 +177,6 @@ void AsyncCompletePayload::decode(__u8 version, bufferlist::iterator &iter) { } void AsyncCompletePayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_ASYNC_COMPLETE)); f->open_object_section("async_request_id"); async_request_id.dump(f); f->close_section(); @@ -193,7 +184,6 @@ void AsyncCompletePayload::dump(Formatter *f) const { } void FlattenPayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_FLATTEN), bl); ::encode(async_request_id, bl); } @@ -202,14 +192,12 @@ void FlattenPayload::decode(__u8 version, bufferlist::iterator &iter) { } void FlattenPayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_FLATTEN)); f->open_object_section("async_request_id"); async_request_id.dump(f); f->close_section(); } void ResizePayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_RESIZE), bl); ::encode(size, bl); ::encode(async_request_id, bl); } @@ -220,7 +208,6 @@ void ResizePayload::decode(__u8 version, bufferlist::iterator &iter) { } void ResizePayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_RESIZE)); f->dump_unsigned("size", size); f->open_object_section("async_request_id"); async_request_id.dump(f); @@ -228,7 +215,6 @@ void ResizePayload::dump(Formatter *f) const { } void SnapCreatePayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_SNAP_CREATE), bl); ::encode(snap_name, bl); } @@ -237,12 +223,10 @@ void SnapCreatePayload::decode(__u8 version, bufferlist::iterator &iter) { } void SnapCreatePayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_SNAP_CREATE)); f->dump_string("snap_name", snap_name); } void SnapRenamePayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_SNAP_RENAME), bl); ::encode(src_snap_id, bl); ::encode(dst_snap_name, bl); } @@ -253,12 +237,10 @@ void SnapRenamePayload::decode(__u8 version, bufferlist::iterator &iter) { } void SnapRenamePayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_SNAP_RENAME)); f->dump_unsigned("src_snap_id", src_snap_id); f->dump_string("dst_snap_name", dst_snap_name); } void SnapRemovePayload::encode(bufferlist &bl) const { - ::encode(static_cast(NOTIFY_OP_SNAP_REMOVE), bl); ::encode(snap_name, bl); } @@ -267,12 +249,10 @@ void SnapRemovePayload::decode(__u8 version, bufferlist::iterator &iter) { } void SnapRemovePayload::dump(Formatter *f) const { - f->dump_string("notify_op", stringify(NOTIFY_OP_SNAP_REMOVE)); 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); } @@ -281,7 +261,6 @@ void RebuildObjectMapPayload::decode(__u8 version, bufferlist::iterator &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(); @@ -341,12 +320,12 @@ void NotifyMessage::decode(bufferlist::iterator& iter) { case NOTIFY_OP_SNAP_REMOVE: payload = SnapRemovePayload(); break; - case NOTIFY_OP_REBUILD_OBJECT_MAP: - payload = RebuildObjectMapPayload(); - break; case NOTIFY_OP_SNAP_RENAME: payload = SnapRenamePayload(); break; + case NOTIFY_OP_REBUILD_OBJECT_MAP: + payload = RebuildObjectMapPayload(); + break; default: payload = UnknownPayload(); break; diff --git a/src/librbd/WatchNotifyTypes.h b/src/librbd/WatchNotifyTypes.h index b81fc619461f5..eaa3305e021c4 100644 --- a/src/librbd/WatchNotifyTypes.h +++ b/src/librbd/WatchNotifyTypes.h @@ -88,6 +88,8 @@ enum NotifyOp { }; struct AcquiredLockPayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_ACQUIRED_LOCK; + ClientId client_id; AcquiredLockPayload() {} @@ -99,6 +101,8 @@ struct AcquiredLockPayload { }; struct ReleasedLockPayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_RELEASED_LOCK; + ClientId client_id; ReleasedLockPayload() {} @@ -110,6 +114,8 @@ struct ReleasedLockPayload { }; struct RequestLockPayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_REQUEST_LOCK; + ClientId client_id; RequestLockPayload() {} @@ -121,12 +127,16 @@ struct RequestLockPayload { }; struct HeaderUpdatePayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_HEADER_UPDATE; + void encode(bufferlist &bl) const; void decode(__u8 version, bufferlist::iterator &iter); void dump(Formatter *f) const; }; struct AsyncProgressPayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_ASYNC_PROGRESS; + AsyncProgressPayload() : offset(0), total(0) {} AsyncProgressPayload(const AsyncRequestId &id, uint64_t offset_, uint64_t total_) : async_request_id(id), offset(offset_), total(total_) {} @@ -141,6 +151,8 @@ struct AsyncProgressPayload { }; struct AsyncCompletePayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_ASYNC_COMPLETE; + AsyncCompletePayload() {} AsyncCompletePayload(const AsyncRequestId &id, int r) : async_request_id(id), result(r) {} @@ -154,6 +166,8 @@ struct AsyncCompletePayload { }; struct FlattenPayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_FLATTEN; + FlattenPayload() {} FlattenPayload(const AsyncRequestId &id) : async_request_id(id) {} @@ -165,6 +179,8 @@ struct FlattenPayload { }; struct ResizePayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_RESIZE; + ResizePayload() : size(0) {} ResizePayload(uint64_t size_, const AsyncRequestId &id) : size(size_), async_request_id(id) {} @@ -178,6 +194,8 @@ struct ResizePayload { }; struct SnapCreatePayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_SNAP_CREATE; + SnapCreatePayload() {} SnapCreatePayload(const std::string &name) : snap_name(name) {} @@ -189,8 +207,10 @@ struct SnapCreatePayload { }; struct SnapRenamePayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_SNAP_RENAME; + SnapRenamePayload() {} - SnapRenamePayload(const uint64_t &src_snap_id, const std::string &dst_name) + SnapRenamePayload(const uint64_t &src_snap_id, const std::string &dst_name) : src_snap_id(src_snap_id), dst_snap_name(dst_name) {} uint64_t src_snap_id; @@ -202,6 +222,8 @@ struct SnapRenamePayload { }; struct SnapRemovePayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_SNAP_REMOVE; + SnapRemovePayload() {} SnapRemovePayload(const std::string &name) : snap_name(name) {} @@ -213,6 +235,8 @@ struct SnapRemovePayload { }; struct RebuildObjectMapPayload { + static const NotifyOp NOTIFY_OP = NOTIFY_OP_REBUILD_OBJECT_MAP; + RebuildObjectMapPayload() {} RebuildObjectMapPayload(const AsyncRequestId &id) : async_request_id(id) {} @@ -224,24 +248,26 @@ struct RebuildObjectMapPayload { }; struct UnknownPayload { + static const NotifyOp NOTIFY_OP = static_cast(-1); + void encode(bufferlist &bl) const; void decode(__u8 version, bufferlist::iterator &iter); void dump(Formatter *f) const; }; typedef boost::variant Payload; + ReleasedLockPayload, + RequestLockPayload, + HeaderUpdatePayload, + AsyncProgressPayload, + AsyncCompletePayload, + FlattenPayload, + ResizePayload, + SnapCreatePayload, + SnapRemovePayload, + SnapRenamePayload, + RebuildObjectMapPayload, + UnknownPayload> Payload; struct NotifyMessage { NotifyMessage() : payload(UnknownPayload()) {} -- 2.39.5