diff options
author | Simon Rettberg | 2016-04-25 18:32:37 +0200 |
---|---|---|
committer | Simon Rettberg | 2016-04-25 18:32:37 +0200 |
commit | b1fe628e16cc2e62d94a9356c26b1356b48dcd1b (patch) | |
tree | d7fa758f56662d634585992e607d8c0ff675639f /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java | |
parent | [client] Add handling for master<->sat transfers (diff) | |
download | tutor-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.java | 29 |
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) { |