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 16:42:51 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 refactored for suites and made server side.

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 74f2e83  IGNITE-11853: Links fixed for tests failures, trusted suites development, filtering old issues, filtering disabled issues, possible blockers refactored for suites and made server side.
74f2e83 is described below

commit 74f2e8370583874ad11156f93c2370f82f13c766
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Thu May 16 19:42:45 2019 +0300

    IGNITE-11853: Links fixed for tests failures, trusted suites development, filtering old issues, filtering disabled issues, possible blockers refactored for suites and made server side.
---
 .../apache/ignite/ci/analysis/ISuiteResults.java   |  21 ++--
 .../apache/ignite/ci/analysis/MultBuildRunCtx.java | 107 ++++++++++++++++++---
 .../ignite/ci/analysis/SingleBuildRunCtx.java      |   4 +
 .../ignite/ci/tcbot/chain/PrChainsProcessor.java   |  42 ++------
 .../ignited/fatbuild/ProblemCompacted.java         |   4 +
 .../ignite/ci/web/model/current/TestFailure.java   |   7 +-
 .../src/main/webapp/js/testfails-2.1.js            |   8 +-
 7 files changed, 134 insertions(+), 59 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/ISuiteResults.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/ISuiteResults.java
index 3f41f4b..b4b49b7 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/ISuiteResults.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/ISuiteResults.java
@@ -22,18 +22,25 @@ package org.apache.ignite.ci.analysis;
  */
 public interface ISuiteResults {
     /** */
-    boolean hasCompilationProblem();
+    public boolean hasCompilationProblem();
 
     /** */
-    boolean hasMetricProblem();
+    public boolean hasMetricProblem();
 
-    boolean hasTimeoutProblem();
+    /** */
+    public boolean hasTimeoutProblem();
+
+    /** */
+    public boolean hasJvmCrashProblem();
 
-    boolean hasJvmCrashProblem();
+    /** */
+    public boolean hasOomeProblem();
 
-    boolean hasOomeProblem();
+    /** */
+    public boolean hasExitCodeProblem();
 
-    boolean hasExitCodeProblem();
+    /** */
+    public boolean hasBuildMessageProblem();
 
     default boolean hasCriticalProblem() {
         return hasJvmCrashProblem()
@@ -51,5 +58,5 @@ public interface ISuiteResults {
             || hasMetricProblem();
     }
 
-    String suiteId();
+    public String suiteId();
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/MultBuildRunCtx.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/MultBuildRunCtx.java
index c646347..5f1b37f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/MultBuildRunCtx.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/MultBuildRunCtx.java
@@ -96,6 +96,11 @@ public class MultBuildRunCtx implements ISuiteResults {
         return firstBuildInfo.suiteId();
     }
 
+    /** {@inheritDoc} */
+    @Override public boolean hasBuildMessageProblem() {
+        return getBuildMessageProblemCount() > 0;
+    }
+
     public String buildTypeId() {
         return firstBuildInfo.buildTypeId;
     }
@@ -127,6 +132,11 @@ public class MultBuildRunCtx implements ISuiteResults {
         return buildsStream().filter(ISuiteResults::hasMetricProblem).count();
     }
 
+    /** */
+    public long getBuildMessageProblemCount() {
+        return buildsStream().filter(ISuiteResults::hasBuildMessageProblem).count();
+    }
+
     /** {@inheritDoc} */
     @Override public boolean hasCompilationProblem() {
         return getCompilationProblemCount() > 0;
@@ -185,7 +195,7 @@ public class MultBuildRunCtx implements ISuiteResults {
     public String getResult() {
         StringBuilder res = new StringBuilder();
 
-        long cancelledCnt = buildsStream().filter(bCtx -> !bCtx.isComposite() && bCtx.isCancelled()).count();
+        long cancelledCnt = getCancelledBuildsCount();
 
         if (cancelledCnt > 0) {
             res.append(CANCELLED);
@@ -222,15 +232,21 @@ public class MultBuildRunCtx implements ISuiteResults {
             }
         }
 
+        addKnownProblemCnt(res, ProblemOccurrence.JAVA_LEVEL_DEADLOCK, getJavaLevelDeadlocksCount());
+
+        return res.toString();
+    }
+
+    public long getJavaLevelDeadlocksCount() {
         List<LogCheckResult> collect = getLogChecksIfFinished().collect(Collectors.toList());
 
-        long javaDeadlocks = collect.stream().map(LogCheckResult::getCustomProblems)
+        return collect.stream().map(LogCheckResult::getCustomProblems)
             .filter(set -> set.contains(ProblemOccurrence.JAVA_LEVEL_DEADLOCK))
             .count();
+    }
 
-        addKnownProblemCnt(res, ProblemOccurrence.JAVA_LEVEL_DEADLOCK, javaDeadlocks);
-
-        return res.toString();
+    public long getCancelledBuildsCount() {
+        return buildsStream().filter(bCtx -> !bCtx.isComposite() && bCtx.isCancelled()).count();
     }
 
     public void addKnownProblemCnt(StringBuilder res, String nme, long execToCnt) {
@@ -463,23 +479,92 @@ public class MultBuildRunCtx implements ISuiteResults {
         return buildsStream().flatMap(b -> b.tags().stream()).collect(Collectors.toSet());
     }
 
+    /**
+     * Classify suite if it is blossible blocker or not.
+     * @param tcIgnited Tc ignited.
+     * @param compactor Compactor.
+     * @param baseBranchHist Base branch history for suite.
+     */
     @NotNull public String getPossibleBlockerComment(ITeamcityIgnited tcIgnited,
         @Nonnull IStringCompactor compactor,
-        IRunHistory baseBranchHist) {
+        @Nullable IRunHistory baseBranchHist) {
         StringBuilder res = new StringBuilder();
 
+        long cancelledCnt = getCancelledBuildsCount();
+
+        if (cancelledCnt > 0) {
+            res.append("Suite was cancelled, cancellation is always a blocker ");
+
+            if (cancelledCnt > 1)
+                res.append(" [").append(cancelledCnt).append("] \n");
+        }
+
+        addKnownProblemAsPossibleBlocker(res, "Timeout", getExecutionTimeoutCount(), baseBranchHist, true);
+        addKnownProblemAsPossibleBlocker(res, "Jvm Crash", getJvmCrashProblemCount(), baseBranchHist, true);
+        addKnownProblemAsPossibleBlocker(res, "Failure on metric", getMetricProblemCount(), baseBranchHist, true);
+        addKnownProblemAsPossibleBlocker(res, "Compilation Error", getCompilationProblemCount(), baseBranchHist, true);
+
+        addKnownProblemAsPossibleBlocker(res, "Out Of Memory Error", getBuildMessageProblemCount(), baseBranchHist, false);
+        addKnownProblemAsPossibleBlocker(res, "Out Of Memory Error", getOomeProblemCount(), baseBranchHist, false);
+        addKnownProblemAsPossibleBlocker(res, "Exit Code", getExitCodeProblemsCount(), baseBranchHist, false);
+
         if(hasAnyBuildProblemExceptTestOrSnapshot() && tcIgnited.config().trustedSuites().contains(suiteId())) {
             res.append("Suite is trusted but has build problems");
 
-            res.append(" [").append(allProblemsInAllBuilds()
+            res.append("[");
+            res.append(allProblemsInAllBuilds()
                 .filter(p -> !p.isFailedTests(compactor) && !p.isSnapshotDepProblem(compactor))
-                .map(p -> p.type(compactor)).distinct().collect(Collectors.joining(", "))).append("]");
+                .map(p -> p.type(compactor)).distinct().collect(Collectors.joining(", ")));
+            res.append("] ");
+
+            appendFailRate(baseBranchHist, res).append(" \n");
+        }
 
-            res.append(" Base branch fail rate is ");
-            res.append(baseBranchHist.getFailPercentPrintable());
-            res.append("%");
+        long jldl = getJavaLevelDeadlocksCount();
+        if (jldl > 0) {
+            res.append("Java Level Deadlock detected, it is unconditional blocker")
+                .append(" ")
+                .append(jldl > 1 ? "[" + jldl + "]" : "")
+                .append(" \n");
         }
 
         return res.toString();
     }
+
+    public void addKnownProblemAsPossibleBlocker(StringBuilder res, String nme, long execToCnt,
+        @Nullable IRunHistory baseBranchHist, boolean critical) {
+        if (execToCnt <= 0)
+            return;
+
+        res.append(nme).append(" is a blocker. ");
+
+        if (critical)
+            appendCriticalFailRate(baseBranchHist, res);
+        else
+            appendFailRate(baseBranchHist, res);
+
+        res.append(execToCnt > 1 ? "[" + execToCnt + "]" : "").append(" \n");
+    }
+
+    public StringBuilder appendFailRate(IRunHistory baseBranchHist, StringBuilder res) {
+        if (baseBranchHist == null)
+            return res;
+
+        res.append("Base branch fail rate is ");
+        res.append(baseBranchHist.getFailPercentPrintable());
+        res.append("% ");
+
+        return res;
+    }
+
+    public StringBuilder appendCriticalFailRate(IRunHistory baseBranchHist, StringBuilder res) {
+        if (baseBranchHist == null)
+            return res;
+
+        res.append("Base branch critical fail rate is ");
+        res.append(baseBranchHist.getCriticalFailPercentPrintable());
+        res.append("% ");
+
+        return res;
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/SingleBuildRunCtx.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/SingleBuildRunCtx.java
index 5433d4b..80dbdbe 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/SingleBuildRunCtx.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/SingleBuildRunCtx.java
@@ -119,6 +119,10 @@ public class SingleBuildRunCtx implements ISuiteResults {
         return compactor.getStringFromId(buildCompacted.buildTypeId());
     }
 
+    @Override public boolean hasBuildMessageProblem() {
+        return getProblemsStream().anyMatch(p -> p.isBuildFailureOnMessage(compactor));
+    }
+
     public void setLogCheckResFut(CompletableFuture<LogCheckResult> logCheckResFut) {
         this.logCheckResFut = logCheckResFut;
     }
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 bacbace..fc0a829 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
@@ -26,7 +26,6 @@ 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;
@@ -37,7 +36,6 @@ import org.apache.ignite.ci.github.pure.IGitHubConnectionProvider;
 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;
@@ -240,43 +238,19 @@ public class PrChainsProcessor {
                 if (!Strings.isNullOrEmpty(comment))
                     return suiteUi; // blocker found;
 
-                String suiteRes = suiteUi.result.toLowerCase();
                 String failType = null;
 
-                if (suiteRes.contains("compilation"))
-                    failType = "compilation";
+                List<TestFailure> failures = new ArrayList<>();
 
-                if (suiteRes.contains("timeout"))
-                    failType = "timeout";
-
-                if (suiteRes.contains("exit code"))
-                    failType = "exit code";
-
-                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 (suiteRes.contains(MultBuildRunCtx.CANCELLED.toLowerCase()))
-                    failType = MultBuildRunCtx.CANCELLED.toLowerCase();
-
-                if (failType == null) {
-                    List<TestFailure> failures = new ArrayList<>();
-
-                    for (TestFailure testFailure : suiteUi.testFailures) {
-                        if (testFailure.isNewFailedTest())
-                            failures.add(testFailure);
-                    }
+                for (TestFailure testFailure : suiteUi.testFailures) {
+                    if (testFailure.isNewFailedTest())
+                        failures.add(testFailure);
+                }
 
-                    if (!failures.isEmpty()) {
-                        suiteUi.testFailures = failures;
+                if (!failures.isEmpty()) {
+                    suiteUi.testFailures = failures;
 
-                        failType = "failed tests";
-                    }
+                    failType = "failed tests";
                 }
 
                 if (failType != null)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProblemCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProblemCompacted.java
index ee0966f..247cf67 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProblemCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProblemCompacted.java
@@ -186,4 +186,8 @@ public class ProblemCompacted {
             || isBuildFailureOnMetric(compactor)
             || isCompilationError(compactor);
     }
+
+    public boolean isBuildFailureOnMessage(IStringCompactor compactor) {
+        return compactor.getStringId(ProblemOccurrence.BUILD_FAILURE_ON_MESSAGE) == type;
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/TestFailure.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/TestFailure.java
index ba3a025..db10f55 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/TestFailure.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/TestFailure.java
@@ -89,9 +89,9 @@ import static org.apache.ignite.ci.web.model.current.SuiteCurrentStatus.branchFo
     @Nullable public String webUrlBaseBranch;
 
     /**
-     * @param failure
-     * @param tcIgn
-     * @param projectId
+     * @param failure test ocurrence (probably multiple)
+     * @param tcIgn Teamcity.
+     * @param projectId project ID.
      * @param branchName
      * @param baseBranchName base branch name (e.g. master).
      */
@@ -228,6 +228,7 @@ import static org.apache.ignite.ci.web.model.current.SuiteCurrentStatus.branchFo
     /**
      * @return {@code True} if this failure is appeared in the current branch.
      */
+    @Deprecated
     public boolean isNewFailedTest() {
         if (!Strings.isNullOrEmpty(webIssueUrl))
             return false;
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 3417859..ded9ead 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
@@ -337,9 +337,6 @@ function addBlockersData(server, settings) {
 function filterPossibleBlocker(suite) {
     var suite0 = Object.assign({}, suite);
 
-    if(isDefinedAndFilled(suite.blockerComment) && suite.blockerComment!=="")
-        return suite0;
-
     var j = 0;
 
     suite0.testFailures = suite0.testFailures.slice();
@@ -353,7 +350,10 @@ function filterPossibleBlocker(suite) {
             suite0.testFailures.splice(j, 1);
     }
 
-    if (suite0.testFailures.length > 0 || suite0.result !== "")
+    if(isDefinedAndFilled(suite.blockerComment) && suite.blockerComment!=="")
+        return suite0;
+
+    if (suite0.testFailures.length > 0)
         return suite0;
 
     return null;