]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Merge "Fixed platform ontology sync startup failure problems after installs"
authorTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Wed, 4 Mar 2020 21:54:06 +0000 (21:54 +0000)
committerGerrit Code Review <gerrit2@simantics>
Wed, 4 Mar 2020 21:54:06 +0000 (21:54 +0000)
bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/QueryControlImpl.java
bundles/org.simantics/src/org/simantics/SimanticsPlatform.java

index 237e8b50b96f2f88a006662f14a1571f5770a07b..53a3dc1ad0b955c57547e70b450fbf55c6cd8907 100644 (file)
@@ -15,9 +15,13 @@ import org.simantics.db.procedure.AsyncMultiProcedure;
 import org.simantics.db.request.ExternalRead;
 import org.simantics.db.service.QueryControl;
 import org.simantics.utils.DataContainer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class QueryControlImpl implements QueryControl {
-       
+
+       private static final Logger LOGGER = LoggerFactory.getLogger(QueryControlImpl.class);
+
        final private SessionImplSocket session;
        
        QueryControlImpl(SessionImplSocket session) {
@@ -47,7 +51,7 @@ public class QueryControlImpl implements QueryControl {
                 
             });
         } catch (DatabaseException e) {
-            e.printStackTrace();
+            LOGGER.error("query flush failed", e);
         }
         return result.get();
     }
@@ -78,7 +82,7 @@ public class QueryControlImpl implements QueryControl {
                 }
             });
         } catch (DatabaseException e) {
-            e.printStackTrace();
+            LOGGER.error("query gc failed", e);
         }
     }
 
index 730e4e8877470439c8fd88cc8b47050db3bcfb66..c5ed8fd1e6374b70294bf65ecd5a4034b40b2efa 100644 (file)
@@ -21,7 +21,6 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -392,6 +391,8 @@ public class SimanticsPlatform implements LifecycleListener {
                     throw new PlatformException("Reinstalling Database, NOT IMPLEMENTED");
                 }
 
+                boolean serviceModeEntered = false;
+
                 if (ontologyPolicy == OntologyRecoveryPolicy.Merge) {
                     message = "Merging ontology changes";
                     monitor.subTask(message);
@@ -450,6 +451,14 @@ public class SimanticsPlatform implements LifecycleListener {
 
                                 session.getService(XSupport.class).setServiceMode(true, createImmutable);
 
+                                // Flush all queries once to allow even immutable request results to be invalidated
+                                // because ontology installation affects immutable content and queries related to
+                                // immutable content would not get invalidated at all otherwise.
+                                if (!serviceModeEntered) {
+                                    serviceModeEntered = true;
+                                    session.getService(QueryControl.class).flush();
+                                }
+
                                        // Install TG
                                        log.log(new Status(IStatus.INFO, Activator.PLUGIN_ID, "Installing "+tg.toString()+" - "+tg.getName()));
                                        ImportResult result = TransferableGraphs.importGraph1(session, new TGTransferableGraphSource(tg.getGraph()), advisor, null);
@@ -500,6 +509,11 @@ public class SimanticsPlatform implements LifecycleListener {
                     }
                 }
                 session.getService(XSupport.class).setServiceMode(false, false);
+                if (serviceModeEntered) {
+                    // Flush all queries to ensure that queries that should now
+                    // be immutable are not left as mutable in the query cache.
+                    session.getService(QueryControl.class).flush();
+                }
             }
             message = "Ontologies synchronized";
             monitor.subTask(message);