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

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


The following commit(s) were added to refs/heads/master by this push:
     new b6036d6  Refactoring to separate build ref sync and TC ignited code
b6036d6 is described below

commit b6036d6a0e4e936817ed151243ce8242ae9aea16
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Thu Dec 6 23:59:26 2018 +0300

    Refactoring to separate build ref sync and TC ignited code
---
 .../ignite/ci/runners/RemoteClientTmpHelper.java   |   2 +-
 .../ci/teamcity/ignited/IgniteStringCompactor.java |   2 +
 .../ci/teamcity/ignited/TeamcityIgnitedImpl.java   |  96 ++++---------------
 .../ci/teamcity/ignited/TeamcityIgnitedModule.java |   1 +
 .../ignited/{ => buildref}/BuildRefDao.java        |   4 +-
 .../ci/teamcity/ignited/buildref/BuildRefSync.java | 102 ++++++++++++++++++++-
 .../ignited/fatbuild/ProactiveFatBuildSync.java    |   2 +-
 .../ignited/runhist/RunHistCompactedDao.java       |   6 +-
 .../ci/teamcity/ignited/runhist/RunHistSync.java   |   2 +-
 .../ci/teamcity/ignited/BuildKeyUnitTest.java      |   1 +
 .../ignited/IgnitedTcInMemoryIntegrationTest.java  |   1 +
 11 files changed, 136 insertions(+), 83 deletions(-)

diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
index d987067..e938158 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
@@ -34,7 +34,7 @@ import org.apache.ignite.ci.IgnitePersistentTeamcity;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
 import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
-import org.apache.ignite.ci.teamcity.ignited.BuildRefDao;
+import org.apache.ignite.ci.teamcity.ignited.buildref.BuildRefDao;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
 import org.apache.ignite.ci.teamcity.ignited.IgniteStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IgniteStringCompactor.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IgniteStringCompactor.java
index bb4e101..015ac50 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IgniteStringCompactor.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/IgniteStringCompactor.java
@@ -32,6 +32,7 @@ import 
org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.cache.query.QueryCursor;
 import org.apache.ignite.cache.query.SqlQuery;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
+import org.apache.ignite.ci.db.Persisted;
 import org.apache.ignite.ci.di.AutoProfiling;
 import org.apache.ignite.ci.di.cache.GuavaCached;
 import org.apache.ignite.ci.util.ExceptionUtil;
@@ -63,6 +64,7 @@ public class IgniteStringCompactor implements 
IStringCompactor {
     /** Sequence. */
     private IgniteAtomicSequence seq;
 
+    @Persisted
     public static class CompactorEntity {
         @QuerySqlField
         String val;
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 f3125cb..1f1a41a 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,8 +30,9 @@ import org.apache.ignite.ci.di.scheduler.IScheduler;
 import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
 import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildCondition;
 import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildConditionDao;
-import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
+import org.apache.ignite.ci.teamcity.ignited.buildref.BuildRefDao;
+import org.apache.ignite.ci.teamcity.ignited.buildref.BuildRefSync;
 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;
@@ -54,7 +55,6 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 import static org.apache.ignite.ci.tcmodel.hist.BuildRef.STATUS_UNKNOWN;
@@ -69,12 +69,6 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited 
{
     /** Max build id diff to enforce reload during incremental refresh. */
     public static final int MAX_ID_DIFF_TO_ENFORCE_CONTINUE_SCAN = 3000;
 
-    /**
-     * Max builds to check during incremental sync. If this value is reached 
(50 pages) and some stuck builds still not
-     * found, then iteration stops
-     */
-    public static final int MAX_INCREMENTAL_BUILDS_TO_CHECK = 5000;
-
     /** Server id. */
     private String srvNme;
 
@@ -87,13 +81,17 @@ public class TeamcityIgnitedImpl implements 
ITeamcityIgnited {
     /** Build reference DAO. */
     @Inject private BuildRefDao buildRefDao;
 
+    /** Build reference (short version of build data) sync. */
+    @Inject private BuildRefSync buildRefSync;
+
     /** Build condition DAO. */
     @Inject private BuildConditionDao buildConditionDao;
 
     /** Build DAO. */
     @Inject private FatBuildDao fatBuildDao;
 
-    @Inject private ProactiveFatBuildSync buildSync;
+    /** Build Sync. */
+    @Inject private ProactiveFatBuildSync fatBuildSync;
 
     /** Changes DAO. */
     @Inject private ChangeDao changesDao;
@@ -388,8 +386,10 @@ public class TeamcityIgnitedImpl implements 
ITeamcityIgnited {
     public void ensureActualizeRequested() {
         scheduler.sheduleNamed(taskName("actualizeRecentBuildRefs"), () -> 
actualizeRecentBuildRefs(srvNme), 2, TimeUnit.MINUTES);
 
+        buildRefSync.ensureActualizeRequested();
+
         // schedule find missing later
-        buildSync.ensureActualizationRequested(srvNme, conn);
+        fatBuildSync.ensureActualizationRequested(srvNme, conn);
 
         runHistSync.invokeLaterFindMissingHistory(srvNme);
     }
@@ -399,7 +399,7 @@ public class TeamcityIgnitedImpl implements 
ITeamcityIgnited {
         Build build = conn.triggerBuild(buildTypeId, branchName, cleanRebuild, 
queueAtTop);
 
         //todo may add additional parameter: load builds into DB in sync/async 
fashion
-        runActualizeBuildRefs(srvNme, false, Sets.newHashSet(build.getId()));
+        buildRefSync.runActualizeBuildRefs(srvNme, false, 
Sets.newHashSet(build.getId()), conn);
 
         return build;
     }
@@ -424,6 +424,10 @@ public class TeamcityIgnitedImpl implements 
ITeamcityIgnited {
     @GuavaCached(maximumSize = 2000, cacheNullRval = false)
     @AutoProfiling
     @Nullable public Date getBuildStartDate(int buildId) {
+        final Long buildStartTime = 
runHistCompactedDao.getBuildStartTime(srvIdMaskHigh, buildId);
+        if (buildStartTime != null)
+            return new Date(buildStartTime);
+
         String msg = "Loading build [" + buildId + "] start date";
 
         if (MasterTrendsService.DEBUG)
@@ -448,7 +452,7 @@ public class TeamcityIgnitedImpl implements 
ITeamcityIgnited {
             return existingBuild != null ? existingBuild : new 
FatBuildCompacted().setFakeStub(true);
         }
 
-        FatBuildCompacted savedVer = buildSync.loadBuild(conn, buildId, 
existingBuild, mode);
+        FatBuildCompacted savedVer = fatBuildSync.loadBuild(conn, buildId, 
existingBuild, mode);
 
         //build was modified, probably we need also to update reference 
accordingly
         if (savedVer == null)
@@ -517,14 +521,14 @@ public class TeamcityIgnitedImpl implements 
ITeamcityIgnited {
         int cntFreshBuilds = paginateUntil.size();
 
         //schedule direct reload for Fat Builds for all queued too-old builds
-        buildSync.scheduleBuildsLoad(conn, directUpload);
+        fatBuildSync.scheduleBuildsLoad(conn, directUpload);
 
-        runActualizeBuildRefs(srvNme, false, paginateUntil);
+        buildRefSync.runActualizeBuildRefs(srvNme, false, paginateUntil, conn);
 
         int freshButNotFoundByBuildsRefsScan = paginateUntil.size();
         if (!paginateUntil.isEmpty()) {
             //some builds may stuck in the queued or running, enforce loading 
now
-            buildSync.doLoadBuilds(-1, srvNme, conn, paginateUntil);
+            fatBuildSync.doLoadBuilds(-1, srvNme, conn, paginateUntil);
         }
 
         // schedule full resync later
@@ -546,68 +550,8 @@ public class TeamcityIgnitedImpl implements 
ITeamcityIgnited {
      *
      */
     void fullReindex() {
-        runActualizeBuildRefs(srvNme, true, null);
+        buildRefSync.runActualizeBuildRefs(srvNme, true, null, conn);
     }
 
 
-    /**
-     * @param srvId Server id.
-     * @param fullReindex Reindex all builds from TC history.
-     * @param mandatoryToReload [in/out] Build ID should be found before end 
of sync. Ignored if fullReindex mode.
-     *
-     */
-    @SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
-    @MonitoredTask(name = "Actualize BuildRefs(srv, full resync)", 
nameExtArgsIndexes = {0, 1})
-    @AutoProfiling
-    protected String runActualizeBuildRefs(String srvId, boolean fullReindex,
-                                           @Nullable Set<Integer> 
mandatoryToReload) {
-        AtomicReference<String> outLinkNext = new AtomicReference<>();
-        List<BuildRef> tcDataFirstPage = conn.getBuildRefsPage(null, 
outLinkNext);
-
-        Set<Long> buildsUpdated = buildRefDao.saveChunk(srvIdMaskHigh, 
tcDataFirstPage);
-        int totalUpdated = buildsUpdated.size();
-        buildSync.scheduleBuildsLoad(conn, cacheKeysToBuildIds(buildsUpdated));
-
-        int totalChecked = tcDataFirstPage.size();
-        int neededToFind = 0;
-        if (mandatoryToReload != null) {
-            neededToFind = mandatoryToReload.size();
-
-            
tcDataFirstPage.stream().map(BuildRef::getId).forEach(mandatoryToReload::remove);
-        }
-
-        while (outLinkNext.get() != null) {
-            String nextPageUrl = outLinkNext.get();
-            outLinkNext.set(null);
-            List<BuildRef> tcDataNextPage = conn.getBuildRefsPage(nextPageUrl, 
outLinkNext);
-            Set<Long> curChunkBuildsSaved = 
buildRefDao.saveChunk(srvIdMaskHigh, tcDataNextPage);
-            totalUpdated += curChunkBuildsSaved.size();
-            buildSync.scheduleBuildsLoad(conn, 
cacheKeysToBuildIds(curChunkBuildsSaved));
-
-            int savedCurChunk = curChunkBuildsSaved.size();
-
-            totalChecked += tcDataNextPage.size();
-
-            if (!fullReindex) {
-                if (mandatoryToReload != null && !mandatoryToReload.isEmpty())
-                    
tcDataNextPage.stream().map(BuildRef::getId).forEach(mandatoryToReload::remove);
-
-                if (savedCurChunk == 0 &&
-                    (mandatoryToReload == null
-                        || mandatoryToReload.isEmpty()
-                        || totalChecked > MAX_INCREMENTAL_BUILDS_TO_CHECK)
-                ) {
-                    // There are no modification at current page, hopefully no 
modifications at all
-                    break;
-                }
-            }
-        }
-
-        int leftToFind = mandatoryToReload == null ? 0 : 
mandatoryToReload.size();
-        return "Entries saved " + totalUpdated + " Builds checked " + 
totalChecked + " Needed to find " + neededToFind + " remained to find " + 
leftToFind;
-    }
-
-    @NotNull private List<Integer> cacheKeysToBuildIds(Collection<Long> 
cacheKeysUpdated) {
-        return 
cacheKeysUpdated.stream().map(BuildRefDao::cacheKeyToBuildId).collect(Collectors.toList());
-    }
 }
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 b1d294f..e894afd 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,7 @@ package org.apache.ignite.ci.teamcity.ignited;
 import com.google.inject.AbstractModule;
 import com.google.inject.internal.SingletonScope;
 import org.apache.ignite.ci.teamcity.ignited.buildcondition.BuildConditionDao;
+import org.apache.ignite.ci.teamcity.ignited.buildref.BuildRefDao;
 import org.apache.ignite.ci.teamcity.ignited.buildref.BuildRefSync;
 import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefDao;
 import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeSync;
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildref/BuildRefDao.java
similarity index 97%
rename from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
rename to 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildref/BuildRefDao.java
index 19015ce..0d33822 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/BuildRefDao.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildref/BuildRefDao.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.teamcity.ignited;
+package org.apache.ignite.ci.teamcity.ignited.buildref;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -34,6 +34,8 @@ import org.apache.ignite.ci.db.TcHelperDb;
 import org.apache.ignite.ci.di.AutoProfiling;
 import org.apache.ignite.ci.di.cache.GuavaCached;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
+import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.util.GridIntList;
 import org.jetbrains.annotations.NotNull;
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildref/BuildRefSync.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildref/BuildRefSync.java
index fce67c7..94a4d1a 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildref/BuildRefSync.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/buildref/BuildRefSync.java
@@ -16,8 +16,108 @@
  */
 package org.apache.ignite.ci.teamcity.ignited.buildref;
 
+import org.apache.ignite.ci.di.AutoProfiling;
+import org.apache.ignite.ci.di.MonitoredTask;
+import org.apache.ignite.ci.tcmodel.hist.BuildRef;
+import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
+import org.apache.ignite.ci.teamcity.ignited.fatbuild.ProactiveFatBuildSync;
+import org.apache.ignite.ci.teamcity.pure.ITeamcityConn;
+import org.jetbrains.annotations.NotNull;
+
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+
 /**
- *
+ * This class checks all builds ocurred on a TC server.
+ * All builds stored into build refs cache.
+ * Modified builds are sheduled to be reloaded in build sync.
  */
 public class BuildRefSync {
+    /**
+     * Max builds to check during incremental sync. If this value is reached 
(50 pages) and some stuck builds still not
+     * found, then iteration stops
+     */
+    public static final int MAX_INCREMENTAL_BUILDS_TO_CHECK = 5000;
+
+    /** Build reference DAO. */
+    @Inject private BuildRefDao buildRefDao;
+
+    /** Build Sync. */
+    @Inject private ProactiveFatBuildSync fatBuildSync;
+
+    /**
+     * List all builds (first pages or all available).
+     *
+     * @param srvId Server id.
+     * @param fullReindex Reindex all builds from TC history.
+     * @param mandatoryToReload [in/out] Build ID should be found before end 
of sync. Ignored if fullReindex mode.
+     * @param conn Teamcity to check builds
+     */
+    @SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
+    @MonitoredTask(name = "Actualize BuildRefs(srv, full resync)", 
nameExtArgsIndexes = {0, 1})
+    @AutoProfiling
+    public String runActualizeBuildRefs(String srvId, boolean fullReindex,
+                                        @Nullable Set<Integer> 
mandatoryToReload, ITeamcityConn conn) {
+        AtomicReference<String> outLinkNext = new AtomicReference<>();
+        List<BuildRef> tcDataFirstPage = conn.getBuildRefsPage(null, 
outLinkNext);
+
+        final int srvIdMaskHigh = ITeamcityIgnited.serverIdToInt(srvId);
+        Set<Long> buildsUpdated = buildRefDao.saveChunk(srvIdMaskHigh, 
tcDataFirstPage);
+        int totalUpdated = buildsUpdated.size();
+        fatBuildSync.scheduleBuildsLoad(conn, 
cacheKeysToBuildIds(buildsUpdated));
+
+        int totalChecked = tcDataFirstPage.size();
+        int neededToFind = 0;
+        if (mandatoryToReload != null) {
+            neededToFind = mandatoryToReload.size();
+
+            
tcDataFirstPage.stream().map(BuildRef::getId).forEach(mandatoryToReload::remove);
+        }
+
+        while (outLinkNext.get() != null) {
+            String nextPageUrl = outLinkNext.get();
+            outLinkNext.set(null);
+            List<BuildRef> tcDataNextPage = conn.getBuildRefsPage(nextPageUrl, 
outLinkNext);
+            Set<Long> curChunkBuildsSaved = 
buildRefDao.saveChunk(srvIdMaskHigh, tcDataNextPage);
+            totalUpdated += curChunkBuildsSaved.size();
+            fatBuildSync.scheduleBuildsLoad(conn, 
cacheKeysToBuildIds(curChunkBuildsSaved));
+
+            int savedCurChunk = curChunkBuildsSaved.size();
+
+            totalChecked += tcDataNextPage.size();
+
+            if (!fullReindex) {
+                if (mandatoryToReload != null && !mandatoryToReload.isEmpty())
+                    
tcDataNextPage.stream().map(BuildRef::getId).forEach(mandatoryToReload::remove);
+
+                if (savedCurChunk == 0 &&
+                        (mandatoryToReload == null
+                                || mandatoryToReload.isEmpty()
+                                || totalChecked > 
MAX_INCREMENTAL_BUILDS_TO_CHECK)
+                ) {
+                    // There are no modification at current page, hopefully no 
modifications at all
+                    break;
+                }
+            }
+        }
+
+        int leftToFind = mandatoryToReload == null ? 0 : 
mandatoryToReload.size();
+        return "Entries saved " + totalUpdated + " Builds checked " + 
totalChecked + " Needed to find " + neededToFind + " remained to find " + 
leftToFind;
+    }
+
+
+    @NotNull
+    private List<Integer> cacheKeysToBuildIds(Collection<Long> 
cacheKeysUpdated) {
+        return 
cacheKeysUpdated.stream().map(BuildRefDao::cacheKeyToBuildId).collect(Collectors.toList());
+    }
+
+
+    public void ensureActualizeRequested() {
+
+    }
 }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
index 5565c58..843d991 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/ProactiveFatBuildSync.java
@@ -28,7 +28,7 @@ import 
org.apache.ignite.ci.tcmodel.result.problems.ProblemOccurrence;
 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.BuildRefCompacted;
-import org.apache.ignite.ci.teamcity.ignited.BuildRefDao;
+import org.apache.ignite.ci.teamcity.ignited.buildref.BuildRefDao;
 import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
 import org.apache.ignite.ci.teamcity.ignited.SyncMode;
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 e5d86e3..8ab9815 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
@@ -83,8 +83,6 @@ public class RunHistCompactedDao {
 
         testHistCache = ignite.getOrCreateCache(cfg);
 
-        buildStartTime = 
ignite.getOrCreateCache(TcHelperDb.getCacheV2Config(BUILD_START_TIME_CACHE_NAME));
-
         final CacheConfiguration<RunHistKey, RunHistCompacted> cfg2 = 
TcHelperDb.getCache8PartsConfig(SUITE_HIST_CACHE_NAME);
 
         cfg2.setQueryEntities(Collections.singletonList(new 
QueryEntity(RunHistKey.class, RunHistCompacted.class)));
@@ -127,6 +125,10 @@ public class RunHistCompactedDao {
         return buildStartTime.containsKey(buildIdToCacheKey(srvId, buildId));
     }
 
+    @Nullable public Long getBuildStartTime(int srvId, int buildId) {
+        return buildStartTime.get(buildIdToCacheKey(srvId, buildId));
+    }
+
     @AutoProfiling
     public boolean setBuildProcessed(int srvId, int buildId, long ts) {
         return buildStartTime.putIfAbsent(buildIdToCacheKey(srvId, buildId), 
ts);
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 a74217c..0eb4e44 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
@@ -34,7 +34,7 @@ import org.apache.ignite.ci.ITeamcity;
 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.teamcity.ignited.BuildRefDao;
+import org.apache.ignite.ci.teamcity.ignited.buildref.BuildRefDao;
 import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
diff --git 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/BuildKeyUnitTest.java
 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/BuildKeyUnitTest.java
index 97df738..716051d 100644
--- 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/BuildKeyUnitTest.java
+++ 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/BuildKeyUnitTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.ci.teamcity.ignited;
 
+import org.apache.ignite.ci.teamcity.ignited.buildref.BuildRefDao;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildDao;
 import org.junit.Test;
 
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 27d8a11..371f6e7 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
@@ -53,6 +53,7 @@ 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.buildref.BuildRefDao;
 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;

Reply via email to