diff options
author | Simon Rettberg | 2016-04-21 17:31:58 +0200 |
---|---|---|
committer | Simon Rettberg | 2016-04-21 17:31:58 +0200 |
commit | 6289c90d38cc9444b29b725547928fd3f3e528a4 (patch) | |
tree | afe450d32d59ebf26a7887319864ba2cef4fc699 /dozentenmodulserver/src | |
parent | More imgsync stuff (diff) | |
download | tutor-module-6289c90d38cc9444b29b725547928fd3f3e528a4.tar.gz tutor-module-6289c90d38cc9444b29b725547928fd3f3e528a4.tar.xz tutor-module-6289c90d38cc9444b29b725547928fd3f3e528a4.zip |
[server] Implement image download from master
Diffstat (limited to 'dozentenmodulserver/src')
4 files changed, 49 insertions, 18 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 563b8885..6261bcb7 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 @@ -301,10 +301,7 @@ public class DbImage { * @param image The image to create * @throws SQLException */ - public static void writeBaseImage(UserInfo user, ImagePublishData image) throws SQLException { - if (user == null) { - user = image.owner; - } + public static void writeBaseImage(ImagePublishData image) throws SQLException { try (MysqlConnection connection = Database.getConnection()) { MysqlStatement stmt = connection.prepareStatement("INSERT INTO imagebase" + " (imagebaseid, displayname, description, osid, virtid, createtime," @@ -324,7 +321,7 @@ public class DbImage { stmt.setInt("osid", image.osId); stmt.setString("virtid", image.virtId); stmt.setLong("unixtime", Util.unixTime()); - stmt.setString("userid", user.userId); + stmt.setString("userid", image.owner.userId); stmt.setString("sharemode", "DOWNLOAD"); stmt.setBoolean("istemplate", image.isTemplate); stmt.executeUpdate(); diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java index 81e4721d..e864c727 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java @@ -131,6 +131,14 @@ public class DbUser { * @throws SQLException */ public static void writeUserOnLogin(UserInfo ui) throws SQLException { + writeUser(ui, true); + } + + public static void writeUserOnReplication(UserInfo ui) throws SQLException { + writeUser(ui, false); + } + + private static void writeUser(UserInfo ui, boolean isLogin) throws SQLException { // TODO: Ugly hardcode solution - should be queried from DB, with a nice helper class if (ui.firstName.length() > 50) { ui.firstName = ui.firstName.substring(0, 50); @@ -138,19 +146,29 @@ public class DbUser { if (ui.lastName.length() > 50) { ui.lastName = ui.lastName.substring(0, 50); } - if (ui.eMail.length() > 50) { - ui.eMail = ui.eMail.substring(0, 50); + if (ui.eMail.length() > 100) { + ui.eMail = ui.eMail.substring(0, 100); } boolean recheckLegacy = true; try (MysqlConnection connection = Database.getConnection()) { if (!legacyUsersExist || !tryLegacyUserUpdate(connection, ui)) { // No legacy messed up account found - use normal way - MysqlStatement insUpStmt = connection.prepareStatement("INSERT INTO user" - + " (userid, firstname, lastname, email, organizationid, lastlogin, canlogin, issuperuser)" - + " VALUES" - + " (:userid, :firstname, :lastname, :email, :organizationid, UNIX_TIMESTAMP(), 1, 0)" - + " ON DUPLICATE KEY UPDATE lastlogin = UNIX_TIMESTAMP(), email = VALUES(email)," - + " firstname = VALUES(firstname), lastname = VALUES(lastname), organizationid = VALUES(organizationid)"); + MysqlStatement insUpStmt; + if (isLogin) { + insUpStmt = connection.prepareStatement("INSERT INTO user" + + " (userid, firstname, lastname, email, organizationid, lastlogin, canlogin, issuperuser)" + + " VALUES" + + " (:userid, :firstname, :lastname, :email, :organizationid, UNIX_TIMESTAMP(), 1, 0)" + + " ON DUPLICATE KEY UPDATE lastlogin = UNIX_TIMESTAMP(), email = VALUES(email)," + + " firstname = VALUES(firstname), lastname = VALUES(lastname), organizationid = VALUES(organizationid)"); + } else { + insUpStmt = connection.prepareStatement("INSERT INTO user" + + " (userid, firstname, lastname, email, organizationid, canlogin, issuperuser)" + + " VALUES" + + " (:userid, :firstname, :lastname, :email, :organizationid, 0, 0)" + + " ON DUPLICATE KEY UPDATE email = VALUES(email)," + + " firstname = VALUES(firstname), lastname = VALUES(lastname), organizationid = VALUES(organizationid)"); + } insUpStmt.setString("userid", ui.userId); insUpStmt.setString("firstname", ui.firstName); insUpStmt.setString("lastname", ui.lastName); @@ -251,4 +269,5 @@ public class DbUser { throw e; } } + } diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java index 3530a8fd..5c7621a9 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java @@ -94,7 +94,7 @@ public class IncomingDataTransfer extends IncomingTransferBase { idr.setUpdaterId(publishData.uploader.userId); idr.setUpdateTime(publishData.createTime); idr.setVirtId(publishData.virtId); - this.owner = publishData.owner; + this.owner = publishData.uploader; this.image = idr; this.machineDescription = ThriftUtil.unwrapByteBuffer(transferInfo.machineDescription); this.masterTransferInfo = transferInfo; @@ -214,7 +214,8 @@ public class IncomingDataTransfer extends IncomingTransferBase { // Now insert meta data into DB try { synchronized (versionWrittenToDb) { - DbImage.createImageVersion(image.imageBaseId, getId(), owner, getFileSize(), relPath, + LOGGER.debug("Owner id " + owner); + DbImage.createImageVersion(image.imageBaseId, getVersionId(), owner, getFileSize(), relPath, versionSettings, getChunks(), machineDescription); versionWrittenToDb.set(true); } @@ -228,10 +229,16 @@ public class IncomingDataTransfer extends IncomingTransferBase { return true; } + private String getVersionId() { + if (masterTransferInfo == null) + return getId(); + return image.latestVersionId; + } + @Override public synchronized void cancel() { - super.cancel(); if (!isRepairUpload() && getTmpFileName().exists()) { + super.cancel(); FileSystem.deleteAsync(getTmpFileName()); } } 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 df845fdc..add5d13b 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 @@ -513,17 +513,25 @@ public class ServerHandler implements SatelliteServer.Iface { } // Known by master server; now update/write to DB try { - DbImage.writeBaseImage(user, imagePublishData); + if (imagePublishData.owner == null) { + imagePublishData.owner = imagePublishData.uploader; + } + LOGGER.debug("Writing user " + imagePublishData.owner); + DbUser.writeUserOnReplication(imagePublishData.owner); + DbImage.writeBaseImage(imagePublishData); } catch (SQLException e) { throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "Could not write to local DB"); } + imagePublishData.uploader = user; + LOGGER.debug("Setting uploader to " + user); return SyncTransferHandler.requestImageDownload(userToken, imagePublishData); } @Override public String publishImageVersion(String userToken, String imageVersionId) - throws TAuthorizationException, TNotFoundException, TInvocationException, TTransferRejectedException { + throws TAuthorizationException, TNotFoundException, TInvocationException, + TTransferRejectedException { UserInfo user = SessionManager.getOrFail(userToken); User.canCreateImageOrFail(user); LocalImageVersion imgVersion = null; |