--- /dev/null
+package fi.vtt.simantics.procore.internal;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.service.ClusterCollectorPolicy;\r
+import org.simantics.db.service.ClusterCollectorPolicy.CollectorCluster;\r
+import org.simantics.db.service.ClusterControl;\r
+\r
+public class ClusterControlImpl implements ClusterControl {\r
+\r
+ final private SessionImplSocket session;\r
+ \r
+ ClusterControlImpl(SessionImplSocket session) {\r
+ this.session = session;\r
+ }\r
+ \r
+ @Override\r
+ public ClusterCollectorPolicy setPolicy(ClusterCollectorPolicy newPolicy) {\r
+ return session.clusterTable.collector.setPolicy(newPolicy);\r
+ }\r
+ \r
+ @Override\r
+ public int flushClusters() {\r
+ session.clusterTable.gc();\r
+ System.gc();\r
+ System.gc();\r
+ return session.clusterTable.size();\r
+ }\r
+\r
+\r
+ @Override\r
+ public int collectClusters(int desiredBytes) {\r
+ session.clusterTable.collector.collect(desiredBytes);\r
+ return 0;\r
+ }\r
+\r
+ @Override\r
+ public int gc(ReadGraph graph) {\r
+ session.clusterTable.collector.collect();\r
+ return 0;\r
+ }\r
+ \r
+ @Override\r
+ public int gc(ReadGraph graph, int objectiveBytes) {\r
+ if(objectiveBytes < 0) return gc(graph);\r
+ if(objectiveBytes > used()) return 0;\r
+ session.clusterTable.collector.collect(used() - objectiveBytes);\r
+ return 0;\r
+ }\r
+\r
+ static class ClusterStateImpl implements ClusterState {\r
+ public Set<CollectorCluster> ids = new HashSet<CollectorCluster>();\r
+ }\r
+ \r
+ @Override\r
+ public ClusterState getClusterState() {\r
+ return session.clusterTable.getState();\r
+ }\r
+ \r
+ @Override\r
+ public void restoreClusterState(ClusterState state) {\r
+ session.clusterTable.restoreState((ClusterStateImpl)state);\r
+ }\r
+ \r
+ @Override\r
+ public int used() {\r
+ return (int)session.clusterTable.getSizeInBytes();\r
+ }\r
+\r
+}\r