public VolumeSnapshotTree toSubTree() { VolumeSnapshotTree tree = new VolumeSnapshotTree(); tree.root = this; tree.volumeUuid = inventory.getVolumeUuid(); return tree; }
@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 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(); } }
private void handle(BackupVolumeSnapshotFromPrimaryStorageToBackupStorageMsg msg) { HypervisorBackend bkd = getHypervisorBackendByVolumeUuid(msg.getSnapshot().getVolumeUuid()); bkd.handle(msg, new ReturnValueCompletion<BackupVolumeSnapshotFromPrimaryStorageToBackupStorageReply>(msg) { @Override public void success(BackupVolumeSnapshotFromPrimaryStorageToBackupStorageReply returnValue) { bus.reply(msg, returnValue); } @Override public void fail(ErrorCode errorCode) { BackupVolumeSnapshotFromPrimaryStorageToBackupStorageReply reply = new BackupVolumeSnapshotFromPrimaryStorageToBackupStorageReply(); reply.setError(errorCode); bus.reply(msg, reply); } }); }
private void handle(final CreateVolumeFromVolumeSnapshotOnPrimaryStorageMsg msg) { HypervisorBackend bkd = getHypervisorBackendByVolumeUuid(msg.getSnapshot().getVolumeUuid()); bkd.handle(msg, new ReturnValueCompletion<CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply>(msg) { @Override public void success(CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply returnValue) { bus.reply(msg, returnValue); } @Override public void fail(ErrorCode errorCode) { CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply reply = new CreateVolumeFromVolumeSnapshotOnPrimaryStorageReply(); reply.setError(errorCode); bus.reply(msg, reply); } }); }
@Override protected void handle(final DeleteSnapshotOnPrimaryStorageMsg msg) { HypervisorBackend bkd = getHypervisorBackendByVolumeUuid(msg.getSnapshot().getVolumeUuid()); bkd.handle(msg, new ReturnValueCompletion<DeleteSnapshotOnPrimaryStorageReply>(msg) { @Override public void success(DeleteSnapshotOnPrimaryStorageReply returnValue) { bus.reply(msg, returnValue); } @Override public void fail(ErrorCode errorCode) { DeleteSnapshotOnPrimaryStorageReply reply = new DeleteSnapshotOnPrimaryStorageReply(); reply.setError(errorCode); bus.reply(msg, reply); } }); }
@Override public void run(final FlowTrigger trigger, final Map data) { SyncVolumeSizeMsg msg = new SyncVolumeSizeMsg(); msg.setVolumeUuid(paramIn.getSnapshot().getVolumeUuid()); bus.makeTargetServiceIdByResourceUuid(msg, VolumeConstant.SERVICE_ID, paramIn.getSnapshot().getVolumeUuid()); bus.send(msg, new CloudBusCallBack(trigger) { @Override public void run(MessageReply reply) { if (reply.isSuccess()) { ParamOut paramOut = (ParamOut) data.get(ParamOut.class); SyncVolumeSizeReply gr = reply.castReply(); paramOut.setActualSize(gr.getActualSize()); paramOut.setSize(gr.getSize()); trigger.next(); } else { trigger.fail(reply.getError()); } } }); } });
private void handle(final TakeSnapshotMsg msg) { final VolumeSnapshotInventory sp = msg.getStruct().getCurrent(); HypervisorBackend bkd = getHypervisorBackendByVolumeUuid(sp.getVolumeUuid()); bkd.handle(msg, new ReturnValueCompletion<TakeSnapshotReply>(msg) { @Override public void success(TakeSnapshotReply returnValue) { bus.reply(msg, returnValue); } @Override public void fail(ErrorCode errorCode) { TakeSnapshotReply reply = new TakeSnapshotReply(); reply.setError(errorCode); bus.reply(msg, reply); } }); }
@Override public void run(final FlowTrigger trigger, final Map data) { markTaskStage(parentStage, CREATE_TEMPORARY_TEMPLATE_STAGE); SyncVolumeSizeMsg msg = new SyncVolumeSizeMsg(); msg.setVolumeUuid(paramIn.getSnapshot().getVolumeUuid()); bus.makeTargetServiceIdByResourceUuid(msg, VolumeConstant.SERVICE_ID, paramIn.getSnapshot().getVolumeUuid()); bus.send(msg, new CloudBusCallBack(trigger) { @Override public void run(MessageReply reply) { if (reply.isSuccess()) { ParamOut paramOut = (ParamOut) data.get(ParamOut.class); SyncVolumeSizeReply gr = reply.castReply(); paramOut.setActualSize(gr.getActualSize()); paramOut.setSize(gr.getSize()); trigger.next(); } else { trigger.fail(reply.getError()); } } }); } });
SimpleQuery<VolumeVO> q = dbf.createQuery(VolumeVO.class); q.select(VolumeVO_.installPath); q.add(VolumeVO_.uuid, Op.EQ, sp.getVolumeUuid()); String volumePath = q.findValue(); cmd.volumeUuid = sp.getVolumeUuid(); cmd.snapshotPath = spPath; httpCall(CREATE_SNAPSHOT_PATH, cmd, CreateSnapshotRsp.class, new ReturnValueCompletion<CreateSnapshotRsp>(msg) {
private void handle(final TakeSnapshotMsg msg) { final VolumeSnapshotInventory sp = msg.getStruct().getCurrent(); final String hostUuid = getHostUuidByResourceUuid(sp.getVolumeUuid()); LocalStorageHypervisorFactory f = getHypervisorBackendFactoryByHostUuid(hostUuid); LocalStorageHypervisorBackend bkd = f.getHypervisorBackend(self); bkd.handle(msg, hostUuid, new ReturnValueCompletion<TakeSnapshotReply>(msg) { @Override public void success(TakeSnapshotReply returnValue) { createResourceRefVO(sp.getUuid(), VolumeSnapshotVO.class.getSimpleName(), returnValue.getInventory().getSize(), hostUuid); bus.reply(msg, returnValue); } @Override public void fail(ErrorCode errorCode) { TakeSnapshotReply reply = new TakeSnapshotReply(); reply.setError(errorCode); bus.reply(msg, reply); } }); }
@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); } }); }
@Override protected void scripts() { String type = Q.New(PrimaryStorageVO.class).eq(PrimaryStorageVO_.uuid, snapshot.getPrimaryStorageUuid()).select(PrimaryStorageVO_.type).findValue(); if(!type.equals(LocalStorageConstants.LOCAL_STORAGE_TYPE)){ return; } LocalStorageResourceRefVO ref = new LocalStorageResourceRefVO(); ref.setPrimaryStorageUuid(snapshot.getPrimaryStorageUuid()); ref.setSize(snapshot.getSize()); ref.setResourceType(VolumeSnapshotVO.class.getSimpleName()); ref.setResourceUuid(snapshot.getUuid()); ref.setHostUuid(Q.New(LocalStorageResourceRefVO.class) .select(LocalStorageResourceRefVO_.hostUuid) .eq(LocalStorageResourceRefVO_.resourceUuid, snapshot.getVolumeUuid()).findValue()); persist(ref); } }.execute();
@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); } }); }
public static APIQueryVolumeSnapshotTreeReply __example__() { APIQueryVolumeSnapshotTreeReply reply = new APIQueryVolumeSnapshotTreeReply(); VolumeSnapshotInventory inv = new VolumeSnapshotInventory(); inv.setUuid(uuid()); inv.setName("My Snapshot 2"); inv.setPrimaryStorageUuid(uuid()); inv.setFormat("qcow2"); inv.setVolumeUuid(uuid()); inv.setLatest(false); inv.setPrimaryStorageUuid("/zstack_ps/rootVolumes/acct-e77f16d460ea46e18262547b56972273/vol-13c66bb52d0949398e520183b917f813/snapshots/2fa6979af5c6479fa98f37d316f44b5f.qcow2"); inv.setSize(1310720); inv.setStatus(VolumeSnapshotStatus.Ready.toString()); inv.setState(VolumeSnapshotState.Enabled.toString()); inv.setVolumeType(VolumeType.Root.toString()); VolumeSnapshotTree.SnapshotLeafInventory linv = new VolumeSnapshotTree.SnapshotLeafInventory(); linv.setInventory(inv); linv.setParentUuid(uuid()); VolumeSnapshotTreeInventory tinv = new VolumeSnapshotTreeInventory(); tinv.setUuid(uuid()); tinv.setCurrent(false); tinv.setVolumeUuid(inv.getVolumeUuid()); tinv.setTree(linv); return reply; }