in tcbot-teamcity-ignited/src/main/java/org/apache/ignite/tcignited/build/ProactiveFatBuildSync.java [136:197]
protected String findMissingBuildsFromBuildRef(String srvCode, ITeamcityConn conn) {
int srvIdMaskHigh = ITeamcityIgnited.serverIdToInt(srvCode);
List<Integer> buildsIdsToLoad = new ArrayList<>();
AtomicInteger totalAskedToLoad = new AtomicInteger();
Affinity<Long> affinity = fatBuildDao.affinity();
int partitions = affinity.partitions();
int checkBatchSize = 1000;
GridIntList keysToCheck = new GridIntList();
for (int p = 0; p < partitions; p++) {
int curPart = p;
buildRefDao.compactedBuildsForServer(srvIdMaskHigh, bref -> true)
.filter(
bref -> {
long fatBuildKey = FatBuildDao.buildIdToCacheKey(srvIdMaskHigh, bref.id());
int part = affinity.partition(fatBuildKey);
return part == curPart;
}
)
.forEach(buildRef -> {
int buildId = buildRef.id();
if (buildRef.isRunning(compactor) || buildRef.isQueued(compactor))
buildsIdsToLoad.add(buildId); //re-check queued
else
keysToCheck.add(buildId); // check if missing
int initSize = keysToCheck.size();
if (initSize >= checkBatchSize) {
System.err.println("findMissingBuilds: Srv: " + srvCode + " Checking " + initSize + " builds for partition " + curPart);
int[] buildIds = keysToCheck.array();
keysToCheck.clear();
Collection<Integer> builds = fatBuildDao.getMissingBuilds(srvIdMaskHigh, buildIds);
System.err.println("foundMissing: " + builds.size() + ": Srv: " + srvCode + " Checking " + initSize + " builds for partition " + curPart);
buildsIdsToLoad.addAll(builds);
}
if (buildsIdsToLoad.size() >= 100) {
totalAskedToLoad.addAndGet(buildsIdsToLoad.size());
scheduleBuildsLoad(conn, buildsIdsToLoad);
buildsIdsToLoad.clear();
}
});
}
if (!keysToCheck.isEmpty())
buildsIdsToLoad.addAll(fatBuildDao.getMissingBuilds(srvIdMaskHigh, keysToCheck.array()));
if (!buildsIdsToLoad.isEmpty()) {
totalAskedToLoad.addAndGet(buildsIdsToLoad.size());
scheduleBuildsLoad(conn, buildsIdsToLoad);
}
return "Invoked later load for " + totalAskedToLoad.get() + " builds from " + srvCode;
}