diff options
author | Simon Rettberg | 2016-04-13 18:39:26 +0200 |
---|---|---|
committer | Simon Rettberg | 2016-04-13 18:39:26 +0200 |
commit | 5a2b7a8a2f0a9ea5d01895b00f75beaa7af55622 (patch) | |
tree | 5bdc5411cd9954577e5489d5e4271c800d826e9c /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java | |
parent | [client] fix bad commit (diff) | |
download | tutor-module-5a2b7a8a2f0a9ea5d01895b00f75beaa7af55622.tar.gz tutor-module-5a2b7a8a2f0a9ea5d01895b00f75beaa7af55622.tar.xz tutor-module-5a2b7a8a2f0a9ea5d01895b00f75beaa7af55622.zip |
(WiP) Global image sync
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java')
-rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java index 55fa02b2..8aafe862 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java @@ -891,15 +891,35 @@ public class DbImage { } } + public static List<ByteBuffer> getBlockHashes(String imageVersionId) throws SQLException { + try (MysqlConnection connection = Database.getConnection()) { + return getBlockHashes(connection, imageVersionId); + } catch (SQLException e) { + LOGGER.error("Query failed in DbImage.getBlockHashes()", e); + throw e; + } + } + private static List<ByteBuffer> getBlockHashes(MysqlConnection connection, String imageVersionId) throws SQLException { - MysqlStatement stmt = connection.prepareStatement("SELECT blocksha1 FROM imageblock" + MysqlStatement stmt = connection.prepareStatement("SELECT startbyte, blocksha1 FROM imageblock" + " WHERE imageversionid = :imageversionid ORDER BY startbyte ASC"); stmt.setString("imageversionid", imageVersionId); ResultSet rs = stmt.executeQuery(); List<ByteBuffer> list = new ArrayList<>(); + long expectedOffset = 0; while (rs.next()) { - list.add(ByteBuffer.wrap(rs.getBytes("blocksha1"))); + long currentOffset = rs.getLong("startbyte"); + if (currentOffset < expectedOffset) + continue; + while (currentOffset > expectedOffset) { + list.add(null); + expectedOffset += FileChunk.CHUNK_SIZE; + } + if (currentOffset == expectedOffset) { + list.add(ByteBuffer.wrap(rs.getBytes("blocksha1"))); + expectedOffset += FileChunk.CHUNK_SIZE; + } } return list; } |