diff options
| author | Simon Rettberg | 2016-02-22 13:07:16 +0100 |
|---|---|---|
| committer | Simon Rettberg | 2016-02-22 13:07:16 +0100 |
| commit | 097395d77dd6bc20c9186795463a9f510bc3874a (patch) | |
| tree | a074460fd66c3221dcf3829e568e6dfcd088a9d8 | |
| parent | [server] Remove debug messages (diff) | |
| download | tutor-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.
| -rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java | 13 |
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())) { |
