summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2016-04-20 17:10:42 +0200
committerSimon Rettberg2016-04-20 17:10:42 +0200
commitf73acba9666cbd61d1caa126103eef0f53bc5ac7 (patch)
tree77588f0ef1b0824392aa487af79c368a2e4ea103
parent[*] Display sat->master progress in client (diff)
downloadtutor-module-f73acba9666cbd61d1caa126103eef0f53bc5ac7.tar.gz
tutor-module-f73acba9666cbd61d1caa126103eef0f53bc5ac7.tar.xz
tutor-module-f73acba9666cbd61d1caa126103eef0f53bc5ac7.zip
More imgsync stuff
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java20
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java2
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java82
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java9
4 files changed, 29 insertions, 84 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
index 0aa48e8c..346928de 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
@@ -108,7 +108,7 @@ public class DownloadTask extends TransferTask {
fileHandle.seek(chunk.range.startOffset);
fileHandle.write(buffer, 0, chunk.range.getLength());
}
- chunks.markSuccessful(chunk);
+ chunks.markCompleted(chunk, true);
} catch (Exception e) {
LOGGER.error("Could not write to file at offset " + chunk.range.startOffset, e);
fileWritable = false;
@@ -182,16 +182,16 @@ public class DownloadTask extends TransferTask {
}
}
// 0 = complete, 1 = missing, 2 = uploading, 3 = queued for copying, 4 = copying
- if (progress != null) {
- int missing = 0;
- for (byte b : progress) {
- if (b != 0) {
- missing++;
- }
- }
- final long bytesRemaining = CHUNK_SIZE * (long) missing;
- timeRemaining = (1000 * bytesRemaining) / (speed + 1);
+ if (progress != null) {
+ int missing = 0;
+ for (byte b : progress) {
+ if (b != 0) {
+ missing++;
}
+ }
+ final long bytesRemaining = CHUNK_SIZE * (long) missing;
+ timeRemaining = (1000 * bytesRemaining) / (speed + 1);
+ }
return new TransferEvent(state, progress, speed, timeRemaining, error);
}
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 a4e8de3c..8c00ad60 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
@@ -231,7 +231,7 @@ public class FileServer implements IncomingEvent {
throw new TTransferRejectedException(errorMessage);
}
String key = UUID.randomUUID().toString();
- OutgoingDataTransfer transfer = new OutgoingDataTransfer(key, srcFile);
+ OutgoingDataTransfer transfer = new OutgoingDataTransfer(key, srcFile, getPlainPort(), getSslPort());
downloads.put(key, transfer);
return transfer;
}
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java
index e2276908..d87cdb9e 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/OutgoingDataTransfer.java
@@ -10,11 +10,11 @@ import java.util.concurrent.ExecutorService;
import org.apache.log4j.Logger;
import org.openslx.bwlp.sat.util.Configuration;
-import org.openslx.bwlp.sat.util.Constants;
import org.openslx.bwlp.thrift.iface.TransferInformation;
import org.openslx.filetransfer.Uploader;
+import org.openslx.filetransfer.util.OutgoingTransferBase;
-public class OutgoingDataTransfer extends AbstractTransfer {
+public class OutgoingDataTransfer extends OutgoingTransferBase {
private static final Logger LOGGER = Logger.getLogger(OutgoingDataTransfer.class);
@@ -23,21 +23,16 @@ public class OutgoingDataTransfer extends AbstractTransfer {
*/
private List<Uploader> uploads = new ArrayList<>();
- private final File sourceFile;
-
private final TransferInformation masterTransferInfo;
- private boolean isCanceled = false;
-
/**
* For downloads by clients.
*
* @param uuid UUID of this transfer
* @param file file to send to client
*/
- public OutgoingDataTransfer(String uuid, File file) {
- super(uuid);
- this.sourceFile = file;
+ public OutgoingDataTransfer(String uuid, File file, int plainPort, int sslPort) {
+ super(uuid, file, plainPort, sslPort);
this.masterTransferInfo = null;
}
@@ -49,9 +44,8 @@ public class OutgoingDataTransfer extends AbstractTransfer {
* @param absFile file to send to master server
*/
public OutgoingDataTransfer(TransferInformation transferInfo, File absFile) {
- super(transferInfo.token);
+ super(transferInfo.token, absFile, 0, 0);
this.masterTransferInfo = transferInfo;
- this.sourceFile = absFile;
}
/**
@@ -59,7 +53,7 @@ public class OutgoingDataTransfer extends AbstractTransfer {
* can make sure the transfer is running.
*/
public synchronized void heartBeat(ExecutorService pool) {
- if (isCanceled || masterTransferInfo == null)
+ if (masterTransferInfo == null)
return;
synchronized (uploads) {
if (uploads.size() >= 1)
@@ -96,68 +90,10 @@ public class OutgoingDataTransfer extends AbstractTransfer {
}
}
- /**
- * Add another connection for this file transfer.
- *
- * @param connection
- * @return true if the connection is accepted, false if it should be
- * discarded
- */
- public synchronized boolean addConnection(final Uploader connection, ExecutorService pool) {
- if (isCanceled || masterTransferInfo != null)
- return false;
- potentialFinishTime.set(0);
- synchronized (uploads) {
- if (uploads.size() > Constants.MAX_CONNECTIONS_PER_TRANSFER)
- return false;
- uploads.add(connection);
- }
- return runConnectionInternal(connection, pool);
- }
-
- private boolean runConnectionInternal(final Uploader connection, ExecutorService pool) {
- try {
- pool.execute(new Runnable() {
- @Override
- public void run() {
- boolean ret = connection.upload(sourceFile.getAbsolutePath());
- synchronized (uploads) {
- uploads.remove(connection);
- }
- if (ret && uploads.isEmpty() && potentialFinishTime.get() == 0) {
- potentialFinishTime.set(System.currentTimeMillis());
- }
- lastActivityTime.set(System.currentTimeMillis());
- }
- });
- } catch (Exception e) {
- LOGGER.warn("threadpool rejected the incoming file transfer", e);
- synchronized (uploads) {
- uploads.remove(connection);
- }
- return false;
- }
- return true;
- }
-
- @Override
- public synchronized void cancel() {
- isCanceled = true;
- synchronized (uploads) {
- for (Uploader u : uploads) {
- u.cancel();
- }
- }
- }
-
- @Override
- public boolean isActive() {
- return !isCanceled;
- }
-
@Override
- public int getActiveConnectionCount() {
- return uploads.size();
+ public String getRelativePath() {
+ // TODO Auto-generated method stub
+ return null;
}
}
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java
index 36faa4bc..cd46a1c5 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/SyncTransferHandler.java
@@ -17,6 +17,7 @@ import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.bwlp.sat.database.mappers.DbImage;
import org.openslx.bwlp.sat.database.mappers.DbUser;
+import org.openslx.bwlp.sat.database.models.ImageVersionMeta;
import org.openslx.bwlp.sat.database.models.LocalImageVersion;
import org.openslx.bwlp.sat.util.Constants;
import org.openslx.bwlp.sat.util.FileSystem;
@@ -114,15 +115,22 @@ public class SyncTransferHandler {
if (!absFile.isFile() || !absFile.canRead()) {
LOGGER.error("Cannot upload " + imgVersion.imageVersionId + ": file missing: "
+ absFile.getAbsolutePath());
+ DbImage.markValid(false, true, imgVersion);
throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "Source file not readable");
}
if (absFile.length() != imgVersion.fileSize) {
LOGGER.error("Cannot upload" + imgVersion.imageVersionId + ": wrong file size - expected "
+ imgVersion.fileSize + ", got " + absFile.length());
+ DbImage.markValid(false, true, imgVersion);
throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR,
"File corrupted on satellite server");
}
checkUploadCount();
+ ImageVersionMeta versionDetails = DbImage.getVersionDetails(imgVersion.imageVersionId);
+ if (versionDetails == null || versionDetails.machineDescription == null
+ || versionDetails.machineDescription.length == 0)
+ throw new TInvocationException(InvocationError.MISSING_DATA,
+ "Given virtual machine has no hardware description");
ImageDetailsRead details = DbImage.getImageDetails(null, imgVersion.imageBaseId);
List<ByteBuffer> blockHashes = DbImage.getBlockHashes(imgVersion.imageVersionId);
ImagePublishData publishData = new ImagePublishData();
@@ -137,6 +145,7 @@ public class SyncTransferHandler {
publishData.uploader = DbUser.getOrNull(imgVersion.uploaderId);
publishData.owner = DbUser.getOrNull(imgBase.ownerId);
publishData.virtId = details.virtId;
+ publishData.machineDescription = ByteBuffer.wrap(versionDetails.machineDescription);
try {
transferInfo = ThriftManager.getMasterClient().submitImage(userToken, publishData, blockHashes);
} catch (TAuthorizationException e) {