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());
}