This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch time-consumer-detection
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git

commit f88ba1756c75a8799e6d1d91cb2e8c5b20a14c2d
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Sat Jul 6 13:32:28 2019 +0300

    Time consuming builds detection: Prefiltering server side
---
 .../tcbot/engine/buildtime/BuildTimeService.java   | 33 ++++++++++++++++------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/buildtime/BuildTimeService.java
 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/buildtime/BuildTimeService.java
index 3976d17..6da5eda 100644
--- 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/buildtime/BuildTimeService.java
+++ 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/buildtime/BuildTimeService.java
@@ -17,11 +17,6 @@
 
 package org.apache.ignite.tcbot.engine.buildtime;
 
-import java.time.Duration;
-import java.util.*;
-import java.util.stream.Collectors;
-import javax.cache.Cache;
-import javax.inject.Inject;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.binary.BinaryObject;
 import org.apache.ignite.cache.query.QueryCursor;
@@ -43,6 +38,12 @@ import 
org.apache.ignite.tcignited.history.RunHistCompactedDao;
 import org.apache.ignite.tcservice.model.hist.BuildRef;
 import org.apache.ignite.tcservice.model.result.stat.Statistics;
 
+import javax.cache.Cache;
+import javax.inject.Inject;
+import java.time.Duration;
+import java.util.*;
+import java.util.stream.Collectors;
+
 public class BuildTimeService {
 
     @Inject ITeamcityIgnitedProvider tcProv;
@@ -101,9 +102,17 @@ public class BuildTimeService {
     public List<Long> forEachBuildRef(int days, Collection<String> allServers) 
{
         IgniteCache<Long, BinaryObject> cacheBin = 
buildRefDao.buildRefsCache().withKeepBinary();
 
-        // Ignite ignite = igniteProvider.get();
+        Set<Integer> availableServers = allServers.stream()
+                .map(ITeamcityIgnited::serverIdToInt)
+                .collect(Collectors.toSet());
+
+        Map<Integer, Integer> preBorder = new HashMap<>();
 
-        //IgniteCompute serversCompute = 
ignite.compute(ignite.cluster().forServers());
+        availableServers.forEach(srvId -> {
+            Integer borderForAgeForBuildId = 
runHistCompactedDao.getBorderForAgeForBuildId(srvId, days);
+            if (borderForAgeForBuildId != null)
+                preBorder.put(srvId, borderForAgeForBuildId);
+        });
 
         int stateRunning = compactor.getStringId(BuildRef.STATE_RUNNING);
         final int stateQueued = compactor.getStringId(BuildRef.STATE_QUEUED);
@@ -112,8 +121,14 @@ public class BuildTimeService {
         long minTs = System.currentTimeMillis() - 
Duration.ofDays(days).toMillis();
         QueryCursor<Cache.Entry<Long, BinaryObject>> query = cacheBin.query(
             new ScanQuery<Long, BinaryObject>()
-                .setFilter((k, v) -> {
-
+                .setFilter((key, v) -> {
+                    int srvId = BuildRefDao.cacheKeyToSrvId(key);
+                    Integer buildIdBorder = preBorder.get(srvId);
+                    if (buildIdBorder != null) {
+                        int id = v.field("id");
+                        if (id < buildIdBorder)
+                            return false;// pre-filtered build out of scope
+                    }
                     int state = v.field("state");
 
                     return stateQueued != state;

Reply via email to