tree 382abaaad12abcda83a885a63b16a914c68ba1a3
parent 67182613ead87c46497ecf0f6f3abf466b5a330b
author Edwin Kempin <ekempin@google.com> 1685537090 +0000
committer Edwin Kempin <ekempin@google.com> 1685537413 +0000

CreateTag: Convert ConcurrentRefUpdateException into LockFailureException

Creating a tag may fail with a ConcurrentRefUpdateException that
represents a LOCK_FAILURE. Convert this exception into a
LockFailureException so that our auto-retrying logic for LOCK_FAILURES
can recognize the LOCK_FAILURE and retry the operation, instead of
failing immediately.

Example stacktrace:

Cannot create tag "refs/tags/foo-bar" [CONTEXT project="my-project" request="REST /projects/*/tags/*" ]

org.eclipse.jgit.api.errors.ConcurrentRefUpdateException: Could not lock HEAD. RefUpdate return code was: LOCK_FAILURE
	at org.eclipse.jgit.api.TagCommand.updateTagRef(TagCommand.java:178)
	at org.eclipse.jgit.api.TagCommand.call(TagCommand.java:129)
	at com.google.gerrit.server.restapi.project.CreateTag.apply(CreateTag.java:144)
	at com.google.gerrit.server.restapi.project.CreateTag.apply(CreateTag.java:59)
	at com.google.gerrit.httpd.restapi.RestApiServlet.lambda$invokeRestCollectionCreateViewWithRetry$7(RestApiServlet.java:897)
     ...
Caused by: org.eclipse.jgit.api.errors.ConcurrentRefUpdateException: Could not lock HEAD. RefUpdate return code was: LOCK_FAILURE
	at org.eclipse.jgit.api.TagCommand.updateTagRef(TagCommand.java:178)
	at org.eclipse.jgit.api.TagCommand.call(TagCommand.java:129)
	at com.google.gerrit.server.restapi.project.CreateTag.apply(CreateTag.java:144)
	... 227 more

Release-Notes: skip
Change-Id: I2ff60b01ab0e2305fdf8739cd884038091f2b888
Signed-off-by: Edwin Kempin <ekempin@google.com>
