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 2019/05/16 15:43:23 UTC

[ignite-teamcity-bot] branch ignite-11853 updated: IGNITE-11853: Links fixed for tests failures, trusted suites development, filtering old issues, filtering disabled issues, possible blockers simplified.

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

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


The following commit(s) were added to refs/heads/ignite-11853 by this push:
     new 819d3c9  IGNITE-11853: Links fixed for tests failures, trusted suites development, filtering old issues, filtering disabled issues, possible blockers simplified.
819d3c9 is described below

commit 819d3c9fd45bdb000671dc02ec12c1146988ee14
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Thu May 16 18:43:16 2019 +0300

    IGNITE-11853: Links fixed for tests failures, trusted suites development, filtering old issues, filtering disabled issues, possible blockers simplified.
---
 .../ignite/ci/tcbot/chain/PrChainsProcessor.java   | 123 +++++++++++++--------
 .../model/current/ChainAtServerCurrentStatus.java  |   9 +-
 .../src/main/webapp/js/testfails-2.1.js            |  18 +--
 3 files changed, 91 insertions(+), 59 deletions(-)

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 47221be..bacbace 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
@@ -18,15 +18,16 @@ package org.apache.ignite.ci.tcbot.chain;
 
 import com.google.common.base.Strings;
 import java.util.ArrayList;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 import javax.inject.Inject;
 import org.apache.ignite.ci.IAnalyticsEnabledTeamcity;
 import org.apache.ignite.ci.ITeamcity;
 import org.apache.ignite.ci.analysis.FullChainRunCtx;
 import org.apache.ignite.ci.analysis.MultBuildRunCtx;
+import org.apache.ignite.ci.analysis.SuiteInBranch;
 import org.apache.ignite.ci.analysis.mode.LatestRebuildMode;
 import org.apache.ignite.ci.analysis.mode.ProcessLogsMode;
 import org.apache.ignite.ci.di.AutoProfiling;
@@ -37,10 +38,12 @@ import org.apache.ignite.ci.jira.ignited.IJiraIgnited;
 import org.apache.ignite.ci.jira.ignited.IJiraIgnitedProvider;
 import org.apache.ignite.ci.tcbot.visa.BranchTicketMatcher;
 import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence;
+import org.apache.ignite.ci.teamcity.ignited.IRunHistory;
 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.ignited.SyncMode;
+import org.apache.ignite.ci.teamcity.ignited.runhist.RunHistSync;
 import org.apache.ignite.ci.teamcity.restcached.ITcServerProvider;
 import org.apache.ignite.ci.user.ICredentialsProv;
 import org.apache.ignite.ci.web.model.current.ChainAtServerCurrentStatus;
