mirror of https://github.com/apache/cloudstack.git
bug fixes
This commit is contained in:
parent
05a5b03d95
commit
10ad7967cd
|
|
@ -25,16 +25,18 @@ public class StartNBDServerCommand extends Command {
|
|||
private String volumePath;
|
||||
private String socket;
|
||||
private String direction;
|
||||
private String fromCheckpointId;
|
||||
|
||||
public StartNBDServerCommand() {
|
||||
}
|
||||
|
||||
protected StartNBDServerCommand(String transferId, String exportName, String volumePath, String socket, String direction) {
|
||||
protected StartNBDServerCommand(String transferId, String exportName, String volumePath, String socket, String direction, String fromCheckpointId) {
|
||||
this.transferId = transferId;
|
||||
this.socket = socket;
|
||||
this.exportName = exportName;
|
||||
this.volumePath = volumePath;
|
||||
this.direction = direction;
|
||||
this.fromCheckpointId = fromCheckpointId;
|
||||
}
|
||||
|
||||
public String getExportName() {
|
||||
|
|
@ -61,4 +63,8 @@ public class StartNBDServerCommand extends Command {
|
|||
public String getDirection() {
|
||||
return direction;
|
||||
}
|
||||
|
||||
public String getFromCheckpointId() {
|
||||
return fromCheckpointId;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
--;
|
||||
-- Schema upgrade from 4.21.0.0 to 4.22.0.0
|
||||
--;
|
||||
not supported for download
|
||||
|
||||
-- health check status as enum
|
||||
CALL `cloud`.`IDEMPOTENT_CHANGE_COLUMN`('router_health_check', 'check_result', 'check_result', 'varchar(16) NOT NULL COMMENT "check executions result: SUCCESS, FAILURE, WARNING, UNKNOWN"');
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ public class LibvirtCreateImageTransferCommandWrapper extends CommandWrapper<Cre
|
|||
payload.put("export", exportName);
|
||||
String checkpointId = cmd.getCheckpointId();
|
||||
if (checkpointId != null) {
|
||||
payload.put("export_bitmap", exportName + "-" + checkpointId.substring(0, 4));
|
||||
payload.put("export_bitmap", cmd.getCheckpointId());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -88,8 +88,8 @@ public class LibvirtStartBackupCommandWrapper extends CommandWrapper<StartBackup
|
|||
script.add(backupCmd);
|
||||
String result = script.execute();
|
||||
|
||||
// backupXmlFile.delete();
|
||||
// checkpointXmlFile.delete();
|
||||
backupXmlFile.delete();
|
||||
checkpointXmlFile.delete();
|
||||
|
||||
if (result != null) {
|
||||
return new StartBackupAnswer(cmd, false, "Backup begin failed: " + result);
|
||||
|
|
|
|||
|
|
@ -69,10 +69,11 @@ public class LibvirtStartNBDServerCommandWrapper extends CommandWrapper<StartNBD
|
|||
|
||||
String socketName = "/tmp/imagetransfer/" + socket + ".sock";
|
||||
String systemdRunCmd = String.format(
|
||||
"systemd-run --unit=%s --property=Restart=no qemu-nbd --export-name %s --socket %s --persistent %s %s",
|
||||
"systemd-run --unit=%s --property=Restart=no qemu-nbd --export-name %s --socket %s --persistent %s %s %s",
|
||||
unitName,
|
||||
exportName,
|
||||
socketName,
|
||||
cmd.getFromCheckpointId() != null ? "-B " + cmd.getFromCheckpointId() : "",
|
||||
cmd.getDirection().equals("download") ? "--read-only" : "",
|
||||
volumePath
|
||||
);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,8 @@ public class LibvirtStopNBDServerCommandWrapper extends CommandWrapper<StopNBDSe
|
|||
resetScript.execute();
|
||||
}
|
||||
|
||||
private Answer handleUpload(StopNBDServerCommand cmd) {
|
||||
@Override
|
||||
public Answer execute(StopNBDServerCommand cmd, LibvirtComputingResource resource) {
|
||||
try {
|
||||
String unitName = "qemu-nbd-" + cmd.getTransferId().hashCode();
|
||||
|
||||
|
|
@ -68,17 +69,4 @@ public class LibvirtStopNBDServerCommandWrapper extends CommandWrapper<StopNBDSe
|
|||
return new Answer(cmd, false, "Error finalizing image transfer: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private Answer handleDownload(StopNBDServerCommand cmd) {
|
||||
return new Answer(cmd, true, "Image transfer finalized");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Answer execute(StopNBDServerCommand cmd, LibvirtComputingResource resource) {
|
||||
if (cmd.getDirection().equals("download")) {
|
||||
return handleDownload(cmd);
|
||||
} else {
|
||||
return handleUpload(cmd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@ public class IncrementalBackupServiceImpl extends ManagerBase implements Increme
|
|||
VMInstanceVO vm = vmInstanceDao.findById(backup.getVmId());
|
||||
if (vm.getState() == State.Stopped) {
|
||||
String volumePath = getVolumePathForFileBasedBackend(volume);
|
||||
startNBDServer(transferId, direction, backup.getHostId(), volume.getUuid(), volumePath);
|
||||
startNBDServer(transferId, direction, backup.getHostId(), volume.getUuid(), volumePath, vm.getActiveCheckpointId());
|
||||
socket = transferId;
|
||||
}
|
||||
|
||||
|
|
@ -393,7 +393,7 @@ public class IncrementalBackupServiceImpl extends ManagerBase implements Increme
|
|||
return hosts.get(0);
|
||||
}
|
||||
|
||||
private void startNBDServer(String transferId, String direction, Long hostId, String exportName, String volumePath) {
|
||||
private void startNBDServer(String transferId, String direction, Long hostId, String exportName, String volumePath, String checkpointId) {
|
||||
StartNBDServerAnswer nbdServerAnswer;
|
||||
if (hostId == null) {
|
||||
throw new CloudRuntimeException("Host cannot be determined for starting NBD server");
|
||||
|
|
@ -407,7 +407,8 @@ public class IncrementalBackupServiceImpl extends ManagerBase implements Increme
|
|||
exportName,
|
||||
volumePath,
|
||||
transferId,
|
||||
direction
|
||||
direction,
|
||||
checkpointId
|
||||
);
|
||||
try {
|
||||
nbdServerAnswer = (StartNBDServerAnswer) agentManager.send(hostId, nbdServerCmd);
|
||||
|
|
@ -457,7 +458,7 @@ public class IncrementalBackupServiceImpl extends ManagerBase implements Increme
|
|||
volumePath);
|
||||
|
||||
} else {
|
||||
startNBDServer(transferId, direction, host.getId(), volume.getUuid(), volumePath);
|
||||
startNBDServer(transferId, direction, host.getId(), volume.getUuid(), volumePath, null);
|
||||
imageTransfer = new ImageTransferVO(
|
||||
transferId,
|
||||
null,
|
||||
|
|
@ -486,7 +487,7 @@ public class IncrementalBackupServiceImpl extends ManagerBase implements Increme
|
|||
|
||||
if (!transferAnswer.getResult()) {
|
||||
if (!backend.equals(ImageTransfer.Backend.file)) {
|
||||
stopNbdServer(imageTransfer);
|
||||
stopNBDServer(imageTransfer);
|
||||
}
|
||||
throw new CloudRuntimeException("Failed to create image transfer: " + transferAnswer.getDetails());
|
||||
}
|
||||
|
|
@ -578,14 +579,14 @@ public class IncrementalBackupServiceImpl extends ManagerBase implements Increme
|
|||
|
||||
VMInstanceVO vm = vmInstanceDao.findById(backup.getVmId());
|
||||
if (vm.getState() == State.Stopped) {
|
||||
boolean stopNbdServerResult = stopNbdServer(imageTransfer);
|
||||
boolean stopNbdServerResult = stopNBDServer(imageTransfer);
|
||||
if (!stopNbdServerResult) {
|
||||
throw new CloudRuntimeException("Failed to stop the nbd server");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean stopNbdServer(ImageTransferVO imageTransfer) {
|
||||
private boolean stopNBDServer(ImageTransferVO imageTransfer) {
|
||||
String transferId = imageTransfer.getUuid();
|
||||
String direction = imageTransfer.getDirection().toString();
|
||||
StopNBDServerCommand stopNbdServerCommand = new StopNBDServerCommand(transferId, direction);
|
||||
|
|
@ -602,7 +603,7 @@ public class IncrementalBackupServiceImpl extends ManagerBase implements Increme
|
|||
private void finalizeUploadImageTransfer(ImageTransferVO imageTransfer) {
|
||||
String transferId = imageTransfer.getUuid();
|
||||
|
||||
boolean stopNbdServerResult = stopNbdServer(imageTransfer);
|
||||
boolean stopNbdServerResult = stopNBDServer(imageTransfer);
|
||||
if (!stopNbdServerResult) {
|
||||
throw new CloudRuntimeException("Failed to stop the nbd server");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue