summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java
diff options
context:
space:
mode:
authorSimon Rettberg2015-09-09 18:47:45 +0200
committerSimon Rettberg2015-09-09 18:47:45 +0200
commit115bbf31319678f18c184980e2cc9a3b1ed5ed45 (patch)
tree6799d85c2ed0552f9cb0fc6de4edc447c2ea0246 /dozentenmodulserver/src/main/java
parentMerge branch 'v1.1' of stp:openslx-ng/tutor-module into v1.1 (diff)
downloadtutor-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')
-rw-r--r--dozentenmodulserver/src/main/java/fi/iki/elonen/NanoHTTPD.java5
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java23
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/models/LocalImageVersion.java5
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java14
4 files changed, 40 insertions, 7 deletions
diff --git a/dozentenmodulserver/src/main/java/fi/iki/elonen/NanoHTTPD.java b/dozentenmodulserver/src/main/java/fi/iki/elonen/NanoHTTPD.java
index 8d38f577..7296abea 100644
--- a/dozentenmodulserver/src/main/java/fi/iki/elonen/NanoHTTPD.java
+++ b/dozentenmodulserver/src/main/java/fi/iki/elonen/NanoHTTPD.java
@@ -41,7 +41,6 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PushbackInputStream;
-import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -219,7 +218,8 @@ public abstract class NanoHTTPD implements Runnable {
} catch (Exception e) {
// When the socket is closed by the client, we throw our own SocketException
// to break the "keep alive" loop above.
- if (!(e instanceof SocketException && "NanoHttpd Shutdown".equals(e.getMessage()))) {
+ if (!(e instanceof SocketTimeoutException)
+ && !(e instanceof SocketException && "NanoHttpd Shutdown".equals(e.getMessage()))) {
e.printStackTrace();
}
} finally {
@@ -971,6 +971,7 @@ public abstract class NanoHTTPD implements Runnable {
baos.write(pbuf, 0, ret);
}
String postLine = new String(baos.toByteArray(), cs);
+ baos.close();
// Handle application/x-www-form-urlencoded
if ("application/x-www-form-urlencoded".equalsIgnoreCase(contentType)) {
decodeParms(postLine, parms);
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 {