public ConsistencyVerificationResult verify()

in server/src/main/java/org/apache/cassandra/sidecar/cluster/ConsistencyVerifiers.java [199:246]


        public ConsistencyVerificationResult verify(Set<String> succeeded, Set<String> failed, InstanceSetByDc all)
        {
            // flatten and invert to get the mapping from instance to dc name
            Map<String, String> dcByInstance = new HashMap<>(sum(all));
            all.forEach((dcName, replicaSet) -> {
                replicaSet.forEach(instance -> {
                    dcByInstance.put(instance, dcName);
                });
            });

            UnaryOperator<String> dcClassifier = s -> {
                String dc = dcByInstance.get(s);
                return dc != null ? dc : UNKNOWN_DC;
            };
            InstanceSetByDc passedByDc = groupByDc(succeeded, dcClassifier);
            validateNoneFromUnknownDc(passedByDc, "passed");
            InstanceSetByDc failedByDc = groupByDc(failed, dcClassifier);
            validateNoneFromUnknownDc(failedByDc, "failed");

            // check whether passed instance can satisfy quorum in all DCs
            boolean allSatisfied = true;
            boolean anyFailed = false;
            for (String dcName : all.keySet())
            {
                // if any of the datacenter cannot satisfy quorum locally
                if (!geQuorum(passedByDc.get(dcName).size(), all.get(dcName).size()))
                {
                    allSatisfied = false;
                }

                // if any of the datacenter has failed quorum locally
                if (geQuorum(failedByDc.get(dcName).size(), all.get(dcName).size()))
                {
                    anyFailed = true;
                }
            }
            if (allSatisfied)
            {
                return ConsistencyVerificationResult.SATISFIED;
            }

            if (anyFailed)
            {
                return ConsistencyVerificationResult.FAILED;
            }

            return ConsistencyVerificationResult.PENDING;
        }