X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2FGraphClientImpl2.java;h=982c743fdeadb9ebe5d9939e5512e9e6bc638af9;hb=81169c54002f4a9f89db5b6821f3e5a70dad2da7;hp=05f9c8de00b66c315f9a6c5317026f28c0c664cb;hpb=c125a1755cc7c4a6241c3c5bf841c3db0ff2d658;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/GraphClientImpl2.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/GraphClientImpl2.java index 05f9c8de0..982c743fd 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/GraphClientImpl2.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/GraphClientImpl2.java @@ -86,6 +86,7 @@ public class GraphClientImpl2 implements Database.Session { load(); ClusterSetsSupport cssi = locator.getService(ClusterSetsSupport.class); cssi.setReadDirectory(clusters.lastSessionDirectory); + cssi.updateWriteDirectory(clusters.workingDirectory); mainProgram = new MainProgram(this, clusters); executor.execute(mainProgram); } @@ -122,10 +123,10 @@ public class GraphClientImpl2 implements Database.Session { mainProgram.mutex.release(); } } catch (IllegalAcornStateException | ProCoreException e) { - Logger.defaultLogError(e); + Logger.defaultLogError("Snapshotting failed", e); unexpectedClose = true; } catch (InterruptedException e) { - Logger.defaultLogError(e); + Logger.defaultLogError("Snapshotting interrupted", e); } finally { try { if(tr != null) @@ -135,11 +136,11 @@ public class GraphClientImpl2 implements Database.Session { try { support.close(); } catch (DatabaseException e1) { - Logger.defaultLogError(e1); + Logger.defaultLogError("Failed to close database as a safety measure due to failed snapshotting", e1); } } } catch (ProCoreException e) { - Logger.defaultLogError(e); + Logger.defaultLogError("Failed to end snapshotting write transaction", e); } } } @@ -239,18 +240,17 @@ public class GraphClientImpl2 implements Database.Session { @Override public long cancelCommit(long transactionId, long changeSetId, byte[] metadata, OnChangeSetUpdate onChangeSetUpdate) throws ProCoreException { - UnsupportedOperationException e = new UnsupportedOperationException("org.simantics.acorn.GraphClientImpl2.cancelCommit() is not supported operation! Closing down to prevent further havoc"); - clusters.notSafeToMakeSnapshot(new IllegalAcornStateException(e)); - throw e; -// System.err.println("GraphClientImpl2.cancelCommit() called!! this is experimental and might cause havoc!"); -// try { -// undo(new long[] {changeSetId}, onChangeSetUpdate); -// } catch (SDBException e) { -// e.printStackTrace(); -// throw new ProCoreException(e); -// } -// clusters.state.headChangeSetId++; -// return clusters.state.headChangeSetId; + // Accept and finalize current transaction and then undo it + acceptCommit(transactionId, changeSetId, metadata); + + try { + undo(new long[] {changeSetId+1}, onChangeSetUpdate); + clusters.state.headChangeSetId++; + return clusters.state.headChangeSetId; + } catch (SDBException e) { + Logger.defaultLogError("Failed to undo cancelled transaction", e); + throw new ProCoreException(e); + } } @Override @@ -622,10 +622,11 @@ public class GraphClientImpl2 implements Database.Session { ArrayList ccss = clusters.getChanges(id); for(int j=0;j