)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"eb6e7690e5f73faf40859d48c63124f0c57e498c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"and agent\u0027s networks, networks may have already"},{"line_number":12,"context_line":"been deleted from the db. In such circumstances,"},{"line_number":13,"context_line":"it is more appropriate to emit warnings rather than"},{"line_number":14,"context_line":"full-blown exceptions as the handles these circumstances"},{"line_number":15,"context_line":"just fine."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Close-bug: 1251874"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAATn%2F%2B6Fw%3D","line":14,"updated":"2013-11-18 17:53:22.000000000","message":"I just noticed things are a bit confusing around \u0027as the handles\u0027.","commit_id":"0d6dd4ea0b0eab2b930c8ddb811d32d23de63be5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"6775662f911e8f2f6519c7644db12cf5b9688eb8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"and agent\u0027s networks, networks may have already"},{"line_number":12,"context_line":"been deleted from the db. In such circumstances,"},{"line_number":13,"context_line":"it is more appropriate to emit warnings rather than"},{"line_number":14,"context_line":"full-blown exceptions as the handles these circumstances"},{"line_number":15,"context_line":"just fine."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Close-bug: 1251874"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAATn%2F%2B5zE%3D","line":14,"in_reply_to":"AAAATn%2F%2B6Fw%3D","updated":"2013-11-18 19:11:29.000000000","message":"doh! I\u0027ll fix it.","commit_id":"0d6dd4ea0b0eab2b930c8ddb811d32d23de63be5"}],"neutron/agent/dhcp_agent.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b8342ef4a96b0abc5160144ec151be75aad665fe","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                LOG.warning(_(\"Network %s has been deleted.\"), network.id)"},{"line_number":137,"context_line":"            else:"},{"line_number":138,"context_line":"                LOG.exception(_(\u0027Unable to %(action)s dhcp for %(net_id)s.\u0027)"},{"line_number":139,"context_line":"                              % {\u0027net_id\u0027: network.id, \u0027action\u0027: action})"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def sync_state(self):"},{"line_number":142,"context_line":"        \"\"\"Sync the local DHCP state with Neutron.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7%2Bk%3D","line":139,"updated":"2013-11-18 11:41:49.000000000","message":"consider comma instead of % in LOG methods","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8953ae82fba1c799d43f048f6b23bb16e79aad04","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                LOG.warning(_(\"Network %s has been deleted.\"), network.id)"},{"line_number":137,"context_line":"            else:"},{"line_number":138,"context_line":"                LOG.exception(_(\u0027Unable to %(action)s dhcp for %(net_id)s.\u0027)"},{"line_number":139,"context_line":"                              % {\u0027net_id\u0027: network.id, \u0027action\u0027: action})"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def sync_state(self):"},{"line_number":142,"context_line":"        \"\"\"Sync the local DHCP state with Neutron.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7IA%3D","line":139,"in_reply_to":"AAAATn%2F%2B7%2Bk%3D","updated":"2013-11-18 15:04:57.000000000","message":"I remember the convention was , for single parameters % for param dict. Since I am terrible at remembering rules, I\u0027d highly appreciate if someone turn this rule on in Hacking so that we can stop caring about this one","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"c683107734e48cea94cd7daa18aeb3bb2fc916e1","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    def safe_configure_dhcp_for_network(self, network):"},{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            self.configure_dhcp_for_network(network)"},{"line_number":196,"context_line":"        except (exceptions.NetworkNotFound, RuntimeError):"},{"line_number":197,"context_line":"            LOG.warn(_(\u0027Network %s may have been deleted and  its resources \u0027"},{"line_number":198,"context_line":"                       \u0027may have already been disposed.\u0027), network.id)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7Wo%3D","line":196,"updated":"2013-11-18 13:59:22.000000000","message":"Is the RuntimeError safe to ignore in all cases, or would further inspection be useful?","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8953ae82fba1c799d43f048f6b23bb16e79aad04","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    def safe_configure_dhcp_for_network(self, network):"},{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            self.configure_dhcp_for_network(network)"},{"line_number":196,"context_line":"        except (exceptions.NetworkNotFound, RuntimeError):"},{"line_number":197,"context_line":"            LOG.warn(_(\u0027Network %s may have been deleted and  its resources \u0027"},{"line_number":198,"context_line":"                       \u0027may have already been disposed.\u0027), network.id)"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7GA%3D","line":196,"in_reply_to":"AAAATn%2F%2B7Wo%3D","updated":"2013-11-18 15:04:57.000000000","message":"This method is called in the periodic_resync and hence in the background. This is not so much at handling the error but about making sure we avoid upsetting the configuration of other networks, see line 59.","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b8342ef4a96b0abc5160144ec151be75aad665fe","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            self.configure_dhcp_for_network(network)"},{"line_number":196,"context_line":"        except (exceptions.NetworkNotFound, RuntimeError):"},{"line_number":197,"context_line":"            LOG.warn(_(\u0027Network %s may have been deleted and  its resources \u0027"},{"line_number":198,"context_line":"                       \u0027may have already been disposed.\u0027), network.id)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def configure_dhcp_for_network(self, network):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B79w%3D","line":197,"updated":"2013-11-18 11:41:49.000000000","message":"nit: two spaces","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8953ae82fba1c799d43f048f6b23bb16e79aad04","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            self.configure_dhcp_for_network(network)"},{"line_number":196,"context_line":"        except (exceptions.NetworkNotFound, RuntimeError):"},{"line_number":197,"context_line":"            LOG.warn(_(\u0027Network %s may have been deleted and  its resources \u0027"},{"line_number":198,"context_line":"                       \u0027may have already been disposed.\u0027), network.id)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def configure_dhcp_for_network(self, network):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7F0%3D","line":197,"in_reply_to":"AAAATn%2F%2B79w%3D","updated":"2013-11-18 15:04:57.000000000","message":"Done","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"c683107734e48cea94cd7daa18aeb3bb2fc916e1","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            return self.enable_dhcp_helper(network_id)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        network \u003d self.safe_get_network_info(network_id)"},{"line_number":233,"context_line":"        if network is None:"},{"line_number":234,"context_line":"            return"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        old_cidrs \u003d set(s.cidr for s in old_network.subnets if s.enable_dhcp)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7c0%3D","line":233,"updated":"2013-11-18 13:59:22.000000000","message":"(Suggestion only) Consider using implicit boolean evaluation e.g. \u0027if not network\u0027, since the corresponding positive check is \u0027if network\u0027 rather than \u0027if network is not None\u0027.","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8953ae82fba1c799d43f048f6b23bb16e79aad04","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            return self.enable_dhcp_helper(network_id)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        network \u003d self.safe_get_network_info(network_id)"},{"line_number":233,"context_line":"        if network is None:"},{"line_number":234,"context_line":"            return"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        old_cidrs \u003d set(s.cidr for s in old_network.subnets if s.enable_dhcp)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7Fw%3D","line":233,"in_reply_to":"AAAATn%2F%2B7c0%3D","updated":"2013-11-18 15:04:57.000000000","message":"Done","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"}],"neutron/db/dhcp_rpc_base.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"275f0745b5e1f35fe8709ec973701af79df3cfbc","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            network \u003d plugin.get_network(context, network_id)"},{"line_number":88,"context_line":"        except n_exc.NetworkNotFound:"},{"line_number":89,"context_line":"            return"},{"line_number":90,"context_line":"        filters \u003d dict(network_id\u003d[network_id])"},{"line_number":91,"context_line":"        network[\u0027subnets\u0027] \u003d plugin.get_subnets(context, filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B%2BdY%3D","line":88,"updated":"2013-11-17 08:43:37.000000000","message":"Would it not be worthwhile logging the warning here?","commit_id":"5e19766b2e363f2a29a9414852c550abbb3c774c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5c8004936d080c289bb0f85b13c648033a040b7b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        plugin \u003d manager.NeutronManager.get_plugin()"},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            network \u003d plugin.get_network(context, network_id)"},{"line_number":88,"context_line":"        except n_exc.NetworkNotFound:"},{"line_number":89,"context_line":"            return"},{"line_number":90,"context_line":"        filters \u003d dict(network_id\u003d[network_id])"},{"line_number":91,"context_line":"        network[\u0027subnets\u0027] \u003d plugin.get_subnets(context, filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B%2BOM%3D","line":88,"in_reply_to":"AAAATn%2F%2B%2BdY%3D","updated":"2013-11-17 17:29:11.000000000","message":"Good point.","commit_id":"5e19766b2e363f2a29a9414852c550abbb3c774c"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"c683107734e48cea94cd7daa18aeb3bb2fc916e1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.common import utils"},{"line_number":23,"context_line":"from neutron.extensions import portbindings"},{"line_number":24,"context_line":"from neutron import manager"},{"line_number":25,"context_line":"from neutron.openstack.common.db import exception as d_exc"},{"line_number":26,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B8%2Bk%3D","line":25,"updated":"2013-11-18 13:59:22.000000000","message":"(Suggestion only) d_exc -\u003e db_exc","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8953ae82fba1c799d43f048f6b23bb16e79aad04","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from neutron.common import utils"},{"line_number":23,"context_line":"from neutron.extensions import portbindings"},{"line_number":24,"context_line":"from neutron import manager"},{"line_number":25,"context_line":"from neutron.openstack.common.db import exception as d_exc"},{"line_number":26,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7Fs%3D","line":25,"in_reply_to":"AAAATn%2F%2B8%2Bk%3D","updated":"2013-11-18 15:04:57.000000000","message":"Done","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b8342ef4a96b0abc5160144ec151be75aad665fe","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                    n_exc.NetworkNotFound,"},{"line_number":172,"context_line":"                    n_exc.SubnetNotFound) as e:"},{"line_number":173,"context_line":"                LOG.warn(_(\"Port for network %(net_id)s could not be created: \""},{"line_number":174,"context_line":"                           \"%(reason)s\") % {\"net_id\": network_id, \u0027reason\u0027: e})"},{"line_number":175,"context_line":"                return"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # Convert subnet_id to subnet dict"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B77w%3D","line":174,"updated":"2013-11-18 11:41:49.000000000","message":"ditto on %","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"}],"neutron/tests/unit/test_db_rpc_base.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"c683107734e48cea94cd7daa18aeb3bb2fc916e1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                        update_port\u003dport_retval)"},{"line_number":108,"context_line":"        self.assertEqual(len(self.log.mock_calls), 1)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test_get_dhcp_port_catch_not_found_on_get_network(self):"},{"line_number":111,"context_line":"        self.plugin.update_port.return_value \u003d None"},{"line_number":112,"context_line":"        self.plugin.get_network.side_effect \u003d n_exc.NetworkNotFound(net_id\u003d\u0027a\u0027)"},{"line_number":113,"context_line":"        retval \u003d self.callbacks.get_dhcp_port(mock.Mock(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7Yg%3D","line":110,"updated":"2013-11-18 13:59:22.000000000","message":"(Suggestion only): These two methods differ only in the return value of get_network and create_port, consider calling a common method with that value.","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8953ae82fba1c799d43f048f6b23bb16e79aad04","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                        update_port\u003dport_retval)"},{"line_number":108,"context_line":"        self.assertEqual(len(self.log.mock_calls), 1)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test_get_dhcp_port_catch_not_found_on_get_network(self):"},{"line_number":111,"context_line":"        self.plugin.update_port.return_value \u003d None"},{"line_number":112,"context_line":"        self.plugin.get_network.side_effect \u003d n_exc.NetworkNotFound(net_id\u003d\u0027a\u0027)"},{"line_number":113,"context_line":"        retval \u003d self.callbacks.get_dhcp_port(mock.Mock(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2B7Fc%3D","line":110,"in_reply_to":"AAAATn%2F%2B7Yg%3D","updated":"2013-11-18 15:04:57.000000000","message":"Done","commit_id":"0c86cde1a3be771e6db5dcb265d8b1bc2263bfcd"}]}
