From eed57a93b7f1b1e1a6ea59eb28bf91d4c1159ec9 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 24 Sep 2015 15:49:57 +0200 Subject: [server] Implemente setImageVersionExpiry --- .../openslx/bwlp/sat/database/mappers/DbImage.java | 13 +++++++ .../org/openslx/bwlp/sat/fileserv/FileServer.java | 4 +- .../org/openslx/bwlp/sat/thrift/ServerHandler.java | 43 +++++++++++++++++++--- 3 files changed, 53 insertions(+), 7 deletions(-) (limited to 'dozentenmodulserver') 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 34ecce5c..320f6cc5 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 @@ -999,4 +999,17 @@ public class DbImage { } } + public static void setExpireDate(String imageVersionId, long expireTime) throws SQLException { + try (MysqlConnection connection = Database.getConnection()) { + MysqlStatement stmt = connection.prepareStatement("UPDATE imageversionid SET expiretime = :expiretime" + + " WHERE imageversionid = :imageversionid"); + stmt.setString("imageversionid", imageVersionId); + stmt.setLong("expiretime", expireTime); + stmt.executeUpdate(); + } catch (SQLException e) { + LOGGER.error("Query failed in DbImage.setExpireDate()", e); + throw e; + } + } + } diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java index 7c521b56..04aeb892 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/FileServer.java @@ -139,7 +139,7 @@ public class FileServer implements IncomingEvent { } activeUploads += Math.max(1, upload.getActiveConnectionCount()); } - if (activeUploads > Constants.MAX_UPLOADS) { + if (activeUploads >= Constants.MAX_UPLOADS) { throw new TTransferRejectedException("Server busy. Too many running uploads (" + activeUploads + "/" + Constants.MAX_UPLOADS + ")."); } @@ -189,7 +189,7 @@ public class FileServer implements IncomingEvent { } activeDownloads += Math.max(1, download.getActiveConnectionCount()); } - if (activeDownloads > Constants.MAX_DOWNLOADS) { + if (activeDownloads >= Constants.MAX_DOWNLOADS) { throw new TTransferRejectedException("Server busy. Too many running uploads (" + activeDownloads + "/" + Constants.MAX_UPLOADS + ")."); } diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java index 40a51c70..ee244eaa 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java @@ -1,5 +1,6 @@ package org.openslx.bwlp.sat.thrift; +import java.io.File; import java.nio.ByteBuffer; import java.sql.SQLException; import java.util.List; @@ -15,6 +16,7 @@ import org.openslx.bwlp.sat.database.mappers.DbLecture; import org.openslx.bwlp.sat.database.mappers.DbLecturePermissions; import org.openslx.bwlp.sat.database.mappers.DbUser; import org.openslx.bwlp.sat.database.models.ImageVersionMeta; +import org.openslx.bwlp.sat.database.models.LocalImageVersion; import org.openslx.bwlp.sat.database.models.LocalUser; import org.openslx.bwlp.sat.fileserv.FileServer; import org.openslx.bwlp.sat.fileserv.IncomingDataTransfer; @@ -29,6 +31,7 @@ import org.openslx.bwlp.sat.util.FileSystem; import org.openslx.bwlp.sat.util.Sanitizer; import org.openslx.bwlp.sat.util.Util; import org.openslx.bwlp.thrift.iface.AuthorizationError; +import org.openslx.bwlp.thrift.iface.DateParamError; import org.openslx.bwlp.thrift.iface.ImageBaseWrite; import org.openslx.bwlp.thrift.iface.ImageDetailsRead; import org.openslx.bwlp.thrift.iface.ImagePermissions; @@ -436,12 +439,42 @@ public class ServerHandler implements SatelliteServer.Iface { } @Override - public void setImageVersionExpiry(String userToken, String imageBaseId, long expireTime) - throws TAuthorizationException, TNotFoundException, TInvocationException, TInvalidDateParam, - TException { + public void setImageVersionExpiry(String userToken, String imageVersionId, long expireTime) + throws TAuthorizationException, TNotFoundException, TInvocationException, TInvalidDateParam { + long now = Util.unixTime(); + if (expireTime > now + 3 * 365 * 86400) + throw new TInvalidDateParam(DateParamError.TOO_HIGH, "Expire date too far in the future"); + if (expireTime < now - 365 * 86400) + throw new TInvalidDateParam(DateParamError.TOO_LOW, "Expire date too far in the past"); UserInfo user = SessionManager.getOrFail(userToken); User.canChangeImageExpireDateOrFail(user); - // TODO Manually-generated method stub + LocalImageVersion localImageData; + try { + localImageData = DbImage.getLocalImageData(imageVersionId); + } catch (SQLException e) { + throw new TInvocationException(); + } + File srcFile = FileSystem.composeAbsoluteImagePath(localImageData); + String errorMessage = null; + if (srcFile == null) { + errorMessage = "File has invalid path on server"; + } else if (!srcFile.canRead()) { + errorMessage = "File missing on server"; + } + if (srcFile.length() != localImageData.fileSize) { + errorMessage = "File corrupted on server"; + } + try { + if (errorMessage == null) { + DbImage.markValid(true, false, localImageData); + DbImage.setExpireDate(localImageData.imageVersionId, expireTime); + } else { + DbImage.markValid(false, false, localImageData); + throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, errorMessage); + } + } catch (SQLException e) { + throw new TInvocationException(); + } } @Override @@ -476,7 +509,7 @@ public class ServerHandler implements SatelliteServer.Iface { public String createLecture(String userToken, LectureWrite lecture) throws TAuthorizationException, TInvocationException, TInvalidDateParam, TNotFoundException { if (lecture == null || lecture.defaultPermissions == null) - throw new TInvocationException(); // TODO Own exception for this + throw new TInvocationException(InvocationError.MISSING_DATA, "Lecture data missing or incomplete"); UserInfo user = SessionManager.getOrFail(userToken); User.canCreateLectureOrFail(user); User.canLinkToImageOrFail(user, lecture.imageVersionId); -- cgit v1.2.3-55-g7522