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

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


The following commit(s) were added to refs/heads/master by this push:
     new db40718  Java level deadlock detection: Phase 2: reporting as build 
problem and as PR blocker
db40718 is described below

commit db40718e41f4409b8e54d2cb2e1378fb5864a9ec
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Wed Oct 3 21:30:45 2018 +0300

    Java level deadlock detection: Phase 2: reporting as build problem and as 
PR blocker
---
 .../main/java/org/apache/ignite/ci/ITeamcity.java  | 10 +++---
 .../apache/ignite/ci/IgnitePersistentTeamcity.java | 24 +++++++-------
 .../main/java/org/apache/ignite/ci/TcHelper.java   | 18 +++++-----
 .../apache/ignite/ci/analysis/LogCheckResult.java  | 10 +++++-
 .../apache/ignite/ci/analysis/LogCheckTask.java    |  2 +-
 .../apache/ignite/ci/analysis/MultBuildRunCtx.java | 38 ++++++++++++++--------
 .../ignite/ci/analysis/SingleBuildRunCtx.java      | 33 +++++++++----------
 .../ignite/ci/chain/BuildChainProcessor.java       |  2 +-
 .../apache/ignite/ci/chain/PrChainsProcessor.java  | 28 +++++++++-------
 .../ci/chain/TrackedBranchChainsProcessor.java     |  2 +-
 .../org/apache/ignite/ci/logs/LogMsgToWarn.java    |  4 +--
 .../tcmodel/result/problems/ProblemOccurrence.java | 19 ++++++-----
 .../ci/web/model/current/SuiteCurrentStatus.java   |  1 +
 .../ignite/ci/web/rest/pr/GetPrTestFailures.java   | 19 ++++++-----
 14 files changed, 114 insertions(+), 96 deletions(-)

diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
index 8f58657..4989b31 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
@@ -181,18 +181,16 @@ public interface ITeamcity {
      */
     @Nonnull default MultBuildRunCtx loadTestsAndProblems(@Nonnull Build 
build) {
         MultBuildRunCtx ctx = new MultBuildRunCtx(build);
+
         loadTestsAndProblems(build, ctx);
+
         return ctx;
     }
 
     default SingleBuildRunCtx loadTestsAndProblems(@Nonnull Build build, 
@Deprecated MultBuildRunCtx mCtx) {
         SingleBuildRunCtx ctx = new SingleBuildRunCtx(build);
-        if (build.problemOccurrences != null) {
-            List<ProblemOccurrence> problems = 
getProblems(build).getProblemsNonNull();
-
-            mCtx.addProblems(problems);
-            ctx.setProblems(problems);
-        }
+        if (build.problemOccurrences != null)
+            ctx.setProblems(getProblems(build).getProblemsNonNull());
 
         if (build.lastChanges != null) {
             for (ChangeRef next : build.lastChanges.changes) {
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgnitePersistentTeamcity.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgnitePersistentTeamcity.java
index 2e9f873..82bea6d 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgnitePersistentTeamcity.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgnitePersistentTeamcity.java
@@ -1065,18 +1065,17 @@ public class IgnitePersistentTeamcity implements 
IAnalyticsEnabledTeamcity, ITea
 
 
     @AutoProfiling
-    @Override
-    public String getThreadDumpCached(Integer buildId) {
+    @Override public String getThreadDumpCached(Integer buildId) {
         IgniteCache<Integer, LogCheckResult> entries = logCheckResultCache();
 
-        LogCheckResult logCheckResult = entries.get(buildId);
+        LogCheckResult logCheckRes = entries.get(buildId);
 
-        if (logCheckResult == null)
+        if (logCheckRes == null)
             return null;
 
-        int fields = ObjectInterner.internFields(logCheckResult);
+        int fields = ObjectInterner.internFields(logCheckRes);
 
-        return logCheckResult.getLastThreadDump();
+        return logCheckRes.getLastThreadDump();
     }
 
     /** {@inheritDoc} */
@@ -1084,9 +1083,8 @@ public class IgnitePersistentTeamcity implements 
IAnalyticsEnabledTeamcity, ITea
         if (calculatedStatistic().containsKey(ctx.buildId()))
             return;
 
-        for (TestOccurrence testOccurrence : ctx.getTests()) {
+        for (TestOccurrence testOccurrence : ctx.getTests())
             addTestOccurrenceToStat(testOccurrence, 
normalizeBranch(ctx.getBuild()), !ctx.getChanges().isEmpty());
-        }
 
         calculatedStatistic().put(ctx.buildId(), true);
     }
@@ -1102,12 +1100,12 @@ public class IgnitePersistentTeamcity implements 
IAnalyticsEnabledTeamcity, ITea
     public <K, V extends IVersionedEntity> CompletableFuture<V> 
loadFutureIfAbsentVers(IgniteCache<K, V> cache,
         K key,
         Function<K, CompletableFuture<V>> submitFunction) {
-        @Nullable final V persistedValue = cache.get(key);
+        @Nullable final V persistedVal = cache.get(key);
 
-        if (persistedValue != null && 
!persistedValue.isOutdatedEntityVersion()) {
-            int fields = ObjectInterner.internFields(persistedValue);
+        if (persistedVal != null && !persistedVal.isOutdatedEntityVersion()) {
+            int fields = ObjectInterner.internFields(persistedVal);
 
-            return CompletableFuture.completedFuture(persistedValue);
+            return CompletableFuture.completedFuture(persistedVal);
         }
 
         CompletableFuture<V> apply = submitFunction.apply(key);
@@ -1121,7 +1119,7 @@ public class IgnitePersistentTeamcity implements 
IAnalyticsEnabledTeamcity, ITea
     }
 
     /** {@inheritDoc} */
-    public void setExecutor(ExecutorService executor) {
+    @Override public void setExecutor(ExecutorService executor) {
         this.teamcity.setExecutor(executor);
     }
 
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java
index 8573a99..a0e0efc 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java
@@ -23,21 +23,21 @@ import org.apache.ignite.ci.issue.IssueDetector;
 import org.apache.ignite.ci.issue.IssuesStorage;
 import org.apache.ignite.ci.jira.IJiraIntegration;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
+import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence;
 import org.apache.ignite.ci.user.ICredentialsProv;
 import org.apache.ignite.ci.user.UserAndSessionsStorage;
-import org.apache.ignite.ci.web.TcUpdatePool;
 import org.apache.ignite.ci.web.model.current.ChainAtServerCurrentStatus;
 import org.apache.ignite.ci.web.model.current.SuiteCurrentStatus;
 import org.apache.ignite.ci.web.model.current.TestFailure;
 import org.apache.ignite.ci.web.model.current.TestFailuresSummary;
 import org.apache.ignite.ci.web.model.hist.FailureSummary;
+import org.apache.ignite.ci.web.rest.parms.FullQueryParams;
 import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
 import java.util.*;
-import java.util.concurrent.ExecutorService;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static org.apache.ignite.ci.analysis.RunStat.MAX_LATEST_RUNS;
@@ -159,8 +159,8 @@ public class TcHelper implements ITcHelper, 
IJiraIntegration {
     ) {
         StringBuilder res = new StringBuilder();
         TestFailuresSummary summary = prChainsProcessor.getTestFailuresSummary(
-                prov, srvId, buildTypeId, branchForTc,
-            "Latest", null, null);
+            prov, srvId, buildTypeId, branchForTc,
+            FullQueryParams.LATEST, null, null, false);
 
         if (summary != null) {
             for (ChainAtServerCurrentStatus server : summary.servers) {
@@ -231,11 +231,6 @@ public class TcHelper implements ITcHelper, 
IJiraIntegration {
     private Map<String, List<SuiteCurrentStatus>> 
findFailures(ChainAtServerCurrentStatus srv) {
         Map<String, List<SuiteCurrentStatus>> fails = new LinkedHashMap<>();
 
-        fails.put("compilation", new ArrayList<>());
-        fails.put("timeout", new ArrayList<>());
-        fails.put("exit code", new ArrayList<>());
-        fails.put("failed tests", new ArrayList<>());
-
         for (SuiteCurrentStatus suite : srv.suites) {
             String suiteRes = suite.result.toLowerCase();
             String failType = null;
@@ -249,6 +244,9 @@ public class TcHelper implements ITcHelper, 
IJiraIntegration {
             if (suiteRes.contains("exit code"))
                 failType = "exit code";
 
+            
if(suiteRes.contains(ProblemOccurrence.JAVA_LEVEL_DEADLOCK.toLowerCase()))
+                failType = "java level deadlock";
+
             if (failType == null) {
                 List<TestFailure> failures = new ArrayList<>();
 
@@ -265,7 +263,7 @@ public class TcHelper implements ITcHelper, 
IJiraIntegration {
             }
 
             if (failType != null)
-                fails.get(failType).add(suite);
+                fails.computeIfAbsent(failType, k->new 
ArrayList<>()).add(suite);
         }
 
         return fails;
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/LogCheckResult.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/LogCheckResult.java
index 2d93212..2ceda10 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/LogCheckResult.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/LogCheckResult.java
@@ -24,6 +24,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import javax.annotation.Nonnull;
 import org.apache.ignite.ci.db.Persisted;
 import org.jetbrains.annotations.Nullable;
 
@@ -122,6 +123,13 @@ public class LogCheckResult implements IVersionedEntity {
     }
 
     public boolean hasProblem(String deadlock) {
-        return buildCustomProblems!=null && 
buildCustomProblems.contains(deadlock);
+        return buildCustomProblems != null && 
buildCustomProblems.contains(deadlock);
+    }
+
+    /**
+     *
+     */
+    @Nonnull public Set<String> getCustomProblems() {
+        return buildCustomProblems == null ? Collections.emptySet() : 
Collections.unmodifiableSet(buildCustomProblems);
     }
 }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/LogCheckTask.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/LogCheckTask.java
index cd2949c..00e6e15 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/LogCheckTask.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/LogCheckTask.java
@@ -22,7 +22,7 @@ import org.apache.ignite.ci.logs.BuildLogStreamChecker;
 import org.apache.ignite.ci.logs.handlers.TestLogHandler;
 import org.apache.ignite.ci.logs.handlers.ThreadDumpInMemoryHandler;
 
-import static org.apache.ignite.ci.logs.LogMsgToWarn.JAVA_LEVEL_DEADLOCK;
+import static 
org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence.JAVA_LEVEL_DEADLOCK;
 
 /**
  *
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 655717b..803c72e 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
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.ci.analysis;
 
-import com.google.common.base.Strings;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
@@ -29,6 +28,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentSkipListMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.Future;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.annotation.Nonnull;
 import org.apache.ignite.ci.tcmodel.conf.BuildType;
@@ -41,6 +41,7 @@ import 
org.apache.ignite.ci.tcmodel.result.tests.TestOccurrenceFull;
 import org.apache.ignite.ci.util.CollectionUtil;
 import org.apache.ignite.ci.util.FutureUtil;
 import org.apache.ignite.ci.util.TimeUtil;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import static java.util.stream.Stream.concat;
@@ -52,11 +53,9 @@ import static java.util.stream.Stream.concat;
 public class MultBuildRunCtx implements ISuiteResults {
     @Nonnull private final Build firstBuildInfo;
 
+    /** Builds: Single execution. */
     private List<SingleBuildRunCtx> builds = new CopyOnWriteArrayList<>();
 
-    @Deprecated
-    private List<ProblemOccurrence> problems = new CopyOnWriteArrayList<>();
-
     /** Tests: Map from full test name to multiple test occurrence. */
     private final Map<String, MultTestFailureOccurrences> tests = new 
ConcurrentSkipListMap<>();
 
@@ -102,11 +101,6 @@ public class MultBuildRunCtx implements ISuiteResults {
         return 
builds.stream().map(SingleBuildRunCtx::getTestLogCheckResult).filter(Objects::nonNull);
     }
 
-    @Deprecated
-    public void addProblems(List<ProblemOccurrence> problems) {
-        this.problems.addAll(problems);
-    }
-
     public String suiteId() {
         return firstBuildInfo.suiteId();
     }
@@ -119,8 +113,9 @@ public class MultBuildRunCtx implements ISuiteResults {
         return firstBuildInfo.buildTypeId;
     }
 
+    //currently used only in metrics
     public boolean hasNontestBuildProblem() {
-        return problems != null && problems.stream().anyMatch(problem ->
+        return allProblemsInAllBuilds().anyMatch(problem ->
             !problem.isFailedTests()
                 && !problem.isSnapshotDepProblem()
                 && 
!ProblemOccurrence.BUILD_FAILURE_ON_MESSAGE.equals(problem.type));
@@ -128,11 +123,12 @@ public class MultBuildRunCtx implements ISuiteResults {
     }
 
     public boolean hasAnyBuildProblemExceptTestOrSnapshot() {
-        return getBuildProblemExceptTestOrSnapshot().isPresent();
+        return allProblemsInAllBuilds()
+            .anyMatch(p -> !p.isFailedTests() && !p.isSnapshotDepProblem());
     }
 
-    private Optional<ProblemOccurrence> getBuildProblemExceptTestOrSnapshot() {
-        return problems.stream().filter(p -> !p.isFailedTests() && 
!p.isSnapshotDepProblem()).findAny();
+    @NotNull public Stream<ProblemOccurrence> allProblemsInAllBuilds() {
+        return builds.stream().flatMap(SingleBuildRunCtx::getProblemsStream);
     }
 
     public List<SingleBuildRunCtx> getBuilds() {
@@ -236,12 +232,13 @@ public class MultBuildRunCtx implements ISuiteResults {
 
         {
             Stream<ProblemOccurrence> stream =
-                problems.stream().filter(p ->
+                allProblemsInAllBuilds().filter(p ->
                     !p.isFailedTests()
                         && !p.isSnapshotDepProblem()
                         && !p.isExecutionTimeout()
                         && !p.isJvmCrash()
                         && !p.isExitCode()
+                        && !p.isJavaLevelDeadlock()
                         && !p.isOome());
             Optional<ProblemOccurrence> bpOpt = stream.findAny();
             if (bpOpt.isPresent()) {
@@ -251,6 +248,15 @@ public class MultBuildRunCtx implements ISuiteResults {
                 res.append(bpOpt.get().type).append(" ");
             }
         }
+
+        List<LogCheckResult> collect = 
getLogChecksIfFinished().collect(Collectors.toList());
+
+        long javaDeadlocks = 
collect.stream().map(LogCheckResult::getCustomProblems)
+            .filter(set -> set.contains(ProblemOccurrence.JAVA_LEVEL_DEADLOCK))
+            .count();
+
+        addKnownProblemCnt(res, ProblemOccurrence.JAVA_LEVEL_DEADLOCK, 
javaDeadlocks);
+
         return res.toString();
     }
 
@@ -440,4 +446,8 @@ public class MultBuildRunCtx implements ISuiteResults {
     public Set<String> tests() {
         return tests.keySet();
     }
+
+    public Stream<LogCheckResult> getLogChecksIfFinished() {
+        return 
builds.stream().map(SingleBuildRunCtx::getLogCheckIfFinished).filter(Objects::nonNull);
+    }
 }
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 9bb50d5..99ee2e7 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
@@ -25,6 +25,7 @@ import java.util.Objects;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Future;
 import java.util.stream.Stream;
+import javax.annotation.Nonnull;
 import org.apache.ignite.ci.tcmodel.changes.Change;
 import org.apache.ignite.ci.tcmodel.result.Build;
 import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence;
@@ -37,7 +38,9 @@ import org.jetbrains.annotations.Nullable;
  */
 public class SingleBuildRunCtx implements ISuiteResults {
     private Build build;
-    private CompletableFuture<LogCheckResult> logCheckResultsFut;
+
+    /** Logger check result future. */
+    private CompletableFuture<LogCheckResult> logCheckResultFut;
 
     /** Build problems occurred during single build run. */
     @Nullable private List<ProblemOccurrence> problems;
@@ -66,7 +69,7 @@ public class SingleBuildRunCtx implements ISuiteResults {
         return 
getProblemsStream().filter(ProblemOccurrence::isExecutionTimeout).count();
     }
 
-    private Stream<ProblemOccurrence> getProblemsStream() {
+    Stream<ProblemOccurrence> getProblemsStream() {
         if (problems == null)
             return Stream.empty();
 
@@ -89,12 +92,11 @@ public class SingleBuildRunCtx implements ISuiteResults {
         return build.suiteId();
     }
 
-    public void setLogCheckResultsFut(CompletableFuture<LogCheckResult> 
logCheckResultsFut) {
-        this.logCheckResultsFut = logCheckResultsFut;
+    public void setLogCheckResultFut(CompletableFuture<LogCheckResult> 
logCheckResultFut) {
+        this.logCheckResultFut = logCheckResultFut;
     }
 
-    @Nullable
-    public String getCriticalFailLastStartedTest() {
+    @Nullable public String getCriticalFailLastStartedTest() {
         LogCheckResult logCheckResult = getLogCheckIfFinished();
         if (logCheckResult == null)
             return null;
@@ -102,8 +104,7 @@ public class SingleBuildRunCtx implements ISuiteResults {
         return logCheckResult.getLastStartedTest();
     }
 
-    @Nullable
-    public Map<String, TestLogCheckResult> getTestLogCheckResult() {
+    @Nullable public Map<String, TestLogCheckResult> getTestLogCheckResult() {
         LogCheckResult logCheckRes = getLogCheckIfFinished();
 
         if (logCheckRes == null)
@@ -112,8 +113,7 @@ public class SingleBuildRunCtx implements ISuiteResults {
         return logCheckRes.getTestLogCheckResult();
     }
 
-    @Nullable
-    public Integer getBuildIdIfHasThreadDump() {
+    @Nullable public Integer getBuildIdIfHasThreadDump() {
         LogCheckResult logCheckRes = getLogCheckIfFinished();
 
         if (logCheckRes == null)
@@ -123,13 +123,13 @@ public class SingleBuildRunCtx implements ISuiteResults {
     }
 
     @Nullable public LogCheckResult getLogCheckIfFinished() {
-        if (logCheckResultsFut == null)
+        if (logCheckResultFut == null)
             return null;
 
-        if (!logCheckResultsFut.isDone() || logCheckResultsFut.isCancelled())
+        if (!logCheckResultFut.isDone() || logCheckResultFut.isCancelled())
             return null;
 
-        LogCheckResult logCheckRes = 
FutureUtil.getResultSilent(logCheckResultsFut);
+        LogCheckResult logCheckRes = 
FutureUtil.getResultSilent(logCheckResultFut);
 
         if (logCheckRes == null)
             return null;
@@ -160,11 +160,8 @@ public class SingleBuildRunCtx implements ISuiteResults {
         return tests;
     }
 
-    Stream<? extends Future<?>> getFutures() {
-        if (logCheckResultsFut == null)
-            return Stream.empty();
-        else
-            return Stream.of((Future<?>)logCheckResultsFut);
+    @Nonnull Stream<? extends Future<?>> getFutures() {
+        return logCheckResultFut == null ? Stream.empty() : 
Stream.of((Future<?>)logCheckResultFut);
     }
 
     public boolean isComposite() {
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/BuildChainProcessor.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/BuildChainProcessor.java
index 64b70de..fd93f87 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/BuildChainProcessor.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/BuildChainProcessor.java
@@ -224,7 +224,7 @@ public class BuildChainProcessor {
 
             if ((procLog == ProcessLogsMode.SUITE_NOT_COMPLETE && 
ctx.hasSuiteIncompleteFailure())
                 || procLog == ProcessLogsMode.ALL)
-                
ctx.setLogCheckResultsFut(teamcity.analyzeBuildLog(ctx.buildId(), ctx));
+                
ctx.setLogCheckResultFut(teamcity.analyzeBuildLog(ctx.buildId(), ctx));
         }
     }
 
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/PrChainsProcessor.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/PrChainsProcessor.java
index 3650327..8e2030e 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/PrChainsProcessor.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/PrChainsProcessor.java
@@ -56,6 +56,7 @@ public class PrChainsProcessor {
      * @param act Action.
      * @param cnt Count.
      * @param baseBranchForTc Base branch name in TC identification.
+     * @param checkAllLogs Check all logs
      * @return Test failures summary.
      */
     @AutoProfiling
@@ -66,7 +67,8 @@ public class PrChainsProcessor {
         String branchForTc,
         String act,
         Integer cnt,
-        @Nullable String baseBranchForTc) {
+        @Nullable String baseBranchForTc,
+        @Nullable Boolean checkAllLogs) {
         final TestFailuresSummary res = new TestFailuresSummary();
         final AtomicInteger runningUpdates = new AtomicInteger();
 
@@ -89,28 +91,30 @@ public class PrChainsProcessor {
             suiteId,
             branchForTc);
 
-        long limit;
+        long buildResMergeCnt;
         if (rebuild == LatestRebuildMode.ALL)
-            limit = cnt == null ? 10 : cnt;
+            buildResMergeCnt = cnt == null ? 10 : cnt;
         else
-            limit = 1;
+            buildResMergeCnt = 1;
+
+        ProcessLogsMode logs;
+        if (buildResMergeCnt > 1)
+            logs = (checkAllLogs != null && checkAllLogs) ? 
ProcessLogsMode.ALL : ProcessLogsMode.DISABLED;
+        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())
-            .limit(limit)
-            .filter(b -> b.getId() != null).collect(Collectors.toList());
-
-        boolean singleBuild = rebuild != LatestRebuildMode.ALL;
-        ProcessLogsMode logs = singleBuild
-            ? ProcessLogsMode.SUITE_NOT_COMPLETE
-            : ProcessLogsMode.DISABLED;
+            .filter(b -> b.getId() != null)
+            .limit(buildResMergeCnt)
+            .collect(Collectors.toList());
 
         String baseBranch = Strings.isNullOrEmpty(baseBranchForTc) ? 
ITeamcity.DEFAULT : baseBranchForTc;
 
         final FullChainRunCtx val = 
buildChainProcessor.loadFullChainContext(teamcity, chains,
             rebuild,
-            logs, singleBuild,
+            logs, buildResMergeCnt == 1,
             baseBranch);
 
         Optional<FullChainRunCtx> pubCtx = Optional.of(val);
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/TrackedBranchChainsProcessor.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/TrackedBranchChainsProcessor.java
index 60004eb..3e4dbff 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/TrackedBranchChainsProcessor.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/chain/TrackedBranchChainsProcessor.java
@@ -89,7 +89,7 @@ public class TrackedBranchChainsProcessor {
 
                 ProcessLogsMode logs;
                 if (buildResMergeCnt > 1)
-                    logs = checkAllLogs != null && checkAllLogs ? 
ProcessLogsMode.ALL : ProcessLogsMode.DISABLED;
+                    logs = (checkAllLogs != null && checkAllLogs) ? 
ProcessLogsMode.ALL : ProcessLogsMode.DISABLED;
                 else
                     logs = (checkAllLogs != null && checkAllLogs) ? 
ProcessLogsMode.ALL : ProcessLogsMode.SUITE_NOT_COMPLETE;
 
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/logs/LogMsgToWarn.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/logs/LogMsgToWarn.java
index f9410d7..ae4c600 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/logs/LogMsgToWarn.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/logs/LogMsgToWarn.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.ci.logs;
 
 import javax.annotation.Nullable;
+import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence;
 
 /**
  *
@@ -28,7 +29,6 @@ import javax.annotation.Nullable;
 public class LogMsgToWarn {
 
     private static final String JAVA_LEVEL_DEADLOCK_TXT = " Java-level 
deadlock:";
-    public static final String JAVA_LEVEL_DEADLOCK = "JAVA_LEVEL_DEADLOCK";
 
     public static boolean needWarn(String line) {
         return line.contains("java.lang.AssertionError:")
@@ -39,7 +39,7 @@ public class LogMsgToWarn {
     @Nullable
     public static String getProblemCode(String line) {
         if(line.contains(JAVA_LEVEL_DEADLOCK_TXT))
-            return JAVA_LEVEL_DEADLOCK;
+            return ProblemOccurrence.JAVA_LEVEL_DEADLOCK;
 
         return null;
     }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/problems/ProblemOccurrence.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/problems/ProblemOccurrence.java
index 3748556..72433f4 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/problems/ProblemOccurrence.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/problems/ProblemOccurrence.java
@@ -23,6 +23,8 @@ import org.jetbrains.annotations.Nullable;
 
 /**
  * One build problem. Contains its type.
+ *
+ * http://javadoc.jetbrains.net/teamcity/openapi/8.0/constant-values.html
  */
 public class ProblemOccurrence {
     public static final String BUILD_FAILURE_ON_MESSAGE = 
"BuildFailureOnMessage";
@@ -32,7 +34,11 @@ public class ProblemOccurrence {
     public static final String TC_FAILED_TESTS = "TC_FAILED_TESTS";
     public static final String TC_JVM_CRASH = "TC_JVM_CRASH";
     public static final String OTHER = "OTHER";
-    public static final String SNAPSHOT_DEPENDENCY_ERROR = 
"SNAPSHOT_DEPENDENCY_ERROR_BUILD_PROCEEDS_TYPE";
+    public static final String SNAPSHOT_DEPENDENCY_ERROR_BUILD_PROCEEDS_TYPE = 
"SNAPSHOT_DEPENDENCY_ERROR_BUILD_PROCEEDS_TYPE";
+    public static final String SNAPSHOT_DEPENDENCY_ERROR = 
"SNAPSHOT_DEPENDENCY_ERROR";
+
+    /** Java level deadlock: Detected by log processing, not by teamcity */
+    public static final String JAVA_LEVEL_DEADLOCK = "JAVA_LEVEL_DEADLOCK";
 
     @XmlAttribute public String id;
     @XmlAttribute public String identity;
@@ -53,7 +59,7 @@ public class ProblemOccurrence {
     }
 
     public boolean isSnapshotDepProblem() {
-        return SNAPSHOT_DEPENDENCY_ERROR.equals(type);
+        return SNAPSHOT_DEPENDENCY_ERROR.equals(type) || 
SNAPSHOT_DEPENDENCY_ERROR_BUILD_PROCEEDS_TYPE.equals(type);
     }
 
     public boolean isJvmCrash() {
@@ -68,12 +74,7 @@ public class ProblemOccurrence {
         return TC_EXIT_CODE.equals(type);
     }
 
-    public boolean isOther(){
-        return !isFailedTests()
-            && !isSnapshotDepProblem()
-            && !isExecutionTimeout()
-            && !isJvmCrash()
-            && !isExitCode()
-            && !isOome();
+    public boolean isJavaLevelDeadlock() {
+        return JAVA_LEVEL_DEADLOCK.equals(type);
     }
 }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/SuiteCurrentStatus.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/SuiteCurrentStatus.java
index 040cad1..73f46aa 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/SuiteCurrentStatus.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/SuiteCurrentStatus.java
@@ -32,6 +32,7 @@ import javax.annotation.Nullable;
 import org.apache.ignite.ci.ITcAnalytics;
 import org.apache.ignite.ci.ITeamcity;
 import org.apache.ignite.ci.analysis.ITestFailureOccurrences;
+import org.apache.ignite.ci.analysis.LogCheckResult;
 import org.apache.ignite.ci.analysis.MultBuildRunCtx;
 import org.apache.ignite.ci.analysis.RunStat;
 import org.apache.ignite.ci.analysis.SuiteInBranch;
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/pr/GetPrTestFailures.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/pr/GetPrTestFailures.java
index 902e86a..6151af6 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/pr/GetPrTestFailures.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/pr/GetPrTestFailures.java
@@ -63,9 +63,10 @@ public class GetPrTestFailures {
         @Nonnull @QueryParam("branchForTc") String branchForTc,
         @Nonnull @QueryParam("action") String act,
         @Nullable @QueryParam("count") Integer cnt,
-        @Nullable @QueryParam("baseBranchForTc") String baseBranchForTc) {
+        @Nullable @QueryParam("baseBranchForTc") String baseBranchForTc,
+        @Nullable @QueryParam("checkAllLogs") Boolean checkAllLogs) {
 
-        return new UpdateInfo().copyFrom(getPrFailures(srvId, suiteId, 
branchForTc, act, cnt, baseBranchForTc));
+        return new UpdateInfo().copyFrom(getPrFailures(srvId, suiteId, 
branchForTc, act, cnt, baseBranchForTc, checkAllLogs));
     }
 
     @GET
@@ -76,16 +77,17 @@ public class GetPrTestFailures {
         @Nonnull @QueryParam("branchForTc") String branchForTc,
         @Nonnull @QueryParam("action") String act,
         @Nullable @QueryParam("count") Integer cnt,
-        @Nullable @QueryParam("baseBranchForTc") String baseBranchForTc) {
+        @Nullable @QueryParam("baseBranchForTc") String baseBranchForTc,
+        @Nullable @QueryParam("checkAllLogs") Boolean checkAllLogs) {
 
         final BackgroundUpdater updater = 
CtxListener.getBackgroundUpdater(ctx);
 
         final FullQueryParams key = new FullQueryParams(srvId, suiteId, 
branchForTc, act, cnt, baseBranchForTc);
-
+        key.setCheckAllLogs(checkAllLogs);
         final ICredentialsProv prov = ICredentialsProv.get(req);
 
         return updater.get(CURRENT_PR_FAILURES, prov, key,
-                (k) -> getPrFailuresNoCache(k.getServerId(), k.getSuiteId(), 
k.getBranchForTc(), k.getAction(), k.getCount(), baseBranchForTc),
+                (k) -> getPrFailuresNoCache(k.getServerId(), k.getSuiteId(), 
k.getBranchForTc(), k.getAction(), k.getCount(), baseBranchForTc, 
k.getCheckAllLogs()),
                 true);
     }
 
@@ -105,14 +107,15 @@ public class GetPrTestFailures {
         @Nonnull @QueryParam("branchForTc") String branchForTc,
         @Nonnull @QueryParam("action") String act,
         @Nullable @QueryParam("count") Integer cnt,
-        @Nullable @QueryParam("baseBranchForTc") String baseBranchForTc) {
+        @Nullable @QueryParam("baseBranchForTc") String baseBranchForTc,
+        @Nullable @QueryParam("checkAllLogs") Boolean checkAllLogs) {
 
         final ICredentialsProv creds = ICredentialsProv.get(req);
         final Injector injector = CtxListener.getInjector(ctx);
         final PrChainsProcessor prChainsProcessor = 
injector.getInstance(PrChainsProcessor.class);
 
-        return prChainsProcessor.getTestFailuresSummary(creds, srvId, suiteId, 
branchForTc, act, cnt, baseBranchForTc
-        );
+        return prChainsProcessor.getTestFailuresSummary(creds, srvId, suiteId, 
branchForTc, act, cnt, baseBranchForTc,
+            checkAllLogs);
     }
 
     @POST

Reply via email to