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>&nbsp;&nbsp;";
 
         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="&lt;Root project&gt;" 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="--&gt; 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 =&gt; logs.zip&#xA;**/hs_err*.log =&gt; crashdumps.zip&#xA;**/core =&gt; crashdumps.zip&#xA;./**/target/rat.txt =&gt; rat.zip&#xA;/home/teamcity/ignite-startNodes/*.log =&gt; ignite-startNodes.zip&#xA;./dev-tools/IGNITE-*-*.patch =&gt; 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=":&lt;&lt;BATCH&#xA;&#xA;&#xA;:: === CMD ===&#xA;@echo on&#xA;exit /b&#xA;BATCH&#xA;&#xA;&#xA;# === SH ===&#xA;set -x&#xA;&#xA;# Pre-clean info&#xA;echo &quot;User: $(whoami)&quot;&#xA;echo &quot;JPS (before): &quot;&#xA;for process in $(%env.JAVA_HOME%/bin/jps)&#xA;do&#xA;    echo &quot;    ${process}&quot;&#xA;done&#xA;echo&#xA;&#xA;# Kill processes&#xA;echo &quot;Killing processes starters&quot;&#xA;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=":&lt;&lt;BATCH&#xA;&#xA;&#xA;:: === CMD ===&#xA;@echo on&#xA;del /s /f /q C:\.m2\repository\org\apache\ignite&#xA;md C:\.m2\repository\org\apache\ignite\&#xA;xcopy repository\* C:\.m2\repository\org\apache\ignite\ /s&#xA;exit /b&#xA;BATCH&#xA;&#xA;&#xA;# === SH ===&#xA;set -x&#xA;rm -rfv ~/.m2/repository/org/apache/ignite&#xA;mkdir -pv ~/.m2/repository/org/apache/ignite&#xA;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&#xA;-server&#xA;-Xms%XMS%&#xA;-Xmx%XMX%&#xA;-XX:+HeapDumpOnOutOfMemoryError&#xA;-XX:+AggressiveOpts&#xA;-DIGNITE_TEST_HOME=&quot;%teamcity.build.workingDir%&quot;&#xA;-DIGNITE_UPDATE_NOTIFIER=false&#xA;-DIGNITE_NO_DISCO_ORDER=true&#xA;-DIGNITE_PERFORMANCE_SUGGESTIONS_DISABLED=true&#xA;-DIGNITE_QUIET=false&#xA;-Djava.net.preferIPv4Stack=true&#xA;-DTEST_SCALE_FACTOR=%TEST_SCALE_FACTOR%&#xA;%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&#xA;-pl %MAVEN_MODULES% -am&#xA;-Dmaven.test.failure.ignore=true&#xA;-DfailIfNoTests=false&#xA;-Dtest=%TEST_SUITE%&#xA;-Dmaven.javadoc.skip=true&#xA;%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=":&lt;&lt;BATCH&#xA;&#xA;&#xA;:: === CMD ===&#xA;@echo on&#xA;exit /b&#xA;BATCH&#xA;&#xA;&#xA;# === SH ===&#xA;set -x&#xA;&#xA;# Kill remaining nodes&#xA;echo &quot;Killing CommandLineStartup processes&quot;&#xA;for PID in $(%env.JAVA_HOME%/bin/jps | grep CommandLineStartup | awk '{ print $1 }')&#xA;do&#xA;    echo -n &quot;    Killing remaining node process with PID ${PID}... &quot;&#xA;    kill -9 ${PID} &amp;&amp; echo &quot;[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!** =&gt; ./"/>
+                <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="--&gt; 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&#xA;set -x&#xA;&#xA;curl &quot;http://172.25.5.21:8080/rest/chainResults/html?serverId=public&amp;buildId=%teamcity.build.id%&quot; &gt; 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 &amp; 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="-&gt; 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="&lt;Root project&gt;" 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