From 4c746949154df2710c411d512a88afb27a54fe62 Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Wed, 14 Aug 2013 23:42:59 -0700 Subject: [PATCH] Ignore OrmDuplicateKeyException during PUT .../reviewed If the reviewed flag has already been set for the calling user return 200 OK instead of throwing a 500 error at the client. This condition can be caused by a race between the getExisting() call and the database write being completed. Change-Id: I1e4c6391cf7e3cfed280dee6abd749fb0934dec0 --- .../com/google/gerrit/server/change/Reviewed.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Reviewed.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Reviewed.java index 42d81b69d1..022f178d51 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Reviewed.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Reviewed.java @@ -18,6 +18,7 @@ import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.reviewdb.client.AccountPatchReview; import com.google.gerrit.reviewdb.server.ReviewDb; +import com.google.gwtorm.server.OrmDuplicateKeyException; import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.Provider; @@ -42,9 +43,13 @@ class Reviewed { ReviewDb db = dbProvider.get(); AccountPatchReview apr = getExisting(db, resource); if (apr == null) { - db.accountPatchReviews().insert( - Collections.singleton(new AccountPatchReview(resource.getPatchKey(), - resource.getAccountId()))); + try { + db.accountPatchReviews().insert( + Collections.singleton(new AccountPatchReview(resource.getPatchKey(), + resource.getAccountId()))); + } catch (OrmDuplicateKeyException e) { + return Response.ok(""); + } return Response.created(""); } else { return Response.ok("");