summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-11 19:18:27 +0200
committerSimon Rettberg2015-08-11 19:18:27 +0200
commit36a56100470bcc5537e57dcac0992ad53b0cdff1 (patch)
treef601e5f2962cc3aee4845929f397b06cebb7dd71 /dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java
parent[client] Invalidate lecture list after creating new lecture (diff)
downloadtutor-module-36a56100470bcc5537e57dcac0992ad53b0cdff1.tar.gz
tutor-module-36a56100470bcc5537e57dcac0992ad53b0cdff1.tar.xz
tutor-module-36a56100470bcc5537e57dcac0992ad53b0cdff1.zip
[client] Back off with reconnects for file transfers if it fails too often
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java32
1 files changed, 18 insertions, 14 deletions
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() {