)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d801126da4255d0ba536cc7e41df2e894809a427","unresolved":true,"context_lines":[{"line_number":13,"context_line":"have a \u0027headers\u0027 attribute (whose value doesn\u0027t match the result of"},{"line_number":14,"context_line":"calling its \u0027getheaders()\u0027 method!), so this bug was not caught by"},{"line_number":15,"context_line":"tests in the Related-Change."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Related-Change: I96f28ab0b2b5f9374c399e8905ee240e7b093f8b"},{"line_number":18,"context_line":"Change-Id: I2cd820280b8c69cafc5730183903c9d379d8dde5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e59a162a_2e5241bf","line":16,"updated":"2024-09-25 18:03:43.000000000","message":"if we proceed with this I should probably write a launchpad bug","commit_id":"2037e501d9ebcdbc8a5409fea754a728df70e631"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e12586d69a1f62cfcf2c59314b3b46465725c520","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"40d31b1a_bf553017","updated":"2024-09-26 16:44:57.000000000","message":"Saw the 500 pop in a py2 env; this definitely fixes it!","commit_id":"6e4ecfc5dcf71d415a425e067a17d8a5723cced2"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e12586d69a1f62cfcf2c59314b3b46465725c520","unresolved":true,"context_lines":[{"line_number":1112,"context_line":"        return False"},{"line_number":1113,"context_line":"    if (\u0027handoff_index\u0027 in node"},{"line_number":1114,"context_line":"            and resp.status \u003d\u003d 404"},{"line_number":1115,"context_line":"            and resp.headers.get(\u0027x-backend-timestamp\u0027) is None):"},{"line_number":1116,"context_line":"        # a 404 from a handoff are not considered authoritative unless they"},{"line_number":1117,"context_line":"        # have an x-backend-timestamp that indicates that there is a tombstone"},{"line_number":1118,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"397b4690_1a54e61b","side":"PARENT","line":1115,"updated":"2024-09-26 16:44:57.000000000","message":"Huh! Not the error I was expecting:\n```\nSep 26 16:27:25 saio proxy-server: ERROR Unhandled exception in request: \nTraceback (most recent call last):\n  File \"/vagrant/swift/swift/proxy/server.py\", line 603, in handle_request\n    return handler(req)\n  File \"/vagrant/swift/swift/proxy/controllers/base.py\", line 375, in wrapped\n    return func(*a, **kw)\n  File \"/vagrant/swift/swift/proxy/controllers/container.py\", line 708, in POST\n    req.swift_entity_path, [headers] * len(containers))\n  File \"/vagrant/swift/swift/proxy/controllers/base.py\", line 2148, in make_requests\n    if not is_useful_response(resp, node):\n  File \"/vagrant/swift/swift/proxy/controllers/base.py\", line 1115, in is_useful_response\n    and resp.headers.get(\u0027x-backend-timestamp\u0027) is None):\nAttributeError: \u0027NoneType\u0027 object has no attribute \u0027get\u0027 (txn: txc731d63b67b6433eb73e1-0066f58b6d) (client_ip: 127.0.0.1)\n```","commit_id":"94dc4cad090390b1826bf6a2fbe5986e1516219e"}],"test/unit/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d801126da4255d0ba536cc7e41df2e894809a427","unresolved":true,"context_lines":[{"line_number":809,"context_line":"            self.received \u003d 0"},{"line_number":810,"context_line":"            self.etag \u003d etag"},{"line_number":811,"context_line":"            self.body \u003d body"},{"line_number":812,"context_line":"            self._headers \u003d headers or {}"},{"line_number":813,"context_line":"            self.expect_headers \u003d expect_headers or {}"},{"line_number":814,"context_line":"            if timestamp \u003d\u003d -1:"},{"line_number":815,"context_line":"                # -1 is reserved to mean \"magic default\""}],"source_content_type":"text/x-python","patch_set":1,"id":"28fc4d2c_56628557","line":812,"updated":"2024-09-25 18:03:43.000000000","message":"changed this to flush out any other inappropriate uses of ``FakeConn.headers`` ... and prevent further mistakes","commit_id":"2037e501d9ebcdbc8a5409fea754a728df70e631"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d801126da4255d0ba536cc7e41df2e894809a427","unresolved":true,"context_lines":[{"line_number":1463,"context_line":"        primary_codes \u003d [Timeout()] * primary_failure + [202] * primary_success"},{"line_number":1464,"context_line":"        handoff_codes \u003d [404] * primary_failure"},{"line_number":1465,"context_line":"        # note: by default fake_http_connect will return an x-backend-timestamp"},{"line_number":1466,"context_line":"        # header; we need to override that for handoffs by setting to None"},{"line_number":1467,"context_line":"        with mocked_http_conn(*(primary_codes + handoff_codes),"},{"line_number":1468,"context_line":"                              headers\u003d{\u0027x-backend-timestamp\u0027: None}):"},{"line_number":1469,"context_line":"            resp \u003d req.get_response(self.app)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3b0774cc_7dafbcb9","line":1466,"updated":"2024-09-25 18:03:43.000000000","message":"this sucks but is expedient for getting a bug fix out","commit_id":"2037e501d9ebcdbc8a5409fea754a728df70e631"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d801126da4255d0ba536cc7e41df2e894809a427","unresolved":true,"context_lines":[{"line_number":6371,"context_line":"            self.assertIn(req.headers[\u0027x-trans-id\u0027], line)"},{"line_number":6372,"context_line":"        etag2_conns \u003d []"},{"line_number":6373,"context_line":"        for conn in log.responses:"},{"line_number":6374,"context_line":"            if conn._headers.get(\u0027X-Object-Sysmeta-Ec-Etag\u0027) \u003d\u003d etag2:"},{"line_number":6375,"context_line":"                etag2_conns.append(conn)"},{"line_number":6376,"context_line":"        self.assertEqual("},{"line_number":6377,"context_line":"            ([True] * 8) + [False],  # the resumed etag2 doesn\u0027t get closed"}],"source_content_type":"text/x-python","patch_set":1,"id":"2a95c572_96150253","line":6374,"updated":"2024-09-25 18:03:43.000000000","message":"it will be interesting to see if any other tests fail because the call FakeConn.headers","commit_id":"2037e501d9ebcdbc8a5409fea754a728df70e631"}]}
