You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2018/11/13 22:45:48 UTC

[ignite-teamcity-bot] 01/01: IGNITE-10243 Chain analysis entry points are get now from preloaded builds supporting cancelled

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

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

commit 06a61f7941535755755c8b64b2763a48fbc8b547
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Wed Nov 14 01:45:15 2018 +0300

    IGNITE-10243 Chain analysis entry points are get now from preloaded builds supporting cancelled
---
 .../ignite/ci/tcbot/chain/BuildChainProcessor.java | 10 ++++----
 .../ignite/ci/tcbot/chain/PrChainsProcessor.java   | 19 +++-----------
 .../tcbot/chain/TrackedBranchChainsProcessor.java  | 14 ++++-------
 .../ignite/ci/teamcity/ignited/BuildRefDao.java    | 14 -----------
 .../ci/teamcity/ignited/ITeamcityIgnited.java      | 12 ++++++++-
 .../ci/teamcity/ignited/TeamcityIgnitedImpl.java   | 29 +++++++++++++++++++++-
 .../ignite/ci/web/rest/GetChainResultsAsHtml.java  |  6 +----
 .../ci/web/rest/build/GetBuildTestFailures.java    |  7 +-----
 8 files changed, 55 insertions(+), 56 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
index 06d181d..4835690 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
@@ -153,7 +153,7 @@ public class BuildChainProcessor {
     /**
      * @param teamcity Teamcity.
      * @param teamcityIgnited
-     * @param entryPoints Entry points.
+     * @param entryPoints Entry point(s): Build(s) to start scan from.
      * @param includeLatestRebuild Include latest rebuild.
      * @param procLog Process logger.
      * @param includeScheduledInfo Include scheduled info.
@@ -163,7 +163,7 @@ public class BuildChainProcessor {
     public FullChainRunCtx loadFullChainContext(
         IAnalyticsEnabledTeamcity teamcity,
         ITeamcityIgnited teamcityIgnited,
-        Collection<BuildRef> entryPoints,
+        Collection<Integer> entryPoints,
         LatestRebuildMode includeLatestRebuild,
         ProcessLogsMode procLog,
         boolean includeScheduledInfo,
@@ -174,7 +174,7 @@ public class BuildChainProcessor {
 
         Map<Integer, FatBuildCompacted> builds = new ConcurrentHashMap<>();
 
-        final Stream<FatBuildCompacted> entryPointsFatBuilds = entryPoints.stream().map(BuildRef::getId)
+        final Stream<FatBuildCompacted> entryPointsFatBuilds = entryPoints.stream()
                 .filter(Objects::nonNull)
                 .filter(id -> !builds.containsKey(id)) //load and propagate only new entry points
                 .map(id -> builds.computeIfAbsent(id, teamcityIgnited::getFatBuild));
@@ -226,8 +226,8 @@ public class BuildChainProcessor {
             return runStat.getCriticalFailRate() * 3.14f + runStat.getFailRate();
         };
 
-        BuildRef someEntryPoint = entryPoints.iterator().next();
-        FatBuildCompacted build = builds.computeIfAbsent(someEntryPoint.getId(), teamcityIgnited::getFatBuild);
+        Integer someEntryPnt = entryPoints.iterator().next();
+        FatBuildCompacted build = builds.computeIfAbsent(someEntryPnt, teamcityIgnited::getFatBuild);
         FullChainRunCtx fullChainRunCtx = new FullChainRunCtx(build.toBuild(compactor));
 
         contexts.sort(Comparator.comparing(function).reversed());
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java
index 1828345..3165a26 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java
@@ -28,7 +28,6 @@ import org.apache.ignite.ci.analysis.mode.ProcessLogsMode;
 import org.apache.ignite.ci.di.AutoProfiling;
 import org.apache.ignite.ci.github.pure.IGitHubConnection;
 import org.apache.ignite.ci.github.pure.IGitHubConnectionProvider;
-import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.user.ICredentialsProv;
 import org.apache.ignite.ci.web.model.current.ChainAtServerCurrentStatus;
 import org.apache.ignite.ci.web.model.current.TestFailuresSummary;
@@ -36,11 +35,9 @@ import org.apache.ignite.ci.web.rest.parms.FullQueryParams;
 import org.jetbrains.annotations.Nullable;
 
 import javax.inject.Inject;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
 
 /**
  * Process pull request/untracked branch chain at particular server.
@@ -98,11 +95,7 @@ public class PrChainsProcessor {
         else
             rebuild = LatestRebuildMode.LATEST;
 
-        List<BuildRef> finishedBuilds = teamcity.getFinishedBuildsIncludeSnDepFailed(
-            suiteId,
-            branchForTc);
-
-        long buildResMergeCnt;
+        int buildResMergeCnt;
         if (rebuild == LatestRebuildMode.ALL)
             buildResMergeCnt = cnt == null ? 10 : cnt;
         else
@@ -114,16 +107,12 @@ public class PrChainsProcessor {
         else
             logs = (checkAllLogs != null && checkAllLogs) ? ProcessLogsMode.ALL : ProcessLogsMode.SUITE_NOT_COMPLETE;
 
-        final List<BuildRef> chains = finishedBuilds.stream()
-            .filter(ref -> !ref.isFakeStub())
-            .sorted(Comparator.comparing(BuildRef::getId).reversed())
-            .filter(b -> b.getId() != null)
-            .limit(buildResMergeCnt)
-            .collect(Collectors.toList());
+        List<Integer> hist = tcIgnited.getLastNBuildsFromHistory(suiteId,
+            branchForTc, buildResMergeCnt);
 
         String baseBranch = Strings.isNullOrEmpty(baseBranchForTc) ? ITeamcity.DEFAULT : baseBranchForTc;
 
-        final FullChainRunCtx val = buildChainProcessor.loadFullChainContext(teamcity, tcIgnited, chains,
+        final FullChainRunCtx val = buildChainProcessor.loadFullChainContext(teamcity, tcIgnited, hist,
             rebuild,
             logs, buildResMergeCnt == 1,
             baseBranch);
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
index 5385273..386d227 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
@@ -29,6 +29,7 @@ import org.apache.ignite.ci.analysis.mode.ProcessLogsMode;
 import org.apache.ignite.ci.conf.BranchTracked;
 import org.apache.ignite.ci.di.AutoProfiling;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider;
 import org.apache.ignite.ci.teamcity.restcached.ITcServerProvider;
@@ -81,15 +82,9 @@ public class TrackedBranchChainsProcessor {
 
                 ITeamcityIgnited tcIgnited = tcIgnitedProv.server(srvId, creds);
 
-                final List<BuildRef> builds = teamcity.getFinishedBuildsIncludeSnDepFailed(
-                    chainTracked.getSuiteIdMandatory(),
-                    branchForTc);
+                String suiteIdMandatory = chainTracked.getSuiteIdMandatory();
 
-                List<BuildRef> chains = builds.stream()
-                    .filter(ref -> !ref.isFakeStub())
-                    .sorted(Comparator.comparing(BuildRef::getId).reversed())
-                    .limit(buildResMergeCnt)
-                    .filter(b -> b.getId() != null).collect(Collectors.toList());
+                List<Integer> chains = tcIgnited.getLastNBuildsFromHistory(suiteIdMandatory, branchForTc, buildResMergeCnt);
 
                 ProcessLogsMode logs;
                 if (buildResMergeCnt > 1)
@@ -102,7 +97,8 @@ public class TrackedBranchChainsProcessor {
                 boolean includeScheduled = buildResMergeCnt == 1;
 
                 final FullChainRunCtx ctx = chainProc.loadFullChainContext(teamcity,
-                    tcIgnited, chains,
+                    tcIgnited,
+                    chains,
                     rebuild,
                     logs,
                     includeScheduled,
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
index 8a9a264..7986799 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
@@ -149,20 +149,6 @@ public class BuildRefDao {
     }
 
     /**
-     * @param srvId Server id mask high.
-     * @param buildTypeId Build type id.
-     * @param bracnhNameQry Bracnh name query.
-     */
-    @AutoProfiling
-    @NotNull public List<BuildRef> findBuildsInHistory(int srvId,
-        @Nullable String buildTypeId,
-        String bracnhNameQry) {
-        return findBuildsInHistoryCompacted(srvId, buildTypeId, bracnhNameQry).stream()
-            .map(compacted -> compacted.toBuildRef(compactor))
-            .collect(Collectors.toList());
-    }
-
-    /**
      * @param srvId Server id.
      */
     @AutoProfiling
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
index 3e69094..7a4faf4 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
@@ -20,11 +20,12 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 import javax.annotation.Nullable;
-import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
+import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
 import org.apache.ignite.ci.teamcity.ignited.change.ChangeCompacted;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
+import org.jetbrains.annotations.NotNull;
 
 /**
  *
@@ -124,4 +125,13 @@ public interface ITeamcityIgnited {
     public FatBuildCompacted getFatBuild(int id, boolean acceptQueued);
 
     public Collection<ChangeCompacted> getAllChanges(int[] changeIds);
+
+    /**
+     * Returns IDs of N. most recent builds in build history.
+     *
+     * @param btId Bt id.
+     * @param branchForTc Branch for tc.
+     * @param cnt Count.
+     */
+    @NotNull public List<Integer> getLastNBuildsFromHistory(String btId, String branchForTc, int cnt);
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
index b6b0f04..0f95218 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
@@ -275,7 +275,9 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
 
         String bracnhNameQry = branchForQuery(branchName);
 
-        return buildRefDao.findBuildsInHistory(srvIdMaskHigh, buildTypeId, bracnhNameQry);
+        return buildRefDao.findBuildsInHistoryCompacted(srvIdMaskHigh, buildTypeId, bracnhNameQry)
+            .stream().map(compacted -> compacted.toBuildRef(compactor))
+            .collect(Collectors.toList());
     }
 
     /** {@inheritDoc} */
