summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src
diff options
context:
space:
mode:
authorSimon Rettberg2016-04-21 17:31:58 +0200
committerSimon Rettberg2016-04-21 17:31:58 +0200
commit6289c90d38cc9444b29b725547928fd3f3e528a4 (patch)
treeafe450d32d59ebf26a7887319864ba2cef4fc699 /dozentenmodulserver/src
parentMore imgsync stuff (diff)
downloadtutor-module-6289c90d38cc9444b29b725547928fd3f3e528a4.tar.gz
tutor-module-6289c90d38cc9444b29b725547928fd3f3e528a4.tar.xz
tutor-module-6289c90d38cc9444b29b725547928fd3f3e528a4.zip
[server] Implement image download from master
Diffstat (limited to 'dozentenmodulserver/src')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java7
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbUser.java35
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/IncomingDataTransfer.java13
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java12
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;