@@ -189,77 +192,99 @@ public class PrChainsProcessor {
     @Nullable
     public List<SuiteCurrentStatus> getBlockersSuitesStatuses(String buildTypeId, String branchForTc, String srvId,
         ICredentialsProv prov, SyncMode queued) {
-        List<SuiteCurrentStatus> res = new ArrayList<>();
-
-        TestFailuresSummary summary = getTestFailuresSummary(
-            prov, srvId, buildTypeId, branchForTc,
-            FullQueryParams.LATEST, null, null, false, queued);
+        //using here non persistent TC allows to skip update statistic
+        IAnalyticsEnabledTeamcity teamcity = tcSrvProvider.server(srvId, prov);
+        ITeamcityIgnited tcIgnited = tcIgnitedProvider.server(srvId, prov);
 
-        boolean noBuilds = summary.servers.stream().anyMatch(s -> s.buildNotFound);
+        List<Integer> hist = tcIgnited.getLastNBuildsFromHistory(buildTypeId, branchForTc, 1);
 
-        if (noBuilds)
-            return null;
+        String baseBranch = ITeamcity.DEFAULT;
 
-        for (ChainAtServerCurrentStatus server : summary.servers) {
-            Map<String, List<SuiteCurrentStatus>> fails = findBlockerFailures(server);
+        final FullChainRunCtx ctx = buildChainProcessor.loadFullChainContext(teamcity,
+            tcIgnited,
+            hist,
+            LatestRebuildMode.LATEST,
+            ProcessLogsMode.SUITE_NOT_COMPLETE,
+            true,
+            baseBranch,
+            queued);
 
-            fails.forEach((k, v) -> res.addAll(v));
-        }
+        if (ctx.isFakeStub())
+            return null;
 
-        return res;
+        return findBlockerFailures(ctx, tcIgnited, baseBranch);
     }
 
     /**
-     * @param srv Server.
      * @return Failures for given server.
+     * @param fullChainRunCtx
+     * @param tcIgnited
+     * @param baseBranch
      */
-    private Map<String, List<SuiteCurrentStatus>> findBlockerFailures(ChainAtServerCurrentStatus srv) {
-        Map<String, List<SuiteCurrentStatus>> fails = new LinkedHashMap<>();
+    private List<SuiteCurrentStatus> findBlockerFailures(FullChainRunCtx fullChainRunCtx, ITeamcityIgnited tcIgnited,
+        String baseBranch) {
+        return fullChainRunCtx
+            .failedChildSuites()
+            .map((ctx) -> {
 
-        for (SuiteCurrentStatus suite : srv.suites) {
-            String suiteRes = suite.result.toLowerCase();
-            String failType = null;
+                String normalizedBaseBranch = RunHistSync.normalizeBranch(baseBranch);
+                IRunHistory statInBaseBranch = tcIgnited.getSuiteRunHist(new SuiteInBranch(ctx.suiteId(), normalizedBaseBranch));
 
-            if (suiteRes.contains("compilation"))
-                failType = "compilation";
+                String comment = ctx.getPossibleBlockerComment(tcIgnited, compactor, statInBaseBranch);
 
-            if (suiteRes.contains("timeout"))
-                failType = "timeout";
+                //todo may avoid creation of UI model for simple comment.
+                SuiteCurrentStatus suiteUi = new SuiteCurrentStatus();
 
-            if (suiteRes.contains("exit code"))
-                failType = "exit code";
+                suiteUi.initFromContext(tcIgnited, ctx, baseBranch, compactor);
 
-            if (suiteRes.contains(ProblemOccurrence.JAVA_LEVEL_DEADLOCK.toLowerCase()))
-                failType = "java level deadlock";
+                if (!Strings.isNullOrEmpty(comment))
+                    return suiteUi; // blocker found;
 
-            if (suiteRes.contains(ProblemOccurrence.BUILD_FAILURE_ON_MESSAGE.toLowerCase()))
-                failType = "build failure on message";
+                String suiteRes = suiteUi.result.toLowerCase();
+                String failType = null;
 
-            if (suiteRes.contains(ProblemOccurrence.BUILD_FAILURE_ON_METRIC.toLowerCase()))
-                failType = "build failure on metrics";
+                if (suiteRes.contains("compilation"))
+                    failType = "compilation";
 
-            if (suiteRes.contains(MultBuildRunCtx.CANCELLED.toLowerCase()))
-                failType = MultBuildRunCtx.CANCELLED.toLowerCase();
+                if (suiteRes.contains("timeout"))
+                    failType = "timeout";
 
-            if (failType == null) {
-                List<TestFailure> failures = new ArrayList<>();
+                if (suiteRes.contains("exit code"))
+                    failType = "exit code";
 
-                for (TestFailure testFailure : suite.testFailures) {
-                    if (testFailure.isNewFailedTest())
-                        failures.add(testFailure);
-                }
+                if (suiteRes.contains(ProblemOccurrence.JAVA_LEVEL_DEADLOCK.toLowerCase()))
+                    failType = "java level deadlock";
+
+                if (suiteRes.contains(ProblemOccurrence.BUILD_FAILURE_ON_MESSAGE.toLowerCase()))
+                    failType = "build failure on message";
+
+                if (suiteRes.contains(ProblemOccurrence.BUILD_FAILURE_ON_METRIC.toLowerCase()))
+                    failType = "build failure on metrics";
 
-                if (!failures.isEmpty()) {
-                    suite.testFailures = failures;
+                if (suiteRes.contains(MultBuildRunCtx.CANCELLED.toLowerCase()))
+                    failType = MultBuildRunCtx.CANCELLED.toLowerCase();
 
-                    failType = "failed tests";
+                if (failType == null) {
+                    List<TestFailure> failures = new ArrayList<>();
+
+                    for (TestFailure testFailure : suiteUi.testFailures) {
+                        if (testFailure.isNewFailedTest())
+                            failures.add(testFailure);
+                    }
+
+                    if (!failures.isEmpty()) {
+                        suiteUi.testFailures = failures;
+
+                        failType = "failed tests";
+                    }
                 }
-            }
 
-            if (failType != null)
-                fails.computeIfAbsent(failType, k -> new ArrayList<>()).add(suite);
-        }
+                if (failType != null)
+                    return suiteUi;
 
-        return fails;
+                return null;
+            })
+            .filter(Objects::nonNull)
+            .collect(Collectors.toList());
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/ChainAtServerCurrentStatus.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/ChainAtServerCurrentStatus.java
index 7dc90e8..c04c575 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/ChainAtServerCurrentStatus.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/ChainAtServerCurrentStatus.java
@@ -131,7 +131,14 @@ public class ChainAtServerCurrentStatus {
         this.webToPr = webToPr;
     }
 
-    /** */
+
+    /**
+     * Set up ticket and PR related information.
+     *
+     * @param ticketMatcher Ticket matcher.
+     * @param jiraIntegration Jira integration.
+     * @param gitHubConnIgnited Git hub connection ignited.
+     */
     public void initJiraAndGitInfo(BranchTicketMatcher ticketMatcher,
         IJiraIgnited jiraIntegration,
         IGitHubConnIgnited gitHubConnIgnited) {
diff --git a/ignite-tc-helper-web/src/main/webapp/js/testfails-2.1.js b/ignite-tc-helper-web/src/main/webapp/js/testfails-2.1.js
index 5c54dfb..3417859 100644
--- a/ignite-tc-helper-web/src/main/webapp/js/testfails-2.1.js
+++ b/ignite-tc-helper-web/src/main/webapp/js/testfails-2.1.js
@@ -242,7 +242,7 @@ function showChainCurrentStatusData(chain, settings) {
         for (var l = 0; l < chain.suites.length; l++) {
             var suite0 = chain.suites[l];
 
-            var suiteOrNull = suiteWithCriticalFailuresOnly(suite0);
+            var suiteOrNull = filterPossibleBlocker(suite0);
 
             if (suiteOrNull != null) {
                 if (blockersList.length !== 0)
@@ -305,7 +305,7 @@ function addBlockersData(server, settings) {
     for (var i = 0; i < server.suites.length; i++) {
         var suite = server.suites[i];
 
-        suite = suiteWithCriticalFailuresOnly(suite);
+        suite = filterPossibleBlocker(suite);
 
         if (suite != null)
             blockers += showSuiteData(suite, settings, server.prNum);
@@ -334,7 +334,7 @@ function addBlockersData(server, settings) {
  * @param suite - see SuiteCurrentStatus Java class.
  * @returns Suite without flaky tests. Or null - if suite have only flaky tests.
  */
-function suiteWithCriticalFailuresOnly(suite) {
+function filterPossibleBlocker(suite) {
     var suite0 = Object.assign({}, suite);
 
     if(isDefinedAndFilled(suite.blockerComment) && suite.blockerComment!=="")
@@ -699,8 +699,8 @@ function showSuiteData(suite, settings, prNum) {
         mInfo += "Top long running:<br>";
 
         mInfo += "<table>";
-        for (var i = 0; i < suite.topLongRunning.length; i++) {
-            mInfo += showTestFailData(suite.topLongRunning[i], false, settings);
+        for (var j = 0; j < suite.topLongRunning.length; j++) {
+            mInfo += showTestFailData(suite.topLongRunning[j], false, settings);
         }
         mInfo += "</table>";
     }
@@ -708,8 +708,8 @@ function showSuiteData(suite, settings, prNum) {
     if (isDefinedAndFilled(suite.warnOnly) && suite.warnOnly.length > 0) {
         mInfo += "Warn Only:<br>";
         mInfo += "<table>";
-        for (var i = 0; i < suite.warnOnly.length; i++) {
-            mInfo += showTestFailData(suite.warnOnly[i], false, settings);
+        for (var k = 0; k < suite.warnOnly.length; k++) {
+            mInfo += showTestFailData(suite.warnOnly[k], false, settings);
         }
         mInfo += "</table>";
     }
@@ -717,8 +717,8 @@ function showSuiteData(suite, settings, prNum) {
     if (isDefinedAndFilled(suite.logConsumers) && suite.logConsumers.length > 0) {
         mInfo += "Top Log Consumers:<br>";
         mInfo += "<table>";
-        for (var i = 0; i < suite.logConsumers.length; i++) {
-            mInfo += showTestFailData(suite.logConsumers[i], false, settings);
+        for (var l = 0; l < suite.logConsumers.length; l++) {
+            mInfo += showTestFailData(suite.logConsumers[l], false, settings);
         }
         mInfo += "</table>";
     }