summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java
diff options
context:
space:
mode:
authorSimon Rettberg2016-02-22 13:07:16 +0100
committerSimon Rettberg2016-02-22 13:07:16 +0100
commit097395d77dd6bc20c9186795463a9f510bc3874a (patch)
treea074460fd66c3221dcf3829e568e6dfcd088a9d8 /dozentenmodulserver/src/main/java
parent[server] Remove debug messages (diff)
downloadtutor-module-097395d77dd6bc20c9186795463a9f510bc3874a.tar.gz
tutor-module-097395d77dd6bc20c9186795463a9f510bc3874a.tar.xz
tutor-module-097395d77dd6bc20c9186795463a9f510bc3874a.zip
[server] Write chunks to disk only once
If the upload was faster than the client-side hashing, chunks were written to disk twice. Once right after upload, then again after it was read from disk for hashing once the hash was submitted.
Diffstat (limited to 'dozentenmodulserver/src/main/java')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java13
1 files changed, 10 insertions, 3 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java
index b7daf7d9..7bad59a3 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java
@@ -472,6 +472,7 @@ public class IncomingDataTransfer extends AbstractTransfer implements HashCheckC
}
}
} else {
+ // We have no hash checker or the hash for the current chunk is unknown - flush to disk
writeFileData(currentChunk.range.startOffset, currentChunk.range.getLength(), buffer);
chunks.markSuccessful(currentChunk);
}
@@ -511,7 +512,9 @@ public class IncomingDataTransfer extends AbstractTransfer implements HashCheckC
+ " could not be executed. Assuming valid :-(");
// Fall through
case VALID:
- writeFileData(chunk.range.startOffset, chunk.range.getLength(), data);
+ if (!chunk.isWrittenToDisk()) {
+ writeFileData(chunk.range.startOffset, chunk.range.getLength(), data);
+ }
chunks.markSuccessful(chunk);
if (chunks.isComplete()) {
finishUpload();
@@ -544,10 +547,14 @@ public class IncomingDataTransfer extends AbstractTransfer implements HashCheckC
}
public void updateBlockHashList(List<byte[]> hashList) {
- if (state != TransferState.IDLE && state != TransferState.WORKING)
+ if (state != TransferState.IDLE && state != TransferState.WORKING) {
+ LOGGER.debug(this.getId() + ": Rejecting block hash list in state " + state);
return;
- if (hashChecker == null || hashList == null)
+ }
+ if (hashChecker == null || hashList == null) {
+ LOGGER.debug(this.getId() + ": Rejecting block hash list: No hasher");
return;
+ }
chunks.updateSha1Sums(hashList);
FileChunk chunk;
while (null != (chunk = chunks.getUnhashedComplete())) {