summaryrefslogblamecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java
blob: 90e7e80dbf900035df25cc5dd27a86a106ea6651 (plain) (tree)













































                                                                                                                      
package org.openslx.bwlp.sat.maintenance;

import java.sql.SQLException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.log4j.Logger;
import org.openslx.bwlp.sat.database.mappers.DbImage;
import org.openslx.bwlp.sat.database.models.LocalImageVersion;
import org.openslx.bwlp.sat.fileserv.FileServer;

/**
 * Delete old image versions (images that reached their expire time).
 */
public class DeleteOldImages implements Runnable {
	
	private static final Logger LOGGER = Logger.getLogger(DeleteOldImages.class);

	@Override
	public void run() {
		List<LocalImageVersion> versions;
		try {
			versions = DbImage.getExpiringLocalImageVersions(0);
		} catch (SQLException e) {
			LOGGER.error("Will not be able to clean up old image versions");
			return;
		}
		// Mark all as invalid. This will also trigger emails.
		try {
			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.");
		}
		// Delete them permanently only if they expired (at least) one day ago
		Set<String> deleteVersionIds = new HashSet<>();
		final long hardDelete = (System.currentTimeMillis() / 1000) - 86400;
		for (LocalImageVersion version : versions) {
			if (version.expireTime < hardDelete) {
				deleteVersionIds.add(version.imageVersionId);
				FileServer.composeAbsolutePath(version).delete();
			}
		}
	}

}