in obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEventHandler.java [115:174]
public void handle(ClusterObrBundleEvent event) {
// check if the handler is ON
if (this.getSwitch().getStatus().equals(SwitchStatus.OFF)) {
LOGGER.debug("CELLAR OBR: {} switch is OFF", SWITCH_ID);
return;
}
if (groupManager == null) {
//in rare cases for example right after installation this happens!
LOGGER.error("CELLAR OBR: retrieved cluster event {} while groupManager is not available yet!", event);
return;
}
// check if the group is local
if (!groupManager.isLocalGroup(event.getSourceGroup().getName())) {
LOGGER.debug("CELLAR OBR: node is not part of the event cluster group {}", event.getSourceGroup().getName());
return;
}
// check if it's not a "local" event
if (event.getLocal() != null && event.getLocal().getId().equalsIgnoreCase(clusterManager.getNode().getId())) {
LOGGER.trace("CELLAR OBR: cluster event is local (coming from local synchronizer or listener)");
return;
}
String bundleId = event.getBundleId();
boolean deployOptional = event.getDeployOptional();
boolean start = event.getStart();
try {
if (isAllowed(event.getSourceGroup(), Constants.BUNDLES_CONFIG_CATEGORY, bundleId, EventType.INBOUND)) {
Resolver resolver = obrService.resolver();
String[] target = getTarget(bundleId);
Resource resource = selectNewestVersion(searchRepository(target[0], target[1]));
if (resource == null) {
LOGGER.warn("CELLAR OBR: bundle {} unknown", target[0]);
return;
}
resolver.add(resource);
if ((resolver.getAddedResources() != null) &&
(resolver.getAddedResources().length > 0)) {
if (resolver.resolve(deployOptional ? 0 : Resolver.NO_OPTIONAL_RESOURCES)) {
resolver.deploy(start ? Resolver.START : 0);
}
} else {
Reason[] reqs = resolver.getUnsatisfiedRequirements();
if (reqs != null && reqs.length > 0) {
LOGGER.warn("CELLAR OBR: unsatisfied requirement(s): ");
for (int reqIdx = 0; reqIdx < reqs.length; reqIdx++) {
LOGGER.warn(" {}", reqs[reqIdx].getRequirement().getFilter());
LOGGER.warn(" {}", reqs[reqIdx].getResource().getPresentationName());
}
} else LOGGER.warn("CELLAR OBR: could not resolve targets");
}
} else LOGGER.trace("CELLAR OBR: bundle {} is marked as BLOCKED INBOUND for cluster group {}", bundleId, event.getSourceGroup().getName());
} catch (Exception e) {
LOGGER.error("CELLAR OBR: failed to handle bundle event {}", bundleId, e);
}
}