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 12:22:43 UTC
[ignite-teamcity-bot] 01/01: IGNITE-11853: Links fixed for tests
failures, trusted suites development.
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
commit 4c2977e31b5e712520b664225ae91e846512932f
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Thu May 16 15:22:39 2019 +0300
IGNITE-11853: Links fixed for tests failures, trusted suites development.
---
.../java/org/apache/ignite/ci/issue/Issue.java | 3 +
.../java/org/apache/ignite/ci/issue/IssueType.java | 31 ++++++++--
.../tcbot/chain/TrackedBranchChainsProcessor.java | 6 +-
.../ignite/ci/tcbot/conf/ITcServerConfig.java | 13 ++++-
.../ignite/ci/tcbot/conf/TcServerConfig.java | 11 ++++
.../ignite/ci/tcbot/issue/IssueDetector.java | 66 ++++++++++++++++------
.../teamcity/ignited/ITeamcityIgnitedProvider.java | 2 +-
.../ci/teamcity/ignited/runhist/RunHistSync.java | 2 +-
.../ci/web/model/current/SuiteCurrentStatus.java | 2 +-
9 files changed, 107 insertions(+), 29 deletions(-)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/issue/Issue.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/issue/Issue.java
index 2c492d2..dfed18d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/issue/Issue.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/issue/Issue.java
@@ -55,7 +55,10 @@ public class Issue {
@Nullable
public String displayName;
+ /** Build start timestamp. */
@Nullable public Long buildStartTs;
+
+ /** Detected timestamp. */
@Nullable public Long detectedTs;
public Issue(IssueKey issueKey, IssueType type) {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/issue/IssueType.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/issue/IssueType.java
index 59fcb75..a690614 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/issue/IssueType.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/issue/IssueType.java
@@ -17,28 +17,49 @@
package org.apache.ignite.ci.issue;
+/**
+ * Type of Issue detectable by the Bot.
+ */
public enum IssueType {
+ /** New failure. */
newFailure("newFailure", "New test failure"),
- newContributedTestFailure("newContributedTestFailure",
- "Recently contributed test failed"),
- newFailureForFlakyTest("newFailureForFlakyTest",
- "New stable failure of a flaky test"),
+ /** New contributed test failure. */
+ newContributedTestFailure("newContributedTestFailure", "Recently contributed test failed"),
+
+ /** New failure for flaky test. */
+ newFailureForFlakyTest("newFailureForFlakyTest", "New stable failure of a flaky test"),
+
+ /** New critical failure. */
+ newCriticalFailure("newCriticalFailure", "New Critical Failure"),
- newCriticalFailure("newCriticalFailure", "New Critical Failure");
+ /** New trusted suite failure. */
+ newTrustedSuiteFailure("newTrustedSuiteFailure", "New Trusted Suite failure");
+ /** Code. */
private final String code;
+ /** Display name. */
private final String displayName;
+ /**
+ * @param code Code.
+ * @param displayName Display name.
+ */
private IssueType(String code, String displayName) {
this.code = code;
this.displayName = displayName;
}
+ /**
+ *
+ */
public String code() {
return code;
}
+ /**
+ *
+ */
public String displayName() {
return displayName;
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
index c118411..4ce6e65 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/TrackedBranchChainsProcessor.java
@@ -52,7 +52,7 @@ public class TrackedBranchChainsProcessor {
@Inject private ITeamcityIgnitedProvider tcIgnitedProv;
/** Tc Bot config. */
- @Inject private ITcBotConfig tcBotConfig;
+ @Inject private ITcBotConfig tcBotCfg;
/** Chains processor. */
@Inject private BuildChainProcessor chainProc;
@@ -71,7 +71,7 @@ public class TrackedBranchChainsProcessor {
final String branchNn = isNullOrEmpty(branch) ? TcServerConfig.DEFAULT_TRACKED_BRANCH_NAME : branch;
res.setTrackedBranch(branchNn);
- final BranchTracked tracked = tcBotConfig.getTrackedBranches().getBranchMandatory(branchNn);
+ final BranchTracked tracked = tcBotCfg.getTrackedBranches().getBranchMandatory(branchNn);
tracked.chains.stream()
.filter(chainTracked -> tcIgnitedProv.hasAccess(chainTracked.serverId, creds))
@@ -144,7 +144,7 @@ public class TrackedBranchChainsProcessor {
FullLRTestsSummary summary = new FullLRTestsSummary();
final String branchNn = isNullOrEmpty(branch) ? TcServerConfig.DEFAULT_TRACKED_BRANCH_NAME : branch;
- final BranchTracked tracked = tcBotConfig.getTrackedBranches().getBranchMandatory(branchNn);
+ final BranchTracked tracked = tcBotCfg.getTrackedBranches().getBranchMandatory(branchNn);
tracked.chains.stream()
.filter(chainTracked -> tcIgnitedProv.hasAccess(chainTracked.serverId, creds))
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcServerConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcServerConfig.java
index a03b66e..e370501 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcServerConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcServerConfig.java
@@ -40,11 +40,22 @@ public interface ITcServerConfig {
@NotNull public String logsDirectory();
/**
- * @return
+ * @return internal naming of default tracked branch for this server.
*/
@NotNull public String defaultTrackedBranch();
+ /**
+ * @return set of build parameters codes, which could be used for filtering builds in RunHist/Invocations.
+ */
@NotNull public Collection<String> filteringParametersKeys();
+ /**
+ * @return set of build parameters, which could be used for filtering builds in RunHist/Invocations.
+ */
@NotNull public Collection<BuildParameterSpec> filteringParameters();
+
+ /**
+ * @return set of suite codes (build type IDs), failures in which should be threated as critical and notified.
+ */
+ @NotNull public Collection<String> trustedSuites();
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcServerConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcServerConfig.java
index a6660ac..0b2b8d8 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcServerConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/TcServerConfig.java
@@ -56,6 +56,9 @@ public class TcServerConfig implements ITcServerConfig {
/** Build parameters which may be used for filtering. */
@Nullable private List<BuildParameterSpec> filteringParameters = new ArrayList<>();
+ /** Trused suites. */
+ @Nullable private List<String> trusedSuites = new ArrayList<>();
+
public TcServerConfig() {
}
@@ -127,6 +130,14 @@ public class TcServerConfig implements ITcServerConfig {
return Collections.unmodifiableList(filteringParameters);
}
+ /** {@inheritDoc} */
+ @NotNull @Override public Collection<String> trustedSuites() {
+ if (trusedSuites == null || trusedSuites.isEmpty())
+ return Collections.emptySet();
+
+ return Collections.unmodifiableList(trusedSuites);
+ }
+
/**
* @param props Properties.
*/
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
index ed830fc..f74f43c 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/issue/IssueDetector.java
@@ -47,6 +47,7 @@ import org.apache.ignite.ci.mail.SlackSender;
import org.apache.ignite.ci.tcbot.chain.TrackedBranchChainsProcessor;
import org.apache.ignite.ci.tcbot.conf.INotificationChannel;
import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
+import org.apache.ignite.ci.tcbot.conf.ITcServerConfig;
import org.apache.ignite.ci.tcbot.conf.NotificationsConfig;
import org.apache.ignite.ci.tcbot.user.IUserStorage;
import org.apache.ignite.ci.teamcity.ignited.IRunHistory;
@@ -62,6 +63,7 @@ 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.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -242,7 +244,6 @@ public class IssueDetector {
ITeamcityIgnited tcIgnited = tcProv.server(srvId, creds);
for (SuiteCurrentStatus suiteCurrentStatus : next.suites) {
-
String normalizeBranch = normalizeBranch(suiteCurrentStatus.branchName());
final String trackedBranch = res.getTrackedBranch();
@@ -260,8 +261,17 @@ public class IssueDetector {
return "New issues found " + newIssues;
}
+ /**
+ * Checks and persists suites failure.
+ *
+ * @param tcIgnited Tc ignited.
+ * @param srvCode Server code.
+ * @param normalizeBranch Normalize branch.
+ * @param suiteFailure Suite failure.
+ * @param trackedBranch Tracked branch.
+ */
private boolean registerSuiteFailIssues(ITeamcityIgnited tcIgnited,
- String srvId,
+ String srvCode,
String normalizeBranch,
SuiteCurrentStatus suiteFailure,
String trackedBranch) {
@@ -279,30 +289,52 @@ public class IssueDetector {
Integer firstFailedBuildId = runStat.detectTemplate(EventTemplates.newCriticalFailure);
- if (firstFailedBuildId != null && suiteFailure.hasCriticalProblem != null && suiteFailure.hasCriticalProblem) {
- IssueKey issueKey = new IssueKey(srvId, firstFailedBuildId, suiteId);
+ if (firstFailedBuildId != null && Boolean.TRUE.equals(suiteFailure.hasCriticalProblem)) {
+ IssueKey issueKey = new IssueKey(srvCode, firstFailedBuildId, suiteId);
+
+ if (!issuesStorage.containsIssueKey(issueKey)) {
+ issuesStorage.saveIssue(createIssueForSuite(tcIgnited, suiteFailure, trackedBranch,
+ issueKey, IssueType.newCriticalFailure));
- if (issuesStorage.containsIssueKey(issueKey))
- return false; //duplicate
+ issueFound = true;
+ }
+ }
- Issue issue = new Issue(issueKey, IssueType.newCriticalFailure);
- issue.trackedBranchName = trackedBranch;
- issue.displayName = suiteFailure.name;
- issue.webUrl = suiteFailure.webToHist;
- issue.buildStartTs = tcIgnited.getBuildStartTs(issueKey.buildId);
+ ITcServerConfig tcCfg = cfg.getTeamcityConfig(srvCode);
- locateChanges(tcIgnited, firstFailedBuildId, issue);
+ if (tcCfg.trustedSuites().contains(suiteId)) {
+ Integer firstTrustedSuiteFailue = runStat.detectTemplate(EventTemplates.newFailure);
- logger.info("Register new issue for suite fail: " + issue);
+ if (firstTrustedSuiteFailue != null) {
+ IssueKey issueKey = new IssueKey(srvCode, firstTrustedSuiteFailue, suiteId);
- issuesStorage.saveIssue(issue);
+ if (!issuesStorage.containsIssueKey(issueKey)) {
+ issuesStorage.saveIssue(createIssueForSuite(tcIgnited, suiteFailure, trackedBranch,
+ issueKey, IssueType.newTrustedSuiteFailure));
- issueFound = true;
+ issueFound = true;
+ }
+ }
}
return issueFound;
}
+ @NotNull
+ private Issue createIssueForSuite(ITeamcityIgnited tcIgnited, SuiteCurrentStatus suiteFailure, String trackedBranch,
+ IssueKey issueKey, IssueType issType) {
+ Issue issue = new Issue(issueKey, issType);
+ issue.trackedBranchName = trackedBranch;
+ issue.displayName = suiteFailure.name;
+ issue.webUrl = suiteFailure.webToHist;
+ issue.buildStartTs = tcIgnited.getBuildStartTs(issueKey.buildId);
+
+ locateChanges(tcIgnited, issueKey.buildId, issue);
+
+ logger.info("Register new issue for suite fail: " + issue);
+ return issue;
+ }
+
private void locateChanges(ITeamcityIgnited teamcity, int buildId, Issue issue) {
final FatBuildCompacted fatBuild = teamcity.getFatBuild(buildId);
final int[] changes = fatBuild.changes();
@@ -460,9 +492,9 @@ public class IssueDetector {
SyncMode.RELOAD_QUEUED
);
- String issResult = registerIssuesAndNotifyLater(failures, backgroundOpsCreds);
+ String issRes = registerIssuesAndNotifyLater(failures, backgroundOpsCreds);
- return "Tests " + failures.failedTests + " Suites " + failures.failedToFinish + " were checked. " + issResult;
+ return "Tests " + failures.failedTests + " Suites " + failures.failedToFinish + " were checked. " + issRes;
}
public void stop() {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnitedProvider.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnitedProvider.java
index 24e2a19..f4c5920 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnitedProvider.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnitedProvider.java
@@ -32,7 +32,7 @@ public interface ITeamcityIgnitedProvider {
*/
public ITeamcityIgnited server(String srvCode, @Nullable ICredentialsProv prov);
- default void checkAccess(@Nullable String srvCode, ICredentialsProv credsProv) {
+ public default void checkAccess(@Nullable String srvCode, ICredentialsProv credsProv) {
if (!hasAccess(srvCode, credsProv))
throw ServiceUnauthorizedException.noCreds(srvCode);
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
index b0662cd..f733b9a 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
@@ -90,7 +90,7 @@ public class RunHistSync {
if (ITeamcity.REFS_HEADS_MASTER.equals(branch))
return ITeamcity.DEFAULT;
- if ("master".equals(branch))
+ if (ITeamcity.MASTER.equals(branch))
return ITeamcity.DEFAULT;
return branch;
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 454f9dc..d8e0c61 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
@@ -333,7 +333,7 @@ import static org.apache.ignite.ci.util.UrlUtil.escape;
}
public static String branchForLink(@Nullable String branchName) {
- return branchName == null || "refs/heads/master".equals(branchName) ? ITeamcity.DEFAULT : branchName;
+ return normalizeBranch(branchName);
}
/** {@inheritDoc} */