in ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java [287:378]
protected String checkIfChainTriggerable(String srvCode,
String buildTypeId,
String tcBranch,
ITeamcityIgnited tcIgn,
String selfLogin,
ITrackedChain chain,
String agentStatus) {
List<BuildRefCompacted> buildsForBr = tcIgn.getQueuedAndRunningBuildsCompacted(tcBranch);
for (BuildRefCompacted refComp : buildsForBr) {
Integer buildId = refComp.getId();
if (buildId == null)
continue; // should not occur;
FatBuildCompacted fatBuild = tcIgn.getFatBuild(buildId);
Build build = fatBuild.toBuild(compactor);
Triggered triggered = build.getTriggered();
if (triggered == null) {
logger.info("Unable to get triggering info for queued build {} (type={}).", buildId, build.buildTypeId);
continue;
}
User user = build.getTriggered().getUser();
if (user == null) {
logger.info("Unable to get username for queued build {} (type={}). Possibly VCS triggered", buildId, build.buildTypeId);
continue;
}
String buildTypeIdExisting = build.buildTypeId();
if (buildTypeIdExisting == null) {
logger.info("Unable to get buildTypeId for queued build {} (type={}).", buildId, build.buildTypeId);
continue;
}
String login = user.username;
if (selfLogin.equalsIgnoreCase(login)
&& buildTypeIdExisting.trim().equals(Strings.nullToEmpty(buildTypeId).trim())) {
String msg
= MessageFormat.format("Queued build {0} was early triggered " +
"(user {1}, branch {2}, suite {3})." +
" Will not start new build.", Integer.toString(buildId), login, tcBranch, buildTypeIdExisting);
logger.info(msg);
return msg;
}
}
long curr = System.currentTimeMillis();
long delay = chain.triggerBuildQuietPeriod();
long minsPassed = -1;
if (delay > 0) {
Long lastStart = startTimes.get(chain);
if (lastStart != null &&
(minsPassed = TimeUnit.MILLISECONDS.toMinutes(curr - lastStart)) < delay) {
final String msg = MessageFormat.format("Skip triggering build, timeout has not expired " +
"(server={0}, suite={1}, branch={2}, delay={3} mins, passed={4} mins)",
srvCode, buildTypeId, tcBranch,
chain.triggerBuildQuietPeriod(), minsPassed);
logger.info(msg);
return msg;
}
}
startTimes.put(chain, curr);
StringBuilder trigComment = new StringBuilder();
trigComment.append("Scheduled run ");
trigComment.append(agentStatus);
if (minsPassed > 0)
trigComment.append(" Since last build triggering: ").append(Duration.ofMinutes(minsPassed));
T2<Build, Set<Integer>> buildAndIds = tcIgn.triggerBuild(buildTypeId, tcBranch, true, false,
chain.generateBuildParameters(),
true,
trigComment.toString());
Build build = buildAndIds.get1();
return "Build id " + build.getId() + " " + tcBranch + " for " + buildTypeId + " triggered; ";
}