]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java
Fixed bug in cluster collection logic that caused it to not operate
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / util / SessionGarbageCollection.java
index 26e049db67d5d95c87e47e56d81b9ad843ac4572..c48ec36309e601cf885f9b8125f16f7e79c579f8 100644 (file)
@@ -25,7 +25,6 @@ import org.simantics.db.service.ClusterControl;
 import org.simantics.db.service.LifecycleSupport;
 import org.simantics.db.service.QueryControl;
 import org.simantics.utils.DataContainer;
-import org.simantics.utils.datastructures.Callback;
 
 /**
  * @author Tuukka Lehtonen
@@ -77,7 +76,18 @@ public class SessionGarbageCollection {
         QueryControl qc = graph.getService(QueryControl.class);
         ClusterControl cc = graph.getService(ClusterControl.class);
         _monitor.beginTask("Collect clusters", IProgressMonitor.UNKNOWN);
-        cc.gc(graph, clusterTarget);
+        //cc.gc(graph, clusterTarget);
+        if(clusterTarget == -1) {
+            int used = cc.used();
+            //System.err.println("session gc, cluster use = " + used);
+            int baseline = 32*(1<<20);
+            if(used > baseline) {
+                int dynamicTarget = (int)(0.95 * (used-baseline)) + baseline;
+                cc.gc(graph, dynamicTarget);
+            }
+        } else {
+            cc.gc(graph, clusterTarget);
+        }
         _monitor.beginTask("Collect queries", IProgressMonitor.UNKNOWN);
         qc.gc(graph, allowedTimeInMs);
     }
@@ -132,15 +142,12 @@ public class SessionGarbageCollection {
                     Logger.defaultLogError(e);
             }
         } else {
-            session.asyncRequest(request, new Callback<DatabaseException>() {
-                @Override
-                public void run(DatabaseException e) {
-                    if (e != null) {
-                        if (errorCallback != null)
-                            errorCallback.accept(e);
-                        else
-                            Logger.defaultLogError(e);
-                    }
+            session.asyncRequest(request, e -> {
+                if (e != null) {
+                    if (errorCallback != null)
+                        errorCallback.accept(e);
+                    else
+                        Logger.defaultLogError(e);
                 }
             });
         }