@Override
public void apply(KieServerRegistry kieServerRegistry, KieServer kieServer) {
DefaultRestControllerImpl controller = new DefaultRestControllerImpl(kieServerRegistry);
List<String> containerAliases = kieServerRegistry.getContainerAliases();
if (containerAliases.isEmpty()) {
logger.debug("No containers found, quiting");
return;
}
for (String alias : containerAliases) {
List<KieContainerInstanceImpl> containerInstances = kieServerRegistry.getContainersForAlias(alias);
if (containerInstances.isEmpty() || containerInstances.size() == 1) {
logger.debug("Containers for alias {} are already on expected level (number of containers is {})", alias, containerInstances.size());
continue;
}
String latestContainerId = LatestContainerLocator.get().locateContainer(alias, containerInstances);
final Map<String, String> report = new HashMap<>();
containerInstances.stream()
.filter(kci -> !kci.getContainerId().equals(latestContainerId))
.filter(kci -> !kci.getStatus().equals(KieContainerStatus.CREATING))
.forEach(kci -> {
ServiceResponse<Void> response = kieServer.disposeContainer(kci.getContainerId());
report.put(kci.getContainerId(), response.getType().toString());
logger.debug("Dispose of container {} completed with {} message {}", kci.getContainerId(), response.getType().toString(), response.getMsg());
if (response.getType().equals(ServiceResponse.ResponseType.SUCCESS)) {
controller.stopContainer(kci.getContainerId());
}
});
logger.info("KeepLatestContainerOnlyPolicy applied to {} successfully (report {})", alias, report);
}
}