summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodul/src/main')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java32
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java16
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java2
4 files changed, 34 insertions, 21 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
index ec4f5f18..03abada4 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
@@ -35,7 +35,6 @@ public class DownloadTask extends TransferTask {
private final RandomAccessFile fileHandle;
private final ChunkList chunks;
private boolean fileWritable = true;
- private AtomicInteger consecutiveInitFails = new AtomicInteger();
public DownloadTask(String host, int port, String downloadToken, File destinationFile, long fileSize,
List<ByteBuffer> sha1Sums) throws FileNotFoundException {
@@ -128,6 +127,7 @@ public class DownloadTask extends TransferTask {
downloader = new Downloader(host, port, Config.TRANSFER_TIMEOUT, null, downloadToken);
} catch (Exception e) {
LOGGER.warn("Could not initialize new uploader", e);
+ consecutiveInitFails.incrementAndGet();
connectFailed(this);
return;
} // TODO: SSL
@@ -168,6 +168,9 @@ public class DownloadTask extends TransferTask {
if (consecutiveInitFails.get() > 20) {
state = TransferState.ERROR;
error = "Cannot talk to server after 20 tries...";
+ } else if (chunks.isComplete()) {
+ state = TransferState.FINISHED;
+ error = null;
} else {
state = TransferState.WORKING;
error = null;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
index 45efe72f..72f4f6e0 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
@@ -4,6 +4,7 @@ import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.TransferState;
@@ -26,6 +27,8 @@ public abstract class TransferTask implements Runnable {
protected final List<TransferThread> transfers = new ArrayList<>();
private final List<TransferThread> connectingTransfers = new ArrayList<>();
+ protected final AtomicInteger consecutiveInitFails = new AtomicInteger();
+
/**
* List of listeners that want to get status updates about the transfer.
*/
@@ -35,7 +38,7 @@ public abstract class TransferTask implements Runnable {
private volatile boolean isCancelled = false;
private boolean endgame = false;
private int minConnectionCount = 1;
- private int failCount = 0;
+ private long lastConnectionAttempt = 0;
protected final File localFile;
protected final long fileSize;
@@ -149,14 +152,19 @@ public abstract class TransferTask implements Runnable {
it.remove();
}
}
+ if (transfers.size() + connectingTransfers.size() >= minConnectionCount)
+ return;
- if (transfers.size() + connectingTransfers.size() < minConnectionCount) {
- TransferThread thread = createNewThread();
- if (thread != null) {
- thread.setDaemon(true);
- connectingTransfers.add(thread);
- thread.start();
- }
+ long now = System.currentTimeMillis();
+ int fails = consecutiveInitFails.get();
+ if (lastConnectionAttempt + fails * 10000 > now)
+ return;
+ lastConnectionAttempt = now;
+ TransferThread thread = createNewThread();
+ if (thread != null) {
+ thread.setDaemon(true);
+ connectingTransfers.add(thread);
+ thread.start();
}
}
}
@@ -168,7 +176,6 @@ public abstract class TransferTask implements Runnable {
connectingTransfers.remove(thread);
if (transfers.size() > 0)
return;
- failCount++;
}
}
@@ -177,7 +184,6 @@ public abstract class TransferTask implements Runnable {
connectingTransfers.remove(thread);
if (!isCancelled) {
transfers.add(thread);
- failCount = 0;
return;
}
}
@@ -213,10 +219,8 @@ public abstract class TransferTask implements Runnable {
*
* @return connect fails
*/
- public final int getConnectFailCount() {
- synchronized (transfers) {
- return failCount;
- }
+ public final int getFailCount() {
+ return consecutiveInitFails.get();
}
public int getTransferCount() {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java
index b0655115..f7f5fca7 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/UploadTask.java
@@ -33,7 +33,7 @@ public class UploadTask extends TransferTask {
private final String host;
private final int port;
private final String uploadToken;
-
+
public UploadTask(String host, int port, String uploadToken, File uploadFile)
throws FileNotFoundException {
super(uploadFile, uploadFile.length());
@@ -46,7 +46,7 @@ public class UploadTask extends TransferTask {
}
private class UploadThread extends TransferThread {
-// private long totalBytesRead = 0;
+ // private long totalBytesRead = 0;
private long currentSpeed = 0;
private Uploader uploader = null;
@@ -56,6 +56,7 @@ public class UploadTask extends TransferTask {
uploader = new Uploader(host, port, Config.TRANSFER_TIMEOUT, null, uploadToken);
} catch (Exception e) {
LOGGER.warn("Could not initialize new uploader", e);
+ consecutiveInitFails.incrementAndGet();
connectFailed(this);
return;
} // TODO: SSL
@@ -75,7 +76,7 @@ public class UploadTask extends TransferTask {
if (lastUpdate + UPDATE_INTERVAL_MS < now) {
synchronized (thread) {
// Calculate updated speed
-// totalBytesRead += currentBytes;
+ // totalBytesRead += currentBytes;
lastBytes = (lastBytes * 2 + currentBytes) / 3;
currentSpeed = (1000 * lastBytes) / (now - lastUpdate);
lastUpdate = now;
@@ -90,9 +91,14 @@ public class UploadTask extends TransferTask {
fireErrorMessage(message);
}
});
+ if (ret) {
+ consecutiveInitFails.set(0);
+ } else {
+ consecutiveInitFails.incrementAndGet();
+ }
transferEnded(this, ret);
}
-
+
@Override
public long getCurrentSpeed() {
synchronized (this) {
@@ -142,7 +148,7 @@ public class UploadTask extends TransferTask {
missing++;
}
}
- final long bytesRemaining = CHUNK_SIZE * (long)missing;
+ final long bytesRemaining = CHUNK_SIZE * (long) missing;
timeRemaining = (1000 * bytesRemaining) / (speed + 1);
}
TransferEvent event = new TransferEvent(state, blocks, speed, timeRemaining, error);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
index a4675f15..4802256b 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java
@@ -205,7 +205,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
new Thread(state.uploadTask).start();
do {
Util.sleep(5);
- } while (state.uploadTask.getConnectFailCount() == 0 && state.uploadTask.getTransferCount() == 0
+ } while (state.uploadTask.getFailCount() == 0 && state.uploadTask.getTransferCount() == 0
&& !state.uploadTask.isCanceled());
}