)]}'
{"neutron/db/l3_db.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8d096b1b1e906ae1ac0aaeb6e219c70819fc7041","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            return"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if not l3_plugin.router_supports_scheduling(context, router_id):"},{"line_number":352,"context_line":"            return"},{"line_number":353,"context_line":"        cur_agents \u003d l3_plugin.list_l3_agents_hosting_router("},{"line_number":354,"context_line":"            context, router_id)[\u0027agents\u0027]"},{"line_number":355,"context_line":"        for agent in cur_agents:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_e7fb3b45","side":"PARENT","line":352,"updated":"2016-09-08 11:32:53.000000000","message":"ahem?","commit_id":"aac250ed40d43d6edc29da1555a9e6b21de5c376"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"527438b501d9090b24e99d30f40e96386eec0e2f","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            return"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        if not l3_plugin.router_supports_scheduling(context, router_id):"},{"line_number":352,"context_line":"            return"},{"line_number":353,"context_line":"        cur_agents \u003d l3_plugin.list_l3_agents_hosting_router("},{"line_number":354,"context_line":"            context, router_id)[\u0027agents\u0027]"},{"line_number":355,"context_line":"        for agent in cur_agents:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_1205b60f","side":"PARENT","line":352,"in_reply_to":"9a89bdaa_e7fb3b45","updated":"2016-09-08 12:44:58.000000000","message":"Done","commit_id":"aac250ed40d43d6edc29da1555a9e6b21de5c376"}],"neutron/db/l3_hamode_db.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8d096b1b1e906ae1ac0aaeb6e219c70819fc7041","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        \"\"\"Receive dict of router ID to state and update them all.\"\"\""},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        bindings \u003d self.get_ha_router_port_bindings("},{"line_number":753,"context_line":"            context, router_ids\u003dlist(states.keys()), host\u003dhost)"},{"line_number":754,"context_line":"        self._set_router_states(context, bindings, states)"},{"line_number":755,"context_line":"        self._update_router_port_bindings(context, states, host)"},{"line_number":756,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_a30206b2","line":753,"updated":"2016-09-08 11:32:53.000000000","message":"?","commit_id":"9bb31f65fa303da3b09f18ab19efa63f0f5bd5e3"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"527438b501d9090b24e99d30f40e96386eec0e2f","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        \"\"\"Receive dict of router ID to state and update them all.\"\"\""},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"        bindings \u003d self.get_ha_router_port_bindings("},{"line_number":753,"context_line":"            context, router_ids\u003dlist(states.keys()), host\u003dhost)"},{"line_number":754,"context_line":"        self._set_router_states(context, bindings, states)"},{"line_number":755,"context_line":"        self._update_router_port_bindings(context, states, host)"},{"line_number":756,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_52e9feb5","line":753,"in_reply_to":"9a89bdaa_a30206b2","updated":"2016-09-08 12:44:58.000000000","message":"not needed at the moment. but these return views in python 3 so they aren\u0027t safe to copy.","commit_id":"9bb31f65fa303da3b09f18ab19efa63f0f5bd5e3"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8d096b1b1e906ae1ac0aaeb6e219c70819fc7041","unresolved":false,"context_lines":[{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    def _update_router_port_bindings(self, context, states, host):"},{"line_number":758,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":759,"context_line":"        device_filter \u003d {\u0027device_id\u0027: list(states.keys()),"},{"line_number":760,"context_line":"                         \u0027device_owner\u0027:"},{"line_number":761,"context_line":"                         [constants.DEVICE_OWNER_HA_REPLICATED_INT,"},{"line_number":762,"context_line":"                          constants.DEVICE_OWNER_ROUTER_SNAT]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_43285a33","line":759,"updated":"2016-09-08 11:32:53.000000000","message":"?","commit_id":"9bb31f65fa303da3b09f18ab19efa63f0f5bd5e3"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"527438b501d9090b24e99d30f40e96386eec0e2f","unresolved":false,"context_lines":[{"line_number":756,"context_line":""},{"line_number":757,"context_line":"    def _update_router_port_bindings(self, context, states, host):"},{"line_number":758,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":759,"context_line":"        device_filter \u003d {\u0027device_id\u0027: list(states.keys()),"},{"line_number":760,"context_line":"                         \u0027device_owner\u0027:"},{"line_number":761,"context_line":"                         [constants.DEVICE_OWNER_HA_REPLICATED_INT,"},{"line_number":762,"context_line":"                          constants.DEVICE_OWNER_ROUTER_SNAT]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_1231365a","line":759,"in_reply_to":"9a89bdaa_43285a33","updated":"2016-09-08 12:44:58.000000000","message":"passing a view here will break because of the decorator between us an get_port that tries to copy it.","commit_id":"9bb31f65fa303da3b09f18ab19efa63f0f5bd5e3"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"bf2179fb6b09c91434dda20734dd2266541ae6de","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return allocated_vr_ids"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":209,"context_line":"    def _allocate_vr_id(self, context, network_id, router_id):"},{"line_number":210,"context_line":"        # TODO(kevinbenton): let decorator handle duplicate retry"},{"line_number":211,"context_line":"        # like in review.openstack.org/#/c/367179/1/neutron/db/l3_hamode_db.py"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_5ae7f911","line":208,"updated":"2016-09-09 20:19:52.000000000","message":"Do we need the retry here? As the \"create_router\" function is indirectly using this function and has the retry.","commit_id":"f826bb96ab9688fc6698acf2fbfed73c006d9831"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"d1000726910d8fffdb54f2c80577713095c1386b","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return allocated_vr_ids"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":209,"context_line":"    def _allocate_vr_id(self, context, network_id, router_id):"},{"line_number":210,"context_line":"        # TODO(kevinbenton): let decorator handle duplicate retry"},{"line_number":211,"context_line":"        # like in review.openstack.org/#/c/367179/1/neutron/db/l3_hamode_db.py"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_ddd22334","line":208,"in_reply_to":"9a89bdaa_5ae7f911","updated":"2016-09-09 20:41:26.000000000","message":"yeah, we actually want to get these as close to the DB transactions as we can. eventually we would pull it off of \u0027create_router\u0027 if we can be sure all of the calls inside are safe.","commit_id":"f826bb96ab9688fc6698acf2fbfed73c006d9831"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"bf2179fb6b09c91434dda20734dd2266541ae6de","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            network_id\u003dnetwork_id, router_id\u003drouter_id,"},{"line_number":240,"context_line":"            max_tries\u003dMAX_ALLOCATION_TRIES)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":243,"context_line":"    def _delete_vr_id_allocation(self, context, ha_network, vr_id):"},{"line_number":244,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":245,"context_line":"            context.session.query(L3HARouterVRIdAllocation).filter_by("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_3a5b15f8","line":242,"updated":"2016-09-09 20:19:52.000000000","message":"Do we need this retry here? \nAs the function using this directly \"delete_router\" has a retry and function \"create_router\" using this indirectly through \"_update_router_db\" also has a retry.","commit_id":"f826bb96ab9688fc6698acf2fbfed73c006d9831"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"d1000726910d8fffdb54f2c80577713095c1386b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            network_id\u003dnetwork_id, router_id\u003drouter_id,"},{"line_number":240,"context_line":"            max_tries\u003dMAX_ALLOCATION_TRIES)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    @db_api.retry_if_session_inactive()"},{"line_number":243,"context_line":"    def _delete_vr_id_allocation(self, context, ha_network, vr_id):"},{"line_number":244,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":245,"context_line":"            context.session.query(L3HARouterVRIdAllocation).filter_by("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_5de7f311","line":242,"in_reply_to":"9a89bdaa_3a5b15f8","updated":"2016-09-09 20:41:26.000000000","message":"ditto","commit_id":"f826bb96ab9688fc6698acf2fbfed73c006d9831"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"d4a1bb6d6ef6cf4027250ecd625d54b103785d1e","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                    self.delete_router(context, router_dict[\u0027id\u0027])"},{"line_number":499,"context_line":"        return router_dict"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def _update_router_db(self, context, router_id, data):"},{"line_number":502,"context_line":"        router_db \u003d self._get_router(context, router_id)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        original_distributed_state \u003d router_db.extra_attributes.distributed"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_44b9a9ca","line":501,"updated":"2016-09-12 13:07:50.000000000","message":"Well it doesn\u0027t really matter as long as we aren\u0027t dependent on the ones in the API. It\u0027s just going to be an ongoing process of bringing them closer and closer to the db transaction. In this case the create_router would have already covered this if it didn\u0027t retry on its own.\n\nAs we switch to engine facade it will be easier because we can just put it wherever the enginefacade writer/reader decorators go.","commit_id":"f826bb96ab9688fc6698acf2fbfed73c006d9831"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"2d64381551def4d83ec2c8c65da99f3cb63ecf37","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                    self.delete_router(context, router_dict[\u0027id\u0027])"},{"line_number":499,"context_line":"        return router_dict"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def _update_router_db(self, context, router_id, data):"},{"line_number":502,"context_line":"        router_db \u003d self._get_router(context, router_id)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        original_distributed_state \u003d router_db.extra_attributes.distributed"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_52026b3f","line":501,"updated":"2016-09-11 14:11:31.000000000","message":"Why not this one?","commit_id":"f826bb96ab9688fc6698acf2fbfed73c006d9831"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"a1a91134ef68e51af20f84d57e83ae0b07434473","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                    self.delete_router(context, router_dict[\u0027id\u0027])"},{"line_number":499,"context_line":"        return router_dict"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def _update_router_db(self, context, router_id, data):"},{"line_number":502,"context_line":"        router_db \u003d self._get_router(context, router_id)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        original_distributed_state \u003d router_db.extra_attributes.distributed"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_e27004df","line":501,"in_reply_to":"9a89bdaa_52026b3f","updated":"2016-09-12 07:45:55.000000000","message":"good point, i was thinking this was always called in a transaction but it\u0027s not","commit_id":"f826bb96ab9688fc6698acf2fbfed73c006d9831"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"70686d74e66186160777de8e8aa41c6bc904b609","unresolved":false,"context_lines":[{"line_number":498,"context_line":"                    self.delete_router(context, router_dict[\u0027id\u0027])"},{"line_number":499,"context_line":"        return router_dict"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def _update_router_db(self, context, router_id, data):"},{"line_number":502,"context_line":"        router_db \u003d self._get_router(context, router_id)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"        original_distributed_state \u003d router_db.extra_attributes.distributed"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_e6b00f8e","line":501,"in_reply_to":"9a89bdaa_e27004df","updated":"2016-09-12 10:17:35.000000000","message":"The question is, how many others have we missed?","commit_id":"f826bb96ab9688fc6698acf2fbfed73c006d9831"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d9b0d0fa477e7a5dea3ac5c6d19e93cbd54ebdbd","unresolved":false,"context_lines":[{"line_number":767,"context_line":""},{"line_number":768,"context_line":"    def _update_router_port_bindings(self, context, states, host):"},{"line_number":769,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":770,"context_line":"        device_filter \u003d {\u0027device_id\u0027: list(states.keys()),"},{"line_number":771,"context_line":"                         \u0027device_owner\u0027:"},{"line_number":772,"context_line":"                         [constants.DEVICE_OWNER_HA_REPLICATED_INT,"},{"line_number":773,"context_line":"                          constants.DEVICE_OWNER_ROUTER_SNAT]}"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_e2554dc6","line":770,"range":{"start_line":770,"start_character":38,"end_line":770,"end_character":56},"updated":"2016-09-12 13:33:57.000000000","message":"aha! unrelated!","commit_id":"acbabaa3db2c12a41c52662a82e9a900d5929846"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4f3c9b2c6a3d29e8e80230db93cd8cc7c8081d87","unresolved":false,"context_lines":[{"line_number":767,"context_line":""},{"line_number":768,"context_line":"    def _update_router_port_bindings(self, context, states, host):"},{"line_number":769,"context_line":"        admin_ctx \u003d context.elevated()"},{"line_number":770,"context_line":"        device_filter \u003d {\u0027device_id\u0027: list(states.keys()),"},{"line_number":771,"context_line":"                         \u0027device_owner\u0027:"},{"line_number":772,"context_line":"                         [constants.DEVICE_OWNER_HA_REPLICATED_INT,"},{"line_number":773,"context_line":"                          constants.DEVICE_OWNER_ROUTER_SNAT]}"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_3d50340a","line":770,"updated":"2016-09-12 13:40:51.000000000","message":"it actually is. in python3 keys() creates a view which cannot be copied by the decorator. :)","commit_id":"acbabaa3db2c12a41c52662a82e9a900d5929846"}],"neutron/plugins/ml2/common/exceptions.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4f3c9b2c6a3d29e8e80230db93cd8cc7c8081d87","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # MultipleExceptions and return inner exceptions. Keep it"},{"line_number":29,"context_line":"        # for backward-compatibility, in case other code use it."},{"line_number":30,"context_line":"        self.message \u003d _(\"%s failed.\") % method"},{"line_number":31,"context_line":"        super(MechanismDriverError, self).__init__(errors or [])"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ExtensionDriverError(exceptions.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_1d4d3072","line":31,"updated":"2016-09-12 13:40:51.000000000","message":"This was because the retry decorator was now inspecting an exception from a unit test that threw one of these without setting \u0027errors\u0027 so it was uniterable.","commit_id":"acbabaa3db2c12a41c52662a82e9a900d5929846"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d9b0d0fa477e7a5dea3ac5c6d19e93cbd54ebdbd","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # MultipleExceptions and return inner exceptions. Keep it"},{"line_number":29,"context_line":"        # for backward-compatibility, in case other code use it."},{"line_number":30,"context_line":"        self.message \u003d _(\"%s failed.\") % method"},{"line_number":31,"context_line":"        super(MechanismDriverError, self).__init__(errors or [])"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class ExtensionDriverError(exceptions.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_02687186","line":31,"range":{"start_line":31,"start_character":57,"end_line":31,"end_character":63},"updated":"2016-09-12 13:33:57.000000000","message":"another one!","commit_id":"acbabaa3db2c12a41c52662a82e9a900d5929846"}],"neutron/tests/unit/db/test_l3_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d9b0d0fa477e7a5dea3ac5c6d19e93cbd54ebdbd","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            mock.patch.object(l3_db.L3_NAT_db_mixin, \u0027notify_router_updated\u0027)\\"},{"line_number":235,"context_line":"            as nru:"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            self.db.create_router(mock.Mock(), router_input)"},{"line_number":238,"context_line":"            self.assertTrue(crd.called)"},{"line_number":239,"context_line":"            if external_gateway_info:"},{"line_number":240,"context_line":"                self.assertTrue(urgi.called)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_c2ccc963","line":237,"range":{"start_line":237,"start_character":34,"end_line":237,"end_character":45},"updated":"2016-09-12 13:33:57.000000000","message":"I\u0027m calling police","commit_id":"acbabaa3db2c12a41c52662a82e9a900d5929846"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4f3c9b2c6a3d29e8e80230db93cd8cc7c8081d87","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            mock.patch.object(l3_db.L3_NAT_db_mixin, \u0027notify_router_updated\u0027)\\"},{"line_number":235,"context_line":"            as nru:"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            self.db.create_router(mock.Mock(), router_input)"},{"line_number":238,"context_line":"            self.assertTrue(crd.called)"},{"line_number":239,"context_line":"            if external_gateway_info:"},{"line_number":240,"context_line":"                self.assertTrue(urgi.called)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_fd2fac85","line":237,"updated":"2016-09-12 13:40:51.000000000","message":"same here, the arg copying cries on the mock.ANY","commit_id":"acbabaa3db2c12a41c52662a82e9a900d5929846"}]}