@@ -290,6 +292,31 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
         return buildRefDao.findBuildsInHistoryCompacted(srvIdMaskHigh, buildTypeId, bracnhNameQry);
     }
 
+    /** {@inheritDoc} */
+    @AutoProfiling
+    @Override @NotNull public List<Integer> getLastNBuildsFromHistory(String btId, String branchForTc, int cnt) {
+        List<BuildRefCompacted> hist = getBuildHistoryCompacted(btId, branchForTc);
+
+        List<Integer> chains = hist.stream()
+            .filter(ref -> !ref.isFakeStub())
+            .filter(t -> t.isNotCancelled(compactor))
+            .sorted(Comparator.comparing(BuildRefCompacted::id).reversed())
+            .limit(cnt)
+            .map(BuildRefCompacted::id)
+            .collect(Collectors.toList());
+
+        if (chains.isEmpty()) {
+            // probably there are no not-cacelled builds at all
+            chains = hist.stream()
+                .filter(ref -> !ref.isFakeStub())
+                .sorted(Comparator.comparing(BuildRefCompacted::id).reversed())
+                .map(BuildRefCompacted::id)
+                .limit(cnt)
+                .collect(Collectors.toList());
+        }
+        return chains;
+    }
+
     public String branchForQuery(@Nullable String branchName) {
         String bracnhNameQry;
         if (ITeamcity.DEFAULT.equals(branchName))
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java
index a8ab2a5..0117742 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/GetChainResultsAsHtml.java
@@ -71,10 +71,6 @@ public class GetChainResultsAsHtml {
         final Injector injector = CtxListener.getInjector(ctx);
         final BuildChainProcessor buildChainProcessor = injector.getInstance(BuildChainProcessor.class);
 
-        String hrefById = ITeamcity.buildHref(buildId);
-        BuildRef build = new BuildRef();
-        build.setId(buildId);
-        build.href = hrefById;
         String failRateBranch = ITeamcity.DEFAULT;
 
         ITcServerProvider tcHelper = injector.getInstance(ITcServerProvider.class);
@@ -82,7 +78,7 @@ public class GetChainResultsAsHtml {
         IAnalyticsEnabledTeamcity teamcity = tcHelper.server(srvId, creds);
         ITeamcityIgnited teamcityIgnited = injector.getInstance(ITeamcityIgnitedProvider.class).server(srvId, creds);
 
-        final FullChainRunCtx ctx = buildChainProcessor.loadFullChainContext(teamcity, teamcityIgnited, Collections.singletonList(build),
+        final FullChainRunCtx ctx = buildChainProcessor.loadFullChainContext(teamcity, teamcityIgnited, Collections.singletonList(buildId),
             LatestRebuildMode.NONE,
             ProcessLogsMode.SUITE_NOT_COMPLETE, false,
             failRateBranch);
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
index 40aba93..5cc9c5f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/build/GetBuildTestFailures.java
@@ -134,16 +134,11 @@ public class GetBuildTestFailures {
         IAnalyticsEnabledTeamcity teamcity = tcSrvProvider.server(srvId, prov);
         ITeamcityIgnited teamcityIgnited = tcIgnitedProv.server(srvId, prov);
 
-        //processChainByRef(teamcity, includeLatestRebuild, build, true, true)
-        String hrefById = teamcity.getBuildHrefById(buildId);
-        BuildRef build = new BuildRef();
-        build.setId(buildId);
-        build.href = hrefById;
         String failRateBranch = ITeamcity.DEFAULT;
 
         ProcessLogsMode procLogs = (checkAllLogs != null && checkAllLogs) ? ProcessLogsMode.ALL : ProcessLogsMode.SUITE_NOT_COMPLETE;
 
-        final FullChainRunCtx ctx = buildChainProcessor.loadFullChainContext(teamcity, teamcityIgnited, Collections.singletonList(build),
+        final FullChainRunCtx ctx = buildChainProcessor.loadFullChainContext(teamcity, teamcityIgnited, Collections.singletonList(buildId),
                 LatestRebuildMode.NONE,
                 procLogs, false,
             failRateBranch);