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

Handle temporary connection errors gracefully #26

Open
jlumbroso opened this issue Mar 13, 2020 · 0 comments
Open

Handle temporary connection errors gracefully #26

jlumbroso opened this issue Mar 13, 2020 · 0 comments
Labels
pipes This is not a bug, but something that needs/could be changed with the low-level infrastructure question Further information is requested

Comments

@jlumbroso
Copy link
Member

The error log below is okay, but happened for arbitrary error, not clear if there was a retry. May consider catching these types of errors for better reporting?

------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------
RemoteDisconnected                        Traceback (most recent call last)
~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    664             # Make the request on the httplib connection object.
--> 665             httplib_response = self._make_request(
    666                 conn,

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    420                     # Otherwise it looks like a bug in the code.
--> 421                     six.raise_from(e, None)
    422         except (SocketTimeout, BaseSSLError, SocketError) as e:

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/urllib3/packages/six.py in raise_from(value, from_value)

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    415                 try:
--> 416                     httplib_response = conn.getresponse()
    417                 except BaseException as e:

/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py in getresponse(self)
   1321             try:
-> 1322                 response.begin()
   1323             except ConnectionError:

/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py in begin(self)
    302         while True:
--> 303             version, status, reason = self._read_status()
    304             if status != CONTINUE:

/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/http/client.py in _read_status(self)
    271             # sending a valid response.
--> 272             raise RemoteDisconnected("Remote end closed connection without"
    273                                      " response")

RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

MaxRetryError                             Traceback (most recent call last)
~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    438             if not chunked:
--> 439                 resp = conn.urlopen(
    440                     method=request.method,

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
    718 
--> 719             retries = retries.increment(
    720                 method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/urllib3/util/retry.py in increment(self, method, url, response, error, _pool, _stacktrace)
    435         if new_retry.is_exhausted():
--> 436             raise MaxRetryError(_pool, url, error or ResponseError(cause))
    437 

MaxRetryError: HTTPSConnectionPool(host='api.codepost.io', port=443): Max retries exceeded with url: /submissionTests/149717/ (Caused by ProxyError('Cannot connect to proxy.', RemoteDisconnected('Remote end closed connection without response')))

During handling of the above exception, another exception occurred:

ProxyError                                Traceback (most recent call last)
<ipython-input-37-0ba20f823506> in <module>
      2     print("-", end="")
      3     if submission.id not in test_passed_by_submission_id:
----> 4         test_passed_by_submission_id[submission.id] = sum(map(
      5             lambda test: 1 if test.passed and get_category_from_testcase(test) == "Correctness" else 0,
      6             submission.tests))

<ipython-input-37-0ba20f823506> in <lambda>(test)
      3     if submission.id not in test_passed_by_submission_id:
      4         test_passed_by_submission_id[submission.id] = sum(map(
----> 5             lambda test: 1 if test.passed and get_category_from_testcase(test) == "Correctness" else 0,
      6             submission.tests))
      7 

~/GoogleDrive/Programming/codepost/sdk/codepost-python/codepost/models/abstract/lazy.py in __getattribute__(self, attr)
    100                 # Fetch object and cache
    101                 try:
--> 102                     self._inner = cls().retrieve(id=id)
    103                 except _errors.NotFoundAPIError:
    104                     self._null = True

~/GoogleDrive/Programming/codepost/sdk/codepost-python/codepost/models/abstract/api_crud.py in retrieve(self, id)
     92             raise _errors.InvalidIDError()
     93 
---> 94         ret = self._requestor._request(
     95             endpoint=self.instance_endpoint_by_id(id=_id),
     96             method="GET",

~/GoogleDrive/Programming/codepost/sdk/codepost-python/codepost/api_requestor.py in _request(self, endpoint, method, **kwargs)
    197                 kws["data"] = _json.dumps(kws["data"])
    198 
--> 199         ret = self._client.request(
    200             url=urljoin(self._base_url, endpoint),
    201             **kws

<boltons.funcutils.FunctionBuilder-2> in request(self, url, method, headers, **kwargs)

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/eliot/_action.py in logging_wrapper(*args, **kwargs)
    922 
    923         with start_action(action_type=action_type, **callargs) as ctx:
--> 924             result = wrapped_function(*args, **kwargs)
    925             if include_result:
    926                 ctx.add_success_fields(result=result)

~/GoogleDrive/Programming/codepost/sdk/codepost-python/codepost/http_client.py in request(self, url, method, headers, **kwargs)
    213         except Exception as e:
    214             log_action.finish(exception=e)
--> 215             self._handle_request_error(e)
    216 
    217         log_action.finish()

~/GoogleDrive/Programming/codepost/sdk/codepost-python/codepost/http_client.py in _handle_request_error(self, e)
    222         # Meant to handle HTTP/socket-level errors
    223         # API errors are handled in APIRequestor
--> 224         raise e
    225 
    226     def close(self):

~/GoogleDrive/Programming/codepost/sdk/codepost-python/codepost/http_client.py in request(self, url, method, headers, **kwargs)
    179             try:
    180                 with log_action.context():
--> 181                     ret = session.request(
    182                         method=method,
    183                         url=url,

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    528         }
    529         send_kwargs.update(settings)
--> 530         resp = self.send(prep, **send_kwargs)
    531 
    532         return resp

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/requests/sessions.py in send(self, request, **kwargs)
    641 
    642         # Send the request
--> 643         r = adapter.send(request, **kwargs)
    644 
    645         # Total elapsed time of the request (approximately)

~/.local/share/virtualenvs/pylifttk-jrMvvMYL/lib/python3.8/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    508 
    509             if isinstance(e.reason, _ProxyError):
--> 510                 raise ProxyError(e, request=request)
    511 
    512             if isinstance(e.reason, _SSLError):

ProxyError: HTTPSConnectionPool(host='api.codepost.io', port=443): Max retries exceeded with url: /submissionTests/149717/ (Caused by ProxyError('Cannot connect to proxy.', RemoteDisconnected('Remote end closed connection without response')))
@jlumbroso jlumbroso added pipes This is not a bug, but something that needs/could be changed with the low-level infrastructure question Further information is requested labels Mar 13, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pipes This is not a bug, but something that needs/could be changed with the low-level infrastructure question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant