diff options
author | Simon Rettberg | 2015-08-19 17:17:33 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-08-19 17:17:33 +0200 |
commit | 247cd98da8dfb981e0ad1cdc12b086503088209d (patch) | |
tree | 539e7058b46788c42fd46c16e68927e0c5a20b76 /dozentenmodulserver | |
parent | [client] Layout code cleanup. (diff) | |
download | tutor-module-247cd98da8dfb981e0ad1cdc12b086503088209d.tar.gz tutor-module-247cd98da8dfb981e0ad1cdc12b086503088209d.tar.xz tutor-module-247cd98da8dfb981e0ad1cdc12b086503088209d.zip |
Adapt to master-sync-shared changes
Diffstat (limited to 'dozentenmodulserver')
4 files changed, 75 insertions, 8 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java index 81898d7c..2f913ba0 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java @@ -7,6 +7,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import javax.net.ssl.SSLContext; + import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; import org.apache.thrift.transport.TTransportException; @@ -78,7 +80,8 @@ public class App { } }); - ThriftManager.setMasterServerAddress("bwlp-masterserver.ruf.uni-freiburg.de"); + ThriftManager.setMasterServerAddress(SSLContext.getDefault(), + "bwlp-masterserver.ruf.uni-freiburg.de", 9091, 30000); // Load useful things from master server OrganizationList.get(); diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/ActiveUpload.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/ActiveUpload.java index 01cd072d..f03c06f3 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/ActiveUpload.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/ActiveUpload.java @@ -4,7 +4,6 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; -import java.nio.ByteBuffer; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; import java.util.ArrayList; @@ -115,7 +114,7 @@ public class ActiveUpload implements HashCheckCallback { } public ActiveUpload(String uploadId, UserInfo owner, ImageDetailsRead image, File destinationFile, - long fileSize, List<ByteBuffer> sha1Sums, byte[] machineDescription) throws FileNotFoundException { + long fileSize, List<byte[]> sha1Sums, byte[] machineDescription) throws FileNotFoundException { this.destinationFile = destinationFile; this.outFile = new RandomAccessFile(destinationFile, "rw"); this.chunks = new ChunkList(fileSize, sha1Sums); @@ -326,7 +325,7 @@ public class ActiveUpload implements HashCheckCallback { @Override public FileRange get() { if (currentChunk != null) { - if (currentChunk.hasSha1Sum() && hashChecker != null) { + if (hashChecker != null && currentChunk.getSha1Sum() != null) { try { hashChecker.queue(currentChunk, buffer, activeUpload); } catch (InterruptedException e) { @@ -365,7 +364,8 @@ public class ActiveUpload implements HashCheckCallback { public void hashCheckDone(HashResult result, byte[] data, FileChunk chunk) { switch (result) { case FAILURE: - LOGGER.warn("Hash check of chunk " + chunk.toString() + " failed. Assuming valid."); + LOGGER.warn("Hash check of chunk " + chunk.toString() + + " could not be executed. Assuming valid :-("); // Fall through case VALID: writeFileData(chunk.range.startOffset, chunk.range.getLength(), data); @@ -376,6 +376,38 @@ public class ActiveUpload implements HashCheckCallback { } } + private byte[] loadChunkFromFile(FileChunk chunk) { + synchronized (outFile) { + try { + outFile.seek(chunk.range.startOffset); + byte[] buffer = new byte[chunk.range.getLength()]; + outFile.readFully(buffer); + return buffer; + } catch (IOException e) { + LOGGER.error( + "Could not read chunk " + chunk.getChunkIndex() + " of File " + + destinationFile.toString(), e); + return null; + } + } + } + + public void updateBlockHashList(List<byte[]> hashList) { + if (hashChecker == null) + return; + chunks.updateSha1Sums(hashList); + for (FileChunk chunk = chunks.getUnhashedComplete(); chunk != null;) { + byte[] data = loadChunkFromFile(chunk); + try { + hashChecker.queue(chunk, data, this); + } catch (InterruptedException e) { + LOGGER.warn("Got interrupted while queueing block for hash check", e); + Thread.currentThread().interrupt(); + return; + } + } + } + // TODO: Clean up old stale uploads } diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java index cc54ba94..a71b7b3f 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java @@ -3,7 +3,6 @@ package org.openslx.bwlp.sat.fileserv; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.nio.ByteBuffer; import java.sql.SQLException; import java.util.Iterator; import java.util.List; @@ -117,7 +116,7 @@ public class FileServer implements IncomingEvent { } public ActiveUpload createNewUserUpload(UserInfo owner, ImageDetailsRead image, long fileSize, - List<ByteBuffer> sha1Sums, byte[] machineDescription) throws TTransferRejectedException { + List<byte[]> sha1Sums, byte[] machineDescription) throws TTransferRejectedException { Iterator<ActiveUpload> it = uploads.values().iterator(); int activeUploads = 0; while (it.hasNext()) { diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java index f1240c21..b3e6208e 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java @@ -2,6 +2,7 @@ package org.openslx.bwlp.sat.thrift; import java.nio.ByteBuffer; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -71,6 +72,18 @@ public class ServerHandler implements SatelliteServer.Iface { * File Transfer */ + private List<byte[]> unwrapHashes(List<ByteBuffer> blockHashes) { + if (blockHashes == null || blockHashes.isEmpty()) + return null; + List<byte[]> hashList = new ArrayList<>(blockHashes.size()); + for (ByteBuffer hash : blockHashes) { + byte[] buffer = new byte[hash.remaining()]; + hash.get(buffer); + hashList.add(buffer); + } + return hashList; + } + @Override public TransferInformation requestImageVersionUpload(String userToken, String imageBaseId, long fileSize, List<ByteBuffer> blockHashes, ByteBuffer machineDescription) throws TTransferRejectedException, @@ -83,16 +96,29 @@ public class ServerHandler implements SatelliteServer.Iface { } catch (SQLException e) { throw new TInternalServerError(); } + // Unwrap machine description byte[] mDesc = null; if (machineDescription != null) { mDesc = new byte[machineDescription.remaining()]; machineDescription.get(mDesc); } - ActiveUpload transfer = fileServer.createNewUserUpload(user, image, fileSize, blockHashes, mDesc); + // Unwrap sha1sum list + List<byte[]> hashList = unwrapHashes(blockHashes); + ActiveUpload transfer = fileServer.createNewUserUpload(user, image, fileSize, hashList, mDesc); return new TransferInformation(transfer.getId(), fileServer.getPlainPort(), fileServer.getSslPort()); } @Override + public void updateBlockHashes(String uploadToken, List<ByteBuffer> blockHashes) + throws TInvalidTokenException { + ActiveUpload upload = fileServer.getUploadByToken(uploadToken); + if (upload == null) + throw new TInvalidTokenException(); + List<byte[]> hashList = unwrapHashes(blockHashes); + upload.updateBlockHashList(hashList); + } + + @Override public ByteBuffer getMachineDescription(String userToken, String imageVersionId) throws TAuthorizationException, TInternalServerError, TNotFoundException, TException { // TODO Auto-generated method stub @@ -300,6 +326,13 @@ public class ServerHandler implements SatelliteServer.Iface { } @Override + public void deleteImageBase(String userToken, String imageBaseId) throws TAuthorizationException, + TNotFoundException, TInternalServerError { + // TODO Auto-generated method stub + + } + + @Override public void writeImagePermissions(String userToken, String imageBaseId, Map<String, ImagePermissions> permissions) throws TAuthorizationException, TNotFoundException, TInternalServerError { |