protected String findMissingBuildsFromBuildRef()

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