diff options
author | Simon Rettberg | 2016-08-30 17:57:04 +0200 |
---|---|---|
committer | Simon Rettberg | 2016-08-30 17:57:04 +0200 |
commit | 6d458abe7e82563a5bdac67401d699e7b22129e1 (patch) | |
tree | 5cc898c14751ecc1309f2dc31364e76c09f32e3a /src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java | |
parent | [DiskImage] Detect snapshot vmdk (diff) | |
download | master-sync-shared-6d458abe7e82563a5bdac67401d699e7b22129e1.tar.gz master-sync-shared-6d458abe7e82563a5bdac67401d699e7b22129e1.tar.xz master-sync-shared-6d458abe7e82563a5bdac67401d699e7b22129e1.zip |
Fix some minor handling issues with transfers wrt global image exchange
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java')
-rw-r--r-- | src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java index 92c26c9..32fdf6c 100644 --- a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java +++ b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java @@ -342,6 +342,9 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H cancel(); return null; } + if ( state == TransferState.IDLE ) { + state = TransferState.WORKING; + } return currentChunk.range; } } @@ -365,7 +368,10 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H public void run() { CbHandler cbh = new CbHandler( connection ); - if ( !connection.download( cbh, cbh ) ) { + if ( connection.download( cbh, cbh ) ) { + connectFails.set( 0 ); + } else { + connectFails.incrementAndGet(); if ( cbh.currentChunk != null ) { // If the download failed and we have a current chunk, put it back into // the queue, so it will be handled again later... @@ -430,7 +436,7 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H { synchronized ( tmpFileHandle ) { if ( state != TransferState.WORKING ) - throw new IllegalStateException( "Cannot write to file if state != WORKING" ); + throw new IllegalStateException( "Cannot write to file if state != WORKING (is " + state.toString() + ")" ); try { tmpFileHandle.seek( fileOffset ); tmpFileHandle.write( data, 0, dataLength ); @@ -459,9 +465,14 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H // Fall through case VALID: if ( !chunk.isWrittenToDisk() ) { - writeFileData( chunk.range.startOffset, chunk.range.getLength(), data ); + try { + writeFileData( chunk.range.startOffset, chunk.range.getLength(), data ); + chunks.markCompleted( chunk, true ); + } catch ( Exception e ) { + LOGGER.warn( "Cannot write to file after hash check", e ); + chunks.markFailed( chunk ); + } } - chunks.markCompleted( chunk, true ); chunkStatusChanged( chunk ); if ( chunks.isComplete() ) { finishUploadInternal(); |