Open
Description
I think this was caused by the refactoring we made in f40b171. We now send PURGE requests in the same connection object and for some reason it's being rejected by the server.
Example traceback:
TypeError: getresponse() got an unexpected keyword argument 'buffering'
File "requests/packages/urllib3/connectionpool.py", line 353, in _make_request
httplib_response = conn.getresponse(buffering=True)
File "raven/breadcrumbs.py", line 375, in getresponse
rv = real_getresponse(self, *args, **kwargs)
ConnectionResetError: [Errno 104] Connection reset by peer
File "requests/packages/urllib3/connectionpool.py", line 518, in urlopen
body=body, headers=headers)
File "requests/packages/urllib3/connectionpool.py", line 355, in _make_request
httplib_response = conn.getresponse()
File "raven/breadcrumbs.py", line 375, in getresponse
rv = real_getresponse(self, *args, **kwargs)
File "http/client.py", line 1208, in getresponse
response.begin()
File "http/client.py", line 380, in begin
version, status, reason = self._read_status()
File "http/client.py", line 342, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "python3.4/socket.py", line 374, in readinto
return self._sock.recv_into(b)
File "python3.4/ssl.py", line 769, in recv_into
return self.read(nbytes, buffer)
File "python3.4/ssl.py", line 641, in read
v = self._sslobj.read(len, buffer)
ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
File "requests/adapters.py", line 370, in send
timeout=timeout
File "requests/packages/urllib3/connectionpool.py", line 564, in urlopen
_pool=self, _stacktrace=stacktrace)
File "requests/packages/urllib3/util/retry.py", line 245, in increment
raise six.reraise(type(error), error, _stacktrace)
File "requests/packages/urllib3/packages/six.py", line 309, in reraise
raise value.with_traceback(tb)
File "requests/packages/urllib3/connectionpool.py", line 518, in urlopen
body=body, headers=headers)
File "requests/packages/urllib3/connectionpool.py", line 355, in _make_request
httplib_response = conn.getresponse()
File "raven/breadcrumbs.py", line 375, in getresponse
rv = real_getresponse(self, *args, **kwargs)
File "http/client.py", line 1208, in getresponse
response.begin()
File "http/client.py", line 380, in begin
version, status, reason = self._read_status()
File "http/client.py", line 342, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "python3.4/socket.py", line 374, in readinto
return self._sock.recv_into(b)
File "python3.4/ssl.py", line 769, in recv_into
return self.read(nbytes, buffer)
File "python3.4/ssl.py", line 641, in read
v = self._sslobj.read(len, buffer)
ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
File "pythondotorg/manage.py", line 8, in <module>
execute_from_command_line(sys.argv)
File "django/core/management/__init__.py", line 371, in execute_from_command_line
utility.execute()
File "django/core/management/__init__.py", line 365, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **cmd_options)
File "django/core/management/base.py", line 335, in execute
output = self.handle(*args, **options)
File "peps/management/commands/generate_pep_pages.py", line 51, in handle
pep0_page, _ = get_pep0_page()
File "peps/converters.py", line 62, in get_pep0_page
page.save()
File "cms/models.py", line 43, in save
return super().save(**kwargs)
File "django/db/models/base.py", line 729, in save
force_update=force_update, update_fields=update_fields)
File "django/db/models/base.py", line 769, in save_base
update_fields=update_fields, raw=raw, using=using,
File "django/dispatch/dispatcher.py", line 178, in send
for receiver in self._live_receivers(sender)
File "django/dispatch/dispatcher.py", line 178, in <listcomp>
for receiver in self._live_receivers(sender)
File "pages/models.py", line 89, in purge_fastly_cache
purge_urls(instance.path)
File "fastly/utils.py", line 20, in purge_urls
session.request('PURGE', url)
File "requests/sessions.py", line 461, in request
resp = self.send(prep, **send_kwargs)
File "raven/breadcrumbs.py", line 326, in send
resp = real_send(self, request, *args, **kwargs)
File "requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "requests/adapters.py", line 415, in send
raise ConnectionError(err, request=request)
I've implemented a retry logic in master...berkerpeksag:retry, but I'm not sure if that's the best way to solve this issue. @jaap3 do you have any suggestions?