From 780b4dc20f8ca4f176ad5849f07bcfbf5e8a06ae Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 22 Sep 2015 15:44:51 +0200 Subject: [server] Fix race condition on delete; check for vmstore before up/download --- .../java/org/openslx/bwlp/sat/fileserv/AbstractTransfer.java | 2 +- .../main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'dozentenmodulserver/src') diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/AbstractTransfer.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/AbstractTransfer.java index bef4f8fd..dc57cb1b 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/AbstractTransfer.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/fileserv/AbstractTransfer.java @@ -9,7 +9,7 @@ public abstract class AbstractTransfer { * How long to keep this transfer information when the transfer is * (potentially) done */ - private static final long FINISH_TIMEOUT = TimeUnit.MINUTES.toMillis(5); + private static final long FINISH_TIMEOUT = TimeUnit.MINUTES.toMillis(3); /** * How long to keep this transfer information when there are no active 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 936e2272..40a51c70 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 @@ -87,6 +87,8 @@ public class ServerHandler implements SatelliteServer.Iface { List blockHashes, ByteBuffer machineDescription) throws TTransferRejectedException, TAuthorizationException, TInvocationException, TNotFoundException, TException { UserInfo user = SessionManager.getOrFail(userToken); + if (!FileSystem.waitForStorage()) + throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "VM storage not mounted"); User.canEditBaseImageOrFail(user, imageBaseId); ImageDetailsRead image; try { @@ -140,6 +142,8 @@ public class ServerHandler implements SatelliteServer.Iface { throws TAuthorizationException, TInvocationException, TNotFoundException, TTransferRejectedException { UserInfo user = SessionManager.getOrFail(userToken); + if (!FileSystem.waitForStorage()) + throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "VM storage not mounted"); ImageVersionMeta imageVersion; try { imageVersion = DbImage.getVersionDetails(imageVersionId); @@ -343,6 +347,8 @@ public class ServerHandler implements SatelliteServer.Iface { public void deleteImageVersion(String userToken, String imageVersionId) throws TAuthorizationException, TNotFoundException, TInvocationException { UserInfo user = SessionManager.getOrFail(userToken); + if (!FileSystem.waitForStorage()) + throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "VM storage not mounted"); User.canDeleteImageVersionOrFail(user, imageVersionId); try { DbImage.markForDeletion(imageVersionId); @@ -378,7 +384,7 @@ public class ServerHandler implements SatelliteServer.Iface { } catch (Exception e) { LOGGER.warn("Could not delete version when trying to delete base image", e); } - DeleteOldImages.hardDeleteImagesAsync(); + DeleteOldImages.hardDeleteImages(); } try { DbImage.deleteBasePermanently(imageBaseId); @@ -443,6 +449,8 @@ public class ServerHandler implements SatelliteServer.Iface { throws TAuthorizationException, TNotFoundException, TInvocationException { UserInfo user = SessionManager.getOrFail(userToken); User.canTriggerReplicationOrFail(user, imageVersionId); + if (!FileSystem.waitForStorage()) + throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "VM storage not mounted"); // Query master server ImagePublishData imagePublishData; try { -- cgit v1.2.3-55-g7522