You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2018/11/28 17:19:40 UTC

[ignite-teamcity-bot] branch ignite-9542-new-run-stripe updated: IGNITE-9542 Preparing new method for suite history

This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch ignite-9542-new-run-stripe
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git


The following commit(s) were added to refs/heads/ignite-9542-new-run-stripe by this push:
     new 80dfe16  IGNITE-9542 Preparing new method for suite history
80dfe16 is described below

commit 80dfe1654943afd9c3814810f79ffca2d6e84a6a
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Wed Nov 28 20:19:37 2018 +0300

    IGNITE-9542 Preparing new method for suite history
---
 .../org/apache/ignite/ci/analysis/RunStat.java     | 20 +--------
 .../ignite/ci/di/scheduler/TcBotScheduler.java     |  7 +++-
 .../ignite/ci/teamcity/ignited/IRunHistory.java    | 19 +++++++++
 .../ci/teamcity/ignited/ITeamcityIgnited.java      |  5 +++
 .../ci/teamcity/ignited/TeamcityIgnitedImpl.java   | 10 ++++-
 .../teamcity/ignited/runhist/InvocationData.java   | 32 +++++++++++++--
 .../teamcity/ignited/runhist/RunHistCompacted.java | 16 +++++---
 .../ignited/runhist/RunHistCompactedDao.java       | 47 +++++++++++++++++++---
 .../ci/teamcity/ignited/runhist/RunHistKey.java    | 21 +++++++---
 .../ci/teamcity/ignited/runhist/RunHistSync.java   | 25 +++++++-----
 .../ci/web/model/current/SuiteCurrentStatus.java   | 28 ++++++++-----
 .../ignite/ci/web/model/current/TestFailure.java   |  2 +-
 12 files changed, 171 insertions(+), 61 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/RunStat.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/RunStat.java
