)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bdcc36eeca9c489a34997bf09f4d30ac8be5b6e0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use cookies consistently in flows of all bridges"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Set agent UUID stamp as a cookie into all bridges. Physical and"},{"line_number":10,"context_line":"ancillary bridges were omitted in current code and are fixed in"},{"line_number":11,"context_line":"this commit. Perform deletion of the stale flows consistently"},{"line_number":12,"context_line":"with br-int and br-tun, respecting drop_flows_on_start configuration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3afc51ec_00f0aa8f","line":9,"updated":"2016-03-11 22:10:14.000000000","message":"I think default cookie is now generated for all bridges, so this patch does not explicitly set anything.","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"fb0e5a5935729b6a652d90c5d280505b2a682d61","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Use cookies consistently in flows of all bridges"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Set agent UUID stamp as a cookie into all bridges. Physical and"},{"line_number":10,"context_line":"ancillary bridges were omitted in current code and are fixed in"},{"line_number":11,"context_line":"this commit. Perform deletion of the stale flows consistently"},{"line_number":12,"context_line":"with br-int and br-tun, respecting drop_flows_on_start configuration"},{"line_number":13,"context_line":"option."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5aef4532_6996d095","line":10,"updated":"2016-03-07 10:41:13.000000000","message":"ancillary bridges are not modified by this commit","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bdcc36eeca9c489a34997bf09f4d30ac8be5b6e0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Use cookies consistently in flows of all bridges"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Set agent UUID stamp as a cookie into all bridges. Physical and"},{"line_number":10,"context_line":"ancillary bridges were omitted in current code and are fixed in"},{"line_number":11,"context_line":"this commit. Perform deletion of the stale flows consistently"},{"line_number":12,"context_line":"with br-int and br-tun, respecting drop_flows_on_start configuration"},{"line_number":13,"context_line":"option."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3afc51ec_e3266815","line":10,"in_reply_to":"5aef4532_6996d095","updated":"2016-03-11 22:10:14.000000000","message":"Right. And I suspect we don\u0027t need it anyway since we don\u0027t set flows there, or do we?","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bdcc36eeca9c489a34997bf09f4d30ac8be5b6e0","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"[1] https://review.openstack.org/#/c/267591/"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I9801b76829021c9a0e6358982e1136637634a521"},{"line_number":26,"context_line":"Closes-Bug: 1514056"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3afc51ec_00754af8","line":25,"updated":"2016-03-11 22:10:14.000000000","message":"I saw in LP that this patch is based on work from other folks. If that\u0027s a significant piece of the patch, you should mention them as co-authors here, with Co-Authored-By: ... tag [if that\u0027s not the case, disregard].","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bdcc36eeca9c489a34997bf09f4d30ac8be5b6e0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"[1] https://review.openstack.org/#/c/267591/"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I9801b76829021c9a0e6358982e1136637634a521"},{"line_number":26,"context_line":"Closes-Bug: 1514056"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3afc51ec_c0d882f2","line":26,"updated":"2016-03-11 22:10:14.000000000","message":"Does it really close the bug? I see you talk about the follow up for the patch in the commit message and in the bug. If that\u0027s not the final piece for it, it should say \u0027Related-Bug\u0027 instead to leave the bug opened.","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":10540,"name":"Clayton O\u0027Neill","email":"clayton.oneill@charter.com","username":"coneill"},"change_message_id":"e64c6921f9bc2fb3a4b0ba71d9e055d467e1d99d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"[1] https://review.openstack.org/#/c/267591/"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I9801b76829021c9a0e6358982e1136637634a521"},{"line_number":26,"context_line":"Closes-Bug: 1514056"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa0719c6_97056247","line":26,"in_reply_to":"3afc51ec_c0d882f2","updated":"2016-03-24 15:14:54.000000000","message":"This is a partial fix.  We also need a fix for the patch ports getting unplumbed.","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e5122be16667288ad978ec393dc9e27a686f282a","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fixes the most severe part of the bug 1514056. The other part is support"},{"line_number":15,"context_line":"for transactional behaviour, will be delivered separately, using a"},{"line_number":16,"context_line":"separate bug."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Co-Authored-By: Jian Wen \u003cwenjianhn@gmail.com\u003e"},{"line_number":19,"context_line":"Partial-Bug: 1514056"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ba0121b8_f57fab14","line":16,"updated":"2016-03-31 12:19:16.000000000","message":"If it will be delivered as a separate bug, then the patch should use Closes-Bug in line 19.","commit_id":"742bc0dff5b3cbb9b11c0669c9790d18bd40c33d"}],"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"5e324af008b85a4c24e5e99eae712c0798f39d6b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def remove_all_flows(self):"},{"line_number":265,"context_line":"        self.run_ofctl(\"del-flows\", [])"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def cleanup_flows(self):"},{"line_number":268,"context_line":"        LOG.warn(_LW(\"No means of cleaning flows defined for %s\"),"},{"line_number":269,"context_line":"                 self.br_name)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_4aec02f3","line":267,"updated":"2016-02-29 17:13:09.000000000","message":"this shouldn\u0027t be defined here. All the bridges (physical, integration and tunnel)  inherit from OpenFlowSwitchMixin where this method is defined, why did you need to change it?","commit_id":"809069ff7f75422be08b3a75f2bca3473c2416f4"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"813510807d2c20aa3f97feba63e334b1bad3660f","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def remove_all_flows(self):"},{"line_number":265,"context_line":"        self.run_ofctl(\"del-flows\", [])"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def cleanup_flows(self):"},{"line_number":268,"context_line":"        LOG.warn(_LW(\"No means of cleaning flows defined for %s\"),"},{"line_number":269,"context_line":"                 self.br_name)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_049f3a04","line":267,"in_reply_to":"9aed3d3a_4aec02f3","updated":"2016-03-04 13:58:24.000000000","message":"It was changed based on Cedric Brandily\u0027s comment (patch set 2) where it was needed due to wrong assumption that flows should be cleaned on ancillary bridges too. This comment will be adressed in the next patch set.","commit_id":"809069ff7f75422be08b3a75f2bca3473c2416f4"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a3e7ae3907c672ae50971b09b27efd3b794f8734","unresolved":false,"context_lines":[{"line_number":1749,"context_line":"                LOG.info(_LI(\"Cleaning stale %s flows\"), bridge.br_name)"},{"line_number":1750,"context_line":"                bridge.cleanup_flows()"},{"line_number":1751,"context_line":"            else:"},{"line_number":1752,"context_line":"                LOG.info(_LI(\"Cannot clean stale flows of %s\")"},{"line_number":1753,"context_line":"                         % bridge.br_name)"},{"line_number":1754,"context_line":""},{"line_number":1755,"context_line":"    def process_port_info(self, start, polling_manager, sync, ovs_restarted,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_1a03d410","line":1752,"updated":"2016-02-25 15:29:36.000000000","message":"please use a , and not a %\n\nLOG.info(_LI(\"Cannot clean stale flows of %s\"), bridge.br_name)","commit_id":"cca45e2aaaa94c793c0a5ab2dfdadbc6c74a5a13"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"919987fd0b850f72784ecab4028d2434fa1f6b64","unresolved":false,"context_lines":[{"line_number":1749,"context_line":"                LOG.info(_LI(\"Cleaning stale %s flows\"), bridge.br_name)"},{"line_number":1750,"context_line":"                bridge.cleanup_flows()"},{"line_number":1751,"context_line":"            else:"},{"line_number":1752,"context_line":"                LOG.info(_LI(\"Cannot clean stale flows of %s\")"},{"line_number":1753,"context_line":"                         % bridge.br_name)"},{"line_number":1754,"context_line":""},{"line_number":1755,"context_line":"    def process_port_info(self, start, polling_manager, sync, ovs_restarted,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_dbb84fca","line":1752,"in_reply_to":"bae84128_1a03d410","updated":"2016-02-25 15:50:10.000000000","message":"Done, thanks","commit_id":"cca45e2aaaa94c793c0a5ab2dfdadbc6c74a5a13"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a3e7ae3907c672ae50971b09b27efd3b794f8734","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"        failed_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":1887,"context_line":"        failed_ancillary_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":1888,"context_line":"        failed_devices_retries_map \u003d {}"},{"line_number":1889,"context_line":"        bridges \u003d self.all_bridges or []"},{"line_number":1890,"context_line":"        while self._check_and_handle_signal():"},{"line_number":1891,"context_line":"            if self.fullsync:"},{"line_number":1892,"context_line":"                LOG.info(_LI(\"rpc_loop doing a full sync.\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_187f5d67","line":1889,"updated":"2016-02-25 15:29:36.000000000","message":"why do we need the [] if there rae no bridges then self.all_bridges should be [] from line 184","commit_id":"cca45e2aaaa94c793c0a5ab2dfdadbc6c74a5a13"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"919987fd0b850f72784ecab4028d2434fa1f6b64","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"        failed_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":1887,"context_line":"        failed_ancillary_devices \u003d {\u0027added\u0027: set(), \u0027removed\u0027: set()}"},{"line_number":1888,"context_line":"        failed_devices_retries_map \u003d {}"},{"line_number":1889,"context_line":"        bridges \u003d self.all_bridges or []"},{"line_number":1890,"context_line":"        while self._check_and_handle_signal():"},{"line_number":1891,"context_line":"            if self.fullsync:"},{"line_number":1892,"context_line":"                LOG.info(_LI(\"rpc_loop doing a full sync.\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_9bd6c7ef","line":1889,"in_reply_to":"bae84128_187f5d67","updated":"2016-02-25 15:50:10.000000000","message":"Correct, fixed in new patch, thanks.","commit_id":"cca45e2aaaa94c793c0a5ab2dfdadbc6c74a5a13"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"2927033a339d6da3337170abae1f771a1e7ae39e","unresolved":false,"context_lines":[{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"    def cleanup_stale_flows(self, bridges):"},{"line_number":1747,"context_line":"        for bridge in bridges:"},{"line_number":1748,"context_line":"            if hasattr(bridge, \u0027cleanup_flows\u0027):"},{"line_number":1749,"context_line":"                LOG.info(_LI(\"Cleaning stale %s flows\"), bridge.br_name)"},{"line_number":1750,"context_line":"                bridge.cleanup_flows()"},{"line_number":1751,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_57a0c790","line":1748,"updated":"2016-02-25 20:35:05.000000000","message":"IMO, we should hasattr use when possible by defining a dummy cleanup_flows:\n\n def cleanup_flows():\n   LOG.info(_LI(\"Cannot ...\"))\n\nand always calling bridge.cleanup_flows","commit_id":"05d45b0027c9638b0145e25ad67002f6a450de32"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"86e1c1a9d79c6152516ca4ee37f3e7f6b192b2f3","unresolved":false,"context_lines":[{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"    def cleanup_stale_flows(self, bridges):"},{"line_number":1747,"context_line":"        for bridge in bridges:"},{"line_number":1748,"context_line":"            if hasattr(bridge, \u0027cleanup_flows\u0027):"},{"line_number":1749,"context_line":"                LOG.info(_LI(\"Cleaning stale %s flows\"), bridge.br_name)"},{"line_number":1750,"context_line":"                bridge.cleanup_flows()"},{"line_number":1751,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_eaa0e492","line":1748,"in_reply_to":"9aed3d3a_57a0c790","updated":"2016-02-26 13:40:19.000000000","message":"Thanks, done.","commit_id":"05d45b0027c9638b0145e25ad67002f6a450de32"},{"author":{"_account_id":1970,"name":"Jacob Wen","email":"wenjianhn@gmail.com","username":"wenjianhn"},"change_message_id":"226cb0e2b431f2c190995a6bd7d4dfde1f564b72","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        self.ancillary_brs \u003d self.setup_ancillary_bridges("},{"line_number":271,"context_line":"            ovs_conf.integration_bridge, ovs_conf.tunnel_bridge)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        self.all_bridges \u003d bridges + self.ancillary_brs"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        # In order to keep existed device\u0027s local vlan unchanged,"},{"line_number":276,"context_line":"        # restore local vlan mapping at start"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_3d3802ef","line":273,"range":{"start_line":273,"start_character":42,"end_line":273,"end_character":55},"updated":"2016-02-29 10:31:45.000000000","message":"The ovs-agent should not modify flows of the ancillary bridges(e.g br-ex). Flows of br-ex are managed by the L3 agent.\nAFAIK, ovs-agent is only supposed to update the DB status of the ancillary port.","commit_id":"10150a02b7085c1686f22b394427f45bd27af8a9"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"e249eb6093bd292068813d1c3e540e3ce6a9818a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        self.ancillary_brs \u003d self.setup_ancillary_bridges("},{"line_number":271,"context_line":"            ovs_conf.integration_bridge, ovs_conf.tunnel_bridge)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        self.all_bridges \u003d bridges + self.ancillary_brs"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        # In order to keep existed device\u0027s local vlan unchanged,"},{"line_number":276,"context_line":"        # restore local vlan mapping at start"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_4aba540b","line":273,"range":{"start_line":273,"start_character":42,"end_line":273,"end_character":55},"in_reply_to":"9aed3d3a_3d3802ef","updated":"2016-02-29 13:03:16.000000000","message":"Done, thanks for spotting this. I\u0027ve updated unit tests to cover this case, included in the next patchset.","commit_id":"10150a02b7085c1686f22b394427f45bd27af8a9"},{"author":{"_account_id":1970,"name":"Jacob Wen","email":"wenjianhn@gmail.com","username":"wenjianhn"},"change_message_id":"226cb0e2b431f2c190995a6bd7d4dfde1f564b72","unresolved":false,"context_lines":[{"line_number":1978,"context_line":"                        failed_devices \u003d self.process_network_ports("},{"line_number":1979,"context_line":"                            port_info, ovs_restarted)"},{"line_number":1980,"context_line":"                        if need_clean_stale_flow:"},{"line_number":1981,"context_line":"                            self.cleanup_stale_flows(bridges)"},{"line_number":1982,"context_line":"                            need_clean_stale_flow \u003d False"},{"line_number":1983,"context_line":"                        LOG.debug(\"Agent rpc_loop - iteration:%(iter_num)d - \""},{"line_number":1984,"context_line":"                                  \"ports processed. Elapsed:%(elapsed).3f\","}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_fd2a1a8f","line":1981,"range":{"start_line":1981,"start_character":60,"end_line":1981,"end_character":61},"updated":"2016-02-29 10:31:45.000000000","message":"The flows of the br-ex are going to cleaned here.","commit_id":"10150a02b7085c1686f22b394427f45bd27af8a9"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"e249eb6093bd292068813d1c3e540e3ce6a9818a","unresolved":false,"context_lines":[{"line_number":1978,"context_line":"                        failed_devices \u003d self.process_network_ports("},{"line_number":1979,"context_line":"                            port_info, ovs_restarted)"},{"line_number":1980,"context_line":"                        if need_clean_stale_flow:"},{"line_number":1981,"context_line":"                            self.cleanup_stale_flows(bridges)"},{"line_number":1982,"context_line":"                            need_clean_stale_flow \u003d False"},{"line_number":1983,"context_line":"                        LOG.debug(\"Agent rpc_loop - iteration:%(iter_num)d - \""},{"line_number":1984,"context_line":"                                  \"ports processed. Elapsed:%(elapsed).3f\","}],"source_content_type":"text/x-python","patch_set":5,"id":"9aed3d3a_0a720c7b","line":1981,"range":{"start_line":1981,"start_character":60,"end_line":1981,"end_character":61},"in_reply_to":"9aed3d3a_fd2a1a8f","updated":"2016-02-29 13:03:16.000000000","message":"Done","commit_id":"10150a02b7085c1686f22b394427f45bd27af8a9"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"5e324af008b85a4c24e5e99eae712c0798f39d6b","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self.agent_uuid_stamp \u003d uuid.uuid4().int \u0026 UINT64_BITMASK"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        self.int_br \u003d self.br_int_cls(ovs_conf.integration_bridge)"},{"line_number":184,"context_line":"        bridges \u003d [self.setup_integration_br()]"},{"line_number":185,"context_line":"        # Stores port update notifications for processing in main rpc loop"},{"line_number":186,"context_line":"        self.updated_ports \u003d set()"},{"line_number":187,"context_line":"        # Stores port delete notifications"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_1794e340","line":184,"updated":"2016-02-29 17:13:09.000000000","message":"this variable is not needed, see my next comment","commit_id":"809069ff7f75422be08b3a75f2bca3473c2416f4"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"813510807d2c20aa3f97feba63e334b1bad3660f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        self.agent_uuid_stamp \u003d uuid.uuid4().int \u0026 UINT64_BITMASK"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        self.int_br \u003d self.br_int_cls(ovs_conf.integration_bridge)"},{"line_number":184,"context_line":"        bridges \u003d [self.setup_integration_br()]"},{"line_number":185,"context_line":"        # Stores port update notifications for processing in main rpc loop"},{"line_number":186,"context_line":"        self.updated_ports \u003d set()"},{"line_number":187,"context_line":"        # Stores port delete notifications"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_fbf00469","line":184,"in_reply_to":"9aed3d3a_1794e340","updated":"2016-03-04 13:58:24.000000000","message":"Ok, fixed in the next patch","commit_id":"809069ff7f75422be08b3a75f2bca3473c2416f4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"5e324af008b85a4c24e5e99eae712c0798f39d6b","unresolved":false,"context_lines":[{"line_number":1743,"context_line":"                \u0027removed\u0027: len(ancillary_port_info.get(\u0027removed\u0027, []))}"},{"line_number":1744,"context_line":"        return port_stats"},{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"    def cleanup_stale_flows(self, bridges):"},{"line_number":1747,"context_line":"        for bridge in bridges:"},{"line_number":1748,"context_line":"            LOG.info(_LI(\"Cleaning stale %s flows\"), bridge.br_name)"},{"line_number":1749,"context_line":"            bridge.cleanup_flows()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_97c0f351","line":1746,"updated":"2016-02-29 17:13:09.000000000","message":"no need to modify this method, no need to pass \u0027bridges\u0027...you can get all bridges since they are stored in self.phys_brs, self.int_br, self.tun_br","commit_id":"809069ff7f75422be08b3a75f2bca3473c2416f4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"fb0e5a5935729b6a652d90c5d280505b2a682d61","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"                           \u0027bridge\u0027: bridge})"},{"line_number":1087,"context_line":"                sys.exit(1)"},{"line_number":1088,"context_line":"            br \u003d self.br_phys_cls(bridge)"},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":"            # The bridge already exists, so create won\u0027t recreate it, but will"},{"line_number":1091,"context_line":"            # handle things like changing the datapath_type"},{"line_number":1092,"context_line":"            br.create()"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_929f0a5f","line":1089,"updated":"2016-03-07 10:41:13.000000000","message":"unrelated change","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"1d3d699e4df712cdb0063abcb090beeeb4ae1e5e","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"                           \u0027bridge\u0027: bridge})"},{"line_number":1087,"context_line":"                sys.exit(1)"},{"line_number":1088,"context_line":"            br \u003d self.br_phys_cls(bridge)"},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":"            # The bridge already exists, so create won\u0027t recreate it, but will"},{"line_number":1091,"context_line":"            # handle things like changing the datapath_type"},{"line_number":1092,"context_line":"            br.create()"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_5faf46e3","line":1089,"in_reply_to":"5aef4532_929f0a5f","updated":"2016-03-24 16:16:02.000000000","message":"Done","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"}],"neutron/tests/functional/agent/l2/base.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"d6719d48716dfc8b6110e7c0e0b22b9056b32c99","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                                         prefix\u003d\u0027br-tun\u0027)"},{"line_number":61,"context_line":"        self.br_phys \u003d base.get_rand_name(n_const.DEVICE_NAME_MAX_LEN,"},{"line_number":62,"context_line":"                                          prefix\u003d\u0027br-phys\u0027)"},{"line_number":63,"context_line":"        self.bridge_mappings \u003d [\u0027physnet:%s\u0027 % self.br_phys]"},{"line_number":64,"context_line":"        patch_name_len \u003d n_const.DEVICE_NAME_MAX_LEN - len(\"-patch-tun\")"},{"line_number":65,"context_line":"        self.patch_tun \u003d \"%s-patch-tun\" % self.br_int[patch_name_len:]"},{"line_number":66,"context_line":"        self.patch_int \u003d \"%s-patch-int\" % self.br_tun[patch_name_len:]"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_1ea00d9f","line":63,"updated":"2016-03-25 11:58:57.000000000","message":"do we really need to add this variable to self? It\u0027s used only at line 112...","commit_id":"da4049b4c4bfb8a072fe83459c6f731377d24345"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"9426e2c05e9977e96f97b4f951c64e75d42ef351","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                                         prefix\u003d\u0027br-tun\u0027)"},{"line_number":61,"context_line":"        self.br_phys \u003d base.get_rand_name(n_const.DEVICE_NAME_MAX_LEN,"},{"line_number":62,"context_line":"                                          prefix\u003d\u0027br-phys\u0027)"},{"line_number":63,"context_line":"        self.bridge_mappings \u003d [\u0027physnet:%s\u0027 % self.br_phys]"},{"line_number":64,"context_line":"        patch_name_len \u003d n_const.DEVICE_NAME_MAX_LEN - len(\"-patch-tun\")"},{"line_number":65,"context_line":"        self.patch_tun \u003d \"%s-patch-tun\" % self.br_int[patch_name_len:]"},{"line_number":66,"context_line":"        self.patch_int \u003d \"%s-patch-int\" % self.br_tun[patch_name_len:]"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_db818a91","line":63,"in_reply_to":"da0c15f0_1ea00d9f","updated":"2016-03-29 08:07:29.000000000","message":"Done. It\u0027s not needed anymore, will be fixed in the new patch set.","commit_id":"da4049b4c4bfb8a072fe83459c6f731377d24345"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"d6719d48716dfc8b6110e7c0e0b22b9056b32c99","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                              trigger_resync\u003dFalse,"},{"line_number":372,"context_line":"                              failed_dev_up\u003dFalse,"},{"line_number":373,"context_line":"                              failed_dev_down\u003dFalse,"},{"line_number":374,"context_line":"                              plugged_ports\u003dNone,"},{"line_number":375,"context_line":"                              network\u003dNone,"},{"line_number":376,"context_line":"                              **kwargs):"},{"line_number":377,"context_line":"        self.ports \u003d port_dicts"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_fee2799e","line":374,"updated":"2016-03-25 11:58:57.000000000","message":"why do we need this plugged_ports if we have already port_dicts? Use port_dicts please","commit_id":"da4049b4c4bfb8a072fe83459c6f731377d24345"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"9426e2c05e9977e96f97b4f951c64e75d42ef351","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                              trigger_resync\u003dFalse,"},{"line_number":372,"context_line":"                              failed_dev_up\u003dFalse,"},{"line_number":373,"context_line":"                              failed_dev_down\u003dFalse,"},{"line_number":374,"context_line":"                              plugged_ports\u003dNone,"},{"line_number":375,"context_line":"                              network\u003dNone,"},{"line_number":376,"context_line":"                              **kwargs):"},{"line_number":377,"context_line":"        self.ports \u003d port_dicts"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_dbfcea40","line":374,"in_reply_to":"da0c15f0_fee2799e","updated":"2016-03-29 08:07:29.000000000","message":"Done. Thanks for spotting this, it is an unintentional omission from an intermediate version of the code.","commit_id":"da4049b4c4bfb8a072fe83459c6f731377d24345"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"d6719d48716dfc8b6110e7c0e0b22b9056b32c99","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        self._plug_ports(self.network, plugged_ports, self.agent,"},{"line_number":393,"context_line":"                         bridge\u003dancillary_bridge, **kwargs)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def plug_ports_to_phys_br(self, network, plugged_ports, **kwargs):"},{"line_number":396,"context_line":"        physical_network \u003d network.get(\u0027physical_network\u0027, \u0027physnet\u0027)"},{"line_number":397,"context_line":"        phys_segmentation_id \u003d network.get(\u0027segmentation_id\u0027, None)"},{"line_number":398,"context_line":"        network_type \u003d network.get(\u0027network_type\u0027, \u0027flat\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_7e72e9e6","line":395,"range":{"start_line":395,"start_character":45,"end_line":395,"end_character":58},"updated":"2016-03-25 11:58:57.000000000","message":"\"plugged_ports\" is not correct since these ports are going to be plugged but are not plugged yet. Consider a more general \"ports\" since we know from the method name that we are going to plug them","commit_id":"da4049b4c4bfb8a072fe83459c6f731377d24345"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"9426e2c05e9977e96f97b4f951c64e75d42ef351","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        self._plug_ports(self.network, plugged_ports, self.agent,"},{"line_number":393,"context_line":"                         bridge\u003dancillary_bridge, **kwargs)"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def plug_ports_to_phys_br(self, network, plugged_ports, **kwargs):"},{"line_number":396,"context_line":"        physical_network \u003d network.get(\u0027physical_network\u0027, \u0027physnet\u0027)"},{"line_number":397,"context_line":"        phys_segmentation_id \u003d network.get(\u0027segmentation_id\u0027, None)"},{"line_number":398,"context_line":"        network_type \u003d network.get(\u0027network_type\u0027, \u0027flat\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_3b3a4637","line":395,"range":{"start_line":395,"start_character":45,"end_line":395,"end_character":58},"in_reply_to":"da0c15f0_7e72e9e6","updated":"2016-03-29 08:07:29.000000000","message":"Done","commit_id":"da4049b4c4bfb8a072fe83459c6f731377d24345"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"2d2bf303bef631127e50745a8c95e1e0b07367a7","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                              failed_dev_up\u003dFalse,"},{"line_number":372,"context_line":"                              failed_dev_down\u003dFalse,"},{"line_number":373,"context_line":"                              network\u003dNone,"},{"line_number":374,"context_line":"                              **kwargs):"},{"line_number":375,"context_line":"        self.ports \u003d port_dicts"},{"line_number":376,"context_line":"        self.agent \u003d self.create_agent(create_tunnels\u003dcreate_tunnels,"},{"line_number":377,"context_line":"                                       ancillary_bridge\u003dancillary_bridge)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_6b4dc96b","line":374,"updated":"2016-03-30 10:04:09.000000000","message":"I think you don\u0027t need kwargs anymore","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"6abc81030d6b78afafa1220de52bd0b3ba08aaba","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                              failed_dev_up\u003dFalse,"},{"line_number":372,"context_line":"                              failed_dev_down\u003dFalse,"},{"line_number":373,"context_line":"                              network\u003dNone,"},{"line_number":374,"context_line":"                              **kwargs):"},{"line_number":375,"context_line":"        self.ports \u003d port_dicts"},{"line_number":376,"context_line":"        self.agent \u003d self.create_agent(create_tunnels\u003dcreate_tunnels,"},{"line_number":377,"context_line":"                                       ancillary_bridge\u003dancillary_bridge)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_b14e2e6d","line":374,"in_reply_to":"ba0121b8_6b4dc96b","updated":"2016-03-30 10:57:15.000000000","message":"they are needed because of the ip_len argument","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"2d2bf303bef631127e50745a8c95e1e0b07367a7","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        self._plug_ports(self.network, self.ports, self.agent,"},{"line_number":388,"context_line":"                         bridge\u003dancillary_bridge, **kwargs)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def plug_ports_to_phys_br(self, network, ports, **kwargs):"},{"line_number":391,"context_line":"        physical_network \u003d network.get(\u0027physical_network\u0027, \u0027physnet\u0027)"},{"line_number":392,"context_line":"        phys_segmentation_id \u003d network.get(\u0027segmentation_id\u0027, None)"},{"line_number":393,"context_line":"        network_type \u003d network.get(\u0027network_type\u0027, \u0027flat\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_4b5f250e","line":390,"updated":"2016-03-30 10:04:09.000000000","message":"I think here you can add namespace as arg and remove the generic kwargs","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"6abc81030d6b78afafa1220de52bd0b3ba08aaba","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        self._plug_ports(self.network, self.ports, self.agent,"},{"line_number":388,"context_line":"                         bridge\u003dancillary_bridge, **kwargs)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def plug_ports_to_phys_br(self, network, ports, **kwargs):"},{"line_number":391,"context_line":"        physical_network \u003d network.get(\u0027physical_network\u0027, \u0027physnet\u0027)"},{"line_number":392,"context_line":"        phys_segmentation_id \u003d network.get(\u0027segmentation_id\u0027, None)"},{"line_number":393,"context_line":"        network_type \u003d network.get(\u0027network_type\u0027, \u0027flat\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_f16f06c3","line":390,"in_reply_to":"ba0121b8_4b5f250e","updated":"2016-03-30 10:57:15.000000000","message":"same as above","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"368f13e52e22a4ba5d4711917bcc2154ff4c0200","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                port.get(\u0027mac_address\u0027),"},{"line_number":196,"context_line":"                bridge.br_name, namespace\u003dnamespace)"},{"line_number":197,"context_line":"            ip_cidrs \u003d [\"%s/8\" % (port.get(\u0027fixed_ips\u0027)[0]["},{"line_number":198,"context_line":"                \u0027ip_address\u0027])]"},{"line_number":199,"context_line":"            self.driver.init_l3(port.get(\u0027vif_name\u0027), ip_cidrs,"},{"line_number":200,"context_line":"                                namespace\u003dnamespace)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_a427cbb4","line":198,"updated":"2016-03-31 10:45:58.000000000","message":"can you mention ip_len change in the commit message at least?\ni prefer a separate change.","commit_id":"742bc0dff5b3cbb9b11c0669c9790d18bd40c33d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e5122be16667288ad978ec393dc9e27a686f282a","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                port.get(\u0027mac_address\u0027),"},{"line_number":196,"context_line":"                bridge.br_name, namespace\u003dnamespace)"},{"line_number":197,"context_line":"            ip_cidrs \u003d [\"%s/8\" % (port.get(\u0027fixed_ips\u0027)[0]["},{"line_number":198,"context_line":"                \u0027ip_address\u0027])]"},{"line_number":199,"context_line":"            self.driver.init_l3(port.get(\u0027vif_name\u0027), ip_cidrs,"},{"line_number":200,"context_line":"                                namespace\u003dnamespace)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_95310f5d","line":198,"in_reply_to":"ba0121b8_a427cbb4","updated":"2016-03-31 12:19:16.000000000","message":"Agreed. It seems like the change is not related to the fix, and instead makes the method in sync with _create_test_port_dict behaviour. Not even sure what\u0027s wrong with /24.","commit_id":"742bc0dff5b3cbb9b11c0669c9790d18bd40c33d"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"898f9267f9f72948e539c9226f865cc757ebaf74","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                port.get(\u0027mac_address\u0027),"},{"line_number":196,"context_line":"                bridge.br_name, namespace\u003dnamespace)"},{"line_number":197,"context_line":"            ip_cidrs \u003d [\"%s/8\" % (port.get(\u0027fixed_ips\u0027)[0]["},{"line_number":198,"context_line":"                \u0027ip_address\u0027])]"},{"line_number":199,"context_line":"            self.driver.init_l3(port.get(\u0027vif_name\u0027), ip_cidrs,"},{"line_number":200,"context_line":"                                namespace\u003dnamespace)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_d07ef568","line":198,"in_reply_to":"ba0121b8_a427cbb4","updated":"2016-03-31 12:06:23.000000000","message":"I\u0027ve updated the commit message. The change was made upon Rosella\u0027s review comment.","commit_id":"742bc0dff5b3cbb9b11c0669c9790d18bd40c33d"}],"neutron/tests/functional/agent/test_l2_ovs_agent.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"bab609077b65122bcbcb9eef1510d6f972088d2a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        ips \u003d [port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027] for port in self.ports]"},{"line_number":178,"context_line":"        with net_helpers.async_ping(self.namespace, ips) as done:"},{"line_number":179,"context_line":"            while not done():"},{"line_number":180,"context_line":"                self.agent.setup_integration_br()"},{"line_number":181,"context_line":"                time.sleep(0.25)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_assert_pings_during_br_phys_setup_not_lost_in_vlan_to_flat(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_fabbb773","line":180,"updated":"2016-03-07 14:13:10.000000000","message":"so on a second look, the network created is of type vlan. So if you add here a call to self.agent.setup_physical_bridges , without your patch it should fail...","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"fb0e5a5935729b6a652d90c5d280505b2a682d61","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                self.agent.setup_integration_br()"},{"line_number":181,"context_line":"                time.sleep(0.25)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_assert_pings_during_br_phys_setup_not_lost_in_vlan_to_flat(self):"},{"line_number":184,"context_line":"        self.network \u003d self._create_test_network_dict()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        ns1 \u003d self.useFixture(net_helpers.NamespaceFixture()).name"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_0940ec55","line":183,"updated":"2016-03-07 10:41:13.000000000","message":"all these lines look like an overkill to me and also the changes in the previous file are not needed. The functional test for this bug fix should be very similar to test_assert_pings_during_br_int_setup_not_lost but we need to define a network with provider:network_type VLAN, create a port in that network and verify that pings work after self.setup_physical_bridges is called. If it\u0027s not clear ping me on IRC. Really all this code is not needed.","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"1d3d699e4df712cdb0063abcb090beeeb4ae1e5e","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                self.agent.setup_integration_br()"},{"line_number":181,"context_line":"                time.sleep(0.25)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_assert_pings_during_br_phys_setup_not_lost_in_vlan_to_flat(self):"},{"line_number":184,"context_line":"        self.network \u003d self._create_test_network_dict()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        ns1 \u003d self.useFixture(net_helpers.NamespaceFixture()).name"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_e34dfcc4","line":183,"in_reply_to":"3afc51ec_c6937aa2","updated":"2016-03-24 16:16:02.000000000","message":"I agree that the functional tests should be as isolated from internals as possible - they actually should be black-box tests. They are not however in the current code base and here I followed the code from the OVSAgentTestFramework (tests/functional/agent/l2/base.py). The current OVSAgentTestFramework tests call a lot of internal OVSNeutronAgent functions. The next version of the patch will update base.py.\n\nRe flat vs vlan testing - these cases are not redundant as the actual flow rules are different - for vlan, mod_vlan action is used in flows, while for flat, strip_vlan action gets used. As there are two code branches, there are separate tests for each branch.\n\nI\u0027ll follow the test_assert_pings_during_br_int_setup_not_lost() in the new patch and use only setup_physical_bridges instead of agent restart.","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bdcc36eeca9c489a34997bf09f4d30ac8be5b6e0","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                self.agent.setup_integration_br()"},{"line_number":181,"context_line":"                time.sleep(0.25)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def test_assert_pings_during_br_phys_setup_not_lost_in_vlan_to_flat(self):"},{"line_number":184,"context_line":"        self.network \u003d self._create_test_network_dict()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        ns1 \u003d self.useFixture(net_helpers.NamespaceFixture()).name"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afc51ec_c6937aa2","line":183,"in_reply_to":"5aef4532_0940ec55","updated":"2016-03-11 22:10:14.000000000","message":"I tend to agree with Rossella here. We could just update line 181 with another method call and validate the fix. We tend to keep our functional tests well isolated, so if we can avoid complete agent restart to show the fix works, that would be better. The simpler the code flow for the test, the more stable it is [and vice versa, often times we hit stability issues in gate for tests that involve green thread startups for processes].\n\nSome cases here are just redundant (f.e. why would we want to test flat case here if we know that no flows are managed for this scenario?)\n\nNow, there may be some value in a test that restarts the whole agent and validates that ping still works, even for flat networking scenario. That said, it would probably go in a separate patch, would belong to fullstack suite where we have the means to manage real agents, and would probably rely on testscenarios library to generate test cases for flat vs vlan test matrix.","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"5b7dc5c9877939c22d4eea352799c954aec3a950","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                time.sleep(0.25)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_assert_pings_during_br_phys_setup_not_lost_in_vlan_to_flat(self):"},{"line_number":231,"context_line":"        network_ext \u003d self._create_test_network_dict()"},{"line_number":232,"context_line":"        network_ext[\u0027network_type\u0027] \u003d \u0027flat\u0027"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        self._test_assert_pings_during_br_phys_setup_not_lost(network_ext)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_e6caab6d","line":231,"updated":"2016-03-30 11:16:06.000000000","message":"network_ext is confusing, it\u0027s not an external network...I\u0027d use simply \"network\" or \"provider_net\"","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"2d2bf303bef631127e50745a8c95e1e0b07367a7","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        ip_phys \u003d port_phys[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.setup_agent_and_ports(port_dicts\u003d[port_int], create_tunnels\u003dFalse,"},{"line_number":256,"context_line":"                                   ip_len\u003d8, network\u003dnetwork_ext)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        self.plug_ports_to_phys_br(network_ext, [port_phys], ip_len\u003d8,"},{"line_number":259,"context_line":"                                   namespace\u003dns_phys)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_f03c24e4","line":256,"updated":"2016-03-30 10:04:09.000000000","message":"why do you need to modify the ip_len? you can use the default one, one argument less to pass :)","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"5b7dc5c9877939c22d4eea352799c954aec3a950","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        ip_phys \u003d port_phys[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.setup_agent_and_ports(port_dicts\u003d[port_int], create_tunnels\u003dFalse,"},{"line_number":256,"context_line":"                                   ip_len\u003d8, network\u003dnetwork_ext)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        self.plug_ports_to_phys_br(network_ext, [port_phys], ip_len\u003d8,"},{"line_number":259,"context_line":"                                   namespace\u003dns_phys)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_869c8fc1","line":256,"in_reply_to":"ba0121b8_76e76cb0","updated":"2016-03-30 11:16:06.000000000","message":"we should fix this :) ...probably you can remove the ip_len parameter from the base class since we are hard-coding it anyway. This doesn\u0027t really belong to this patch but I am with fixing it here, it\u0027s up to you","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"1dfb104dca8fa934283aaf335989be2e4f845346","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        ip_phys \u003d port_phys[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.setup_agent_and_ports(port_dicts\u003d[port_int], create_tunnels\u003dFalse,"},{"line_number":256,"context_line":"                                   ip_len\u003d8, network\u003dnetwork_ext)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        self.plug_ports_to_phys_br(network_ext, [port_phys], ip_len\u003d8,"},{"line_number":259,"context_line":"                                   namespace\u003dns_phys)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_77d48346","line":256,"in_reply_to":"ba0121b8_869c8fc1","updated":"2016-03-30 11:55:49.000000000","message":"I\u0027ll fix it in the next patchset","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"6abc81030d6b78afafa1220de52bd0b3ba08aaba","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        ip_phys \u003d port_phys[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        self.setup_agent_and_ports(port_dicts\u003d[port_int], create_tunnels\u003dFalse,"},{"line_number":256,"context_line":"                                   ip_len\u003d8, network\u003dnetwork_ext)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        self.plug_ports_to_phys_br(network_ext, [port_phys], ip_len\u003d8,"},{"line_number":259,"context_line":"                                   namespace\u003dns_phys)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_76e76cb0","line":256,"in_reply_to":"ba0121b8_f03c24e4","updated":"2016-03-30 10:57:15.000000000","message":"Because when I don\u0027t, the net devices cannot route pings. The IP addresses are assigned from 10.0.0.0/8 [1] range but assigned to /24 netmask by default [2].\n\n[1] line 176 of base.py\n[2] line 187 of base.pye","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"2d2bf303bef631127e50745a8c95e1e0b07367a7","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self.setup_agent_and_ports(port_dicts\u003d[port_int], create_tunnels\u003dFalse,"},{"line_number":256,"context_line":"                                   ip_len\u003d8, network\u003dnetwork_ext)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        self.plug_ports_to_phys_br(network_ext, [port_phys], ip_len\u003d8,"},{"line_number":259,"context_line":"                                   namespace\u003dns_phys)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        # There is no RPC call that would connect a port to a physical bridge,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_901cc878","line":258,"updated":"2016-03-30 10:04:09.000000000","message":"ditto for ip_len","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"6abc81030d6b78afafa1220de52bd0b3ba08aaba","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self.setup_agent_and_ports(port_dicts\u003d[port_int], create_tunnels\u003dFalse,"},{"line_number":256,"context_line":"                                   ip_len\u003d8, network\u003dnetwork_ext)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        self.plug_ports_to_phys_br(network_ext, [port_phys], ip_len\u003d8,"},{"line_number":259,"context_line":"                                   namespace\u003dns_phys)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        # There is no RPC call that would connect a port to a physical bridge,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_d6ec7891","line":258,"in_reply_to":"ba0121b8_901cc878","updated":"2016-03-30 10:57:15.000000000","message":"same as above","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"2d2bf303bef631127e50745a8c95e1e0b07367a7","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        self.plug_ports_to_phys_br(network_ext, [port_phys], ip_len\u003d8,"},{"line_number":259,"context_line":"                                   namespace\u003dns_phys)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        # There is no RPC call that would connect a port to a physical bridge,"},{"line_number":262,"context_line":"        # hence no notifications of the port being up. Hence only waiting"},{"line_number":263,"context_line":"        # for ports connected to br_int, i.e. port_int."},{"line_number":264,"context_line":"        self.wait_until_ports_state([port_int], up\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_026a321a","line":261,"updated":"2016-03-30 10:04:09.000000000","message":"I\u0027d reword:\n\n\"The OVS agent doesn\u0027t monitor the physical bridges, no notification is sent when a port is up on a physical bridge, hence waiting only for the ports connected to br-int","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"6abc81030d6b78afafa1220de52bd0b3ba08aaba","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        self.plug_ports_to_phys_br(network_ext, [port_phys], ip_len\u003d8,"},{"line_number":259,"context_line":"                                   namespace\u003dns_phys)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        # There is no RPC call that would connect a port to a physical bridge,"},{"line_number":262,"context_line":"        # hence no notifications of the port being up. Hence only waiting"},{"line_number":263,"context_line":"        # for ports connected to br_int, i.e. port_int."},{"line_number":264,"context_line":"        self.wait_until_ports_state([port_int], up\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_5117d2ec","line":261,"in_reply_to":"ba0121b8_026a321a","updated":"2016-03-30 10:57:15.000000000","message":"Done","commit_id":"4d9694303570dcf36e198e6709798744cfad61a4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e5122be16667288ad978ec393dc9e27a686f282a","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                time.sleep(0.25)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def test_noresync_after_port_gone(self):"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        \u0027\u0027\u0027This will test the scenario where a port is removed after listing"},{"line_number":290,"context_line":"        it but before getting vif info about it."},{"line_number":291,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_35600301","line":288,"updated":"2016-03-31 12:19:16.000000000","message":"nit: unneeded line addition.","commit_id":"742bc0dff5b3cbb9b11c0669c9790d18bd40c33d"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"fb0e5a5935729b6a652d90c5d280505b2a682d61","unresolved":false,"context_lines":[{"line_number":2901,"context_line":"            self.agent.setup_physical_bridges \u003d mock.Mock()"},{"line_number":2902,"context_line":"            self.agent.setup_integration_br \u003d mock.Mock()"},{"line_number":2903,"context_line":"            self.agent.setup_tunnel_br \u003d mock.Mock()"},{"line_number":2904,"context_line":""},{"line_number":2905,"context_line":"            self.agent.state_rpc \u003d mock.Mock()"},{"line_number":2906,"context_line":"            try:"},{"line_number":2907,"context_line":"                self.agent.rpc_loop(polling_manager\u003dmock.Mock())"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_d2a072a8","line":2904,"updated":"2016-03-07 10:41:13.000000000","message":"unrelated change","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"1d3d699e4df712cdb0063abcb090beeeb4ae1e5e","unresolved":false,"context_lines":[{"line_number":2901,"context_line":"            self.agent.setup_physical_bridges \u003d mock.Mock()"},{"line_number":2902,"context_line":"            self.agent.setup_integration_br \u003d mock.Mock()"},{"line_number":2903,"context_line":"            self.agent.setup_tunnel_br \u003d mock.Mock()"},{"line_number":2904,"context_line":""},{"line_number":2905,"context_line":"            self.agent.state_rpc \u003d mock.Mock()"},{"line_number":2906,"context_line":"            try:"},{"line_number":2907,"context_line":"                self.agent.rpc_loop(polling_manager\u003dmock.Mock())"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_ffa9f2e0","line":2904,"in_reply_to":"5aef4532_d2a072a8","updated":"2016-03-24 16:16:02.000000000","message":"Done","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c09c4303d35b81488d117c8d8ed49e4c48c64766","unresolved":false,"context_lines":[{"line_number":2921,"context_line":"            # block RPC calls and bridge calls"},{"line_number":2922,"context_line":"            self.agent.setup_physical_bridges \u003d mock.Mock()"},{"line_number":2923,"context_line":"            self.agent.setup_integration_br \u003d mock.Mock()"},{"line_number":2924,"context_line":"            self.agent.setup_tunnel_br \u003d mock.Mock()"},{"line_number":2925,"context_line":"            self.agent.state_rpc \u003d mock.Mock()"},{"line_number":2926,"context_line":"            self.agent.rpc_loop(polling_manager\u003dmock.Mock())"},{"line_number":2927,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_04872562","line":2924,"updated":"2016-03-25 08:09:02.000000000","message":"is this related to the rest?","commit_id":"da4049b4c4bfb8a072fe83459c6f731377d24345"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"9426e2c05e9977e96f97b4f951c64e75d42ef351","unresolved":false,"context_lines":[{"line_number":2921,"context_line":"            # block RPC calls and bridge calls"},{"line_number":2922,"context_line":"            self.agent.setup_physical_bridges \u003d mock.Mock()"},{"line_number":2923,"context_line":"            self.agent.setup_integration_br \u003d mock.Mock()"},{"line_number":2924,"context_line":"            self.agent.setup_tunnel_br \u003d mock.Mock()"},{"line_number":2925,"context_line":"            self.agent.state_rpc \u003d mock.Mock()"},{"line_number":2926,"context_line":"            self.agent.rpc_loop(polling_manager\u003dmock.Mock())"},{"line_number":2927,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_9b0c3244","line":2924,"in_reply_to":"da0c15f0_04872562","updated":"2016-03-29 08:07:29.000000000","message":"Used to be related in one of the previous patch sets that updated test_ovs_neutron_agent. It is a bug anyway as the reset_tunnel_br() agent method was renamed to setup_tunnel_br in commit 73673beacd75a2d9f51f15b284f1b458d32e992e.\n\nWill remove it from this patch and submit a separate patch for it.","commit_id":"da4049b4c4bfb8a072fe83459c6f731377d24345"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_tunnel.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"bdcc36eeca9c489a34997bf09f4d30ac8be5b6e0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.INT_BRIDGE \u003d \u0027integration_bridge\u0027"},{"line_number":83,"context_line":"        self.TUN_BRIDGE \u003d \u0027tunnel_bridge\u0027"},{"line_number":84,"context_line":"        self.MAP_TUN_BRIDGE \u003d \u0027tun_br_map\u0027"},{"line_number":85,"context_line":"        self.AUX_BRIDGE \u003d \u0027ancillary_bridge\u0027"},{"line_number":86,"context_line":"        self.NET_MAPPING \u003d [\u0027net1:%s\u0027 % self.MAP_TUN_BRIDGE]"},{"line_number":87,"context_line":"        self.INT_OFPORT \u003d 11111"},{"line_number":88,"context_line":"        self.TUN_OFPORT \u003d 22222"}],"source_content_type":"text/x-python","patch_set":8,"id":"3afc51ec_662c264b","line":85,"updated":"2016-03-11 22:10:14.000000000","message":"Those changes in the file add checks for ancillary bridges. But we don\u0027t clean flows for them at any time, right? So what\u0027s the reason to do those changes here?","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"},{"author":{"_account_id":19797,"name":"Hynek Mlnarik","email":"hmlnarik@redhat.com","username":"hmlnarik"},"change_message_id":"1d3d699e4df712cdb0063abcb090beeeb4ae1e5e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.INT_BRIDGE \u003d \u0027integration_bridge\u0027"},{"line_number":83,"context_line":"        self.TUN_BRIDGE \u003d \u0027tunnel_bridge\u0027"},{"line_number":84,"context_line":"        self.MAP_TUN_BRIDGE \u003d \u0027tun_br_map\u0027"},{"line_number":85,"context_line":"        self.AUX_BRIDGE \u003d \u0027ancillary_bridge\u0027"},{"line_number":86,"context_line":"        self.NET_MAPPING \u003d [\u0027net1:%s\u0027 % self.MAP_TUN_BRIDGE]"},{"line_number":87,"context_line":"        self.INT_OFPORT \u003d 11111"},{"line_number":88,"context_line":"        self.TUN_OFPORT \u003d 22222"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_753d23c3","line":85,"in_reply_to":"3afc51ec_662c264b","updated":"2016-03-24 16:16:02.000000000","message":"Reason is to fix missing regression test that relates to this change: the test should cover all types of bridges. In the current state, it is only tested that non-ancillary bridges are manipulated in expected manner. The ancillary bridge flows are left without tests. This change completes the test of flows for all types of bridges.","commit_id":"583c227d7c54ab68f6f0b03fc080fc2347c7e28d"}]}
