Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

should_retry_stop does not play nice with tenacity #49

Open
tommyjcarpenter opened this issue Feb 13, 2021 · 0 comments
Open

should_retry_stop does not play nice with tenacity #49

tommyjcarpenter opened this issue Feb 13, 2021 · 0 comments

Comments

@tommyjcarpenter
Copy link

tommyjcarpenter commented Feb 13, 2021

we hit this stacktrace today:

  File "/home/ubuntu/dev/python/merq/util/opsgenie.py", line 37, in create_alert
    create_response = get_alert_api().create_alert(create_alert_payload=body)
  File "/home/ubuntu/dev/python/venv_3.7/lib/python3.7/site-packages/opsgenie_sdk/api/alert/__init__.py", line 1136, in create_alert
    (data) = self.create_alert_with_http_info(create_alert_payload, **kwargs)  # noqa: E501
  File "/home/ubuntu/dev/python/venv_3.7/lib/python3.7/site-packages/opsgenie_sdk/api/alert/__init__.py", line 1211, in create_alert_with_http_info
    collection_formats=collection_formats)
  File "/home/ubuntu/dev/python/venv_3.7/lib/python3.7/site-packages/opsgenie_sdk/api_client.py", line 429, in call_api
    _preload_content, _request_timeout, _host)
  File "/home/ubuntu/dev/python/venv_3.7/lib/python3.7/site-packages/opsgenie_sdk/api_client.py", line 219, in __call_api
    raise exception
  File "/home/ubuntu/dev/python/venv_3.7/lib/python3.7/site-packages/opsgenie_sdk/api_client.py", line 203, in __call_api
    _request_timeout=_request_timeout)
  File "/home/ubuntu/dev/python/venv_3.7/lib/python3.7/site-packages/tenacity/__init__.py", line 330, in call
    start_time=start_time)
  File "/home/ubuntu/dev/python/venv_3.7/lib/python3.7/site-packages/tenacity/__init__.py", line 292, in iter
    delay_since_first_attempt):
TypeError: should_retry_stop() takes 2 positional arguments but 3 were given
Command exited with non-zero status 1
1.62user 0.51system 5:52.42elapsed 0%CPU (0avgtext+0avgdata 106140maxresident)k
0inputs+8424outputs (0major+29116minor)pagefaults 0swaps

I tried to dig into the code the best I can. I traced it to probably: https://github.com/opsgenie/opsgenie-python-sdk/pull/29/files

The old function there was

 self.retrying = tenacity.Retrying(stop=tenacity.stop_after_attempt(configuration.retry_count),

This stop function is provided by tenacity and is an instance of their abstract base class: https://github.com/jd/tenacity/blob/master/tenacity/stop.py#L24

This Opsgenie PR above replaces it with

def should_retry_stop(self, retry_state):
        if self.configuration.retry_enabled and retry_state.attempt_number <= self.configuration.retry_count and retry_state.seconds_since_start <= self.configuration.retry_max_delay:
            return False

        return True

however self here refers to the OpsGenie API object; it is probably not an instance of the tenacity base class: https://github.com/jd/tenacity/blob/master/tenacity/stop.py#L78

it seems like their base class requires __call__ and thats it?

I tried digging into what parameters are exactly passed to the stop function; I think its around here: https://github.com/jd/tenacity/blob/master/tenacity/__init__.py#L373

however I got lost in the rabbithole

my only guess is if self_retry_stop was not a class method but just a method, it might work?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant