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/30 17:05:46 UTC

[ignite-teamcity-bot] branch ignite-10071 updated: IGNITE-10071 Fix for case then background upload of a build and simultaneous bot restart may result in a queued build persisted but actually build is finished

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

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


The following commit(s) were added to refs/heads/ignite-10071 by this push:
     new e558415  IGNITE-10071 Fix for case then background upload of a build and simultaneous bot restart may result in a queued build persisted but actually build is finished
e558415 is described below

commit e558415cb62f3cb4b711acb6d89e59d85aac86af
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Fri Nov 30 20:05:45 2018 +0300

    IGNITE-10071 Fix for case then background upload of a build and simultaneous bot restart may result in a queued build persisted but actually build is finished
---
 .../ignited/fatbuild/ProactiveFatBuildSync.java    | 15 ++++++++------
 .../ignited/IgnitedTcInMemoryIntegrationTest.java  | 24 +++++++++++++++++-----
 2 files changed, 28 insertions(+), 11 deletions(-)

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 65c7320..e8a30c9 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
@@ -140,9 +140,9 @@ public class ProactiveFatBuildSync {
             if (buildId == null)
                 return;
 
-            //todo
-            // !existingBuild.isRunning(compactor) && !existingBuild.isQueued(compactor);
-            if (!fatBuildDao.containsKey(srvIdMaskHigh, buildId))
+            if (buildRef.isRunning(compactor)
+                || buildRef.isQueued(compactor)
+                || !fatBuildDao.containsKey(srvIdMaskHigh, buildId))
                 buildsIdsToLoad.add(buildId);
 
             if (buildsIdsToLoad.size() >= 100) {
@@ -256,10 +256,13 @@ public class ProactiveFatBuildSync {
      */
     @Nullable
     public FatBuildCompacted loadBuild(ITeamcityConn conn, int buildId,
-                                       @Nullable FatBuildCompacted existingBuild,
-                                       SyncMode mode) {
+        @Nullable FatBuildCompacted existingBuild,
+        SyncMode mode) {
         if (existingBuild != null && !existingBuild.isOutdatedEntityVersion()) {
-            boolean finished = !existingBuild.isRunning(compactor) && !existingBuild.isQueued(compactor);
+            boolean finished =
+                existingBuild.state(compactor) != null // don't count old fake builds as finished
+                    && !existingBuild.isRunning(compactor)
+                    && !existingBuild.isQueued(compactor);
 
             if (finished || mode != SyncMode.RELOAD_QUEUED)
                 return null;
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 d8a9720..9f68884 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
@@ -76,6 +76,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static junit.framework.TestCase.assertEquals;
 import static junit.framework.TestCase.assertFalse;
 import static junit.framework.TestCase.assertNotNull;
+import static junit.framework.TestCase.assertNull;
 import static junit.framework.TestCase.assertTrue;
 import static org.apache.ignite.ci.HelperConfig.ensureDirExist;
 import static org.apache.ignite.ci.teamcity.ignited.IgniteStringCompactor.STRINGS_CACHE;
@@ -554,19 +555,19 @@ public class IgnitedTcInMemoryIntegrationTest {
         BuildRefDao buildRefDao = injector.getInstance(BuildRefDao.class).init();
         FatBuildDao fatBuildDao = injector.getInstance(FatBuildDao.class).init();
 
-        int buildId = 1000042;
+        int buildIdQ = 1000042;
         BuildRef refQ = new BuildRef();
         refQ.buildTypeId = "Testbuild";
         refQ.branchName = ITeamcity.REFS_HEADS_MASTER;
         refQ.state = BuildRef.STATE_QUEUED;
-        refQ.setId(buildId);
+        refQ.setId(buildIdQ);
 
-        int buildIdRunning = 1000043;
+        int buildIdR = 1000043;
         BuildRef refR = new BuildRef();
         refR.buildTypeId = "Testbuild";
         refR.branchName = ITeamcity.REFS_HEADS_MASTER;
         refR.state = BuildRef.STATE_RUNNING;
-        refR.setId(buildIdRunning);
+        refR.setId(buildIdR);
 
         String srvId = APACHE;
         int srvIdInt = ITeamcityIgnited.serverIdToInt(srvId);
@@ -582,7 +583,7 @@ public class IgnitedTcInMemoryIntegrationTest {
         ProactiveFatBuildSync buildSync = injector.getInstance(ProactiveFatBuildSync.class);
         buildSync.invokeLaterFindMissingByBuildRef(srvId, srvConn);
 
-        FatBuildCompacted fatBuild = fatBuildDao.getFatBuild(srvIdInt, buildId);
+        FatBuildCompacted fatBuild = fatBuildDao.getFatBuild(srvIdInt, buildIdQ);
         System.out.println(fatBuild);
 
         assertNotNull(fatBuild);
@@ -601,6 +602,9 @@ public class IgnitedTcInMemoryIntegrationTest {
         System.out.println("Running builds (before with fake builds): " + printRefs(c, running3));
         assertFalse(checkNotNull(running3).isEmpty());
 
+        putOldFashionFakeBuild(c, fatBuildDao, buildIdQ, srvIdInt);
+        putOldFashionFakeBuild(c, fatBuildDao, buildIdR, srvIdInt);
+
         buildSync.invokeLaterFindMissingByBuildRef(srvId, srvConn);
 
         List<BuildRefCompacted> running4 = buildRefDao.getQueuedAndRunning(srvIdInt);
@@ -608,6 +612,16 @@ public class IgnitedTcInMemoryIntegrationTest {
         assertTrue(checkNotNull(running4).isEmpty());
     }
 
+    public void putOldFashionFakeBuild(IStringCompactor c, FatBuildDao fatBuildDao, int buildId, int srvIdInt) {
+        FatBuildCompacted fb = fatBuildDao.getFatBuild(srvIdInt, buildId);
+
+        fb.fillFieldsFromBuildRef(c, new BuildRef());
+
+        fatBuildDao.putFatBuild(srvIdInt, buildId, fb);
+
+        assertNull(fatBuildDao.getFatBuild(srvIdInt, buildId).state(c));
+    }
+
     @NotNull public List<BuildRef> printRefs(IStringCompactor c, List<BuildRefCompacted> running2) {
         return running2.stream().map(bref->bref.toBuildRef(c)).collect(Collectors.toList());
     }