summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java
diff options
context:
space:
mode:
authorSimon Rettberg2016-04-25 18:32:37 +0200
committerSimon Rettberg2016-04-25 18:32:37 +0200
commitb1fe628e16cc2e62d94a9356c26b1356b48dcd1b (patch)
treed7fa758f56662d634585992e607d8c0ff675639f /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java
parent[client] Add handling for master<->sat transfers (diff)
downloadtutor-module-b1fe628e16cc2e62d94a9356c26b1356b48dcd1b.tar.gz
tutor-module-b1fe628e16cc2e62d94a9356c26b1356b48dcd1b.tar.xz
tutor-module-b1fe628e16cc2e62d94a9356c26b1356b48dcd1b.zip
[server] Fix upload handling if image already exists
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java29
1 files changed, 23 insertions, 6 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java
index cd46a1c5..f3d64784 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java
@@ -16,6 +16,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.bwlp.sat.database.mappers.DbImage;
+import org.openslx.bwlp.sat.database.mappers.DbImageBlock;
import org.openslx.bwlp.sat.database.mappers.DbUser;
import org.openslx.bwlp.sat.database.models.ImageVersionMeta;
import org.openslx.bwlp.sat.database.models.LocalImageVersion;
@@ -132,7 +133,7 @@ public class SyncTransferHandler {
throw new TInvocationException(InvocationError.MISSING_DATA,
"Given virtual machine has no hardware description");
ImageDetailsRead details = DbImage.getImageDetails(null, imgVersion.imageBaseId);
- List<ByteBuffer> blockHashes = DbImage.getBlockHashes(imgVersion.imageVersionId);
+ List<ByteBuffer> blockHashes = DbImageBlock.getBlockHashes(imgVersion.imageVersionId);
ImagePublishData publishData = new ImagePublishData();
publishData.createTime = imgVersion.createTime;
publishData.description = details.description;
@@ -193,13 +194,29 @@ public class SyncTransferHandler {
throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR,
"Communication with master server failed");
}
- File tmpFile = null;
- do {
- tmpFile = Formatter.getTempImageName();
- } while (tmpFile.exists());
+ // Already exists? Already complete?
+ LocalImageVersion localImageData;
+ try {
+ localImageData = DbImage.getLocalImageData(image.imageVersionId);
+ } catch (TNotFoundException e) {
+ localImageData = null;
+ } catch (SQLException e) {
+ throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "Database error");
+ }
+ File tmpFile;
+ if (localImageData == null) {
+ // New
+ tmpFile = null;
+ do {
+ tmpFile = Formatter.getTempImageName();
+ } while (tmpFile.exists());
+ } else {
+ tmpFile = FileSystem.composeAbsoluteImagePath(localImageData);
+ }
tmpFile.getParentFile().mkdirs();
try {
- IncomingDataTransfer transfer = new IncomingDataTransfer(image, tmpFile, transferInfo);
+ IncomingDataTransfer transfer = new IncomingDataTransfer(image, tmpFile, transferInfo,
+ localImageData != null);
downloads.put(transfer.getId(), transfer);
return transfer.getId();
} catch (FileNotFoundException e) {