ldout(m_image_ctx.cct, 10) << this << " notify request lock" << dendl;
bufferlist bl;
- ::encode(NotifyMessage(RequestLockPayload(get_client_id())), bl);
+ ::encode(NotifyMessage(RequestLockPayload(get_client_id(), false)), bl);
notify_lock_owner(std::move(bl), create_context_callback<
ImageWatcher, &ImageWatcher::handle_request_lock>(this));
}
ldout(m_image_ctx.cct, 10) << this << " queuing release of exclusive lock"
<< dendl;
- m_image_ctx.get_exclusive_lock_policy()->lock_requested(false);
+ m_image_ctx.get_exclusive_lock_policy()->lock_requested(payload.force);
}
return true;
}
void RequestLockPayload::encode(bufferlist &bl) const {
::encode(client_id, bl);
+ ::encode(force, bl);
}
void RequestLockPayload::decode(__u8 version, bufferlist::iterator &iter) {
if (version >= 2) {
::decode(client_id, iter);
}
+ if (version >= 3) {
+ ::decode(force, iter);
+ }
}
void RequestLockPayload::dump(Formatter *f) const {
f->open_object_section("client_id");
client_id.dump(f);
f->close_section();
+ f->dump_bool("force", force);
}
void HeaderUpdatePayload::encode(bufferlist &bl) const {
}
void NotifyMessage::encode(bufferlist& bl) const {
- ENCODE_START(2, 1, bl);
+ ENCODE_START(3, 1, bl);
boost::apply_visitor(EncodePayloadVisitor(bl), payload);
ENCODE_FINISH(bl);
}
void NotifyMessage::generate_test_instances(std::list<NotifyMessage *> &o) {
o.push_back(new NotifyMessage(AcquiredLockPayload(ClientId(1, 2))));
o.push_back(new NotifyMessage(ReleasedLockPayload(ClientId(1, 2))));
- o.push_back(new NotifyMessage(RequestLockPayload(ClientId(1, 2))));
+ o.push_back(new NotifyMessage(RequestLockPayload(ClientId(1, 2), true)));
o.push_back(new NotifyMessage(HeaderUpdatePayload()));
o.push_back(new NotifyMessage(AsyncProgressPayload(AsyncRequestId(ClientId(0, 1), 2), 3, 4)));
o.push_back(new NotifyMessage(AsyncCompletePayload(AsyncRequestId(ClientId(0, 1), 2), 3)));
static const bool CHECK_FOR_REFRESH = true;
ClientId client_id;
+ bool force = false;
RequestLockPayload() {}
- RequestLockPayload(const ClientId &client_id_) : client_id(client_id_) {}
+ RequestLockPayload(const ClientId &client_id_, bool force_)
+ : client_id(client_id_), force(force_) {
+ }
void encode(bufferlist &bl) const;
void decode(__u8 version, bufferlist::iterator &iter);