private synchronized boolean init()

in src/main/java/org/apache/sling/discovery/commons/providers/spi/base/IdMapService.java [184:246]


    private synchronized boolean init() throws LoginException, PersistenceException {
        if (initialized) {
            return true;
        }
        slingId = settingsService.getSlingId();
        ResourceResolver resourceResolver = null;
        try{
            resourceResolver = getResourceResolver();
            DiscoveryLiteDescriptor descriptor =
                    DiscoveryLiteDescriptor.getDescriptorFrom(resourceResolver);
            long me = descriptor.getMyId();
            final Resource resource = ResourceHelper.getOrCreateResource(resourceResolver, getIdMapPath());
            ModifiableValueMap idmap = resource.adaptTo(ModifiableValueMap.class);
            // check to see if either my slingId is already mapped to another clusterNodeId
            // or when my clusterNodeId is already mapped to another slingId
            // in both cases: clean that up
            boolean foundMe = false;
            for (String aKey : new HashSet<>(idmap.keySet())) {
                Object value = idmap.get(aKey);
                if (value instanceof Number) {
                    Number n = (Number)value;
                    if (n.longValue()==me) {
                        // my clusterNodeId is already mapped to
                        // let's check if the key is my slingId
                        if (aKey.equals(slingId)) {
                            // perfect
                            foundMe = true;
                        } else {
                            // cleanup necessary
                            logger.info("init: my clusterNodeId is already mapped to by another slingId, deleting entry: key="+aKey+" mapped to "+value);
                            idmap.remove(aKey);
                        }
                    } else if (aKey.equals(slingId)) {
                        // cleanup necessary
                        logger.info("init: my slingId is already mapped to by another clusterNodeId, deleting entry: key="+aKey+" mapped to "+value);
                        idmap.remove(aKey);
                    } else {
                        // that's just some other slingId-clusterNodeId mapping
                        // leave it unchanged
                    }
                }
            }
            if (!foundMe) {
                logger.info("init: added the following mapping: slingId="+slingId+" to discovery-lite id="+me);
                idmap.put(slingId, me);
            } else {
                logger.info("init: mapping already existed, left unchanged: slingId="+slingId+" to discovery-lite id="+me);
            }
            resourceResolver.commit();
            this.me = me;
            initialized = true;
            notifyAll();
            return true;
        } catch(Exception e) {
            logger.info("init: init failed: "+e);
            return false;
        } finally {
            if (resourceResolver!=null) {
                resourceResolver.close();
            }
        }

    }