package org.zstack.simulator.storage.backup; import org.zstack.core.Platform; import org.zstack.header.core.Completion; import org.zstack.header.exception.CloudRuntimeException; import org.zstack.header.image.ImageInventory; import org.zstack.header.storage.backup.*; import org.zstack.storage.backup.BackupStorageBase; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; import java.util.List; public class SimulatorBackupStorage extends BackupStorageBase { private static final CLogger logger = Utils.getLogger(SimulatorBackupStorage.class); public SimulatorBackupStorage(BackupStorageVO self) { super(self); } @Override public void deleteHook() { logger.debug(String.format("SimulatorBackupStorage[uuid:%s] gets deleted", self.getUuid())); } @Override public void changeStateHook(BackupStorageStateEvent evt, BackupStorageState nextState) { logger.debug(String.format("SimulatorBackupStorage[uuid:%s] changes state from %s to %s", self.getUuid(), self.getState(), nextState)); } @Override public void detachHook(Completion completion) { logger.debug(String.format("SimulatorBackupStorage[uuid:%s] detached", self.getUuid())); completion.success(); } @Override public void attachHook(String zoneUuid, Completion completion) { logger.debug(String.format("SimulatorBackupStorage[uuid:%s] attached", self.getUuid())); completion.success(); } @Override protected void exceptionIfImageSizeGreaterThanAvailableCapacity(String url) { // To override the behavior of the base class, thus avoid real HEAD request. } @Override protected void handle(GetImageSizeOnBackupStorageMsg msg) { GetImageSizeOnBackupStorageReply reply = new GetImageSizeOnBackupStorageReply(); reply.setSize(233); bus.reply(msg, reply); } @Override protected void handle(DownloadImageMsg msg) { ImageInventory inv = msg.getImageInventory(); DownloadImageReply reply = new DownloadImageReply(); reply.setMd5sum(Platform.getUuid()); reply.setInstallPath(Utils.getPathUtil().join(self.getUrl(), inv.getName())); reply.setSize(100); reply.setActualSize(100L); reply.setFormat("simulator"); bus.reply(msg, reply); } @Override protected void handle(DownloadVolumeMsg msg) { DownloadVolumeReply reply = new DownloadVolumeReply(); reply.setMd5sum(Platform.getUuid()); reply.setInstallPath(Utils.getPathUtil().join(self.getUrl(), msg.getVolume().getName())); reply.setSize(100); bus.reply(msg, reply); } @Override protected void handle(DeleteBitsOnBackupStorageMsg msg) { DeleteBitsOnBackupStorageReply reply = new DeleteBitsOnBackupStorageReply(); bus.reply(msg, reply); } @Override protected void handle(BackupStorageAskInstallPathMsg msg) { BackupStorageAskInstallPathReply reply = new BackupStorageAskInstallPathReply(); reply.setInstallPath(String.format("/%s/%s/%s.img", msg.getImageMediaType(), msg.getImageUuid(), msg.getImageUuid())); bus.reply(msg, reply); } @Override protected void handle(SyncImageSizeOnBackupStorageMsg msg) { throw new CloudRuntimeException("not supported yet"); } @Override protected void connectHook(boolean newAdded, Completion completion) { completion.success(); } @Override protected void pingHook(Completion completion) { completion.success(); } @Override public List<ImageInventory> scanImages() { return null; } }