summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-19 17:17:33 +0200
committerSimon Rettberg2015-08-19 17:17:33 +0200
commit247cd98da8dfb981e0ad1cdc12b086503088209d (patch)
tree539e7058b46788c42fd46c16e68927e0c5a20b76 /dozentenmodulserver
parent[client] Layout code cleanup. (diff)
downloadtutor-module-247cd98da8dfb981e0ad1cdc12b086503088209d.tar.gz
tutor-module-247cd98da8dfb981e0ad1cdc12b086503088209d.tar.xz
tutor-module-247cd98da8dfb981e0ad1cdc12b086503088209d.zip
Adapt to master-sync-shared changes
Diffstat (limited to 'dozentenmodulserver')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/App.java5
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/ActiveUpload.java40
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java3
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java35
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 {