diff options
author | Simon Rettberg | 2022-03-21 17:22:16 +0100 |
---|---|---|
committer | Simon Rettberg | 2022-03-21 17:22:16 +0100 |
commit | ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0 (patch) | |
tree | af62b617fb6149afce16d417474abd49f373cbf9 /dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java | |
parent | [client] Cleanup chunk data lists when upload finished or is cancelled (diff) | |
download | tutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.tar.gz tutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.tar.xz tutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.zip |
[client] Memory management; handle OOM when hashing, do not skip blocks
Try to free some references regarding transfers earlier, e.g. the hash
worker and list of hashes as soon as hashing is finished on upload, not
only when the upload is finished and the window is closed.
Properly delay hashing of blocks in OOM scenarios, and be more
conservative with the number of hash workers, i.e. take maximum JVM
memory into account.
Also, improve thread naming.
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.java | 14 |
1 files changed, 9 insertions, 5 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 cca42929..4f7ed6fe 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/TransferTask.java @@ -69,7 +69,7 @@ public abstract class TransferTask implements Runnable, TransferEventEmitter { ensureActivity(); Util.sleep(UPDATE_INTERVAL_MS); } - LOGGER.info("Transfer worker mainloop finished"); + LOGGER.debug("Transfer worker mainloop finished"); List<TransferThread> joinList = new ArrayList<>(); synchronized (transfers) { isCancelled = true; @@ -85,7 +85,7 @@ public abstract class TransferTask implements Runnable, TransferEventEmitter { Util.joinThread(t); } cleanup(); - LOGGER.info("Trasfer worker exiting"); + LOGGER.info("Transfer worker exiting"); } protected void cleanup() { @@ -197,7 +197,7 @@ public abstract class TransferTask implements Runnable, TransferEventEmitter { protected final void connectFailed(TransferThread thread) { synchronized (transfers) { connectingTransfers.remove(thread); - LOGGER.info("Establishing new transfer connection failed, [a:" + transfers.size() + "/c:" + LOGGER.debug("Establishing new transfer connection failed, [a:" + transfers.size() + "/c:" + connectingTransfers.size() + "]"); } } @@ -207,7 +207,7 @@ public abstract class TransferTask implements Runnable, TransferEventEmitter { connectingTransfers.remove(thread); if (!isCancelled) { transfers.add(thread); - LOGGER.info("Establishing new transfer connection succeeded, [a:" + transfers.size() + "/c:" + LOGGER.debug("Establishing new transfer connection succeeded, [a:" + transfers.size() + "/c:" + connectingTransfers.size() + "]"); return; } @@ -219,7 +219,7 @@ public abstract class TransferTask implements Runnable, TransferEventEmitter { protected final void transferEnded(TransferThread thread, boolean success) { synchronized (transfers) { transfers.remove(thread); - LOGGER.info("A transfer connection has finished (success=" + success + "), [a:" + transfers.size() + "/c:" + LOGGER.debug("A transfer connection has finished (success=" + success + "), [a:" + transfers.size() + "/c:" + connectingTransfers.size() + "]"); if (endgame && !success && transfers.isEmpty()) { // We had a transfer that reported success before, so we assume there are no more pending blocks @@ -262,6 +262,10 @@ public abstract class TransferTask implements Runnable, TransferEventEmitter { } protected abstract static class TransferThread extends Thread { + + public TransferThread(String name) { + super(name); + } @Override public abstract void run(); |