use of org.apache.sling.discovery.impl.common.resource.EstablishedClusterView in project sling by apache.
the class ClusterViewServiceImpl method getLocalClusterView.
@Override
public LocalClusterView getLocalClusterView() throws UndefinedClusterViewException {
if (resourceResolverFactory == null) {
logger.warn("getClusterView: no resourceResolverFactory set at the moment.");
throw new UndefinedClusterViewException(Reason.REPOSITORY_EXCEPTION, "no resourceResolverFactory set");
}
ResourceResolver resourceResolver = null;
try {
resourceResolver = resourceResolverFactory.getServiceResourceResolver(null);
View view = ViewHelper.getEstablishedView(resourceResolver, config);
if (view == null) {
logger.debug("getClusterView: no view established at the moment. isolated mode");
throw new UndefinedClusterViewException(Reason.NO_ESTABLISHED_VIEW, "no established view at the moment");
}
if (failedEstablishedViewId != null && failedEstablishedViewId.equals(view.getResource().getName())) {
// SLING-5195 : the heartbeat-handler-self-check has declared the currently
// established view as invalid - hence we should now treat this as
// undefined clusterview
logger.debug("getClusterView: current establishedView is marked as invalid: " + failedEstablishedViewId);
throw new UndefinedClusterViewException(Reason.NO_ESTABLISHED_VIEW, "current established view was marked as invalid");
}
EstablishedClusterView clusterViewImpl = new EstablishedClusterView(config, view, getSlingId());
InstanceDescription local = clusterViewImpl.getLocalInstance();
if (local != null) {
return clusterViewImpl;
} else {
logger.info("getClusterView: the local instance (" + getSlingId() + ") is currently not included in the existing established view! " + "This is normal at startup. At other times is pseudo-network-partitioning is an indicator for repository/network-delays or clocks-out-of-sync (SLING-3432). " + "(increasing the heartbeatTimeout can help as a workaround too) " + "The local instance will stay in TOPOLOGY_CHANGING or pre _INIT mode until a new vote was successful.");
throw new UndefinedClusterViewException(Reason.ISOLATED_FROM_TOPOLOGY, "established view does not include local instance - isolated");
}
} catch (UndefinedClusterViewException e) {
// pass through
throw e;
} catch (LoginException e) {
logger.error("handleEvent: could not log in administratively: " + e, e);
throw new UndefinedClusterViewException(Reason.REPOSITORY_EXCEPTION, "could not log in administratively: " + e);
} catch (Exception e) {
logger.error("handleEvent: got an exception: " + e, e);
throw new UndefinedClusterViewException(Reason.REPOSITORY_EXCEPTION, "could not log in administratively: " + e);
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
}
Aggregations