boolean unregister()

in server/src/main/java/org/apache/cassandra/sidecar/restore/RingTopologyRefresher.java [348:382]


        boolean unregister(RestoreJob restoreJob)
        {
            boolean containsJob = allJobs.remove(restoreJob.jobId);
            if (containsJob) // enter this block only once per jobId
            {
                Set<UUID> jobIdsByKeyspace = jobsByKeyspace.get(restoreJob.keyspaceName);
                if (jobIdsByKeyspace == null
                    || jobIdsByKeyspace.isEmpty()
                    || !jobIdsByKeyspace.remove(restoreJob.jobId))
                {
                    LOGGER.warn("Unable to find the restore job id to unregister. jobId={}", restoreJob.jobId);
                    return true;
                }

                if (!jobIdsByKeyspace.isEmpty())
                {
                    // do not remove mapping if there are still jobs of the keyspace
                    return false;
                }

                // Multiple threads could reach here and run the following code to remove entries from maps
                // The removal is idempotent. It is fine to run the code multiple times.
                LOGGER.info("All jobs of the keyspace are unregistered. keyspace={}", restoreJob.keyspaceName);
                jobsByKeyspace.remove(restoreJob.keyspaceName);
                mapping.remove(restoreJob.keyspaceName);
                Promise<?> p = promises.remove(restoreJob.keyspaceName);
                if (p != null)
                {
                    // try to finish the promise, if not yet.
                    p.tryFail("Unable to retrieve topology for restoreJob. " +
                              "jobId=" + restoreJob.jobId + " keyspace=" + restoreJob.keyspaceName);
                }
            }
            return true;
        }