Skip to content

Commit dced76a

Browse files
pspaceknejch
authored andcommitted
feat(client): automatically retry on HTTP 409 Resource lock
Fixes: #2325
1 parent 043de2d commit dced76a

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

docs/api-usage-advanced.rst

+5-3
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,11 @@ GitLab server can sometimes return a transient HTTP error.
123123
python-gitlab can automatically retry in such case, when
124124
``retry_transient_errors`` argument is set to ``True``. When enabled,
125125
HTTP error codes 500 (Internal Server Error), 502 (502 Bad Gateway),
126-
503 (Service Unavailable), and 504 (Gateway Timeout) are retried. It will retry until reaching
127-
the ``max_retries`` value. By default, ``retry_transient_errors`` is set to ``False`` and an exception
128-
is raised for these errors.
126+
503 (Service Unavailable), and 504 (Gateway Timeout) are retried.
127+
Additionally the HTTP error code 409 (Conflict) is retried if the text message
128+
mentions "Resource lock". It will retry until reaching the ``max_retries``
129+
value. By default, ``retry_transient_errors`` is set to ``False`` and an
130+
exception is raised for these errors.
129131

130132
.. code-block:: python
131133

gitlab/client.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,10 @@ def http_request(
752752
return result.response
753753

754754
if (429 == result.status_code and obey_rate_limit) or (
755-
result.status_code in gitlab.const.RETRYABLE_TRANSIENT_ERROR_CODES
755+
(
756+
result.status_code in gitlab.const.RETRYABLE_TRANSIENT_ERROR_CODES
757+
or (result.status_code == 409 and "Resource lock" in result.reason)
758+
)
756759
and retry_transient_errors
757760
):
758761
# Response headers documentation:

0 commit comments

Comments
 (0)