}
template <typename I>
-uint64_t ImageWatcher<I>::notify_quiesce(ProgressContext &prog_ctx,
- Context *on_finish) {
- uint64_t request_id = m_image_ctx.operations->reserve_async_request_id();
+void ImageWatcher<I>::notify_quiesce(uint64_t *request_id,
+ ProgressContext &prog_ctx,
+ Context *on_finish) {
+ *request_id = m_image_ctx.operations->reserve_async_request_id();
ldout(m_image_ctx.cct, 10) << this << " " << __func__ << ": request_id="
<< request_id << dendl;
- AsyncRequestId async_request_id(get_client_id(), request_id);
+ AsyncRequestId async_request_id(get_client_id(), *request_id);
auto attempts = m_image_ctx.config.template get_val<uint64_t>(
"rbd_quiesce_notification_attempts");
notify_quiesce(async_request_id, attempts, prog_ctx, on_finish);
-
- return request_id;
}
template <typename I>
static void notify_header_update(librados::IoCtx &io_ctx,
const std::string &oid);
- uint64_t notify_quiesce(ProgressContext &prog_ctx, Context *on_finish);
+ void notify_quiesce(uint64_t *request_id, ProgressContext &prog_ctx,
+ Context *on_finish);
void notify_unquiesce(uint64_t request_id, Context *on_finish);
private:
for (int i = 0; i < image_count; ++i) {
auto ictx = ictxs[i];
- (*requests)[i] = ictx->image_watcher->notify_quiesce(prog_ctx,
- &on_finishes[i]);
+ ictx->image_watcher->notify_quiesce(&(*requests)[i], prog_ctx,
+ &on_finishes[i]);
}
int ret_code = 0;
CephContext *cct = image_ctx.cct;
ldout(cct, 5) << this << " " << __func__ << dendl;
- m_request_id = image_ctx.image_watcher->notify_quiesce(
- m_prog_ctx, create_async_context_callback(
+ image_ctx.image_watcher->notify_quiesce(
+ &m_request_id, m_prog_ctx, create_async_context_callback(
image_ctx, create_context_callback<SnapshotCreateRequest<I>,
&SnapshotCreateRequest<I>::handle_notify_quiesce>(this)));
}
MOCK_METHOD0(notify_released_lock, void());
MOCK_METHOD0(notify_request_lock, void());
- MOCK_METHOD2(notify_quiesce, uint64_t(ProgressContext &, Context *));
+ MOCK_METHOD3(notify_quiesce, void(uint64_t *, ProgressContext &, Context *));
MOCK_METHOD2(notify_unquiesce, void(uint64_t, Context *));
};
typedef mirror::snapshot::SetImageStateRequest<MockImageCtx> MockSetImageStateRequest;
void expect_notify_quiesce(MockImageCtx &mock_image_ctx, int r) {
- EXPECT_CALL(*mock_image_ctx.image_watcher, notify_quiesce(_, _))
- .WillOnce(DoAll(WithArg<1>(CompleteContext(
- r, mock_image_ctx.image_ctx->op_work_queue)),
- Return(0)));
+ EXPECT_CALL(*mock_image_ctx.image_watcher, notify_quiesce(_, _, _))
+ .WillOnce(WithArg<2>(CompleteContext(
+ r, mock_image_ctx.image_ctx->op_work_queue)));
}
void expect_block_writes(MockImageCtx &mock_image_ctx) {