)]}'
{"quantum/plugins/nec/nec_plugin.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1cd18099138f1a39011d7705841f5d7abc6ae2c8","unresolved":false,"context_lines":[{"line_number":685,"context_line":"        for id in kwargs.get(\u0027port_removed\u0027, []):"},{"line_number":686,"context_line":"            portinfo \u003d ndb.get_portinfo(session, id)"},{"line_number":687,"context_line":"            if not portinfo:"},{"line_number":688,"context_line":"                LOG.info(_(\"update_ports(): ignore port_removed message \""},{"line_number":689,"context_line":"                           \"due to portinfo for port_id\u003d%s was not\""},{"line_number":690,"context_line":"                           \"registered\"), id)"},{"line_number":691,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwCc%3D","line":688,"updated":"2013-03-29 06:58:52.000000000","message":"LOG.debug is better since it is an usual event.","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"e39afa372b2e221b08a5a8ac32d94a8bee781ae8","unresolved":false,"context_lines":[{"line_number":685,"context_line":"        for id in kwargs.get(\u0027port_removed\u0027, []):"},{"line_number":686,"context_line":"            portinfo \u003d ndb.get_portinfo(session, id)"},{"line_number":687,"context_line":"            if not portinfo:"},{"line_number":688,"context_line":"                LOG.info(_(\"update_ports(): ignore port_removed message \""},{"line_number":689,"context_line":"                           \"due to portinfo for port_id\u003d%s was not\""},{"line_number":690,"context_line":"                           \"registered\"), id)"},{"line_number":691,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwCE%3D","line":688,"in_reply_to":"AAAAOH%2F%2FwCc%3D","updated":"2013-03-29 07:53:49.000000000","message":"Done","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1cd18099138f1a39011d7705841f5d7abc6ae2c8","unresolved":false,"context_lines":[{"line_number":686,"context_line":"            portinfo \u003d ndb.get_portinfo(session, id)"},{"line_number":687,"context_line":"            if not portinfo:"},{"line_number":688,"context_line":"                LOG.info(_(\"update_ports(): ignore port_removed message \""},{"line_number":689,"context_line":"                           \"due to portinfo for port_id\u003d%s was not\""},{"line_number":690,"context_line":"                           \"registered\"), id)"},{"line_number":691,"context_line":"                continue"},{"line_number":692,"context_line":"            if portinfo.datapath_id is not datapath_id:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwCo%3D","line":689,"updated":"2013-03-29 06:58:52.000000000","message":"Needs a space at the end of line.","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"e39afa372b2e221b08a5a8ac32d94a8bee781ae8","unresolved":false,"context_lines":[{"line_number":686,"context_line":"            portinfo \u003d ndb.get_portinfo(session, id)"},{"line_number":687,"context_line":"            if not portinfo:"},{"line_number":688,"context_line":"                LOG.info(_(\"update_ports(): ignore port_removed message \""},{"line_number":689,"context_line":"                           \"due to portinfo for port_id\u003d%s was not\""},{"line_number":690,"context_line":"                           \"registered\"), id)"},{"line_number":691,"context_line":"                continue"},{"line_number":692,"context_line":"            if portinfo.datapath_id is not datapath_id:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwCI%3D","line":689,"in_reply_to":"AAAAOH%2F%2FwCo%3D","updated":"2013-03-29 07:53:49.000000000","message":"Done","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1cd18099138f1a39011d7705841f5d7abc6ae2c8","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                           \"registered\"), id)"},{"line_number":691,"context_line":"                continue"},{"line_number":692,"context_line":"            if portinfo.datapath_id is not datapath_id:"},{"line_number":693,"context_line":"                LOG.info(_(\"update_ports(): ignore port_removed message \""},{"line_number":694,"context_line":"                           \"received from different host \""},{"line_number":695,"context_line":"                           \"(registered_datapath_id\u003d%(registered)s, \""},{"line_number":696,"context_line":"                           \"received_datapath_id\u003d%(received)s).\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwCY%3D","line":693,"updated":"2013-03-29 06:58:52.000000000","message":"LOG.debug is better too.","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"e39afa372b2e221b08a5a8ac32d94a8bee781ae8","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                           \"registered\"), id)"},{"line_number":691,"context_line":"                continue"},{"line_number":692,"context_line":"            if portinfo.datapath_id is not datapath_id:"},{"line_number":693,"context_line":"                LOG.info(_(\"update_ports(): ignore port_removed message \""},{"line_number":694,"context_line":"                           \"received from different host \""},{"line_number":695,"context_line":"                           \"(registered_datapath_id\u003d%(registered)s, \""},{"line_number":696,"context_line":"                           \"received_datapath_id\u003d%(received)s).\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwCA%3D","line":693,"in_reply_to":"AAAAOH%2F%2FwCY%3D","updated":"2013-03-29 07:53:49.000000000","message":"Done","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"}],"quantum/tests/unit/nec/test_nec_plugin.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1cd18099138f1a39011d7705841f5d7abc6ae2c8","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    FIREWALL_DRIVER \u003d test_sg_rpc.FIREWALL_NOOP_DRIVER"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class TestNecPortsV2Backend(NecPluginV2TestCase):"},{"line_number":76,"context_line":"    \"\"\"Test that NECPluginV2 calls backends properly.\"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def setUp(self, plugin\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwCs%3D","line":75,"updated":"2013-03-29 06:58:52.000000000","message":"I prefer to Callback rather than Backend","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"e39afa372b2e221b08a5a8ac32d94a8bee781ae8","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    FIREWALL_DRIVER \u003d test_sg_rpc.FIREWALL_NOOP_DRIVER"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class TestNecPortsV2Backend(NecPluginV2TestCase):"},{"line_number":76,"context_line":"    \"\"\"Test that NECPluginV2 calls backends properly.\"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def setUp(self, plugin\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwBs%3D","line":75,"in_reply_to":"AAAAOH%2F%2FwCs%3D","updated":"2013-03-29 07:53:49.000000000","message":"Done","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1cd18099138f1a39011d7705841f5d7abc6ae2c8","unresolved":false,"context_lines":[{"line_number":75,"context_line":"class TestNecPortsV2Backend(NecPluginV2TestCase):"},{"line_number":76,"context_line":"    \"\"\"Test that NECPluginV2 calls backends properly.\"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":79,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":80,"context_line":"        ofc_manager_p \u003d mock.patch(OFC_MANAGER)"},{"line_number":81,"context_line":"        ofc_manager_cls \u003d ofc_manager_p.start()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwC0%3D","line":78,"updated":"2013-03-29 06:58:52.000000000","message":"plugin\u003dNone is unnecessary","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"e39afa372b2e221b08a5a8ac32d94a8bee781ae8","unresolved":false,"context_lines":[{"line_number":75,"context_line":"class TestNecPortsV2Backend(NecPluginV2TestCase):"},{"line_number":76,"context_line":"    \"\"\"Test that NECPluginV2 calls backends properly.\"\"\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def setUp(self, plugin\u003dNone):"},{"line_number":79,"context_line":"        self.addCleanup(mock.patch.stopall)"},{"line_number":80,"context_line":"        ofc_manager_p \u003d mock.patch(OFC_MANAGER)"},{"line_number":81,"context_line":"        ofc_manager_cls \u003d ofc_manager_p.start()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwBo%3D","line":78,"in_reply_to":"AAAAOH%2F%2FwC0%3D","updated":"2013-03-29 07:53:49.000000000","message":"Done","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1cd18099138f1a39011d7705841f5d7abc6ae2c8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.ofc.create_ofc_port.side_effect \u003d _create_ofc_port_called"},{"line_number":97,"context_line":"        self.ofc.delete_ofc_port.side_effect \u003d _delete_ofc_port_called"},{"line_number":98,"context_line":"        # initialize"},{"line_number":99,"context_line":"        self.ofc.exists_ofc_port.return_value \u003d False"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _nec_rpcapi_update_ports(self, agent_id\u003d\u0027nec-q-agent.fake\u0027,"},{"line_number":102,"context_line":"                                 datapath_id\u003d\"0xabc\", added\u003d[], removed\u003d[]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwDA%3D","line":99,"updated":"2013-03-29 06:58:52.000000000","message":"Hmm.... It is not easy to understand.\n\nConsider the following:\n\ndef setUp():\n  ...\n  self.port_exists \u003d False\n\ndef _setup_return_value_and_side_effect():\n  def _create_ofc_port_called():\n     self.port_exists \u003d True\n  def _delete_ofc_port_called():\n     self.port_exists \u003d False\n  def _exists_ofc_port_called():\n     return self.port_exists\n\n  self.ofc.exists_ofc_port.side_effect \u003d _exists_ofc_port_called","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"e39afa372b2e221b08a5a8ac32d94a8bee781ae8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.ofc.create_ofc_port.side_effect \u003d _create_ofc_port_called"},{"line_number":97,"context_line":"        self.ofc.delete_ofc_port.side_effect \u003d _delete_ofc_port_called"},{"line_number":98,"context_line":"        # initialize"},{"line_number":99,"context_line":"        self.ofc.exists_ofc_port.return_value \u003d False"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _nec_rpcapi_update_ports(self, agent_id\u003d\u0027nec-q-agent.fake\u0027,"},{"line_number":102,"context_line":"                                 datapath_id\u003d\"0xabc\", added\u003d[], removed\u003d[]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwAc%3D","line":99,"in_reply_to":"AAAAOH%2F%2FwDA%3D","updated":"2013-03-29 07:53:49.000000000","message":"Done","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1cd18099138f1a39011d7705841f5d7abc6ae2c8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                  \u0027agent_id\u0027: agent_id,"},{"line_number":105,"context_line":"                  \u0027datapath_id\u0027: datapath_id,"},{"line_number":106,"context_line":"                  \u0027port_added\u0027: added, \u0027port_removed\u0027: removed}"},{"line_number":107,"context_line":"        callbacks \u003d nec_plugin.NECPluginV2RPCCallbacks(self.plugin)"},{"line_number":108,"context_line":"        callbacks.update_ports(self.context, **kwargs)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test_port_create(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwDE%3D","line":107,"updated":"2013-03-29 06:58:52.000000000","message":"Callbacks should be instantiated in __init__().","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"e39afa372b2e221b08a5a8ac32d94a8bee781ae8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                  \u0027agent_id\u0027: agent_id,"},{"line_number":105,"context_line":"                  \u0027datapath_id\u0027: datapath_id,"},{"line_number":106,"context_line":"                  \u0027port_added\u0027: added, \u0027port_removed\u0027: removed}"},{"line_number":107,"context_line":"        callbacks \u003d nec_plugin.NECPluginV2RPCCallbacks(self.plugin)"},{"line_number":108,"context_line":"        callbacks.update_ports(self.context, **kwargs)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test_port_create(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwAg%3D","line":107,"in_reply_to":"AAAAOH%2F%2FwDE%3D","updated":"2013-03-29 07:53:49.000000000","message":"Done","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1cd18099138f1a39011d7705841f5d7abc6ae2c8","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        with self.network() as network:"},{"line_number":151,"context_line":"            with self.subnet(network) as subnet:"},{"line_number":152,"context_line":"                with self.port(subnet) as port:"},{"line_number":153,"context_line":"                    port_id \u003d port[\u0027port\u0027][\u0027id\u0027]"},{"line_number":154,"context_line":"                    sport \u003d self.plugin.get_port(self.context, port_id)"},{"line_number":155,"context_line":"                    self.assertEqual(sport[\u0027status\u0027], \u0027DOWN\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwC8%3D","line":152,"updated":"2013-03-29 06:58:52.000000000","message":"I think self.network and self.subnet are unnecessary.","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"},{"author":{"_account_id":1894,"name":"Ryota MIBU","email":"r-mibu@cq.jp.nec.com","username":"r-mibu"},"change_message_id":"e39afa372b2e221b08a5a8ac32d94a8bee781ae8","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        with self.network() as network:"},{"line_number":151,"context_line":"            with self.subnet(network) as subnet:"},{"line_number":152,"context_line":"                with self.port(subnet) as port:"},{"line_number":153,"context_line":"                    port_id \u003d port[\u0027port\u0027][\u0027id\u0027]"},{"line_number":154,"context_line":"                    sport \u003d self.plugin.get_port(self.context, port_id)"},{"line_number":155,"context_line":"                    self.assertEqual(sport[\u0027status\u0027], \u0027DOWN\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2FwAk%3D","line":152,"in_reply_to":"AAAAOH%2F%2FwC8%3D","updated":"2013-03-29 07:53:49.000000000","message":"Done","commit_id":"022b7658ee3d6b2d05387915620ad749be7ed0c5"}]}
