)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"96a10651f37f25bc562860f14841e367d768301f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"even though the object is a ECObjectController."},{"line_number":20,"context_line":"Added a check for this in the"},{"line_number":21,"context_line":"proxy/controller/obj.py:BaseObjectController.GETorHEAD"},{"line_number":22,"context_line":"to facilitate debugging only"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Previously, an unhandled exception was raised because"},{"line_number":25,"context_line":"\u0027ReplicationStoragePolicy\u0027 object has no attribute"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1a6ced46_2931e9a2","line":22,"updated":"2015-03-21 23:15:52.000000000","message":"ah yeah, there\u0027s the debugging comment :)  Have you seen https://review.openstack.org/#/c/162890/ ?","commit_id":"8c6a7acb970bd258d8412007a292b92e688e9777"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"278ef58560d6aa15437ee97968873ae6f5a85583","unresolved":false,"context_lines":[{"line_number":19,"context_line":"even though the object is a ECObjectController."},{"line_number":20,"context_line":"Added a check for this in the"},{"line_number":21,"context_line":"proxy/controller/obj.py:BaseObjectController.GETorHEAD"},{"line_number":22,"context_line":"to facilitate debugging only"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Previously, an unhandled exception was raised because"},{"line_number":25,"context_line":"\u0027ReplicationStoragePolicy\u0027 object has no attribute"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1a6ced46_5dfedb6c","line":22,"in_reply_to":"1a6ced46_2931e9a2","updated":"2015-03-22 13:44:53.000000000","message":"Ah, that explains it.  I will apply those fixes just to see how the tests run with this issue removed.  Thanks!","commit_id":"8c6a7acb970bd258d8412007a292b92e688e9777"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"5d84b37af59e7a52f7fec94a1cbcc2cde90d4f5f","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        policy \u003d POLICIES.get_by_index(policy_index)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        if (type(self) is ECObjectController) and (policy_index \u003d\u003d \u00271\u0027):"},{"line_number":461,"context_line":"                raise Exception(\u0027Controller is EC, but policy is 1\u0027)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        obj_ring \u003d self.app.get_object_ring(policy_index)"},{"line_number":464,"context_line":"        req.headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d policy_index"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_a9d95985","line":461,"updated":"2015-03-21 22:56:03.000000000","message":"i\u0027m probably missing some earlier discussion, but why can\u0027t policy_index be 1 for EC?","commit_id":"8c6a7acb970bd258d8412007a292b92e688e9777"},{"author":{"_account_id":12279,"name":"Janie Richling","email":"jrichli@us.ibm.com","username":"jrichli"},"change_message_id":"278ef58560d6aa15437ee97968873ae6f5a85583","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        policy \u003d POLICIES.get_by_index(policy_index)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        if (type(self) is ECObjectController) and (policy_index \u003d\u003d \u00271\u0027):"},{"line_number":461,"context_line":"                raise Exception(\u0027Controller is EC, but policy is 1\u0027)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        obj_ring \u003d self.app.get_object_ring(policy_index)"},{"line_number":464,"context_line":"        req.headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d policy_index"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_3d091f96","line":461,"in_reply_to":"1a6ced46_490f05e2","updated":"2015-03-22 13:44:53.000000000","message":"This was just for debugging, but it would be better to have a check on the policy found at that index to be sure it matched the controller (EC).","commit_id":"8c6a7acb970bd258d8412007a292b92e688e9777"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"96a10651f37f25bc562860f14841e367d768301f","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        policy \u003d POLICIES.get_by_index(policy_index)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        if (type(self) is ECObjectController) and (policy_index \u003d\u003d \u00271\u0027):"},{"line_number":461,"context_line":"                raise Exception(\u0027Controller is EC, but policy is 1\u0027)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        obj_ring \u003d self.app.get_object_ring(policy_index)"},{"line_number":464,"context_line":"        req.headers[\u0027X-Backend-Storage-Policy-Index\u0027] \u003d policy_index"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_490f05e2","line":461,"in_reply_to":"1a6ced46_a9d95985","updated":"2015-03-21 23:15:52.000000000","message":"yeah, this can\u0027t be something proposed, I bet its for dev debug and part of the WIP.  Any index can be any policy type","commit_id":"8c6a7acb970bd258d8412007a292b92e688e9777"}],"test/functional/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"895c73745dc0b1494ca6cf04b607ce03ae023201","unresolved":false,"context_lines":[{"line_number":608,"context_line":"orig_request \u003d HTTPConnection.request"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"def patch_request():"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def request_with_policy(self, method, full_path,"},{"line_number":614,"context_line":"                            data\u003dNone, headers\u003dNone, files\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_24de993e","line":611,"updated":"2015-03-20 16:08:45.000000000","message":"maybe\n\n  def patch_request(conn):","commit_id":"57a0a5879a691f37cb3b346480316e22a6ef93ac"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"895c73745dc0b1494ca6cf04b607ce03ae023201","unresolved":false,"context_lines":[{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        return orig_request(self, method, full_path, data, headers, files)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    HTTPConnection.request \u003d request_with_policy"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"def retry(func, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_64917151","line":622,"updated":"2015-03-20 16:08:45.000000000","message":"So i am not too expert at patching, but  wonder if it would be better/safer to patch the instance rather than the class?\n\ni.e. where the HTTPConnection instance is constructed at line 593, call patch_request(conn) and here at line 622:\n\n  conn.request \u003d request_with_policy\n\nThat way, some other code path could construct an HTTPConnection instance without it being patched by surprise.","commit_id":"57a0a5879a691f37cb3b346480316e22a6ef93ac"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c0ea82ed4e89194ff510426d03421d21452a78b2","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                headers \u003d kwargs[\u0027headers\u0027]"},{"line_number":604,"context_line":"            global policy_specified"},{"line_number":605,"context_line":"            if policy_specified and \\"},{"line_number":606,"context_line":"                    headers and not (\u0027X-Storage-Policy\u0027 in headers):"},{"line_number":607,"context_line":"                headers[\u0027X-Storage-Policy\u0027] \u003d policy_specified"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"            return orig_request(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_38b631fb","line":606,"updated":"2015-03-24 18:55:36.000000000","message":"delete the \u0027and headers\u0027 condition otherwise will not add policy header if headers\u003d{}","commit_id":"8c6a7acb970bd258d8412007a292b92e688e9777"}],"test/functional/swift_test_client.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c0ea82ed4e89194ff510426d03421d21452a78b2","unresolved":false,"context_lines":[{"line_number":494,"context_line":"        if cfg is None:"},{"line_number":495,"context_line":"            cfg \u003d {}"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        import test.functional as tf"},{"line_number":498,"context_line":"        if tf.policy_specified and \\"},{"line_number":499,"context_line":"                hdrs and not (\u0027X-Storage-Policy\u0027 in hdrs):"},{"line_number":500,"context_line":"            hdrs[\u0027X-Storage-Policy\u0027] \u003d tf.policy_specified"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_86135565","line":497,"updated":"2015-03-24 18:55:36.000000000","message":"move to imports section at head of file","commit_id":"8c6a7acb970bd258d8412007a292b92e688e9777"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c0ea82ed4e89194ff510426d03421d21452a78b2","unresolved":false,"context_lines":[{"line_number":496,"context_line":""},{"line_number":497,"context_line":"        import test.functional as tf"},{"line_number":498,"context_line":"        if tf.policy_specified and \\"},{"line_number":499,"context_line":"                hdrs and not (\u0027X-Storage-Policy\u0027 in hdrs):"},{"line_number":500,"context_line":"            hdrs[\u0027X-Storage-Policy\u0027] \u003d tf.policy_specified"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"        return self.conn.make_request(\u0027PUT\u0027, self.path, hdrs\u003dhdrs,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_78cfc97f","line":499,"updated":"2015-03-24 18:55:36.000000000","message":"delete \u0027and hdrs\u0027 condition","commit_id":"8c6a7acb970bd258d8412007a292b92e688e9777"}]}
