summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers
diff options
context:
space:
mode:
authorSimon Rettberg2018-05-11 17:36:45 +0200
committerSimon Rettberg2018-05-11 17:36:45 +0200
commitb3557ec2e121f91ca842ca37f0e4b582556046a4 (patch)
tree21f6feb3f678db1da60b6f72fea6ef1cbb72fee0 /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers
parent[client] Fix inverted logic for slowed down hashing (diff)
downloadtutor-module-b3557ec2e121f91ca842ca37f0e4b582556046a4.tar.gz
tutor-module-b3557ec2e121f91ca842ca37f0e4b582556046a4.tar.xz
tutor-module-b3557ec2e121f91ca842ca37f0e4b582556046a4.zip
[server] Support server side chunk copying
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImageBlock.java34
1 files changed, 34 insertions, 0 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImageBlock.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImageBlock.java
index 4e68da6d..56685c12 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImageBlock.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImageBlock.java
@@ -11,7 +11,9 @@ import org.apache.log4j.Logger;
import org.openslx.bwlp.sat.database.Database;
import org.openslx.bwlp.sat.database.MysqlConnection;
import org.openslx.bwlp.sat.database.MysqlStatement;
+import org.openslx.bwlp.sat.util.FileSystem;
import org.openslx.filetransfer.FileRange;
+import org.openslx.filetransfer.LocalChunkSource.ChunkSource;
import org.openslx.filetransfer.util.ChunkStatus;
import org.openslx.filetransfer.util.FileChunk;
@@ -36,6 +38,10 @@ public class DbImageBlock {
private static class AsyncThread extends Thread {
private final ArrayBlockingQueue<ChunkUpdate> queue = new ArrayBlockingQueue<>(100);
+
+ public AsyncThread() {
+ super("DbBlockUpdater");
+ }
public void put(ChunkUpdate chunk) throws InterruptedException {
queue.put(chunk);
@@ -174,4 +180,32 @@ public class DbImageBlock {
}
}
+ public static List<ChunkSource> getBlocksWithHash(List<byte[]> sums) throws SQLException {
+ List<ChunkSource> list = null;
+ try (MysqlConnection connection = Database.getConnection()) {
+ MysqlStatement stmt = connection.prepareStatement("SELECT startbyte, blocksize, filepath FROM imageblock"
+ + " INNER JOIN imageversion USING (imageversionid)"
+ + " WHERE blocksha1 = :sha1 GROUP BY imageversionid");
+ for (byte[] sha1 : sums) {
+ stmt.setBinary("sha1", sha1);
+ ResultSet rs = stmt.executeQuery();
+ if (!rs.next())
+ continue;
+ ChunkSource cs = new ChunkSource(sha1);
+ do {
+ cs.addFile(FileSystem.composeAbsolutePath(rs.getString("filepath")).getAbsolutePath(),
+ rs.getLong("startbyte"), rs.getInt("blocksize"));
+ } while (rs.next());
+ if (list == null) {
+ list = new ArrayList<>();
+ }
+ list.add(cs);
+ }
+ } catch (SQLException e) {
+ LOGGER.error("Query failed in DbImageBlock.getBlocksWithHash()", e);
+ throw e;
+ }
+ return list;
+ }
+
}