private boolean deleteIfOldSlingId()

in src/main/java/org/apache/sling/discovery/oak/SlingIdCleanupTask.java [546:593]


    private boolean deleteIfOldSlingId(Resource resourceOrNull, String slingId,
            ModifiableValueMap syncTokenMap, ValueMap idMapMap,
            Set<String> activeSlingIds, Calendar now, long localMinCreationAgeMillis)
            throws PersistenceException {
        logger.trace("deleteIfOldSlingId : handling slingId = {}", slingId);
        if (activeSlingIds.contains(slingId)) {
            logger.trace("deleteIfOldSlingId : slingId is currently active : {}",
                    slingId);
            return false;
        } else if (seenInstances.contains(slingId)) {
            logger.trace("deleteIfOldSlingId : slingId seen active previously : {}",
                    slingId);
            return false;
        }
        // only check in idmap and for leaderElectionId details if the clusterInstance
        // resource is there
        if (resourceOrNull != null) {
            Object clusterNodeId = idMapMap.get(slingId);
            if (clusterNodeId == null) {
                logger.trace("deleteIfOldSlingId : slingId {} not recently in use",
                        slingId);
            } else {
                logger.trace("deleteIfOldSlingId : slingId {} WAS recently in use : {}",
                        slingId, clusterNodeId);
                return false;
            }
            Object o = resourceOrNull.getValueMap().get("leaderElectionIdCreatedAt");
            final long leaderElectionIdCreatedAt = millisOf(o);
            if (leaderElectionIdCreatedAt <= 0) {
                // skip
                logger.trace(
                        "deleteIfOldSlingId: resource ({}) has no or wrongly typed leaderElectionIdCreatedAt : {}",
                        resourceOrNull, o);
                return false;
            }
            final long diffMillis = now.getTimeInMillis() - leaderElectionIdCreatedAt;
            if (diffMillis <= localMinCreationAgeMillis) {
                logger.trace("deleteIfOldSlingId: not old slingId : {}", resourceOrNull);
                return false;
            }
        }
        logger.trace("deleteIfOldSlingId: deleting old slingId : {}", resourceOrNull);
        syncTokenMap.remove(slingId);
        if (resourceOrNull != null) {
            resourceOrNull.getResourceResolver().delete(resourceOrNull);
        }
        return true;
    }