summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
diff options
context:
space:
mode:
authorSimon Rettberg2016-04-20 17:10:14 +0200
committerSimon Rettberg2016-04-20 17:10:14 +0200
commitecd3d22510aa2f1aa0c44cee015bd690d19f45ce (patch)
tree8ec91bf9500a9575308898f0f70b5a90f0ba4737 /src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
parentAdd queryUploadStatus to master server (diff)
downloadmaster-sync-shared-ecd3d22510aa2f1aa0c44cee015bd690d19f45ce.tar.gz
master-sync-shared-ecd3d22510aa2f1aa0c44cee015bd690d19f45ce.tar.xz
master-sync-shared-ecd3d22510aa2f1aa0c44cee015bd690d19f45ce.zip
More imgsync stuff
Diffstat (limited to 'src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java')
-rw-r--r--src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java36
1 files changed, 21 insertions, 15 deletions
diff --git a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
index 04ddc17..c2d8ee9 100644
--- a/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
+++ b/src/main/java/org/openslx/filetransfer/util/IncomingTransferBase.java
@@ -155,8 +155,9 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
return state;
}
- public synchronized TransferStatus getStatus() {
- return new TransferStatus(chunks.getStatusArray(), getState());
+ public synchronized TransferStatus getStatus()
+ {
+ return new TransferStatus( chunks.getStatusArray(), getState() );
}
public final ChunkList getChunks()
@@ -186,9 +187,10 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
chunks.updateSha1Sums( hashList );
if ( hashChecker == null )
return;
- FileChunk chunk;
- int cnt = 0;
- while ( null != ( chunk = chunks.getUnhashedComplete() ) && ++cnt <= 3 ) {
+ for ( int cnt = 0; cnt < 3; ++cnt ) {
+ FileChunk chunk = chunks.getUnhashedComplete();
+ if ( chunk == null )
+ break;
byte[] data;
try {
data = loadChunkFromFile( chunk );
@@ -200,14 +202,18 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
}
if ( data == null ) {
LOGGER.warn( "blockhash update: Will mark unloadable unhashed chunk as valid :-(" );
- chunks.markSuccessful( chunk );
+ chunks.markCompleted( chunk, true );
chunkStatusChanged( chunk );
continue;
}
try {
- if ( !hashChecker.queue( chunk, data, this, false ) ) // false == blocked while adding, so stop
+ if ( !hashChecker.queue( chunk, data, this, false ) ) { // false == queue full, stop
+ chunks.markCompleted( chunk, false );
break;
+ }
} catch ( InterruptedException e ) {
+ LOGGER.debug( "updateBlockHashList got interrupted" );
+ chunks.markCompleted( chunk, false );
Thread.currentThread().interrupt();
return;
}
@@ -304,7 +310,7 @@ 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.markSuccessful( currentChunk );
+ chunks.markCompleted( currentChunk, true );
chunkStatusChanged( currentChunk );
}
}
@@ -356,7 +362,7 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
chunks.markFailed( cbh.currentChunk );
chunkStatusChanged( cbh.currentChunk );
}
- LOGGER.warn( "Download of " + getTmpFileName().getAbsolutePath() + " failed" );
+ LOGGER.debug( "Connection for " + getTmpFileName().getAbsolutePath() + " dropped" );
}
if ( state != TransferState.FINISHED && state != TransferState.ERROR ) {
lastActivityTime.set( System.currentTimeMillis() );
@@ -368,7 +374,7 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
finishUploadInternal();
} else {
// Keep pumping unhashed chunks into the hasher
- queueUnhashedChunk();
+ queueUnhashedChunk( true );
}
}
} );
@@ -443,7 +449,7 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
if ( !chunk.isWrittenToDisk() ) {
writeFileData( chunk.range.startOffset, chunk.range.getLength(), data );
}
- chunks.markSuccessful( chunk );
+ chunks.markCompleted( chunk, true );
chunkStatusChanged( chunk );
if ( chunks.isComplete() ) {
finishUploadInternal();
@@ -457,13 +463,13 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
break;
}
// A block finished, see if we can queue a new one
- queueUnhashedChunk();
+ queueUnhashedChunk( false );
}
/**
* Gets an unhashed chunk (if existent) and queues it for hashing
*/
- protected void queueUnhashedChunk()
+ protected void queueUnhashedChunk( boolean blocking )
{
FileChunk chunk = chunks.getUnhashedComplete();
if ( chunk == null )
@@ -479,12 +485,12 @@ public abstract class IncomingTransferBase extends AbstractTransfer implements H
}
if ( data == null ) {
LOGGER.warn( "Cannot queue unhashed chunk: Will mark unloadable unhashed chunk as valid :-(" );
- chunks.markSuccessful( chunk );
+ chunks.markCompleted( chunk, true );
chunkStatusChanged( chunk );
return;
}
try {
- hashChecker.queue( chunk, data, this, true );
+ hashChecker.queue( chunk, data, this, blocking );
} catch ( InterruptedException e ) {
Thread.currentThread().interrupt();
}