diff options
author | Simon Rettberg | 2015-08-22 23:04:10 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-08-22 23:04:10 +0200 |
commit | cb84995967e523443b2590f169af0694e3107c90 (patch) | |
tree | 5ceb1b7d38b070a4ac35663a01a95b9d15ca2bab /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java | |
parent | [server] Foundations for the maintenance module (diff) | |
download | tutor-module-cb84995967e523443b2590f169af0694e3107c90.tar.gz tutor-module-cb84995967e523443b2590f169af0694e3107c90.tar.xz tutor-module-cb84995967e523443b2590f169af0694e3107c90.zip |
[server] Work on version deletion/change/validity logic
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java')
-rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java | 49 |
1 files changed, 45 insertions, 4 deletions
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 90e7e80d..9a308dcd 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,14 +1,16 @@ 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; +import org.joda.time.DateTime; import org.openslx.bwlp.sat.database.mappers.DbImage; import org.openslx.bwlp.sat.database.models.LocalImageVersion; import org.openslx.bwlp.sat.fileserv.FileServer; +import org.openslx.util.QuickTimer; +import org.openslx.util.QuickTimer.Task; /** * Delete old image versions (images that reached their expire time). @@ -16,9 +18,41 @@ import org.openslx.bwlp.sat.fileserv.FileServer; public class DeleteOldImages implements Runnable { private static final Logger LOGGER = Logger.getLogger(DeleteOldImages.class); + + private static final DeleteOldImages instance = new DeleteOldImages(); + + private static long blockedUntil = 0; + + /** + * Initialize the delete task. This schedules a timer that runs + * every 5 minutes. If the hour of day reaches 3, it will fire + * the task, and block it from running for the next 12 hours. + */ + public synchronized static void init() { + if (blockedUntil != 0) + return; + blockedUntil = 1; + QuickTimer.scheduleAtFixedRate(new Task() { + @Override + public void fire() { + if (blockedUntil > System.currentTimeMillis()) + return; + DateTime now = DateTime.now(); + if (now.getHourOfDay() != 3 || now.getMinuteOfHour() > 15) + return; + if (Maintenance.trySubmit(instance)) { + blockedUntil = System.currentTimeMillis() + TimeUnit.HOURS.toMillis(12); + } + } + }, TimeUnit.MINUTES.toMillis(5), TimeUnit.MINUTES.toMillis(5)); + } + + private DeleteOldImages() { + } @Override public void run() { + LOGGER.info("Looking for old image versions to delete"); List<LocalImageVersion> versions; try { versions = DbImage.getExpiringLocalImageVersions(0); @@ -31,16 +65,23 @@ public class DeleteOldImages implements Runnable { DbImage.markValid(false, false, versions.toArray(new LocalImageVersion[versions.size()])); } catch (SQLException e) { LOGGER.error("Could not mark images to be deleted as invalid. Cleanup of old images failed."); + return; } // Delete them permanently only if they expired (at least) one day ago - Set<String> deleteVersionIds = new HashSet<>(); + int hardDeleteCount = 0; final long hardDelete = (System.currentTimeMillis() / 1000) - 86400; for (LocalImageVersion version : versions) { if (version.expireTime < hardDelete) { - deleteVersionIds.add(version.imageVersionId); + hardDeleteCount++; FileServer.composeAbsolutePath(version).delete(); + try { + DbImage.deletePermanently(version); + } catch (SQLException e) { + // Logging done in method + } } } + LOGGER.info("Deletion done. Soft: " + versions.size() + ", hard: " + hardDeleteCount); } } |