Skip to content

retry/stamina not working properly on timeout? #215

Description

@smnorris

It doesn't look like the request features function is correctly retrying on timeout/504?

Try

2025-06-20 15:23:35,852:INFO:bcdata.bc2pg: Writing WHSE_FOREST_VEGETATION.VEG_CONSOLIDATED_CUT_BLOCKS_SP to database as bcdata.veg_consolidated_cut_blocks_sp
2025-06-20 15:24:40,794:INFO:bcdata.wfs: https://openmaps.gov.bc.ca/geo/pub/wfs?service=WFS&version=2.0.0&request=GetFeature&typeName=WHSE_FOREST_VEGETATION.VEG_CONSOLIDATED_CUT_BLOCKS_SP&outputFormat=json&SRSNAME=EPSG%3A3005&sortby=VEG_CONSOLIDATED_CUT_BLOCK_ID&startIndex=450000&count=10000
2025-06-20 15:24:40,794:WARNING:bcdata.wfs: HTTP error: 504
2025-06-20 15:24:40,794:WARNING:bcdata.wfs: Response headers: {'date': 'Fri, 20 Jun 2025 15:24:40 GMT', 'content-type': 'application/json; charset=utf-8', 'transfer-encoding': 'chunked', 'ratelimit-limit': '60000', 'ratelimit-remaining': '59996', 'ratelimit-reset': '1', 'x-ratelimit-remaining-second': '59996', 'x-ratelimit-limit-second': '60000', 'x-kong-upstream-latency': '60000', 'x-kong-proxy-latency': '0'}
2025-06-20 15:24:40,794:WARNING:bcdata.wfs: Response text: {"message":"Upstream service error - The upstream server is timing out","upstream":{"message":"The upstream server is timing out"}}
Traceback (most recent call last):
 File "/opt/venv/bin/bcdata", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/opt/venv/lib/python3.12/site-packages/click/core.py", line 1161, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/click/core.py", line 1082, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/click/core.py", line 1697, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/click/core.py", line 1443, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/click/core.py", line 788, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/bcdata/cli.py", line 431, in bc2pg
    out_table = bcdata.bc2pg(
                ^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/bcdata/bc2pg.py", line 160, in bc2pg
    df = WFS.request_features(url=url, as_gdf=True, lowercase=True)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/bcdata/wfs.py", line 392, in request_features
    featurecollection = self._request_featurecollection(url)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/stamina/_core.py", line 726, in sync_inner
    for attempt in retry_ctx.with_name(  # noqa: RET503
  File "/opt/venv/lib/python3.12/site-packages/stamina/_core.py", line 508, in __iter__
    for r in _t.Retrying(
  File "/opt/venv/lib/python3.12/site-packages/tenacity/__init__.py", line 443, in __iter__
    do = self.iter(retry_state=retry_state)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/tenacity/__init__.py", line 376, in iter
    result = action(retry_state)
             ^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/tenacity/__init__.py", line 418, in exc_check
    raise retry_exc.reraise()
          ^^^^^^^^^^^^^^^^^^^
   File "/opt/venv/lib/python3.12/site-packages/tenacity/__init__.py", line 185, in reraise
    raise self.last_attempt.result()
          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/concurrent/futures/_base.py", line 449, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
  File "/opt/venv/lib/python3.12/site-packages/stamina/_core.py", line 730, in sync_inner
    return wrapped(*args, **kw)
           ^^^^^^^^^^^^^^^^^^^^
  File "/opt/venv/lib/python3.12/site-packages/bcdata/wfs.py", line 193, in _request_featurecollection
    r.raise_for_status()
  File "/opt/venv/lib/python3.12/site-packages/requests/models.py", line 1024, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 504 Server Error: Gateway Time-out for url: https://openmaps.gov.bc.ca/geo/pub/wfs?service=WFS&version=2.0.0&request=GetFeature&typeName=WHSE_FOREST_VEGETATION.VEG_CONSOLIDATED_CUT_BLOCKS_SP&outputFormat=json&SRSNAME=EPSG%3A3005&sortby=VEG_CONSOLIDATED_CUT_BLOCK_ID&startIndex=450000&count=10000
Error: Process completed with exit code 1.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions