mirror of
https://github.com/ceph/ceph
synced 2025-02-23 11:07:35 +00:00
librbd: don't call refresh from mirror::GetInfoRequest state machine
Fixes: https://tracker.ceph.com/issues/43589 Signed-off-by: Mykola Golub <mgolub@suse.com>
This commit is contained in:
parent
26c66630bd
commit
da46798ab3
@ -647,11 +647,26 @@ void Mirror<I>::image_get_info(I *ictx, mirror_image_info_t *mirror_image_info,
|
||||
CephContext *cct = ictx->cct;
|
||||
ldout(cct, 20) << "ictx=" << ictx << dendl;
|
||||
|
||||
auto ctx = new C_ImageGetInfo(mirror_image_info, nullptr, on_finish);
|
||||
auto req = mirror::GetInfoRequest<I>::create(*ictx, &ctx->mirror_image,
|
||||
&ctx->promotion_state,
|
||||
ctx);
|
||||
req->send();
|
||||
auto on_refresh = new LambdaContext(
|
||||
[ictx, mirror_image_info, on_finish](int r) {
|
||||
if (r < 0) {
|
||||
lderr(ictx->cct) << "refresh failed: " << cpp_strerror(r) << dendl;
|
||||
on_finish->complete(r);
|
||||
return;
|
||||
}
|
||||
|
||||
auto ctx = new C_ImageGetInfo(mirror_image_info, nullptr, on_finish);
|
||||
auto req = mirror::GetInfoRequest<I>::create(*ictx, &ctx->mirror_image,
|
||||
&ctx->promotion_state,
|
||||
ctx);
|
||||
req->send();
|
||||
});
|
||||
|
||||
if (ictx->state->is_refresh_required()) {
|
||||
ictx->state->refresh(on_refresh);
|
||||
} else {
|
||||
on_refresh->complete(0);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename I>
|
||||
|
@ -23,35 +23,6 @@ using librbd::util::create_rados_callback;
|
||||
|
||||
template <typename I>
|
||||
void GetInfoRequest<I>::send() {
|
||||
refresh_image();
|
||||
}
|
||||
|
||||
template <typename I>
|
||||
void GetInfoRequest<I>::refresh_image() {
|
||||
if (!m_image_ctx.state->is_refresh_required()) {
|
||||
get_mirror_image();
|
||||
return;
|
||||
}
|
||||
|
||||
CephContext *cct = m_image_ctx.cct;
|
||||
ldout(cct, 20) << dendl;
|
||||
|
||||
auto ctx = create_context_callback<
|
||||
GetInfoRequest<I>, &GetInfoRequest<I>::handle_refresh_image>(this);
|
||||
m_image_ctx.state->refresh(ctx);
|
||||
}
|
||||
|
||||
template <typename I>
|
||||
void GetInfoRequest<I>::handle_refresh_image(int r) {
|
||||
CephContext *cct = m_image_ctx.cct;
|
||||
ldout(cct, 20) << "r=" << r << dendl;
|
||||
|
||||
if (r < 0) {
|
||||
lderr(cct) << "failed to refresh image: " << cpp_strerror(r) << dendl;
|
||||
finish(r);
|
||||
return;
|
||||
}
|
||||
|
||||
get_mirror_image();
|
||||
}
|
||||
|
||||
|
@ -43,9 +43,6 @@ private:
|
||||
* <start>
|
||||
* |
|
||||
* v
|
||||
* REFRESH
|
||||
* |
|
||||
* v
|
||||
* GET_MIRROR_IMAGE
|
||||
* |
|
||||
* v
|
||||
@ -65,9 +62,6 @@ private:
|
||||
bufferlist m_out_bl;
|
||||
std::string m_mirror_uuid;
|
||||
|
||||
void refresh_image();
|
||||
void handle_refresh_image(int r);
|
||||
|
||||
void get_mirror_image();
|
||||
void handle_get_mirror_image(int r);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user