Skip to content

Commit ed36aee

Browse files
eduardojst10hmiguim
authored andcommitted
added skip_rollback_on_validation_failure param for conditionally skip transaction rollback; update RODATransactionManager logic for reports with failed steps. (#3572)
1 parent 4ae8562 commit ed36aee

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

roda-common/roda-common-data/src/main/java/org/roda/core/data/common/RodaConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,6 +1382,7 @@ public enum OrchestratorType {
13821382
public static final String PLUGIN_PARAMS_DONT_CHECK_RELATIVES = "parameter.dont_check_relatives";
13831383
public static final String PLUGIN_PARAMS_REPRESENTATION_INFORMATION_FILTER = "parameter.representation_information_filter";
13841384
public static final String PLUGIN_PARAMS_RODA_MEMBER_ACTIVATE = "parameter.activate";
1385+
public static final String PLUGIN_PARAM_SKIP_ROLLBACK_ON_VALIDATION_FAILURE = "parameter.skip_rollback_on_validation_failure";
13851386

13861387
public static final String PLUGIN_PARAMS_VALIDATE_DESCRIPTIVE_METADATA = "parameter.validate_descriptive_metadata";
13871388
public static final String PLUGIN_PARAMS_DESCRIPTIVE_METADATA_TYPE = "parameter.metadata_type";

roda-core/roda-core/src/main/java/org/roda/core/transaction/RODATransactionManager.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@
88
package org.roda.core.transaction;
99

1010
import java.nio.file.Path;
11+
import java.util.Arrays;
1112
import java.util.Date;
1213
import java.util.List;
1314
import java.util.Map;
15+
import java.util.Set;
1416
import java.util.UUID;
1517
import java.util.concurrent.ConcurrentHashMap;
18+
import java.util.stream.Collectors;
1619

1720
import org.roda.core.config.ConfigurationManager;
1821
import org.roda.core.data.common.RodaConstants;
@@ -126,11 +129,24 @@ private void processPluginExecutionResult(Plugin<IsRODAObject> plugin, UUID tran
126129
List<Report> nonFailedReports = relatedReports.stream()
127130
.filter(report -> !PluginState.FAILURE.equals(report.getPluginState())).toList();
128131

129-
if (!failedReports.isEmpty()) {
130-
rollbackTransaction(transactionId);
131-
RODATransactionManagerUtils.createTransactionFailureReports(failedReports, nonFailedReports, transactionId,
132-
initDate, mainModelService);
133-
} else {
132+
String noRollback = plugin.getParameterValues()
133+
.getOrDefault(RodaConstants.PLUGIN_PARAM_SKIP_ROLLBACK_ON_VALIDATION_FAILURE, "");
134+
Set<String> noRollbackPlugins = Arrays.stream(noRollback.split(",")).map(String::trim).filter(s -> !s.isEmpty())
135+
.collect(Collectors.toSet());
136+
boolean shouldRollback = false;
137+
for (Report failedReport : failedReports) {
138+
for (Report nestedReport : failedReport.getReports()) {
139+
if (nestedReport.getPluginState().equals(PluginState.FAILURE)
140+
&& !noRollbackPlugins.contains(nestedReport.getPlugin())) {
141+
rollbackTransaction(transactionId);
142+
RODATransactionManagerUtils.createTransactionFailureReports(failedReports, nonFailedReports, transactionId,
143+
initDate, mainModelService);
144+
shouldRollback = true;
145+
}
146+
}
147+
}
148+
149+
if (!shouldRollback) {
134150
endTransaction(transactionId);
135151
RODATransactionManagerUtils.createTransactionSuccessReports(relatedReports, transactionId, initDate,
136152
mainModelService);

0 commit comments

Comments
 (0)