diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/Messages.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/Messages.java
index d84760ad58..e06960b330 100644
--- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/Messages.java
+++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/Messages.java
@@ -61,8 +61,8 @@ public class Messages {
public static final String ERROR_WHILE_CHECKING_SERVICE_KEY_OPERATION_0 = "Error while checking service key operation \"{0}\"";
public static final String ERROR_OCCURRED_WHILE_CREATING_SERVICE_KEY_0 = "Error occurred while creating service key \"{0}\"";
public static final String ERROR_OCCURRED_WHILE_DELETING_SERVICE_KEY_0 = "Error occurred while deleting service key \"{0}\"";
- public static final String OPERATION_FOR_SERVICE_KEY_0_FAILED_WITH_DESCRIPTION_1 = "Operation for service key \"{0}\", failed with description \"{1}\"";
- public static final String OPERATION_FOR_OPTIONAL_SERVICE_KEY_0_FAILED_WITH_DESCRIPTION_1 = "Operation for service key \"{0}\". for optional service, failed with description \"{1}\"";
+ public static final String OPERATION_FOR_SERVICE_KEY_0_FAILED_WITH_DESCRIPTION_1 = "Operation for service key \"{0}\" failed: {1}";
+ public static final String OPERATION_FOR_OPTIONAL_SERVICE_KEY_0_FAILED_WITH_DESCRIPTION_1 = "Operation for optional service key \"{0}\" failed: {1}";
public static final String APPLICATION_0_WAS_NOT_FOUND = "Application \"{0}\" was not found";
public static final String FAILED_TO_UPDATE_FILES_OF_OPERATION_0 = "Failed to update files of operation: {0}";
public static final String COULD_NOT_DELETE_ORPHANED_FILES_MODIFIED_AFTER_0_AND_BEFORE_1 = "Could not delete orphaned files modified after {0} and before {1}";
@@ -88,13 +88,14 @@ public class Messages {
public static final String SECRET_VALUE_NOT_FOUND_FOR_TOKEN_0_PID_1_VARIABLE_2 = "Secret value not found for token \"{0}\" (process instance id=\"{1}\", variable=\"{2}\")";
public static final String INVALID_ENCRYPTION_KEY_LENGTH = "Length of the encryption key is invalid - it must be 32 characters long!";
public static final String MISSING_MTA_ID_IN_ENCRYPTION_KEY_RESOLVER = "Missing mtaId in encryption key resolver! Cannot continue from here!";
+ public static final String STEP_OF_THE_PROCESS_HAS_FAILED = "A step of the process has failed.";
// Audit log messages
// ERROR log messages
public static final String COULD_NOT_COMPUTE_ORG_AND_SPACE = "Could not find org and space for space ID \"{0}\"";
public static final String NO_BUILDS_FOUND_FOR_PACKAGE = "No builds found for package \"{0}\"";
- public static final String ASYNC_OPERATION_FOR_SERVICE_BROKER_FAILED_WITH = "Async operation for service broker \"{0}\" failed with \"{1}\"";
+ public static final String ASYNC_OPERATION_FOR_SERVICE_BROKER_FAILED_WITH = "Async operation for service broker \"{0}\" failed with errors: {1}";
public static final String CLEARING_STALE_FLOWABLE_LOCK_OWNER_0_THREW_AN_EXCEPTION_1 = "Clearing stale Flowable lock owner {0} threw an exception: {1}";
public static final String SERVICE_INSTANCE_0_NOT_BOUND_TO_APP_1 = "Service instance \"{0}\" not bound to application \"{1}\"";
public static final String ERROR_WHILE_DELETING_SERVICE_INSTANCE_METADATA_0 = "Error while deleting service instance metadata \"{0}\"";
@@ -136,21 +137,18 @@ public class Messages {
public static final String ERROR_PREPARING_MODULES_DEPLOYMENT = "Error preparing modules deployment";
public static final String ERROR_PREPARING_RESOURCES_FOR_PROCESSING_AND_RESOLVE_DYNAMIC_PARAMETERS = "Error preparing resources for processing and resolution of dynamic parameters";
public static final String ERROR_STOPPING_APP = "Error stopping application \"{0}\"";
- public static final String DOWNLOAD_APP_LOGS_FOR_MORE_INFO = "Download the application logs via the dmol command and check them for more information.";
+ public static final String DOWNLOAD_APP_LOGS_FOR_MORE_INFO = "Download the MTA operation logs for more details.";
public static final String ERROR_STAGING_APP_0 = "Error staging application \"{0}\"";
- public static final String ERROR_STAGING_APP_0_DESCRIPTION_1 =
- "Error staging application \"{0}\": {1}\n" + DOWNLOAD_APP_LOGS_FOR_MORE_INFO;
+ public static final String ERROR_STAGING_APP_0_DESCRIPTION_1 = "Error staging application \"{0}\": {1}. Check the application logs of your application for details.";
public static final String ERROR_PUBLISHING_PUBLIC_PROVIDED_DEPENDENCIES = "Error publishing public provided dependencies";
public static final String ERROR_STARTING_APP_0 = "Error starting application \"{0}\"";
public static final String ERROR_NONE_OF_THE_INSTANCES_OF_THE_APP_0_BECOME_ROUTABLE = "None of the instances of the app \"{0}\" become routable. Please verify that the defined MTA parameters for the readiness health check align with the app’s code and configuration.";
- public static final String ERROR_STARTING_APP_0_DESCRIPTION_1 =
- "Error starting application \"{0}\": {1}\n" + DOWNLOAD_APP_LOGS_FOR_MORE_INFO;
+ public static final String ERROR_STARTING_APP_0_DESCRIPTION_1 = "Error starting application \"{0}\": {1}";
public static final String ERROR_EXECUTING_APP_1 = "Error executing application \"{0}\"";
public static final String ERROR_EXECUTING_APP_2 = "Error executing application \"{0}\": {1}";
public static final String ERROR_PREPARING_TO_EXECUTE_TASKS_ON_APP = "Error preparing to execute tasks on application \"{0}\"";
public static final String ERROR_PREPARING_TO_RESTART_SERVICE_BROKER_SUBSCRIBERS = "Error preparing to restart service broker subscribers";
- public static final String ERROR_EXECUTING_TASK_0_ON_APP_1 =
- "Execution of task \"{0}\" on application \"{1}\" failed.\n" + DOWNLOAD_APP_LOGS_FOR_MORE_INFO;
+ public static final String ERROR_EXECUTING_TASK_0_ON_APP_1 = "Execution of task \"{0}\" on application \"{1}\" failed.";
public static final String ERROR_DETECTING_COMPONENTS_TO_UNDEPLOY = "Error detecting components to undeploy";
public static final String ERROR_DELETING_IDLE_ROUTES = "Error deleting idle routes";
public static final String ERROR_CREATING_SERVICE_BROKERS = "Error creating service brokers";
@@ -188,11 +186,11 @@ public class Messages {
public static final String ERROR_WHILE_POLLING_SERVICE_BINDING_OPERATIONS_BETWEEN_APP_0_AND_SERVICE_INSTANCE_1 = "Error while polling service binding operations between app: \"{0}\" and service instance \"{1}\"";
public static final String ERROR_WHILE_CHECKING_SERVICE_BINDING_OPERATIONS_BETWEEN_APP_0_AND_SERVICE_INSTANCE_1 = "Error while checking service binding operations between app: \"{0}\" and service instance \"{1}\"";
public static final String ERROR_WHILE_CHECKING_SERVICE_BINDING_OPERATIONS_0 = "Error while checking service binding operations for service binding: \"{0}\"";
- public static final String ASYNC_OPERATION_FOR_SERVICE_BINDING_FAILED_WITH = "Async operation for service binding \"{0}\" between app \"{1}\" and service instance \"{2}\" with offering \"{3}\" and plan \"{4}\" failed with \"{5}\"";
- public static final String ASYNC_OPERATION_FOR_USER_PROVIDED_SERVICE_BINDING_FAILED_WITH = "Async operation for service binding \"{0}\" between app \"{1}\" and user-provided service instance \"{2}\" failed with \"{3}\"";
+ public static final String ASYNC_OPERATION_FOR_SERVICE_BINDING_FAILED_WITH = "Async operation for service binding \"{0}\" between app \"{1}\" and service instance \"{2}\" with offering \"{3}\" and plan \"{4}\" failed with errors: {5}";
+ public static final String ASYNC_OPERATION_FOR_USER_PROVIDED_SERVICE_BINDING_FAILED_WITH = "Async operation for service binding \"{0}\" between app \"{1}\" and user-provided service instance \"{2}\" failed with errors: {3}";
public static final String ASYNC_OPERATION_FOR_SERVICE_BINDING_FAILED_INSTANCE_MISSING = "Async operation for service binding \"{0}\" between app \"{1}\" and service instance \"{2}\" failed: Instance not found. Cause: {3}";
- public static final String ASYNC_OPERATION_FOR_SERVICE_KEY_FAILED_WITH = "Async operation for service key of service instance \"{0}\" failed with \"{1}\"";
- public static final String ASYNC_OPERATION_FOR_OPTIONAL_SERVICE_KEY_FAILED_WITH = "Async operation for service key of optional service instance \"{0}\" failed with \"{1}\"";
+ public static final String ASYNC_OPERATION_FOR_SERVICE_KEY_FAILED_WITH = "Async operation for service key of service instance \"{0}\" failed with errors: {1}";
+ public static final String ASYNC_OPERATION_FOR_OPTIONAL_SERVICE_KEY_FAILED_WITH = "Async operation for service key of optional service instance \"{0}\" failed with errors: {1}";
public static final String ASYNC_OPERATION_FOR_SERVICE_BINDING_FOR_OPTIONAL_SERVICE_FAILED_WITH = "Async operation for service binding \"{0}\" for optional service between app \"{1}\" and service instance \"{2}\" failed with \"{3}\"";
public static final String ERROR_WHILE_CALCULATING_SERVICE_BINDINGS_TO_DELETE_0 = "Error while calculating service bindings to delete \"{0}\"";
public static final String ERROR_WHILE_CREATING_SERVICE_KEY_0 = "Error while creating service key \"{0}\"";
@@ -290,8 +288,8 @@ public class Messages {
public static final String UNBINDING_SERVICE_INSTANCE_FROM_APP_FINISHED = "Unbinding service instance \"{0}\" from application \"{1}\" finished";
public static final String POLLING_SERVICE_OPERATIONS = "Polling service operations...";
public static final String AUTO_ABORTING_PROCESS_0 = "Auto-aborting process \"{0}\"...";
- public static final String SOME_INSTANCES_ARE_DOWN = "Some instances are down. Check the logs of your application for more information.";
- public static final String SOME_INSTANCES_HAVE_CRASHED = "Some instances have crashed. Check the logs of your application for more information.";
+ public static final String SOME_INSTANCES_ARE_DOWN = "Some instances are down. Check the application logs of your application for details.";
+ public static final String SOME_INSTANCES_HAVE_CRASHED = "Some instances have crashed. Check the application logs of your application for details.";
public static final String CLEAN_UP_JOB_STARTED_BY_APPLICATION_INSTANCE_0_AT_1 = "Clean-up job started by application instance {0} at: {1}";
public static final String CLEAN_UP_JOB_WHICH_STARTED_AT_0_HAS_FINISHED_AT_1 = "Clean-up job, which started at: {0}, has finished at: {1}";
public static final String WILL_CLEAN_UP_DATA_STORED_BEFORE_0 = "Will clean-up data stored before: {0}";
@@ -337,7 +335,7 @@ public class Messages {
public static final String DELETED_FILE_ENTRIES_0 = "Deleted file entries: {0}";
public static final String APPLICATION_WITH_NAME_0_SAVED_TO_1 = "Application with name \"{0}\" saved to \"{1}\"";
public static final String CLOSING_STREAM_FOR_PART_0 = "Closing stream for part: {0}";
- public static final String REACHED_THE_END_OF_THE_INPUTSTREAM = "Reached the end of the InputStream";
+ public static final String REACHED_THE_END_OF_THE_INPUT_STREAM = "Reached the end of the input stream";
public static final String CLOSING_LAST_STREAM_FOR_PART_0 = "Closing the last stream, part: {0}";
public static final String SCALING_UP_OLD_APPLICATION = "Scaling up old application: \"{0}\" to {1} instances";
public static final String FILE_WITH_ID_0_WAS_DELETED = "File with id \"{0}\" was deleted";
diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/SyncFlowableStep.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/SyncFlowableStep.java
index c397e1cc7b..7241c4805c 100644
--- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/SyncFlowableStep.java
+++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/SyncFlowableStep.java
@@ -1,14 +1,12 @@
package org.cloudfoundry.multiapps.controller.process.steps;
-import java.util.function.BiFunction;
-import java.util.function.Consumer;
-
import io.netty.handler.timeout.TimeoutException;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import org.apache.commons.lang3.StringUtils;
import org.cloudfoundry.multiapps.common.ContentException;
import org.cloudfoundry.multiapps.common.SLException;
+import org.cloudfoundry.multiapps.common.StepPhaseRetryException;
import org.cloudfoundry.multiapps.controller.client.facade.CloudControllerException;
import org.cloudfoundry.multiapps.controller.client.facade.CloudOperationException;
import org.cloudfoundry.multiapps.controller.client.facade.CloudServiceBrokerException;
@@ -35,6 +33,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+
public abstract class SyncFlowableStep implements JavaDelegate {
protected final Logger logger = LoggerFactory.getLogger(getClass());
@@ -80,7 +81,7 @@ private void executeInternal(DelegateExecution execution) {
getStepHelper().preExecuteStep(context, stepPhase);
stepPhase = executeStep(context);
if (stepPhase == StepPhase.RETRY) {
- throw new SLException("A step of the process has failed. Retrying it may solve the issue.");
+ throw new StepPhaseRetryException(Messages.STEP_OF_THE_PROCESS_HAS_FAILED);
}
} catch (Exception e) {
stepPhase = StepPhase.RETRY;
@@ -114,6 +115,10 @@ protected ProcessContext createProcessContext(DelegateExecution execution) {
}
private void handleException(ProcessContext context, Exception e) {
+ if (e instanceof StepPhaseRetryException) {
+ getStepLogger().info(Messages.DOWNLOAD_APP_LOGS_FOR_MORE_INFO);
+ throw (StepPhaseRetryException) e;
+ }
try {
StepPhase stepPhase = context.getVariable(Variables.STEP_PHASE);
if (stepPhase == StepPhase.POLL) {
diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/stream/LazyArchiveInputStream.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/stream/LazyArchiveInputStream.java
index ffc2f886ed..7e61ed0371 100644
--- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/stream/LazyArchiveInputStream.java
+++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/stream/LazyArchiveInputStream.java
@@ -51,7 +51,7 @@ public synchronized int read() throws IOException {
currentInputStream = openBufferedInputStream(archiveFileEntries.get(partIndex.incrementAndGet()));
c = currentInputStream.read();
} else if (c == -1) {
- LOGGER.info(MessageFormat.format(Messages.REACHED_THE_END_OF_THE_INPUTSTREAM, partIndex));
+ LOGGER.info(MessageFormat.format(Messages.REACHED_THE_END_OF_THE_INPUT_STREAM, partIndex));
}
if (c >= 0) {
totalBytesRead.incrementAndGet();
@@ -71,7 +71,7 @@ public synchronized int read(byte[] b, int off, int len) throws IOException {
currentInputStream = openBufferedInputStream(archiveFileEntries.get(partIndex.incrementAndGet()));
bytesRead = currentInputStream.read(b, off, len);
} else if (bytesRead == -1) {
- LOGGER.info(MessageFormat.format(Messages.REACHED_THE_END_OF_THE_INPUTSTREAM, partIndex));
+ LOGGER.info(MessageFormat.format(Messages.REACHED_THE_END_OF_THE_INPUT_STREAM, partIndex));
}
if (bytesRead > 0) {
totalBytesRead.addAndGet(bytesRead);
diff --git a/pom.xml b/pom.xml
index 16e0cf5676..676c05301a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,7 @@
1.1.1
1.21.0
- 2.47.0
+ 2.48.0
4.0.0
4.0.5
4.0.7