template <typename Payload>
inline void operator()(const Payload &payload) const {
+ ::encode(static_cast<uint32_t>(Payload::NOTIFY_OP), m_bl);
payload.encode(m_bl);
}
template <typename Payload>
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);
}
}
void AcquiredLockPayload::encode(bufferlist &bl) const {
- ::encode(static_cast<uint32_t>(NOTIFY_OP_ACQUIRED_LOCK), bl);
::encode(client_id, bl);
}
}
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<uint32_t>(NOTIFY_OP_RELEASED_LOCK), bl);
::encode(client_id, bl);
}
}
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<uint32_t>(NOTIFY_OP_REQUEST_LOCK), bl);
::encode(client_id, bl);
}
}
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<uint32_t>(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<uint32_t>(NOTIFY_OP_ASYNC_PROGRESS), bl);
::encode(async_request_id, bl);
::encode(offset, bl);
::encode(total, bl);
}
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();
}
void AsyncCompletePayload::encode(bufferlist &bl) const {
- ::encode(static_cast<uint32_t>(NOTIFY_OP_ASYNC_COMPLETE), bl);
::encode(async_request_id, bl);
::encode(result, bl);
}
}
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();
}
void FlattenPayload::encode(bufferlist &bl) const {
- ::encode(static_cast<uint32_t>(NOTIFY_OP_FLATTEN), bl);
::encode(async_request_id, bl);
}
}
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<uint32_t>(NOTIFY_OP_RESIZE), bl);
::encode(size, bl);
::encode(async_request_id, bl);
}
}
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);
}
void SnapCreatePayload::encode(bufferlist &bl) const {
- ::encode(static_cast<uint32_t>(NOTIFY_OP_SNAP_CREATE), bl);
::encode(snap_name, bl);
}
}
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<uint32_t>(NOTIFY_OP_SNAP_RENAME), bl);
::encode(src_snap_id, bl);
::encode(dst_snap_name, bl);
}
}
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<uint32_t>(NOTIFY_OP_SNAP_REMOVE), bl);
::encode(snap_name, bl);
}
}
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<uint32_t>(NOTIFY_OP_REBUILD_OBJECT_MAP), bl);
::encode(async_request_id, bl);
}
}
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();
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;
};
struct AcquiredLockPayload {
+ static const NotifyOp NOTIFY_OP = NOTIFY_OP_ACQUIRED_LOCK;
+
ClientId client_id;
AcquiredLockPayload() {}
};
struct ReleasedLockPayload {
+ static const NotifyOp NOTIFY_OP = NOTIFY_OP_RELEASED_LOCK;
+
ClientId client_id;
ReleasedLockPayload() {}
};
struct RequestLockPayload {
+ static const NotifyOp NOTIFY_OP = NOTIFY_OP_REQUEST_LOCK;
+
ClientId client_id;
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_) {}
};
struct AsyncCompletePayload {
+ static const NotifyOp NOTIFY_OP = NOTIFY_OP_ASYNC_COMPLETE;
+
AsyncCompletePayload() {}
AsyncCompletePayload(const AsyncRequestId &id, int r)
: async_request_id(id), result(r) {}
};
struct FlattenPayload {
+ static const NotifyOp NOTIFY_OP = NOTIFY_OP_FLATTEN;
+
FlattenPayload() {}
FlattenPayload(const AsyncRequestId &id) : async_request_id(id) {}
};
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) {}
};
struct SnapCreatePayload {
+ static const NotifyOp NOTIFY_OP = NOTIFY_OP_SNAP_CREATE;
+
SnapCreatePayload() {}
SnapCreatePayload(const std::string &name) : snap_name(name) {}
};
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;
};
struct SnapRemovePayload {
+ static const NotifyOp NOTIFY_OP = NOTIFY_OP_SNAP_REMOVE;
+
SnapRemovePayload() {}
SnapRemovePayload(const std::string &name) : snap_name(name) {}
};
struct RebuildObjectMapPayload {
+ static const NotifyOp NOTIFY_OP = NOTIFY_OP_REBUILD_OBJECT_MAP;
+
RebuildObjectMapPayload() {}
RebuildObjectMapPayload(const AsyncRequestId &id) : async_request_id(id) {}
};
struct UnknownPayload {
+ static const NotifyOp NOTIFY_OP = static_cast<NotifyOp>(-1);
+
void encode(bufferlist &bl) const;
void decode(__u8 version, bufferlist::iterator &iter);
void dump(Formatter *f) const;
};
typedef boost::variant<AcquiredLockPayload,
- ReleasedLockPayload,
- RequestLockPayload,
- HeaderUpdatePayload,
- AsyncProgressPayload,
- AsyncCompletePayload,
- FlattenPayload,
- ResizePayload,
- SnapCreatePayload,
- SnapRenamePayload,
- SnapRemovePayload,
- RebuildObjectMapPayload,
- UnknownPayload> Payload;
+ ReleasedLockPayload,
+ RequestLockPayload,
+ HeaderUpdatePayload,
+ AsyncProgressPayload,
+ AsyncCompletePayload,
+ FlattenPayload,
+ ResizePayload,
+ SnapCreatePayload,
+ SnapRemovePayload,
+ SnapRenamePayload,
+ RebuildObjectMapPayload,
+ UnknownPayload> Payload;
struct NotifyMessage {
NotifyMessage() : payload(UnknownPayload()) {}