@Override protected void handle(final DownloadIsoToPrimaryStorageMsg msg) { HypervisorFactory f = getHypervisorFactoryByHostUuid(msg.getDestHostUuid()); HypervisorBackend bkd = f.getHypervisorBackend(self); bkd.handle(msg, new ReturnValueCompletion<DownloadIsoToPrimaryStorageReply>(msg) { @Override public void success(DownloadIsoToPrimaryStorageReply reply) { bus.reply(msg, reply); } @Override public void fail(ErrorCode error) { DownloadIsoToPrimaryStorageReply reply = new DownloadIsoToPrimaryStorageReply(); reply.setError(error); bus.reply(msg, reply); } }); }
@Override protected void checkImageIfNeedToDownload(DownloadIsoToPrimaryStorageMsg msg){ logger.debug("check if image exist in disabled primary storage"); if(self.getState() != PrimaryStorageState.Disabled){ return ; } if( !Q.New(ImageCacheVO.class) .eq(ImageCacheVO_.primaryStorageUuid, self.getUuid()) .eq(ImageCacheVO_.imageUuid, msg.getIsoSpec().getInventory().getUuid()) .like(ImageCacheVO_.installUrl, String.format("%%hostUuid://%s%%", msg.getDestHostUuid())) .isExists()){ throw new OperationFailureException(operr( "cannot attach ISO to a primary storage[uuid:%s] which is disabled", self.getUuid())); } }
@Override void handle(DownloadIsoToPrimaryStorageMsg msg, final ReturnValueCompletion<DownloadIsoToPrimaryStorageReply> completion) { ImageSpec ispec = msg.getIsoSpec(); SimpleQuery<BackupStorageVO> q = dbf.createQuery(BackupStorageVO.class); q.add(BackupStorageVO_.uuid, Op.EQ, ispec.getSelectedBackupStorage().getBackupStorageUuid()); BackupStorageVO bsvo = q.find(); BackupStorageInventory bsinv = BackupStorageInventory.valueOf(bsvo); ImageCache cache = new ImageCache(); cache.image = ispec.getInventory(); cache.hostUuid = msg.getDestHostUuid(); cache.primaryStorageInstallPath = makeCachedImageInstallUrl(ispec.getInventory()); cache.backupStorage = bsinv; cache.backupStorageInstallPath = ispec.getSelectedBackupStorage().getInstallPath(); cache.download(new ReturnValueCompletion<String>(completion) { @Override public void success(String returnValue) { DownloadIsoToPrimaryStorageReply reply = new DownloadIsoToPrimaryStorageReply(); reply.setInstallPath(returnValue); completion.success(reply); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }