[GitHub] asfgit closed pull request #78: IGNITE-10203 Support for alternative configurations for PR testing

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[GitHub] asfgit closed pull request #78: IGNITE-10203 Support for alternative configurations for PR testing

GitBox
asfgit closed pull request #78: IGNITE-10203 Support for alternative configurations for PR testing
URL: https://github.com/apache/ignite-teamcity-bot/pull/78
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 75868d1f..bab8d36b 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.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 @@
     @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 6a85ddfc..3927fa55 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.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;
@@ -261,8 +262,15 @@ public static int getTriggerRelCacheValidSecs(int defaultSecs) {
     @AutoProfiling
     @Override public Build getBuild(String href) {
         final IgniteCache<String, Build> cache = buildsCache();
+        Build build = null;
+        try {
+            build = cache.get(href);
+        } catch (Throwable e) {
+            System.out.println("Errrror");
+            e.printStackTrace();
+        }
 
-        @Nullable final Build persistedBuild = cache.get(href);
+        @Nullable final Build persistedBuild = build;
 
         int fields = ObjectInterner.internFields(persistedBuild);
 
@@ -594,6 +602,11 @@ public Executor getExecutor() {
         return teamcity.getChange(changeId);
     }
 
+    /** {@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 e6fade71..ce5a3190 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.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 void init(@Nullable String tcName) {
         }
     }
 
-
-
     @SuppressWarnings("WeakerAccess")
     @AutoProfiling
     protected <T> T loadXml(Class<T> rootElem, InputStreamReader reader) throws JAXBException {
@@ -431,8 +433,9 @@ public String getDateYyyyMmDdTHhMmSsZ(Date date){
             .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 ae718ccc..553910c3 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.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 @@ private BranchesTracked getTrackedBranches() {
             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 @@ private BranchesTracked getTrackedBranches() {
      * @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) {
@@ -247,16 +252,16 @@ else if (recent.failures != null && recent.runs != null) {
         }
 
         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 976cf3c5..40e33011 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 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 62dfc3f0..a7108705 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 @@
     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 8edf8364..7a00e31f 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.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.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 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 void startObserver() {
         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 void startObserver() {
             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 SimpleResult commentJiraEx(
         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 SimpleResult commentJiraEx(
         }).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 SimpleResult commentJiraEx(
         if (!buildHist.isEmpty())
             return buildHist;
 
-        //todo multibranch requestst
         buildHist = srv.getAllBuildsCompacted(suiteId, branchForTcB(prId));
 
         if (!buildHist.isEmpty())
@@ -367,55 +377,78 @@ String branchForTcB(String prId) {
     /**
      * @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);
+
+        List<BuildRefCompacted> forTests;
+
+        for (String buildType : compositeBuildTypes) {
+            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 e20c52b6..5a3cb2df 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
@@ -44,6 +44,12 @@
     /** */
     @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 234b4414..3f7a0ef9 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 @@
 
     @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 e9e57f01..73360beb 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.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 @@
  */
 @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 String getParameter(String key) {
         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 String getParameter(String key) {
 
         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 0d4e5138..de93c4b3 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 @@
     @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 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 a3ee6512..af4b2c7d 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 @@
     @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 String getValue() {
     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 666e7bfd..f35629cb 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 @@
 
     @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 4be95a7a..983a9b49 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 String getProperty(String id) {
     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 026b7e68..12a1cae6 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.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 5bf5b664..d7c59606 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 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.FatBuildTypeCompacted;
 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 default FatBuildCompacted getFatBuild(int id) {
      * @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 FatBuildTypeCompacted 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 215802f6..c744ed4d 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.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.FatBuildTypeCompacted;
+import org.apache.ignite.ci.teamcity.ignited.buildtype.FatBuildTypeDao;
 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 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 @@
     /** Changes DAO. */
     @Inject private ChangeSync changeSync;
 
+    /** BuildType reference DAO. */
+    @Inject private BuildTypeRefDao buildTypeRefDao;
+
+    /** BuildType DAO. */
+    @Inject private FatBuildTypeDao fatBuildTypeDao;
+
+    /** BuildType DAO. */
+    @Inject private BuildTypeSync buildTypeSync;
+
     /** Changes DAO. */
     @Inject private IStringCompactor compactor;
 
@@ -106,7 +123,6 @@ public void init(String srvId, ITeamcityConn conn) {
         changesDao.init();
     }
 
-
     @NotNull
     private String taskName(String taskName) {
         return ITeamcityIgnited.class.getSimpleName() +"." + taskName + "." + srvNme;
@@ -308,6 +324,26 @@ else if (midValStartDate.before(key))
         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 FatBuildTypeCompacted getBuildType(String buildTypeId) {
+        return fatBuildTypeDao.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 ceb427fd..b96fe7c0 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 @@
 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.FatBuildTypeDao;
 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 @@
         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(FatBuildTypeDao.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/BuildTypeRefCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/BuildTypeRefCompacted.java
new file mode 100644
index 00000000..185bddc2
--- /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 00000000..4e15b885
--- /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.FatBuildTypeDao.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 00000000..05987fbb
--- /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 FatBuildTypeDao fatBuildTypeDao;
+
+    /** 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 :
+            fatBuildTypeDao.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 =
+                fatBuildTypeDao.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);
+
+                    FatBuildTypeCompacted exBuildType = fatBuildTypeDao.getFatBuildType(srvIdMaskHigh, id);
+
+                    updated += (fatBuildTypeDao.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) {
+        FatBuildTypeCompacted existingBuildType = fatBuildTypeDao.getFatBuildType(srvIdMaskHigh, buildTypeId);
+
+        if (existingBuildType != null) {
+            existingBuildType.markRemoved();
+
+            return fatBuildTypeDao.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/FatBuildTypeCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/FatBuildTypeCompacted.java
new file mode 100644
index 00000000..f090a1c1
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/FatBuildTypeCompacted.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 FatBuildTypeCompacted 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 FatBuildTypeCompacted(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 FatBuildTypeCompacted))
+            return false;
+
+        if (!super.equals(o))
+            return false;
+
+        FatBuildTypeCompacted that = (FatBuildTypeCompacted)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/FatBuildTypeDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/FatBuildTypeDao.java
new file mode 100644
index 00000000..c56780c6
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/FatBuildTypeDao.java
@@ -0,0 +1,227 @@
+/*
+ * 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 FatBuildTypeDao {
+    /** 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, FatBuildTypeCompacted> 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 FatBuildTypeCompacted saveBuildType(int srvIdMaskHigh,
+        @NotNull BuildTypeFull buildType,
+        @Nullable FatBuildTypeCompacted existingBuildType) {
+        Preconditions.checkNotNull(buildType, "buildType can't be null");
+
+        FatBuildTypeCompacted newBuildType = new FatBuildTypeCompacted(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, FatBuildTypeCompacted refCompacted) {
+        long cacheKey = buildTypeStringIdToCacheKey(srvIdMaskHigh, refCompacted.id());
+
+        FatBuildTypeCompacted 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 FatBuildTypeCompacted 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<FatBuildTypeCompacted> 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<FatBuildTypeCompacted> buildTypesCompactedStream(int srvIdMaskHigh, @Nullable String projectId) {
+        Stream<FatBuildTypeCompacted> 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<FatBuildTypeCompacted> 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<FatBuildTypeCompacted> compositeBuildTypesCompactedSortedByBuildNumberCounter(int srvIdMaskHigh, @Nullable String projectId) {
+        List<FatBuildTypeCompacted> res = compositeBuildTypesCompacted(srvIdMaskHigh, projectId);
+
+        Comparator<FatBuildTypeCompacted> comp = Comparator
+            .comparingInt(FatBuildTypeCompacted::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<FatBuildTypeCompacted> 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/ParametersCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildtype/ParametersCompacted.java
new file mode 100644
index 00000000..bf6f65e5
--- /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 00000000..085de7b9
--- /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 bd4ec173..56f03a0a 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 @@ private void fillBuildFields(IStringCompactor compactor, Build res) {
             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 63555284..c2884ed9 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 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 @@
 
     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/util/NumberUtil.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/NumberUtil.java
new file mode 100644
index 00000000..e02bb493
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/util/NumberUtil.java
@@ -0,0 +1,37 @@
+/*
+ * 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.util;
+
+import javax.annotation.Nullable;
+
+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 87ae388f..0c023b02 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.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 @@
  */
 @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 f70975dc..adf2c7b3 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 @@
 
 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 boolean stopObservation(@NotNull @QueryParam("server") String srv,
 
     @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 ContributionCheckStatus contributionStatus(@Nullable @QueryParam("serverI
         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 e73c60d9..c7014cfe 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 eead52c5..0fdf5d78 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 5ebd3dc6..62849270 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 cc8a9501..9b77b7f6 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>
@@ -141,6 +142,16 @@
                 "data": "ticket",
                 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",
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 83dd6c3d..7d57d283 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 Build createBuild(String btId, String branch, int id, int ageMs) {
         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 a0d236ae..6aa39bcb 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.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.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;
@@ -162,6 +166,108 @@ public void saveAndLoadBuildReference() throws IOException {
         );
     }
 
+    @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 00000000..9f6da741
--- /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 00000000..31616c00
--- /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
GridHadoopExternalProcessStarter HadoopExternalProcessStarter
MainWithArgsInFile&#xA;do&#xA;    for PID in $(%env.JAVA_HOME%/bin/jps
| grep ${processName} | awk '{ print $1 }')&#xA;    do&#xA;        echo
-n &quot;    Killing ${processName} process with PID ${PID}...
&quot;&#xA;        processInfo=&quot;$(ps aux -p $PID)&quot;&#xA;      
 kill -9 ${PID} &amp;&amp; echo &quot;[OK]&quot; || {&#xA;          
echo &quot;[ERROR] Unable to kill process ${PID}&quot; &amp;&amp; exit
1&#xA;        }&#xA;        echo &quot;        Killed process info:
${processInfo}&quot;&#xA;    done&#xA;done&#xA;echo&#xA;echo
&quot;Killing IgniteNodeRunner processes (before tests)&quot;&#xA;for
PID in $(%env.JAVA_HOME%/bin/jps | grep IgniteNodeRunner | awk '{ print
$1 }')&#xA;do&#xA;    echo -n &quot;    Killing process with PID
${PID}... &quot;&#xA;    kill -9 ${PID} &amp;&amp; echo
&quot;[OK]&quot; || {&#xA;        echo &quot;[ERROR] Unable to kill
process ${PID}&quot; &amp;&amp; exit 1&#xA;  
}&#xA;done&#xA;echo&#xA;&#xA;# Post-clean info&#xA;echo &quot;JPS
(after): &quot;&#xA;for process in
$(%env.JAVA_HOME%/bin/jps)&#xA;do&#xA;    echo &quot;  
${process}&quot;&#xA;done&#xA;echo&#xA;&#xA;# ULimit&#xA;ulimit -n
65535 &amp;&amp; echo &quot;Max number of OPEN FILE DESCRIPTORS:      
   $(ulimit -n)&quot;&#xA;ulimit -u 65535 &amp;&amp; echo &quot;Max
number of SINGLE USER AVAILABLE PROCESSES: $(ulimit
-u)&quot;&#xA;echo&#xA;&#xA;# Finalize IPC cleaning&#xA;echo
&quot;Cleaning IPC resources&quot;&#xA;for param in m s&#xA;do&#xA;  
for ipcs in $(ipcs -${param} | grep 'teamcity' | awk '{ print $2
}')&#xA;    do&#xA;        ipcrm -${param} ${ipcs} || {&#xA;          
echo &quot;[ERROR] Unable to remove ${param}/${ipcs}&quot; &amp;&amp;
exit 1&#xA;        }&#xA;    done&#xA;done"/>
+                <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]&quot; || {&#xA;        echo &quot;[ERROR] Unable to kill process ${PID}&quot; &amp;&amp; exit 1&#xA;    }&#xA;done&#xA;echo&#xA;&#xA;# Finalize IPC cleaning&#xA;echo &quot;Cleaning IPC resources&quot;&#xA;for param in m s&#xA;do&#xA;    for ipcs in $(ipcs -${param} | grep 'teamcity' | awk '{ print $2 }')&#xA;    do&#xA;        ipcrm -${param} ${ipcs} || {&#xA;            echo &quot;[ERROR] Unable to remove ${param}/${ipcs}&quot; &amp;&amp; exit 1&#xA;        }&#xA;    done&#xA;done&#xA;echo&#xA;&#xA;# Fail build if some IPC still remains&#xA;if [ $(ipcs | grep teamcity | wc -l) -ne 0 ]&#xA;then&#xA;    echo &quot;[ERROR] Failing build because of remaining IPC resources&quot; &gt;&amp;2&#xA;    exit 1&#xA;fi&#xA;&#xA;# Kill IgniteNodeRunner&#xA;echo &quot;Killing IgniteNodeRunner processes (after tests)&quot;&#xA;for PID in $(%env.JAVA_HOME%/bin/jps | grep IgniteNodeRunner | awk '{ print $1 }')&#xA;do&#xA;    echo -n &quot;    Killing process with PID ${PID}... &quot;&#xA;    kill -9 ${PID} &amp;&amp; echo &quot;[OK]&quot; || {&#xA;        echo &quot;[ERROR] Unable to kill process ${PID}&quot; &amp;&amp; exit 1&#xA;    }&#xA;done"/>
+                <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 00000000..24143a9c
--- /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;<a href="http://172.25.5.21:8080/rest/chainResults/html?serverId=public&amp;buildId=%teamcity.build.id%&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 00000000..22d8811b
--- /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


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[hidden email]


With regards,
Apache Git Services