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