diff options
author | Simon Rettberg | 2016-08-10 19:03:23 +0200 |
---|---|---|
committer | Simon Rettberg | 2016-08-10 19:03:23 +0200 |
commit | a65d3f2581a2cf3b9b05c243a5d40ca31bd7aaa0 (patch) | |
tree | 93c4287552409821300ca6bb1ba88c8ee84baa2d /src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java | |
parent | Remove debug spam in json helper (diff) | |
download | master-sync-shared-a65d3f2581a2cf3b9b05c243a5d40ca31bd7aaa0.tar.gz master-sync-shared-a65d3f2581a2cf3b9b05c243a5d40ca31bd7aaa0.tar.xz master-sync-shared-a65d3f2581a2cf3b9b05c243a5d40ca31bd7aaa0.zip |
Fix: Some chunks could be dropped from the hash queue and not marked as to-be-hashed again
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java')
-rw-r--r-- | src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java index 518a29f..92c26c9 100644 --- a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java +++ b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java @@ -289,6 +289,8 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H try { hashChecker.queue( currentChunk, buffer, IncomingTransferBase.this, true ); } catch ( InterruptedException e ) { + chunks.markCompleted( currentChunk, false ); + currentChunk = null; Thread.currentThread().interrupt(); return null; } @@ -317,9 +319,10 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H } 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.markCompleted( currentChunk, true ); + chunks.markCompleted( currentChunk, false ); chunkStatusChanged( currentChunk ); } + currentChunk = null; } // Get next missing chunk try { @@ -445,8 +448,10 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H @Override public void hashCheckDone( HashResult result, byte[] data, FileChunk chunk ) { - if ( state != TransferState.IDLE && state != TransferState.WORKING ) + if ( state != TransferState.IDLE && state != TransferState.WORKING ) { + LOGGER.debug( "hashCheckDone called in bad state " + state.name() ); return; + } switch ( result ) { case FAILURE: LOGGER.warn( "Hash check of chunk " + chunk.toString() @@ -497,8 +502,12 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H return; } try { - hashChecker.queue( chunk, data, this, blocking ); + if ( !hashChecker.queue( chunk, data, this, blocking ) ) { + chunks.markCompleted( chunk, false ); + } } catch ( InterruptedException e ) { + LOGGER.debug( "Interrupted while trying to queueUnhashedChunk" ); + chunks.markCompleted( chunk, false ); Thread.currentThread().interrupt(); } } |