diff options
author | Simon Rettberg | 2015-08-20 12:47:02 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-08-20 12:47:02 +0200 |
commit | 86bb3209abe911407ae9ddd05cf34ffc5cf9dfcd (patch) | |
tree | 9065390705e6e7de745bbe868b99752b3fd7aee3 /dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/AsyncHashGenerator.java | |
parent | Merge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1 (diff) | |
download | tutor-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.java | 12 |
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; + } + } |