@Override public String call(VolumeSnapshotInventory arg) { return arg.getPrimaryStorageInstallPath(); } });
@Override public void protect(VolumeSnapshotInventory snapshot, Completion completion) { Path path = Paths.get(snapshot.getPrimaryStorageInstallPath()); if (!path.getParent().toString().contains(snapshot.getVolumeUuid())) { completion.fail(inerr("the snapshot[name:%s, uuid:%s, path: %s] seems not belong to the volume[uuid:%s]", snapshot.getName(), snapshot.getUuid(), snapshot.getPrimaryStorageInstallPath(), snapshot.getVolumeUuid())); return; } completion.success(); } }
@Override public void protect(VolumeSnapshotInventory snapshot, Completion completion) { Path path = Paths.get(snapshot.getPrimaryStorageInstallPath()); if (!path.getParent().toString().contains(snapshot.getVolumeUuid())) { completion.fail(inerr("the snapshot[name:%s, uuid:%s, path: %s] seems not belong to the volume[uuid:%s]", snapshot.getName(), snapshot.getUuid(), snapshot.getPrimaryStorageInstallPath(), snapshot.getVolumeUuid())); return; } completion.success(); } }
@Override void handle(DeleteSnapshotOnPrimaryStorageMsg msg, final ReturnValueCompletion<DeleteSnapshotOnPrimaryStorageReply> completion) { deleteBits(msg.getSnapshot().getPrimaryStorageInstallPath(), new Completion(completion) { @Override public void success() { DeleteSnapshotOnPrimaryStorageReply reply = new DeleteSnapshotOnPrimaryStorageReply(); completion.success(reply); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
@Override public void protect(VolumeSnapshotInventory snapshot, Completion completion) { Path path = Paths.get(snapshot.getPrimaryStorageInstallPath()); if (!path.getParent().toString().contains(snapshot.getVolumeUuid())) { completion.fail(inerr("the snapshot[name:%s, uuid:%s, path: %s] seems not belong to the volume[uuid:%s]", snapshot.getName(), snapshot.getUuid(), snapshot.getPrimaryStorageInstallPath(), snapshot.getVolumeUuid())); return; } completion.success(); } }
@Override public void protect(VolumeSnapshotInventory snapshot, Completion completion) { if (!snapshot.getPrimaryStorageInstallPath().contains(snapshot.getVolumeUuid())) { completion.fail(inerr("the snapshot[name:%s, uuid:%s, path: %s] seems not belong to the volume[uuid:%s]", snapshot.getName(), snapshot.getUuid(), snapshot.getPrimaryStorageInstallPath(), snapshot.getVolumeUuid())); return; } completion.success(); } }
@Override void handle(final DeleteSnapshotOnPrimaryStorageMsg msg, final String hostUuid, final ReturnValueCompletion<DeleteSnapshotOnPrimaryStorageReply> completion) { final DeleteSnapshotOnPrimaryStorageReply reply = new DeleteSnapshotOnPrimaryStorageReply(); deleteBits(msg.getSnapshot().getPrimaryStorageInstallPath(), hostUuid, new Completion(completion) { @Override public void success() { completion.success(reply); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
public void validate(VolumeSnapshotInventory root) { logger.debug(String.format("validating volume snapshot chain starting with root[uuid:%s, installPath:%s]", root.getUuid(), root.getPrimaryStorageInstallPath())); SnapshotLeaf leaf = buildRootLeaf(root.getUuid()); validate(leaf); }
@Override protected void handle(final DeleteSnapshotOnPrimaryStorageMsg msg) { final DeleteSnapshotOnPrimaryStorageReply reply = new DeleteSnapshotOnPrimaryStorageReply(); DeleteSnapshotCmd cmd = new DeleteSnapshotCmd(); cmd.snapshotPath = msg.getSnapshot().getPrimaryStorageInstallPath(); httpCall(DELETE_SNAPSHOT_PATH, cmd, DeleteSnapshotRsp.class, new ReturnValueCompletion<DeleteSnapshotRsp>(msg) { @Override public void success(DeleteSnapshotRsp returnValue) { bus.reply(msg, reply); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); } }); }
@Override public SnapshotTO call(final VolumeSnapshotInventory s) { SnapshotTO to = new SnapshotTO(); to.path = s.getPrimaryStorageInstallPath(); to.snapshotUuid = s.getUuid(); if (s.getParentUuid() != null) { to.parentPath = CollectionUtils.find(children, new Function<String, VolumeSnapshotInventory>() { @Override public String call(VolumeSnapshotInventory arg) { return arg.getUuid().equals(s.getParentUuid()) ? arg.getPrimaryStorageInstallPath() : null; } }); } return to; } });
@Override void handle(RevertVolumeFromSnapshotOnPrimaryStorageMsg msg, final ReturnValueCompletion<RevertVolumeFromSnapshotOnPrimaryStorageReply> completion) { VolumeSnapshotInventory sp = msg.getSnapshot(); RevertVolumeFromSnapshotCmd cmd = new RevertVolumeFromSnapshotCmd(); cmd.snapshotInstallPath = sp.getPrimaryStorageInstallPath(); new Do().go(REVERT_VOLUME_FROM_SNAPSHOT_PATH, cmd, RevertVolumeFromSnapshotRsp.class, new ReturnValueCompletion<AgentRsp>(completion) { @Override public void success(AgentRsp returnValue) { RevertVolumeFromSnapshotRsp rsp = (RevertVolumeFromSnapshotRsp) returnValue; RevertVolumeFromSnapshotOnPrimaryStorageReply reply = new RevertVolumeFromSnapshotOnPrimaryStorageReply(); reply.setNewVolumeInstallPath(rsp.newVolumeInstallPath); reply.setSize(rsp.size); completion.success(reply); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
@Override void handle(RevertVolumeFromSnapshotOnPrimaryStorageMsg msg, String hostUuid, final ReturnValueCompletion<RevertVolumeFromSnapshotOnPrimaryStorageReply> completion) { VolumeSnapshotInventory sp = msg.getSnapshot(); RevertVolumeFromSnapshotCmd cmd = new RevertVolumeFromSnapshotCmd(); cmd.setSnapshotInstallPath(sp.getPrimaryStorageInstallPath()); httpCall(REVERT_SNAPSHOT_PATH, hostUuid, cmd, RevertVolumeFromSnapshotRsp.class, new ReturnValueCompletion<RevertVolumeFromSnapshotRsp>(completion) { @Override public void success(RevertVolumeFromSnapshotRsp rsp) { RevertVolumeFromSnapshotOnPrimaryStorageReply ret = new RevertVolumeFromSnapshotOnPrimaryStorageReply(); ret.setNewVolumeInstallPath(rsp.getNewVolumeInstallPath()); ret.setSize(rsp.getSize()); completion.success(ret); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
@Override protected void handle(final DeleteSnapshotOnPrimaryStorageMsg msg) { final DeleteSnapshotOnPrimaryStorageReply reply = new DeleteSnapshotOnPrimaryStorageReply(); DeleteSnapshotCmd cmd = new DeleteSnapshotCmd(); cmd.snapshotPath = msg.getSnapshot().getPrimaryStorageInstallPath(); httpCall(DELETE_SNAPSHOT_PATH, cmd, DeleteSnapshotRsp.class, new ReturnValueCompletion<DeleteSnapshotRsp>(msg) { @Override public void success(DeleteSnapshotRsp returnValue) { bus.reply(msg, reply); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); } }, TimeUnit.MILLISECONDS, msg.getTimeout()); }
@Override void handle(CreateVolumeFromVolumeSnapshotOnPrimaryStorageMsg msg, final ReturnValueCompletion<CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply> completion) { final String installPath = makeDataVolumeInstallUrl(msg.getVolumeUuid()); VolumeSnapshotInventory latest = msg.getSnapshot(); MergeSnapshotCmd cmd = new MergeSnapshotCmd(); cmd.volumeUuid = latest.getVolumeUuid(); cmd.snapshotInstallPath = latest.getPrimaryStorageInstallPath(); cmd.workspaceInstallPath = installPath; new Do().go(MERGE_SNAPSHOT_PATH, cmd, MergeSnapshotRsp.class, new ReturnValueCompletion<AgentRsp>(completion) { @Override public void success(AgentRsp returnValue) { MergeSnapshotRsp rsp = (MergeSnapshotRsp) returnValue; CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply reply = new CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply(); reply.setActualSize(rsp.actualSize); reply.setInstallPath(installPath); reply.setSize(rsp.size); completion.success(reply); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
@Override void handle(CreateTemporaryVolumeFromSnapshotMsg msg, final ReturnValueCompletion<CreateTemporaryVolumeFromSnapshotReply> completion) { final String installPath = makeTemplateFromVolumeInWorkspacePath(msg.getTemporaryVolumeUuid()); VolumeSnapshotInventory latest = msg.getSnapshot(); MergeSnapshotCmd cmd = new MergeSnapshotCmd(); cmd.volumeUuid = latest.getVolumeUuid(); cmd.snapshotInstallPath = latest.getPrimaryStorageInstallPath(); cmd.workspaceInstallPath = installPath; new Do().go(MERGE_SNAPSHOT_PATH, cmd, MergeSnapshotRsp.class, new ReturnValueCompletion<AgentRsp>(completion) { @Override public void success(AgentRsp rsp) { CreateTemporaryVolumeFromSnapshotReply reply = new CreateTemporaryVolumeFromSnapshotReply(); reply.setInstallPath(installPath); MergeSnapshotRsp mrsp = (MergeSnapshotRsp) rsp; reply.setSize(mrsp.size); reply.setActualSize(mrsp.actualSize); completion.success(reply); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
private void handle(final CreateVolumeFromVolumeSnapshotOnPrimaryStorageMsg msg) { final CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply reply = new CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply(); final String volPath = makeDataVolumeInstallPath(msg.getVolumeUuid()); VolumeSnapshotInventory sp = msg.getSnapshot(); CpCmd cmd = new CpCmd(); cmd.resourceUuid = msg.getSnapshot().getVolumeUuid(); cmd.srcPath = sp.getPrimaryStorageInstallPath(); cmd.dstPath = volPath; httpCall(CP_PATH, cmd, CpRsp.class, new ReturnValueCompletion<CpRsp>(msg) { @Override public void success(CpRsp rsp) { reply.setInstallPath(volPath); reply.setSize(rsp.size); // current ceph has no way to get the actual size long asize = rsp.actualSize == null ? 1 : rsp.actualSize; reply.setActualSize(asize); bus.reply(msg, reply); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); } }); }
private void handle(final CreateVolumeFromVolumeSnapshotOnPrimaryStorageMsg msg) { final CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply reply = new CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply(); final String volPath = makeDataVolumeInstallPath(msg.getVolumeUuid()); VolumeSnapshotInventory sp = msg.getSnapshot(); CpCmd cmd = new CpCmd(); cmd.resourceUuid = msg.getSnapshot().getVolumeUuid(); cmd.srcPath = sp.getPrimaryStorageInstallPath(); cmd.dstPath = volPath; httpCall(CP_PATH, cmd, CpRsp.class, new ReturnValueCompletion<CpRsp>(msg) { @Override public void success(CpRsp rsp) { reply.setInstallPath(volPath); reply.setSize(rsp.size); // current fusionstor has no way to get the actual size long asize = rsp.actualSize == null ? 1 : rsp.actualSize; reply.setActualSize(asize); bus.reply(msg, reply); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); } }); }
@Override void handle(CreateTemporaryVolumeFromSnapshotMsg msg, final String hostUuid, final ReturnValueCompletion<CreateTemporaryVolumeFromSnapshotReply> completion) { final String workSpaceInstallPath = makeSnapshotWorkspacePath(msg.getImageUuid()); VolumeSnapshotInventory sp = msg.getSnapshot(); MergeSnapshotCmd cmd = new MergeSnapshotCmd(); cmd.setVolumeUuid(sp.getVolumeUuid()); cmd.setSnapshotInstallPath(sp.getPrimaryStorageInstallPath()); cmd.setWorkspaceInstallPath(workSpaceInstallPath); httpCall(MERGE_SNAPSHOT_PATH, hostUuid, cmd, MergeSnapshotRsp.class, new ReturnValueCompletion<MergeSnapshotRsp>(completion) { @Override public void success(MergeSnapshotRsp rsp) { CreateTemporaryVolumeFromSnapshotReply reply = new CreateTemporaryVolumeFromSnapshotReply(); reply.setInstallPath(workSpaceInstallPath); reply.setSize(rsp.size); reply.setActualSize(rsp.actualSize); reply.setHostUuid(hostUuid); completion.success(reply); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
@Override void handle(CreateVolumeFromVolumeSnapshotOnPrimaryStorageMsg msg, String hostUuid, final ReturnValueCompletion<CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply> completion) { final CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply reply = new CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply(); final String installPath = makeDataVolumeInstallUrl(msg.getVolumeUuid()); VolumeSnapshotInventory sp = msg.getSnapshot(); MergeSnapshotCmd cmd = new MergeSnapshotCmd(); cmd.setVolumeUuid(sp.getVolumeUuid()); cmd.setSnapshotInstallPath(sp.getPrimaryStorageInstallPath()); cmd.setWorkspaceInstallPath(installPath); httpCall(MERGE_SNAPSHOT_PATH, hostUuid, cmd, MergeSnapshotRsp.class, new ReturnValueCompletion<MergeSnapshotRsp>(completion) { @Override public void success(MergeSnapshotRsp rsp) { reply.setActualSize(rsp.actualSize); reply.setSize(rsp.size); reply.setInstallPath(installPath); completion.success(reply); } @Override public void fail(ErrorCode errorCode) { completion.fail(errorCode); } }); }
private void handle(final BackupVolumeSnapshotFromPrimaryStorageToBackupStorageMsg msg) { BackupStorageInventory bs = msg.getBackupStorage(); VolumeSnapshotInventory sinv = msg.getSnapshot(); NfsPrimaryToBackupStorageMediator mediator = factory.getPrimaryToBackupStorageMediator( BackupStorageType.valueOf(bs.getType()), nfsMgr.findHypervisorTypeByImageFormatAndPrimaryStorageUuid(sinv.getFormat(), self.getUuid()) ); final BackupVolumeSnapshotFromPrimaryStorageToBackupStorageReply reply = new BackupVolumeSnapshotFromPrimaryStorageToBackupStorageReply(); final String installPath = mediator.makeVolumeSnapshotInstallPath(bs.getUuid(), sinv.getUuid()); mediator.uploadBits(null, getSelfInventory(), bs, installPath, sinv.getPrimaryStorageInstallPath(), new ReturnValueCompletion<String>(msg) { @Override public void success(String installPath) { reply.setBackupStorageInstallPath(installPath); bus.reply(msg, reply); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); } }); }