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 2018/11/29 15:18:44 UTC
[ignite-teamcity-bot] branch master updated: IGNITE-10203 Support
for alternative configurations for PR testing. - Fixes #78.
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 cd87a55 IGNITE-10203 Support for alternative configurations for PR testing. - Fixes #78.
cd87a55 is described below
commit cd87a558f2f67d5f846c75632e82207486e91c4a
Author: zzzadruga <zz...@gmail.com>
AuthorDate: Thu Nov 29 18:18:25 2018 +0300
IGNITE-10203 Support for alternative configurations for PR testing. - Fixes #78.
Signed-off-by: Dmitriy Pavlov <dp...@apache.org>
---
.../main/java/org/apache/ignite/ci/ITeamcity.java | 11 +
.../apache/ignite/ci/IgnitePersistentTeamcity.java | 6 +
.../apache/ignite/ci/IgniteTeamcityConnection.java | 11 +-
.../main/java/org/apache/ignite/ci/TcHelper.java | 21 +-
.../org/apache/ignite/ci/observer/BuildsInfo.java | 2 +-
.../ci/tcbot/visa/ContributionCheckStatus.java | 23 +-
.../tcbot/visa/TcBotTriggerAndSignOffService.java | 69 +-
.../apache/ignite/ci/tcbot/visa/VisaStatus.java | 6 +
.../apache/ignite/ci/tcmodel/conf/BuildType.java | 78 +-
.../ignite/ci/tcmodel/conf/bt/BuildTypeFull.java | 33 +-
.../ignite/ci/tcmodel/conf/bt/Parameters.java | 43 +-
.../apache/ignite/ci/tcmodel/conf/bt/Property.java | 45 +
.../ci/tcmodel/conf/bt/SnapshotDependencies.java | 39 +
.../ci/tcmodel/conf/bt/SnapshotDependency.java | 60 ++
.../org/apache/ignite/ci/tcmodel/result/Build.java | 2 -
.../ci/teamcity/ignited/ITeamcityIgnited.java | 31 +
.../ci/teamcity/ignited/TeamcityIgnitedImpl.java | 38 +-
.../ci/teamcity/ignited/TeamcityIgnitedModule.java | 7 +-
.../ignited/buildtype/BuildTypeCompacted.java | 197 ++++
.../teamcity/ignited/buildtype/BuildTypeDao.java | 226 +++++
.../ignited/buildtype/BuildTypeRefCompacted.java | 189 ++++
.../ignited/buildtype/BuildTypeRefDao.java | 251 +++++
.../teamcity/ignited/buildtype/BuildTypeSync.java | 249 +++++
.../ignited/buildtype/ParametersCompacted.java | 132 +++
.../buildtype/SnapshotDependencyCompacted.java | 131 +++
.../ignited/fatbuild/FatBuildCompacted.java | 6 +-
.../ignite/ci/teamcity/pure/ITeamcityConn.java | 16 +
.../conf/bt/Property.java => util/NumberUtil.java} | 38 +-
.../model/current/ChainAtServerCurrentStatus.java | 3 +-
.../ignite/ci/web/rest/visa/TcBotVisaService.java | 5 +-
ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js | 68 +-
.../src/main/webapp/js/testfails-2.1.js | 23 +-
ignite-tc-helper-web/src/main/webapp/prs.html | 2 +
ignite-tc-helper-web/src/main/webapp/visas.html | 11 +
.../ci/tcbot/chain/PrChainsProcessorTest.java | 4 +-
.../ignited/IgnitedTcInMemoryIntegrationTest.java | 106 ++
.../src/test/resources/IgniteTests24Java8.xml | 27 +
...gniteTests24Java8_ActivateDeactivateCluster.xml | 156 +++
.../test/resources/IgniteTests24Java8_RunAll.xml | 1035 ++++++++++++++++++++
.../src/test/resources/IgniteTests24Java8_v2.xml | 26 +
40 files changed, 3313 insertions(+), 113 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 75868d1..bab8d36 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
@@ -26,6 +26,7 @@ import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.tcmodel.user.User;
import org.apache.ignite.ci.teamcity.pure.ITeamcityConn;
import org.apache.ignite.ci.util.Base64Util;
+import org.apache.ignite.ci.util.FutureUtil;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;
@@ -47,6 +48,16 @@ public interface ITeamcity extends ITeamcityConn {
@Deprecated
long DEFAULT_BUILDS_COUNT = 1000;
+ /** {@inheritDoc} */
+ @Override default List<BuildType> getBuildTypes(String projectId) {
+ return FutureUtil.getResult(getProjectSuites(projectId));
+ }
+
+ /**
+ * List of project suites.
+ *
+ * @param projectId Project id.
+ */
CompletableFuture<List<BuildType>> getProjectSuites(String projectId);
/** */
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 6a85ddf..b8dc136 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
@@ -30,6 +30,7 @@ import org.apache.ignite.ci.tcmodel.agent.Agent;
import org.apache.ignite.ci.tcmodel.changes.Change;
import org.apache.ignite.ci.tcmodel.changes.ChangesList;
import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.tcmodel.conf.bt.BuildTypeFull;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrences;
@@ -595,6 +596,11 @@ public class IgnitePersistentTeamcity implements IAnalyticsEnabledTeamcity, ITea
}
/** {@inheritDoc} */
+ @Override public BuildTypeFull getBuildType(String buildTypeId) {
+ return teamcity.getBuildType(buildTypeId);
+ }
+
+ /** {@inheritDoc} */
@Override public void setAuthToken(String tok) {
teamcity.setAuthToken(tok);
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
index e6fade7..ce5a319 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/IgniteTeamcityConnection.java
@@ -43,7 +43,11 @@ import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrencesFull;
import org.apache.ignite.ci.tcmodel.user.User;
import org.apache.ignite.ci.tcmodel.user.Users;
import org.apache.ignite.ci.teamcity.pure.ITeamcityHttpConnection;
-import org.apache.ignite.ci.util.*;
+import org.apache.ignite.ci.util.ExceptionUtil;
+import org.apache.ignite.ci.util.HttpUtil;
+import org.apache.ignite.ci.util.UrlUtil;
+import org.apache.ignite.ci.util.XmlUtil;
+import org.apache.ignite.ci.util.ZipUtil;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -380,8 +384,6 @@ public class IgniteTeamcityConnection implements ITeamcity {
}
}
-
-
@SuppressWarnings("WeakerAccess")
@AutoProfiling
protected <T> T loadXml(Class<T> rootElem, InputStreamReader reader) throws JAXBException {
@@ -431,8 +433,9 @@ public class IgniteTeamcityConnection implements ITeamcity {
.replace("+", "%2B");
}
+ /** {@inheritDoc} */
@AutoProfiling
- public BuildTypeFull getBuildType(String buildTypeId) {
+ @Override public BuildTypeFull getBuildType(String buildTypeId) {
return sendGetXmlParseJaxb(host + "app/rest/latest/buildTypes/id:" +
buildTypeId, BuildTypeFull.class);
}
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 ae718cc..63cf693 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
@@ -32,6 +32,7 @@ import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefCompacted;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
import org.apache.ignite.ci.teamcity.restcached.ITcServerProvider;
import org.apache.ignite.ci.user.ICredentialsProv;
@@ -176,7 +177,7 @@ public class TcHelper implements ITcHelper, IJiraIntegration {
if (suitesStatuses == null)
return new Visa("JIRA wasn't commented - no finished builds to analyze.");
- String comment = generateJiraComment(suitesStatuses, build.webUrl);
+ String comment = generateJiraComment(suitesStatuses, build.webUrl, buildTypeId, tcIgnited);
blockers = suitesStatuses.stream()
.mapToInt(suite -> {
@@ -207,7 +208,11 @@ public class TcHelper implements ITcHelper, IJiraIntegration {
* @param webUrl Build URL.
* @return Comment, which should be sent to the JIRA ticket.
*/
- private String generateJiraComment(List<SuiteCurrentStatus> suites, String webUrl) {
+ private String generateJiraComment(List<SuiteCurrentStatus> suites, String webUrl, String buildTypeId, ITeamcityIgnited tcIgnited) {
+ BuildTypeRefCompacted bt = tcIgnited.getBuildTypeRef(buildTypeId);
+
+ String suiteName = (bt != null ? bt.name(compactor) : buildTypeId);
+
StringBuilder res = new StringBuilder();
for (SuiteCurrentStatus suite : suites) {
@@ -232,11 +237,11 @@ public class TcHelper implements ITcHelper, IJiraIntegration {
if (recent != null) {
if (recent.failureRate != null) {
res.append(" - ").append(recent.failureRate).append("% fails in last ")
- .append(MAX_LATEST_RUNS).append(" master runs.");
+ .append(recent.runs).append(" master runs.");
}
else if (recent.failures != null && recent.runs != null) {
res.append(" - ").append(recent.failures).append(" fails / ")
- .append(recent.runs).append(" runs.");
+ .append(recent.runs).append(" master runs.");
}
}
@@ -247,16 +252,16 @@ public class TcHelper implements ITcHelper, IJiraIntegration {
}
if (res.length() > 0) {
- res.insert(0, "{panel:title=Possible Blockers|" +
+ res.insert(0, "{panel:title=" + suiteName + ": Possible Blockers|" +
"borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1}\\n")
.append("{panel}");
}
else {
- res.append("{panel:title=No blockers found!|" +
- "borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}");
+ res.append("{panel:title=").append(suiteName).append(": No blockers found!|")
+ .append("borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}");
}
- res.append("\\n").append("[TeamCity Run All Results|").append(webUrl).append(']');
+ res.append("\\n").append("[TeamCity *").append(suiteName).append("* Results|").append(webUrl).append(']');
return xmlEscapeText(res.toString());
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
index 976cf3c..40e3301 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
@@ -49,7 +49,7 @@ public class BuildsInfo {
public final String srvId;
/** Build type id. */
- public final String buildTypeId;
+ public String buildTypeId;
/** Branch name. */
public final String branchForTc;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
index 62dfc3f..a710870 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
@@ -26,17 +26,28 @@ import java.util.List;
public int queuedBuilds;
public int runningBuilds;
- /** Branch with finished/cancelled run all results, null if run all is running or in case there was no run alls at all. */
- public String branchWithFinishedRunAll;
+ /** Suite id. */
+ public String suiteId;
- /** Run all finished for brach {@link #branchWithFinishedRunAll}. Determines trigger button color. */
- public Boolean runAllFinished;
+ /** Branch with finished/cancelled suite results, null if suite is running or in case there was no run suite at all. */
+ public String branchWithFinishedSuite;
- /** Resolved run all branch: Some branch probably with finished or queued builds in in, or default pull/nnnn/head. */
+ /** Suite finished for brach {@link #branchWithFinishedSuite}. Determines trigger button color. */
+ public Boolean suiteIsFinished;
+
+ /** Resolved suite branch: Some branch probably with finished or queued builds in in, or default pull/nnnn/head. */
public String resolvedBranch;
/** Observations status: Filled if build observer has something sheduled related to {@link #resolvedBranch} */
public String observationsStatus;
- public List<String> webLinksQueuedRunAlls = new LinkedList<>();
+ public List<String> webLinksQueuedSuites = new LinkedList<>();
+
+ public ContributionCheckStatus() {
+ }
+
+ public ContributionCheckStatus(String suiteId, String resolvedBranch) {
+ this.suiteId = suiteId;
+ this.resolvedBranch = resolvedBranch;
+ }
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
index 8edf836..7a18342 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
@@ -23,8 +23,10 @@ import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nonnull;
@@ -47,6 +49,7 @@ import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider;
import org.apache.ignite.ci.teamcity.ignited.SyncMode;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefCompacted;
import org.apache.ignite.ci.web.model.ContributionKey;
import org.apache.ignite.ci.web.model.VisaRequest;
import org.apache.ignite.ci.web.model.Visa;
@@ -61,6 +64,7 @@ import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.ci.observer.BuildsInfo.CANCELLED_STATUS;
import static org.apache.ignite.ci.observer.BuildsInfo.FINISHED_STATUS;
import static org.apache.ignite.ci.observer.BuildsInfo.RUNNING_STATUS;
+import static org.apache.ignite.ci.teamcity.ignited.TeamcityIgnitedImpl.DEFAULT_PROJECT_ID;
/**
* Provides method for TC Bot Visa obtaining
@@ -111,6 +115,7 @@ public class TcBotTriggerAndSignOffService {
List<VisaStatus> visaStatuses = new ArrayList<>();
IAnalyticsEnabledTeamcity teamcity = tcHelper.server(srvId, prov);
+ ITeamcityIgnited ignited = tcIgnitedProv.server(srvId, prov);
for (VisaRequest visaRequest : visasHistoryStorage.getVisas()) {
VisaStatus visaStatus = new VisaStatus();
@@ -125,6 +130,10 @@ public class TcBotTriggerAndSignOffService {
visaStatus.branchName = info.branchForTc;
visaStatus.userName = info.userName;
visaStatus.ticket = info.ticket;
+ visaStatus.buildTypeId = info.buildTypeId;
+
+ BuildTypeRefCompacted bt = ignited.getBuildTypeRef(info.buildTypeId);
+ visaStatus.buildTypeName = (bt != null ? bt.name(compactor) : visaStatus.buildTypeId);
String buildsStatus = visaStatus.status = info.getStatus(teamcity);
@@ -294,6 +303,8 @@ public class TcBotTriggerAndSignOffService {
if (!Strings.isNullOrEmpty(ticketFullName)) {
BuildsInfo buildsInfo = new BuildsInfo(srvId, prov, ticketFullName, branchForTc);
+ buildsInfo.buildTypeId = suiteId;
+
VisaRequest lastVisaReq = visasHistoryStorage.getLastVisaRequest(buildsInfo.getContributionKey());
if (Objects.nonNull(lastVisaReq) && lastVisaReq.isObserving())
@@ -339,7 +350,7 @@ public class TcBotTriggerAndSignOffService {
}).collect(Collectors.toList());
}
- @Nonnull private List<BuildRefCompacted> findRunAllsForPr(String suiteId, String prId, ITeamcityIgnited srv) {
+ @Nonnull private List<BuildRefCompacted> findBuildsForPr(String suiteId, String prId, ITeamcityIgnited srv) {
String branchName = branchForTcA(prId);
List<BuildRefCompacted> buildHist = srv.getAllBuildsCompacted(suiteId, branchName);
@@ -347,7 +358,6 @@ public class TcBotTriggerAndSignOffService {
if (!buildHist.isEmpty())
return buildHist;
- //todo multibranch requestst
buildHist = srv.getAllBuildsCompacted(suiteId, branchForTcB(prId));
if (!buildHist.isEmpty())
@@ -367,55 +377,76 @@ public class TcBotTriggerAndSignOffService {
/**
* @param srvId Server id.
* @param prov Prov.
- * @param suiteId Suite id.
* @param prId Pr id.
*/
- public ContributionCheckStatus contributionStatus(String srvId, ICredentialsProv prov, String suiteId,
+ public Set<ContributionCheckStatus> contributionStatuses(String srvId, ICredentialsProv prov,
String prId) {
- ContributionCheckStatus status = new ContributionCheckStatus();
+ Set<ContributionCheckStatus> statuses = new LinkedHashSet<>();
ITeamcityIgnited teamcity = teamcityIgnitedProvider.server(srvId, prov);
- List<BuildRefCompacted> allRunAlls = findRunAllsForPr(suiteId, prId, teamcity);
+ List<String> compositeBuildTypes = teamcity
+ .getCompositeBuildTypesIdsSortedByBuildNumberCounter(DEFAULT_PROJECT_ID);
+
+ for (String buildType : compositeBuildTypes) {
+ List<BuildRefCompacted> forTests = findBuildsForPr(buildType, prId, teamcity);
+
+ statuses.add(forTests.isEmpty() ? new ContributionCheckStatus(buildType, branchForTcA(prId)) :
+ contributionStatus(srvId, buildType, forTests, teamcity, prId));
+ }
+
+ return statuses;
+ }
+
+ /**
+ * @param srvId Server id.
+ * @param suiteId Suite id.
+ * @param builds Build references.
+ */
+ public ContributionCheckStatus contributionStatus(String srvId, String suiteId, List<BuildRefCompacted> builds,
+ ITeamcityIgnited teamcity, String prId) {
+ ContributionCheckStatus status = new ContributionCheckStatus();
+
+ status.suiteId = suiteId;
- List<BuildRefCompacted> finishedOrCancelled = allRunAlls.stream()
+ List<BuildRefCompacted> finishedOrCancelled = builds.stream()
.filter(t -> t.isFinished(compactor)).collect(Collectors.toList());
if (!finishedOrCancelled.isEmpty()) {
BuildRefCompacted buildRefCompacted = finishedOrCancelled.get(0);
- status.runAllFinished = !buildRefCompacted.isCancelled(compactor);
- status.branchWithFinishedRunAll = buildRefCompacted.branchName(compactor);
+ status.suiteIsFinished = !buildRefCompacted.isCancelled(compactor);
+ status.branchWithFinishedSuite = buildRefCompacted.branchName(compactor);
}
else {
- status.branchWithFinishedRunAll = null;
- status.runAllFinished = false;
+ status.branchWithFinishedSuite = null;
+ status.suiteIsFinished = false;
}
- if (status.branchWithFinishedRunAll != null)
- status.resolvedBranch = status.branchWithFinishedRunAll;
+ if (status.branchWithFinishedSuite != null)
+ status.resolvedBranch = status.branchWithFinishedSuite;
//todo take into account running/queued
else
- status.resolvedBranch = !allRunAlls.isEmpty() ? allRunAlls.get(0).branchName(compactor) : branchForTcA(prId);
+ status.resolvedBranch = !builds.isEmpty() ? builds.get(0).branchName(compactor) : branchForTcA(prId);
String observationsStatus = observer.get().getObservationStatus(new ContributionKey(srvId, status.resolvedBranch));
status.observationsStatus = Strings.emptyToNull(observationsStatus);
- List<BuildRefCompacted> queuedRunAlls = allRunAlls.stream()
+ List<BuildRefCompacted> queuedSuites = builds.stream()
.filter(t -> t.isNotCancelled(compactor))
.filter(t -> t.isQueued(compactor))
.collect(Collectors.toList());
- List<BuildRefCompacted> runninRunAlls = allRunAlls.stream()
+ List<BuildRefCompacted> runningSuites = builds.stream()
.filter(t -> t.isNotCancelled(compactor))
.filter(t -> t.isRunning(compactor))
.collect(Collectors.toList());
- status.queuedBuilds = queuedRunAlls.size(); //todo take into accounts not only run alls:
- status.runningBuilds = runninRunAlls.size();
+ status.queuedBuilds = queuedSuites.size();
+ status.runningBuilds = runningSuites.size();
- status.webLinksQueuedRunAlls = Stream.concat(queuedRunAlls.stream(), runninRunAlls.stream())
+ status.webLinksQueuedSuites = Stream.concat(queuedSuites.stream(), runningSuites.stream())
.map(ref -> getWebLinkToQueued(teamcity, ref)).collect(Collectors.toList());
return status;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/VisaStatus.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/VisaStatus.java
index e20c52b..5a3cb2d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/VisaStatus.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/VisaStatus.java
@@ -45,5 +45,11 @@ public class VisaStatus {
@Nullable public String cancelUrl;
/** */
+ @Nullable public String buildTypeId;
+
+ /** */
+ @Nullable public String buildTypeName;
+
+ /** */
public int blockers;
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/BuildType.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/BuildType.java
index 234b441..3f7a0ef 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/BuildType.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/BuildType.java
@@ -17,15 +17,17 @@
package org.apache.ignite.ci.tcmodel.conf;
+import java.util.Objects;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
+import org.apache.ignite.ci.tcmodel.result.AbstractRef;
/**
* Build type reference
*/
@XmlAccessorType(XmlAccessType.FIELD)
-public class BuildType {
+public class BuildType extends AbstractRef {
@XmlAttribute private String id;
@XmlAttribute private String name;
@@ -34,39 +36,75 @@ public class BuildType {
@XmlAttribute private String projectName;
- @XmlAttribute
- private String href;
+ @XmlAttribute private String webUrl;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
public String getName() {
return name;
}
- public String getId() {
- return id;
+ public void setName(String name) {
+ this.name = name;
}
public String getProjectId() {
return projectId;
}
- /**
- * @param id New id.
- */
- public void id(String id) {
- this.id = id;
+ public void setProjectId(String projectId) {
+ this.projectId = projectId;
}
- /**
- * @param name Name.
- */
- public void name(String name) {
- this.name = name;
+ public String getProjectName() {
+ return projectName;
}
- /**
- * @param projectId Project id.
- */
- public void projectId(String projectId) {
- this.projectId = projectId;
+ public void setProjectName(String projectName) {
+ this.projectName = projectName;
+ }
+
+ public String getWebUrl() {
+ return webUrl;
+ }
+
+ public void setWebUrl(String webUrl) {
+ this.webUrl = webUrl;
+ }
+
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof BuildType))
+ return false;
+
+ BuildType ref = (BuildType)o;
+
+ return Objects.equals(getId(), ref.getId()) &&
+ Objects.equals(getName(), ref.getName()) &&
+ Objects.equals(getProjectId(), ref.getProjectId()) &&
+ Objects.equals(getProjectName(), ref.getProjectName()) &&
+ Objects.equals(getWebUrl(), ref.getWebUrl());
+ }
+
+ @Override public int hashCode() {
+ return Objects.hash(getId(), getName(), getProjectId(), getProjectName(), getWebUrl());
+ }
+
+ @Override public String toString() {
+ return "BuildTypeRef{" +
+ "id='" + id + '\'' +
+ ", name='" + name + '\'' +
+ ", projectId='" + projectId + '\'' +
+ ", projectName='" + projectName + '\'' +
+ ", webUrl='" + webUrl + '\'' +
+ '}';
}
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/BuildTypeFull.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/BuildTypeFull.java
index e9e57f0..73360be 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/BuildTypeFull.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/BuildTypeFull.java
@@ -23,7 +23,6 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.ignite.ci.tcmodel.conf.BuildType;
import org.jetbrains.annotations.Nullable;
/**
@@ -31,7 +30,10 @@ import org.jetbrains.annotations.Nullable;
*/
@XmlRootElement(name = "buildType")
@XmlAccessorType(XmlAccessType.FIELD)
-public class BuildTypeFull extends BuildType {
+public class BuildTypeFull extends org.apache.ignite.ci.tcmodel.conf.BuildType {
+ @XmlElement(name = "settings")
+ Parameters settings;
+
@XmlElement(name = "parameters")
Parameters parameters;
@@ -45,6 +47,13 @@ public class BuildTypeFull extends BuildType {
return parameters.getParameter(key);
}
+ public boolean setSetting(String key, String value) {
+ if (settings == null)
+ return false;
+
+ return settings.setParameter(key, value);
+ }
+
public List<SnapshotDependency> dependencies() {
if (snapshotDependencies == null)
return Collections.emptyList();
@@ -55,4 +64,24 @@ public class BuildTypeFull extends BuildType {
return list;
}
+
+ public Parameters getSettings() {
+ return settings;
+ }
+
+ public Parameters getParameters() {
+ return parameters;
+ }
+
+ public void setSettings(Parameters settings) {
+ this.settings = settings;
+ }
+
+ public void setParameters(Parameters parameters) {
+ this.parameters = parameters;
+ }
+
+ public void setSnapshotDependencies(SnapshotDependencies snapshotDependencies) {
+ this.snapshotDependencies = snapshotDependencies;
+ }
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Parameters.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Parameters.java
index 0d4e513..de93c4b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Parameters.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Parameters.java
@@ -17,6 +17,8 @@
package org.apache.ignite.ci.tcmodel.conf.bt;
+import com.google.common.base.MoreObjects;
+import java.util.ArrayList;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
@@ -35,6 +37,13 @@ public class Parameters {
@XmlElement(name = "property")
List<Property> properties;
+ public Parameters() {
+ }
+
+ public Parameters(List<Property> properties) {
+ this.properties = properties == null ? null : new ArrayList<>(properties);
+ }
+
@Nullable public String getParameter(String key) {
if (properties == null)
return null;
@@ -45,9 +54,41 @@ public class Parameters {
}
public List<Property> properties() {
- if(this.properties==null)
+ if (this.properties==null)
return Collections.emptyList();
return Collections.unmodifiableList(this.properties);
}
+
+ public boolean setParameter(String key, String value) {
+ if (properties == null)
+ return false;
+
+ return properties.stream().filter(property ->
+ Objects.equals(property.name, key)).map(property -> property.value = value).count() != 0;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof Parameters))
+ return false;
+
+ Parameters that = (Parameters)o;
+ return Objects.equals(properties, that.properties);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return Objects.hash(properties);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("properties", properties)
+ .toString();
+ }
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java
index a3ee651..af4b2c7 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java
@@ -17,6 +17,8 @@
package org.apache.ignite.ci.tcmodel.conf.bt;
+import com.google.common.base.MoreObjects;
+import java.util.Objects;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
@@ -31,6 +33,20 @@ public class Property {
@XmlAttribute String value;
@XmlAttribute Boolean inherited;
+ public Property() {
+ }
+
+ public Property(String name, String value) {
+ this.name = name;
+ this.value = value;
+ this.inherited = null;
+ }
+
+ public Property(String name, String value, Boolean inherited) {
+ this.name = name;
+ this.value = value;
+ this.inherited = inherited;
+ }
@Nullable
public String getValue() {
@@ -40,4 +56,33 @@ public class Property {
public String name() {
return name;
}
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof Property))
+ return false;
+
+ Property property = (Property)o;
+
+ return Objects.equals(name, property.name) &&
+ Objects.equals(getValue(), property.getValue()) &&
+ Objects.equals(inherited, property.inherited);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return Objects.hash(name, getValue(), inherited);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("name", name)
+ .add("value", value)
+ .add("inherited", inherited)
+ .toString();
+ }
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/SnapshotDependencies.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/SnapshotDependencies.java
index 666e7bf..f35629c 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/SnapshotDependencies.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/SnapshotDependencies.java
@@ -17,8 +17,10 @@
package org.apache.ignite.ci.tcmodel.conf.bt;
+import com.google.common.base.MoreObjects;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
@@ -33,4 +35,41 @@ public class SnapshotDependencies {
@XmlElement(name="snapshot-dependency")
List<SnapshotDependency> list = new ArrayList<>();
+
+ public SnapshotDependencies() {
+ }
+
+ public SnapshotDependencies(List<SnapshotDependency> list) {
+ if (list != null) {
+ this.list = list;
+ this.count = list.size();
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof SnapshotDependencies))
+ return false;
+
+ SnapshotDependencies that = (SnapshotDependencies)o;
+
+ return Objects.equals(count, that.count) &&
+ Objects.equals(list, that.list);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return Objects.hash(count, list);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("count", count)
+ .add("list", list)
+ .toString();
+ }
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/SnapshotDependency.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/SnapshotDependency.java
index 4be95a7..983a9b4 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/SnapshotDependency.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/SnapshotDependency.java
@@ -17,6 +17,8 @@
package org.apache.ignite.ci.tcmodel.conf.bt;
+import com.google.common.base.MoreObjects;
+import java.util.Objects;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
@@ -47,4 +49,62 @@ public class SnapshotDependency {
public BuildType bt() {
return srcBt;
}
+
+ public String getId() {
+ return id;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public Parameters getProperties() {
+ return properties;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public void setProperties(Parameters properties) {
+ this.properties = properties;
+ }
+
+ public void setSrcBt(BuildType srcBt) {
+ this.srcBt = srcBt;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof SnapshotDependency))
+ return false;
+
+ SnapshotDependency that = (SnapshotDependency)o;
+
+ return Objects.equals(getId(), that.getId()) &&
+ Objects.equals(getType(), that.getType()) &&
+ Objects.equals(getProperties(), that.getProperties()) &&
+ Objects.equals(srcBt, that.srcBt);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return Objects.hash(getId(), getType(), getProperties(), srcBt);
+ }
+
+ @Override public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("id", id)
+ .add("type", type)
+ .add("properties", properties)
+ .add("srcBt", srcBt)
+ .toString();
+ }
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/Build.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/Build.java
index 026b7e6..12a1cae 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/Build.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/result/Build.java
@@ -35,8 +35,6 @@ import org.apache.ignite.ci.tcmodel.changes.ChangesListRef;
import org.apache.ignite.ci.tcmodel.conf.BuildType;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
-
-import org.apache.ignite.ci.util.ExceptionUtil;
import org.jetbrains.annotations.NotNull;
import static org.apache.ignite.ci.util.ExceptionUtil.propagateException;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
index 5bf5b66..97414a3 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
@@ -22,6 +22,8 @@ import java.util.List;
import javax.annotation.Nullable;
import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefCompacted;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeCompacted;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeCompacted;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
import org.jetbrains.annotations.NotNull;
@@ -123,4 +125,33 @@ public interface ITeamcityIgnited {
* @param cnt Count.
*/
@NotNull public List<Integer> getLastNBuildsFromHistory(String btId, String branchForTc, int cnt);
+
+ /**
+ * Return list of composite suite ids sorted by number of snapshot dependency.
+ *
+ * @param projectId Project id.
+ * @return List of composite buildType ids.
+ */
+ public List<String> getCompositeBuildTypesIdsSortedByBuildNumberCounter(String projectId);
+
+ /**
+ * Return list of compacted references to project suites.
+ *
+ * @param projectId Project id.
+ * @return List of compacted references to buildTypes.
+ */
+ public List<BuildTypeRefCompacted> getAllBuildTypesCompacted(String projectId);
+
+
+ /**
+ * @param buildTypeId BuildType id.
+ * @return Compacted reference to BuildType.
+ */
+ public BuildTypeRefCompacted getBuildTypeRef(String buildTypeId);
+
+ /**
+ * @param buildTypeId BuildType id.
+ * @return BuildType compacted.
+ */
+ public BuildTypeCompacted getBuildType(String buildTypeId);
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
index 215802f..01702cf 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
@@ -30,6 +30,11 @@ import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildConditionDao;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
import org.apache.ignite.ci.tcmodel.result.Build;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefCompacted;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefDao;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeSync;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeCompacted;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeDao;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeCompacted;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeDao;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeSync;
@@ -51,6 +56,9 @@ import java.util.stream.Collectors;
import static org.apache.ignite.ci.tcmodel.hist.BuildRef.STATUS_UNKNOWN;
public class TeamcityIgnitedImpl implements ITeamcityIgnited {
+ /** Default project id. */
+ public static final String DEFAULT_PROJECT_ID = "IgniteTests24Java8";
+
/** Logger. */
private static final Logger logger = LoggerFactory.getLogger(TeamcityIgnitedImpl.class);
@@ -89,6 +97,15 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
/** Changes DAO. */
@Inject private ChangeSync changeSync;
+ /** BuildType reference DAO. */
+ @Inject private BuildTypeRefDao buildTypeRefDao;
+
+ /** BuildType DAO. */
+ @Inject private BuildTypeDao buildTypeDao;
+
+ /** BuildType DAO. */
+ @Inject private BuildTypeSync buildTypeSync;
+
/** Changes DAO. */
@Inject private IStringCompactor compactor;
@@ -106,7 +123,6 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
changesDao.init();
}
-
@NotNull
private String taskName(String taskName) {
return ITeamcityIgnited.class.getSimpleName() +"." + taskName + "." + srvNme;
@@ -308,6 +324,26 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
return chains;
}
+ /** {@inheritDoc} */
+ @Override public List<String> getCompositeBuildTypesIdsSortedByBuildNumberCounter(String projectId) {
+ return buildTypeSync.getCompositeBuildTypesIdsSortedByBuildNumberCounter(srvIdMaskHigh, projectId, conn);
+ }
+
+ /** {@inheritDoc} */
+ @Override public List<BuildTypeRefCompacted> getAllBuildTypesCompacted(String projectId) {
+ return buildTypeSync.getAllBuildTypesCompacted(srvIdMaskHigh, projectId, conn);
+ }
+
+ /** {@inheritDoc} */
+ @Override public BuildTypeRefCompacted getBuildTypeRef(String buildTypeId) {
+ return buildTypeRefDao.getBuildTypeRef(srvIdMaskHigh, buildTypeId);
+ }
+
+ /** {@inheritDoc} */
+ @Override public BuildTypeCompacted getBuildType(String buildTypeId) {
+ return buildTypeDao.getFatBuildType(srvIdMaskHigh, buildTypeId);
+ }
+
public List<String> branchForQuery(@Nullable String branchName) {
if (ITeamcity.DEFAULT.equals(branchName))
return Lists.newArrayList(branchName, "refs/heads/master", "master");
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedModule.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedModule.java
index ceb427f..690f87f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedModule.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedModule.java
@@ -19,6 +19,9 @@ package org.apache.ignite.ci.teamcity.ignited;
import com.google.inject.AbstractModule;
import com.google.inject.internal.SingletonScope;
import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildConditionDao;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefDao;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeSync;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeDao;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeDao;
import org.apache.ignite.ci.teamcity.ignited.change.ChangeSync;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildDao;
@@ -43,7 +46,9 @@ public class TeamcityIgnitedModule extends AbstractModule {
bind(ProactiveFatBuildSync.class).in(new SingletonScope());
bind(ChangeSync.class).in(new SingletonScope());
bind(ChangeDao.class).in(new SingletonScope());
-
+ bind(BuildTypeRefDao.class).in(new SingletonScope());
+ bind(BuildTypeDao.class).in(new SingletonScope());
+ bind(BuildTypeSync.class).in(new SingletonScope());
bind(IStringCompactor.class).to(IgniteStringCompactor.class).in(new SingletonScope());
TcRestCachedModule module = new TcRestCachedModule();
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeCompacted.java
new file mode 100644
index 0000000..1802f01
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeCompacted.java
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.teamcity.ignited.buildtype;
+
+import com.google.common.base.MoreObjects;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import org.apache.ignite.ci.analysis.IVersionedEntity;
+import org.apache.ignite.ci.db.Persisted;
+import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.tcmodel.conf.bt.BuildTypeFull;
+import org.apache.ignite.ci.tcmodel.conf.bt.Parameters;
+import org.apache.ignite.ci.tcmodel.conf.bt.SnapshotDependencies;
+import org.apache.ignite.ci.tcmodel.conf.bt.SnapshotDependency;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.apache.ignite.ci.util.NumberUtil;
+import org.jetbrains.annotations.Nullable;
+
+@Persisted
+public class BuildTypeCompacted extends BuildTypeRefCompacted implements IVersionedEntity {
+ /** Build number counter. */
+ private static String BUILD_NUMBER_COUNTER = "buildNumberCounter";
+
+ /** Latest version. */
+ private static final int LATEST_VERSION = 0;
+
+ /** Entity fields version. */
+ private short _ver = LATEST_VERSION;
+
+ /** Build number counter. */
+ private int buildNumberCounter;
+
+ /** Settings. */
+ @Nullable private ParametersCompacted settings;
+
+ /** Properties. */
+ @Nullable private ParametersCompacted parameters;
+
+ /** Snapshot-dependencies. */
+ @Nullable private List<SnapshotDependencyCompacted> snapshotDependencies;
+
+ /**
+ * @param compactor Compactor.
+ * @param buildType BuildType.
+ */
+ public BuildTypeCompacted(IStringCompactor compactor, BuildTypeFull buildType) {
+ super(compactor, buildType);
+
+ buildNumberCounter = NumberUtil.parseInt(buildType.getSettings().getParameter(BUILD_NUMBER_COUNTER), 0);
+
+ Parameters src = new Parameters(buildType.getSettings().properties());
+
+ src.setParameter(BUILD_NUMBER_COUNTER, "");
+
+ settings = new ParametersCompacted(compactor, src.properties());
+
+ parameters = new ParametersCompacted(compactor, buildType.getParameters().properties());
+
+ snapshotDependencies = new ArrayList<>();
+
+ for (SnapshotDependency snDp : buildType.dependencies())
+ snapshotDependencies.add(new SnapshotDependencyCompacted(compactor, snDp));
+ }
+
+ public int buildNumberCounter() {
+ return buildNumberCounter;
+ }
+
+ public void buildNumberCounter(int buildNumberCounter) {
+ this.buildNumberCounter = buildNumberCounter;
+ }
+
+ public BuildTypeFull toBuildType(IStringCompactor compactor) {
+ BuildTypeFull res = new BuildTypeFull();
+
+ fillBuildTypeRefFields(compactor, res);
+
+ fillBuildTypeFields(compactor, res);
+
+ return res;
+ }
+
+ protected void fillBuildTypeFields(IStringCompactor compactor, BuildTypeFull res) {
+ res.setParameters(parameters == null ? new Parameters() : parameters.toParameters(compactor));
+ res.setSettings(settings == null ? new Parameters() : settings.toParameters(compactor));
+ res.setSetting(BUILD_NUMBER_COUNTER, Integer.toString(buildNumberCounter));
+
+ List<SnapshotDependency> snDpList = null;
+
+ if (snapshotDependencies != null) {
+ snDpList = new ArrayList<>();
+
+ for (SnapshotDependencyCompacted snDp : snapshotDependencies)
+ snDpList.add(snDp.toSnapshotDependency(compactor));
+ }
+
+ res.setSnapshotDependencies(new SnapshotDependencies(snDpList));
+ }
+
+ protected void fillBuildTypeRefFields(IStringCompactor compactor, BuildType res) {
+ String id = id(compactor);
+ res.setId(id);
+ res.setName(compactor.getStringFromId(super.name()));
+ res.setProjectId(compactor.getStringFromId(super.projectId()));
+ res.setProjectName(compactor.getStringFromId(super.projectName()));
+ res.href = getHrefForId(id);
+ res.setWebUrl(getWebUrlForId(id));
+ }
+
+ public ParametersCompacted settings() {
+ return settings == null ? new ParametersCompacted() : settings;
+ }
+
+ public void settings(@Nullable ParametersCompacted settings) {
+ this.settings = settings;
+ }
+
+ public ParametersCompacted parameters() {
+ return parameters != null ? parameters : new ParametersCompacted();
+ }
+
+ public void parameters(@Nullable ParametersCompacted parameters) {
+ this.parameters = parameters;
+ }
+
+ public List<SnapshotDependencyCompacted> snapshotDependencies() {
+ return snapshotDependencies == null ? Collections.emptyList() : Collections.unmodifiableList(snapshotDependencies);
+ }
+
+ public void snapshotDependencies(
+ @Nullable List<SnapshotDependencyCompacted> snapshotDependencies) {
+ this.snapshotDependencies = snapshotDependencies;
+ }
+
+ /** {@inheritDoc} */
+ @Override public int version() {
+ return _ver;
+ }
+
+ /** {@inheritDoc} */
+ @Override public int latestVersion() {
+ return LATEST_VERSION;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof BuildTypeCompacted))
+ return false;
+
+ if (!super.equals(o))
+ return false;
+
+ BuildTypeCompacted that = (BuildTypeCompacted)o;
+
+ return _ver == that._ver &&
+ buildNumberCounter == that.buildNumberCounter &&
+ Objects.equals(settings(), that.settings()) &&
+ Objects.equals(parameters(), that.parameters()) &&
+ Objects.equals(snapshotDependencies(), that.snapshotDependencies());
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return Objects.hash(super.hashCode(), _ver, buildNumberCounter, settings(), parameters(), snapshotDependencies());
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("_ver", _ver)
+ .add("buildNumberCounter", buildNumberCounter)
+ .add("settings", settings)
+ .add("parameters", parameters)
+ .add("snapshotDependencies", snapshotDependencies)
+ .toString();
+ }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeDao.java
new file mode 100644
index 0000000..2a12d44
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeDao.java
@@ -0,0 +1,226 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.teamcity.ignited.buildtype;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+import javax.inject.Inject;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.ci.di.AutoProfiling;
+import org.apache.ignite.ci.tcmodel.conf.bt.BuildTypeFull;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import javax.validation.constraints.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import static org.apache.ignite.ci.teamcity.ignited.IgniteStringCompactor.getCache8PartsConfig;
+
+public class BuildTypeDao {
+ /** Cache name*/
+ public static final String TEAMCITY_FAT_BUILD_TYPES_CACHE_NAME = "teamcityFatBuildType";
+
+ /** Ignite. */
+ @Inject private Ignite ignite;
+
+ /** Compactor. */
+ @Inject private IStringCompactor compactor;
+
+ /**
+ * BuildTypes cache.
+ */
+ private IgniteCache<Long, BuildTypeCompacted> buildTypesCache() {
+ return ignite.getOrCreateCache(getCache8PartsConfig(TEAMCITY_FAT_BUILD_TYPES_CACHE_NAME));
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildType BuildType.
+ * @param existingBuildType Existing version of buildType in the DB.
+ * @return Fat BuildType saved (if modifications detected), otherwise null.
+ */
+ public BuildTypeCompacted saveBuildType(int srvIdMaskHigh,
+ @NotNull BuildTypeFull buildType,
+ @Nullable BuildTypeCompacted existingBuildType) {
+ Preconditions.checkNotNull(buildType, "buildType can't be null");
+
+ BuildTypeCompacted newBuildType = new BuildTypeCompacted(compactor, buildType);
+
+ if (existingBuildType != null)
+ existingBuildType.buildNumberCounter(newBuildType.buildNumberCounter());
+
+
+ if (existingBuildType == null || !existingBuildType.equals(newBuildType)) {
+ buildTypesCache().put(buildTypeIdToCacheKey(srvIdMaskHigh, buildType.getId()), newBuildType);
+
+ return newBuildType;
+ }
+
+ return null;
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param refCompacted Reference compacted.
+ */
+ @AutoProfiling
+ public boolean save(int srvIdMaskHigh, BuildTypeCompacted refCompacted) {
+ long cacheKey = buildTypeStringIdToCacheKey(srvIdMaskHigh, refCompacted.id());
+
+ BuildTypeCompacted buildTypePersisted = buildTypesCache().get(cacheKey);
+
+ if (buildTypePersisted == null || !buildTypePersisted.equals(refCompacted)) {
+ buildTypesCache().put(cacheKey, refCompacted);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeId BuildType id.
+ * @return Saved fat buildType.
+ */
+ public BuildTypeCompacted getFatBuildType(int srvIdMaskHigh, @NotNull String buildTypeId) {
+ Preconditions.checkNotNull(buildTypesCache(), "init() was not called");
+
+ return buildTypesCache().get(buildTypeIdToCacheKey(srvIdMaskHigh, buildTypeId));
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return List of saved fat buildTypes.
+ */
+ public List<BuildTypeCompacted> buildTypesCompacted(int srvIdMaskHigh, @Nullable String projectId) {
+ return buildTypesCompactedStream(srvIdMaskHigh, projectId).collect(Collectors.toList());
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return Stream of saved to current fat Teamcity's buildTypes.
+ */
+ protected Stream<BuildTypeCompacted> buildTypesCompactedStream(int srvIdMaskHigh, @Nullable String projectId) {
+ Stream<BuildTypeCompacted> stream = compactedFatBuildTypesStreamForServer(srvIdMaskHigh);
+
+ if (Strings.isNullOrEmpty(projectId))
+ return stream;
+
+ final int strIdForProjectId = compactor.getStringId(projectId);
+
+ return stream
+ .filter(bt -> bt.projectId() == strIdForProjectId)
+ .filter(bt -> !bt.removed());
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return List of saved composite fat buildTypes.
+ */
+ public List<BuildTypeCompacted> compositeBuildTypesCompacted(int srvIdMaskHigh, @Nullable String projectId) {
+ final int nameId = compactor.getStringId("buildConfigurationType");
+ final int valueId = compactor.getStringId("COMPOSITE");
+
+ return buildTypesCompactedStream(srvIdMaskHigh, projectId)
+ .filter(bt -> bt.settings().findPropertyStringId(nameId) == valueId)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return List of saved composite fat buildTypes.
+ */
+ private List<BuildTypeCompacted> compositeBuildTypesCompactedSortedByBuildNumberCounter(int srvIdMaskHigh, @Nullable String projectId) {
+ List<BuildTypeCompacted> res = compositeBuildTypesCompacted(srvIdMaskHigh, projectId);
+
+ Comparator<BuildTypeCompacted> comp = Comparator.comparingInt(BuildTypeCompacted::buildNumberCounter);
+
+ res.sort(comp);
+
+ Collections.reverse(res);
+
+ return res;
+ }
+
+ /**
+ * Return list of composite suite ids sorted by number of snapshot dependency.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return List of buildTypes ids.
+ */
+ public List<String> compositeBuildTypesIdsSortedByBuildNumberCounter(int srvIdMaskHigh, @Nullable String projectId) {
+ return compositeBuildTypesCompactedSortedByBuildNumberCounter(srvIdMaskHigh, projectId).stream()
+ .map(bt -> compactor.getStringFromId(bt.id()))
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @return All buildTypes for a server, full scan.
+ */
+ @NotNull protected Stream<BuildTypeCompacted> compactedFatBuildTypesStreamForServer(int srvIdMaskHigh) {
+ return StreamSupport.stream(buildTypesCache().spliterator(), false)
+ .filter(entry -> isKeyForServer(entry.getKey(), srvIdMaskHigh))
+ .map(javax.cache.Cache.Entry::getValue);
+ }
+
+ /**
+ * @param key Key.
+ * @param srvIdMaskHigh Server id mask high.
+ */
+ private boolean isKeyForServer(Long key, int srvIdMaskHigh) {
+ return key!=null && key >> 32 == srvIdMaskHigh;
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeId Build type id.
+ */
+ private long buildTypeIdToCacheKey(int srvIdMaskHigh, String buildTypeId) {
+ int buildTypeStrId = compactor.getStringId(buildTypeId);
+
+ return buildTypeStringIdToCacheKey(srvIdMaskHigh, buildTypeStrId);
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeStrId BuildType stringId.
+ */
+ public static long buildTypeStringIdToCacheKey(int srvIdMaskHigh, int buildTypeStrId) {
+ return (long)buildTypeStrId | (long)srvIdMaskHigh << 32;
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeStrId BuildType stringId.
+ */
+ public boolean containsKey(int srvIdMaskHigh, int buildTypeStrId) {
+ return buildTypesCache().containsKey(buildTypeStringIdToCacheKey(srvIdMaskHigh, buildTypeStrId));
+ }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefCompacted.java
new file mode 100644
index 0000000..185bddc
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefCompacted.java
@@ -0,0 +1,189 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.teamcity.ignited.buildtype;
+
+import com.google.common.base.MoreObjects;
+import java.util.Objects;
+import org.apache.ignite.ci.db.Persisted;
+import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.jetbrains.annotations.NotNull;
+
+@Persisted
+public class BuildTypeRefCompacted {
+ /** Compacter identifier for string 'Id'. */
+ private int id = -1;
+
+ /** Compacter identifier for string 'Name'. */
+ private int name = -1;
+
+ /** Compacter identifier for string 'Project id'. */
+ private int projectId = -1;
+
+ /** Compacter identifier for string 'Project name'. */
+ private int projectName = -1;
+
+ /** Marker for suites removed from teamcity. */
+ private boolean removed = false;
+
+ public String name(IStringCompactor compactor) {
+ return compactor.getStringFromId(name);
+ }
+
+ public String id(IStringCompactor compactor) {
+ return compactor.getStringFromId(id);
+ }
+
+ public int id() {
+ return id;
+ }
+
+ public int name() {
+ return name;
+ }
+
+ public int projectId() {
+ return projectId;
+ }
+
+ public int projectName() {
+ return projectName;
+ }
+
+ /**
+ * @return BuildType removed from Teamcity.
+ */
+ public boolean removed() {
+ return removed;
+ }
+
+ /**
+ * Mark buildType as removed from Teamcity.
+ */
+ public void markRemoved() {
+ this.removed = true;
+ }
+
+ /**
+ * Default constructor.
+ */
+ public BuildTypeRefCompacted() {
+ }
+
+ /**
+ * @param compactor Compactor.
+ * @param ref Reference.
+ */
+ public BuildTypeRefCompacted(IStringCompactor compactor, BuildType ref) {
+ this(compactor, ref, false);
+ }
+
+ /**
+ * @param compactor Compactor.
+ * @param ref Reference.
+ * @param removed BuildType is actual (not removed from Teamcity).
+ */
+ public BuildTypeRefCompacted(IStringCompactor compactor, BuildType ref, boolean removed) {
+ id = compactor.getStringId(ref.getId());
+ name = compactor.getStringId(ref.getName());
+ projectId = compactor.getStringId(ref.getProjectId());
+ projectName = compactor.getStringId(ref.getProjectName());
+ this.removed = removed;
+ }
+
+ /**
+ * @param refCompacted Reference compacted.
+ */
+ public BuildTypeRefCompacted(BuildTypeRefCompacted refCompacted) {
+ id = refCompacted.id();
+ name = refCompacted.name();
+ projectId = refCompacted.projectId();
+ projectName = refCompacted.projectName();
+ removed = refCompacted.removed;
+ }
+
+ /**
+ * @param compactor Compacter.
+ */
+ public BuildType toBuildTypeRef(IStringCompactor compactor) {
+ BuildType res = new BuildType();
+
+ fillBuildTypeRefFields(compactor, res);
+
+ return res;
+ }
+
+ protected void fillBuildTypeRefFields(IStringCompactor compactor, BuildType res) {
+ String id = id(compactor);
+ res.setId(id);
+ res.setName(compactor.getStringFromId(name));
+ res.setProjectId(compactor.getStringFromId(projectId));
+ res.setProjectName(compactor.getStringFromId(projectName));
+ res.href = getHrefForId(id);
+ res.setWebUrl(getWebUrlForId(id));
+ }
+
+ /**
+ * @param buildTypeId BuildType id.
+ * @return URL for GET request to Teamcity REST API.
+ */
+ @NotNull protected static String getHrefForId(String buildTypeId) {
+ return "/app/rest/latest/builds/id:" + buildTypeId;
+ }
+
+ /**
+ * @param buildTypeId BuildType id.
+ * @return URL to BuildType on Teamcity.
+ */
+ @NotNull protected static String getWebUrlForId(String buildTypeId) {
+ return "http://ci.ignite.apache.org/viewType.html?buildTypeId=" + buildTypeId;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof BuildTypeRefCompacted))
+ return false;
+
+ BuildTypeRefCompacted compacted = (BuildTypeRefCompacted)o;
+
+ return id == compacted.id &&
+ name == compacted.name &&
+ projectId == compacted.projectId &&
+ projectName == compacted.projectName &&
+ removed == compacted.removed;
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return Objects.hash(id, name, projectId, projectName, removed);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("id", id)
+ .add("name", name)
+ .add("projectId", projectId)
+ .add("projectName", projectName)
+ .add("removed", removed)
+ .toString();
+ }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefDao.java
new file mode 100644
index 0000000..9929d71
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefDao.java
@@ -0,0 +1,251 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.teamcity.ignited.buildtype;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+import javax.cache.Cache;
+import javax.inject.Inject;
+import javax.validation.constraints.NotNull;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.jetbrains.annotations.Nullable;
+
+import static org.apache.ignite.ci.teamcity.ignited.IgniteStringCompactor.getCache8PartsConfig;
+import static org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeDao.buildTypeStringIdToCacheKey;
+
+public class BuildTypeRefDao {
+ /** Cache name*/
+ public static final String TEAMCITY_BUILD_TYPES_CACHE_NAME = "teamcityBuildTypeRef";
+
+ /** Ignite. */
+ @Inject private Ignite ignite;
+
+ /** Compactor. */
+ @Inject private IStringCompactor compactor;
+
+ /**
+ * References to BuildTypes cache.
+ */
+ private IgniteCache<Long, BuildTypeRefCompacted> buildTypesCache() {
+ return ignite.getOrCreateCache(getCache8PartsConfig(TEAMCITY_BUILD_TYPES_CACHE_NAME));
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeRef BuildType reference.
+ * @param existingBuildTypeRef Existing version of buildType reference in the DB.
+ * @return BuildTypes references saved (if modifications detected), otherwise null.
+ */
+ public BuildTypeRefCompacted saveBuildTypeRef(int srvIdMaskHigh,
+ @NotNull BuildType buildTypeRef,
+ @Nullable BuildTypeRefCompacted existingBuildTypeRef) {
+ Preconditions.checkNotNull(buildTypeRef, "buildType can't be null");
+
+ BuildTypeRefCompacted newBuildType = new BuildTypeRefCompacted(compactor, buildTypeRef);
+
+ if (existingBuildTypeRef == null || !existingBuildTypeRef.equals(newBuildType)) {
+ buildTypesCache().put(buildTypeIdToCacheKey(srvIdMaskHigh, buildTypeRef.getId()), newBuildType);
+
+ return newBuildType;
+ }
+
+ return null;
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param ghData Data for saving.
+ * @return List of added entries' keys.
+ */
+ public Set<Long> saveChunk(int srvIdMaskHigh, List<BuildType> ghData) {
+ Set<Long> ids = ghData.stream().map(BuildType::getId)
+ .filter(Objects::nonNull)
+ .map(id -> buildTypeIdToCacheKey(srvIdMaskHigh, id))
+ .collect(Collectors.toSet());
+
+ Map<Long, BuildTypeRefCompacted> existingEntries = buildTypesCache().getAll(ids);
+ Map<Long, BuildTypeRefCompacted> entriesToPut = new TreeMap<>();
+
+ List<BuildTypeRefCompacted> collect = ghData.stream()
+ .map(ref -> new BuildTypeRefCompacted(compactor, ref))
+ .collect(Collectors.toList());
+
+ for (BuildTypeRefCompacted next : collect) {
+ long cacheKey = buildTypeStringIdToCacheKey(srvIdMaskHigh, next.id());
+ BuildTypeRefCompacted buildTypePersisted = existingEntries.get(cacheKey);
+
+ if (buildTypePersisted == null || !buildTypePersisted.equals(next))
+ entriesToPut.put(cacheKey, next);
+ }
+
+ int size = entriesToPut.size();
+ if (size != 0)
+ buildTypesCache().putAll(entriesToPut);
+
+ return entriesToPut.keySet();
+ }
+
+ /**
+ * Method compares the received list with the list on cache and marks missing ids as removed.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param currListOfBuildTypeIdsOnTeamcity Current list of suite ids on Teamcity.
+ * @param projectId Project id.
+ * @return List of marked as removed buildType ids.
+ */
+ public Set<String> markMissingBuildsAsRemoved(int srvIdMaskHigh,
+ List<String> currListOfBuildTypeIdsOnTeamcity, String projectId) {
+
+ Map<Long, String> ids = currListOfBuildTypeIdsOnTeamcity.stream()
+ .collect(Collectors.toMap(id -> buildTypeIdToCacheKey(srvIdMaskHigh, id), id -> id));
+
+ int projectStrId = compactor.getStringId(projectId);
+
+ Set<String> rmvBuildTypes = new TreeSet<>();
+
+ Map<Long, BuildTypeRefCompacted> rmvEntries = StreamSupport.stream(buildTypesCache().spliterator(), false)
+ .filter(entry -> isKeyForServer(entry.getKey(), srvIdMaskHigh))
+ .filter(entry -> entry.getValue().projectId() == projectStrId)
+ .filter(entry -> !ids.containsKey(entry.getKey()))
+ .collect(Collectors.toMap(Cache.Entry::getKey, entry -> {
+ BuildTypeRefCompacted buildTypeRef = entry.getValue();
+ buildTypeRef.markRemoved();
+
+ rmvBuildTypes.add(entry.getValue().id(compactor));
+
+ return buildTypeRef;
+ }));
+
+ buildTypesCache().putAll(rmvEntries);
+
+ return rmvBuildTypes;
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeId BuildType id.
+ * @return Saved reference to buildType.
+ */
+ public BuildTypeRefCompacted getBuildTypeRef(int srvIdMaskHigh, @NotNull String buildTypeId) {
+ return buildTypesCache().get(buildTypeIdToCacheKey(srvIdMaskHigh, buildTypeId));
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return List of saved current Teamcity's buildTypes.
+ */
+ public List<BuildTypeRefCompacted> buildTypesCompacted(int srvIdMaskHigh, @Nullable String projectId) {
+ return buildTypesCompactedStream(srvIdMaskHigh, projectId).collect(Collectors.toList());
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return List of saved current Teamcity's buildTypes ids.
+ */
+ public List<String> buildTypeIds(int srvIdMaskHigh, @Nullable String projectId) {
+ return buildTypesCompactedStream(srvIdMaskHigh, projectId)
+ .map(bt -> bt.id(compactor)).collect(Collectors.toList());
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return Map of saved buildTypes ids with 'removed' flag.
+ */
+ public Map<String, Boolean> allBuildTypeIds(int srvIdMaskHigh, @Nullable String projectId) {
+ return allBuildTypesCompactedStream(srvIdMaskHigh, projectId)
+ .collect(Collectors.toMap(bt -> bt.id(compactor), BuildTypeRefCompacted::removed));
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return Stream of saved references to current Teamcity's buildTypes.
+ */
+ protected Stream<BuildTypeRefCompacted> buildTypesCompactedStream(int srvIdMaskHigh, @Nullable String projectId) {
+ return allBuildTypesCompactedStream(srvIdMaskHigh, projectId).filter(bt -> !bt.removed());
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @return Stream of saved references to all buildTypes (including deleted).
+ */
+ protected Stream<BuildTypeRefCompacted> allBuildTypesCompactedStream(int srvIdMaskHigh, @Nullable String projectId) {
+ Stream<BuildTypeRefCompacted> stream = compactedBuildTypeRefsStreamForServer(srvIdMaskHigh);
+
+ if (Strings.isNullOrEmpty(projectId))
+ return stream;
+
+ final int strIdForProjectId = compactor.getStringId(projectId);
+
+ return stream
+ .filter(bt -> bt.projectId() == strIdForProjectId);
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @return all buildTypes for a server, full scan.
+ */
+ @NotNull protected Stream<BuildTypeRefCompacted> compactedBuildTypeRefsStreamForServer(int srvIdMaskHigh) {
+ return StreamSupport.stream(buildTypesCache().spliterator(), false)
+ .filter(entry -> isKeyForServer(entry.getKey(), srvIdMaskHigh))
+ .map(javax.cache.Cache.Entry::getValue);
+ }
+
+ /**
+ * @param key Key.
+ * @param srvIdMaskHigh Server id mask high.
+ */
+ private boolean isKeyForServer(Long key, int srvIdMaskHigh) {
+ return key!=null && key >> 32 == srvIdMaskHigh;
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeId BuildType id.
+ * @return BuildType stringId.
+ */
+ private long buildTypeIdToCacheKey(int srvIdMaskHigh, String buildTypeId) {
+ int buildTypeStrId = compactor.getStringId(buildTypeId);
+
+ return buildTypeStringIdToCacheKey(srvIdMaskHigh, buildTypeStrId);
+ }
+
+ /**
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeStrId BuildType stringId.
+ */
+ public boolean containsKey(int srvIdMaskHigh, int buildTypeStrId) {
+ return buildTypesCache().containsKey(buildTypeStringIdToCacheKey(srvIdMaskHigh, buildTypeStrId));
+ }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeSync.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeSync.java
new file mode 100644
index 0000000..eb5fba5
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeSync.java
@@ -0,0 +1,249 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.teamcity.ignited.buildtype;
+
+import com.google.common.base.Throwables;
+import java.io.FileNotFoundException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import javax.inject.Inject;
+import org.apache.ignite.ci.di.AutoProfiling;
+import org.apache.ignite.ci.di.MonitoredTask;
+import org.apache.ignite.ci.di.scheduler.IScheduler;
+import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.tcmodel.conf.bt.BuildTypeFull;
+import org.apache.ignite.ci.teamcity.pure.ITeamcityConn;
+import org.apache.ignite.ci.util.ExceptionUtil;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.ignite.ci.teamcity.ignited.TeamcityIgnitedImpl.DEFAULT_PROJECT_ID;
+
+public class BuildTypeSync {
+ /** Logger. */
+ private static final Logger logger = LoggerFactory.getLogger(BuildTypeSync.class);
+
+ /** Scheduler. */
+ @Inject private IScheduler scheduler;
+
+ /** BuildType reference DAO. */
+ @Inject private BuildTypeRefDao buildTypeRefDao;
+
+ /** BuildType DAO. */
+ @Inject private BuildTypeDao buildTypeDao;
+
+ /** Saved list of composite suites for "IgniteTests24Java8" project. */
+ private List<String> compositeBuildTypesIdsForDfltProject = Collections.emptyList();
+
+ /**
+ * Return list of composite suite ids sorted by number of snapshot dependency.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @param conn Pure HTTP Connection API.
+ * @return List of composite buildType ids.
+ */
+ public List<String> getCompositeBuildTypesIdsSortedByBuildNumberCounter(int srvIdMaskHigh, String projectId, ITeamcityConn conn) {
+ ensureActualizeBuildTypeRefsRequested(srvIdMaskHigh, projectId, conn);
+ ensureActualizeBuildTypesRequested(srvIdMaskHigh, projectId, conn);
+
+ return (projectId.equals(DEFAULT_PROJECT_ID) && !compositeBuildTypesIdsForDfltProject.isEmpty()) ?
+ compositeBuildTypesIdsForDfltProject :
+ buildTypeDao.compositeBuildTypesIdsSortedByBuildNumberCounter(srvIdMaskHigh, projectId);
+ }
+
+ /**
+ * Return list of compacted references to project suites.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @param conn Pure HTTP Connection API.
+ * @return List of compacted references to buildTypes.
+ */
+ public List<BuildTypeRefCompacted> getAllBuildTypesCompacted(int srvIdMaskHigh, String projectId, ITeamcityConn conn) {
+ ensureActualizeBuildTypeRefsRequested(srvIdMaskHigh, projectId, conn);
+
+ return buildTypeRefDao.buildTypesCompacted(srvIdMaskHigh, projectId);
+ }
+
+ /**
+ * Actualize saved list of composite suites for project.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ */
+ private void actualizeSavedCompositeBuildTypesIds(int srvIdMaskHigh, String projectId) {
+ if (projectId.equals(DEFAULT_PROJECT_ID)) {
+ compositeBuildTypesIdsForDfltProject =
+ buildTypeDao.compositeBuildTypesIdsSortedByBuildNumberCounter(srvIdMaskHigh, projectId);
+ }
+ }
+
+ /**
+ * Ensure actualize BuildTypeRefs requested. Add this task to scheduler.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @param conn Pure HTTP Connection API.
+ */
+ private void ensureActualizeBuildTypeRefsRequested(int srvIdMaskHigh, String projectId, ITeamcityConn conn) {
+ scheduler.sheduleNamed(taskName("actualizeAllBuildTypeRefs", conn.serverId()),
+ () -> reindexBuildTypeRefs(srvIdMaskHigh, projectId, conn), 4, TimeUnit.HOURS);
+ }
+
+ /**
+ * Ensure actualize BuildTypes requested. Add this task to scheduler.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @param conn Pure HTTP Connection API.
+ */
+ private void ensureActualizeBuildTypesRequested(int srvIdMaskHigh, String projectId, ITeamcityConn conn) {
+ scheduler.sheduleNamed(taskName("actualizeAllBuildTypes", conn.serverId()),
+ () -> reindexBuildTypes(srvIdMaskHigh, projectId, conn), 24, TimeUnit.HOURS);
+ }
+
+ /**
+ * Re-index all references to "IgniteTests24Java8" suites.
+ */
+ private void reindexBuildTypeRefs(int srvIdMaskHigh, String projectId, ITeamcityConn conn) {
+ runActualizeBuildTypeRefs(srvIdMaskHigh, projectId, conn);
+ }
+
+ /**
+ * Re-index all "IgniteTests24Java8" suites.
+ */
+ private void reindexBuildTypes(int srvIdMaskHigh, String projectId, ITeamcityConn conn) {
+ runActualizeBuildTypes(srvIdMaskHigh, projectId, conn);
+ }
+
+ /**
+ * Re-index all project suites.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @param conn Pure HTTP Connection API.
+ * @return Statistics with the number of updated and requested buildTypes.
+ */
+ @SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
+ @MonitoredTask(name = "Reindex BuildTypes (projectId)", nameExtArgsIndexes = {1})
+ @AutoProfiling
+ protected String runActualizeBuildTypes(int srvIdMaskHigh, String projectId, ITeamcityConn conn) {
+ Map<String, Boolean> buildTypeIds = buildTypeRefDao.allBuildTypeIds(srvIdMaskHigh, projectId);
+
+ int updated = 0;
+ int removed = 0;
+
+ for (Map.Entry<String, Boolean> entry : buildTypeIds.entrySet()) {
+ String id = entry.getKey();
+ boolean rmv = entry.getValue();
+
+ if (rmv)
+ removed += markRemoved(srvIdMaskHigh, id) ? 1 : 0;
+ else {
+ try {
+ BuildTypeFull buildType = conn.getBuildType(id);
+
+ BuildTypeCompacted exBuildType = buildTypeDao.getFatBuildType(srvIdMaskHigh, id);
+
+ updated += (buildTypeDao.saveBuildType(srvIdMaskHigh, buildType, exBuildType) != null) ? 1 : 0;
+ } catch (Exception e) {
+ if (Throwables.getRootCause(e) instanceof FileNotFoundException) {
+ logger.info("Loading buildType [" + id + "] for server [" + conn.serverId() + "] failed:" +
+ e.getMessage(), e);
+
+ removed += markRemoved(srvIdMaskHigh, id) ? 1 : 0;
+ } else
+ throw ExceptionUtil.propagateException(e);
+ }
+ }
+
+ }
+
+ if (updated != 0 || removed != 0)
+ actualizeSavedCompositeBuildTypesIds(srvIdMaskHigh, projectId);
+
+ return "BuildTypes updated " + updated +
+ (removed == 0 ? "" : " and mark as removed " + removed) +
+ " from " + buildTypeIds.size() + " requested";
+ }
+
+ /**
+ * Mark buildType removed from TC server.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param buildTypeId Build type id.
+ *
+ * @return {@code True} if build mark removed, {@code False} if build already marked or not in cache.
+ */
+ private boolean markRemoved(int srvIdMaskHigh, String buildTypeId) {
+ BuildTypeCompacted existingBuildType = buildTypeDao.getFatBuildType(srvIdMaskHigh, buildTypeId);
+
+ if (existingBuildType != null) {
+ existingBuildType.markRemoved();
+
+ return buildTypeDao.save(srvIdMaskHigh, existingBuildType);
+ }
+
+ return false;
+ }
+
+ /**
+ * Re-index all references to project suites.
+ *
+ * @param srvIdMaskHigh Server id mask high.
+ * @param projectId Project id.
+ * @param conn Pure HTTP Connection API.
+ * @return Statistics with the number of updated and requested buildTypeRefs.
+ */
+ @SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
+ @MonitoredTask(name = "Reindex BuildTypeRefs (projectId)", nameExtArgsIndexes = {1})
+ @AutoProfiling
+ protected String runActualizeBuildTypeRefs(int srvIdMaskHigh, String projectId, ITeamcityConn conn) {
+ List<BuildType> tcData = conn.getBuildTypes(projectId);
+
+ Set<Long> buildsUpdated = buildTypeRefDao.saveChunk(srvIdMaskHigh, Collections.unmodifiableList(tcData));
+
+ Set<String> rmvBuildTypes = buildTypeRefDao.markMissingBuildsAsRemoved(srvIdMaskHigh,
+ tcData.stream().map(BuildType::getId).collect(Collectors.toList()), projectId);
+
+ if (!(buildsUpdated.isEmpty() && rmvBuildTypes.isEmpty())) {
+ actualizeSavedCompositeBuildTypesIds(srvIdMaskHigh, projectId);
+
+ runActualizeBuildTypes(srvIdMaskHigh, projectId, conn);
+ }
+
+ return "BuildTypeRefs updated " + buildsUpdated.size() +
+ (rmvBuildTypes.isEmpty() ? "" : " and mark as removed " + rmvBuildTypes.size()) +
+ " from " + (tcData.size() + rmvBuildTypes.size()) + " requested";
+ }
+
+ /**
+ * @param taskName Task name.
+ * @param srvName Server name.
+ */
+ @NotNull
+ private String taskName(String taskName, String srvName) {
+ return BuildTypeSync.class.getSimpleName() +"." + taskName + "." + srvName;
+ }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
new file mode 100644
index 0000000..bf6f65e
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.teamcity.ignited.buildtype;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Strings;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import org.apache.ignite.ci.tcmodel.conf.bt.Parameters;
+import org.apache.ignite.ci.tcmodel.conf.bt.Property;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.apache.ignite.internal.util.GridIntList;
+
+public class ParametersCompacted {
+ private GridIntList keys;
+ private GridIntList values;
+
+ /**
+ * Default constructor.
+ */
+ public ParametersCompacted() {
+ }
+
+ /**
+ * @param compactor Compactor.
+ * @param ref Reference.
+ */
+ public ParametersCompacted(IStringCompactor compactor, List<Property> ref) {
+ final int size = ref.size();
+ keys = new GridIntList(size);
+ values = new GridIntList(size);
+ for (Property next : ref) {
+ final String name = next.name();
+ if (Strings.isNullOrEmpty(name))
+ continue;
+
+ final String value = next.getValue();
+ if (Strings.isNullOrEmpty(value))
+ continue;
+ final int val = compactor.getStringId(value);
+ final int stringId = compactor.getStringId(name);
+
+ keys.add(stringId);
+ values.add(val);
+ }
+ }
+
+ public Parameters toParameters(IStringCompactor compactor) {
+ List<Property> properties = null;
+
+ if (keys.size() > 0) {
+ properties = new ArrayList<>();
+
+ final int size = keys.size();
+
+ for (int i = 0; i < size && i < values.size(); i++) {
+ final int nameid = keys.get(i);
+ String name = compactor.getStringFromId(nameid);
+ String value = compactor.getStringFromId(values.get(i));
+
+ properties.add(new Property(name, value));
+ }
+ }
+
+ return new Parameters(properties);
+ }
+
+ public int findPropertyStringId(int propertyCode) {
+ int value = -1;
+
+ if (keys != null) {
+ final int size = keys.size();
+
+ for (int i = 0; i < size; i++) {
+ final int nameid = keys.get(i);
+
+ if (nameid != propertyCode)
+ continue;
+
+ if (i >= values.size())
+ break;
+
+ value = values.get(i);
+ }
+ }
+
+ return value;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof ParametersCompacted))
+ return false;
+
+ ParametersCompacted compacted = (ParametersCompacted)o;
+
+ return Objects.equals(keys, compacted.keys) &&
+ Objects.equals(values, compacted.values);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return Objects.hash(keys, values);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("keys", keys)
+ .add("values", values)
+ .toString();
+ }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/SnapshotDependencyCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/SnapshotDependencyCompacted.java
new file mode 100644
index 0000000..085de7b
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/SnapshotDependencyCompacted.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.teamcity.ignited.buildtype;
+
+import com.google.common.base.MoreObjects;
+import java.util.Objects;
+import org.apache.ignite.ci.tcmodel.conf.bt.SnapshotDependency;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+
+public class SnapshotDependencyCompacted {
+ /** Id. */
+ private int id = -1;
+
+ /** Type. */
+ private int type = -1;
+
+ /** Reference to source-buildType. */
+ private BuildTypeRefCompacted buildTypeRefCompacted;
+
+ /** Properties. */
+ private ParametersCompacted properties;
+
+ /**
+ * Default constructor.
+ */
+ public SnapshotDependencyCompacted(){
+ }
+
+ /**
+ * @param compactor Compactor.
+ * @param ref Reference.
+ */
+ public SnapshotDependencyCompacted(IStringCompactor compactor, SnapshotDependency ref) {
+ id = compactor.getStringId(ref.getId());
+ type = compactor.getStringId(ref.getType());
+ buildTypeRefCompacted = new BuildTypeRefCompacted(compactor, ref.bt());
+ properties = new ParametersCompacted(compactor, ref.getProperties().properties());
+ }
+
+ /**
+ * @param compactor Compacter.
+ */
+ public SnapshotDependency toSnapshotDependency(IStringCompactor compactor) {
+ SnapshotDependency ref = new SnapshotDependency();
+
+ fillSnapshotDependencyCompacted(compactor, ref);
+
+ return ref;
+ }
+
+ /**
+ * @param compactor Compacter.
+ * @param res Response.
+ */
+ protected void fillSnapshotDependencyCompacted(IStringCompactor compactor, SnapshotDependency res) {
+ res.setId(compactor.getStringFromId(id));
+ res.setType(compactor.getStringFromId(type));
+ res.setSrcBt(buildTypeRefCompacted.toBuildTypeRef(compactor));
+ res.setProperties(properties.toParameters(compactor));
+ }
+
+ public int id() {
+ return id;
+ }
+
+ public void id(int id) {
+ this.id = id;
+ }
+
+ public int type() {
+ return type;
+ }
+
+ public void type(int type) {
+ this.type = type;
+ }
+
+ public ParametersCompacted properties() {
+ return properties;
+ }
+
+ public void properties(ParametersCompacted properties) {
+ this.properties = properties;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean equals(Object o) {
+ if (this == o)
+ return true;
+
+ if (!(o instanceof SnapshotDependencyCompacted))
+ return false;
+
+ SnapshotDependencyCompacted compacted = (SnapshotDependencyCompacted)o;
+
+ return id == compacted.id &&
+ type == compacted.type &&
+ Objects.equals(buildTypeRefCompacted, compacted.buildTypeRefCompacted) &&
+ Objects.equals(properties, compacted.properties);
+ }
+
+ /** {@inheritDoc} */
+ @Override public int hashCode() {
+ return Objects.hash(id, type, buildTypeRefCompacted, properties);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("id", id)
+ .add("type", type)
+ .add("buildTypeRefCompacted", buildTypeRefCompacted)
+ .add("properties", properties)
+ .toString();
+ }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
index bd4ec17..56f03a0 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
@@ -196,9 +196,9 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
res.setQueuedDateTs(queuedDate);
BuildType type = new BuildType();
- type.id(res.buildTypeId());
- type.name(buildTypeName(compactor));
- type.projectId(projectId(compactor));
+ type.setId(res.buildTypeId());
+ type.setName(buildTypeName(compactor));
+ type.setProjectId(projectId(compactor));
res.setBuildType(type);
if (tests != null) {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/pure/ITeamcityConn.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/pure/ITeamcityConn.java
index 6355528..c2884ed 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/pure/ITeamcityConn.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/pure/ITeamcityConn.java
@@ -24,6 +24,8 @@ import javax.annotation.Nullable;
import org.apache.ignite.ci.tcmodel.changes.Change;
import org.apache.ignite.ci.tcmodel.changes.ChangesList;
+import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.tcmodel.conf.bt.BuildTypeFull;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrences;
@@ -73,6 +75,20 @@ public interface ITeamcityConn {
Change getChange(int changeId);
+ /**
+ * List of project suites.
+ *
+ * @param projectId Project id.
+ * @return List of buildType's references.
+ */
+ List<BuildType> getBuildTypes(String projectId);
+
+ /**
+ * @param buildTypeId BuildType id.
+ * @return BuildType.
+ */
+ BuildTypeFull getBuildType(String buildTypeId);
+
/** */
@Deprecated
ProblemOccurrences getProblemsAndRegisterCritical(BuildRef build);
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/NumberUtil.java
similarity index 58%
copy from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java
copy to ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/NumberUtil.java
index a3ee651..e02bb49 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcmodel/conf/bt/Property.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/NumberUtil.java
@@ -15,29 +15,23 @@
* limitations under the License.
*/
-package org.apache.ignite.ci.tcmodel.conf.bt;
+package org.apache.ignite.ci.util;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import org.jetbrains.annotations.Nullable;
+import javax.annotation.Nullable;
-/**
- * Any property in builds or other configs.
- */
-@XmlAccessorType(XmlAccessType.FIELD)
-public class Property {
- @XmlAttribute String name;
- @XmlAttribute String value;
- @XmlAttribute Boolean inherited;
-
-
- @Nullable
- public String getValue() {
- return value;
- }
-
- public String name() {
- return name;
+public class NumberUtil {
+ /**
+ * @param val Value.
+ * @param defaultValue Default value.
+ * @return Return parsed integer from string value. If value is null or is not integer, return default value.
+ */
+ public static int parseInt(@Nullable String val, int defaultValue) {
+ if (val == null)
+ return defaultValue;
+ try {
+ return Integer.parseInt(val);
+ } catch (NumberFormatException nfe) {
+ return defaultValue;
+ }
}
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/ChainAtServerCurrentStatus.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/ChainAtServerCurrentStatus.java
index 87ae388..0c023b0 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/ChainAtServerCurrentStatus.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/ChainAtServerCurrentStatus.java
@@ -29,6 +29,7 @@ import org.apache.ignite.ci.ITeamcity;
import org.apache.ignite.ci.analysis.FullChainRunCtx;
import org.apache.ignite.ci.analysis.ITestFailures;
import org.apache.ignite.ci.analysis.MultBuildRunCtx;
+import org.apache.ignite.ci.tcmodel.conf.BuildType;
import org.apache.ignite.ci.util.CollectionUtil;
import org.apache.ignite.internal.util.typedef.T2;
@@ -44,7 +45,7 @@ import static org.apache.ignite.ci.web.model.current.SuiteCurrentStatus.createOr
*/
@SuppressWarnings({"WeakerAccess", "PublicField"})
public class ChainAtServerCurrentStatus {
- /** {@link org.apache.ignite.ci.tcmodel.conf.BuildType#name} */
+ /** {@link BuildType#name} */
public String chainName;
/** Server ID. */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
index f70975d..adf2c7b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/visa/TcBotVisaService.java
@@ -18,6 +18,7 @@ package org.apache.ignite.ci.web.rest.visa;
import java.util.Collection;
import java.util.List;
+import java.util.Set;
import javax.annotation.Nonnull;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
@@ -87,7 +88,7 @@ public class TcBotVisaService {
@GET
@Path("contributionStatus")
- public ContributionCheckStatus contributionStatus(@Nullable @QueryParam("serverId") String srvId,
+ public Set<ContributionCheckStatus> contributionStatus(@Nullable @QueryParam("serverId") String srvId,
@Nonnull @QueryParam("suiteId") String suiteId,
@QueryParam("prId") String prId) {
ICredentialsProv prov = ICredentialsProv.get(req);
@@ -97,7 +98,7 @@ public class TcBotVisaService {
TcBotTriggerAndSignOffService instance = CtxListener.getInjector(ctx)
.getInstance(TcBotTriggerAndSignOffService.class);
- return instance.contributionStatus(srvId, prov, suiteId, prId);
+ return instance.contributionStatuses(srvId, prov, prId);
}
@GET
diff --git a/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js b/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
index e73c60d..c7014cf 100644
--- a/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
+++ b/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
@@ -91,7 +91,7 @@ function showContributionsTable(result, srvId, suiteId) {
if (type === 'display') {
let date = new Date(data);
- data = normalizeDateNum(date.getFullYear()) + '-' + normalizeDateNum(date.getMonth()) +
+ data = normalizeDateNum(date.getFullYear()) + '-' + normalizeDateNum(date.getMonth() + 1) +
'-' + normalizeDateNum(date.getDate()) + "<br>" + normalizeDateNum(date.getHours()) +
':' + normalizeDateNum(date.getMinutes()) + ":" + normalizeDateNum(date.getSeconds());
}
@@ -223,6 +223,7 @@ function formatContributionDetails(row, srvId, suiteId) {
var res = "";
res += "<div class='formgroup'>";
res += "<table cellpadding='5' cellspacing='0' border='0' style='padding-left:50px;'>\n";
+ res += "<tr><td colspan='4' id='choiceOfChain_" + prId + "'></td></tr>";
//caption of stage
res += "<tr>\n" +
@@ -236,7 +237,7 @@ function formatContributionDetails(row, srvId, suiteId) {
//icon of stage
res += "<tr>\n" +
" <th title='PR should have valid naming starting with issue name'><span class='visaStage' id='visaStage_1_" + prId + "'></span></th>\n" +
- " <th title='Run All should be triggered'><span class='visaStage' id='visaStage_2_" + prId + "'></span></th>\n" +
+ " <th title='Suite should be triggered'><span class='visaStage' id='visaStage_2_" + prId + "'></span></th>\n" +
" <th><span class='visaStage' id='visaStage_3_" + prId + "'></span></th>\n" +
" <th><span class='visaStage' id='visaStage_4_" + prId + "'></span></th>\n" +
//todo validityCheck;" <th><span class='visaStage' id='visaStage_5_" + prId + "'></span></th>\n" +
@@ -268,7 +269,6 @@ function formatContributionDetails(row, srvId, suiteId) {
res += "</div>";
-
$.ajax({
url: "rest/visa/contributionStatus" +
"?serverId=" + srvId +
@@ -276,7 +276,44 @@ function formatContributionDetails(row, srvId, suiteId) {
"&prId=" + prId,
success:
function (result) {
- showContributionStatus(result, prId, row, srvId, suiteId);
+ let selectHtml = "<select id='selectChain_" + prId + "' style='width: 350px'>";
+
+ let isCompleted = [],
+ isIncompleted = [],
+ suites = new Map();
+
+ for (let status of result) {
+ suites.set(status.suiteId, status);
+
+ if (isDefinedAndFilled(status.branchWithFinishedSuite))
+ isCompleted.push(status);
+ else
+ isIncompleted.push(status);
+ }
+
+ for (let status of isCompleted)
+ selectHtml += "<option value='true'>" + status.suiteId + "</option>";
+
+ for (let status of isIncompleted)
+ selectHtml += "<option value='false' style='color:grey'>" + status.suiteId + "</option>";
+
+ selectHtml += "</select>";
+
+ $('#choiceOfChain_' + prId).html(selectHtml);
+
+ prs.set(prId, suites);
+
+ let select = $("#selectChain_" + prId);
+
+ select.change(function() {
+ let pr = prs.get(prId),
+ selectedOption = $("#selectChain_" + prId + " option:selected").text(),
+ buildIsCompleted = select.val() === 'true';
+
+ showContributionStatus(pr.get(selectedOption), prId, row, srvId, selectedOption, buildIsCompleted);
+ });
+
+ select.change();
}
});
return res;
@@ -303,7 +340,6 @@ function repaint(srvId, suiteId) {
datatable.draw();
}
-
function repaintLater(srvId, suiteId) {
setTimeout(function () {
repaint(srvId, suiteId)
@@ -312,7 +348,7 @@ function repaintLater(srvId, suiteId) {
function showContributionStatus(status, prId, row, srvId, suiteId) {
let tdForPr = $('#showResultFor' + prId);
- let hasSomeRunAll = isDefinedAndFilled(status.branchWithFinishedRunAll);
+ let buildIsCompleted = isDefinedAndFilled(status.branchWithFinishedSuite);
let hasJiraIssue = isDefinedAndFilled(row.jiraIssueId);
let hasQueued = status.queuedBuilds > 0 || status.runningBuilds > 0;
let queuedStatus = "Has queued builds: " + status.queuedBuilds + " queued " + " " + status.runningBuilds + " running";
@@ -323,14 +359,14 @@ function showContributionStatus(status, prId, row, srvId, suiteId) {
");";
var linksToRunningBuilds = "";
- for (let i = 0; i < status.webLinksQueuedRunAlls.length; i++) {
- const l = status.webLinksQueuedRunAlls[i];
+ for (let i = 0; i < status.webLinksQueuedSuites.length; i++) {
+ const l = status.webLinksQueuedSuites[i];
linksToRunningBuilds += "<a href=" + l + ">View queued at TC</a> "
}
$('#viewQueuedBuildsFor' + prId).html(linksToRunningBuilds);
- if (hasSomeRunAll) {
- let finishedBranch = status.branchWithFinishedRunAll;
+ if (buildIsCompleted) {
+ let finishedBranch = status.branchWithFinishedSuite;
tdForPr.html("<a id='showReportlink_" + prId + "' href='" + prShowHref(srvId, suiteId, finishedBranch) + "'>" +
"<button id='show_" + prId + "'>Show " + finishedBranch + " report</button></a>");
@@ -360,10 +396,10 @@ function showContributionStatus(status, prId, row, srvId, suiteId) {
showStageResult(1, prId, hasJiraIssue, !hasJiraIssue);
- let buildFinished = isDefinedAndFilled(status.runAllFinished) && status.runAllFinished;
- let noNeedToTrigger = hasQueued || buildFinished;
+ let buildFinished = isDefinedAndFilled(status.suiteFinished) && status.suiteFinished;
+ let noNeedToTrigger = hasQueued || buildIsCompleted;
showStageResult(2, prId, noNeedToTrigger, false);
- showStageResult(3, prId, hasSomeRunAll, false);
+ showStageResult(3, prId, buildIsCompleted, false);
if(hasQueued) {
showWaitingResults(3, prId, queuedStatus);
}
@@ -374,7 +410,7 @@ function showContributionStatus(status, prId, row, srvId, suiteId) {
function prepareStatusOfTrigger() {
var res = "";
- if (hasQueued || hasSomeRunAll) {
+ if (hasQueued || buildIsCompleted) {
res += " class='disabledbtn'";
if (hasQueued)
res += " title='" + queuedStatus + "'";
@@ -422,12 +458,12 @@ function showContributionStatus(status, prId, row, srvId, suiteId) {
$('#testDraw').html(testDraw);
- if(isDefinedAndFilled(status.branchWithFinishedRunAll)) {
+ if(isDefinedAndFilled(status.branchWithFinishedSuite)) {
$.ajax({
url: "rest/visa/visaStatus" +
"?serverId=" + srvId +
"&suiteId=" + suiteId +
- "&tcBranch=" + status.branchWithFinishedRunAll,
+ "&tcBranch=" + status.branchWithFinishedSuite,
success:
function (result) {
showStageBlockers(3, prId, result.blockers);
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 9f5dece..770e457 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
@@ -56,7 +56,22 @@ function showChainResultsWithSettings(result, settings) {
res += " [";
res += "tests " + result.failedTests + " suites " + result.failedToFinish + "";
res += "]";
+ } else
+ res += " is absent";
+
+ let suiteId;
+
+ if (isDefinedAndFilled(findGetParameter("suiteId"))) {
+ suiteId = findGetParameter("suiteId");
+ } else if (isDefinedAndFilled(result.servers[0])) {
+ let url = new URL(result.servers[0].webToHist);
+
+ suiteId = url.searchParams.get("buildTypeId");
}
+
+ if (isDefinedAndFilled(suiteId))
+ res += " | Suite: <b>" + suiteId + "</b>";
+
res += "</td></tr>";
res += "</table>";
@@ -77,7 +92,9 @@ function showChainCurrentStatusData(server, settings) {
return;
if(isDefinedAndFilled(server.buildNotFound) && server.buildNotFound ) {
- return "<tr><td><b>Error: Build not found for branch [" + server.branchName + "]</b></td></tr>";
+ return "<tr><td><b>Error: Build not found for branch [" + server.branchName + "]</b>" +
+ "<br><br><span style='color:grey; font-size:12px;'>Perhaps, more than 2 weeks have passed since the last build " +
+ "run. <br>There is no data on the TC server</span></td></tr>";
}
var res = "";
@@ -173,8 +190,10 @@ function showChainCurrentStatusData(server, settings) {
// res += "<button onclick='notifyGit()'>Update PR status</button>";
// }
+ var suiteId = findGetParameter("suiteId");
+
if (settings.isJiraAvailable()) {
- res += "<button onclick='commentJira(\"" + server.serverId + "\", \"IgniteTests24Java8_RunAll\", \""
+ res += "<button onclick='commentJira(\"" + server.serverId + "\", \"" + suiteId + "\", \""
+ server.branchName + "\")'>Comment JIRA</button> ";
var blockersList = "";
diff --git a/ignite-tc-helper-web/src/main/webapp/prs.html b/ignite-tc-helper-web/src/main/webapp/prs.html
index 5ebd3dc..6284927 100644
--- a/ignite-tc-helper-web/src/main/webapp/prs.html
+++ b/ignite-tc-helper-web/src/main/webapp/prs.html
@@ -25,6 +25,8 @@
</style>
<script>
+ const prs = new Map();
+
function updateAccordionSize() {
let height = $(window).height();
let number = (height - 120);
diff --git a/ignite-tc-helper-web/src/main/webapp/visas.html b/ignite-tc-helper-web/src/main/webapp/visas.html
index cc8a950..9b77b7f 100644
--- a/ignite-tc-helper-web/src/main/webapp/visas.html
+++ b/ignite-tc-helper-web/src/main/webapp/visas.html
@@ -31,6 +31,7 @@
<th>.</th>
<th>.</th>
<th>.</th>
+ <th>.</th>
</tr>
</thead>
</table>
@@ -142,6 +143,16 @@ function showVisasTable(result) {
title: "Ticket"
},
{
+ "data": "buildTypeName",
+ title: "Suite",
+ "render": function (data, type, row, meta) {
+ if (isDefinedAndFilled(row.buildTypeName))
+ return row.buildTypeName;
+ else
+ return row.buildTypeId;
+ }
+ },
+ {
"data": "blockers",
title: "Blockers",
"render": function (data, type, row, meta) {
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
index 83dd6c3..7d57d28 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
@@ -163,8 +163,8 @@ public class PrChainsProcessorTest {
final Build build = new Build();
build.buildTypeId = btId;
final BuildType type = new BuildType();
- type.id(btId);
- type.name(btId);
+ type.setId(btId);
+ type.setName(btId);
build.setBuildType(type);
build.setId(id);
build.setStartDateTs(System.currentTimeMillis() - ageMs);
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
index a0d236a..6aa39bc 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
@@ -30,6 +30,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import javax.xml.bind.JAXBException;
import org.apache.ignite.Ignite;
@@ -40,12 +41,15 @@ import org.apache.ignite.ci.di.scheduler.IScheduler;
import org.apache.ignite.ci.di.scheduler.NoOpSheduler;
import org.apache.ignite.ci.tcmodel.changes.ChangesList;
import org.apache.ignite.ci.tcmodel.conf.BuildType;
+import org.apache.ignite.ci.tcmodel.conf.Project;
+import org.apache.ignite.ci.tcmodel.conf.bt.BuildTypeFull;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
import org.apache.ignite.ci.tcmodel.result.Build;
import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence;
import org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrences;
import org.apache.ignite.ci.tcmodel.result.stat.Statistics;
import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrencesFull;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefCompacted;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildDao;
import org.apache.ignite.ci.teamcity.pure.BuildHistoryEmulator;
@@ -163,6 +167,108 @@ public class IgnitedTcInMemoryIntegrationTest {
}
@Test
+ public void saveAndLoadBuildTypes() throws IOException, JAXBException {
+ final String projectId = "IgniteTests24Java8";
+ final String runAll = projectId + "_RunAll";
+ final String cluster = projectId + "_ActivateDeactivateCluster";
+ final AtomicBoolean buildTypeRmv = new AtomicBoolean();
+ final AtomicBoolean runAllRmv = new AtomicBoolean();
+ final AtomicBoolean clusterRmv = new AtomicBoolean();
+
+ ITeamcityHttpConnection http = Mockito.mock(ITeamcityHttpConnection.class);
+
+ when(http.sendGet(anyString(), anyString())).thenAnswer(
+ (invocationOnMock) -> {
+ String url = invocationOnMock.getArgument(1);
+ if (url.contains("/app/rest/latest/builds?locator=defaultFilter:false,count:1000,start:1000"))
+ return getClass().getResourceAsStream("/buildHistoryMasterPage2.xml");
+
+ if (url.contains("/app/rest/latest/builds?locator=defaultFilter:false"))
+ return getClass().getResourceAsStream("/buildHistoryMaster.xml");
+
+ if (url.contains("app/rest/latest/projects/" + projectId))
+ return getClass().getResourceAsStream("/" + projectId +
+ (buildTypeRmv.get() ? "_v2" : "") + ".xml");
+
+ if ((url.contains("app/rest/latest/buildTypes/id:" + runAll)) && !runAllRmv.get())
+ return getClass().getResourceAsStream("/" + runAll + ".xml");
+
+ if ((url.contains("app/rest/latest/buildTypes/id:" + cluster)) && !clusterRmv.get())
+ return getClass().getResourceAsStream("/" + cluster + ".xml");
+
+ throw new FileNotFoundException(url);
+ }
+ );
+
+ TeamcityIgnitedModule module = new TeamcityIgnitedModule();
+
+ module.overrideHttp(http);
+
+ Injector injector = Guice.createInjector(module, new AbstractModule() {
+ @Override protected void configure() {
+ bind(Ignite.class).toInstance(ignite);
+ bind(IScheduler.class).to(DirectExecNoWaitSheduler.class);
+ }
+ });
+
+ ITeamcityIgnited srv = injector.getInstance(ITeamcityIgnitedProvider.class).server(APACHE, creds());
+ IStringCompactor compactor = injector.getInstance(IStringCompactor.class);
+
+ TeamcityIgnitedImpl teamcityIgnited = (TeamcityIgnitedImpl)srv;
+ teamcityIgnited.fullReindex();
+
+ List<String> buildTypes = srv.getCompositeBuildTypesIdsSortedByBuildNumberCounter(projectId);
+
+ assertEquals(buildTypes.size(),1);
+
+ assertEquals(buildTypes.get(0), runAll);
+
+ List<BuildTypeRefCompacted> allBuildTypes = srv.getAllBuildTypesCompacted(projectId);
+
+ assertEquals(allBuildTypes.size(), 2);
+
+ buildTypeRmv.set(true);
+
+ buildTypes = srv.getCompositeBuildTypesIdsSortedByBuildNumberCounter(projectId);
+
+ assertTrue(buildTypes.isEmpty());
+
+ assertTrue(srv.getBuildTypeRef(runAll).removed());
+
+ clusterRmv.set(true);
+
+ srv.getAllBuildTypesCompacted(projectId);
+
+ assertTrue(srv.getBuildType(cluster).removed());
+
+ runAllRmv.set(false);
+ clusterRmv.set(false);
+ buildTypeRmv.set(false);
+
+ allBuildTypes = srv.getAllBuildTypesCompacted(projectId);
+
+ assertEquals(allBuildTypes
+ .stream()
+ .filter(bt -> !srv.getBuildType(bt.id(compactor)).removed()).count(), 2);
+
+ BuildType runAllRef = jaxbTestXml("/" + projectId + ".xml", Project.class).getBuildTypesNonNull()
+ .stream()
+ .filter(bt -> bt.getId().equals(runAll))
+ .findFirst()
+ .orElse(null);
+
+ BuildType runAllRefFromCache = srv.getBuildTypeRef(runAll).toBuildTypeRef(compactor);
+
+ assertEquals(runAllRef, runAllRefFromCache);
+
+ BuildTypeFull runAllFull = jaxbTestXml("/" + runAll + ".xml", BuildTypeFull.class);
+
+ BuildTypeFull runAllFullFromCache = srv.getBuildType(runAll).toBuildType(compactor);
+
+ assertEquals(runAllFull, runAllFullFromCache);
+ }
+
+ @Test
public void incrementalActualizationOfBuildsContainsQueued() throws IOException {
ITeamcityHttpConnection http = Mockito.mock(ITeamcityHttpConnection.class);
diff --git a/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8.xml b/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8.xml
new file mode 100644
index 0000000..9f6da74
--- /dev/null
+++ b/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<project id="IgniteTests24Java8" name="Ignite Tests 2.4+ (Java 8/9/10/11)" parentProjectId="_Root" description="Project for Ignite 2.4+ testing with Java 8 as default JDK" href="/app/rest/projects/id:IgniteTests24Java8" webUrl="http://ci.ignite.apache.org/project.html?projectId=IgniteTests24Java8">
+ <parentProject id="_Root" name="<Root project>" description="Contains all other projects" href="/app/rest/projects/id:_Root" webUrl="http://ci.ignite.apache.org/project.html?projectId=_Root"/>
+ <buildTypes count="2">
+ <buildType id="IgniteTests24Java8_RunAll" name="--> Run :: All" description="Dummy build for run all build in project by one click" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunAll" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_RunAll"/>
+ <buildType id="IgniteTests24Java8_ActivateDeactivateCluster" name="Activate | Deactivate Cluster" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ActivateDeactivateCluster" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ActivateDeactivateCluster"/>
+ </buildTypes>
+ <templates count="9">
+ <buildType id="IgniteTests24Java8_C" name="C++" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_C"/>
+ <buildType id="IgniteTests24Java8_PostBuild" name="Post-build" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PostBuild"/>
+ <buildType id="IgniteTests24Java8_PreBuild" name="Pre-build" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PreBuild"/>
+ <buildType id="IgniteTests24Java8_RunIntelliJIdeaInspectionsTemplate" name="Run IntelliJ IDEA Inspections" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunIntelliJIdeaInspectionsTemplate"/>
+ <buildType id="IgniteTests24Java8_RunTestSuitesNet" name="Run test suites (.NET)" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunTestSuitesNet"/>
+ <buildType id="IgniteTests24Java8_RunTestSuites" name="Run test suites (Java)" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunTestSuites"/>
+ <buildType id="IgniteTests24Java8_ThinClientStartIgnite" name="Thin Client: Start Ignite" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ThinClientStartIgnite"/>
+ <buildType id="IgniteTests24Java8_ThinClientStopIgnite" name="Thin Client: Stop Ignite" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ThinClientStopIgnite"/>
+ <buildType id="IgniteTests24Java8_RunTestSuites_Obsolete" name="~[Obsolete] Run test suites" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunTestSuites_Obsolete"/>
+ </templates>
+ <parameters count="1" href="/app/rest/projects/id:IgniteTests24Java8/parameters">
+ <property name="system.IGNITE_DUMP_THREADS_ON_FAILURE" value="false" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ </parameters>
+ <vcsRoots count="0" href="/app/rest/vcs-roots?locator=project:(id:IgniteTests24Java8)"/>
+ <projectFeatures count="0" href="/app/rest/projects/id:IgniteTests24Java8/projectFeatures"/>
+ <projects count="0"/>
+</project>
\ No newline at end of file
diff --git a/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_ActivateDeactivateCluster.xml b/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_ActivateDeactivateCluster.xml
new file mode 100644
index 0000000..31616c0
--- /dev/null
+++ b/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_ActivateDeactivateCluster.xml
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<buildType id="IgniteTests24Java8_ActivateDeactivateCluster" name="Activate | Deactivate Cluster" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ActivateDeactivateCluster" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ActivateDeactivateCluster">
+ <project id="IgniteTests24Java8" name="Ignite Tests 2.4+ (Java 8/9/10/11)" parentProjectId="_Root" description="Project for Ignite 2.4+ testing with Java 8 as default JDK" href="/app/rest/projects/id:IgniteTests24Java8" webUrl="http://ci.ignite.apache.org/project.html?projectId=IgniteTests24Java8"/>
+ <templates count="1">
+ <buildType id="IgniteTests24Java8_RunTestSuites_Obsolete" name="~[Obsolete] Run test suites" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunTestSuites_Obsolete"/>
+ </templates>
+ <vcs-root-entries count="1">
+ <vcs-root-entry id="GitHubApacheIgnite" inherited="true">
+ <vcs-root id="GitHubApacheIgnite" name="(proxy) GitHub [apache/ignite]" href="/app/rest/vcs-roots/id:GitHubApacheIgnite"/>
+ <checkout-rules></checkout-rules>
+ </vcs-root-entry>
+ </vcs-root-entries>
+ <settings count="4">
+ <property name="artifactRules" value="work/log => logs.zip
**/hs_err*.log => crashdumps.zip
**/core => crashdumps.zip
./**/target/rat.txt => rat.zip
/home/teamcity/ignite-startNodes/*.log => ignite-startNodes.zip
./dev-tools/IGNITE-*-*.patch => patch" inherited="true"/>
+ <property name="buildNumberCounter" value="6082"/>
+ <property name="cleanBuild" value="true" inherited="true"/>
+ <property name="executionTimeoutMin" value="120"/>
+ </settings>
+ <parameters count="13" href="/app/rest/buildTypes/id:IgniteTests24Java8_ActivateDeactivateCluster/parameters">
+ <property name="ACTUAL_VERSION" value="%dep.IgniteTests24Java8_BuildApacheIgnite.ACTUAL_VERSION%" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ <property name="env.JAVA_HOME" value="%reverse.dep.*.env.JAVA_HOME%" inherited="true">
+ <type rawValue="text validationMode='any' display='hidden'"/>
+ </property>
+ <property name="JVM_ARGS" value="-DIGNITE_MARSHAL_BUFFERS_RECHECK=1000">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ <property name="JVM_EXTRA_ARGS" value="%dep.IgniteTests24Java8_BuildApacheIgnite.JVM_EXTRA_ARGS%" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ <property name="MAVEN_GOALS" value="surefire:test" inherited="true">
+ <type rawValue="text validationMode='any' display='hidden'"/>
+ </property>
+ <property name="MAVEN_MODULES" value=":ignite-core">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ <property name="MAVEN_OPTS" value="" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ <property name="reverse.dep.*.env.JAVA_HOME" value="%env.JDK_ORA_18%" inherited="true">
+ <type rawValue="select data_5='%env.JDK_ORA_10%' label_5='JDK 10' label_3='JDK 9' data_7='%env.JDK_OPEN_11%' display='normal' label_7='JDK 11' description='Select JDK version for all tests' label='JDK version' data_1='%env.JDK_ORA_18%' label_1='JDK 1.8' data_3='%env.JDK_ORA_9%'"/>
+ </property>
+ <property name="system.IGNITE_DUMP_THREADS_ON_FAILURE" value="false" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ <property name="TEST_SCALE_FACTOR" value="1.0" inherited="true"/>
+ <property name="TEST_SUITE" value="IgniteStandByClusterSuite">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ <property name="XMS" value="2g" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ <property name="XMX" value="2g" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ </parameters>
+ <steps count="5">
+ <step id="RUNNER_264" name="Pre-build cleanup" type="simpleRunner" inherited="true">
+ <properties count="3">
+ <property name="script.content" value=":<<BATCH


:: === CMD ===
@echo on
exit /b
BATCH


# === SH ===
set -x

# Pre-clean info
echo "User: $(whoami)"
echo "JPS (before): "
for process in $(%env.JAVA_HOME%/bin/jps)
do
 echo " ${process}"
done
echo

# Kill processes
echo "Killing processes starters"
for processName in GridHadoopExt [...]
+ <property name="teamcity.step.mode" value="default"/>
+ <property name="use.custom.script" value="true"/>
+ </properties>
+ </step>
+ <step id="RUNNER_287" name="Install built artifacts to local maven repository" type="simpleRunner" inherited="true">
+ <properties count="3">
+ <property name="script.content" value=":<<BATCH


:: === CMD ===
@echo on
del /s /f /q C:\.m2\repository\org\apache\ignite
md C:\.m2\repository\org\apache\ignite\
xcopy repository\* C:\.m2\repository\org\apache\ignite\ /s
exit /b
BATCH


# === SH ===
set -x
rm -rfv ~/.m2/repository/org/apache/ignite
mkdir -pv ~/.m2/repository/org/apache/ignite
cp -rfv repository/* ~/.m2/repository/org/apache/ignite/"/>
+ <property name="teamcity.step.mode" value="default"/>
+ <property name="use.custom.script" value="true"/>
+ </properties>
+ </step>
+ <step id="RUNNER_225" name="Add JDK9+ libraries to local Maven repository (~/.m2/repository)" type="Maven2" inherited="true">
+ <properties count="10">
+ <property name="goals" value="org.apache.maven.plugins:maven-dependency-plugin:2.8:get"/>
+ <property name="maven.path" value="%teamcity.tool.maven.DEFAULT%"/>
+ <property name="pomLocation" value="pom.xml"/>
+ <property name="runnerArgs" value="-Dartifact=javax.transaction:javax.transaction-api:1.3"/>
+ <property name="teamcity.coverage.emma.include.source" value="true"/>
+ <property name="teamcity.coverage.emma.instr.parameters" value="-ix -*Test*"/>
+ <property name="teamcity.coverage.idea.includePatterns" value="*"/>
+ <property name="teamcity.coverage.jacoco.patterns" value="+:*"/>
+ <property name="teamcity.step.mode" value="default"/>
+ <property name="userSettingsSelection" value="userSettingsSelection:default"/>
+ </properties>
+ </step>
+ <step id="RUNNER_265" name="Run test suite" type="Maven2" inherited="true">
+ <properties count="12">
+ <property name="goals" value="%MAVEN_GOALS%"/>
+ <property name="jvmArgs" value="-ea
-server
-Xms%XMS%
-Xmx%XMX%
-XX:+HeapDumpOnOutOfMemoryError
-XX:+AggressiveOpts
-DIGNITE_TEST_HOME="%teamcity.build.workingDir%"
-DIGNITE_UPDATE_NOTIFIER=false
-DIGNITE_NO_DISCO_ORDER=true
-DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true
-DIGNITE_QUIET=false
-Djava.net.preferIPv4Stack=true
-DTEST_SCALE_FACTOR=%TEST_SCALE_FACTOR%
%JVM_ARGS% %JVM_EXTRA_ARGS%"/>
+ <property name="maven.path" value="%teamcity.tool.maven.3.5.3%"/>
+ <property name="pomLocation" value="pom.xml"/>
+ <property name="runnerArgs" value="-P all-java,scala-2.10,tensorflow,scala,scala-test
-pl %MAVEN_MODULES% -am
-Dmaven.test.failure.ignore=true
-DfailIfNoTests=false
-Dtest=%TEST_SUITE%
-Dmaven.javadoc.skip=true
%MAVEN_OPTS%"/>
+ <property name="teamcity.coverage.emma.include.source" value="true"/>
+ <property name="teamcity.coverage.emma.instr.parameters" value="-ix -*Test*"/>
+ <property name="teamcity.coverage.idea.includePatterns" value="*"/>
+ <property name="teamcity.coverage.jacoco.patterns" value="+:*"/>
+ <property name="teamcity.step.mode" value="default"/>
+ <property name="userSettingsPath" value="settings.xml"/>
+ <property name="userSettingsSelection" value="userSettingsSelection:default"/>
+ </properties>
+ </step>
+ <step id="RUNNER_266" name="Post-build cleanup" type="simpleRunner" inherited="true">
+ <properties count="3">
+ <property name="script.content" value=":<<BATCH


:: === CMD ===
@echo on
exit /b
BATCH


# === SH ===
set -x

# Kill remaining nodes
echo "Killing CommandLineStartup processes"
for PID in $(%env.JAVA_HOME%/bin/jps | grep CommandLineStartup | awk '{ print $1 }')
do
 echo -n " Killing remaining node process with PID ${PID}... "
 kill -9 ${PID} && echo "[OK]&q [...]
+ <property name="teamcity.step.mode" value="execute_always"/>
+ <property name="use.custom.script" value="true"/>
+ </properties>
+ </step>
+ </steps>
+ <features count="1">
+ <feature id="swabra" type="swabra" inherited="true">
+ <properties count="4">
+ <property name="swabra.enabled" value="swabra.after.build"/>
+ <property name="swabra.processes" value="kill"/>
+ <property name="swabra.strict" value="true"/>
+ <property name="swabra.verbose" value="true"/>
+ </properties>
+ </feature>
+ </features>
+ <triggers count="0"/>
+ <snapshot-dependencies count="1">
+ <snapshot-dependency id="IgniteTests24Java8_BuildApacheIgnite" type="snapshot_dependency" inherited="true">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_BuildApacheIgnite" name="~Build Apache Ignite~" description="Build and prepare project for testing" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_BuildApacheIgnite" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_BuildApacheIgnite"/>
+ </snapshot-dependency>
+ </snapshot-dependencies>
+ <artifact-dependencies count="1">
+ <artifact-dependency id="ARTIFACT_DEPENDENCY_103" type="artifact_dependency" inherited="true">
+ <properties count="4">
+ <property name="cleanDestinationDirectory" value="true"/>
+ <property name="pathRules" value="ignite.zip!** => ./"/>
+ <property name="revisionName" value="sameChainOrLastFinished"/>
+ <property name="revisionValue" value="latest.sameChainOrLastFinished"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_BuildApacheIgnite" name="~Build Apache Ignite~" description="Build and prepare project for testing" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_BuildApacheIgnite" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_BuildApacheIgnite"/>
+ </artifact-dependency>
+ </artifact-dependencies>
+ <agent-requirements count="1">
+ <agent-requirement id="RQ_72" type="does-not-match">
+ <properties count="2">
+ <property name="property-name" value="teamcity.agent.name"/>
+ <property name="property-value" value="(^publicagent05.*$)"/>
+ </properties>
+ </agent-requirement>
+ </agent-requirements>
+ <builds href="/app/rest/buildTypes/id:IgniteTests24Java8_ActivateDeactivateCluster/builds/"/>
+ <investigations href="/app/rest/investigations?locator=buildType:(id:IgniteTests24Java8_ActivateDeactivateCluster)"/>
+ <compatibleAgents href="/app/rest/agents?locator=compatible:(buildType:(id:IgniteTests24Java8_ActivateDeactivateCluster))"/>
+</buildType>
\ No newline at end of file
diff --git a/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_RunAll.xml b/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_RunAll.xml
new file mode 100644
index 0000000..24143a9
--- /dev/null
+++ b/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_RunAll.xml
@@ -0,0 +1,1035 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<buildType id="IgniteTests24Java8_RunAll" name="--> Run :: All" description="Dummy build for run all build in project by one click" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunAll" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_RunAll">
+ <project id="IgniteTests24Java8" name="Ignite Tests 2.4+ (Java 8/9/10/11)" parentProjectId="_Root" description="Project for Ignite 2.4+ testing with Java 8 as default JDK" href="/app/rest/projects/id:IgniteTests24Java8" webUrl="http://ci.ignite.apache.org/project.html?projectId=IgniteTests24Java8"/>
+ <templates count="0"/>
+ <vcs-root-entries count="1">
+ <vcs-root-entry id="GitHubApacheIgnite">
+ <vcs-root id="GitHubApacheIgnite" name="(proxy) GitHub [apache/ignite]" href="/app/rest/vcs-roots/id:GitHubApacheIgnite"/>
+ <checkout-rules>-:.</checkout-rules>
+ </vcs-root-entry>
+ </vcs-root-entries>
+ <settings count="6">
+ <property name="artifactRules" value="report.html"/>
+ <property name="buildConfigurationType" value="COMPOSITE"/>
+ <property name="buildNumberCounter" value="7008"/>
+ <property name="checkoutMode" value="ON_SERVER"/>
+ <property name="excludeDefaultBranchChanges" value="true"/>
+ <property name="showDependenciesChanges" value="true"/>
+ </settings>
+ <parameters count="3" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunAll/parameters">
+ <property name="reverse.dep.*.env.JAVA_HOME" value="%env.JDK_ORA_18%">
+ <type rawValue="select data_5='%env.JDK_ORA_10%' label_5='JDK 10' label_3='JDK 9' data_7='%env.JDK_OPEN_11%' display='normal' label_7='JDK 11' description='Select JDK version for all tests' label='JDK version' data_1='%env.JDK_ORA_18%' label_1='JDK 1.8' data_3='%env.JDK_ORA_9%'"/>
+ </property>
+ <property name="reverse.dep.*.TEST_SCALE_FACTOR" value="0.1">
+ <type rawValue="text display='normal' label='Test scale factor' validationMode='any'"/>
+ </property>
+ <property name="system.IGNITE_DUMP_THREADS_ON_FAILURE" value="false" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ </parameters>
+ <steps count="1">
+ <step id="RUNNER_184" name="" type="simpleRunner">
+ <properties count="3">
+ <property name="script.content" value="#!/usr/bin/env bash
set -x

curl "http://172.25.5.21:8080/rest/chainResults/html?serverId=public&buildId=%teamcity.build.id%" > report.html"/>
+ <property name="teamcity.step.mode" value="default"/>
+ <property name="use.custom.script" value="true"/>
+ </properties>
+ </step>
+ </steps>
+ <features count="0"/>
+ <triggers count="0"/>
+ <snapshot-dependencies count="98">
+ <snapshot-dependency id="IgniteTests24Java8_Aop" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Aop" name="AOP" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Aop" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Aop"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Aws" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Aws" name="AWS" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Aws" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Aws"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Basic2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Basic2" name="Basic 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Basic2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Basic2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_BinaryObjects" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_BinaryObjects" name="Binary Objects" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_BinaryObjects" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_BinaryObjects"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ActivateDeactivateCluster" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ActivateDeactivateCluster" name="Activate | Deactivate Cluster" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ActivateDeactivateCluster" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ActivateDeactivateCluster"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ClientNodes" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ClientNodes" name="Client Nodes" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ClientNodes" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ClientNodes"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cloud" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cloud" name="Cloud" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cloud" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cloud"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ComputeAffinityRun" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ComputeAffinityRun" name="Compute (Affinity Run)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ComputeAffinityRun" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ComputeAffinityRun"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ComputeGrid" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ComputeGrid" name="Compute (Grid)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ComputeGrid" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ComputeGrid"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ContinuousQueryConfigVariations" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ContinuousQueryConfigVariations" name="Continuous Query (Config Variations)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ContinuousQueryConfigVariations" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ContinuousQueryConfigVariations"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ContinuousQuery1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ContinuousQuery1" name="Continuous Query 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ContinuousQuery1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ContinuousQuery1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ContinuousQuery2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ContinuousQuery2" name="Continuous Query 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ContinuousQuery2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ContinuousQuery2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Examples" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Examples" name="Examples" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Examples" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Examples"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Gce" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Gce" name="GCE" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Gce" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Gce"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_GeospatialIndexing" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_GeospatialIndexing" name="Geospatial Indexing" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_GeospatialIndexing" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_GeospatialIndexing"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Hibernate1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Hibernate1" name="Hibernate 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Hibernate1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Hibernate1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Hibernate2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Hibernate2" name="Hibernate 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Hibernate2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Hibernate2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Jta" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Jta" name="JTA" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Jta" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Jta"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Kubernetes" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Kubernetes" name="Kubernetes" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Kubernetes" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Kubernetes"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_JavaClient" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_JavaClient" name="Java Client" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_JavaClient" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_JavaClient"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_InterceptorCacheFullApiConfigVariationsBasic" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_InterceptorCacheFullApiConfigVariationsBasic" name="Interceptor Cache (Full API Config Variations / Basic)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_InterceptorCacheFullApiConfigVariationsBasic" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_InterceptorCacheFullApiConfigVariationsBasic"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Logging" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Logging" name="Logging" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Logging" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Logging"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_JavaThinClient" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_JavaThinClient" name="Thin Client: Java" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_JavaThinClient" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_JavaThinClient"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_JdbcDriver" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_JdbcDriver" name="JDBC Driver" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_JdbcDriver" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_JdbcDriver"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_QueriesConfigVariations" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_QueriesConfigVariations" name="Queries (Config Variations)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_QueriesConfigVariations" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_QueriesConfigVariations"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Rdd" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Rdd" name="RDD*" description="Requires 'test' maven goal for correct passing" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Rdd" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Rdd"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Queries2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Queries2" name="Queries 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Queries2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Queries2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Spring" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Spring" name="Spring" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Spring" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Spring"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_SpringData" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_SpringData" name="Spring (Data)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_SpringData" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_SpringData"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Streamers" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Streamers" name="Streamers" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Streamers" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Streamers"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_StartNodes" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_StartNodes" name="Start Nodes" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_StartNodes" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_StartNodes"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Spi" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Spi" name="SPI" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Spi" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Spi"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_SpiUriDeploy" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_SpiUriDeploy" name="SPI (URI Deploy)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_SpiUriDeploy" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_SpiUriDeploy"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_WebSessions" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_WebSessions" name="Web Sessions" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_WebSessions" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_WebSessions"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Yarn" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Yarn" name="Yarn" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Yarn" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Yarn"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ZooKeeper" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ZooKeeper" name="ZooKeeper" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ZooKeeper" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ZooKeeper"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ScalaExamples" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ScalaExamples" name="Scala (Examples)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ScalaExamples" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ScalaExamples"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ScalaVisorConsole" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ScalaVisorConsole" name="Scala (Visor Console)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ScalaVisorConsole" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ScalaVisorConsole"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ZooKeeperDiscovery1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ZooKeeperDiscovery1" name="ZooKeeper (Discovery) 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ZooKeeperDiscovery1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ZooKeeperDiscovery1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ZooKeeperDiscovery2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ZooKeeperDiscovery2" name="ZooKeeper (Discovery) 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ZooKeeperDiscovery2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ZooKeeperDiscovery2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformCLinux" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformCLinux" name="Platform C++ (Linux)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformCLinux" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformCLinux"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformCWindowsX64" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformCWindowsX64" name="Platform C++ (Windows x64)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformCWindowsX64" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformCWindowsX64"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ThinClientNodeJs" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ThinClientNodeJs" name="Thin client: Node.js" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ThinClientNodeJs" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ThinClientNodeJs"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ContinuousQueryConfigVariations5Nodes1Backup" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ContinuousQueryConfigVariations5Nodes1Backup" name="Continuous Query (Config Variations 5 Nodes 1 Backup)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ContinuousQueryConfigVariations5Nodes1Backup" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ContinuousQueryConfigVariations5Nodes1Backup"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Basic1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Basic1" name="Basic 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Basic1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Basic1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_BasicTestsWithPersistence" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_BasicTestsWithPersistence" name="Basic 3" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_BasicTestsWithPersistence" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_BasicTestsWithPersistence"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_JCacheTck11" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_JCacheTck11" name="JCache TCK 1.1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_JCacheTck11" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_JCacheTck11"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformCPPLinuxClang" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformCPPLinuxClang" name="Platform C++ (Linux Clang)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformCPPLinuxClang" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformCPPLinuxClang"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_MvccCache_2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_MvccCache_2" name="MVCC Cache" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_MvccCache_2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_MvccCache_2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_MvccCache" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_MvccCache" name="MVCC JDBC" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_MvccCache" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_MvccCache"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_MvccQueries" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_MvccQueries" name="MVCC Queries" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_MvccQueries" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_MvccQueries"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ThinClientPhp" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ThinClientPhp" name="Thin client: PHP" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ThinClientPhp" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ThinClientPhp"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Javadoc" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Javadoc" name="_Javadoc_" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Javadoc" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Javadoc"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_LicensesHeaders" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_LicensesHeaders" name="_Licenses Headers_" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_LicensesHeaders" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_LicensesHeaders"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheDeadlockDetection" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheDeadlockDetection" name="Cache (Deadlock Detection)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheDeadlockDetection" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheDeadlockDetection"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheExpiryPolicy" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheExpiryPolicy" name="Cache (Expiry Policy)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheExpiryPolicy" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheExpiryPolicy"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheFailoverSsl" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheFailoverSsl" name="Cache (Failover SSL)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheFailoverSsl" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheFailoverSsl"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheFailover1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheFailover1" name="Cache (Failover) 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheFailover1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheFailover1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheFailover2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheFailover2" name="Cache (Failover) 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheFailover2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheFailover2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheFailover3" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheFailover3" name="Cache (Failover) 3" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheFailover3" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheFailover3"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheFullApiMultiJvm" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheFullApiMultiJvm" name="Cache (Full API Multi JVM)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheFullApiMultiJvm" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheFullApiMultiJvm"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheFullApi" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheFullApi" name="Cache (Full API)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheFullApi" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheFullApi"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheRestarts1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheRestarts1" name="Cache (Restarts) 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheRestarts1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheRestarts1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheRestarts2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheRestarts2" name="Cache (Restarts) 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheRestarts2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheRestarts2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_CacheTxRecovery" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_CacheTxRecovery" name="Cache (Tx Recovery)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_CacheTxRecovery" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_CacheTxRecovery"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache1" name="Cache 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache2" name="Cache 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache3" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache3" name="Cache 3" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache3" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache3"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache4" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache4" name="Cache 4" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache4" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache4"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache5" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache5" name="Cache 5" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache5" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache5"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache6" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache6" name="Cache 6" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache6" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache6"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache7" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache7" name="Cache 7" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache7" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache7"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache8" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache8" name="Cache 8" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache8" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache8"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Cache9" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Cache9" name="Cache 9" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Cache9" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Cache9"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PageEvictions" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PageEvictions" name="Cache Evictions" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PageEvictions" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PageEvictions"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ContinuousQuery3" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ContinuousQuery3" name="Continuous Query 3" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ContinuousQuery3" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ContinuousQuery3"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ContinuousQuery4" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ContinuousQuery4" name="Continuous Query 4" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ContinuousQuery4" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ContinuousQuery4"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_DataStructures" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_DataStructures" name="Data Structures" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_DataStructures" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_DataStructures"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_OSGi" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_OSGi" name="OSGi" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_OSGi" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_OSGi"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PdsCompatibility" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PdsCompatibility" name="PDS (Compatibility)*" description="Requires 'test' maven goal for correct passing" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PdsCompatibility" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PdsCompatibility"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PdsIndexingWalRecovery" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PdsIndexingWalRecovery" name="PDS (Indexing / WAL & Recovery)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PdsIndexingWalRecovery" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PdsIndexingWalRecovery"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PdsIndexing" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PdsIndexing" name="PDS (Indexing)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PdsIndexing" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PdsIndexing"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PdsUnitTests" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PdsUnitTests" name="PDS (Unit Tests)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PdsUnitTests" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PdsUnitTests"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Pds1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Pds1" name="PDS 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Pds1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Pds1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Pds2" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Pds2" name="PDS 2" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Pds2" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Pds2"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Pds3" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Pds3" name="PDS 3" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Pds3" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Pds3"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Pds4" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Pds4" name="PDS 4" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Pds4" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Pds4"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformNet" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformNet" name="Platform .NET" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformNet" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformNet"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformNetCoreLinux" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformNetCoreLinux" name="Platform .NET (Core Linux)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformNetCoreLinux" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformNetCoreLinux"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformNetInspections" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformNetInspections" name="Platform .NET (Inspections)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformNetInspections" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformNetInspections"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformNetIntegrations" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformNetIntegrations" name="Platform .NET (Integrations)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformNetIntegrations" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformNetIntegrations"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformNetLongRunning" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformNetLongRunning" name="Platform .NET (Long Running)" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformNetLongRunning" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformNetLongRunning"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_PlatformNetNuGet" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_PlatformNetNuGet" name="Platform .NET (NuGet)*" description="Disabled dependency" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PlatformNetNuGet" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_PlatformNetNuGet"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_Queries1" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_Queries1" name="Queries 1" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_Queries1" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_Queries1"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ThinClientPython" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ThinClientPython" name="Thin client: Python" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ThinClientPython" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ThinClientPython"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_RunIntelliJIdeaInspections" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_RunIntelliJIdeaInspections" name="-> Run :: IntelliJ IDEA Inspections" description="Composite build for all IntelliJ IDEA Inspections build configurations" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunIntelliJIdeaInspections" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_RunIntelliJIdeaInspections"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ZooKeeperDiscovery3" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ZooKeeperDiscovery3" name="ZooKeeper (Discovery) 3" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ZooKeeperDiscovery3" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ZooKeeperDiscovery3"/>
+ </snapshot-dependency>
+ <snapshot-dependency id="IgniteTests24Java8_ZooKeeperDiscovery4" type="snapshot_dependency">
+ <properties count="5">
+ <property name="run-build-if-dependency-failed" value="RUN_ADD_PROBLEM"/>
+ <property name="run-build-if-dependency-failed-to-start" value="MAKE_FAILED_TO_START"/>
+ <property name="run-build-on-the-same-agent" value="false"/>
+ <property name="take-started-build-with-same-revisions" value="true"/>
+ <property name="take-successful-builds-only" value="true"/>
+ </properties>
+ <source-buildType id="IgniteTests24Java8_ZooKeeperDiscovery4" name="ZooKeeper (Discovery) 4" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ZooKeeperDiscovery4" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ZooKeeperDiscovery4"/>
+ </snapshot-dependency>
+ </snapshot-dependencies>
+ <artifact-dependencies count="0"/>
+ <agent-requirements count="1">
+ <agent-requirement id="RQ_29" type="equals">
+ <properties count="2">
+ <property name="property-name" value="teamcity.agent.jvm.os.name"/>
+ <property name="property-value" value="Linux"/>
+ </properties>
+ </agent-requirement>
+ </agent-requirements>
+ <builds href="/app/rest/buildTypes/id:IgniteTests24Java8_RunAll/builds/"/>
+ <investigations href="/app/rest/investigations?locator=buildType:(id:IgniteTests24Java8_RunAll)"/>
+ <compatibleAgents href="/app/rest/agents?locator=compatible:(buildType:(id:IgniteTests24Java8_RunAll))"/>
+</buildType>
\ No newline at end of file
diff --git a/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_v2.xml b/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_v2.xml
new file mode 100644
index 0000000..22d8811
--- /dev/null
+++ b/ignite-tc-helper-web/src/test/resources/IgniteTests24Java8_v2.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<project id="IgniteTests24Java8" name="Ignite Tests 2.4+ (Java 8/9/10/11)" parentProjectId="_Root" description="Project for Ignite 2.4+ testing with Java 8 as default JDK" href="/app/rest/projects/id:IgniteTests24Java8" webUrl="http://ci.ignite.apache.org/project.html?projectId=IgniteTests24Java8">
+ <parentProject id="_Root" name="<Root project>" description="Contains all other projects" href="/app/rest/projects/id:_Root" webUrl="http://ci.ignite.apache.org/project.html?projectId=_Root"/>
+ <buildTypes count="1">
+ <buildType id="IgniteTests24Java8_ActivateDeactivateCluster" name="Activate | Deactivate Cluster" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ActivateDeactivateCluster" webUrl="http://ci.ignite.apache.org/viewType.html?buildTypeId=IgniteTests24Java8_ActivateDeactivateCluster"/>
+ </buildTypes>
+ <templates count="9">
+ <buildType id="IgniteTests24Java8_C" name="C++" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_C"/>
+ <buildType id="IgniteTests24Java8_PostBuild" name="Post-build" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PostBuild"/>
+ <buildType id="IgniteTests24Java8_PreBuild" name="Pre-build" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_PreBuild"/>
+ <buildType id="IgniteTests24Java8_RunIntelliJIdeaInspectionsTemplate" name="Run IntelliJ IDEA Inspections" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunIntelliJIdeaInspectionsTemplate"/>
+ <buildType id="IgniteTests24Java8_RunTestSuitesNet" name="Run test suites (.NET)" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunTestSuitesNet"/>
+ <buildType id="IgniteTests24Java8_RunTestSuites" name="Run test suites (Java)" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunTestSuites"/>
+ <buildType id="IgniteTests24Java8_ThinClientStartIgnite" name="Thin Client: Start Ignite" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ThinClientStartIgnite"/>
+ <buildType id="IgniteTests24Java8_ThinClientStopIgnite" name="Thin Client: Stop Ignite" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_ThinClientStopIgnite"/>
+ <buildType id="IgniteTests24Java8_RunTestSuites_Obsolete" name="~[Obsolete] Run test suites" templateFlag="true" projectName="Ignite Tests 2.4+ (Java 8/9/10/11)" projectId="IgniteTests24Java8" href="/app/rest/buildTypes/id:IgniteTests24Java8_RunTestSuites_Obsolete"/>
+ </templates>
+ <parameters count="1" href="/app/rest/projects/id:IgniteTests24Java8/parameters">
+ <property name="system.IGNITE_DUMP_THREADS_ON_FAILURE" value="false" inherited="true">
+ <type rawValue="text display='hidden' validationMode='any'"/>
+ </property>
+ </parameters>
+ <vcsRoots count="0" href="/app/rest/vcs-roots?locator=project:(id:IgniteTests24Java8)"/>
+ <projectFeatures count="0" href="/app/rest/projects/id:IgniteTests24Java8/projectFeatures"/>
+ <projects count="0"/>
+</project>
\ No newline at end of file