)]}'
{"swift/proxy/controllers/base.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"ecc11882110ac25368ecaa7020001dcd80005df7","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"                        self.app.error_occurred("},{"line_number":1546,"context_line":"                            node, _(\u0027ERROR %(status)d \u0027"},{"line_number":1547,"context_line":"                                    \u0027Trying to %(method)s %(path)s\u0027"},{"line_number":1548,"context_line":"                                    \u0027 From %(type)s Server\u0027) % {"},{"line_number":1549,"context_line":"                                        \u0027status\u0027: resp.status,"},{"line_number":1550,"context_line":"                                        \u0027method\u0027: method,"},{"line_number":1551,"context_line":"                                        \u0027path\u0027: path,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_7d717577","line":1548,"updated":"2016-07-08 06:36:53.000000000","message":"I\u0027m curious why there is a space in front of the \"From\" now - you\u0027re even asserting this in the tests, so I assume there is something going on here that I\u0027m not aware of?","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f6fd11f42981fccb87a59453059c8321dc193a0b","unresolved":false,"context_lines":[{"line_number":1545,"context_line":"                        self.app.error_occurred("},{"line_number":1546,"context_line":"                            node, _(\u0027ERROR %(status)d \u0027"},{"line_number":1547,"context_line":"                                    \u0027Trying to %(method)s %(path)s\u0027"},{"line_number":1548,"context_line":"                                    \u0027 From %(type)s Server\u0027) % {"},{"line_number":1549,"context_line":"                                        \u0027status\u0027: resp.status,"},{"line_number":1550,"context_line":"                                        \u0027method\u0027: method,"},{"line_number":1551,"context_line":"                                        \u0027path\u0027: path,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_bc02b609","line":1548,"in_reply_to":"1aa78d24_7d717577","updated":"2016-07-08 10:26:55.000000000","message":"previously there was no whitespace between the path and the word \u0027From\u0027, so \u0027/a/c/oFrom Object Server\u0027\n\nI guess it would look better to have added the space at the end of the previous line.","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c1a028542f0c07bb348fe4dd22764f5027a105","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        for putter in putters:"},{"line_number":350,"context_line":"            if putter.failed:"},{"line_number":351,"context_line":"                continue"},{"line_number":352,"context_line":"            pile.spawn(self._get_conn_response, putter, req.path,"},{"line_number":353,"context_line":"                       self.app.logger.thread_locals, final_phase\u003dfinal_phase)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        def _handle_response(putter, response):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_4b284a9a","line":352,"updated":"2016-07-07 19:33:56.000000000","message":"well, this is awkward - but i guess we only ever used that argument for logging :\\","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f6fd11f42981fccb87a59453059c8321dc193a0b","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        for putter in putters:"},{"line_number":350,"context_line":"            if putter.failed:"},{"line_number":351,"context_line":"                continue"},{"line_number":352,"context_line":"            pile.spawn(self._get_conn_response, putter, req.path,"},{"line_number":353,"context_line":"                       self.app.logger.thread_locals, final_phase\u003dfinal_phase)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        def _handle_response(putter, response):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_1f5dbcec","line":352,"in_reply_to":"1aa78d24_4b284a9a","updated":"2016-07-08 10:26:55.000000000","message":"I get review feedback that we should only pass variables that are used in the method i.e. do not pass req when only req.path is needed. Personally I prefer to pass the encapsulating data structure when there is one (req) and have the method extract what it needs (req.path), since it leaves greater flexibility for enhancing the method in the future without changing the signature. So I nearly changed the _get_conn_response method to accept req and dig out req.path (which historically it did!) but thought I would get dinged for that ;)","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"}],"swift/proxy/server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c1a028542f0c07bb348fe4dd22764f5027a105","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        \"\"\""},{"line_number":510,"context_line":"        self._incr_node_errors(node)"},{"line_number":511,"context_line":"        self.logger.error(_(\u0027%(msg)s %(ip)s:%(port)s/%(device)s\u0027),"},{"line_number":512,"context_line":"                          {\u0027msg\u0027: msg.decode(\u0027utf-8\u0027), \u0027ip\u0027: node[\u0027ip\u0027],"},{"line_number":513,"context_line":"                          \u0027port\u0027: node[\u0027port\u0027], \u0027device\u0027: node[\u0027device\u0027]})"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def iter_nodes(self, ring, partition, node_iter\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_a687655f","line":512,"updated":"2016-07-07 19:33:56.000000000","message":"so this is the fix, the \"additional\" msg argument will often include a utf-8 path, but I don\u0027t like that it *must not* be a unicode string :\\\n\n    \u003e\u003e\u003e msg \u003d u\u0027\\u00e4sdf\u0027\n    \u003e\u003e\u003e print msg\n    äsdf\n    \u003e\u003e\u003e msg.encode(\u0027utf-8\u0027)\n    \u0027\\xc3\\xa4sdf\u0027\n    \u003e\u003e\u003e msg.decode(\u0027utf-8\u0027)\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n      File \"/Users/clayg/Sandbox/swift/lib/python2.7/encodings/utf_8.py\", line 16, in decode\n        return codecs.utf_8_decode(input, errors, True)\n    UnicodeEncodeError: \u0027ascii\u0027 codec can\u0027t encode character u\u0027\\xe4\u0027 in position 0: ordinal not in range(128)\n\n\nHopefully tests will make sure it\u0027s always a bytestring","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f6fd11f42981fccb87a59453059c8321dc193a0b","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        \"\"\""},{"line_number":510,"context_line":"        self._incr_node_errors(node)"},{"line_number":511,"context_line":"        self.logger.error(_(\u0027%(msg)s %(ip)s:%(port)s/%(device)s\u0027),"},{"line_number":512,"context_line":"                          {\u0027msg\u0027: msg.decode(\u0027utf-8\u0027), \u0027ip\u0027: node[\u0027ip\u0027],"},{"line_number":513,"context_line":"                          \u0027port\u0027: node[\u0027port\u0027], \u0027device\u0027: node[\u0027device\u0027]})"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    def iter_nodes(self, ring, partition, node_iter\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_dff054cc","line":512,"in_reply_to":"1aa78d24_a687655f","updated":"2016-07-08 10:26:55.000000000","message":"Agree, it\u0027s not ideal, but consistent with exception_occurred. I guess we could test for type before decoding.","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c1a028542f0c07bb348fe4dd22764f5027a105","unresolved":false,"context_lines":[{"line_number":940,"context_line":""},{"line_number":941,"context_line":"        req, log_lines \u003d do_test((201, (100, Exception(\u0027boom\u0027)), 201))"},{"line_number":942,"context_line":"        self.assertIn(\u0027ERROR with Object server\u0027, log_lines[0])"},{"line_number":943,"context_line":"        self.assertIn(req.path.decode(\u0027utf-8\u0027), log_lines[0])"},{"line_number":944,"context_line":"        self.assertIn(\u0027Trying to get final status of PUT\u0027, log_lines[0])"},{"line_number":945,"context_line":""},{"line_number":946,"context_line":"        req, log_lines \u003d do_test((201, (100, Timeout()), 201))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_e6596dfe","line":943,"updated":"2016-07-07 19:33:56.000000000","message":"nice\n\n    FAIL: test_PUT_final_response_errors_with_unicode_path (test.unit.proxy.controllers.test_obj.TestReplicatedObjController)\n    ----------------------------------------------------------------------\n    Traceback (most recent call last):\n      File \"/home/vagrant/swift/test/unit/proxy/controllers/test_obj.py\", line 943, in test_PUT_final_response_errors_with_unicode_path\n        self.assertIn(req.path.decode(\u0027utf-8\u0027), log_lines[0])\n    AssertionError: u\u0027/v1/AUTH_kilroy/%ED%88%8E/%E9%90%89\u0027 not found in u\u0027ERROR with Object server 10.0.0.2:1002/sdc re: Trying to get final status of PUT to \u003cswift.common.swob.Request object at 0x7efd75b9bf90\u003e: \u0027","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c1a028542f0c07bb348fe4dd22764f5027a105","unresolved":false,"context_lines":[{"line_number":975,"context_line":"                                 (201, 500, 201, 201))"},{"line_number":976,"context_line":"        self.assertIn(\u0027Trying to DELETE\u0027, log_lines[0])"},{"line_number":977,"context_line":"        self.assertIn(req.swift_entity_path.decode(\u0027utf-8\u0027), log_lines[0])"},{"line_number":978,"context_line":"        self.assertIn(\u0027 From Object Server\u0027, log_lines[0])"},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"        req, log_lines \u003d do_test(\u0027/AUTH_kilroy/%ED%88%8E/%E9%90%89\u0027,"},{"line_number":981,"context_line":"                                 (201, 500, 201, 201))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_c6d5511c","line":978,"updated":"2016-07-07 19:33:56.000000000","message":"nice\n\n    FAIL: test_DELETE_errors (test.unit.proxy.controllers.test_obj.TestReplicatedObjController)\n    ----------------------------------------------------------------------\n    Traceback (most recent call last):\n      File \"/home/vagrant/swift/test/unit/proxy/controllers/test_obj.py\", line 978, in test_DELETE_errors\n        self.assertIn(\u0027 From Object Server\u0027, log_lines[0])\n    AssertionError: \u0027 From Object Server\u0027 not found in u\u0027ERROR 500 Trying to DELETE /AUTH_kilroy/ascii/ascii From Container Server 10.0.0.2:1002/sdc\u0027","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c1a028542f0c07bb348fe4dd22764f5027a105","unresolved":false,"context_lines":[{"line_number":981,"context_line":"                                 (201, 500, 201, 201))"},{"line_number":982,"context_line":"        self.assertIn(\u0027Trying to DELETE\u0027, log_lines[0])"},{"line_number":983,"context_line":"        self.assertIn(req.swift_entity_path.decode(\u0027utf-8\u0027), log_lines[0])"},{"line_number":984,"context_line":"        self.assertIn(\u0027 From Object Server\u0027, log_lines[0])"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":"        req, log_lines \u003d do_test(\u0027/AUTH_kilroy/ascii/ascii\u0027,"},{"line_number":987,"context_line":"                                 (201, 507, 201, 201))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_e6accda0","line":984,"updated":"2016-07-07 19:33:56.000000000","message":"nice\n\n    FAIL: test_DELETE_errors (test.unit.proxy.controllers.test_obj.TestReplicatedObjController)\n    ----------------------------------------------------------------------\n    Traceback (most recent call last):\n      File \"/home/vagrant/swift/test/unit/proxy/controllers/test_obj.py\", line 984, in test_DELETE_errors\n        self.assertIn(\u0027 From Object Server\u0027, log_lines[0])\n    AssertionError: \u0027 From Object Server\u0027 not found in u\u0027ERROR with Object server 10.0.0.1:1001/sdb re: Trying to DELETE /AUTH_kilroy/\\ud20e/\\u9409: \u0027\n    -------------------- \u003e\u003e begin captured stdout \u003c\u003c ---------------------\n    proxy-server ERROR: ERROR 500 Trying to DELETE /AUTH_kilroy/ascii/ascii From Object Server 10.0.0.2:1002/sdc (txn: tx3126add254744ea886a2c-00577eac4a)\n    proxy-server ERROR: ERROR with Object server 10.0.0.1:1001/sdb re: Trying to DELETE /AUTH_kilroy/\\ud20e/\\u9409: \n    Traceback (most recent call last):\n      File \"/home/vagrant/swift/swift/proxy/controllers/base.py\", line 1552, in _make_request\n        \u0027type\u0027: self.server_type})\n      File \"/home/vagrant/swift/swift/proxy/server.py\", line 513, in error_occurred\n        \u0027port\u0027: node[\u0027port\u0027], \u0027device\u0027: node[\u0027device\u0027]})\n      File \"/usr/lib/python2.7/logging/__init__.py\", line 1449, in error\n        self.logger.error(msg, *args, **kwargs)\n      File \"/usr/lib/python2.7/logging/__init__.py\", line 1178, in error\n        self._log(ERROR, msg, args, **kwargs)\n      File \"/home/vagrant/swift/test/unit/__init__.py\", line 528, in _log\n        super(FakeLogger, self)._log(level, msg, *args, **kwargs)\n      File \"/usr/lib/python2.7/logging/__init__.py\", line 1271, in _log\n        self.handle(record)\n      File \"/home/vagrant/swift/test/unit/__init__.py\", line 631, in handle\n        self._handle(record)\n      File \"/home/vagrant/swift/test/unit/__init__.py\", line 598, in _handle\n        line \u003d record.getMessage()\n      File \"/usr/lib/python2.7/logging/__init__.py\", line 328, in getMessage\n        msg \u003d msg % self.args\n    UnicodeDecodeError: \u0027ascii\u0027 codec can\u0027t decode byte 0xed in position 40: ordinal not in range(128) (txn: tx9d4589b5371140bda3275-00577eac4a)","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c1a028542f0c07bb348fe4dd22764f5027a105","unresolved":false,"context_lines":[{"line_number":901,"context_line":"            self.assertEqual(err, log_kwargs[\u0027exc_info\u0027][1])"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        do_test(\u0027success\u0027)"},{"line_number":904,"context_line":"        do_test(\u0027succès\u0027)"},{"line_number":905,"context_line":"        do_test(u\u0027success\u0027)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def test_error_occurred(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_4657a157","line":904,"updated":"2016-07-07 19:33:56.000000000","message":"so this might just be a personal hangup, since the top of this file defines\n\n    # -*- coding: utf-8 -*-\n\n... and I guess python would complain if it didn\u0027t\n\nbut I have this hang up to prefer the explicit byte string encoding?\n\n    do_test(\u0027succ\\xc3\\xa8s\u0027)\n\nI think it\u0027s some sort of freak out that someone\u0027s editor isn\u0027t going to respect it and save the file with some bogus encoding and tests fail for some mysterious reason.  It\u0027s probably just FUD on my part :\\","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"14c1a028542f0c07bb348fe4dd22764f5027a105","unresolved":false,"context_lines":[{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        do_test(\u0027success\u0027)"},{"line_number":904,"context_line":"        do_test(\u0027succès\u0027)"},{"line_number":905,"context_line":"        do_test(u\u0027success\u0027)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def test_error_occurred(self):"},{"line_number":908,"context_line":"        def do_test(msg):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_6648ddb3","line":905,"updated":"2016-07-07 19:33:56.000000000","message":"I wonder if this is somewhat mis-leading?  I\u0027m sure you noted that \n\n        do_test(u\u0027succès\u0027)\n        do_test(u\u0027succ\\u00e8s\u0027)\n\nboth fail","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"f6fd11f42981fccb87a59453059c8321dc193a0b","unresolved":false,"context_lines":[{"line_number":902,"context_line":""},{"line_number":903,"context_line":"        do_test(\u0027success\u0027)"},{"line_number":904,"context_line":"        do_test(\u0027succès\u0027)"},{"line_number":905,"context_line":"        do_test(u\u0027success\u0027)"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":"    def test_error_occurred(self):"},{"line_number":908,"context_line":"        def do_test(msg):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_3f86b813","line":905,"in_reply_to":"1aa78d24_6648ddb3","updated":"2016-07-08 10:26:55.000000000","message":"ugh :/ Indeed I did note that and I think perhaps I should have deleted\n\n  do_test(u\u0027success\u0027)","commit_id":"ca2f6d13b6aa79d5e3c184955280b4a3ea17cd7d"}]}
