diff options
| author | Simon Rettberg | 2015-10-02 16:58:42 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2015-10-02 16:58:42 +0200 |
| commit | 7960b7b5744cac56c65a576be3c452fa8bdaca66 (patch) | |
| tree | e74a7c6908c21c43557cfa8cbc71c47e2f601704 /dozentenmodulserver/src/main/java | |
| parent | [server] Fix NPE (diff) | |
| download | tutor-module-7960b7b5744cac56c65a576be3c452fa8bdaca66.tar.gz tutor-module-7960b7b5744cac56c65a576be3c452fa8bdaca66.tar.xz tutor-module-7960b7b5744cac56c65a576be3c452fa8bdaca66.zip | |
[server] Fix constraint issues when deleting an image by baseid
Diffstat (limited to 'dozentenmodulserver/src/main/java')
| -rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java | 45 | ||||
| -rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java | 2 |
2 files changed, 23 insertions, 24 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 320f6cc5..ace8df01 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 @@ -501,14 +501,14 @@ public class DbImage { affectedList.add(imageVersionId); } } + if (!affectedList.isEmpty()) { + updateLatestVersion(connection, affectedList.toArray(new String[affectedList.size()])); + } connection.commit(); } catch (SQLException e) { LOGGER.error("Query failed in DbImage.markForDeletion()", e); throw e; } - if (!affectedList.isEmpty()) { - updateLatestVersionAsync(affectedList.toArray(new String[affectedList.size()])); - } } public static void setShareMode(String imageBaseId, ImageBaseWrite newData) throws SQLException { @@ -640,15 +640,21 @@ public class DbImage { public static void deleteVersionPermanently(LocalImageVersion image) throws SQLException { try (MysqlConnection connection = Database.getConnection()) { - DbLecture.unlinkFromImageVersion(connection, image.imageVersionId); DbLecture.deletePermanently(connection, image); + // Unlink any linked lectures + DbLecture.unlinkFromImageVersion(connection, image.imageVersionId); + // Unlink latest version field from image base + MysqlStatement unlinkStmt = connection.prepareStatement("UPDATE imagebase SET latestversionid = NULL" + + " WHERE latestversionid = :imageversionid"); + unlinkStmt.setString("imageversionid", image.imageVersionId); + unlinkStmt.executeUpdate(); MysqlStatement stmt = connection.prepareStatement("DELETE FROM imageversion" + " WHERE imageversionid = :imageversionid"); stmt.setString("imageversionid", image.imageVersionId); stmt.executeUpdate(); connection.commit(); } catch (SQLException e) { - LOGGER.error("Query failed in DbImage.deletePermanently()", e); + LOGGER.error("Query failed in DbImage.deleteVersionPermanently()", e); throw e; } } @@ -669,31 +675,26 @@ public class DbImage { }); } - private static void updateLatestVersionAsync(final String... changingImageVersionIds) { - if (changingImageVersionIds == null || changingImageVersionIds.length == 0) + private static void updateLatestVersion(MysqlConnection connection, LocalImageVersion... versions) + throws SQLException { + if (versions == null || versions.length == 0) return; - QuickTimer.scheduleOnce(new Task() { - @Override - public void fire() { - try (MysqlConnection connection = Database.getConnection()) { - for (String changingImageVersionId : changingImageVersionIds) { - versionValidityChanged(connection, changingImageVersionId, null); - } - connection.commit(); - } catch (SQLException | TNotFoundException e) { - LOGGER.error("Query failed in DbImage.updateLatestVersionAsync()", e); - } + for (LocalImageVersion version : versions) { + try { + versionValidityChanged(connection, version.imageVersionId, version.imageBaseId); + } catch (TNotFoundException e) { + // Swallow - logging happens in called method } - }); + } } - private static void updateLatestVersion(MysqlConnection connection, LocalImageVersion... versions) + private static void updateLatestVersion(MysqlConnection connection, String... versions) throws SQLException { if (versions == null || versions.length == 0) return; - for (LocalImageVersion version : versions) { + for (String version : versions) { try { - versionValidityChanged(connection, version.imageVersionId, version.imageBaseId); + versionValidityChanged(connection, version, null); } catch (TNotFoundException e) { // Swallow - logging happens in called method } 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 8cc2cd75..850f56b8 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 @@ -10,7 +10,6 @@ import org.apache.log4j.Logger; import org.joda.time.DateTime; import org.openslx.bwlp.sat.database.mappers.DbImage; import org.openslx.bwlp.sat.database.mappers.DbImage.DeleteState; -import org.openslx.bwlp.sat.database.mappers.DbLecture; import org.openslx.bwlp.sat.database.models.LocalImageVersion; import org.openslx.bwlp.sat.util.FileSystem; import org.openslx.util.QuickTimer; @@ -137,7 +136,6 @@ public class DeleteOldImages implements Runnable { for (LocalImageVersion version : deletables) { FileSystem.deleteImageRelatedFiles(version); try { - DbLecture.unlinkFromImageVersion(version.imageVersionId); DbImage.deleteVersionPermanently(version); } catch (SQLException e) { writeln(sb, version.imageVersionId, ": Cannot delete image: ", e.getMessage()); |
