]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.acorn/src/org/simantics/acorn/GraphClientImpl2.java
Merge "Ensure GetElementClassRequest is not constructed without elementFactory"
[simantics/platform.git] / bundles / org.simantics.acorn / src / org / simantics / acorn / GraphClientImpl2.java
index 05f9c8de00b66c315f9a6c5317026f28c0c664cb..90af336aafdc079fe99b6210ad9d139211d86f45 100644 (file)
@@ -122,10 +122,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 +135,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 +239,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 +621,11 @@ public class GraphClientImpl2 implements Database.Session {
                        ArrayList<String> ccss = clusters.getChanges(id);
     
                        for(int j=0;j<ccss.size();j++) {
+                               String ccsid = ccss.get(ccss.size()-j-1);
                                try {
                                        if(ClusterUpdateProcessorBase.DEBUG)
-                                               System.err.println("performUndo " + ccss.get(ccss.size()-j-1));
-                                       performUndo(ccss.get(ccss.size()-j-1), clusterChanges, support);
+                                               System.err.println("performUndo " + ccsid);
+                                       performUndo(ccsid, clusterChanges, support);
                                } catch (DatabaseException e) {
                                        e.printStackTrace();
                                }