diff options
author | Simon Rettberg | 2015-09-09 18:47:45 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-09-09 18:47:45 +0200 |
commit | 115bbf31319678f18c184980e2cc9a3b1ed5ed45 (patch) | |
tree | 6799d85c2ed0552f9cb0fc6de4edc447c2ea0246 /dozentenmodulserver/src/main/java/org | |
parent | Merge branch 'v1.1' of stp:openslx-ng/tutor-module into v1.1 (diff) | |
download | tutor-module-115bbf31319678f18c184980e2cc9a3b1ed5ed45.tar.gz tutor-module-115bbf31319678f18c184980e2cc9a3b1ed5ed45.tar.xz tutor-module-115bbf31319678f18c184980e2cc9a3b1ed5ed45.zip |
[server] Delete incomplete uploads (missing meta data)
Diffstat (limited to 'dozentenmodulserver/src/main/java/org')
3 files changed, 37 insertions, 5 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 bf79e88f..40d97657 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 @@ -116,8 +116,8 @@ public class DbImage { } private final static String localImageBaseSql = "SELECT" - + " imageversionid, imagebaseid, filepath, filesize, uploaderid, createtime, expiretime, isvalid" - + " FROM imageversion"; + + " v.imageversionid, v.imagebaseid, v.filepath, v.filesize, v.uploaderid, v.createtime, v.expiretime, v.isvalid" + + " FROM imageversion v"; private static LocalImageVersion toLocalImageVersion(ResultSet rs) throws SQLException { return new LocalImageVersion(rs.getString("imageversionid"), rs.getString("imagebaseid"), @@ -815,6 +815,25 @@ public class DbImage { return true; } + public static List<LocalImageVersion> getVersionsWithMissingData() throws SQLException { + try (MysqlConnection connection = Database.getConnection()) { + MysqlStatement stmt = connection.prepareStatement(localImageBaseSql + + " INNER JOIN imagebase b USING (imagebaseid)" + + " WHERE b.virtid IS NULL OR b.osid IS NULL"); + ResultSet rs = stmt.executeQuery(); + List<LocalImageVersion> list = new ArrayList<>(); + while (rs.next()) { + list.add(new LocalImageVersion(rs.getString("imageversionid"), rs.getString("imagebaseid"), + rs.getString("filepath"), rs.getLong("filesize"), rs.getString("uploaderid"), + rs.getLong("createtime"), 0, rs.getBoolean("isvalid"))); + } + return list; + } catch (SQLException e) { + LOGGER.error("Query failed in DbImage.getVersionsWithMissingData()", e); + throw e; + } + } + public static int deleteOrphanedBases() throws SQLException { try (MysqlConnection connection = Database.getConnection()) { // Get all image base entries which have no image version diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java index c1952434..96b6e44d 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java @@ -36,4 +36,9 @@ public class LocalImageVersion { && this.imageVersionId.equals(((LocalImageVersion) that).imageVersionId); } + @Override + public int hashCode() { + return imageVersionId == null ? 0 : imageVersionId.hashCode() ^ 12345; + } + } diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java index 929fbb2a..531f169a 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java @@ -1,7 +1,9 @@ package org.openslx.bwlp.sat.maintenance; import java.sql.SQLException; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; @@ -63,14 +65,20 @@ public class DeleteOldImages implements Runnable { return; } LOGGER.info("Looking for old image versions to delete"); - List<LocalImageVersion> versions; + Set<LocalImageVersion> versions = new HashSet<>(); // First get a list of all image versions which reached their expire date, // no matter if valid or invalid try { - versions = DbImage.getExpiringLocalImageVersions(0); + List<LocalImageVersion> list = DbImage.getExpiringLocalImageVersions(0); + versions.addAll(list); } catch (SQLException e) { LOGGER.error("Will not be able to clean up old image versions"); - return; + } + try { + List<LocalImageVersion> list = DbImage.getVersionsWithMissingData(); + versions.addAll(list); + } catch (SQLException e) { + LOGGER.error("Will not be able to clean up invalid image versions"); } // Mark all as invalid. This will also trigger mails if they have been valid before try { |