X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Futil%2FSessionGarbageCollection.java;h=c48ec36309e601cf885f9b8125f16f7e79c579f8;hb=892b7bb9be2147b5fe10036a75e798d184705339;hp=3fceebea2827b6cdcc7ea0b4a3514f545fc4de8f;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java index 3fceebea2..c48ec3630 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/SessionGarbageCollection.java @@ -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 @@ -63,21 +62,36 @@ public class SessionGarbageCollection { long took = gc(monitor, session, sync, errorCallback, DEFAULT_ALLOWED_TIME, DEFAULT_CLUSTER_TARGET); return ((16*took) / DEFAULT_ALLOWED_TIME) > 15; } - + public static void gc(ReadGraph graph, final int allowedTimeInMs, final int clusterTarget) throws DatabaseException { - doIt(null, graph, allowedTimeInMs, clusterTarget); + doIt(null, graph, allowedTimeInMs, clusterTarget); + } + + public static void gc(IProgressMonitor monitor, ReadGraph graph, final int allowedTimeInMs, final int clusterTarget) throws DatabaseException { + doIt(monitor, graph, allowedTimeInMs, clusterTarget); } private static void doIt(IProgressMonitor _monitor, ReadGraph graph, final int allowedTimeInMs, final int clusterTarget) { - if(_monitor == null) _monitor = new NullProgressMonitor(); + if(_monitor == null) _monitor = new NullProgressMonitor(); 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); } - + /** * @param monitor * @param session @@ -128,15 +142,12 @@ public class SessionGarbageCollection { Logger.defaultLogError(e); } } else { - session.asyncRequest(request, new Callback() { - @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); } }); }