@Override protected void executeCommand() { if (getVmTemplate().isBaseTemplate()) { shiftBaseTemplateToSuccessor(); } final List<CinderDisk> cinderDisks = ImagesHandler.filterDisksBasedOnCinder( DbFacade.getInstance().getDiskDao().getAllForVm(getVmTemplateId())); // Set VM to lock status immediately, for reducing race condition. VmTemplateHandler.lockVmTemplateInTransaction(getVmTemplateId(), getCompensationContext()); if (!imageTemplates.isEmpty() || !cinderDisks.isEmpty()) { TransactionSupport.executeInNewTransaction( new TransactionMethod<Void>() { @Override public Void runInTransaction() { if (!imageTemplates.isEmpty() && removeVmTemplateImages()) { VmHandler.removeVmInitFromDB(getVmTemplate()); setSucceeded(true); } if (!cinderDisks.isEmpty()) { removeCinderDisks(cinderDisks); setSucceeded(true); } return null; } }); } else { // if for some reason template doesn't have images, remove it now and not in end action handleEndAction(); } }
private void fetchImageTemplates() { if (imageTemplates == null) { List<Disk> allImages = DbFacade.getInstance().getDiskDao().getAllForVm(getVmTemplateId()); imageTemplates = ImagesHandler.filterImageDisks(allImages, false, false, true); imageTemplates.addAll(ImagesHandler.filterDisksBasedOnCinder(allImages, true)); } }
public static List<DiskImage> getCinderLeafImages(List<Disk> disks, boolean onlyPluggedDisks) { List<DiskImage> leafCinderDisks = new ArrayList<>(); List<CinderDisk> cinderDisks = ImagesHandler.filterDisksBasedOnCinder(disks, onlyPluggedDisks); for (CinderDisk cinder : cinderDisks) { leafCinderDisks.add(ImagesHandler.getSnapshotLeaf(cinder.getId())); } return leafCinderDisks; }