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