summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui
diff options
context:
space:
mode:
authorSimon Rettberg2022-03-21 17:22:16 +0100
committerSimon Rettberg2022-03-21 17:22:16 +0100
commitad0788e8fbead90d1ab03ba1a5c83b00114cb3a0 (patch)
treeaf62b617fb6149afce16d417474abd49f373cbf9 /dozentenmodul/src/main/java/org/openslx/dozmod/gui
parent[client] Cleanup chunk data lists when upload finished or is cancelled (diff)
downloadtutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.tar.gz
tutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.tar.xz
tutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.zip
[client] Memory management; handle OOM when hashing, do not skip blocks
Try to free some references regarding transfers earlier, e.g. the hash worker and list of hashes as soon as hashing is finished on upload, not only when the upload is finished and the window is closed. Properly delay hashing of blocks in OOM scenarios, and be more conservative with the number of hash workers, i.e. take maximum JVM memory into account. Also, improve thread naming.
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java29
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java7
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java22
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java27
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java5
7 files changed, 73 insertions, 27 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
index d8e7f797..4be287d7 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/MainWindow.java
@@ -255,19 +255,26 @@ public abstract class MainWindow {
@Override
public void fire() {
App.waitForInit();
- // now try to init the session with the saved configuration (by giving it null)
- if (ThriftActions.initSession(null, false, SwingUtilities.getWindowAncestor(mainWindow))) {
- initWindow();
- } else {
- // session resume failed, so do the normal login procedure
- Gui.asyncExec(new Runnable() {
- @Override
- public void run() {
- LoginWindow.open(mainWindow);
+ Gui.syncExec(new GuiCallable<Boolean>() {
+ @Override
+ public Boolean run() {
+ // now try to init the session with the saved configuration (by giving it null)
+ if (ThriftActions.initSession(null, false,
+ SwingUtilities.getWindowAncestor(mainWindow))) {
initWindow();
+ } else {
+ // session resume failed, so do the normal login procedure
+ Gui.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ LoginWindow.open(mainWindow);
+ initWindow();
+ }
+ });
}
- });
- }
+ return null;
+ }
+ });
}
});
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java
index a25bd661..a50e67c5 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/DownloadPanel.java
@@ -69,5 +69,10 @@ public class DownloadPanel extends TransferPanel implements ActionListener, Quit
public void onApplicationQuit() {
download.cancel();
}
+
+ @Override
+ protected void releaseResources() {
+ // NOOP
+ }
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java
index bfd9b783..93b412de 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/PassiveUploadPanel.java
@@ -38,4 +38,9 @@ public class PassiveUploadPanel extends TransferPanel {
return false;
}
+ @Override
+ protected void releaseResources() {
+ // NOOP
+ }
+
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java
index 0718946e..95464f24 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/TransferPanel.java
@@ -129,11 +129,13 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve
status = I18n.ACTIVITY.getString("TransferPanel.TransferState.error");
if (transfer.isCanceled()) {
transfer.removeListener(panel);
+ releaseResources();
}
break;
case FINISHED:
transferDone();
status = I18n.ACTIVITY.getString("TransferPanel.TransferState.finished");
+ releaseResources();
break;
case IDLE:
status = I18n.ACTIVITY.getString("TransferPanel.TransferState.idle");
@@ -166,6 +168,11 @@ public abstract class TransferPanel extends ActivityPanel implements TransferEve
}
});
}
+
+ /**
+ * Called when the transfer is finished, or cancelled due to an error
+ */
+ protected abstract void releaseResources();
private void transferDone() {
transfer.removeListener(panel);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
index 6b8c5a94..7e56b0e8 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java
@@ -34,7 +34,7 @@ public class UploadPanel extends TransferPanel implements QuitNotification {
private static final Logger LOGGER = LogManager.getLogger(UploadPanel.class);
- private final UploadInitiator state;
+ private UploadInitiator state;
private final UploadPanel panel = this;
@@ -59,26 +59,33 @@ public class UploadPanel extends TransferPanel implements QuitNotification {
private class ButtonAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
+ if (state == null)
+ return;
+ state.getUploadTask().removeListener(panel);
if (!state.getUploadTask().isCanceled()) {
if (!Gui.showMessageBox(panel, I18n.ACTIVITY.getString("UploadPanel.Message.yesNo.cancelTransfer"),
MessageType.QUESTION_YESNO, null, null))
return;
+ final UploadInitiator fstate = state;
QuickTimer.scheduleOnce(new Task() {
@Override
public void fire() {
- state.cancelError("UploadPanel: Requested by user through button press");
+ fstate.cancelError("UploadPanel: Requested by user through button press");
}
});
}
- state.getUploadTask().removeListener(panel);
close();
+ state = null;
}
}
private class SscToggle implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
+ if (state == null)
+ return;
final UploadOptions options = new UploadOptions(chkServerSideCopy.isSelected());
+ final UploadInitiator fstate = state;
QuickTimer.scheduleOnce(new Task() {
@Override
public void fire() {
@@ -86,7 +93,7 @@ public class UploadPanel extends TransferPanel implements QuitNotification {
UploadOptions newOpt = null;
try {
newOpt = ThriftManager.getSatClient().setUploadOptions(Session.getSatelliteToken(),
- state.getToken(), options);
+ fstate.getToken(), options);
} catch (TAuthorizationException | TInvalidTokenException e) {
dis = true;
} catch (TException e) {
@@ -117,6 +124,13 @@ public class UploadPanel extends TransferPanel implements QuitNotification {
@Override
public void onApplicationQuit() {
// Application quit, tell server we cancel
+ if (state == null)
+ return;
state.cancelError("Application quit (via UploadPanel)");
}
+
+ @Override
+ protected void releaseResources() {
+ state = null;
+ }
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java
index 0bfe2b22..0c56a5c0 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageCreationWizard.java
@@ -291,22 +291,24 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif
}
@Override protected boolean onCancelRequest() {
- if (state.uuid == null)
+ if (state == null || state.uuid == null)
return true; // Allow closing - nothing in progress
boolean confirmed = Gui.showMessageBox(this,
I18n.WIZARD.getString("ImageCreation.Message.yesNo.cancelRequest"),
MessageType.QUESTION_YESNO, null, null);
if (confirmed) {
QuickTimer.scheduleOnce(new Task() {
- @Override public void fire() {
- if (state.upload != null) {
+ @Override
+ public void fire() {
+ if (state != null && state.upload != null) {
state.upload.cancelError("Cancelled through aborting wizard");
- }
- // As we're creating a new VM, delete base image aswell
- try {
- ThriftManager.getSatClient().deleteImageBase(Session.getSatelliteToken(), state.uuid);
- } catch (TException e) {
- LOGGER.debug("Error canceling upload on sat: ", e);
+ // As we're creating a new VM, delete base image aswell
+ try {
+ ThriftManager.getSatClient()
+ .deleteImageBase(Session.getSatelliteToken(), state.uuid);
+ } catch (TException e) {
+ LOGGER.debug("Error canceling upload on sat: ", e);
+ }
}
}
});
@@ -315,7 +317,7 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif
}
@Override public boolean wantConfirmQuit() {
- return state.uuid != null;
+ return state != null && state.uuid != null;
}
@Override public void escapePressed() {
@@ -330,7 +332,10 @@ public class ImageCreationWizard extends Wizard implements UiFeedback, QuitNotif
@Override
protected void doCleanup() {
- state = null;
+ if (state != null) {
+ state.upload = null;
+ state = null;
+ }
containerDefinition = null;
currentPages.clear();
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java
index ac8f80c1..1bcbaaf6 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java
@@ -147,8 +147,11 @@ public class ImageUpdateWizard extends Wizard implements UiFeedback, QuitNotific
@Override
protected void doCleanup() {
+ if (state != null) {
+ state.upload = null;
+ state = null;
+ }
imageUploadPage = null;
- state = null;
}
}