in src/main/java/org/apache/sling/discovery/oak/pinger/OakViewChecker.java [244:286]
public boolean resetLeaderElectionId() {
ResourceResolver resourceResolver = null;
try{
final String myClusterNodePath = getLocalClusterNodePath();
resourceResolver = getResourceResolver();
if (resourceResolver==null) {
logger.warn("resetLeaderElectionId: could not login, new leaderElectionId will be calculated upon next heartbeat only!");
return false;
}
String newLeaderElectionId = newLeaderElectionId();
final Resource resource = ResourceHelper.getOrCreateResource(
resourceResolver, myClusterNodePath);
final ModifiableValueMap resourceMap = resource.adaptTo(ModifiableValueMap.class);
resourceMap.put(PROPERTY_ID_RUNTIME, runtimeId);
// SLING-4765 : store more infos to be able to be more verbose on duplicate slingId/ghost detection
String slingHomePath = "n/a";
if (slingSettingsService != null && slingSettingsService.getSlingHomePath() != null) {
slingHomePath = slingSettingsService.getSlingHomePath();
}
resourceMap.put(PROPERTY_ID_SLING_HOME_PATH, slingHomePath);
final String endpointsAsString = getEndpointsAsString();
resourceMap.put(PROPERTY_ID_ENDPOINTS, endpointsAsString);
Calendar leaderElectionCreatedAt = Calendar.getInstance();
resourceMap.put("leaderElectionId", newLeaderElectionId);
resourceMap.put("leaderElectionIdCreatedAt", leaderElectionCreatedAt);
logger.info("resetLeaderElectionId: storing my runtimeId: {}, endpoints: {}, sling home path: {}, new leaderElectionId: {}, created at: {}",
new Object[]{runtimeId, endpointsAsString, slingHomePath, newLeaderElectionId, leaderElectionCreatedAt});
resourceResolver.commit();
} catch (LoginException e) {
logger.error("resetLeaderElectionid: could not login: "+e, e);
} catch (PersistenceException e) {
logger.error("resetLeaderElectionid: got PersistenceException: "+e, e);
} finally {
if (resourceResolver!=null) {
resourceResolver.close();
}
}
return true;
}