]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd/migration: close source image in OpenSourceImageRequest
authorIlya Dryomov <idryomov@gmail.com>
Fri, 26 Jul 2024 10:13:08 +0000 (12:13 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 30 Jul 2024 21:05:51 +0000 (23:05 +0200)
Currently, on errors in FormatInterface::open(), RawFormat disposes
of src_image_ctx, but QCOWFormat doesn't, which is a leak.  Rather than
having each format do it internally, do it in OpenSourceImageRequest.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
src/librbd/migration/OpenSourceImageRequest.cc
src/librbd/migration/RawFormat.cc
src/test/librbd/migration/test_mock_RawFormat.cc

index 4bd9241ec29126386572c75eba4697d0d8d5d1e1..b22900795b9d0a801672ca15ee82e09d473f1970 100644 (file)
@@ -143,8 +143,7 @@ void OpenSourceImageRequest<I>::open_format(
   if (r < 0) {
     lderr(m_cct) << "failed to build migration format handler: "
                  << cpp_strerror(r) << dendl;
-    (*m_src_image_ctx)->state->close();
-    finish(r);
+    close_image(r);
     return;
   }
 
@@ -161,7 +160,7 @@ void OpenSourceImageRequest<I>::handle_open_format(int r) {
   if (r < 0) {
     lderr(m_cct) << "failed to open migration format: " << cpp_strerror(r)
                  << dendl;
-    finish(r);
+    close_image(r);
     return;
   }
 
index 0b655d36882001f7a152767c8a9cc5b154465956..4d1f7158a03aa673a9aa798a757e01ccc02a5051 100644 (file)
@@ -108,8 +108,8 @@ void RawFormat<I>::handle_open(int r, Context* on_finish) {
       snapshot->close(gather_ctx->new_sub());
     }
 
-    m_image_ctx->state->close(new LambdaContext(
-      [r, on_finish=gather_ctx->new_sub()](int _) { on_finish->complete(r); }));
+    auto ctx = gather_ctx->new_sub();
+    ctx->complete(r);
 
     gather_ctx->activate();
     return;
index 6b69bf20c4bedcf6eddc79c64005450edc400290..16627628b5564dc827b77b603c79f6e63ea413a8 100644 (file)
@@ -125,13 +125,6 @@ public:
         })));
   }
 
-  void expect_close(MockTestImageCtx &mock_image_ctx, int r) {
-    EXPECT_CALL(*mock_image_ctx.state, close(_))
-      .WillOnce(Invoke([r](Context* ctx) {
-                  ctx->complete(r);
-                }));
-  }
-
   json_spirit::mObject json_object;
 };
 
@@ -174,7 +167,6 @@ TEST_F(TestMockMigrationRawFormat, OpenError) {
   expect_snapshot_open(*mock_snapshot_interface, -ENOENT);
 
   expect_snapshot_close(*mock_snapshot_interface, 0);
-  expect_close(mock_image_ctx, 0);
 
   MockRawFormat mock_raw_format(&mock_image_ctx, json_object,
                                 &mock_source_spec_builder);
@@ -203,7 +195,6 @@ TEST_F(TestMockMigrationRawFormat, OpenSnapshotError) {
 
   expect_snapshot_close(*mock_snapshot_interface_1, 0);
   expect_snapshot_close(*mock_snapshot_interface_head, 0);
-  expect_close(mock_image_ctx, 0);
 
   json_spirit::mArray snapshots;
   snapshots.push_back(json_spirit::mObject{});