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/21 15:01:32 UTC
[ignite-teamcity-bot] branch ignite-10336 updated: IGNITE-10336 Fix
of chain collection to avoid missing builds
This is an automated email from the ASF dual-hosted git repository.
dpavlov pushed a commit to branch ignite-10336
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
The following commit(s) were added to refs/heads/ignite-10336 by this push:
new 5c432d2 IGNITE-10336 Fix of chain collection to avoid missing builds
5c432d2 is described below
commit 5c432d2a1b17ef492aa34a9af962aa2736f30880
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Wed Nov 21 18:01:30 2018 +0300
IGNITE-10336 Fix of chain collection to avoid missing builds
---
.../ignite/ci/tcbot/chain/BuildChainProcessor.java | 36 ++++++++++++++--------
.../org/apache/ignite/ci/web/model/Version.java | 2 +-
.../ci/tcbot/chain/BuildChainProcessorTest.java | 2 +-
3 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
index d1b0c89..f2199a5 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
@@ -30,7 +30,6 @@ import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -96,7 +95,7 @@ public class BuildChainProcessor {
if (entryPoints.isEmpty())
return res;
- Map<Integer, Future<FatBuildCompacted>> builds = loadChain(entryPoints, mode, teamcityIgnited);
+ Map<Integer, Future<FatBuildCompacted>> builds = loadAllBuildsInChains(entryPoints, mode, teamcityIgnited);
builds.values().stream().map(FutureUtil::getResult)
.filter(b -> !b.isComposite() && b.getTestsCount() > 0)
@@ -169,7 +168,7 @@ public class BuildChainProcessor {
if (entryPoints.isEmpty())
return new FullChainRunCtx(Build.createFakeStub());
- Map<Integer, Future<FatBuildCompacted>> builds = loadChain(entryPoints, mode, tcIgn);
+ Map<Integer, Future<FatBuildCompacted>> builds = loadAllBuildsInChains(entryPoints, mode, tcIgn);
Map<String, List<Future<FatBuildCompacted>>> freshRebuilds = new ConcurrentHashMap<>();
@@ -237,7 +236,7 @@ public class BuildChainProcessor {
}
@NotNull
- public Map<Integer, Future<FatBuildCompacted>> loadChain(Collection<Integer> entryPoints,
+ public Map<Integer, Future<FatBuildCompacted>> loadAllBuildsInChains(Collection<Integer> entryPoints,
SyncMode mode,
ITeamcityIgnited tcIgn) {
Map<Integer, Future<FatBuildCompacted>> builds = new ConcurrentHashMap<>();
@@ -246,15 +245,24 @@ public class BuildChainProcessor {
.filter(Objects::nonNull)
.map(id -> getOrLoadBuild(id, mode, builds, tcIgn));
- Stream<Integer> dependenciesFirstLevel = entryPointsFatBuilds
- .flatMap(ref -> dependencies(ref, mode, builds, tcIgn).stream());
+ Set<Integer> remainedUnloadedDeps = entryPointsFatBuilds
+ .flatMap(ref -> dependencies(ref, mode, builds, tcIgn).stream()).collect(Collectors.toSet());
- Stream<Integer> depsSecondLevel = dependenciesFirstLevel.map(builds::get)
- .peek(val -> Preconditions.checkNotNull(val, "Build future should be in context"))
- .flatMap(ref -> dependencies(ref, mode, builds, tcIgn).stream());
+ for (int level = 1; level < 5; level++) {
+ if (remainedUnloadedDeps.isEmpty())
+ break;
+
+ Set<Integer> depsNextLevel = remainedUnloadedDeps
+ .stream()
+ .map(builds::get)
+ .peek(val -> Preconditions.checkNotNull(val, "Build future should be in context"))
+ .flatMap(ref -> dependencies(ref, mode, builds, tcIgn).stream()).collect(Collectors.toSet());
+
+ logger.info("Level [" + level + "] dependencies:" + depsNextLevel);
+
+ remainedUnloadedDeps = depsNextLevel;
+ }
- Set<Integer> collect = depsSecondLevel.collect(Collectors.toSet());
- System.err.println("New deps of second level:" + collect);
return builds;
}
@@ -264,7 +272,11 @@ public class BuildChainProcessor {
builds.values().forEach(bFut -> {
FatBuildCompacted b = FutureUtil.getResult(bFut);
- buildsByBt.computeIfAbsent(b.buildTypeId(compactor), k -> new ArrayList<>()).add(b);
+ String buildTypeId = b.buildTypeId(compactor);
+ if (buildTypeId == null)
+ logger.error("Invalid build type ID for build " + b.getId());
+ else
+ buildsByBt.computeIfAbsent(buildTypeId, k -> new ArrayList<>()).add(b);
});
return buildsByBt;
}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
index 51ce92e..c406e7f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
@@ -23,7 +23,7 @@ package org.apache.ignite.ci.web.model;
public static final String GITHUB_REF = "https://github.com/apache/ignite-teamcity-bot";
/** TC Bot Version. */
- public static final String VERSION = "20181120";
+ public static final String VERSION = "20181121";
/** TC Bot Version. */
public String version = VERSION;
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessorTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessorTest.java
index 23c735e..be5d683 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessorTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessorTest.java
@@ -136,7 +136,7 @@ public class BuildChainProcessorTest {
assertTrue(!suites2.isEmpty());
- for (MultBuildRunCtx suite : suites) {
+ for (MultBuildRunCtx suite : suites2) {
System.out.println(suite.getFailedTestsNames().collect(Collectors.toList()));
if (suite.suiteName() != null && suite.suiteName().startsWith(UNIQUE_FAILED_TEST)) {