Skip to content

Commit bbc9bd4

Browse files
authored
Merge pull request #11406 from DANS-KNAW-jp/concurrent-role-assignment
response code 500->409 for concurrent role assignment creations
2 parents b446904 + 5c4f004 commit bbc9bd4

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/main/java/edu/harvard/iq/dataverse/api/Datasets.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import edu.harvard.iq.dataverse.batch.jobs.importer.ImportMode;
1818
import edu.harvard.iq.dataverse.dataaccess.*;
1919
import edu.harvard.iq.dataverse.datacapturemodule.DataCaptureModuleUtil;
20+
import software.amazon.awssdk.services.s3.model.CompletedPart;
2021
import edu.harvard.iq.dataverse.datacapturemodule.ScriptRequestResponse;
2122
import edu.harvard.iq.dataverse.dataset.*;
2223
import edu.harvard.iq.dataverse.datasetutility.AddReplaceFileHelper;
@@ -65,8 +66,7 @@
6566
import jakarta.ws.rs.container.ContainerRequestContext;
6667
import jakarta.ws.rs.core.*;
6768
import jakarta.ws.rs.core.Response.Status;
68-
import software.amazon.awssdk.services.s3.model.CompletedPart;
69-
69+
import org.apache.commons.lang3.exception.ExceptionUtils;
7070
import org.apache.commons.lang3.StringUtils;
7171
import org.apache.logging.log4j.util.Strings;
7272
import org.eclipse.microprofile.openapi.annotations.Operation;
@@ -202,7 +202,7 @@ public class Datasets extends AbstractApiBean {
202202

203203
@Inject
204204
DatasetFieldsValidator datasetFieldsValidator;
205-
205+
206206
@Inject
207207
DataFileCategoryServiceBean dataFileCategoryService;
208208

@@ -2151,6 +2151,11 @@ public Response createAssignment(@Context ContainerRequestContext crc, RoleAssig
21512151
return ok(
21522152
json(execCommand(new AssignRoleCommand(assignee, theRole, dataset, createDataverseRequest(getRequestUser(crc)), privateUrlToken))));
21532153
} catch (WrappedResponse ex) {
2154+
var message = ExceptionUtils.getRootCause(ex).getMessage();
2155+
if (message != null && message.contains("duplicate key")) {
2156+
// concurrent update
2157+
return error(Status.CONFLICT, BundleUtil.getStringFromBundle("datasets.api.grant.role.assignee.has.role.error"));
2158+
}
21542159
List<String> args = Arrays.asList(ex.getMessage());
21552160
logger.log(Level.WARNING, BundleUtil.getStringFromBundle("datasets.api.grant.role.cant.create.assignment.error", args));
21562161
return ex.getResponse();

0 commit comments

Comments
 (0)