summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-20 12:47:02 +0200
committerSimon Rettberg2015-08-20 12:47:02 +0200
commit86bb3209abe911407ae9ddd05cf34ffc5cf9dfcd (patch)
tree9065390705e6e7de745bbe868b99752b3fd7aee3 /dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java
parentMerge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1 (diff)
downloadtutor-module-86bb3209abe911407ae9ddd05cf34ffc5cf9dfcd.tar.gz
tutor-module-86bb3209abe911407ae9ddd05cf34ffc5cf9dfcd.tar.xz
tutor-module-86bb3209abe911407ae9ddd05cf34ffc5cf9dfcd.zip
[client] Cancel hash generator if upload fails
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java12
1 files changed, 12 insertions, 0 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java
index 26b96cb6..0361631c 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java
@@ -25,6 +25,8 @@ public class AsyncHashGenerator implements Runnable {
private final String uploadToken;
+ private volatile boolean isCanceled = false;
+
public AsyncHashGenerator(String uploadToken, File uploadFile) {
this.uploadToken = uploadToken;
this.uploadFile = uploadFile;
@@ -52,6 +54,8 @@ public class AsyncHashGenerator implements Runnable {
byte[] buffer = new byte[(int) TransferTask.CHUNK_SIZE];
List<ByteBuffer> blockHashes = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
+ if (isCanceled)
+ break;
FileChunk chunk = list.get(i);
try {
file.seek(chunk.range.startOffset);
@@ -60,10 +64,14 @@ public class AsyncHashGenerator implements Runnable {
LOGGER.warn("Could not read file chunk " + chunk.getChunkIndex() + ", skipping", e);
continue;
}
+ if (isCanceled)
+ break;
digester.update(buffer, 0, chunk.range.getLength());
byte[] hash = digester.digest();
blockHashes.add(ByteBuffer.wrap(hash));
if (i <= 5 || i % 20 == 0 || i + 1 == list.size()) {
+ if (isCanceled)
+ break;
try {
ThriftManager.getSatClient().updateBlockHashes(uploadToken, blockHashes);
} catch (TInvalidTokenException e) {
@@ -79,4 +87,8 @@ public class AsyncHashGenerator implements Runnable {
}
}
+ public void cancel() {
+ isCanceled = true;
+ }
+
}