@Override public String getContainerId(String alias, ContainerLocator locator) { KieContainerInstanceImpl kieContainerInstance = getContainer(alias, locator); if (kieContainerInstance == null) { return alias; } return kieContainerInstance.getContainerId(); }
@Override public KieContainerInstanceImpl getContainer(String alias, ContainerLocator locator) { KieContainerInstanceImpl containerInstance = getContainer(alias); if (containerInstance == null) { List<KieContainerInstanceImpl> aliasedContainers = containersByAlias.getOrDefault(alias, new ArrayList<KieContainerInstanceImpl>()); if (aliasedContainers.isEmpty()) { // since there are no containers for given alias reject it throw new IllegalArgumentException("Container '" + alias + "' is not instantiated or cannot find container for alias '" + alias + "'"); } String containerId = locator.locateContainer(alias, aliasedContainers); if (containerId == null) { throw new IllegalArgumentException("Cannot find container for alias '" + alias + "'"); } aliasedContainers.stream() .filter(kci -> kci.getContainerId().equals(containerId)) .findAny() .orElseThrow(() -> new IllegalArgumentException("Container '" + containerId + "' is not associated with alias '" + alias + "'")); return getContainer(containerId); } return containerInstance; }
private List<Message> updateExtensions(KieContainerInstanceImpl kci, ReleaseId releaseId, List<Message> messages) { String containerId = kci.getContainerId(); List<KieServerExtension> extensions = context.getServerExtensions(); Map<String, Object> parameters = getContainerParameters(releaseId, messages); // once the upgrade was successful, notify all extensions so they can be upgraded (if needed) for (KieServerExtension extension : extensions) { extension.updateContainer(containerId, kci, parameters); logger.debug("Container {} (for release id {}) on {} updated successfully", containerId, releaseId, extension); } return messages; }
private List<KieContainerResource> getContainersWithMessages() { List<KieContainerResource> containers = new ArrayList<KieContainerResource>(); for (KieContainerInstanceImpl instance : context.getContainers()) { instance.getResource().setMessages(getMessagesForContainer(instance.getContainerId())); containers.add(instance.getResource()); } return containers; }
@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); } }
private void setMessages(KieContainerInstanceImpl kci) { kci.getResource().setMessages(getMessagesForContainer(kci.getContainerId())); }
ServiceResponse<KieScannerResource> scannerResponse = configureScanner(id, kci, resource); storeServerState(currentState -> { String containerId = kci.getContainerId(); KieScannerResource scannerState = kci.getResource().getScanner(); currentState.getContainers().forEach(containerResource -> {
if (!updateResults.getResults().hasMessages(Level.ERROR)) { List<KieServerExtension> extensions = kieServer.getServerExtensions(); String containerId = kieContainerInstance.getContainerId(); ReleaseId releaseId = kieContainerInstance.getKieContainer().getContainerReleaseId();
private Message updateKieContainerToVersion(KieContainerInstanceImpl kci, ReleaseId releaseId) { String containerId = kci.getContainerId(); Message response = null; kci.clearExtraClasses(); kci.disposeMarshallers(); Results results = kci.getKieContainer().updateToVersion(releaseId); if (results.hasMessages(Level.ERROR)) { response = new Message(Severity.WARN, "Error updating releaseId for container " + containerId + " to version " + releaseId); for (org.kie.api.builder.Message builderMsg : results.getMessages()) { response.addMessage(builderMsg.getText()); } logger.error("Error updating releaseId for container " + containerId + " to version " + releaseId + "\nMessages: " + results.getMessages()); } else { kci.updateReleaseId(); response = new Message(Severity.INFO, "Kie container updated successfully to version " + releaseId); } return response; }