diff --git a/swift/obj/server.py b/swift/obj/server.py index f5897327a7..970706ca9f 100644 --- a/swift/obj/server.py +++ b/swift/obj/server.py @@ -95,24 +95,17 @@ def _make_backend_fragments_header(fragments): return None -if six.PY2: - class EventletPlungerString(str): - """ - Eventlet won't send headers until it's accumulated at least - eventlet.wsgi.MINIMUM_CHUNK_SIZE bytes or the app iter is exhausted. - If we want to send the response body behind Eventlet's back, perhaps - with some zero-copy wizardry, then we have to unclog the plumbing in - eventlet.wsgi to force the headers out, so we use an - EventletPlungerString to empty out all of Eventlet's buffers. - """ - def __len__(self): - return wsgi.MINIMUM_CHUNK_SIZE + 1 -else: - # Eventlet of 0.23.0 does encode('ascii') and strips our __len__. - # Avoid it by inheriting from bytes. - class EventletPlungerString(bytes): - def __len__(self): - return wsgi.MINIMUM_CHUNK_SIZE + 1 +class EventletPlungerString(bytes): + """ + Eventlet won't send headers until it's accumulated at least + eventlet.wsgi.MINIMUM_CHUNK_SIZE bytes or the app iter is exhausted. + If we want to send the response body behind Eventlet's back, perhaps + with some zero-copy wizardry, then we have to unclog the plumbing in + eventlet.wsgi to force the headers out, so we use an + EventletPlungerString to empty out all of Eventlet's buffers. + """ + def __len__(self): + return wsgi.MINIMUM_CHUNK_SIZE + 1 class ObjectController(BaseStorageServer): diff --git a/test/unit/__init__.py b/test/unit/__init__.py index 24c0eb08b2..abe4d492bf 100644 --- a/test/unit/__init__.py +++ b/test/unit/__init__.py @@ -48,7 +48,6 @@ from swift.obj import server from hashlib import md5 import logging.handlers -import six from six.moves import range from six import BytesIO from six.moves.http_client import HTTPException @@ -924,7 +923,7 @@ def fake_http_connect(*code_iter, **kwargs): def getheaders(self): etag = self.etag if not etag: - if isinstance(self.body, six.binary_type): + if isinstance(self.body, bytes): etag = '"' + md5(self.body).hexdigest() + '"' else: etag = '"68b329da9893e34099c7d8ad5cb9c940"' diff --git a/test/unit/obj/test_server.py b/test/unit/obj/test_server.py index a2e7fb2ac2..b5f454b778 100644 --- a/test/unit/obj/test_server.py +++ b/test/unit/obj/test_server.py @@ -6863,7 +6863,10 @@ class TestObjectController(unittest.TestCase): }) resp = req.get_response(self.object_controller) self.assertEqual(resp.status_int, 200) - suffix = list(pickle.loads(resp.body).keys())[0] + suffixes = list(pickle.loads(resp.body).keys()) + self.assertEqual(1, len(suffixes), + 'Expected just one suffix; got %r' % (suffixes,)) + suffix = suffixes[0] self.assertEqual(suffix, os.path.basename( os.path.dirname(objfile._datadir))) # tombstone still exists @@ -7619,7 +7622,7 @@ class TestObjectServer(unittest.TestCase): if six.PY2: conn.sock.fd._sock.close() else: - conn.sock.fd.close() + conn.sock.fd._real_close() for i in range(2): sleep(0) self.assertFalse(self.logger.get_lines_for_level('error')) @@ -7722,7 +7725,7 @@ class TestObjectServer(unittest.TestCase): # give the object server a little time to trampoline enough to # recognize request has finished, or socket has closed or whatever - sleep(0.1) + sleep(0.01) def test_multiphase_put_client_disconnect_right_before_commit(self): with self._check_multiphase_put_commit_handling() as context: @@ -7731,7 +7734,7 @@ class TestObjectServer(unittest.TestCase): if six.PY2: conn.sock.fd._sock.close() else: - conn.sock.fd.close() + conn.sock.fd._real_close() sleep(0) put_timestamp = context['put_timestamp'] @@ -7775,7 +7778,7 @@ class TestObjectServer(unittest.TestCase): if six.PY2: conn.sock.fd._sock.close() else: - conn.sock.fd.close() + conn.sock.fd._real_close() sleep(0) put_timestamp = context['put_timestamp'] @@ -7957,7 +7960,7 @@ class TestObjectServer(unittest.TestCase): if six.PY2: conn.sock.fd._sock.close() else: - conn.sock.fd.close() + conn.sock.fd._real_close() sleep(0) # and make sure it demonstrates the client disconnect @@ -8155,7 +8158,7 @@ class TestObjectServer(unittest.TestCase): if six.PY2: conn.sock.fd._sock.close() else: - conn.sock.fd.close() + conn.sock.fd._real_close() sleep(0) # and make sure it demonstrates the client disconnect