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/10 17:04:57 UTC

[ignite-teamcity-bot] branch ignite-10211 created (now 1ca04f3)

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

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


      at 1ca04f3  IGNITE-10211: Support triggering non-master branches

This branch includes the following new commits:

     new 1ca04f3  IGNITE-10211: Support triggering non-master branches

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[ignite-teamcity-bot] 01/01: IGNITE-10211: Support triggering non-master branches

Posted by dp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 1ca04f3828ec5636591b62055832efc9dae1013d
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Sat Nov 10 20:02:55 2018 +0300

    IGNITE-10211: Support triggering non-master branches
---
 .../org/apache/ignite/ci/conf/BranchesTracked.java |  10 +-
 .../org/apache/ignite/ci/jobs/CheckQueueJob.java   | 104 ++++++++++++---------
 2 files changed, 67 insertions(+), 47 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/BranchesTracked.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/BranchesTracked.java
index af02282..94d1b25 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/BranchesTracked.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/conf/BranchesTracked.java
@@ -17,10 +17,7 @@
 
 package org.apache.ignite.ci.conf;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -30,6 +27,7 @@ public class BranchesTracked {
     /** Branches. */
     private List<BranchTracked> branches = new ArrayList<>();
 
+
     /**
      * @return list of internal identifiers of branch.
      */
@@ -55,4 +53,8 @@ public class BranchesTracked {
     public Set<String> getServerIds() {
         return branches.stream().flatMap(BranchTracked::getChainsStream).map(ChainAtServer::getServerId).collect(Collectors.toSet());
     }
+
+    public List<BranchTracked> getBranches() {
+        return Collections.unmodifiableList(branches);
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
index d7974e5..5f3a60e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
@@ -25,6 +25,8 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.inject.Inject;
 import jersey.repackaged.com.google.common.base.Throwables;
 import org.apache.ignite.ci.HelperConfig;
@@ -101,29 +103,31 @@ public class CheckQueueJob implements Runnable {
             return msg;
         }
 
-        String branch = FullQueryParams.DEFAULT_TRACKED_BRANCH_NAME;
-
         //todo support several branches
-        final BranchTracked tracked = HelperConfig.getTrackedBranches().getBranchMandatory(branch);
+        List<BranchTracked> tracked = HelperConfig.getTrackedBranches().getBranches();
 
-        if (tracked == null || tracked.getChains() == null || tracked.getChains().isEmpty()) {
-            final String msg = "Background check queue skipped - no config specified for ";
-            logger.info(msg + "\"{}\".", branch);
+        if (tracked == null || tracked.isEmpty()) {
+            final String msg = "Background check queue skipped - no config set for tracked branches.";
+            logger.info(msg);
 
-            return msg + branch;
+            return msg;
         }
 
         int srvsChecked = 0, chainsChecked = 0;
 
-        Map<String, List<ChainAtServerTracked>> chainsBySrv = mapChainsByServer(tracked.getChains());
+        Map<String, List<ChainAtServerTracked>> chainsBySrv = mapChainsByServer(tracked);
 
         for (Map.Entry<String, List<ChainAtServerTracked>> entry : chainsBySrv.entrySet()) {
             String srvId = entry.getKey();
 
-            List<ChainAtServerTracked> chains = entry.getValue();
+            List<ChainAtServerTracked> chainsAll = entry.getValue();
+            List<ChainAtServerTracked> chains = chainsAll.stream()
+                    .filter(c -> Objects.equals(c.serverId, srvId))
+                    .collect(Collectors.toList());
 
             srvsChecked++;
-            chainsChecked += chains.stream().filter(c -> Objects.equals(c.serverId, srvId)).count();
+
+            chainsChecked += chainsAll.size();
 
             try {
                 checkQueue(srvId, chains);
@@ -180,32 +184,44 @@ public class CheckQueueJob implements Runnable {
 
         String selfLogin = creds.getUser(teamcity.serverId());
 
-        for (BuildRef ref : builds) {
-            Build build = teamcity.getBuild(ref.href);
+        StringBuilder res = new StringBuilder();
 
-            User user = build.getTriggered().getUser();
+        for (ChainAtServerTracked chain : chains) {
+            if(!Objects.equals(chain.serverId, teamcity.serverId()))
+                continue;
 
-            if (user == null) {
-                logger.info("Unable to get username for queued build {} (type={}).", ref.getId(), ref.buildTypeId);
+            boolean trigger = true;
+            for (BuildRef ref : builds) {
+                Build build = teamcity.getBuild(ref.href);
 
-                continue;
-            }
+                User user = build.getTriggered().getUser();
 
-            String login = user.username;
+                if (user == null) {
+                    logger.info("Unable to get username for queued build {} (type={}).", ref.getId(), ref.buildTypeId);
 
-            if (selfLogin.equalsIgnoreCase(login)) {
-                final String msg = MessageFormat.format("Queued build {0} was early triggered by me (user {1}). Will not startIgnite build.", ref.getId(), login);
+                    continue;
+                }
 
-                logger.info(msg);
+                String login = user.username;
 
-                return msg;
-            }
-        }
+                if (selfLogin.equalsIgnoreCase(login)
+                        && Objects.equals(ref.branchName, chain.branchForRest)) {
+                    final String msg
+                            = MessageFormat.format("Queued build {0} was early triggered " +
+                            "(user {1}, branch {2}, suite {3})." +
+                            " Will not startIgnite build.", ref.getId(), login, ref.branchName, ref.buildTypeId);
 
-        StringBuilder res = new StringBuilder();
+                    logger.info(msg);
 
-        for (ChainAtServerTracked chain : chains) {
-            if(!Objects.equals(chain.serverId, teamcity.serverId()))
+                    res.append(msg).append("; ");
+
+                    trigger = false;
+
+                    break;
+                }
+            }
+
+            if (!trigger)
                 continue;
 
             long curr = System.currentTimeMillis();
@@ -244,32 +260,34 @@ public class CheckQueueJob implements Runnable {
     }
 
     /**
-     * @param chains chains.
+     * @param branchesTracked Tracked branches.
      * @return Mapped chains to server identifier.
      */
-    private Map<String, List<ChainAtServerTracked>> mapChainsByServer(List<ChainAtServerTracked> chains) {
+    private Map<String, List<ChainAtServerTracked>> mapChainsByServer(List<BranchTracked> branchesTracked) {
         Map<String, List<ChainAtServerTracked>> chainsBySrv = new HashMap<>();
 
-        for (ChainAtServerTracked chain : chains) {
-            String srv = chain.serverId;
+        for(BranchTracked branchTracked: branchesTracked) {
+            for (ChainAtServerTracked chain : branchTracked.getChains()) {
+                String srv = chain.serverId;
 
-            if (!creds.hasAccess(srv)) {
-                logger.warn("Background operations credentials does not grant access to server \"{}\"," +
-                    " build queue trigger will not work.", srv);
+                if (!creds.hasAccess(srv)) {
+                    logger.warn("Background operations credentials does not grant access to server \"{}\"," +
+                            " build queue trigger will not work.", srv);
 
-                continue;
-            }
+                    continue;
+                }
 
-            if (!chain.isTriggerBuild()) {
-                logger.info("Build triggering disabled for server={}, suite={}, branch={}",
-                    srv, chain.getSuiteIdMandatory(), chain.getBranchForRestMandatory());
+                if (!chain.isTriggerBuild()) {
+                    logger.info("Build triggering disabled for server={}, suite={}, branch={}",
+                            srv, chain.getSuiteIdMandatory(), chain.getBranchForRestMandatory());
 
-                continue;
-            }
+                    continue;
+                }
 
-            logger.info("Checking queue for server {}.", srv);
+                logger.info("Checking queue for server {}.", srv);
 
-            chainsBySrv.computeIfAbsent(srv, v -> new ArrayList<>()).add(chain);
+                chainsBySrv.computeIfAbsent(srv, v -> new ArrayList<>()).add(chain);
+            }
         }
 
         return chainsBySrv;