diff options
author | Simon Rettberg | 2018-05-11 17:36:45 +0200 |
---|---|---|
committer | Simon Rettberg | 2018-05-11 17:36:45 +0200 |
commit | b3557ec2e121f91ca842ca37f0e4b582556046a4 (patch) | |
tree | 21f6feb3f678db1da60b6f72fea6ef1cbb72fee0 /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers | |
parent | [client] Fix inverted logic for slowed down hashing (diff) | |
download | tutor-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.java | 34 |
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; + } + } |