Skip to content

Commit

Permalink
F #937: Do not release image if other disk uses it (#2262)
Browse files Browse the repository at this point in the history
  • Loading branch information
Pavel Czerný authored Aug 25, 2022
1 parent 83b2aff commit 015d842
Showing 1 changed file with 16 additions and 6 deletions.
22 changes: 16 additions & 6 deletions src/vm/VirtualMachinePool.cc
Original file line number Diff line number Diff line change
Expand Up @@ -998,18 +998,27 @@ void VirtualMachinePool::delete_attach_disk(std::unique_ptr<VirtualMachine> vm)

update(vm.get());

vm.reset();

if ( disk == nullptr )
{
return;
}

// skip image release if there is other disk using the same image
int image_id;
set<int> image_ids;

disk->vector_value("IMAGE_ID", image_id);

vm->get_disks().get_image_ids(image_ids, uid);

bool do_image_release = image_ids.count(image_id) == 0;

vm.reset();

Nebula& nd = Nebula::instance();
ImageManager* imagem = nd.get_imagem();

Template tmpl;
int image_id;

tmpl.set(disk->vector_attribute());
tmpl.add("VMS", 0);
Expand All @@ -1020,8 +1029,6 @@ void VirtualMachinePool::delete_attach_disk(std::unique_ptr<VirtualMachine> vm)
}
else
{
disk->vector_value("IMAGE_ID", image_id);

Quotas::quota_del(Quotas::IMAGE, uid, gid, &tmpl);

if (!disk->is_persistent())
Expand All @@ -1040,7 +1047,10 @@ void VirtualMachinePool::delete_attach_disk(std::unique_ptr<VirtualMachine> vm)
imagem->clear_image_snapshots(image_id);
}

imagem->release_image(oid, image_id, false);
if (do_image_release)
{
imagem->release_image(oid, image_id, false);
}
}

delete disk;
Expand Down

0 comments on commit 015d842

Please sign in to comment.