index 0f116ba..72d17b6 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/RunStat.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/analysis/RunStat.java
@@ -187,17 +187,6 @@ public class RunStat implements IRunHistory {
 
 
 
-    /**
-     * @return float representing fail rate
-     */
-    public float getCriticalFailRate() {
-        int runs = getRunsCount();
-
-        if (runs == 0)
-            return 1.0f;
-
-        return 1.0f * getCriticalFailuresCount() / runs;
-    }
 
     @Override public int getFailuresCount() {
         if (latestRuns == null)
@@ -206,7 +195,7 @@ public class RunStat implements IRunHistory {
         return (int)latestRuns.values().stream().filter(res -> res.status != RES_OK).count();
     }
 
-    public int getCriticalFailuresCount() {
+    @Override public int getCriticalFailuresCount() {
         if (latestRuns == null)
             return 0;
 
@@ -217,13 +206,6 @@ public class RunStat implements IRunHistory {
         return latestRuns == null ? 0 : latestRuns.size();
     }
 
-
-    public String getCriticalFailPercentPrintable() {
-        return IRunHistory.getPercentPrintable(getCriticalFailRate() * 100.0f);
-    }
-
-
-
     public long getAverageDurationMs() {
         if (runsWithDuration == 0)
             return 0;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/TcBotScheduler.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/TcBotScheduler.java
index e1a56da..959c840 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/TcBotScheduler.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/TcBotScheduler.java
@@ -49,12 +49,15 @@ class TcBotScheduler implements IScheduler {
     /** Submit named task checker guard. */
     private AtomicBoolean tickGuard = new AtomicBoolean();
 
+    /** Named tasks. */
     private final ConcurrentMap<String, NamedTask> namedTasks = new ConcurrentHashMap<>();
 
+    /** {@inheritDoc} */
     @Override public void invokeLater(Runnable cmd, long delay, TimeUnit unit) {
         service().schedule(cmd, delay, unit);
     }
 
+    /** {@inheritDoc} */
     @Override public void sheduleNamed(String fullName, Runnable cmd, long queitPeriod, TimeUnit unit) {
         NamedTask task = namedTasks.computeIfAbsent(fullName, NamedTask::new);
 
@@ -62,7 +65,7 @@ class TcBotScheduler implements IScheduler {
 
         if (tickGuard.compareAndSet(false, true)) {
             for (int threadId = 0; threadId < POOL_SIZE; threadId++) {
-                String threadNme = ", runner" + Strings.padStart(Integer.toString(threadId), 2, '0');
+                String threadNme = "Runner " + Strings.padStart(Integer.toString(threadId), 2, '0');
                 int period = 15000 + ThreadLocalRandom.current().nextInt(10000);
                 service().scheduleAtFixedRate(() -> checkNamedTasks(threadNme), 0, period, TimeUnit.MILLISECONDS);
             }
@@ -70,7 +73,7 @@ class TcBotScheduler implements IScheduler {
     }
 
     /**
-     * @param threadNme
+     * @param threadNme Runner name to be used in display.
      */
     @SuppressWarnings({"UnusedReturnValue", "WeakerAccess"})
     @MonitoredTask(name = "Scheduled", nameExtArgIndex = 0)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IRunHistory.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IRunHistory.java
index e55b92b..5f27621 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IRunHistory.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IRunHistory.java
@@ -65,4 +65,23 @@ public interface IRunHistory {
     List<Integer> getLatestRunResults();
 
     String getFlakyComments();
+
+    public default String getCriticalFailPercentPrintable() {
+        return IRunHistory.getPercentPrintable(getCriticalFailRate() * 100.0f);
+    }
+
+    /**
+     * @return float representing fail rate
+     */
+    public default float getCriticalFailRate() {
+        int runs = getRunsCount();
+
+        if (runs == 0)
+            return 1.0f;
+
+        return 1.0f * getCriticalFailuresCount() / runs;
+    }
+
+
+    public int getCriticalFailuresCount();
 }
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 ac1877b..dd4896d 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
@@ -21,6 +21,8 @@ import java.util.Date;
 import java.util.List;
 import javax.annotation.Nullable;
 
+import org.apache.ignite.ci.analysis.RunStat;
+import org.apache.ignite.ci.analysis.SuiteInBranch;
 import org.apache.ignite.ci.analysis.TestInBranch;
 import org.apache.ignite.ci.tcmodel.result.Build;
 import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
@@ -126,4 +128,7 @@ public interface ITeamcityIgnited {
 
     @Nullable
     IRunHistory getTestRunHist(TestInBranch testInBranch);
+
+    @Nullable
+    IRunHistory getSuiteRunHist(SuiteInBranch branch);
 }
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 2b61c54..f49a102 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
@@ -21,6 +21,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.ignite.ci.ITeamcity;
+import org.apache.ignite.ci.analysis.SuiteInBranch;
 import org.apache.ignite.ci.analysis.TestInBranch;
 import org.apache.ignite.ci.di.AutoProfiling;
 import org.apache.ignite.ci.di.MonitoredTask;
@@ -318,9 +319,16 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
         return chains;
     }
 
+    /** {@inheritDoc} */
     @Nullable
     @Override public IRunHistory getTestRunHist(TestInBranch testInBranch) {
-         return runHistCompactedDao.getTestRunHist(srvIdMaskHigh, testInBranch.name, testInBranch.branch);
+        return runHistCompactedDao.getTestRunHist(srvIdMaskHigh, testInBranch.name, testInBranch.branch);
+    }
+
+    /** {@inheritDoc} */
+    @Nullable
+    @Override public IRunHistory getSuiteRunHist(SuiteInBranch suiteInBranch) {
+        return runHistCompactedDao.getSuiteRunHist(srvIdMaskHigh, suiteInBranch.getSuiteId(), suiteInBranch.branch);
     }
 
     public List<String> branchForQuery(@Nullable String branchName) {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
index a194c7c..ad0336c 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/InvocationData.java
@@ -38,6 +38,8 @@ public class InvocationData {
     public static final int FAILURE = RunStat.RunStatus.RES_FAILURE.getCode();
     /** Ok. */
     public static final int OK = RunStat.RunStatus.RES_OK.getCode();
+    /** Ok. */
+    public static final int CRITICAL_FAILURE = RunStat.RunStatus.RES_CRITICAL_FAILURE.getCode();
 
     /**
      * Runs registered all the times.
@@ -93,14 +95,23 @@ public class InvocationData {
         invocationMap.entrySet().removeIf(entries -> isExpired(entries.getValue().startDate));
     }
 
+    /**
+     * @param startDate Start date.
+     */
     public static boolean isExpired(long startDate) {
         return (U.currentTimeMillis() - startDate) > Duration.ofDays(MAX_DAYS).toMillis();
     }
 
+    /**
+     *
+     */
     public int allHistFailures() {
         return allHistFailures;
     }
 
+    /**
+     *
+     */
     public int notMutedRunsCount() {
         return (int)
                 invocations()
@@ -108,21 +119,27 @@ public class InvocationData {
                         .count();
     }
 
+    /**
+     *
+     */
     @NotNull public Stream<Invocation> invocations() {
         return invocationMap.values()
             .stream()
             .filter(this::isActual);
     }
 
+    /**
+     * @param invocation Invocation.
+     */
     private boolean isActual(Invocation invocation) {
         return !isExpired(invocation.startDate);
     }
 
+    /**
+     *
+     */
     public int failuresCount() {
-        return (int)
-                invocations()
-                        .filter(invocation -> invocation.status == FAILURE)
-                        .count();
+        return (int)invocations().filter(inv -> inv.status == FAILURE).count();
     }
 
     /** {@inheritDoc} */
@@ -159,4 +176,11 @@ public class InvocationData {
             .map(i->(int)i.status)
             .collect(Collectors.toList());
     }
+
+    /**
+     *
+     */
+    public int criticalFailuresCount() {
+        return (int)invocations().filter(inv -> inv.status == CRITICAL_FAILURE).count();
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
index 2841971..9f25030 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompacted.java
@@ -40,7 +40,7 @@ public class RunHistCompacted implements IVersionedEntity, IRunHistory {
     private short _ver = LATEST_VERSION;
 
     @QuerySqlField(orderedGroups = {@QuerySqlField.Group(name = "tstAndSrv", order = 0)})
-    private int testNameOrSuite;
+    private int testOrSuiteName;
 
     @QuerySqlField(orderedGroups = {@QuerySqlField.Group(name = "tstAndSrv", order = 1)})
     private int srvId;
@@ -50,7 +50,7 @@ public class RunHistCompacted implements IVersionedEntity, IRunHistory {
     public RunHistCompacted() {}
 
     public RunHistCompacted(RunHistKey k) {
-        testNameOrSuite = k.testNameOrSuite();
+        testOrSuiteName = k.testNameOrSuite();
         srvId = k.srvId();
     }
 
@@ -94,6 +94,10 @@ public class RunHistCompacted implements IVersionedEntity, IRunHistory {
         return null;
     }
 
+    @Override public int getCriticalFailuresCount() {
+        return data.criticalFailuresCount();
+    }
+
     /**
      * @param build Build.
      * @param inv Invocation.
@@ -106,13 +110,14 @@ public class RunHistCompacted implements IVersionedEntity, IRunHistory {
     /** {@inheritDoc} */
     @Override public String toString() {
         return MoreObjects.toStringHelper(this)
-                .add("nameId", testNameOrSuite)
+                .add("nameId", testOrSuiteName)
                 .add("srvId", srvId)
                 .add("failRate", getFailPercentPrintable())
                 .add("data", data)
                 .toString();
     }
 
+    /** {@inheritDoc} */
     @Override public boolean equals(Object o) {
         if (this == o)
             return true;
@@ -120,12 +125,13 @@ public class RunHistCompacted implements IVersionedEntity, IRunHistory {
             return false;
         RunHistCompacted compacted = (RunHistCompacted)o;
         return _ver == compacted._ver &&
-            testNameOrSuite == compacted.testNameOrSuite &&
+            testOrSuiteName == compacted.testOrSuiteName &&
             srvId == compacted.srvId &&
             Objects.equal(data, compacted.data);
     }
 
+    /** {@inheritDoc} */
     @Override public int hashCode() {
-        return Objects.hashCode(_ver, testNameOrSuite, srvId, data);
+        return Objects.hashCode(_ver, testOrSuiteName, srvId, data);
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompactedDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompactedDao.java
index 8d4e333..30d29df 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompactedDao.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistCompactedDao.java
@@ -30,6 +30,7 @@ import org.apache.ignite.configuration.CacheConfiguration;
 import javax.inject.Inject;
 import javax.inject.Provider;
 import java.util.Collections;
+import org.jetbrains.annotations.Nullable;
 
 import static org.apache.ignite.ci.teamcity.ignited.runhist.RunHistSync.normalizeBranch;
 
@@ -40,6 +41,10 @@ public class RunHistCompactedDao {
     /** Build Start time Cache name. */
     public static final String BUILD_START_TIME_CACHE_NAME = "buildStartTimeV0";
 
+    /** Cache name.*/
+    public static final String SUITE_HIST_CACHE_NAME = "teamcitySuiteRunHistV0";
+
+
     /** Ignite provider. */
     @Inject
     private Provider<Ignite> igniteProvider;
@@ -47,6 +52,9 @@ public class RunHistCompactedDao {
     /** Test history cache. */
     private IgniteCache<RunHistKey, RunHistCompacted> testHistCache;
 
+    /** Suite history cache. */
+    private IgniteCache<RunHistKey, RunHistCompacted> suiteHistCacheName;
+
     /** Build start time. */
     private IgniteCache<Long, Long> buildStartTime;
 
@@ -66,20 +74,34 @@ public class RunHistCompactedDao {
         testHistCache = ignite.getOrCreateCache(cfg);
 
         buildStartTime = ignite.getOrCreateCache(TcHelperDb.getCacheV2Config(BUILD_START_TIME_CACHE_NAME));
+
+        final CacheConfiguration<RunHistKey, RunHistCompacted> cfg2 = TcHelperDb.getCacheV2Config(SUITE_HIST_CACHE_NAME);
+
+        cfg2.setQueryEntities(Collections.singletonList(new QueryEntity(RunHistKey.class, RunHistCompacted.class)));
+
+        suiteHistCacheName = ignite.getOrCreateCache(cfg2);
+
+        buildStartTime = ignite.getOrCreateCache(TcHelperDb.getCacheV2Config(BUILD_START_TIME_CACHE_NAME));
     }
 
-    public IRunHistory getTestRunHist(int srvIdMaskHigh, String name, String branch) {
-        final Integer testName = compactor.getStringIdIfPresent(name);
-        if (testName == null)
+    public IRunHistory getTestRunHist(int srvIdMaskHigh, String name, @Nullable String branch) {
+        RunHistKey key = getKey(srvIdMaskHigh, name, branch);
+        if (key == null)
             return null;
 
-        String normalizeBranch = normalizeBranch(branch);
+        return testHistCache.get(key);
+    }
 
-        final Integer branchId = compactor.getStringIdIfPresent(normalizeBranch);
+    @Nullable public RunHistKey getKey(int srvIdMaskHigh, String testOrSuiteName, @Nullable String branch) {
+        final Integer testName = compactor.getStringIdIfPresent(testOrSuiteName);
+        if (testName == null)
+            return null;
+
+        final Integer branchId = compactor.getStringIdIfPresent(normalizeBranch(branch));
         if (branchId == null)
             return null;
 
-        return testHistCache.get(new RunHistKey(srvIdMaskHigh, testName, branchId));
+        return new RunHistKey(srvIdMaskHigh, testName, branchId);
     }
 
     /**
@@ -134,4 +156,17 @@ public class RunHistCompactedDao {
             list
         );
     }
+
+    /**
+     * @param srvId Server id.
+     * @param suiteId Suite id.
+     * @param branch Branch.
+     */
+    public IRunHistory getSuiteRunHist(int srvId, String suiteId, @Nullable String branch) {
+        RunHistKey key = getKey(srvId, suiteId, branch);
+        if (key == null)
+            return null;
+
+        return suiteHistCacheName.get(key);
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistKey.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistKey.java
index b4f3390..0c671ed 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistKey.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistKey.java
@@ -19,14 +19,25 @@ package org.apache.ignite.ci.teamcity.ignited.runhist;
 
 import com.google.common.base.Objects;
 
+/**
+ *
+ */
 public class RunHistKey {
+    /** Server id. */
     private int srvId;
-    private int testNameOrSuite;
+    /** Test name or suite. */
+    private int testOrSuiteName;
+    /** Branch. */
     private int branch;
 
+    /**
+     * @param srvId Server id.
+     * @param testName Test or suite name.
+     * @param branchName Branch name.
+     */
     public RunHistKey(int srvId, int testName, int branchName) {
         this.srvId = srvId;
-        this.testNameOrSuite = testName;
+        this.testOrSuiteName = testName;
         this.branch = branchName;
     }
 
@@ -36,17 +47,17 @@ public class RunHistKey {
         if (o == null || getClass() != o.getClass()) return false;
         RunHistKey histKey = (RunHistKey) o;
         return srvId == histKey.srvId &&
-                testNameOrSuite == histKey.testNameOrSuite &&
+                testOrSuiteName == histKey.testOrSuiteName &&
                 branch == histKey.branch;
     }
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(srvId, testNameOrSuite, branch);
+        return Objects.hashCode(srvId, testOrSuiteName, branch);
     }
 
     public int testNameOrSuite() {
-        return testNameOrSuite;
+        return testOrSuiteName;
     }
 
     public int srvId() {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
index 49f136e..9e11c89 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/runhist/RunHistSync.java
@@ -70,6 +70,9 @@ public class RunHistSync {
     @GuardedBy("this")
     private final Map<String, SyncTask> buildToSave = new HashMap<>();
 
+    /**
+     * @param branchName Branch name.
+     */
     @NotNull public static String normalizeBranch(@Nullable String branchName) {
         String branch = branchName == null ? ITeamcity.DEFAULT : branchName;
 
@@ -97,29 +100,29 @@ public class RunHistSync {
 
         boolean saveNow = false;
 
-        Map<RunHistKey, List<Invocation>> data = new HashMap<>();
-        build.getAllTests().forEach(t -> {
-            int branchNameNormalized = compactor.getStringId(normalizeBranch(build.branchName(compactor)));
+        int branchNameNormalized = compactor.getStringId(normalizeBranch(build.branchName(compactor)));
 
+        Map<RunHistKey, List<Invocation>> testInvMap = new HashMap<>();
+        build.getAllTests().forEach(t -> {
             RunHistKey histKey = new RunHistKey(srvId, t.testName(), branchNameNormalized);
-            List<Invocation> list = data.computeIfAbsent(histKey, k -> new ArrayList<>());
+            List<Invocation> list = testInvMap.computeIfAbsent(histKey, k -> new ArrayList<>());
             Invocation inv = t.toInvocation(compactor, build);
             list.add(inv);
         });
 
-        int cnt = containedTestsCnt(data);
+        int cnt = containedTestsCnt(testInvMap);
 
         synchronized (this) {
             final SyncTask syncTask = buildToSave.computeIfAbsent(srvVame, s -> new SyncTask());
 
             if (syncTask.sheduled() + cnt <= MAX_TESTS_QUEUE)
-                syncTask.tests.putAll(data);
+                syncTask.tests.putAll(testInvMap);
             else
                 saveNow = true;
         }
 
         if(saveNow)
-            saveInvocationsMap(data);
+            saveInvocationsMap(testInvMap);
         else {
             int ldrToActivate = ThreadLocalRandom.current().nextInt(HIST_LDR_TASKS) + 1;
 
@@ -247,7 +250,7 @@ public class RunHistSync {
             scheduleHistLoad(srvId, buildsIdsToLoad);
         }
 
-        return "Invoked later load for " + totalAskedToLoad + " builds from " + srvId;
+        return "Invoked later load for history for " + totalAskedToLoad + " builds from " + srvId;
     }
 
     /**
@@ -271,7 +274,7 @@ public class RunHistSync {
             && !fatBuild.isFakeStub()
             && !fatBuild.isOutdatedEntityVersion()
             && !fatBuild.isCancelled(compactor)
-            //todo support not finished build reloading
+            //todo support not finished build reloading usign fat build sync or similar.
             && fatBuild.isFinished(compactor);
     }
 
@@ -287,6 +290,10 @@ public class RunHistSync {
         }
     }
 
+    /**
+     * @param tests Tests.
+     * @return count of invocations.
+     */
     public static int containedTestsCnt(Map<RunHistKey, List<Invocation>> tests) {
         return tests.values().stream().mapToInt(List::size).sum();
     }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/SuiteCurrentStatus.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/SuiteCurrentStatus.java
index d5f85db..f0271f3 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/SuiteCurrentStatus.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/SuiteCurrentStatus.java
@@ -140,7 +140,13 @@ import static org.apache.ignite.ci.util.UrlUtil.escape;
             : tcAnalytics.getTestRunStatProvider();
 
         String suiteId = suite.suiteId();
-        initSuiteStat(tcAnalytics, failRateNormalizedBranch, curBranchNormalized, suiteId);
+
+        Function<SuiteInBranch, ? extends IRunHistory> provider   =
+            NEW_RUN_STAT
+                ? tcIgnited::getSuiteRunHist
+                : tcAnalytics.getBuildFailureRunStatProvider();
+
+        initSuiteStat(provider, failRateNormalizedBranch, curBranchNormalized, suiteId);
 
         Set<String> collect = suite.lastChangeUsers().collect(Collectors.toSet());
 
@@ -221,13 +227,16 @@ import static org.apache.ignite.ci.util.UrlUtil.escape;
         // todo implement this logic in suite possibleBlocker = suite.hasPossibleBlocker();
     }
 
-    private void initSuiteStat(@Nullable ITcAnalytics tcAnalytics, String failRateNormalizedBranch, String curBranchNormalized, String suiteId) {
-        if (Strings.isNullOrEmpty(suiteId) || tcAnalytics == null)
+    private void initSuiteStat(Function<SuiteInBranch, ? extends IRunHistory> suiteFailProv,
+        String failRateNormalizedBranch,
+        String curBranchNormalized,
+        String suiteId) {
+        if (Strings.isNullOrEmpty(suiteId)  )
             return;
 
         SuiteInBranch key = new SuiteInBranch(suiteId, failRateNormalizedBranch);
 
-        final RunStat stat = tcAnalytics.getBuildFailureRunStatProvider().apply(key);
+        final IRunHistory stat = suiteFailProv.apply(key);
 
         if (stat != null) {
             failures = stat.getFailuresCount();
@@ -245,24 +254,25 @@ import static org.apache.ignite.ci.util.UrlUtil.escape;
             latestRuns = stat.getLatestRunResults();
         }
 
-        RunStat latestRunsSrc = null;
+        IRunHistory latestRunsSrc = null;
         if (!failRateNormalizedBranch.equals(curBranchNormalized)) {
             SuiteInBranch keyForStripe = new SuiteInBranch(suiteId, curBranchNormalized);
 
-            final RunStat statForStripe = tcAnalytics.getBuildFailureRunStatProvider().apply(keyForStripe);
+            final IRunHistory statForStripe = suiteFailProv.apply(keyForStripe);
 
             latestRunsSrc = statForStripe;
             latestRuns = statForStripe != null ? statForStripe.getLatestRunResults() : null;
         } else
             latestRunsSrc = stat;
 
-        if (latestRunsSrc != null) {
-            RunStat.TestId testId = latestRunsSrc.detectTemplate(EventTemplates.newFailureForFlakyTest); //extended runs required for suite
+        if (latestRunsSrc instanceof RunStat) {
+            RunStat latestRunsSrcV1 = (RunStat)latestRunsSrc;
+            RunStat.TestId testId = latestRunsSrcV1.detectTemplate(EventTemplates.newFailureForFlakyTest); //extended runs required for suite
 
             if (testId != null)
                 problemRef = new ProblemRef("New Failure");
 
-            RunStat.TestId buildIdCritical = latestRunsSrc.detectTemplate(EventTemplates.newCriticalFailure);
+            RunStat.TestId buildIdCritical = latestRunsSrcV1.detectTemplate(EventTemplates.newCriticalFailure);
 
             if (buildIdCritical != null)
                 problemRef = new ProblemRef("New Critical Failure");
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/TestFailure.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/TestFailure.java
index e98e143..9b0a818 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/TestFailure.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/current/TestFailure.java
@@ -218,7 +218,7 @@ import static org.apache.ignite.ci.web.model.current.SuiteCurrentStatus.branchFo
         } else
             statForProblemsDetection = stat;
 
-        if (statForProblemsDetection != null && statForProblemsDetection instanceof RunStat) {
+        if (statForProblemsDetection instanceof RunStat) {
             final RunStat forProblemsDetection = (RunStat) statForProblemsDetection;
             RunStat.TestId testId = forProblemsDetection.detectTemplate(EventTemplates.newFailure);