From 2cdb1e333d4de18dd48a4352647842e04f7ecd8e Mon Sep 17 00:00:00 2001 From: Mo Date: Sun, 20 Nov 2016 19:02:43 +0300 Subject: [PATCH] add limit to graph builder --- .../src/main/java/ru/trader/analysis/VendorsGraph.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/ru/trader/analysis/VendorsGraph.java b/core/src/main/java/ru/trader/analysis/VendorsGraph.java index 13b768e..5847550 100644 --- a/core/src/main/java/ru/trader/analysis/VendorsGraph.java +++ b/core/src/main/java/ru/trader/analysis/VendorsGraph.java @@ -8,7 +8,6 @@ import ru.trader.analysis.graph.Path; import ru.trader.analysis.graph.Vertex; import ru.trader.core.Order; import ru.trader.core.Profile; -import ru.trader.core.TransitVendor; import ru.trader.core.Vendor; import java.util.*; @@ -20,6 +19,7 @@ public class VendorsGraph extends ConnectibleGraph { private final Scorer scorer; private final List deferredTasks = new ArrayList<>(); + private final static int MAX_DEFERRED_TASKS = 5000; public VendorsGraph(Scorer scorer, AnalysisCallBack callback) { super(scorer.getProfile(), callback); @@ -65,6 +65,12 @@ public class VendorsGraph extends ConnectibleGraph { } } + protected boolean canHoldTask(){ + synchronized (deferredTasks){ + return deferredTasks.size() < MAX_DEFERRED_TASKS; + } + } + private void runDeferredTasks(){ deferredTasks.sort((b1,b2) -> Integer.compare(b2.getDeep(), b1.getDeep())); for (VendorsGraphBuilder task : deferredTasks) { @@ -257,7 +263,7 @@ public class VendorsGraph extends ConnectibleGraph { protected void addSubTask(Edge edge, double nextLimit) { Vertex next = edge.getTarget(); if (next.getLevel() >= deep && next.getEntry().isTransit()) { - if (deep > 0){ + if (deep > 0 && canHoldTask()){ VendorsGraphBuilder task = new VendorsGraphBuilder(this, (BuildEdge) edge, set, deep - 1, nextLimit); task.isAdding = true; holdTask(task);