)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add fullstack resources and tests for linuxbridge agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds resources, fixtures and base test_connectivity tests for host"},{"line_number":10,"context_line":"with linuxbridge agent."},{"line_number":11,"context_line":"Model of host with linuxbridge agent is made in separate namespace named"},{"line_number":12,"context_line":"\"host-XXX\". It has got connectivity with rabbit via ovs port. Same port is used"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"da6ed579_33696ebf","line":9,"updated":"2016-01-12 17:17:24.000000000","message":"Some people say this line should always be to the right of your commit message.","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add fullstack resources and tests for linuxbridge agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds resources, fixtures and base test_connectivity tests for host"},{"line_number":10,"context_line":"with linuxbridge agent."},{"line_number":11,"context_line":"Model of host with linuxbridge agent is made in separate namespace named"},{"line_number":12,"context_line":"\"host-XXX\". It has got connectivity with rabbit via ovs port. Same port is used"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba63e191_59c54459","line":9,"in_reply_to":"da6ed579_33696ebf","updated":"2016-01-18 22:37:42.000000000","message":"Sorry but I don\u0027t understand. How it then should looks like?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds resources, fixtures and base test_connectivity tests for host"},{"line_number":10,"context_line":"with linuxbridge agent."},{"line_number":11,"context_line":"Model of host with linuxbridge agent is made in separate namespace named"},{"line_number":12,"context_line":"\"host-XXX\". It has got connectivity with rabbit via ovs port. Same port is used"},{"line_number":13,"context_line":"also to provide connectivity with different \"hosts\""},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"da6ed579_33b08e43","line":11,"updated":"2016-01-12 17:17:24.000000000","message":"Please insert empty newlines between paragraphs.","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds resources, fixtures and base test_connectivity tests for host"},{"line_number":10,"context_line":"with linuxbridge agent."},{"line_number":11,"context_line":"Model of host with linuxbridge agent is made in separate namespace named"},{"line_number":12,"context_line":"\"host-XXX\". It has got connectivity with rabbit via ovs port. Same port is used"},{"line_number":13,"context_line":"also to provide connectivity with different \"hosts\""},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba63e191_d9aff492","line":11,"in_reply_to":"da6ed579_33b08e43","updated":"2016-01-18 22:37:42.000000000","message":"Done","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add fullstack resources and tests for linuxbridge agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds resources, fixtures and base test_connectivity tests for host"},{"line_number":10,"context_line":"with linuxbridge agent."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Model of host with linuxbridge agent is made in separate namespace named"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a68dd71_a3c43e40","line":9,"range":{"start_line":9,"start_character":72,"end_line":9,"end_character":77},"updated":"2016-01-20 22:40:17.000000000","message":"note that in the commit messages, lines should be wrapped at 72 chars per line, and not 80. Also, according to [1], the first commit line should be 50 chars long (line 7 in this review).\n\n[1]: https://wiki.openstack.org/wiki/GitCommitMessages in \"Summary of Git commit message structure\"","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add fullstack resources and tests for linuxbridge agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds resources, fixtures and base test_connectivity tests for host"},{"line_number":10,"context_line":"with linuxbridge agent."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Model of host with linuxbridge agent is made in separate namespace named"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5a5ae5dd_596e7cca","line":9,"range":{"start_line":9,"start_character":72,"end_line":9,"end_character":77},"in_reply_to":"9a68dd71_a3c43e40","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f9f66d3ba851b1a8dbcb7dc33cf5c770ebec4e23","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Co-Authored-By: Mathieu Rohon \u003cmathieu.rohon@gmail.com\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I6230d8d09f77bd20674bf6c3be69fbc1627d66f8"},{"line_number":19,"context_line":"Close-bug: #1518675"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"dae33548_e0d4e9ec","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":9},"updated":"2016-02-18 10:56:47.000000000","message":"Closes-bug","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Co-Authored-By: Mathieu Rohon \u003cmathieu.rohon@gmail.com\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I6230d8d09f77bd20674bf6c3be69fbc1627d66f8"},{"line_number":19,"context_line":"Close-bug: #1518675"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"dae33548_52990b78","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":9},"in_reply_to":"dae33548_e0d4e9ec","updated":"2016-02-18 21:07:13.000000000","message":"Done","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"}],"TESTING.rst":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":228,"context_line":"OVS/LinuxBridge/DHCP/L3 agents, all configured with the same \"host\" value."},{"line_number":229,"context_line":"Each OVS agent is connected to its own pair of br-int/br-ex, and those bridges"},{"line_number":230,"context_line":"are then interconnected."},{"line_number":231,"context_line":"For LinuxBridge agent each agent is started in own namespace, called"},{"line_number":232,"context_line":"\"host-\u003csome_random_value\u003e\". Such namespaces are connected with OVS \"central\""},{"line_number":233,"context_line":"bridge to eachother."},{"line_number":234,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"dae33548_cddd2316","line":231,"range":{"start_line":231,"start_character":44,"end_line":231,"end_character":50},"updated":"2016-02-16 12:07:49.000000000","message":"in its own","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":228,"context_line":"OVS/LinuxBridge/DHCP/L3 agents, all configured with the same \"host\" value."},{"line_number":229,"context_line":"Each OVS agent is connected to its own pair of br-int/br-ex, and those bridges"},{"line_number":230,"context_line":"are then interconnected."},{"line_number":231,"context_line":"For LinuxBridge agent each agent is started in own namespace, called"},{"line_number":232,"context_line":"\"host-\u003csome_random_value\u003e\". Such namespaces are connected with OVS \"central\""},{"line_number":233,"context_line":"bridge to eachother."},{"line_number":234,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"dae33548_f2738413","line":231,"range":{"start_line":231,"start_character":44,"end_line":231,"end_character":50},"in_reply_to":"dae33548_cddd2316","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"}],"neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            LOG.warning(_LW(\"Invalid Network ID, will lead to incorrect \""},{"line_number":135,"context_line":"                            \"bridge name\"))"},{"line_number":136,"context_line":"        bridge_name \u003d BRIDGE_NAME_PREFIX + \\"},{"line_number":137,"context_line":"            network_id[0:lconst.RESOURCE_ID_LENGTH]"},{"line_number":138,"context_line":"        return bridge_name"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def get_subinterface_name(self, physical_interface, vlan_id):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_51112e03","line":137,"range":{"start_line":137,"start_character":23,"end_line":137,"end_character":24},"updated":"2016-02-18 10:54:38.000000000","message":"Nit: Since you were improving this, you could have also removed this unneeded zero :)","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            LOG.warning(_LW(\"Invalid Network ID, will lead to incorrect \""},{"line_number":135,"context_line":"                            \"bridge name\"))"},{"line_number":136,"context_line":"        bridge_name \u003d BRIDGE_NAME_PREFIX + \\"},{"line_number":137,"context_line":"            network_id[0:lconst.RESOURCE_ID_LENGTH]"},{"line_number":138,"context_line":"        return bridge_name"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def get_subinterface_name(self, physical_interface, vlan_id):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_5f00f401","line":137,"range":{"start_line":137,"start_character":23,"end_line":137,"end_character":24},"in_reply_to":"dae33548_51112e03","updated":"2016-02-18 21:07:13.000000000","message":"Done","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"}],"neutron/tests/common/agents/linuxbridge_agent.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def _get_bridge_name_with_suffix(self, bridge_name):"},{"line_number":51,"context_line":"        test_suffix \u003d cfg.CONF.test_br_suffix"},{"line_number":52,"context_line":"        original_name_new_length \u003d len(bridge_name) - (len(test_suffix) + 1)"},{"line_number":53,"context_line":"        return br_name[0:original_name_new_length] + \"@\" + test_suffix"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class LinuxBridgeNeutronAgentRPCForTests("}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_6569d6f8","line":53,"updated":"2015-12-13 01:55:54.000000000","message":"\u0027br_name\u0027 is probably a typo, did you mean \u0027bridge_name\u0027?","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def _get_bridge_name_with_suffix(self, bridge_name):"},{"line_number":51,"context_line":"        test_suffix \u003d cfg.CONF.test_br_suffix"},{"line_number":52,"context_line":"        original_name_new_length \u003d len(bridge_name) - (len(test_suffix) + 1)"},{"line_number":53,"context_line":"        return br_name[0:original_name_new_length] + \"@\" + test_suffix"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class LinuxBridgeNeutronAgentRPCForTests("}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_f650880c","line":53,"in_reply_to":"7a740942_6569d6f8","updated":"2015-12-15 23:21:46.000000000","message":"yes, fixed","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        )"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def main():"},{"line_number":69,"context_line":"    common_config.init(sys.argv[1:])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    common_config.setup_logging()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_056a52ed","line":68,"updated":"2015-12-13 01:55:54.000000000","message":"It should be possible to reuse the normal LB agent main. The only difference is the agent class, which could be a parameter.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        )"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def main():"},{"line_number":69,"context_line":"    common_config.init(sys.argv[1:])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    common_config.setup_logging()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_d6746c9d","line":68,"in_reply_to":"7a740942_056a52ed","updated":"2015-12-15 23:21:46.000000000","message":"I changed it to be more similar to how it is done in l3_agent for tests. I hope it will be better now","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    )"},{"line_number":98,"context_line":"    LOG.info(_LI(\"Test Agent initialized successfully, now running... \"))"},{"line_number":99,"context_line":"    launcher \u003d service.launch(cfg.CONF, agent)"},{"line_number":100,"context_line":"    launcher.wait()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"if __name__ \u003d\u003d \"__main__\":"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_172289a3","line":100,"updated":"2015-12-13 01:55:54.000000000","message":"I\u0027m not sure what\u0027s going on, it looks like the LB agent\u0027s start method isn\u0027t being called (I put a log there). Any time you run a fullstack test locally, the process logs are dumped to /tmp/dsvm-fullstack-logs/test_name/*\n\nI\u0027d advise you to put logs in various places in oslo_service and see what\u0027s going on.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    )"},{"line_number":98,"context_line":"    LOG.info(_LI(\"Test Agent initialized successfully, now running... \"))"},{"line_number":99,"context_line":"    launcher \u003d service.launch(cfg.CONF, agent)"},{"line_number":100,"context_line":"    launcher.wait()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"if __name__ \u003d\u003d \"__main__\":"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_365e1013","line":100,"in_reply_to":"7a740942_172289a3","updated":"2015-12-15 23:21:46.000000000","message":"After last changes and reusing of \"standard\" main function but with parameter it works better.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"454e041c472a56e27d43c40487e36f47f2c46b36","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# Copyright 2015 OVH SAS"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a710552_2df8f748","line":1,"updated":"2015-12-16 00:35:30.000000000","message":"Why this shebang?","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"454e041c472a56e27d43c40487e36f47f2c46b36","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        super(LinuxBridgeManagerForTests, self).__init__("},{"line_number":45,"context_line":"            bridge_mappings, interface_mappings"},{"line_number":46,"context_line":"        )"},{"line_number":47,"context_line":"        self.suffix \u003d cfg.CONF.test_br_suffix"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def get_bridge_name(self, network_id):"},{"line_number":50,"context_line":"        if not network_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a710552_686eed97","line":47,"updated":"2015-12-16 00:35:30.000000000","message":"Why do we need this suffix? iirc, agents and bridges are deployed in namespaces","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"}],"neutron/tests/common/net_helpers.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"454e041c472a56e27d43c40487e36f47f2c46b36","unresolved":false,"context_lines":[{"line_number":579,"context_line":"    def _setUp(self):"},{"line_number":580,"context_line":"        super(LinuxBridgePortFixture, self)._setUp()"},{"line_number":581,"context_line":"        br_port_name \u003d self._get_port_name()"},{"line_number":582,"context_line":"        self.br_port, self.port \u003d self.useFixture("},{"line_number":583,"context_line":"            VethFixture("},{"line_number":584,"context_line":"                veth0_prefix\u003dbr_port_name,"},{"line_number":585,"context_line":"                namespace1\u003dself.bridge.namespace,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a710552_0d309b00","line":582,"updated":"2015-12-16 00:35:30.000000000","message":"we don\u0027t need namespace1/namespace2, moving interfaces to their namespace is already done in L591/597","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"454e041c472a56e27d43c40487e36f47f2c46b36","unresolved":false,"context_lines":[{"line_number":600,"context_line":""},{"line_number":601,"context_line":"    def _get_port_name(self):"},{"line_number":602,"context_line":"        if self.port_id:"},{"line_number":603,"context_line":"            return n_const.TAP_DEVICE_PREFIX + self.port_id[0:11]"},{"line_number":604,"context_line":"        return None"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a710552_a80cd53b","line":603,"updated":"2015-12-16 00:35:30.000000000","message":"duplicate LB-agent get_brigde_name or get_tap_device_name","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d2a36e47fc24d1708a91fdda567775a2ef574750","unresolved":false,"context_lines":[{"line_number":600,"context_line":""},{"line_number":601,"context_line":"    def _get_port_name(self):"},{"line_number":602,"context_line":"        if self.port_id:"},{"line_number":603,"context_line":"            return n_const.TAP_DEVICE_PREFIX + self.port_id[0:11]"},{"line_number":604,"context_line":"        return None"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_c87d85b2","line":603,"in_reply_to":"5a710552_a80cd53b","updated":"2015-12-27 18:14:41.000000000","message":"Yes, but I don\u0027t want to create linuxbridge_agent class here to use this method. That\u0027s why I added here similar method. Is it really problem and should I change it somehow?","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"NS_PREFIX \u003d \u0027test-\u0027"},{"line_number":49,"context_line":"BR_PREFIX \u003d \u0027test-br\u0027"},{"line_number":50,"context_line":"PORT_PREFIX \u003d \u0027port\u0027"},{"line_number":51,"context_line":"VETH0_PREFIX \u003d \u0027test-veth0\u0027"},{"line_number":52,"context_line":"VETH1_PREFIX \u003d \u0027test-veth1\u0027"},{"line_number":53,"context_line":"PATCH_PREFIX \u003d \u0027patch\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_b32c7e4b","line":50,"updated":"2016-01-12 17:17:24.000000000","message":"Can you clarify why the change?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"93174fe0f1bcdbb65684058b9638eb1bb081f744","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"NS_PREFIX \u003d \u0027test-\u0027"},{"line_number":49,"context_line":"BR_PREFIX \u003d \u0027test-br\u0027"},{"line_number":50,"context_line":"PORT_PREFIX \u003d \u0027port\u0027"},{"line_number":51,"context_line":"VETH0_PREFIX \u003d \u0027test-veth0\u0027"},{"line_number":52,"context_line":"VETH1_PREFIX \u003d \u0027test-veth1\u0027"},{"line_number":53,"context_line":"PATCH_PREFIX \u003d \u0027patch\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_e080448d","line":50,"in_reply_to":"9a68dd71_692ce54a","updated":"2016-02-06 21:55:12.000000000","message":"IMHO there is no bug to fix here. Before this patch port prefix was \"test-port\" (length \u003d 9) and port name was created with function tests_base.get_rand_device_name which is \"filling\" given prefix up to 15 chars (that is max length of net device in Linux). So first what I made was change in L.530 to use function tests_base.get_rand_name with given max_length \u003d 10. In that case it is working fine even if VLAN ID will be added to this name later. But there was still one small problem. If I would left \"test-port\" as prefix for this port_name and max device length is set to 10 (because must be then there is only 1 char for some random value and I was worried that it could be not enough and we could have sometimes some conflicts of two same names (I don\u0027t remember if I got such situation during doing this patch).","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"803a09b3ac4dba569728175b87a36981fc1aff7a","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"NS_PREFIX \u003d \u0027test-\u0027"},{"line_number":49,"context_line":"BR_PREFIX \u003d \u0027test-br\u0027"},{"line_number":50,"context_line":"PORT_PREFIX \u003d \u0027port\u0027"},{"line_number":51,"context_line":"VETH0_PREFIX \u003d \u0027test-veth0\u0027"},{"line_number":52,"context_line":"VETH1_PREFIX \u003d \u0027test-veth1\u0027"},{"line_number":53,"context_line":"PATCH_PREFIX \u003d \u0027patch\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_692ce54a","line":50,"in_reply_to":"ba63e191_284920d1","updated":"2016-01-20 22:40:42.000000000","message":"If the test infra creates a port with too big a name, the fault is in the code that generates the name, not in the prefix.\n\nIn other words, please revert this change and fix the actual bug ;-)","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"NS_PREFIX \u003d \u0027test-\u0027"},{"line_number":49,"context_line":"BR_PREFIX \u003d \u0027test-br\u0027"},{"line_number":50,"context_line":"PORT_PREFIX \u003d \u0027port\u0027"},{"line_number":51,"context_line":"VETH0_PREFIX \u003d \u0027test-veth0\u0027"},{"line_number":52,"context_line":"VETH1_PREFIX \u003d \u0027test-veth1\u0027"},{"line_number":53,"context_line":"PATCH_PREFIX \u003d \u0027patch\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_284920d1","line":50,"in_reply_to":"da6ed579_b32c7e4b","updated":"2016-01-18 22:37:42.000000000","message":"because when prefix of port name was \"test-port\" and later linuxbridge agent tries to add vlan id to it device name was too long for Linux. That\u0027s why I changed it to shorter prefix.","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":528,"context_line":"        # port is used to provide vlan connection between two linuxbridge"},{"line_number":529,"context_line":"        # agents then place for vlan ID is required also:"},{"line_number":530,"context_line":"        port_name \u003d tests_base.get_rand_name("},{"line_number":531,"context_line":"            n_const.DEVICE_NAME_MAX_LEN - 5,"},{"line_number":532,"context_line":"            PORT_PREFIX"},{"line_number":533,"context_line":"        )"},{"line_number":534,"context_line":"        ovs_interface.plug_new("}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_73fe066d","line":531,"updated":"2016-01-12 17:17:24.000000000","message":"instead of magic value 5, can we have a constant with a clear name for that?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"93174fe0f1bcdbb65684058b9638eb1bb081f744","unresolved":false,"context_lines":[{"line_number":528,"context_line":"        # port is used to provide vlan connection between two linuxbridge"},{"line_number":529,"context_line":"        # agents then place for vlan ID is required also:"},{"line_number":530,"context_line":"        port_name \u003d tests_base.get_rand_name("},{"line_number":531,"context_line":"            n_const.DEVICE_NAME_MAX_LEN - 5,"},{"line_number":532,"context_line":"            PORT_PREFIX"},{"line_number":533,"context_line":"        )"},{"line_number":534,"context_line":"        ovs_interface.plug_new("}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_e0a92425","line":531,"in_reply_to":"9a68dd71_a96c1d9d","updated":"2016-02-06 21:55:12.000000000","message":"Linuxbridge agent have some \"base\" interface like eth1 and is creating new vlan interface on it (for example eth1.1000) - it is normal linux behaviour :)\nI added this constant here","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"803a09b3ac4dba569728175b87a36981fc1aff7a","unresolved":false,"context_lines":[{"line_number":528,"context_line":"        # port is used to provide vlan connection between two linuxbridge"},{"line_number":529,"context_line":"        # agents then place for vlan ID is required also:"},{"line_number":530,"context_line":"        port_name \u003d tests_base.get_rand_name("},{"line_number":531,"context_line":"            n_const.DEVICE_NAME_MAX_LEN - 5,"},{"line_number":532,"context_line":"            PORT_PREFIX"},{"line_number":533,"context_line":"        )"},{"line_number":534,"context_line":"        ovs_interface.plug_new("}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_a96c1d9d","line":531,"in_reply_to":"ba63e191_e878e8fa","updated":"2016-01-20 22:40:42.000000000","message":"Your answer implies that linuxbridge changes the device name according to the plan tag it gives him. Is this correct?\n\nEither way, a better name would be \u0027LB_DEVICE_NAME_MAX_LEN\u0027 with the value of 10 (and a comment describing why 15 is not enough).","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":528,"context_line":"        # port is used to provide vlan connection between two linuxbridge"},{"line_number":529,"context_line":"        # agents then place for vlan ID is required also:"},{"line_number":530,"context_line":"        port_name \u003d tests_base.get_rand_name("},{"line_number":531,"context_line":"            n_const.DEVICE_NAME_MAX_LEN - 5,"},{"line_number":532,"context_line":"            PORT_PREFIX"},{"line_number":533,"context_line":"        )"},{"line_number":534,"context_line":"        ovs_interface.plug_new("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_e878e8fa","line":531,"in_reply_to":"da6ed579_73fe066d","updated":"2016-01-18 22:37:42.000000000","message":"It is done like that because of same reason as I described above. What name of constant do You propose if it is just \"place for vlan id\"?\nI don\u0027t know how to name such constant so I added this comment here. Isn\u0027t it enough?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        if self.namespace is UNDEFINED:"},{"line_number":566,"context_line":"            self.namespace \u003d self.useFixture(NamespaceFixture()).name"},{"line_number":567,"context_line":"        self.bridge \u003d bridge_lib.BridgeDevice.addbr("},{"line_number":568,"context_line":"            name\u003dself.prefix,"},{"line_number":569,"context_line":"            namespace\u003dself.namespace"},{"line_number":570,"context_line":"        )"},{"line_number":571,"context_line":"        self.addCleanup(self.bridge.delbr)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_3355ee4f","line":568,"updated":"2016-01-12 17:17:24.000000000","message":"you mean the name is always the same (self.prefix)? why do we need it?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":565,"context_line":"        if self.namespace is UNDEFINED:"},{"line_number":566,"context_line":"            self.namespace \u003d self.useFixture(NamespaceFixture()).name"},{"line_number":567,"context_line":"        self.bridge \u003d bridge_lib.BridgeDevice.addbr("},{"line_number":568,"context_line":"            name\u003dself.prefix,"},{"line_number":569,"context_line":"            namespace\u003dself.namespace"},{"line_number":570,"context_line":"        )"},{"line_number":571,"context_line":"        self.addCleanup(self.bridge.delbr)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_687718d5","line":568,"in_reply_to":"da6ed579_3355ee4f","updated":"2016-01-18 22:37:42.000000000","message":"In fact in class FakeFullstackLinuxbridgeMachine there is created such Linuxbridge fixture and as prefix is given full name of bridge (qbrXXXXX). I don\u0027t want to change name of this parameter from \"prefix\" to \"name\" because I\u0027m not sure if it is not used somewhere else. Besides that this is quite typical convention in those tests that if prefix is equal to max length of network device than it is just name of fixture (please see neutron.tests.common.base.create_resource())","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def _get_port_name(self):"},{"line_number":607,"context_line":"        if self.port_id:"},{"line_number":608,"context_line":"            return n_const.TAP_DEVICE_PREFIX + self.port_id[0:11]"},{"line_number":609,"context_line":"        return None"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_33264ecf","line":608,"updated":"2016-01-12 17:17:24.000000000","message":"How is this function related to _get_device_name? Shouldn\u0027t we reuse code here?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def _get_port_name(self):"},{"line_number":607,"context_line":"        if self.port_id:"},{"line_number":608,"context_line":"            return n_const.TAP_DEVICE_PREFIX + self.port_id[0:11]"},{"line_number":609,"context_line":"        return None"},{"line_number":610,"context_line":""},{"line_number":611,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_08369c03","line":608,"in_reply_to":"da6ed579_33264ecf","updated":"2016-01-18 22:37:42.000000000","message":"where exactly is that function _get_device_name? because I can\u0027t find it","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":506,"context_line":"                    name, self.get_peer_name(name)"},{"line_number":507,"context_line":"                )"},{"line_number":508,"context_line":"            )"},{"line_number":509,"context_line":"        else:"},{"line_number":510,"context_line":"            if self.veth0_prefix is None:"},{"line_number":511,"context_line":"                self.veth0_prefix \u003d VETH0_PREFIX"},{"line_number":512,"context_line":"            if self.veth1_prefix is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_a6e52ca9","line":509,"range":{"start_line":509,"start_character":8,"end_line":509,"end_character":12},"updated":"2016-01-20 22:40:17.000000000","message":"This \u0027else\u0027 block is creating a bit of code duplication and at the end of the day this only adds complexity to (what should be) a really simple piece of code.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":506,"context_line":"                    name, self.get_peer_name(name)"},{"line_number":507,"context_line":"                )"},{"line_number":508,"context_line":"            )"},{"line_number":509,"context_line":"        else:"},{"line_number":510,"context_line":"            if self.veth0_prefix is None:"},{"line_number":511,"context_line":"                self.veth0_prefix \u003d VETH0_PREFIX"},{"line_number":512,"context_line":"            if self.veth1_prefix is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_dd573324","line":509,"range":{"start_line":509,"start_character":8,"end_line":509,"end_character":12},"in_reply_to":"9a68dd71_a6e52ca9","updated":"2016-02-06 21:55:22.000000000","message":"I removed this \"else\" block and made it more like Youj suggested in comment below. I hope it will be better now.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":508,"context_line":"            )"},{"line_number":509,"context_line":"        else:"},{"line_number":510,"context_line":"            if self.veth0_prefix is None:"},{"line_number":511,"context_line":"                self.veth0_prefix \u003d VETH0_PREFIX"},{"line_number":512,"context_line":"            if self.veth1_prefix is None:"},{"line_number":513,"context_line":"                self.veth1_prefix \u003d VETH1_PREFIX"},{"line_number":514,"context_line":"            return ip_wrapper.add_veth(self.veth0_prefix, self.veth1_prefix)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_a6dbec1a","line":511,"range":{"start_line":511,"start_character":16,"end_line":511,"end_character":48},"updated":"2016-01-20 22:40:17.000000000","message":"Although it\u0027s a private function, it\u0027s a still getter function. As such, assignments to \u0027self.veth?_prefix\u0027 shouldn\u0027t be done here but in either _setUp or (preferably) in the constructor. Coupled with the above comment, this should be changed altogether.\n\nWhy not just provide default values for veth0_prefix and veth1_prefix, like [1]?\n\n[1]:http://pastebin.com/mg6DuQVA (note that I\u0027ve also changed \u0027get_peer_name\u0027 as a result. Untested.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":508,"context_line":"            )"},{"line_number":509,"context_line":"        else:"},{"line_number":510,"context_line":"            if self.veth0_prefix is None:"},{"line_number":511,"context_line":"                self.veth0_prefix \u003d VETH0_PREFIX"},{"line_number":512,"context_line":"            if self.veth1_prefix is None:"},{"line_number":513,"context_line":"                self.veth1_prefix \u003d VETH1_PREFIX"},{"line_number":514,"context_line":"            return ip_wrapper.add_veth(self.veth0_prefix, self.veth1_prefix)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_403ef828","line":511,"range":{"start_line":511,"start_character":16,"end_line":511,"end_character":48},"in_reply_to":"9a68dd71_a6dbec1a","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                self.veth0_prefix \u003d VETH0_PREFIX"},{"line_number":512,"context_line":"            if self.veth1_prefix is None:"},{"line_number":513,"context_line":"                self.veth1_prefix \u003d VETH1_PREFIX"},{"line_number":514,"context_line":"            return ip_wrapper.add_veth(self.veth0_prefix, self.veth1_prefix)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    @staticmethod"},{"line_number":517,"context_line":"    def get_peer_name(name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_4c400f57","line":514,"range":{"start_line":514,"start_character":30,"end_line":514,"end_character":76},"updated":"2016-01-20 22:40:17.000000000","message":"This has a bug: add_veth treats the names given as actual names, not prefixes. This will result in all VethFixtures to have the same names for interfaces.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                self.veth0_prefix \u003d VETH0_PREFIX"},{"line_number":512,"context_line":"            if self.veth1_prefix is None:"},{"line_number":513,"context_line":"                self.veth1_prefix \u003d VETH1_PREFIX"},{"line_number":514,"context_line":"            return ip_wrapper.add_veth(self.veth0_prefix, self.veth1_prefix)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"    @staticmethod"},{"line_number":517,"context_line":"    def get_peer_name(name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_2043bcb3","line":514,"range":{"start_line":514,"start_character":30,"end_line":514,"end_character":76},"in_reply_to":"9a68dd71_4c400f57","updated":"2016-02-06 21:55:22.000000000","message":"Yes. I fixed it in current patchset","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def _get_port_name(self):"},{"line_number":676,"context_line":"        if self.port_id:"},{"line_number":677,"context_line":"            return n_const.TAP_DEVICE_PREFIX + self.port_id[0:11]"},{"line_number":678,"context_line":"        return None"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_e93a15cd","line":677,"range":{"start_line":677,"start_character":62,"end_line":677,"end_character":64},"updated":"2016-01-20 22:40:17.000000000","message":"Please add a constant to neutron/common/constant with the value of \u002711\u0027 to avoid magic strings.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"697ccddac5ab62080c6c9a1de122e9df172cfd0f","unresolved":false,"context_lines":[{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def _get_port_name(self):"},{"line_number":676,"context_line":"        if self.port_id:"},{"line_number":677,"context_line":"            return n_const.TAP_DEVICE_PREFIX + self.port_id[0:11]"},{"line_number":678,"context_line":"        return None"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_a65a5ff0","line":677,"range":{"start_line":677,"start_character":62,"end_line":677,"end_character":64},"in_reply_to":"5a5ae5dd_202adcdb","updated":"2016-02-07 14:06:23.000000000","message":"The more specific, the better - so neutron.plugins.ml2.drivers.linuxbridge.agent.common.constants seems better. The linuxbridge agent code should also be updated to use this constant IMO, and it can even be done in this patch.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ede5c05ac4b137f2ff123488b652a8afaea57d0f","unresolved":false,"context_lines":[{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def _get_port_name(self):"},{"line_number":676,"context_line":"        if self.port_id:"},{"line_number":677,"context_line":"            return n_const.TAP_DEVICE_PREFIX + self.port_id[0:11]"},{"line_number":678,"context_line":"        return None"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_58431aaf","line":677,"range":{"start_line":677,"start_character":62,"end_line":677,"end_character":64},"in_reply_to":"5a5ae5dd_a65a5ff0","updated":"2016-02-08 22:08:24.000000000","message":"Done. But I\u0027m not sure if such name of constant will be fine. I don\u0027t know what would be best name for such constant :/","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":674,"context_line":""},{"line_number":675,"context_line":"    def _get_port_name(self):"},{"line_number":676,"context_line":"        if self.port_id:"},{"line_number":677,"context_line":"            return n_const.TAP_DEVICE_PREFIX + self.port_id[0:11]"},{"line_number":678,"context_line":"        return None"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_202adcdb","line":677,"range":{"start_line":677,"start_character":62,"end_line":677,"end_character":64},"in_reply_to":"9a68dd71_e93a15cd","updated":"2016-02-06 21:55:22.000000000","message":"But this value is used also in Linuxbridge agent. Should I add it to neutron.common.constants or maybe to neutron.plugins.ml2.drivers.linuxbridge.agent.common.constants - what would be better?\n\nAlso should I change linuxbridge agent code to use this constant instead of \"magic\" number or should it be done in different patch maybe?","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"a14a9d1e3ecc5358ca93675f5c56c46dc26aa546","unresolved":false,"context_lines":[{"line_number":674,"context_line":"    def _get_port_name(self):"},{"line_number":675,"context_line":"        if self.port_id:"},{"line_number":676,"context_line":"            return n_const.TAP_DEVICE_PREFIX + \\"},{"line_number":677,"context_line":"                self.port_id[0:lconst.RESOURCE_ID_LENGHT]"},{"line_number":678,"context_line":"        return None"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a5ae5dd_b80221b3","line":677,"range":{"start_line":677,"start_character":50,"end_line":677,"end_character":56},"updated":"2016-02-09 13:13:00.000000000","message":"typo: s/LENGHT/LENGTH/g\n\nAlso, how about something more along the lines of the current \u0027DEVICE_NAME_MAX_LEN\u0027 that already exists in neutron/common/constants? There are plenty of resources we mess about with in Neutron so we want to be more specific.","commit_id":"e1a88b1c21b86bf43ed645f1f8a751f4ad1d8d2f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"46f61e9a1f22d7b13606bb819c1368e2553aa79e","unresolved":false,"context_lines":[{"line_number":674,"context_line":"    def _get_port_name(self):"},{"line_number":675,"context_line":"        if self.port_id:"},{"line_number":676,"context_line":"            return n_const.TAP_DEVICE_PREFIX + \\"},{"line_number":677,"context_line":"                self.port_id[0:lconst.RESOURCE_ID_LENGHT]"},{"line_number":678,"context_line":"        return None"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a57f1b5_aaec2b90","line":677,"range":{"start_line":677,"start_character":50,"end_line":677,"end_character":56},"in_reply_to":"5a5ae5dd_b80221b3","updated":"2016-02-09 21:38:28.000000000","message":"typo Fixed.\nBut I don\u0027t know what other name should I use for this constant. It is in fact different DEVICE_NAME_MAX_LEN - please note that for some reason (I have no idea why) length of tap device and bridge name in linuxbridge agent is shorted then DEVICE_NAME_MAX_LEN so I doesn\u0027t want to use this constant (or some similar name) to not be confusing.\n\nIf You have any idea for better name I will change it for what You want :)","commit_id":"e1a88b1c21b86bf43ed645f1f8a751f4ad1d8d2f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":55,"context_line":"PATCH_PREFIX \u003d \u0027patch\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# port name should be shorter than DEVICE_NAME_MAX_LEN because if this"},{"line_number":58,"context_line":"# port is used to provide vlan connection between two linuxbridge"},{"line_number":59,"context_line":"# agents then place for vlan ID is required also:"},{"line_number":60,"context_line":"LB_DEVICE_NAME_MAX_LEN \u003d 10"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_100a8421","line":58,"updated":"2016-02-16 12:07:49.000000000","message":"It could be worth giving an example of a name with vlan id included. Max vlan id takes 4 chars, so why 5 chars used for it? I guess it has some prefix like @?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":55,"context_line":"PATCH_PREFIX \u003d \u0027patch\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# port name should be shorter than DEVICE_NAME_MAX_LEN because if this"},{"line_number":58,"context_line":"# port is used to provide vlan connection between two linuxbridge"},{"line_number":59,"context_line":"# agents then place for vlan ID is required also:"},{"line_number":60,"context_line":"LB_DEVICE_NAME_MAX_LEN \u003d 10"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_7d458515","line":58,"in_reply_to":"dae33548_100a8421","updated":"2016-02-16 23:59:01.000000000","message":"Yes, it is exactly \".vlan\" (dot and 4 digits). I added such comment here","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# port name should be shorter than DEVICE_NAME_MAX_LEN because if this"},{"line_number":58,"context_line":"# port is used to provide vlan connection between two linuxbridge"},{"line_number":59,"context_line":"# agents then place for vlan ID is required also:"},{"line_number":60,"context_line":"LB_DEVICE_NAME_MAX_LEN \u003d 10"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"SS_SOURCE_PORT_PATTERN \u003d re.compile("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_6d4a17ae","line":59,"range":{"start_line":59,"start_character":48,"end_line":59,"end_character":49},"updated":"2016-02-16 12:07:49.000000000","message":"Remove :","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# port name should be shorter than DEVICE_NAME_MAX_LEN because if this"},{"line_number":58,"context_line":"# port is used to provide vlan connection between two linuxbridge"},{"line_number":59,"context_line":"# agents then place for vlan ID is required also:"},{"line_number":60,"context_line":"LB_DEVICE_NAME_MAX_LEN \u003d 10"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"SS_SOURCE_PORT_PATTERN \u003d re.compile("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_2d500f5e","line":59,"range":{"start_line":59,"start_character":32,"end_line":59,"end_character":48},"updated":"2016-02-16 12:07:49.000000000","message":"is also required","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# port name should be shorter than DEVICE_NAME_MAX_LEN because if this"},{"line_number":58,"context_line":"# port is used to provide vlan connection between two linuxbridge"},{"line_number":59,"context_line":"# agents then place for vlan ID is required also:"},{"line_number":60,"context_line":"LB_DEVICE_NAME_MAX_LEN \u003d 10"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"SS_SOURCE_PORT_PATTERN \u003d re.compile("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_dd4c9144","line":59,"range":{"start_line":59,"start_character":32,"end_line":59,"end_character":48},"in_reply_to":"dae33548_2d500f5e","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# port name should be shorter than DEVICE_NAME_MAX_LEN because if this"},{"line_number":58,"context_line":"# port is used to provide vlan connection between two linuxbridge"},{"line_number":59,"context_line":"# agents then place for vlan ID is required also:"},{"line_number":60,"context_line":"LB_DEVICE_NAME_MAX_LEN \u003d 10"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"SS_SOURCE_PORT_PATTERN \u003d re.compile("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_bd470d1c","line":59,"range":{"start_line":59,"start_character":48,"end_line":59,"end_character":49},"in_reply_to":"dae33548_6d4a17ae","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":516,"context_line":""},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"class NamedVethFixture(VethFixture):"},{"line_number":519,"context_line":"    \"\"\"Create a veth with specified at least one name of device"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    :ivar ports: created veth ports"},{"line_number":522,"context_line":"    :type ports: IPDevice 2-uplet"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_d04dbc73","line":519,"range":{"start_line":519,"start_character":21,"end_line":519,"end_character":63},"updated":"2016-02-16 12:07:49.000000000","message":"with at least one specified name of a device","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":516,"context_line":""},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"class NamedVethFixture(VethFixture):"},{"line_number":519,"context_line":"    \"\"\"Create a veth with specified at least one name of device"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    :ivar ports: created veth ports"},{"line_number":522,"context_line":"    :type ports: IPDevice 2-uplet"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_9d596901","line":519,"range":{"start_line":519,"start_character":21,"end_line":519,"end_character":63},"in_reply_to":"dae33548_d04dbc73","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":519,"context_line":"    \"\"\"Create a veth with specified at least one name of device"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    :ivar ports: created veth ports"},{"line_number":522,"context_line":"    :type ports: IPDevice 2-uplet"},{"line_number":523,"context_line":"    \"\"\""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def __init__(self, veth0_prefix\u003dVETH0_PREFIX, veth1_prefix\u003dVETH1_PREFIX):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_f0156049","line":522,"range":{"start_line":522,"start_character":28,"end_line":522,"end_character":33},"updated":"2016-02-16 12:07:49.000000000","message":"First time I see the term. But yeah, I see you copy-pasted from above. I suspect it\u0027s in French. ;)","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":519,"context_line":"    \"\"\"Create a veth with specified at least one name of device"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"    :ivar ports: created veth ports"},{"line_number":522,"context_line":"    :type ports: IPDevice 2-uplet"},{"line_number":523,"context_line":"    \"\"\""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def __init__(self, veth0_prefix\u003dVETH0_PREFIX, veth1_prefix\u003dVETH1_PREFIX):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_5db7e1d7","line":522,"range":{"start_line":522,"start_character":28,"end_line":522,"end_character":33},"in_reply_to":"dae33548_f0156049","updated":"2016-02-16 23:59:01.000000000","message":"Yeah. I copy paste this part and even didn\u0027t notice this \"strange\" type. Sorry. I changed it and I hope it is better now.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        self.veth0_name \u003d self.get_veth_name(veth0_prefix)"},{"line_number":527,"context_line":"        self.veth1_name \u003d self.get_veth_name(veth1_prefix)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def _setUp(self):"},{"line_number":530,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":531,"context_line":"        self.ports \u003d ip_wrapper.add_veth(self.veth0_name, self.veth1_name)"},{"line_number":532,"context_line":"        self.addCleanup(self.destroy)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_f05ba0f4","line":529,"updated":"2016-02-16 12:07:49.000000000","message":"Can we reuse the code from VethFixture here? It seems the only difference between them is that you want specific names for veth endpoints.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        self.veth0_name \u003d self.get_veth_name(veth0_prefix)"},{"line_number":527,"context_line":"        self.veth1_name \u003d self.get_veth_name(veth1_prefix)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def _setUp(self):"},{"line_number":530,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":531,"context_line":"        self.ports \u003d ip_wrapper.add_veth(self.veth0_name, self.veth1_name)"},{"line_number":532,"context_line":"        self.addCleanup(self.destroy)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_3df2dd6f","line":529,"in_reply_to":"dae33548_f05ba0f4","updated":"2016-02-16 23:59:01.000000000","message":"not exactly. Please note that in this method I\u0027m creating veth pair directly with ip_wrapper.add_veth() method. In VethFixture._setUp() it is created by wrapper common_base.create_resource() function.\nAnd that is one of main problems which I have here. Function common_base.create_resource() is taking some \"prefix\" as parameter and if this prefix have for lenght \u003d 15 (max_device_name_lenght) then it\u0027s name of new resource, if prefix is shorter then common_base.create_resource() will add random chars to fill name of resource up to 15 chars.\nProblem is that linuxbridge agent is working on tap devices and bridge names which have 14 chars (I have no idea why) so I have to specify names of resources directly and make such resources without this wrapper.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        ovs_interface \u003d interface.OVSInterfaceDriver(interface_config)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"        port_name \u003d tests_base.get_rand_name("},{"line_number":614,"context_line":"            LB_DEVICE_NAME_MAX_LEN,"},{"line_number":615,"context_line":"            PORT_PREFIX"},{"line_number":616,"context_line":"        )"},{"line_number":617,"context_line":"        ovs_interface.plug_new("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_90a054a1","line":614,"updated":"2016-02-16 12:07:49.000000000","message":"It\u0027s not obvious why you use a linuxbridge constant to limit the name of the ovs port. You may want to add a comment here explaining it.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        ovs_interface \u003d interface.OVSInterfaceDriver(interface_config)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"        port_name \u003d tests_base.get_rand_name("},{"line_number":614,"context_line":"            LB_DEVICE_NAME_MAX_LEN,"},{"line_number":615,"context_line":"            PORT_PREFIX"},{"line_number":616,"context_line":"        )"},{"line_number":617,"context_line":"        ovs_interface.plug_new("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_ddb13191","line":614,"in_reply_to":"dae33548_90a054a1","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":690,"context_line":"    def __init__(self, bridge, namespace\u003dNone, mac\u003dNone, port_id\u003dNone):"},{"line_number":691,"context_line":"        super(LinuxBridgePortFixture, self).__init__("},{"line_number":692,"context_line":"            bridge, namespace, mac, port_id)"},{"line_number":693,"context_line":"        self.port_id \u003d port_id"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"    def _create_bridge_fixture(self):"},{"line_number":696,"context_line":"        return LinuxBridgeFixture()"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_b0663827","line":693,"updated":"2016-02-16 12:07:49.000000000","message":"It\u0027s already saved by PortFixture. No need in the __init__ method.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":690,"context_line":"    def __init__(self, bridge, namespace\u003dNone, mac\u003dNone, port_id\u003dNone):"},{"line_number":691,"context_line":"        super(LinuxBridgePortFixture, self).__init__("},{"line_number":692,"context_line":"            bridge, namespace, mac, port_id)"},{"line_number":693,"context_line":"        self.port_id \u003d port_id"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"    def _create_bridge_fixture(self):"},{"line_number":696,"context_line":"        return LinuxBridgeFixture()"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_d8149f45","line":693,"in_reply_to":"dae33548_b0663827","updated":"2016-02-16 23:59:01.000000000","message":"True. It probably left from my older PS and I forgot to remove it. Fixed.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d0c2e011e7303fe6900f6d09d8050260e2d477e9","unresolved":false,"context_lines":[{"line_number":690,"context_line":"    def __init__(self, bridge, namespace\u003dNone, mac\u003dNone, port_id\u003dNone):"},{"line_number":691,"context_line":"        super(LinuxBridgePortFixture, self).__init__("},{"line_number":692,"context_line":"            bridge, namespace, mac, port_id)"},{"line_number":693,"context_line":"        self.port_id \u003d port_id"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"    def _create_bridge_fixture(self):"},{"line_number":696,"context_line":"        return LinuxBridgeFixture()"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_65f5d055","line":693,"in_reply_to":"dae33548_d8149f45","updated":"2016-02-17 10:56:05.000000000","message":"I added it again in new patch. It is here because in PortFixtute port_id is generated as random_uuid if not given by parameters. Here I need that it will really be None in such cases otherwise wrong VethPair is created and functional tests are failing :/","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":524,"context_line":"    :type ports: tuple of 2 IPDevice"},{"line_number":525,"context_line":"    \"\"\""},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def __init__(self, veth0_prefix\u003dVETH0_PREFIX, veth1_prefix\u003dVETH1_PREFIX):"},{"line_number":528,"context_line":"        self.veth0_name \u003d self.get_veth_name(veth0_prefix)"},{"line_number":529,"context_line":"        self.veth1_name \u003d self.get_veth_name(veth1_prefix)"},{"line_number":530,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_b1ea3ad9","line":527,"updated":"2016-02-18 10:54:38.000000000","message":"Missing call to superclass __init__()","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":524,"context_line":"    :type ports: tuple of 2 IPDevice"},{"line_number":525,"context_line":"    \"\"\""},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def __init__(self, veth0_prefix\u003dVETH0_PREFIX, veth1_prefix\u003dVETH1_PREFIX):"},{"line_number":528,"context_line":"        self.veth0_name \u003d self.get_veth_name(veth0_prefix)"},{"line_number":529,"context_line":"        self.veth1_name \u003d self.get_veth_name(veth1_prefix)"},{"line_number":530,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_d20a3b1f","line":527,"in_reply_to":"dae33548_b1ea3ad9","updated":"2016-02-18 21:07:13.000000000","message":"Done","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    :ivar namespace: created bridge namespace"},{"line_number":639,"context_line":"    :type namespace: str"},{"line_number":640,"context_line":"    \"\"\""},{"line_number":641,"context_line":"    br_name \u003d None"},{"line_number":642,"context_line":"    prefix \u003d None"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"    def __init__(self, prefix\u003dBR_PREFIX, namespace\u003dUNDEFINED,"},{"line_number":645,"context_line":"                 prefix_is_full_name\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_d11a5ec5","line":642,"range":{"start_line":641,"start_character":0,"end_line":642,"end_character":17},"updated":"2016-02-18 10:54:38.000000000","message":"Why are these class attributes?","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"24de5d72e84283396b4a9bfeedc97464d9de455f","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    :ivar namespace: created bridge namespace"},{"line_number":639,"context_line":"    :type namespace: str"},{"line_number":640,"context_line":"    \"\"\""},{"line_number":641,"context_line":"    br_name \u003d None"},{"line_number":642,"context_line":"    prefix \u003d None"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"    def __init__(self, prefix\u003dBR_PREFIX, namespace\u003dUNDEFINED,"},{"line_number":645,"context_line":"                 prefix_is_full_name\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_5f98076a","line":642,"range":{"start_line":641,"start_character":0,"end_line":642,"end_character":17},"in_reply_to":"dae33548_54d0eec8","updated":"2016-02-18 14:32:36.000000000","message":"Or better will be to store prefix_is_full_name bool in the class and use that. You actually don\u0027t use the br_name attribute anywhere or do you?","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    :ivar namespace: created bridge namespace"},{"line_number":639,"context_line":"    :type namespace: str"},{"line_number":640,"context_line":"    \"\"\""},{"line_number":641,"context_line":"    br_name \u003d None"},{"line_number":642,"context_line":"    prefix \u003d None"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"    def __init__(self, prefix\u003dBR_PREFIX, namespace\u003dUNDEFINED,"},{"line_number":645,"context_line":"                 prefix_is_full_name\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_123f83b4","line":642,"range":{"start_line":641,"start_character":0,"end_line":642,"end_character":17},"in_reply_to":"dae33548_5f98076a","updated":"2016-02-18 21:07:13.000000000","message":"Done","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9e0e0f059e2b76ea09ba204bfdc598d41e5f3d9e","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    :ivar namespace: created bridge namespace"},{"line_number":639,"context_line":"    :type namespace: str"},{"line_number":640,"context_line":"    \"\"\""},{"line_number":641,"context_line":"    br_name \u003d None"},{"line_number":642,"context_line":"    prefix \u003d None"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"    def __init__(self, prefix\u003dBR_PREFIX, namespace\u003dUNDEFINED,"},{"line_number":645,"context_line":"                 prefix_is_full_name\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_54d0eec8","line":642,"range":{"start_line":641,"start_character":0,"end_line":642,"end_character":17},"in_reply_to":"dae33548_85aa4783","updated":"2016-02-18 14:22:40.000000000","message":"So why don\u0027t you initialize the other value to None in constructor as well? It would be more readable and explicit what you are trying to achieve.","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"96caddb901c3c73e18ce107a6d319666191c3820","unresolved":false,"context_lines":[{"line_number":638,"context_line":"    :ivar namespace: created bridge namespace"},{"line_number":639,"context_line":"    :type namespace: str"},{"line_number":640,"context_line":"    \"\"\""},{"line_number":641,"context_line":"    br_name \u003d None"},{"line_number":642,"context_line":"    prefix \u003d None"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"    def __init__(self, prefix\u003dBR_PREFIX, namespace\u003dUNDEFINED,"},{"line_number":645,"context_line":"                 prefix_is_full_name\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_85aa4783","line":642,"range":{"start_line":641,"start_character":0,"end_line":642,"end_character":17},"in_reply_to":"dae33548_d11a5ec5","updated":"2016-02-18 14:05:16.000000000","message":"I needed to do small hack here and sometimes there is prefix for bridge name and sometimes (in my fullstack tests) this \"prefix\" in in fact name of bridge. So I added those two attributes here and I\u0027m initialize one of them in constructor.","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2216c3fab7b9bc8b9420a724ea8176b682eea648","unresolved":false,"context_lines":[{"line_number":691,"context_line":"    def __init__(self, bridge, namespace\u003dNone, mac\u003dNone, port_id\u003dNone):"},{"line_number":692,"context_line":"        super(LinuxBridgePortFixture, self).__init__("},{"line_number":693,"context_line":"            bridge, namespace, mac, port_id)"},{"line_number":694,"context_line":"        # we need to override port_id value here because in Port() class it is"},{"line_number":695,"context_line":"        # always generated as random. In LinuxBridgePortFixture we need to have"},{"line_number":696,"context_line":"        # it empty if it was not give because then proper veth_pair will be"},{"line_number":697,"context_line":"        # created (for example in some functional tests)"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_8f4b6159","line":694,"range":{"start_line":694,"start_character":60,"end_line":694,"end_character":64},"updated":"2016-02-19 10:29:18.000000000","message":"you mean in PortFixture","commit_id":"3f4486833df485edba66cb77c837e547f7f61e96"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7855ac0f8e45d49ec2c0d8fd54fd6da7c8b23092","unresolved":false,"context_lines":[{"line_number":691,"context_line":"    def __init__(self, bridge, namespace\u003dNone, mac\u003dNone, port_id\u003dNone):"},{"line_number":692,"context_line":"        super(LinuxBridgePortFixture, self).__init__("},{"line_number":693,"context_line":"            bridge, namespace, mac, port_id)"},{"line_number":694,"context_line":"        # we need to override port_id value here because in Port() class it is"},{"line_number":695,"context_line":"        # always generated as random. In LinuxBridgePortFixture we need to have"},{"line_number":696,"context_line":"        # it empty if it was not give because then proper veth_pair will be"},{"line_number":697,"context_line":"        # created (for example in some functional tests)"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_5ac47591","line":694,"range":{"start_line":694,"start_character":60,"end_line":694,"end_character":64},"in_reply_to":"bae84128_8f4b6159","updated":"2016-02-19 10:39:38.000000000","message":"Yes, PortFixture","commit_id":"3f4486833df485edba66cb77c837e547f7f61e96"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"19071a2d6ba628995b81e4fd339c67fdf3d808a5","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        self.bridge.link.set_up()"},{"line_number":655,"context_line":"        self.addCleanup(self.safe_set_down)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"    def safe_set_down(self):"},{"line_number":658,"context_line":"        try:"},{"line_number":659,"context_line":"            self.bridge.link.set_down()"},{"line_number":660,"context_line":"        except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_6c05dd78","line":657,"range":{"start_line":657,"start_character":22,"end_line":657,"end_character":26},"updated":"2016-02-22 15:01:30.000000000","message":"why are the safe cleanups needed?, does it fail sometimes?, why?","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6762589d7c9db2031b8856882cf5255e6de62f50","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        self.bridge.link.set_up()"},{"line_number":655,"context_line":"        self.addCleanup(self.safe_set_down)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"    def safe_set_down(self):"},{"line_number":658,"context_line":"        try:"},{"line_number":659,"context_line":"            self.bridge.link.set_down()"},{"line_number":660,"context_line":"        except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_2ee1de9a","line":657,"range":{"start_line":657,"start_character":22,"end_line":657,"end_character":26},"in_reply_to":"bae84128_4216b9f1","updated":"2016-02-23 10:47:11.000000000","message":"In all my tests this resources was cleaned. Only error which I had was that device was already not exists so can\u0027t be deleted. That\u0027s why I added this \"safe\" methods :)","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d6bad3c6be9276d912ce552977ec66bc7885a5a5","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        self.bridge.link.set_up()"},{"line_number":655,"context_line":"        self.addCleanup(self.safe_set_down)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"    def safe_set_down(self):"},{"line_number":658,"context_line":"        try:"},{"line_number":659,"context_line":"            self.bridge.link.set_down()"},{"line_number":660,"context_line":"        except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_7aaf4b94","line":657,"range":{"start_line":657,"start_character":22,"end_line":657,"end_character":26},"in_reply_to":"bae84128_6c05dd78","updated":"2016-02-22 15:34:25.000000000","message":"It was failing after I moved creation of bridge fixture to Host class. Probably because bridge is created in namespace and namespace was cleaned before bridge deletion","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"5392a0bbc6d72d3ced18c014c3b2757a33773fee","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        self.bridge.link.set_up()"},{"line_number":655,"context_line":"        self.addCleanup(self.safe_set_down)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"    def safe_set_down(self):"},{"line_number":658,"context_line":"        try:"},{"line_number":659,"context_line":"            self.bridge.link.set_down()"},{"line_number":660,"context_line":"        except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_4216b9f1","line":657,"range":{"start_line":657,"start_character":22,"end_line":657,"end_character":26},"in_reply_to":"bae84128_7aaf4b94","updated":"2016-02-23 10:09:28.000000000","message":"Thanks for the explanation\n\nI think it\u0027s safe then. AFAIK kernel cleans up the resources in a namespace itself. We used to have some bugs about non cleaned up resources in the past, but I believe that\u0027s gone, and btw, this is a use and throw VM for testing.","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"90b801d88e5838dcef4a62f0d227cc52e39112ee","unresolved":false,"context_lines":[{"line_number":660,"context_line":"        except RuntimeError:"},{"line_number":661,"context_line":"            pass"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"    def safe_delete(self):"},{"line_number":664,"context_line":"        try:"},{"line_number":665,"context_line":"            self.bridge.delbr()"},{"line_number":666,"context_line":"        except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_f5221ea2","line":663,"range":{"start_line":663,"start_character":8,"end_line":663,"end_character":19},"updated":"2016-02-23 11:52:10.000000000","message":"Instead of the try-except-pass we can have a decorator which does the same, but it\u0027s not a big deal...","commit_id":"2254acef062241b43d7138c981551183fc4a8930"}],"neutron/tests/contrib/gate_hook.sh":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"115d668e9215b1fed26f41d732caa1533836124e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if [ $? -ne 0 ]; then"},{"line_number":45,"context_line":"            CHAIN_NAME\u003d\"INPUT\""},{"line_number":46,"context_line":"        fi"},{"line_number":47,"context_line":"        iptables -I openstack-INPUT -s 240.0.0.0/8 -p tcp -m tcp -d 240.0.0.0/8 --dport 5672 -j ACCEPT"},{"line_number":48,"context_line":"    fi"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    # Make the workspace owned by the stack user"}],"source_content_type":"text/x-sh","patch_set":14,"id":"3a57f1b5_cccec32c","line":47,"range":{"start_line":47,"start_character":20,"end_line":47,"end_character":29},"updated":"2016-02-12 09:56:55.000000000","message":"$CHAIN_NAME?","commit_id":"06c86c905b400e3ca2cce1f95c03e72547ed40c3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ed46d496b03542157915c17429df1cf7642a5fbd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"set -ex"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"VENV\u003d${1:-\"dsvm-functional\"}"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-sh","patch_set":15,"id":"3a57f1b5_0c4cdb9c","line":3,"updated":"2016-02-12 10:00:01.000000000","message":"This -e makes the script exit.","commit_id":"9f853d17f6a7a52d1df8319d60bf435eae34fd3f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ed46d496b03542157915c17429df1cf7642a5fbd","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        # For linuxbridge agent fullstack tests we need to add special rules to"},{"line_number":40,"context_line":"        # iptables for connection of agents to rabbitmq:"},{"line_number":41,"context_line":"        CHAIN_NAME\u003d\"openstack-INPUT\""},{"line_number":42,"context_line":"        iptables -n --list $CHAIN_NAME 1\u003e /dev/null 2\u003e\u00261"},{"line_number":43,"context_line":"        if [ $? -ne 0 ]; then"},{"line_number":44,"context_line":"            CHAIN_NAME\u003d\"INPUT\""},{"line_number":45,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":15,"id":"3a57f1b5_6c530f3a","line":42,"updated":"2016-02-12 10:00:01.000000000","message":"Read \u0027man set\u0027 for -e to get an idea how to make it not crash on return code \u003e 0.","commit_id":"9f853d17f6a7a52d1df8319d60bf435eae34fd3f"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f0e002702654854afab7ce579d95ecb85ce1ca89","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        # For linuxbridge agent fullstack tests we need to add special rules to"},{"line_number":40,"context_line":"        # iptables for connection of agents to rabbitmq:"},{"line_number":41,"context_line":"        CHAIN_NAME\u003d\"openstack-INPUT\""},{"line_number":42,"context_line":"        iptables -n --list $CHAIN_NAME 1\u003e /dev/null 2\u003e\u00261"},{"line_number":43,"context_line":"        if [ $? -ne 0 ]; then"},{"line_number":44,"context_line":"            CHAIN_NAME\u003d\"INPUT\""},{"line_number":45,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":15,"id":"3a57f1b5_ec3dbfdd","line":42,"updated":"2016-02-12 10:00:20.000000000","message":"iptables -n --list $CHAIN_NAME 1\u003e /dev/null 2\u003e\u00261 || CHAIN_NAME\u003d\"INPUT\"\n\n\notherwise a failure there stops execution (set -e somewhere)","commit_id":"9f853d17f6a7a52d1df8319d60bf435eae34fd3f"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b58313c8877c18b99d9a9425e76588985f7018e4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # iptables for connection of agents to rabbitmq:"},{"line_number":41,"context_line":"        CHAIN_NAME\u003d\"openstack-INPUT\""},{"line_number":42,"context_line":"        iptables -n --list $CHAIN_NAME 1\u003e /dev/null 2\u003e\u00261"},{"line_number":43,"context_line":"        if [ $? -ne 0 ]; then"},{"line_number":44,"context_line":"            CHAIN_NAME\u003d\"INPUT\""},{"line_number":45,"context_line":"        fi"},{"line_number":46,"context_line":"        iptables -I openstack-INPUT -s 240.0.0.0/8 -p tcp -m tcp -d 240.0.0.0/8 --dport 5672 -j ACCEPT"}],"source_content_type":"text/x-sh","patch_set":15,"id":"3a57f1b5_8c0e8b39","line":43,"range":{"start_line":43,"start_character":11,"end_line":43,"end_character":12},"updated":"2016-02-12 10:00:56.000000000","message":"with my above comment, 43-45 can be removed","commit_id":"9f853d17f6a7a52d1df8319d60bf435eae34fd3f"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"5b71e938f33f0df35118938a621162f14e29b887","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        if [ $? -ne 0 ]; then"},{"line_number":44,"context_line":"            CHAIN_NAME\u003d\"INPUT\""},{"line_number":45,"context_line":"        fi"},{"line_number":46,"context_line":"        iptables -I openstack-INPUT -s 240.0.0.0/8 -p tcp -m tcp -d 240.0.0.0/8 --dport 5672 -j ACCEPT"},{"line_number":47,"context_line":"    fi"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # Make the workspace owned by the stack user"}],"source_content_type":"text/x-sh","patch_set":15,"id":"3a57f1b5_6c8eafd1","line":46,"range":{"start_line":46,"start_character":20,"end_line":46,"end_character":29},"updated":"2016-02-12 09:58:03.000000000","message":"you construct CHAIN_NAME, but then you don\u0027t use it:\n\nopenstack-INPUT -\u003e $CHAIN_NAME?","commit_id":"9f853d17f6a7a52d1df8319d60bf435eae34fd3f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"5bec3086bd272d4568ac0bb90b4b715aea5f28e8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        start_new_ovs"},{"line_number":36,"context_line":"    fi"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    if [[ \"$VENV\" \u003d~ \"dsvm-fullstack\" ]]; then"},{"line_number":39,"context_line":"        # For linuxbridge agent fullstack tests we need to add special rules to"},{"line_number":40,"context_line":"        # iptables for connection of agents to rabbitmq:"},{"line_number":41,"context_line":"        CHAIN_NAME\u003d\"openstack-INPUT\""}],"source_content_type":"text/x-sh","patch_set":18,"id":"dae33548_860cc795","line":38,"updated":"2016-02-15 14:08:58.000000000","message":"Moving this to tools/configure_for_func_testing.sh would be a good idea.","commit_id":"ee8bc8f1f7d3a760f13fe5747d90336787f31d38"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8a1fc061ca30b07ffbefc01ec023270196119a2a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        start_new_ovs"},{"line_number":36,"context_line":"    fi"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    if [[ \"$VENV\" \u003d~ \"dsvm-fullstack\" ]]; then"},{"line_number":39,"context_line":"        # For linuxbridge agent fullstack tests we need to add special rules to"},{"line_number":40,"context_line":"        # iptables for connection of agents to rabbitmq:"},{"line_number":41,"context_line":"        CHAIN_NAME\u003d\"openstack-INPUT\""}],"source_content_type":"text/x-sh","patch_set":18,"id":"dae33548_975ea5e7","line":38,"in_reply_to":"dae33548_860cc795","updated":"2016-02-15 21:53:55.000000000","message":"That\u0027s what I thought :). Changed","commit_id":"ee8bc8f1f7d3a760f13fe5747d90336787f31d38"}],"neutron/tests/fullstack/resources/config.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def get_network_br_name(self, network_id):"},{"line_number":254,"context_line":"        br_name \u003d self.br_prefix_name + network_id[0:11]"},{"line_number":255,"context_line":"        original_name_new_length \u003d \\"},{"line_number":256,"context_line":"                len(br_name) - (len(self.br_suffix_name) + 1)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        return br_name[0:original_name_new_length] + \"@\" + self.br_suffix_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_256f4efd","line":255,"updated":"2015-12-13 01:55:54.000000000","message":"We don\u0027t tend to use \\ to break lines, use parenthesis instead.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def get_network_br_name(self, network_id):"},{"line_number":254,"context_line":"        br_name \u003d self.br_prefix_name + network_id[0:11]"},{"line_number":255,"context_line":"        original_name_new_length \u003d \\"},{"line_number":256,"context_line":"                len(br_name) - (len(self.br_suffix_name) + 1)"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        return br_name[0:original_name_new_length] + \"@\" + self.br_suffix_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_76ab38d7","line":255,"in_reply_to":"7a740942_256f4efd","updated":"2015-12-15 23:21:46.000000000","message":"Done","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"454e041c472a56e27d43c40487e36f47f2c46b36","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            env_desc, host_desc, temp_dir,"},{"line_number":212,"context_line":"            base_filename\u003d\"linuxbridge_agent.ini\""},{"line_number":213,"context_line":"        )"},{"line_number":214,"context_line":"        self.br_prefix_name \u003d \"brq\""},{"line_number":215,"context_line":"        self.br_suffix_name \u003d self._generate_br_suffix()"},{"line_number":216,"context_line":"        self.tunneling_vxlan \u003d self.env_desc.tunneling_enabled"},{"line_number":217,"context_line":"        self.config.update({"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a710552_8820f99c","line":214,"updated":"2015-12-16 00:35:30.000000000","message":"Use BRIDGE_NAME_PREFIX constant from LB-agent","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d2a36e47fc24d1708a91fdda567775a2ef574750","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            env_desc, host_desc, temp_dir,"},{"line_number":212,"context_line":"            base_filename\u003d\"linuxbridge_agent.ini\""},{"line_number":213,"context_line":"        )"},{"line_number":214,"context_line":"        self.br_prefix_name \u003d \"brq\""},{"line_number":215,"context_line":"        self.br_suffix_name \u003d self._generate_br_suffix()"},{"line_number":216,"context_line":"        self.tunneling_vxlan \u003d self.env_desc.tunneling_enabled"},{"line_number":217,"context_line":"        self.config.update({"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_08094d31","line":214,"in_reply_to":"5a710552_8820f99c","updated":"2015-12-27 18:14:41.000000000","message":"Changed","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import fixtures"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.common import constants"},{"line_number":20,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent import\\"},{"line_number":21,"context_line":"    linuxbridge_neutron_agent as linuxbridge_agent"},{"line_number":22,"context_line":"from neutron.tests import base"},{"line_number":23,"context_line":"from neutron.tests.common import config_fixtures"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_f306761f","line":20,"updated":"2016-01-12 17:17:24.000000000","message":"nit: add space before \\","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import fixtures"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.common import constants"},{"line_number":20,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent import\\"},{"line_number":21,"context_line":"    linuxbridge_neutron_agent as linuxbridge_agent"},{"line_number":22,"context_line":"from neutron.tests import base"},{"line_number":23,"context_line":"from neutron.tests.common import config_fixtures"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_081d3c73","line":20,"in_reply_to":"da6ed579_f306761f","updated":"2016-01-18 22:37:42.000000000","message":"Done","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            env_desc, host_desc, temp_dir,"},{"line_number":214,"context_line":"            base_filename\u003d\"linuxbridge_agent.ini\""},{"line_number":215,"context_line":"        )"},{"line_number":216,"context_line":"        self.tunneling_vxlan \u003d self.env_desc.tunneling_enabled"},{"line_number":217,"context_line":"        self.config.update({"},{"line_number":218,"context_line":"            \u0027VXLAN\u0027: {"},{"line_number":219,"context_line":"                \u0027enable_vxlan\u0027: str(self.tunneling_vxlan),"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_b6d0ec54","line":216,"updated":"2016-01-12 17:17:24.000000000","message":"why setting the attribute for the fixture? do we use it anywhere else except this method?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            env_desc, host_desc, temp_dir,"},{"line_number":214,"context_line":"            base_filename\u003d\"linuxbridge_agent.ini\""},{"line_number":215,"context_line":"        )"},{"line_number":216,"context_line":"        self.tunneling_vxlan \u003d self.env_desc.tunneling_enabled"},{"line_number":217,"context_line":"        self.config.update({"},{"line_number":218,"context_line":"            \u0027VXLAN\u0027: {"},{"line_number":219,"context_line":"                \u0027enable_vxlan\u0027: str(self.tunneling_vxlan),"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_e3f7a9f3","line":216,"in_reply_to":"da6ed579_b6d0ec54","updated":"2016-01-18 22:37:42.000000000","message":"No. Fixed","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                }"},{"line_number":240,"context_line":"            })"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _generate_bridge_mappings(self, device_name\u003dNone):"},{"line_number":243,"context_line":"        if not device_name:"},{"line_number":244,"context_line":"            device_name \u003d base.get_rand_device_name("},{"line_number":245,"context_line":"                prefix\u003dlinuxbridge_agent.BRIDGE_NAME_PREFIX"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_96e28802","line":242,"updated":"2016-01-12 17:17:24.000000000","message":"where do we use its version without the device_name argument?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                }"},{"line_number":240,"context_line":"            })"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _generate_bridge_mappings(self, device_name\u003dNone):"},{"line_number":243,"context_line":"        if not device_name:"},{"line_number":244,"context_line":"            device_name \u003d base.get_rand_device_name("},{"line_number":245,"context_line":"                prefix\u003dlinuxbridge_agent.BRIDGE_NAME_PREFIX"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_6369798b","line":242,"in_reply_to":"da6ed579_96e28802","updated":"2016-01-18 22:37:42.000000000","message":"In fact nowhere. I changed it. Thx :)","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":208,"context_line":"class LinuxbridgeConfigFixture(ConfigFixture):"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def __init__(self, env_desc, host_desc, temp_dir, local_ip,"},{"line_number":211,"context_line":"                 physical_device_name\u003dNone):"},{"line_number":212,"context_line":"        super(LinuxbridgeConfigFixture, self).__init__("},{"line_number":213,"context_line":"            env_desc, host_desc, temp_dir,"},{"line_number":214,"context_line":"            base_filename\u003d\"linuxbridge_agent.ini\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_d74b28af","line":211,"range":{"start_line":211,"start_character":17,"end_line":211,"end_character":43},"updated":"2016-01-20 22:40:17.000000000","message":"Since this is sent down to \u0027_generate_bridge_mappings\u0027, which treats this variable as a definite string, this can\u0027t default to None (since it will create interface names collisions down the line).","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":208,"context_line":"class LinuxbridgeConfigFixture(ConfigFixture):"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def __init__(self, env_desc, host_desc, temp_dir, local_ip,"},{"line_number":211,"context_line":"                 physical_device_name\u003dNone):"},{"line_number":212,"context_line":"        super(LinuxbridgeConfigFixture, self).__init__("},{"line_number":213,"context_line":"            env_desc, host_desc, temp_dir,"},{"line_number":214,"context_line":"            base_filename\u003d\"linuxbridge_agent.ini\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_c0eef121","line":211,"range":{"start_line":211,"start_character":17,"end_line":211,"end_character":43},"in_reply_to":"9a68dd71_d74b28af","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                }"},{"line_number":239,"context_line":"            })"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _generate_bridge_mappings(self, device_name):"},{"line_number":242,"context_line":"        return \u0027physnet1:%s\u0027 % device_name"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_b7e554a9","line":241,"range":{"start_line":241,"start_character":34,"end_line":241,"end_character":39},"updated":"2016-01-20 22:40:17.000000000","message":"This function should be a staticmethod.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"697ccddac5ab62080c6c9a1de122e9df172cfd0f","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                }"},{"line_number":239,"context_line":"            })"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _generate_bridge_mappings(self, device_name):"},{"line_number":242,"context_line":"        return \u0027physnet1:%s\u0027 % device_name"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_c608bbdc","line":241,"range":{"start_line":241,"start_character":34,"end_line":241,"end_character":39},"in_reply_to":"5a5ae5dd_a0ddf515","updated":"2016-02-07 14:06:23.000000000","message":"Aye, sorry for misleading you here. My first comment was wrong and it should be changed back to a non-staticmethod. The convention says that all config generator functions should be non-static. Sorry for the confusion.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ede5c05ac4b137f2ff123488b652a8afaea57d0f","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                }"},{"line_number":239,"context_line":"            })"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _generate_bridge_mappings(self, device_name):"},{"line_number":242,"context_line":"        return \u0027physnet1:%s\u0027 % device_name"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_b8cfae27","line":241,"range":{"start_line":241,"start_character":34,"end_line":241,"end_character":39},"in_reply_to":"5a5ae5dd_c608bbdc","updated":"2016-02-08 22:08:24.000000000","message":"No problem. Reverted :)","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                }"},{"line_number":239,"context_line":"            })"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def _generate_bridge_mappings(self, device_name):"},{"line_number":242,"context_line":"        return \u0027physnet1:%s\u0027 % device_name"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_a0ddf515","line":241,"range":{"start_line":241,"start_character":34,"end_line":241,"end_character":39},"in_reply_to":"9a68dd71_b7e554a9","updated":"2016-02-06 21:55:22.000000000","message":"Ok. I changed it but above in class OVSConfigFixture is similar method which isn\u0027t staticmethod. I\u0027m not sure if we should maybe change it also?","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        super(ML2ConfigFixture, self).__init__("},{"line_number":115,"context_line":"            env_desc, hosts_desc, temp_dir, base_filename\u003d\u0027ml2_conf.ini\u0027)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        self.hosts_desc \u003d hosts_desc"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.config.update({"},{"line_number":120,"context_line":"            \u0027ml2\u0027: {"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_1b6e2596","line":117,"updated":"2016-02-16 12:07:49.000000000","message":"It\u0027s already saved in line 49.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        super(ML2ConfigFixture, self).__init__("},{"line_number":115,"context_line":"            env_desc, hosts_desc, temp_dir, base_filename\u003d\u0027ml2_conf.ini\u0027)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        self.hosts_desc \u003d hosts_desc"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.config.update({"},{"line_number":120,"context_line":"            \u0027ml2\u0027: {"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_f8ba4309","line":117,"in_reply_to":"dae33548_1b6e2596","updated":"2016-02-16 23:59:01.000000000","message":"not exactly. In L49 there is host_descripton and it was everywhere only one host description. This host_desc was not passed to ml2 config because it was not neccessary. I added it because I need to add linuxbrige mechanism driver only if at least one host_desc has got linuxbridge agent.\n\nWhy like that? because when I just added linuxbridge agent in line 117 then test TestQoSWithL2Population.test_supported_qos_rule_types was failing. It will be not neccessary to do it like that after my patch with QoS to LinuxBridge agent will be merged. Then I will even probably should to restore it to previous version with adding \"openvswitch,linuxbridge\" as mechanism drivers always.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                \u0027ovs_integration_bridge\u0027: integration_bridge,"},{"line_number":271,"context_line":"                \u0027external_network_bridge\u0027: self._generate_external_bridge(),"},{"line_number":272,"context_line":"                \u0027debug\u0027: \u0027True\u0027,"},{"line_number":273,"context_line":"                \u0027verbose\u0027: \u0027True\u0027,"},{"line_number":274,"context_line":"                \u0027test_namespace_suffix\u0027: self._generate_namespace_suffix(),"},{"line_number":275,"context_line":"            }"},{"line_number":276,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_fbe701e2","line":273,"range":{"start_line":273,"start_character":16,"end_line":273,"end_character":34},"updated":"2016-02-16 12:07:49.000000000","message":"No action required: I think verbose option is now deprecated, so we may want to clean it up later from here.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                \u0027interface_driver\u0027: (\u0027neutron.agent.linux.interface.\u0027"},{"line_number":282,"context_line":"                                     \u0027BridgeInterfaceDriver\u0027),"},{"line_number":283,"context_line":"                \u0027external_network_bridge\u0027: \u0027\u0027,"},{"line_number":284,"context_line":"                \u0027debug\u0027: \u0027True\u0027,"},{"line_number":285,"context_line":"                \u0027verbose\u0027: \u0027True\u0027,"},{"line_number":286,"context_line":"                \u0027test_namespace_suffix\u0027: self._generate_namespace_suffix(),"},{"line_number":287,"context_line":"            }"},{"line_number":288,"context_line":"        })"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_9bb995ce","line":286,"range":{"start_line":284,"start_character":0,"end_line":286,"end_character":75},"updated":"2016-02-16 12:07:49.000000000","message":"Those lines are in common for both agent types, let\u0027s move them into a common method.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                \u0027interface_driver\u0027: (\u0027neutron.agent.linux.interface.\u0027"},{"line_number":282,"context_line":"                                     \u0027BridgeInterfaceDriver\u0027),"},{"line_number":283,"context_line":"                \u0027external_network_bridge\u0027: \u0027\u0027,"},{"line_number":284,"context_line":"                \u0027debug\u0027: \u0027True\u0027,"},{"line_number":285,"context_line":"                \u0027verbose\u0027: \u0027True\u0027,"},{"line_number":286,"context_line":"                \u0027test_namespace_suffix\u0027: self._generate_namespace_suffix(),"},{"line_number":287,"context_line":"            }"},{"line_number":288,"context_line":"        })"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_582d2f45","line":286,"range":{"start_line":284,"start_character":0,"end_line":286,"end_character":75},"in_reply_to":"dae33548_9bb995ce","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @property"},{"line_number":140,"context_line":"    def mechanism_drivers(self):"},{"line_number":141,"context_line":"        mechanism_drivers \u003d \u0027openvswitch\u0027"},{"line_number":142,"context_line":"        for host_desc in self.hosts_desc:"},{"line_number":143,"context_line":"            if host_desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":144,"context_line":"                mechanism_drivers +\u003d \u0027,linuxbridge\u0027"},{"line_number":145,"context_line":"        if self.env_desc.l2_pop:"},{"line_number":146,"context_line":"            mechanism_drivers +\u003d \u0027,l2population\u0027"},{"line_number":147,"context_line":"        return mechanism_drivers"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_4cb6b1f9","line":144,"range":{"start_line":141,"start_character":0,"end_line":144,"end_character":51},"updated":"2016-02-18 10:54:38.000000000","message":"If you\u0027ll define two LB agents, you\u0027ll get mechanism_drivers\u003dopenvswitch,linuxbridge,linuxbridge\n\nHow about:\n\n mechanism_drivers \u003d set()\n for host_desc in self.hosts_desc:\n     if host_desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:\n         mechanism_drivers.add(\u0027linuxbridge)\n     elif host_desc.l2_agent_Type \u003d\u003d constants.AGENT_TYPE_OPENVSWITCH:\n         mechanism_drivers.add(\u0027openvswitch\u0027)\n if self.env_desc.l2_pop:\n     mechanism_drivers.add(\u0027l2population\u0027)\n\n return \u0027,\u0027.join(mechanism_drivers)","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @property"},{"line_number":140,"context_line":"    def mechanism_drivers(self):"},{"line_number":141,"context_line":"        mechanism_drivers \u003d \u0027openvswitch\u0027"},{"line_number":142,"context_line":"        for host_desc in self.hosts_desc:"},{"line_number":143,"context_line":"            if host_desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":144,"context_line":"                mechanism_drivers +\u003d \u0027,linuxbridge\u0027"},{"line_number":145,"context_line":"        if self.env_desc.l2_pop:"},{"line_number":146,"context_line":"            mechanism_drivers +\u003d \u0027,l2population\u0027"},{"line_number":147,"context_line":"        return mechanism_drivers"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_3299e7c4","line":144,"range":{"start_line":141,"start_character":0,"end_line":144,"end_character":51},"in_reply_to":"dae33548_4cb6b1f9","updated":"2016-02-18 21:07:13.000000000","message":"You\u0027re right. Fixed. Thx a lot","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2216c3fab7b9bc8b9420a724ea8176b682eea648","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        super(ML2ConfigFixture, self).__init__("},{"line_number":115,"context_line":"            env_desc, hosts_desc, temp_dir, base_filename\u003d\u0027ml2_conf.ini\u0027)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        self.hosts_desc \u003d hosts_desc"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.config.update({"},{"line_number":120,"context_line":"            \u0027ml2\u0027: {"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_4ff959c8","line":117,"updated":"2016-02-19 10:29:18.000000000","message":"Still not clear why you need to save the same value in line 49 and here, by different attribute name.","commit_id":"3f4486833df485edba66cb77c837e547f7f61e96"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7855ac0f8e45d49ec2c0d8fd54fd6da7c8b23092","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        super(ML2ConfigFixture, self).__init__("},{"line_number":115,"context_line":"            env_desc, hosts_desc, temp_dir, base_filename\u003d\u0027ml2_conf.ini\u0027)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        self.hosts_desc \u003d hosts_desc"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        self.config.update({"},{"line_number":120,"context_line":"            \u0027ml2\u0027: {"}],"source_content_type":"text/x-python","patch_set":25,"id":"bae84128_3a1d3110","line":117,"in_reply_to":"bae84128_4ff959c8","updated":"2016-02-19 10:39:38.000000000","message":"It\u0027s not neccessary but I wanted to distinguish that this is not description of one host but list of hosts. Do You think that it is not proper? I can change it. But please note that it is probably temporary solution - when QoS in Linuxbridge will be merged than it will be not neccessary :)","commit_id":"3f4486833df485edba66cb77c837e547f7f61e96"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e52758cdae12d1a4a9d1aab4a178f89734a85ac3","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @property"},{"line_number":140,"context_line":"    def mechanism_drivers(self):"},{"line_number":141,"context_line":"        mechanism_drivers \u003d set([\u0027openvswitch\u0027])"},{"line_number":142,"context_line":"        for host_desc in self.hosts_desc:"},{"line_number":143,"context_line":"            if host_desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":144,"context_line":"                mechanism_drivers.add(\u0027linuxbridge\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"bae84128_ba082193","line":141,"range":{"start_line":141,"start_character":28,"end_line":141,"end_character":48},"updated":"2016-02-19 10:44:09.000000000","message":"Nit: {\u0027openvswitch\u0027}","commit_id":"afbda366739478918bf5f990ba227e3774bd33cf"}],"neutron/tests/fullstack/resources/environment.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"40461a170ed00e3966c00f57df81df43e2d8f18d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            process.OVSAgentFixture("},{"line_number":115,"context_line":"                self.env_desc, self.host_desc,"},{"line_number":116,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":119,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":120,"context_line":"                config.L3ConfigFixture("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_3d71eaa8","line":117,"updated":"2015-11-24 02:19:27.000000000","message":"what happened with this l3_agent for linux bridge l2 agent?","commit_id":"f820f8a70403c260fb2d76c0e40c3ad9aeff4ef8"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"OVS_L2_AGENT \u003d \"ovs\""},{"line_number":33,"context_line":"LINUXBRIDGE_L2_AGENT \u003d \"linuxbridge\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_8555e21e","line":32,"updated":"2015-12-13 01:55:54.000000000","message":"No need to define these constants, they already exist in neutron.common.constants.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"OVS_L2_AGENT \u003d \"ovs\""},{"line_number":33,"context_line":"LINUXBRIDGE_L2_AGENT \u003d \"linuxbridge\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_7cca3770","line":32,"in_reply_to":"7a740942_8555e21e","updated":"2015-12-15 23:21:46.000000000","message":"Done","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    What agents should the host spawn? What mode should each agent operate"},{"line_number":55,"context_line":"    under?"},{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    def __init__(self, l2_agent\u003dOVS_L2_AGENT, l3_agent\u003dFalse, of_interface\u003d\u0027ovs-ofctl\u0027):"},{"line_number":58,"context_line":"        self.l2_agent \u003d l2_agent"},{"line_number":59,"context_line":"        self.l3_agent \u003d l3_agent"},{"line_number":60,"context_line":"        self.of_interface \u003d of_interface"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_c55f6a3f","line":57,"updated":"2015-12-13 01:55:54.000000000","message":"l2_agent should be the last parameter to retain backward compatibility.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    What agents should the host spawn? What mode should each agent operate"},{"line_number":55,"context_line":"    under?"},{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    def __init__(self, l2_agent\u003dOVS_L2_AGENT, l3_agent\u003dFalse, of_interface\u003d\u0027ovs-ofctl\u0027):"},{"line_number":58,"context_line":"        self.l2_agent \u003d l2_agent"},{"line_number":59,"context_line":"        self.l3_agent \u003d l3_agent"},{"line_number":60,"context_line":"        self.of_interface \u003d of_interface"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_3c302fe8","line":57,"in_reply_to":"7a740942_c55f6a3f","updated":"2015-12-15 23:21:46.000000000","message":"Done","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            process.OVSAgentFixture("},{"line_number":116,"context_line":"                self.env_desc, self.host_desc,"},{"line_number":117,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":120,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":121,"context_line":"                config.L3ConfigFixture("}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_6550f632","line":118,"updated":"2015-12-13 01:55:54.000000000","message":"So,  you can\u0027t use LB + L3 agent with this design? It seems like the L3 stuff should be common to the LB + OVS inits.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            process.OVSAgentFixture("},{"line_number":116,"context_line":"                self.env_desc, self.host_desc,"},{"line_number":117,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":120,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":121,"context_line":"                config.L3ConfigFixture("}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_5655dc4d","line":118,"in_reply_to":"7a740942_6550f632","updated":"2015-12-15 23:21:46.000000000","message":"For now I didn\u0027t even check if I can use L3 stuff with LB agent (probably yes). This is still in todo...","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            )"},{"line_number":155,"context_line":"        )"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def connect_to_internal_network_via_ovs_port(self):"},{"line_number":158,"context_line":"        self.physical_device_port \u003d self.useFixture("},{"line_number":159,"context_line":"            net_helpers.OVSPortFixture("},{"line_number":160,"context_line":"                bridge\u003dself.central_data_bridge"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_45329a11","line":157,"updated":"2015-12-13 01:55:54.000000000","message":"This would probably work with VXLAN, but not VLANs?","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            )"},{"line_number":155,"context_line":"        )"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def connect_to_internal_network_via_ovs_port(self):"},{"line_number":158,"context_line":"        self.physical_device_port \u003d self.useFixture("},{"line_number":159,"context_line":"            net_helpers.OVSPortFixture("},{"line_number":160,"context_line":"                bridge\u003dself.central_data_bridge"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_dc26cbb9","line":157,"in_reply_to":"7a740942_45329a11","updated":"2015-12-15 23:21:46.000000000","message":"Yep, For now in fact I\u0027m most focused on vxlan networks and still it is not working properly :/","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"454e041c472a56e27d43c40487e36f47f2c46b36","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.central_external_bridge \u003d central_external_bridge"},{"line_number":88,"context_line":"        self.agents \u003d {}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _setUp(self):"},{"line_number":91,"context_line":"        if self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_OVS:"},{"line_number":92,"context_line":"            self.setUpHostWithOvsAgent()"},{"line_number":93,"context_line":"        elif self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a710552_e885fd58","line":90,"updated":"2015-12-16 00:35:30.000000000","message":"Why not defining one subclass for OVS and one subclass for LB?","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.test_name \u003d test_name"},{"line_number":83,"context_line":"        self.neutron_config \u003d neutron_config"},{"line_number":84,"context_line":"        # Use reserved class E addresses"},{"line_number":85,"context_line":"        self.local_ip \u003d self.get_random_ip(\u0027240.0.0.2\u0027, \u0027240.0.0.254\u0027)"},{"line_number":86,"context_line":"        self.central_data_bridge \u003d central_data_bridge"},{"line_number":87,"context_line":"        self.central_external_bridge \u003d central_external_bridge"},{"line_number":88,"context_line":"        self.agents \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_96b928ec","line":85,"updated":"2016-01-12 17:17:24.000000000","message":"Could you explain the change?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.test_name \u003d test_name"},{"line_number":83,"context_line":"        self.neutron_config \u003d neutron_config"},{"line_number":84,"context_line":"        # Use reserved class E addresses"},{"line_number":85,"context_line":"        self.local_ip \u003d self.get_random_ip(\u0027240.0.0.2\u0027, \u0027240.0.0.254\u0027)"},{"line_number":86,"context_line":"        self.central_data_bridge \u003d central_data_bridge"},{"line_number":87,"context_line":"        self.central_external_bridge \u003d central_external_bridge"},{"line_number":88,"context_line":"        self.agents \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_837cad21","line":85,"in_reply_to":"da6ed579_96b928ec","updated":"2016-01-18 22:37:42.000000000","message":"problem is with \"hosts\" for linuxbridge agents because I need to add them in separate namespaces for example for connectivity tests. Because of that each agent need L3 connection to rabbitmq server which is spawned in global scope (with neutron-server). Simplest solution to achieve that was to configure \"local_ips\" for those two \"hosts\" in same L2 network as assigned IP for rabbitmq. Thanks that I don\u0027t have to configure any routings in namespaces and in global scope and communication is fine.\nIf You have any other (simpler) solutions, please tell me. I can change it if You want :)","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_OVS:"},{"line_number":92,"context_line":"            self.setUpHostWithOvsAgent()"},{"line_number":93,"context_line":"        elif self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":94,"context_line":"            self.setUpHostWithLinuxBrigeAgent()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def setUpHostWithOvsAgent(self):"},{"line_number":97,"context_line":"        agent_cfg_fixture \u003d config.OVSConfigFixture("}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_b6a1ccab","line":94,"updated":"2016-01-12 17:17:24.000000000","message":"LinuxBri*d*ge","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        if self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_OVS:"},{"line_number":92,"context_line":"            self.setUpHostWithOvsAgent()"},{"line_number":93,"context_line":"        elif self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":94,"context_line":"            self.setUpHostWithLinuxBrigeAgent()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def setUpHostWithOvsAgent(self):"},{"line_number":97,"context_line":"        agent_cfg_fixture \u003d config.OVSConfigFixture("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_e3b489d2","line":94,"in_reply_to":"da6ed579_b6a1ccab","updated":"2016-01-18 22:37:42.000000000","message":"Done","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        rabbitmq_port.link.set_up()"},{"line_number":325,"context_line":"        return rabbitmq_ip"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _get_rabbitmq_host_address(self):"},{"line_number":328,"context_line":"        for desc in self.hosts_desc:"},{"line_number":329,"context_line":"            if desc.l2_agent \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":330,"context_line":"                return \u0027240.0.0.1\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_3942ad3f","line":327,"updated":"2016-01-12 17:17:24.000000000","message":"that probably needs some explanation in comments. Personally, I don\u0027t understand why you need that for lb but not for ovs.","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        rabbitmq_port.link.set_up()"},{"line_number":325,"context_line":"        return rabbitmq_ip"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _get_rabbitmq_host_address(self):"},{"line_number":328,"context_line":"        for desc in self.hosts_desc:"},{"line_number":329,"context_line":"            if desc.l2_agent \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":330,"context_line":"                return \u0027240.0.0.1\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_39cd7fb7","line":327,"in_reply_to":"da6ed579_3942ad3f","updated":"2016-01-18 22:37:42.000000000","message":"Becasuse ovs agents are spawned in global scope (same as rabbitmq and neutron server). Linuxbridge agents are spawned in namespaces (\"host-xxxxxxxx\") because otherwise there are problems with duplicate names of e.g. vxlan interfaces created by two agents in connectivity tests.\nDue to this change Linuxbridge agent need L3 connectivity with rabbitmq server in global scope and this is for that.","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    under?"},{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":"    def __init__(self, l3_agent\u003dFalse, of_interface\u003d\u0027ovs-ofctl\u0027,"},{"line_number":53,"context_line":"                 l2_agent\u003dconstants.AGENT_TYPE_OVS):"},{"line_number":54,"context_line":"        self.l2_agent \u003d l2_agent"},{"line_number":55,"context_line":"        self.l3_agent \u003d l3_agent"},{"line_number":56,"context_line":"        self.of_interface \u003d of_interface"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_f2af5ae1","line":53,"range":{"start_line":53,"start_character":17,"end_line":53,"end_character":26},"updated":"2016-01-20 22:40:17.000000000","message":"Rename l2_agent to something like l2_agent_type or l2_agent_provider, to differentiate from the boolean l3_agent.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    under?"},{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":"    def __init__(self, l3_agent\u003dFalse, of_interface\u003d\u0027ovs-ofctl\u0027,"},{"line_number":53,"context_line":"                 l2_agent\u003dconstants.AGENT_TYPE_OVS):"},{"line_number":54,"context_line":"        self.l2_agent \u003d l2_agent"},{"line_number":55,"context_line":"        self.l3_agent \u003d l3_agent"},{"line_number":56,"context_line":"        self.of_interface \u003d of_interface"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_c09a7114","line":53,"range":{"start_line":53,"start_character":17,"end_line":53,"end_character":26},"in_reply_to":"9a68dd71_f2af5ae1","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.central_external_bridge \u003d central_external_bridge"},{"line_number":85,"context_line":"        self.agents \u003d {}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _setUp(self):"},{"line_number":88,"context_line":"        if self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_OVS:"},{"line_number":89,"context_line":"            self.setUpHostWithOvsAgent()"},{"line_number":90,"context_line":"        elif self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_b2bec2fd","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":15},"updated":"2016-01-20 22:40:17.000000000","message":"I\u0027m unsure about the road we are taking here, in regards to wether or not we want to subclass Host twice, once for each l2 agent (ie. OvsHost and LinuxBridgeHost). After all, we don\u0027t want to find ourselves in too much coupling in this code.\n\nThis is not a question the author should answer, but probably Assaf Muller, the testing LT (you can reach him in IRC under \u0027muller\u0027 if he doesn\u0027t respond to this) and other core members.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f45888b626b44b598e479963079f0e75313bf54b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.central_external_bridge \u003d central_external_bridge"},{"line_number":85,"context_line":"        self.agents \u003d {}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _setUp(self):"},{"line_number":88,"context_line":"        if self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_OVS:"},{"line_number":89,"context_line":"            self.setUpHostWithOvsAgent()"},{"line_number":90,"context_line":"        elif self.host_desc.l2_agent \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_bc1b5080","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":15},"in_reply_to":"9a68dd71_b2bec2fd","updated":"2016-02-07 20:06:12.000000000","message":"I\u0027m OK with the approach taken here for now. It\u0027s simple and easy to read. I made a few suggestions how to remove some of the differences between the two.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        self.connect_namespace_to_control_network()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        agent_cfg_fixture \u003d config.LinuxbridgeConfigFixture("},{"line_number":142,"context_line":"            self.env_desc, self.host_desc,"},{"line_number":143,"context_line":"            self.neutron_config.temp_dir,"},{"line_number":144,"context_line":"            self.local_ip,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_f213da5a","line":141,"range":{"start_line":141,"start_character":35,"end_line":141,"end_character":46},"updated":"2016-01-20 22:40:17.000000000","message":"I\u0027m going to be somewhat pedantic, but it should be named LinuxBridgeConfigFixture, with a capital Bridge. Probably other classes are at fault for this as well (like LinuxbridgeAgentFixture). Sorry for nitting.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        self.connect_namespace_to_control_network()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        agent_cfg_fixture \u003d config.LinuxbridgeConfigFixture("},{"line_number":142,"context_line":"            self.env_desc, self.host_desc,"},{"line_number":143,"context_line":"            self.neutron_config.temp_dir,"},{"line_number":144,"context_line":"            self.local_ip,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_63b067de","line":141,"range":{"start_line":141,"start_character":35,"end_line":141,"end_character":46},"in_reply_to":"9a68dd71_f213da5a","updated":"2016-02-06 21:55:22.000000000","message":"No problem :) Done here and in other places in fullstack tests","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            )"},{"line_number":155,"context_line":"        )"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def connect_namespace_to_control_network(self):"},{"line_number":158,"context_line":"        self.host_port \u003d self.useFixture("},{"line_number":159,"context_line":"            net_helpers.OVSPortFixture("},{"line_number":160,"context_line":"                bridge\u003dself.central_data_bridge,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_52b0a6f4","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":45},"updated":"2016-01-20 22:40:17.000000000","message":"Much code duplication we have, between this and the following one (connect_to_internal_network_via_ovs_port). You can probably get away with creating a private staticmethod that does most of the logic that is duplicated.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            )"},{"line_number":155,"context_line":"        )"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def connect_namespace_to_control_network(self):"},{"line_number":158,"context_line":"        self.host_port \u003d self.useFixture("},{"line_number":159,"context_line":"            net_helpers.OVSPortFixture("},{"line_number":160,"context_line":"                bridge\u003dself.central_data_bridge,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_b6cc5f36","line":157,"range":{"start_line":157,"start_character":8,"end_line":157,"end_character":45},"in_reply_to":"9a68dd71_52b0a6f4","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            net_helpers.OVSPortFixture("},{"line_number":160,"context_line":"                bridge\u003dself.central_data_bridge,"},{"line_number":161,"context_line":"                namespace\u003dself.host_namespace"},{"line_number":162,"context_line":"            )"},{"line_number":163,"context_line":"        ).port"},{"line_number":164,"context_line":"        # NOTE: This sets an IP address on the host\u0027s root namespace"},{"line_number":165,"context_line":"        # which is cleaned up when the device is deleted."},{"line_number":166,"context_line":"        self.host_port.addr.add(common_utils.ip_to_cidr(self.local_ip, 24))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_d20016ad","line":163,"range":{"start_line":162,"start_character":12,"end_line":163,"end_character":14},"updated":"2016-01-20 22:40:17.000000000","message":"Please put the marked segment at the end of line 161 (without newlines).","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            net_helpers.OVSPortFixture("},{"line_number":160,"context_line":"                bridge\u003dself.central_data_bridge,"},{"line_number":161,"context_line":"                namespace\u003dself.host_namespace"},{"line_number":162,"context_line":"            )"},{"line_number":163,"context_line":"        ).port"},{"line_number":164,"context_line":"        # NOTE: This sets an IP address on the host\u0027s root namespace"},{"line_number":165,"context_line":"        # which is cleaned up when the device is deleted."},{"line_number":166,"context_line":"        self.host_port.addr.add(common_utils.ip_to_cidr(self.local_ip, 24))"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_56a5eb01","line":163,"range":{"start_line":162,"start_character":12,"end_line":163,"end_character":14},"in_reply_to":"9a68dd71_d20016ad","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                self.env_desc, self.host_desc,"},{"line_number":115,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":118,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":119,"context_line":"                config.L3ConfigFixture("},{"line_number":120,"context_line":"                    self.env_desc, self.host_desc,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_5c5d7c45","line":117,"updated":"2016-02-07 20:03:33.000000000","message":"You\u0027re not setting up a L3 agent now in the LB case, even if the L3 agent was requested by the test topology. This block of code should be moved to _setUp so it happens regardless of the L2 agent.","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"f0f62f7244cab27e2949677ad92307d39d17a730","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                self.env_desc, self.host_desc,"},{"line_number":115,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":118,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":119,"context_line":"                config.L3ConfigFixture("},{"line_number":120,"context_line":"                    self.env_desc, self.host_desc,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_b8fb0147","line":117,"in_reply_to":"5a5ae5dd_1b8efc2d","updated":"2016-02-09 13:12:35.000000000","message":"I\u0027m with Assaf here - merging this code as it is now practically break the L3 agent for half of the deployments possible (those with ovs vs those with linuxbridge). We are not in the habbit of introducing broken code*, so this should be fixed right away.\n\nIn other words, if you plan on introducing support for linuxbridge - it should support all possible likely usages, such as linuxbridge+l3.\n\n*in purpose ;)","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                self.env_desc, self.host_desc,"},{"line_number":115,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":118,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":119,"context_line":"                config.L3ConfigFixture("},{"line_number":120,"context_line":"                    self.env_desc, self.host_desc,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_1b8efc2d","line":117,"in_reply_to":"5a5ae5dd_5c5d7c45","updated":"2016-02-08 22:08:30.000000000","message":"I\u0027m not sure if it should be moved to _setUp function because config of L3 agent will be probably littlebit different if it will be linuxbridge agent instead of ovs agent.\nYou are right that it should be added but I\u0027m not sure if I could do it quickly.\nI really want to provide \"basic\" support for linuxbridge l2 agent in fullstack and finish then this QoS support. Maybe it could be good idea to add this l3 agent to linuxbridge tests littlebit later? What You think about that?","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0e8ec3299d83f1d057a5ef235262480c9d0c10d5","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                self.env_desc, self.host_desc,"},{"line_number":115,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":118,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":119,"context_line":"                config.L3ConfigFixture("},{"line_number":120,"context_line":"                    self.env_desc, self.host_desc,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a57f1b5_a4dc5747","line":117,"in_reply_to":"5a5ae5dd_b8fb0147","updated":"2016-02-09 21:38:17.000000000","message":"I added code to configure and spawn L3agent process in \"host\" namespace. But AFAIU in test_connectivity it is not tested so it we should probably add some more tests for L3 agent and Linuxbridge L2 agent. Should I also do it in this patch? Or it will be later in another patch set added? What You think?","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        self.agents[\u0027ovs\u0027] \u003d agent"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    @property"},{"line_number":235,"context_line":"    def linuxbridge_agent(self):"},{"line_number":236,"context_line":"        return self.agents[\u0027linuxbridge\u0027]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    @linuxbridge_agent.setter"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_3c29a09e","line":235,"updated":"2016-02-07 20:03:33.000000000","message":"One way to remove the two fakeVM classes and collapse in to one, is to implement an \u0027l2_agent\u0027 getter here that would return either the OVS or LB agent for the host depending on what\u0027s configured. Then the L2 agent would have a shared interface:\n\ndef get_bridge(network_id):\n  if ovs:\n    return ovs_agent.br_int\n  return lb_agent.get_bridge(network_id)","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        self.agents[\u0027ovs\u0027] \u003d agent"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    @property"},{"line_number":235,"context_line":"    def linuxbridge_agent(self):"},{"line_number":236,"context_line":"        return self.agents[\u0027linuxbridge\u0027]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    @linuxbridge_agent.setter"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_91664deb","line":235,"in_reply_to":"5a5ae5dd_3c29a09e","updated":"2016-02-08 22:08:30.000000000","message":"It\u0027s good idea. I made something like that and I removed two different FakeXXXFullstackMachine classes. Now there is again only one class and it is \"universal\". Please check it it will be better now :)","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        self.wait_until_env_is_up()"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def _configure_port_for_rabbitmq(self):"},{"line_number":322,"context_line":"        rabbitmq_network \u003d self._get_rabbitmq_host_network()"},{"line_number":323,"context_line":"        if not rabbitmq_network:"},{"line_number":324,"context_line":"            return \"127.0.0.1\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_9c6f74fb","line":321,"updated":"2016-02-07 20:03:33.000000000","message":"All of this stuff should belong to the RabbitMQ fixture, no?","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        self.wait_until_env_is_up()"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def _configure_port_for_rabbitmq(self):"},{"line_number":322,"context_line":"        rabbitmq_network \u003d self._get_rabbitmq_host_network()"},{"line_number":323,"context_line":"        if not rabbitmq_network:"},{"line_number":324,"context_line":"            return \"127.0.0.1\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_d1de053d","line":321,"in_reply_to":"5a5ae5dd_9c6f74fb","updated":"2016-02-08 22:08:30.000000000","message":"I\u0027m not sure because IMHO it is preparation of environment for tests - rabbitmq is only using IP which environment will give to it. Also please note that environment here is choosing network used for \"hosts\" when it is linuxbridge agent host. It is not neccessary for ovs agents and then rabbit is listenning on 127.0.0.1 what is enough.","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        # together with rabbitmq server so default localhost address is fine"},{"line_number":342,"context_line":"        # for them:"},{"line_number":343,"context_line":"        for desc in self.hosts_desc:"},{"line_number":344,"context_line":"            if desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":345,"context_line":"                return self.get_random_network("},{"line_number":346,"context_line":"                    \"240.0.0.0\", \"255.255.255.254\", \"24\")"},{"line_number":347,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_5c76dcd7","line":344,"updated":"2016-02-07 20:03:33.000000000","message":"I would vote for setting up a RabbitMQ IP for both OVS and LB, that way we don\u0027t have to remember that it works differently depending on the L2 agent. Sure, you do something you don\u0027t have to in the OVS case, but it simplifies things overall.","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        # together with rabbitmq server so default localhost address is fine"},{"line_number":342,"context_line":"        # for them:"},{"line_number":343,"context_line":"        for desc in self.hosts_desc:"},{"line_number":344,"context_line":"            if desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":345,"context_line":"                return self.get_random_network("},{"line_number":346,"context_line":"                    \"240.0.0.0\", \"255.255.255.254\", \"24\")"},{"line_number":347,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_f18a211a","line":344,"in_reply_to":"5a5ae5dd_5c76dcd7","updated":"2016-02-08 22:08:30.000000000","message":"I\u0027m not sure if it will be good solution because for tests with ovs agent there is no any \"special\" interface on which this IP should be configured. Also ovs hosts have got /32 networks configured as \"local_ip\". In fact I even don\u0027t like too much this solution for linuxbridge agent but I think that there is no easiest solution in that case :/","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":2888,"name":"Mathieu Rohon","email":"mathieu.rohon@gmail.com","username":"mathieu-rohon"},"change_message_id":"b35d4a43b817fffffc8375530387f3ed3d62512e","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        return ovs_device"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def connect_namespace_to_control_network(self):"},{"line_number":170,"context_line":"        self.host_port \u003d self._connect_ovs_port("},{"line_number":171,"context_line":"            common_utils.ip_to_cidr(self.local_ip, 24)"},{"line_number":172,"context_line":"        )"},{"line_number":173,"context_line":"        self.host_port.link.set_up()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a57f1b5_7a54b653","line":170,"range":{"start_line":170,"start_character":30,"end_line":170,"end_character":47},"updated":"2016-02-09 21:59:08.000000000","message":"do we really have to use ovs for the underlying bridge between the two \"host\"? I suspect this to be the root cause of connectivity issues during lb/vxlan/l2pop tests.","commit_id":"e1a88b1c21b86bf43ed645f1f8a751f4ad1d8d2f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.l2_agent_type \u003d l2_agent_type"},{"line_number":57,"context_line":"        self.l3_agent \u003d l3_agent"},{"line_number":58,"context_line":"        self.of_interface \u003d of_interface"},{"line_number":59,"context_line":"        self.network_range \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Host(fixtures.Fixture):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_16471c1e","line":59,"updated":"2016-02-16 12:07:49.000000000","message":"Alternatively, you could just always initialize it with 240.0.0.0 range. Then you could avoid some conditional code below.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.l2_agent_type \u003d l2_agent_type"},{"line_number":57,"context_line":"        self.l3_agent \u003d l3_agent"},{"line_number":58,"context_line":"        self.of_interface \u003d of_interface"},{"line_number":59,"context_line":"        self.network_range \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class Host(fixtures.Fixture):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_b8227bff","line":59,"in_reply_to":"dae33548_16471c1e","updated":"2016-02-16 23:59:01.000000000","message":"But then it can be that IP 240.0.0.1 will be assigned on two ports (devices) in globalscope and rabbitmq from two different tests will be listening on this IP. I was not sure if it will no be possible \"trouble maker\" and that\u0027s why I wanted to make it more random. Should I change it to use always same network?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            )"},{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":162,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":163,"context_line":"                config.L3ConfigFixture("},{"line_number":164,"context_line":"                    self.env_desc, self.host_desc,"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_f66ef8c7","line":161,"updated":"2016-02-16 12:07:49.000000000","message":"The code to initialize L3 agent seems to duplicate the code from ovs case for the most part. Is there space for deduplication?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            )"},{"line_number":159,"context_line":"        )"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":162,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":163,"context_line":"                config.L3ConfigFixture("},{"line_number":164,"context_line":"                    self.env_desc, self.host_desc,"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_78a3d34f","line":161,"in_reply_to":"dae33548_f66ef8c7","updated":"2016-02-16 23:59:01.000000000","message":"I moved creation of L3agent process fixture to main _setUp() method.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":162,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":163,"context_line":"                config.L3ConfigFixture("},{"line_number":164,"context_line":"                    self.env_desc, self.host_desc,"},{"line_number":165,"context_line":"                    self.neutron_config.temp_dir))"},{"line_number":166,"context_line":"            self.l3_agent \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_96504c0c","line":163,"updated":"2016-02-16 12:07:49.000000000","message":"I see the class requires another argument (integration_bridge) in the code, but you don\u0027t pass it. Is the code path utilized anywhere?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":162,"context_line":"            l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":163,"context_line":"                config.L3ConfigFixture("},{"line_number":164,"context_line":"                    self.env_desc, self.host_desc,"},{"line_number":165,"context_line":"                    self.neutron_config.temp_dir))"},{"line_number":166,"context_line":"            self.l3_agent \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_ec30c4ea","line":163,"in_reply_to":"dae33548_96504c0c","updated":"2016-02-16 23:59:01.000000000","message":"integration_bridge argument is optional in L3ConfigFixture. As I read in docs in http://docs.openstack.org/liberty/networking-guide/scenario_legacy_lb.html this option is not neccessary for config with LinuxBridge agent. Maybe I\u0027m wrong and I should add it here also?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        )"},{"line_number":187,"context_line":"        self.host_port.link.set_up()"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def connect_to_internal_network_via_ovs_port(self):"},{"line_number":190,"context_line":"        self.physical_device_port \u003d self._connect_ovs_port("},{"line_number":191,"context_line":"            common_utils.ip_to_cidr(self.local_ip, 32)"},{"line_number":192,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_16d9dc83","line":189,"updated":"2016-02-16 12:07:49.000000000","message":"Doesn\u0027t seem to be used anywhere.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        )"},{"line_number":187,"context_line":"        self.host_port.link.set_up()"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def connect_to_internal_network_via_ovs_port(self):"},{"line_number":190,"context_line":"        self.physical_device_port \u003d self._connect_ovs_port("},{"line_number":191,"context_line":"            common_utils.ip_to_cidr(self.local_ip, 32)"},{"line_number":192,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_0c6408e2","line":189,"in_reply_to":"dae33548_16d9dc83","updated":"2016-02-16 23:59:01.000000000","message":"Thx. Probably it was one of my many \"tries\" to do it well and I forgot to remove it finally :)","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        net_helpers.create_patch_ports("},{"line_number":213,"context_line":"            self.central_external_bridge, host_external_bridge)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def get_local_ip(self):"},{"line_number":216,"context_line":"        if not self.host_desc.network_range:"},{"line_number":217,"context_line":"            return self.get_random_ip(\u0027240.0.0.1\u0027, \u0027240.255.255.254\u0027)"},{"line_number":218,"context_line":"        return self.get_random_ip("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_db703ddf","line":215,"range":{"start_line":215,"start_character":8,"end_line":215,"end_character":20},"updated":"2016-02-16 12:07:49.000000000","message":"maybe allocate_local_ip would be more explicit (suggesting that every call to the method allocates a new address).","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        net_helpers.create_patch_ports("},{"line_number":213,"context_line":"            self.central_external_bridge, host_external_bridge)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def get_local_ip(self):"},{"line_number":216,"context_line":"        if not self.host_desc.network_range:"},{"line_number":217,"context_line":"            return self.get_random_ip(\u0027240.0.0.1\u0027, \u0027240.255.255.254\u0027)"},{"line_number":218,"context_line":"        return self.get_random_ip("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_cc4ce044","line":215,"range":{"start_line":215,"start_character":8,"end_line":215,"end_character":20},"in_reply_to":"dae33548_db703ddf","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            self.central_external_bridge, host_external_bridge)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def get_local_ip(self):"},{"line_number":216,"context_line":"        if not self.host_desc.network_range:"},{"line_number":217,"context_line":"            return self.get_random_ip(\u0027240.0.0.1\u0027, \u0027240.255.255.254\u0027)"},{"line_number":218,"context_line":"        return self.get_random_ip("},{"line_number":219,"context_line":"            str(self.host_desc.network_range[2]),"},{"line_number":220,"context_line":"            str(self.host_desc.network_range[-1])"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_d6e014fd","line":217,"range":{"start_line":216,"start_character":8,"end_line":217,"end_character":69},"updated":"2016-02-16 12:07:49.000000000","message":"That special case could be avoided if you would initialize network_range with 240.0.0.0 range by default.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            self.central_external_bridge, host_external_bridge)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def get_local_ip(self):"},{"line_number":216,"context_line":"        if not self.host_desc.network_range:"},{"line_number":217,"context_line":"            return self.get_random_ip(\u0027240.0.0.1\u0027, \u0027240.255.255.254\u0027)"},{"line_number":218,"context_line":"        return self.get_random_ip("},{"line_number":219,"context_line":"            str(self.host_desc.network_range[2]),"},{"line_number":220,"context_line":"            str(self.host_desc.network_range[-1])"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_8c101803","line":217,"range":{"start_line":216,"start_character":8,"end_line":217,"end_character":69},"in_reply_to":"dae33548_d6e014fd","updated":"2016-02-16 23:59:01.000000000","message":"Please see my comment above. If You are sure that it will be not problem to use same IPs in different tests which are running in parallel then I can change it :)","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            str(self.host_desc.network_range[-1])"},{"line_number":221,"context_line":"        )"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def get_bridge(self, network_id\u003dNone):"},{"line_number":224,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":225,"context_line":"            return self.ovs_agent.br_int"},{"line_number":226,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_b604707e","line":223,"updated":"2016-02-16 12:07:49.000000000","message":"get_bridge -\u003e get_integration_bridge maybe? Because f.e. ovs agent has other bridges. Also, I see that all callers pass network_id, so there is no need for default value here, I guess.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            str(self.host_desc.network_range[-1])"},{"line_number":221,"context_line":"        )"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def get_bridge(self, network_id\u003dNone):"},{"line_number":224,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":225,"context_line":"            return self.ovs_agent.br_int"},{"line_number":226,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_cca4e0a7","line":223,"in_reply_to":"dae33548_b604707e","updated":"2016-02-16 23:59:01.000000000","message":"if ovs agent is current l2_agent on host then it is in fact integration bridge and then network_id is not neccessary. If l2_agent is linuxbridge then this is \"network\" bridge because there is not something like integration bridge in this agent. And in this second case network_id is required.\nI changed network_id parameter to not optional because for now it is used always with network_id","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    def _setUp(self):"},{"line_number":315,"context_line":"        self.temp_dir \u003d self.useFixture(fixtures.TempDir()).path"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        #we need this bridge before rabbit and neutron service will start:"},{"line_number":318,"context_line":"        self.central_data_bridge \u003d self.useFixture("},{"line_number":319,"context_line":"            net_helpers.OVSBridgeFixture(\u0027cnt-data\u0027)).bridge"},{"line_number":320,"context_line":"        self.central_external_bridge \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_7659485a","line":317,"range":{"start_line":317,"start_character":73,"end_line":317,"end_character":74},"updated":"2016-02-16 12:07:49.000000000","message":"It\u0027s uncommon to add trailing : to comments.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    def _setUp(self):"},{"line_number":315,"context_line":"        self.temp_dir \u003d self.useFixture(fixtures.TempDir()).path"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        #we need this bridge before rabbit and neutron service will start:"},{"line_number":318,"context_line":"        self.central_data_bridge \u003d self.useFixture("},{"line_number":319,"context_line":"            net_helpers.OVSBridgeFixture(\u0027cnt-data\u0027)).bridge"},{"line_number":320,"context_line":"        self.central_external_bridge \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_cccb4052","line":317,"range":{"start_line":317,"start_character":73,"end_line":317,"end_character":74},"in_reply_to":"dae33548_7659485a","updated":"2016-02-16 23:59:01.000000000","message":"Fixed here and in other comments :)","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        rabbitmq_network \u003d self._get_rabbitmq_host_network()"},{"line_number":348,"context_line":"        if not rabbitmq_network:"},{"line_number":349,"context_line":"            return \"127.0.0.1\""},{"line_number":350,"context_line":"        rabbitmq_ip \u003d str(rabbitmq_network[1])"},{"line_number":351,"context_line":"        rabbitmq_port \u003d ip_lib.IPDevice(self.central_data_bridge.br_name)"},{"line_number":352,"context_line":"        rabbitmq_port.addr.add(common_utils.ip_to_cidr(rabbitmq_ip, 24))"},{"line_number":353,"context_line":"        rabbitmq_port.link.set_up()"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_c1ba0ce1","line":350,"range":{"start_line":350,"start_character":22,"end_line":350,"end_character":46},"updated":"2016-02-16 12:07:49.000000000","message":"just wondering, anything specific about the first address? Could be a random one, right?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        rabbitmq_network \u003d self._get_rabbitmq_host_network()"},{"line_number":348,"context_line":"        if not rabbitmq_network:"},{"line_number":349,"context_line":"            return \"127.0.0.1\""},{"line_number":350,"context_line":"        rabbitmq_ip \u003d str(rabbitmq_network[1])"},{"line_number":351,"context_line":"        rabbitmq_port \u003d ip_lib.IPDevice(self.central_data_bridge.br_name)"},{"line_number":352,"context_line":"        rabbitmq_port.addr.add(common_utils.ip_to_cidr(rabbitmq_ip, 24))"},{"line_number":353,"context_line":"        rabbitmq_port.link.set_up()"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_4c2c5002","line":350,"range":{"start_line":350,"start_character":22,"end_line":350,"end_character":46},"in_reply_to":"dae33548_c1ba0ce1","updated":"2016-02-16 23:59:01.000000000","message":"yes, it could be random IP for rabbit here. But is it problem to use first one always for rabbit and then random from rest of range for agents?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        rabbitmq_port.link.set_up()"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        # we need to pass rabbitmq_network to hosts description also:"},{"line_number":356,"context_line":"        for desc in self.hosts_desc:"},{"line_number":357,"context_line":"            desc.network_range \u003d rabbitmq_network"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        return rabbitmq_ip"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_db867dda","line":356,"updated":"2016-02-16 12:07:49.000000000","message":"Why duplicating the same value in each description instead of accessing the value from env_desc directly when needed?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        rabbitmq_port.link.set_up()"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        # we need to pass rabbitmq_network to hosts description also:"},{"line_number":356,"context_line":"        for desc in self.hosts_desc:"},{"line_number":357,"context_line":"            desc.network_range \u003d rabbitmq_network"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        return rabbitmq_ip"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_eca60452","line":356,"in_reply_to":"dae33548_db867dda","updated":"2016-02-16 23:59:01.000000000","message":"You\u0027re right. I have no idea why I made it like that. Fixed :)","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _get_rabbitmq_host_network(self):"},{"line_number":362,"context_line":"        #NOTE(slaweq): We need to choose IP address on which rabbitmq will be"},{"line_number":363,"context_line":"        # available because LinuxBridge agents are spawned in own namespaces"},{"line_number":364,"context_line":"        # and need to know where is rabbitmq server for them. For ovs agent"},{"line_number":365,"context_line":"        # it is not necessary because agents are spawned in globalscope"},{"line_number":366,"context_line":"        # together with rabbitmq server so default localhost address is fine"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_2147781e","line":363,"range":{"start_line":363,"start_character":59,"end_line":363,"end_character":65},"updated":"2016-02-16 12:07:49.000000000","message":"in their own","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _get_rabbitmq_host_network(self):"},{"line_number":362,"context_line":"        #NOTE(slaweq): We need to choose IP address on which rabbitmq will be"},{"line_number":363,"context_line":"        # available because LinuxBridge agents are spawned in own namespaces"},{"line_number":364,"context_line":"        # and need to know where is rabbitmq server for them. For ovs agent"},{"line_number":365,"context_line":"        # it is not necessary because agents are spawned in globalscope"},{"line_number":366,"context_line":"        # together with rabbitmq server so default localhost address is fine"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_0fc07a7a","line":363,"range":{"start_line":363,"start_character":59,"end_line":363,"end_character":65},"in_reply_to":"dae33548_2147781e","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":361,"context_line":"    def _get_rabbitmq_host_network(self):"},{"line_number":362,"context_line":"        #NOTE(slaweq): We need to choose IP address on which rabbitmq will be"},{"line_number":363,"context_line":"        # available because LinuxBridge agents are spawned in own namespaces"},{"line_number":364,"context_line":"        # and need to know where is rabbitmq server for them. For ovs agent"},{"line_number":365,"context_line":"        # it is not necessary because agents are spawned in globalscope"},{"line_number":366,"context_line":"        # together with rabbitmq server so default localhost address is fine"},{"line_number":367,"context_line":"        # for them:"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_a161c8aa","line":364,"range":{"start_line":364,"start_character":33,"end_line":364,"end_character":60},"updated":"2016-02-16 12:07:49.000000000","message":"the rabbitmq server is listening","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":361,"context_line":"    def _get_rabbitmq_host_network(self):"},{"line_number":362,"context_line":"        #NOTE(slaweq): We need to choose IP address on which rabbitmq will be"},{"line_number":363,"context_line":"        # available because LinuxBridge agents are spawned in own namespaces"},{"line_number":364,"context_line":"        # and need to know where is rabbitmq server for them. For ovs agent"},{"line_number":365,"context_line":"        # it is not necessary because agents are spawned in globalscope"},{"line_number":366,"context_line":"        # together with rabbitmq server so default localhost address is fine"},{"line_number":367,"context_line":"        # for them:"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_6f5ca6ed","line":364,"range":{"start_line":364,"start_character":33,"end_line":364,"end_character":60},"in_reply_to":"dae33548_a161c8aa","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            if desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":370,"context_line":"                return self.get_random_network("},{"line_number":371,"context_line":"                    \"240.0.0.0\", \"240.255.255.255\", \"24\")"},{"line_number":372,"context_line":"        return None"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    @staticmethod"},{"line_number":375,"context_line":"    def get_random_network(low, high, netmask):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_810484c0","line":372,"updated":"2016-02-16 12:07:49.000000000","message":"That\u0027s implicit, you can save a line here ;)","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            if desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":370,"context_line":"                return self.get_random_network("},{"line_number":371,"context_line":"                    \"240.0.0.0\", \"240.255.255.255\", \"24\")"},{"line_number":372,"context_line":"        return None"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    @staticmethod"},{"line_number":375,"context_line":"    def get_random_network(low, high, netmask):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_6f13060e","line":372,"in_reply_to":"dae33548_810484c0","updated":"2016-02-16 23:59:01.000000000","message":"Done","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    self.neutron_config,"},{"line_number":102,"context_line":"                    self.l3_agent_cfg_fixture))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def setUpHostWithOvsAgent(self):"},{"line_number":105,"context_line":"        agent_cfg_fixture \u003d config.OVSConfigFixture("},{"line_number":106,"context_line":"            self.env_desc, self.host_desc, self.neutron_config.temp_dir,"},{"line_number":107,"context_line":"            self.local_ip)"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_0c0ae989","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":29},"updated":"2016-02-18 10:54:38.000000000","message":"Nit: I think this is just an ordinary method called from setUp() so why MixedCase?","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c36bdc549ac7710256bc7e4dc64b1899b7346591","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    self.neutron_config,"},{"line_number":102,"context_line":"                    self.l3_agent_cfg_fixture))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def setUpHostWithOvsAgent(self):"},{"line_number":105,"context_line":"        agent_cfg_fixture \u003d config.OVSConfigFixture("},{"line_number":106,"context_line":"            self.env_desc, self.host_desc, self.neutron_config.temp_dir,"},{"line_number":107,"context_line":"            self.local_ip)"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_072bb531","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":29},"in_reply_to":"bae84128_5a6d9531","updated":"2016-02-19 11:11:26.000000000","message":"Done","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    self.neutron_config,"},{"line_number":102,"context_line":"                    self.l3_agent_cfg_fixture))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def setUpHostWithOvsAgent(self):"},{"line_number":105,"context_line":"        agent_cfg_fixture \u003d config.OVSConfigFixture("},{"line_number":106,"context_line":"            self.env_desc, self.host_desc, self.neutron_config.temp_dir,"},{"line_number":107,"context_line":"            self.local_ip)"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_d2cb5ba2","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":29},"in_reply_to":"dae33548_0c0ae989","updated":"2016-02-18 21:07:13.000000000","message":"Sorry but I don\u0027t understand You? This method is called from setUp() when it is \"host\" with ovs agent. Can You explain me how You want to change it?","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"303e61b084880d79e5417806129eac2ebf442ea2","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    self.neutron_config,"},{"line_number":102,"context_line":"                    self.l3_agent_cfg_fixture))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def setUpHostWithOvsAgent(self):"},{"line_number":105,"context_line":"        agent_cfg_fixture \u003d config.OVSConfigFixture("},{"line_number":106,"context_line":"            self.env_desc, self.host_desc, self.neutron_config.temp_dir,"},{"line_number":107,"context_line":"            self.local_ip)"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_5a6d9531","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":29},"in_reply_to":"dae33548_d2cb5ba2","updated":"2016-02-19 10:42:48.000000000","message":"Sorry for not being clear. I meant that method name should be \"setup_host_with_ovs_agent\".","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":215,"context_line":"            return self.ovs_agent.br_int"},{"line_number":216,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"},{"line_number":217,"context_line":"            return self.useFixture("},{"line_number":218,"context_line":"                net_helpers.LinuxBridgeFixture("},{"line_number":219,"context_line":"                    prefix\u003dlb_agent.LinuxBridgeManager.get_bridge_name("},{"line_number":220,"context_line":"                        network_id),"},{"line_number":221,"context_line":"                    namespace\u003dself.host_namespace,"},{"line_number":222,"context_line":"                    prefix_is_full_name\u003dTrue)).bridge"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @staticmethod"},{"line_number":225,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_6c6c5508","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":53},"updated":"2016-02-18 10:54:38.000000000","message":"Will this create a new bridge fixture per get_bridge() call?","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"337376883962a58f9b3c7f5aabfe2abd550eb88a","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":215,"context_line":"            return self.ovs_agent.br_int"},{"line_number":216,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"},{"line_number":217,"context_line":"            return self.useFixture("},{"line_number":218,"context_line":"                net_helpers.LinuxBridgeFixture("},{"line_number":219,"context_line":"                    prefix\u003dlb_agent.LinuxBridgeManager.get_bridge_name("},{"line_number":220,"context_line":"                        network_id),"},{"line_number":221,"context_line":"                    namespace\u003dself.host_namespace,"},{"line_number":222,"context_line":"                    prefix_is_full_name\u003dTrue)).bridge"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @staticmethod"},{"line_number":225,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_c0d41349","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":53},"in_reply_to":"bae84128_07461523","updated":"2016-02-19 12:01:36.000000000","message":"Maybe I just don\u0027t know how linuxbridge agent works :) So in this case I create two FakeFullstackMachines on the same network then each machine should have different bridge on the same host? I though their taps will be attached to the same bridge.","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f0f9920a4701bc0c60ca11806ee990303dbeda41","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":215,"context_line":"            return self.ovs_agent.br_int"},{"line_number":216,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"},{"line_number":217,"context_line":"            return self.useFixture("},{"line_number":218,"context_line":"                net_helpers.LinuxBridgeFixture("},{"line_number":219,"context_line":"                    prefix\u003dlb_agent.LinuxBridgeManager.get_bridge_name("},{"line_number":220,"context_line":"                        network_id),"},{"line_number":221,"context_line":"                    namespace\u003dself.host_namespace,"},{"line_number":222,"context_line":"                    prefix_is_full_name\u003dTrue)).bridge"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @staticmethod"},{"line_number":225,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_76d18dfb","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":53},"in_reply_to":"bae84128_5b10f44e","updated":"2016-02-19 12:41:47.000000000","message":"But each FakeFullstackMachine with the same network_id and same host should be attached to the same bridge. And this code attempts to create bridge, that already exists and as per my local tests it fails. I\u0027ll send a patch to gerrit to prove it.","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8ef11f48f29b19e241bcdb172461d50fa51476ab","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":215,"context_line":"            return self.ovs_agent.br_int"},{"line_number":216,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"},{"line_number":217,"context_line":"            return self.useFixture("},{"line_number":218,"context_line":"                net_helpers.LinuxBridgeFixture("},{"line_number":219,"context_line":"                    prefix\u003dlb_agent.LinuxBridgeManager.get_bridge_name("},{"line_number":220,"context_line":"                        network_id),"},{"line_number":221,"context_line":"                    namespace\u003dself.host_namespace,"},{"line_number":222,"context_line":"                    prefix_is_full_name\u003dTrue)).bridge"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @staticmethod"},{"line_number":225,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_5b10f44e","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":53},"in_reply_to":"bae84128_c0d41349","updated":"2016-02-19 12:14:15.000000000","message":"Each FakeFullstackMachine with linuxbridge agent will be in separate namespace (called \"host-XXXX\") and in this namespace there will be created bridge called \"brq\u003cnetwork_id\u003e\". In this bridge on each \"host\" there will be tap interfaces added. That is the difference between Linuxbridge agent and ovs agent :)","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c36bdc549ac7710256bc7e4dc64b1899b7346591","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":215,"context_line":"            return self.ovs_agent.br_int"},{"line_number":216,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"},{"line_number":217,"context_line":"            return self.useFixture("},{"line_number":218,"context_line":"                net_helpers.LinuxBridgeFixture("},{"line_number":219,"context_line":"                    prefix\u003dlb_agent.LinuxBridgeManager.get_bridge_name("},{"line_number":220,"context_line":"                        network_id),"},{"line_number":221,"context_line":"                    namespace\u003dself.host_namespace,"},{"line_number":222,"context_line":"                    prefix_is_full_name\u003dTrue)).bridge"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @staticmethod"},{"line_number":225,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_07461523","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":53},"in_reply_to":"bae84128_fad589b9","updated":"2016-02-19 11:11:26.000000000","message":"It is like that because both agents are working in different way. In fact this method in both cases return bridge in which \"VMs\" will be connected but for Linuxbridge agent it is created depending of network_id, for ovs agent it is always integration bridge.\nDo You have maybe some other idea how to change it?","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"303e61b084880d79e5417806129eac2ebf442ea2","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":215,"context_line":"            return self.ovs_agent.br_int"},{"line_number":216,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"},{"line_number":217,"context_line":"            return self.useFixture("},{"line_number":218,"context_line":"                net_helpers.LinuxBridgeFixture("},{"line_number":219,"context_line":"                    prefix\u003dlb_agent.LinuxBridgeManager.get_bridge_name("},{"line_number":220,"context_line":"                        network_id),"},{"line_number":221,"context_line":"                    namespace\u003dself.host_namespace,"},{"line_number":222,"context_line":"                    prefix_is_full_name\u003dTrue)).bridge"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @staticmethod"},{"line_number":225,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":23,"id":"bae84128_fad589b9","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":53},"in_reply_to":"dae33548_52662bbb","updated":"2016-02-19 10:42:48.000000000","message":"The behavior seems weird to me: if host contains ovs agent then return its bridge. If host contains LB agent, create a new bridge. I think it should be consistent.","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        if \"ovs\" in self.agents.keys():"},{"line_number":215,"context_line":"            return self.ovs_agent.br_int"},{"line_number":216,"context_line":"        elif \"linuxbridge\" in self.agents.keys():"},{"line_number":217,"context_line":"            return self.useFixture("},{"line_number":218,"context_line":"                net_helpers.LinuxBridgeFixture("},{"line_number":219,"context_line":"                    prefix\u003dlb_agent.LinuxBridgeManager.get_bridge_name("},{"line_number":220,"context_line":"                        network_id),"},{"line_number":221,"context_line":"                    namespace\u003dself.host_namespace,"},{"line_number":222,"context_line":"                    prefix_is_full_name\u003dTrue)).bridge"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @staticmethod"},{"line_number":225,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_52662bbb","line":222,"range":{"start_line":217,"start_character":0,"end_line":222,"end_character":53},"in_reply_to":"dae33548_6c6c5508","updated":"2016-02-18 21:07:13.000000000","message":"Yes, each time it will return new bridge fixture. Is it something what can be \"trouble maker\" and You think that I should change it?","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    @staticmethod"},{"line_number":360,"context_line":"    def get_random_network(low, high, netmask):"},{"line_number":361,"context_line":"        ip \u003d Host.get_random_ip(low, high)"},{"line_number":362,"context_line":"        return netaddr.IPNetwork(ip + \"/\" + netmask)"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_c038c5d5","line":362,"range":{"start_line":362,"start_character":33,"end_line":362,"end_character":51},"updated":"2016-02-18 10:54:38.000000000","message":"Preferred is:\n\n \"%s/%s\" % (ip, netmask)","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    @staticmethod"},{"line_number":360,"context_line":"    def get_random_network(low, high, netmask):"},{"line_number":361,"context_line":"        ip \u003d Host.get_random_ip(low, high)"},{"line_number":362,"context_line":"        return netaddr.IPNetwork(ip + \"/\" + netmask)"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_72024fb5","line":362,"range":{"start_line":362,"start_character":33,"end_line":362,"end_character":51},"in_reply_to":"dae33548_c038c5d5","updated":"2016-02-18 21:07:13.000000000","message":"Done","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"47b02d9ae5e5264c78c4028984bb3690e14d6d89","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def _setUp(self):"},{"line_number":92,"context_line":"        if self.host_desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_OVS:"},{"line_number":93,"context_line":"            self.setup_host_with_ovs_agent()"},{"line_number":94,"context_line":"        elif self.host_desc.l2_agent_type \u003d\u003d constants.AGENT_TYPE_LINUXBRIDGE:"},{"line_number":95,"context_line":"            self.setup_host_with_linuxbridge_agent()"},{"line_number":96,"context_line":"        if self.host_desc.l3_agent:"}],"source_content_type":"text/x-python","patch_set":28,"id":"bae84128_80004bac","line":93,"range":{"start_line":93,"start_character":17,"end_line":93,"end_character":42},"updated":"2016-02-19 12:42:26.000000000","message":"Reads way better now ;)","commit_id":"b977435d82510a8e281ed1278580b3f3911b029c"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"90b801d88e5838dcef4a62f0d227cc52e39112ee","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":130,"context_line":"            self.l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":131,"context_line":"                config.L3ConfigFixture("},{"line_number":132,"context_line":"                    self.env_desc, self.host_desc,"},{"line_number":133,"context_line":"                    self.neutron_config.temp_dir,"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_b5eff61c","line":130,"range":{"start_line":130,"start_character":12,"end_line":130,"end_character":17},"updated":"2016-02-23 11:52:10.000000000","message":"This shouldn\u0027t be a \u0027self\u0027 variable since it\u0027s not accessed anywhere outside this function.","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"f27a1a1f5e58253ffe34def29b0b2ad5879aeba3","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":130,"context_line":"            self.l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":131,"context_line":"                config.L3ConfigFixture("},{"line_number":132,"context_line":"                    self.env_desc, self.host_desc,"},{"line_number":133,"context_line":"                    self.neutron_config.temp_dir,"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_600e4e3c","line":130,"range":{"start_line":130,"start_character":12,"end_line":130,"end_character":17},"in_reply_to":"bae84128_20a9e690","updated":"2016-02-23 12:26:04.000000000","message":"Weird how my find-grep didn\u0027t find this... :\u003c","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b637f5a7439292d8d1ba0d7063d1b79c6829bf2a","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                self.test_name, self.neutron_config, agent_cfg_fixture))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        if self.host_desc.l3_agent:"},{"line_number":130,"context_line":"            self.l3_agent_cfg_fixture \u003d self.useFixture("},{"line_number":131,"context_line":"                config.L3ConfigFixture("},{"line_number":132,"context_line":"                    self.env_desc, self.host_desc,"},{"line_number":133,"context_line":"                    self.neutron_config.temp_dir,"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_20a9e690","line":130,"range":{"start_line":130,"start_character":12,"end_line":130,"end_character":17},"in_reply_to":"bae84128_b5eff61c","updated":"2016-02-23 12:16:17.000000000","message":"L105","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"c5c4131d51d8212b0a13c563dffb6ebaf05f16b9","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        net_helpers.create_patch_ports("},{"line_number":206,"context_line":"            self.central_external_bridge, host_external_bridge)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def allocate_local_ip(self):"},{"line_number":209,"context_line":"        if not self.env_desc.network_range:"},{"line_number":210,"context_line":"            return self.get_random_ip(\u0027240.0.0.1\u0027, \u0027240.255.255.254\u0027)"},{"line_number":211,"context_line":"        return self.get_random_ip("}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_93f01169","line":208,"updated":"2016-02-23 10:29:14.000000000","message":"Wouldn\u0027t this possibly conflict if people starts using this function to allocate ips for tests since it can pick up the same IP address twice with no double checking?\n\nIf I\u0027m right, can you follow up on that ?","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a90a9c88aac19629ed42114867021ceea56646b7","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        net_helpers.create_patch_ports("},{"line_number":206,"context_line":"            self.central_external_bridge, host_external_bridge)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def allocate_local_ip(self):"},{"line_number":209,"context_line":"        if not self.env_desc.network_range:"},{"line_number":210,"context_line":"            return self.get_random_ip(\u0027240.0.0.1\u0027, \u0027240.255.255.254\u0027)"},{"line_number":211,"context_line":"        return self.get_random_ip("}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_72e2a430","line":208,"in_reply_to":"bae84128_6c9acf6f","updated":"2016-02-23 11:39:53.000000000","message":"True, jakub pointed me to it.\n\n/me is never happy at random failures even if remote, but still in this case, it would be cross-process prevented by the namespaces, so we could effectively protect from it.\n\nOk :)","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b3552c24d166d3ce836e7e31d5d6e0f78c8c0217","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        net_helpers.create_patch_ports("},{"line_number":206,"context_line":"            self.central_external_bridge, host_external_bridge)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def allocate_local_ip(self):"},{"line_number":209,"context_line":"        if not self.env_desc.network_range:"},{"line_number":210,"context_line":"            return self.get_random_ip(\u0027240.0.0.1\u0027, \u0027240.255.255.254\u0027)"},{"line_number":211,"context_line":"        return self.get_random_ip("}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_ae384e3e","line":208,"in_reply_to":"bae84128_93f01169","updated":"2016-02-23 10:44:37.000000000","message":"First part of this function (when self.env_desc.network_range is None) is same as it was before my patch. And ofcourse there is possibility that there will be some conflict with IPs allocated here.\nSecond part is taking IPs from network previously choosen from random range also. And here also it can be conflict sometimes.\n\nIMHO I could store in env_desc class already choosen IPs and check each new one if is already choosen or not. Would it be fine solution for You?","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"43b25a4bd773ae8bfe7bbff540e7000a79f27eff","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        net_helpers.create_patch_ports("},{"line_number":206,"context_line":"            self.central_external_bridge, host_external_bridge)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def allocate_local_ip(self):"},{"line_number":209,"context_line":"        if not self.env_desc.network_range:"},{"line_number":210,"context_line":"            return self.get_random_ip(\u0027240.0.0.1\u0027, \u0027240.255.255.254\u0027)"},{"line_number":211,"context_line":"        return self.get_random_ip("}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_6c9acf6f","line":208,"in_reply_to":"bae84128_ae384e3e","updated":"2016-02-23 10:56:08.000000000","message":"Ajo: feels like deja-vu. We\u0027ve already discussed this when introducing fullstack tests. https://review.openstack.org/#/c/190786/13/neutron/tests/fullstack/resources/environment.py","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"90b801d88e5838dcef4a62f0d227cc52e39112ee","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                        namespace\u003dself.host_namespace,"},{"line_number":228,"context_line":"                        prefix_is_full_name\u003dTrue)).bridge"},{"line_number":229,"context_line":"                self.network_bridges[network_id] \u003d bridge"},{"line_number":230,"context_line":"        return bridge"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @staticmethod"},{"line_number":233,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_75b9ee14","line":230,"range":{"start_line":230,"start_character":8,"end_line":230,"end_character":21},"updated":"2016-02-23 11:52:10.000000000","message":"This should be indented one more tab to the right.","commit_id":"2254acef062241b43d7138c981551183fc4a8930"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b637f5a7439292d8d1ba0d7063d1b79c6829bf2a","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                        namespace\u003dself.host_namespace,"},{"line_number":228,"context_line":"                        prefix_is_full_name\u003dTrue)).bridge"},{"line_number":229,"context_line":"                self.network_bridges[network_id] \u003d bridge"},{"line_number":230,"context_line":"        return bridge"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @staticmethod"},{"line_number":233,"context_line":"    def get_random_ip(low, high):"}],"source_content_type":"text/x-python","patch_set":29,"id":"bae84128_80a8b278","line":230,"range":{"start_line":230,"start_character":8,"end_line":230,"end_character":21},"in_reply_to":"bae84128_75b9ee14","updated":"2016-02-23 12:16:17.000000000","message":"Or better: the elif on L219 is not necessary :)","commit_id":"2254acef062241b43d7138c981551183fc4a8930"}],"neutron/tests/fullstack/resources/machine.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                hostname\u003dself.host_binding)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        mac_address \u003d self.neutron_port[\u0027mac_address\u0027]"},{"line_number":43,"context_line":"        self.neutron_port_id \u003d self.neutron_port[\u0027id\u0027]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        self.port \u003d self.useFixture("},{"line_number":46,"context_line":"            net_helpers.PortFixture.get("}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_053812ed","line":43,"updated":"2015-12-13 01:55:54.000000000","message":"This seems like an unnecessary switch \u003dp","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                hostname\u003dself.host_binding)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        mac_address \u003d self.neutron_port[\u0027mac_address\u0027]"},{"line_number":43,"context_line":"        self.neutron_port_id \u003d self.neutron_port[\u0027id\u0027]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        self.port \u003d self.useFixture("},{"line_number":46,"context_line":"            net_helpers.PortFixture.get("}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_dcb6cbdb","line":43,"in_reply_to":"7a740942_053812ed","updated":"2015-12-15 23:21:46.000000000","message":"Done","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            network_id"},{"line_number":98,"context_line":"        )"},{"line_number":99,"context_line":"        print \"SK: creating bridge %s\" %br_name"},{"line_number":100,"context_line":"        self.bridge \u003d net_helpers.LinuxBridgeFixture("},{"line_number":101,"context_line":"            self.linuxbridge.agent_cfg_fixture.get_br_prefix_name()"},{"line_number":102,"context_line":"        ).bridge"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_25142e4b","line":100,"updated":"2015-12-13 01:55:54.000000000","message":"Kind of odd that for a LB machine self.bridge is initialized in __init__ but that\u0027s not the case for an OVS machine.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            network_id"},{"line_number":98,"context_line":"        )"},{"line_number":99,"context_line":"        print \"SK: creating bridge %s\" %br_name"},{"line_number":100,"context_line":"        self.bridge \u003d net_helpers.LinuxBridgeFixture("},{"line_number":101,"context_line":"            self.linuxbridge.agent_cfg_fixture.get_br_prefix_name()"},{"line_number":102,"context_line":"        ).bridge"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_dc124bb4","line":100,"in_reply_to":"7a740942_25142e4b","updated":"2015-12-15 23:21:46.000000000","message":"Now bridge is created in setUp method","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        print \"SK: creating bridge %s\" %br_name"},{"line_number":100,"context_line":"        self.bridge \u003d net_helpers.LinuxBridgeFixture("},{"line_number":101,"context_line":"            self.linuxbridge.agent_cfg_fixture.get_br_prefix_name()"},{"line_number":102,"context_line":"        ).bridge"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_852c02ad","line":102,"updated":"2015-12-13 01:55:54.000000000","message":"What is this bridge connected to when using VLANs? I must be missing something, isn\u0027t it just isolated? I don\u0027t understand why do you need a per-VM bridge anyway, isn\u0027t this VM supposed to be connected to a per-network LB?","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        print \"SK: creating bridge %s\" %br_name"},{"line_number":100,"context_line":"        self.bridge \u003d net_helpers.LinuxBridgeFixture("},{"line_number":101,"context_line":"            self.linuxbridge.agent_cfg_fixture.get_br_prefix_name()"},{"line_number":102,"context_line":"        ).bridge"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_dcc7ab10","line":102,"in_reply_to":"7a740942_852c02ad","updated":"2015-12-15 23:21:46.000000000","message":"I need one bridge per network per agent (so it has got some suffix now). In such bridge there is veth port which represents tap device from real world. Second end of this veth is putted in namespace which represents VM in real world. I hope it will work like that :)","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"454e041c472a56e27d43c40487e36f47f2c46b36","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class FakeFullstackMachine(machine_fixtures.FakeMachineBase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":25,"context_line":"                 neutron_port\u003dNone):"},{"line_number":26,"context_line":"        super(FakeFullstackMachine, self).__init__()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a710552_288c657e","line":23,"updated":"2015-12-16 00:35:30.000000000","message":"unrelated","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"454e041c472a56e27d43c40487e36f47f2c46b36","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                self.bridge, self.namespace, mac_address,"},{"line_number":122,"context_line":"                self.neutron_port[\u0027id\u0027])).port"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        self._ip \u003d self.neutron_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        subnet_id \u003d self.neutron_port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":127,"context_line":"        subnet \u003d self.safe_client.client.show_subnet(subnet_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a710552_68c02d7d","line":124,"updated":"2015-12-16 00:35:30.000000000","message":"A lot of duplicated code","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d2a36e47fc24d1708a91fdda567775a2ef574750","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                self.bridge, self.namespace, mac_address,"},{"line_number":122,"context_line":"                self.neutron_port[\u0027id\u0027])).port"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        self._ip \u003d self.neutron_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        subnet_id \u003d self.neutron_port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":127,"context_line":"        subnet \u003d self.safe_client.client.show_subnet(subnet_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a7b0d38_f342b23d","line":124,"in_reply_to":"5a710552_68c02d7d","updated":"2015-12-27 18:14:41.000000000","message":"I moved some code to base class and now should be less duplicates :)","commit_id":"d005d5ce25a87c6641a5c0ae8e914343a586a025"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                self.neutron_port[\u0027id\u0027])).port"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self._ip \u003d self.neutron_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        subnet_id \u003d self.neutron_port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":52,"context_line":"        subnet \u003d self.safe_client.client.show_subnet(subnet_id)"},{"line_number":53,"context_line":"        prefixlen \u003d netaddr.IPNetwork(subnet[\u0027subnet\u0027][\u0027cidr\u0027]).prefixlen"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_f962d5d7","line":50,"updated":"2016-01-12 17:17:24.000000000","message":"those newline additions should be revised","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                self.neutron_port[\u0027id\u0027])).port"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        self._ip \u003d self.neutron_port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        subnet_id \u003d self.neutron_port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]"},{"line_number":52,"context_line":"        subnet \u003d self.safe_client.client.show_subnet(subnet_id)"},{"line_number":53,"context_line":"        prefixlen \u003d netaddr.IPNetwork(subnet[\u0027subnet\u0027][\u0027cidr\u0027]).prefixlen"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_43779502","line":50,"in_reply_to":"da6ed579_f962d5d7","updated":"2016-01-18 22:37:42.000000000","message":"I removed it","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class FakeFullstackMachine(machine_fixtures.FakeMachineBase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":25,"context_line":"                 neutron_port\u003dNone):"},{"line_number":26,"context_line":"        super(FakeFullstackMachine, self).__init__()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_32b092dd","line":23,"updated":"2016-01-20 22:40:17.000000000","message":"Unrelated new line :)","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class FakeFullstackMachine(machine_fixtures.FakeMachineBase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":25,"context_line":"                 neutron_port\u003dNone):"},{"line_number":26,"context_line":"        super(FakeFullstackMachine, self).__init__()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_b6f3ff72","line":23,"in_reply_to":"9a68dd71_32b092dd","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class FakeFullstackMachine(machine_fixtures.FakeMachineBase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":25,"context_line":"                 neutron_port\u003dNone):"},{"line_number":26,"context_line":"        super(FakeFullstackMachine, self).__init__()"},{"line_number":27,"context_line":"        self.host_binding \u003d host.hostname"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_12246e0b","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":17},"updated":"2016-01-20 22:40:17.000000000","message":"The part where you deleted the initialization of \u0027self.bridge\u0027 without letting anyone in FakeFullstackMachine know about it, implicitly makes this class an abstract one. You should probably declare it so using the proper decorators.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"697ccddac5ab62080c6c9a1de122e9df172cfd0f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class FakeFullstackMachine(machine_fixtures.FakeMachineBase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":25,"context_line":"                 neutron_port\u003dNone):"},{"line_number":26,"context_line":"        super(FakeFullstackMachine, self).__init__()"},{"line_number":27,"context_line":"        self.host_binding \u003d host.hostname"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_46804bf5","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":17},"in_reply_to":"5a5ae5dd_1678d3c3","updated":"2016-02-07 14:06:23.000000000","message":"Sorry, I\u0027ll try to explain this more clearly: the current implementation of the class FakeFullstackMachine depends on the \u0027bridge\u0027 attribute (so \u0027self.bridge\u0027) in order to work correctly.\n\nThis patch delegates the creation of the attribute to the subclasses (FakeFullstackOvsMachine and FakeFullstackLinuxBridgeMachine). While this is a valid (and welcome) change, you will agree with me that now initialising a new object of time FakeFullstackMachine() will not work. This is because somewhere down the line, some other class will depend on \u0027self.bridge\u0027 which does not exist in this class. Instead, the user must inherit from FakeFullstackMachine, declare \u0027self.bridge\u0027 there, and use that inheriting class instead (which is what you did in the respective subclasses successfully).\n\nWhat I described is called \"Abstract Class\" [1] - since FakeFullstackMachine can no longer be instantiated, it should be declared as such. Search the codebase for \u0027abc.ABCMeta\u0027 to see how it should be done :)\n\n[1]: https://en.wikipedia.org/wiki/Abstract_type","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ede5c05ac4b137f2ff123488b652a8afaea57d0f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class FakeFullstackMachine(machine_fixtures.FakeMachineBase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":25,"context_line":"                 neutron_port\u003dNone):"},{"line_number":26,"context_line":"        super(FakeFullstackMachine, self).__init__()"},{"line_number":27,"context_line":"        self.host_binding \u003d host.hostname"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_7828569a","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":17},"in_reply_to":"5a5ae5dd_46804bf5","updated":"2016-02-08 22:08:24.000000000","message":"Ok. Now I understand what You mean :) thx for much more accurate explanation.\nBut I also used to tips from Assaf in PS8 and I now removed two FakeXXXFullstackMachine classes. I hope it will be better for You now :)","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class FakeFullstackMachine(machine_fixtures.FakeMachineBase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":25,"context_line":"                 neutron_port\u003dNone):"},{"line_number":26,"context_line":"        super(FakeFullstackMachine, self).__init__()"},{"line_number":27,"context_line":"        self.host_binding \u003d host.hostname"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_1678d3c3","line":24,"range":{"start_line":24,"start_character":8,"end_line":24,"end_character":17},"in_reply_to":"9a68dd71_12246e0b","updated":"2016-02-06 21:55:22.000000000","message":"Sorry but I don\u0027t understand what You mean here :/ How I should make __init__ method as static method? Can You maybe give me example of what You want here? :)","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                network_id\u003dself.network_id,"},{"line_number":39,"context_line":"                tenant_id\u003dself.tenant_id,"},{"line_number":40,"context_line":"                hostname\u003dself.host_binding)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        mac_address \u003d self.neutron_port[\u0027mac_address\u0027]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self.port \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_9265be46","line":41,"updated":"2016-01-20 22:40:17.000000000","message":"Why so many newlines in this file added by this patch?\n\nAlso, why did you remove self.neutron_port_id?","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                network_id\u003dself.network_id,"},{"line_number":39,"context_line":"                tenant_id\u003dself.tenant_id,"},{"line_number":40,"context_line":"                hostname\u003dself.host_binding)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        mac_address \u003d self.neutron_port[\u0027mac_address\u0027]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self.port \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_f603b70d","line":41,"in_reply_to":"9a68dd71_9265be46","updated":"2016-02-06 21:55:22.000000000","message":"Empty line removed. Probably it was added \"by mistake\" in one of patch sets.\nAbout self.neutron_port_id I removed it because Assaf Muller wanted it in PS3 (see his comment on this file in PS3)","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class FakeFullstackOvsMachine(FakeFullstackMachine):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":80,"context_line":"                 neutron_port\u003dNone):"},{"line_number":81,"context_line":"        super(FakeFullstackOvsMachine, self).__init__("}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_52a42656","line":78,"updated":"2016-01-20 22:40:17.000000000","message":"Please add in the docstring of both this class and of FakeFullstackLinuxbridgeMachine that it\u0027s expected that \u0027host\u0027 has been initialised with \u0027host_desc.l2_agent \u003d\u003d XXX\u0027. Also, since this creates a great coupling, we should probably throw an exception if the l2_agent that was used to initialize the host is not as expected.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"0d642b54e1de7b0b975e45e52220b7a63855ea61","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class FakeFullstackOvsMachine(FakeFullstackMachine):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":80,"context_line":"                 neutron_port\u003dNone):"},{"line_number":81,"context_line":"        super(FakeFullstackOvsMachine, self).__init__("}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_b8c78163","line":78,"in_reply_to":"5a5ae5dd_208dfcd5","updated":"2016-02-09 12:55:12.000000000","message":"The general idea is to to try to protect the innocent user\u0027s mistakes that we can predict. In this case, although current code doesn\u0027t try to initialize the code with bad variables, future code-writers might try to do it - the docstrings and documentations are for us and them, not the current code.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9cc1cf1597d4a4e9dd33a1a763ad00b9be986877","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class FakeFullstackOvsMachine(FakeFullstackMachine):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":80,"context_line":"                 neutron_port\u003dNone):"},{"line_number":81,"context_line":"        super(FakeFullstackOvsMachine, self).__init__("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a57f1b5_a7a9c4e1","line":78,"in_reply_to":"5a5ae5dd_b8c78163","updated":"2016-02-09 17:37:39.000000000","message":"Ok. But in current patchset there is only one class FakeFullstackMachine and both l2 agents can be used there so I think that this docstring is not necessary anymore here","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"class FakeFullstackOvsMachine(FakeFullstackMachine):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":80,"context_line":"                 neutron_port\u003dNone):"},{"line_number":81,"context_line":"        super(FakeFullstackOvsMachine, self).__init__("}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_208dfcd5","line":78,"in_reply_to":"9a68dd71_52a42656","updated":"2016-02-06 21:55:22.000000000","message":"I added docstring to both classes. I\u0027m not sure if raising exception is really neccessary because it will not be initialized with wrong type of agent in host_desc because of taking self.bridge object","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.bridge \u003d host.ovs_agent.br_int"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class FakeFullstackLinuxbridgeMachine(FakeFullstackMachine):"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":90,"context_line":"                 neutron_port\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_12d9cef3","line":87,"range":{"start_line":87,"start_character":6,"end_line":87,"end_character":37},"updated":"2016-01-20 22:40:17.000000000","message":"Rename to FakeFullstackLinuxBridgeMachine","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.bridge \u003d host.ovs_agent.br_int"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class FakeFullstackLinuxbridgeMachine(FakeFullstackMachine):"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def __init__(self, host, network_id, tenant_id, safe_client,"},{"line_number":90,"context_line":"                 neutron_port\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_790ed835","line":87,"range":{"start_line":87,"start_character":6,"end_line":87,"end_character":37},"in_reply_to":"9a68dd71_12d9cef3","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            sleep\u003d3)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class FakeFullstackOvsMachine(FakeFullstackMachine):"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    \"\"\"Implement model of fake machine with Openvswitch l2 agent on it."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_e931085b","line":75,"updated":"2016-02-07 20:03:33.000000000","message":"FakeFullstackMachine models a VM/container. VMs don\u0027t change their type according to the L2 agent on the hypervisor they\u0027re running on. I think it\u0027s wrong for these subclasses. I also think it\u0027s wrong for a VM to create its bridge (Line 110). There should only be one type of VM, and it should accept an already created bridge.","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            sleep\u003d3)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class FakeFullstackOvsMachine(FakeFullstackMachine):"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    \"\"\"Implement model of fake machine with Openvswitch l2 agent on it."},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_917acd22","line":75,"in_reply_to":"5a5ae5dd_e931085b","updated":"2016-02-08 22:08:30.000000000","message":"It is changed now","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def block_until_boot(self):"},{"line_number":72,"context_line":"        utils.wait_until_true("},{"line_number":73,"context_line":"            lambda: (self.safe_client.client.show_port(self.neutron_port[\u0027id\u0027])"},{"line_number":74,"context_line":"                     [\u0027port\u0027][\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027),"},{"line_number":75,"context_line":"            sleep\u003d3)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_e15d907a","line":73,"updated":"2016-02-16 12:07:49.000000000","message":"I don\u0027t mind much, but some people don\u0027t like when there are changes that do not belong to the patch like that one.","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def block_until_boot(self):"},{"line_number":72,"context_line":"        utils.wait_until_true("},{"line_number":73,"context_line":"            lambda: (self.safe_client.client.show_port(self.neutron_port[\u0027id\u0027])"},{"line_number":74,"context_line":"                     [\u0027port\u0027][\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027),"},{"line_number":75,"context_line":"            sleep\u003d3)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_18a1e7a3","line":73,"in_reply_to":"dae33548_e15d907a","updated":"2016-02-16 23:59:01.000000000","message":"But Assaf Muller wanted that in PS3 so I changed it for him :)","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"}],"neutron/tests/fullstack/resources/process.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import fixtures"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent import\\"},{"line_number":22,"context_line":"    linuxbridge_neutron_agent as linuxbridge_agent"},{"line_number":23,"context_line":"from neutronclient.common import exceptions as nc_exc"},{"line_number":24,"context_line":"from neutronclient.v2_0 import client"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_5994418a","line":21,"updated":"2016-01-12 17:17:24.000000000","message":"space before \\ please","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import fixtures"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent import\\"},{"line_number":22,"context_line":"    linuxbridge_neutron_agent as linuxbridge_agent"},{"line_number":23,"context_line":"from neutronclient.common import exceptions as nc_exc"},{"line_number":24,"context_line":"from neutronclient.v2_0 import client"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_c3594590","line":21,"in_reply_to":"da6ed579_5994418a","updated":"2016-01-18 22:37:42.000000000","message":"Done","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        timestamp \u003d datetime.datetime.now().strftime(\"%Y-%m-%d--%H-%M-%S-%f\")"},{"line_number":61,"context_line":"        log_file \u003d \"%s--%s.log\" % (self.process_name, timestamp)"},{"line_number":62,"context_line":"        cmd \u003d []"},{"line_number":63,"context_line":"        if self.namespace:"},{"line_number":64,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace]"},{"line_number":65,"context_line":"        cmd +\u003d [spawn.find_executable(self.exec_name),"},{"line_number":66,"context_line":"               \u0027--log-dir\u0027, log_dir,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_d93cb195","line":63,"updated":"2016-01-12 17:17:24.000000000","message":"you probably should instead just pass namespace\u003d into AsyncProcess","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        timestamp \u003d datetime.datetime.now().strftime(\"%Y-%m-%d--%H-%M-%S-%f\")"},{"line_number":61,"context_line":"        log_file \u003d \"%s--%s.log\" % (self.process_name, timestamp)"},{"line_number":62,"context_line":"        cmd \u003d []"},{"line_number":63,"context_line":"        if self.namespace:"},{"line_number":64,"context_line":"            cmd \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.namespace]"},{"line_number":65,"context_line":"        cmd +\u003d [spawn.find_executable(self.exec_name),"},{"line_number":66,"context_line":"               \u0027--log-dir\u0027, log_dir,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_03ee7d8b","line":63,"in_reply_to":"da6ed579_d93cb195","updated":"2016-01-18 22:37:42.000000000","message":"True. Done","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        )"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":204,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":205,"context_line":"        return bridge_name"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_39214d4e","line":204,"updated":"2016-01-12 17:17:24.000000000","message":"that 11 thing is too much magic for my taste","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        )"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":204,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":205,"context_line":"        return bridge_name"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_f994c743","line":204,"in_reply_to":"da6ed579_39214d4e","updated":"2016-01-18 22:37:42.000000000","message":"it is copied from linuxbridge_neutron_agent.LinuxBridgeManager.get_bridge_name(). Please see L120 in https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import fixtures"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent import \\"},{"line_number":22,"context_line":"    linuxbridge_neutron_agent as linuxbridge_agent"},{"line_number":23,"context_line":"from neutronclient.common import exceptions as nc_exc"},{"line_number":24,"context_line":"from neutronclient.v2_0 import client"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_f7950c40","line":21,"range":{"start_line":21,"start_character":5,"end_line":21,"end_character":50},"updated":"2016-01-20 22:40:17.000000000","message":"This should be in the 4th group, down with \u0027from neutron....\u0027 - please move to between lines 29 and 30.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import fixtures"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.linuxbridge.agent import \\"},{"line_number":22,"context_line":"    linuxbridge_neutron_agent as linuxbridge_agent"},{"line_number":23,"context_line":"from neutronclient.common import exceptions as nc_exc"},{"line_number":24,"context_line":"from neutronclient.v2_0 import client"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_387cf171","line":21,"range":{"start_line":21,"start_character":5,"end_line":21,"end_character":50},"in_reply_to":"9a68dd71_f7950c40","updated":"2016-02-06 21:55:22.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class RabbitmqEnvironmentFixture(fixtures.Fixture):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def __init__(self, host\u003dNone):"},{"line_number":79,"context_line":"        super(RabbitmqEnvironmentFixture, self).__init__()"},{"line_number":80,"context_line":"        if host:"},{"line_number":81,"context_line":"            self.host \u003d host"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_177a2025","line":78,"range":{"start_line":78,"start_character":22,"end_line":78,"end_character":33},"updated":"2016-01-20 22:40:17.000000000","message":"Please use \u0027host\u003d\u0027127.0.0.1\u0027. This is what default arguments are for.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class RabbitmqEnvironmentFixture(fixtures.Fixture):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def __init__(self, host\u003dNone):"},{"line_number":79,"context_line":"        super(RabbitmqEnvironmentFixture, self).__init__()"},{"line_number":80,"context_line":"        if host:"},{"line_number":81,"context_line":"            self.host \u003d host"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_b8e7813f","line":78,"range":{"start_line":78,"start_character":22,"end_line":78,"end_character":33},"in_reply_to":"9a68dd71_177a2025","updated":"2016-02-06 21:55:22.000000000","message":"Yes, You\u0027re completly right. I have no idea why I made it in such strange way. Fixed :)","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"783798d1cdfc89639242ffe855e4bb269cce3b2f","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        )"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":203,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":204,"context_line":"        return bridge_name"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_f2b0ba8d","line":203,"range":{"start_line":203,"start_character":71,"end_line":203,"end_character":77},"updated":"2016-01-20 22:40:17.000000000","message":"Same comments re: define this global constant in neutron/common/constants.py.","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ede5c05ac4b137f2ff123488b652a8afaea57d0f","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        )"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":203,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":204,"context_line":"        return bridge_name"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_bbc808a9","line":203,"range":{"start_line":203,"start_character":71,"end_line":203,"end_character":77},"in_reply_to":"5a5ae5dd_86dc0347","updated":"2016-02-08 22:08:24.000000000","message":"Done","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"697ccddac5ab62080c6c9a1de122e9df172cfd0f","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        )"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":203,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":204,"context_line":"        return bridge_name"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_86dc0347","line":203,"range":{"start_line":203,"start_character":71,"end_line":203,"end_character":77},"in_reply_to":"5a5ae5dd_a07c8cec","updated":"2016-02-07 14:06:23.000000000","message":"Answered back there :)","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f37651616db8f6240e450bfc066b13fd5f085438","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        )"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":203,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":204,"context_line":"        return bridge_name"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_a07c8cec","line":203,"range":{"start_line":203,"start_character":71,"end_line":203,"end_character":77},"in_reply_to":"9a68dd71_f2b0ba8d","updated":"2016-02-06 21:55:22.000000000","message":"Same question as in https://review.openstack.org/#/c/248938/7/neutron/tests/common/net_helpers.py - what place should be better to place this constant?","commit_id":"85559cb427143be0372f11d6292310a599b84f37"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import fixtures"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutronclient.common import exceptions as nc_exc"},{"line_number":22,"context_line":"from neutronclient.v2_0 import client"},{"line_number":23,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_492a9cdc","line":20,"updated":"2016-02-07 20:03:33.000000000","message":"Extra newline.","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import fixtures"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutronclient.common import exceptions as nc_exc"},{"line_number":22,"context_line":"from neutronclient.v2_0 import client"},{"line_number":23,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_11bc9db9","line":20,"in_reply_to":"5a5ae5dd_492a9cdc","updated":"2016-02-08 22:08:30.000000000","message":"Done","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def __init__(self, host\u003d\"127.0.0.1\"):"},{"line_number":82,"context_line":"        super(RabbitmqEnvironmentFixture, self).__init__()"},{"line_number":83,"context_line":"        self.host \u003d host"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _setUp(self):"},{"line_number":86,"context_line":"        self.user \u003d base.get_rand_name(prefix\u003d\u0027user\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_291ba0cb","line":83,"updated":"2016-02-07 20:03:33.000000000","message":"This is unused?","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def __init__(self, host\u003d\"127.0.0.1\"):"},{"line_number":82,"context_line":"        super(RabbitmqEnvironmentFixture, self).__init__()"},{"line_number":83,"context_line":"        self.host \u003d host"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _setUp(self):"},{"line_number":86,"context_line":"        self.user \u003d base.get_rand_name(prefix\u003d\u0027user\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_31daf917","line":83,"in_reply_to":"5a5ae5dd_291ba0cb","updated":"2016-02-08 22:08:30.000000000","message":"It is used in neutron.tests.fullstack.resources.config.NeutronConfigFixture","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            )"},{"line_number":202,"context_line":"        )"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":205,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":206,"context_line":"        return bridge_name"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_49437cb2","line":204,"updated":"2016-02-07 20:03:33.000000000","message":"This method duplicates functionality from the LB agent. What if the naming scheme changes in the agent?","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0e8ec3299d83f1d057a5ef235262480c9d0c10d5","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            )"},{"line_number":202,"context_line":"        )"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":205,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":206,"context_line":"        return bridge_name"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a57f1b5_673c2c30","line":204,"in_reply_to":"5a5ae5dd_23e4c20b","updated":"2016-02-09 21:38:17.000000000","message":"Done","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            )"},{"line_number":202,"context_line":"        )"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":205,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":206,"context_line":"        return bridge_name"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_b16b49f0","line":204,"in_reply_to":"5a5ae5dd_49437cb2","updated":"2016-02-08 22:08:30.000000000","message":"It is same method as in LB agent. But I don\u0027t know how to do it in different way. Method in LB agent is not static and I don\u0027t want to create here instance of LB agent class only for that. Do You have any idea how it could be changed maybe?\nBTW, it is same as for neutron.tests.common.net_helpers:LinuxBridgePortFixture._get_port_name()","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"f0f62f7244cab27e2949677ad92307d39d17a730","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            )"},{"line_number":202,"context_line":"        )"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def get_network_bridge_name(self, network_id):"},{"line_number":205,"context_line":"        bridge_name \u003d linuxbridge_agent.BRIDGE_NAME_PREFIX + network_id[0:11]"},{"line_number":206,"context_line":"        return bridge_name"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_23e4c20b","line":204,"in_reply_to":"5a5ae5dd_b16b49f0","updated":"2016-02-09 13:12:35.000000000","message":"As you said, the code in linuxbridge is not static. Thankfully, you can change the production code\u0027s implementation (./neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py, LinuxBridgeManager.get_bridge_name(network_id)) to be a static method yourself :)","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5883be4c378b2479da9c2a329534dbb3984a75ce","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def __init__(self, env_desc, host_desc, test_name,"},{"line_number":210,"context_line":"                 neutron_cfg_fixture, l3_agent_cfg_fixture,"},{"line_number":211,"context_line":"                 namespace\u003dNone):"},{"line_number":212,"context_line":"        super(L3AgentFixture, self).__init__()"},{"line_number":213,"context_line":"        self.env_desc \u003d env_desc"},{"line_number":214,"context_line":"        self.host_desc \u003d host_desc"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_c1184c87","line":211,"updated":"2016-02-16 12:07:49.000000000","message":"Hm. Do we really want to run l3 agent inside a namespace?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"92475ec24a7d8d719f5ed186dcc2e400fb1ea5c9","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def __init__(self, env_desc, host_desc, test_name,"},{"line_number":210,"context_line":"                 neutron_cfg_fixture, l3_agent_cfg_fixture,"},{"line_number":211,"context_line":"                 namespace\u003dNone):"},{"line_number":212,"context_line":"        super(L3AgentFixture, self).__init__()"},{"line_number":213,"context_line":"        self.env_desc \u003d env_desc"},{"line_number":214,"context_line":"        self.host_desc \u003d host_desc"}],"source_content_type":"text/x-python","patch_set":19,"id":"dae33548_38e14bd1","line":211,"in_reply_to":"dae33548_c1184c87","updated":"2016-02-16 23:59:01.000000000","message":"If L3 agent is spawned \"on host\" with LinuxBridge agent then this LinuxBridge agent is already spawned in namespace. Shouldn\u0027t it be spawned in same namespace then?","commit_id":"15320b8865e9b50c06afc2c16f158a31ef86a1dc"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               \u0027--log-file\u0027, log_file]"},{"line_number":64,"context_line":"        for filename in self.config_filenames:"},{"line_number":65,"context_line":"            cmd +\u003d [\u0027--config-file\u0027, filename]"},{"line_number":66,"context_line":"        run_as_root \u003d False"},{"line_number":67,"context_line":"        if self.namespace:"},{"line_number":68,"context_line":"            run_as_root \u003d True"},{"line_number":69,"context_line":"        self.process \u003d async_process.AsyncProcess("},{"line_number":70,"context_line":"            cmd, run_as_root\u003drun_as_root, namespace\u003dself.namespace"},{"line_number":71,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_31774aa1","line":68,"range":{"start_line":66,"start_character":0,"end_line":68,"end_character":30},"updated":"2016-02-18 10:54:38.000000000","message":"run_as_root \u003d bool(self.namespace)","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               \u0027--log-file\u0027, log_file]"},{"line_number":64,"context_line":"        for filename in self.config_filenames:"},{"line_number":65,"context_line":"            cmd +\u003d [\u0027--config-file\u0027, filename]"},{"line_number":66,"context_line":"        run_as_root \u003d False"},{"line_number":67,"context_line":"        if self.namespace:"},{"line_number":68,"context_line":"            run_as_root \u003d True"},{"line_number":69,"context_line":"        self.process \u003d async_process.AsyncProcess("},{"line_number":70,"context_line":"            cmd, run_as_root\u003drun_as_root, namespace\u003dself.namespace"},{"line_number":71,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_52146be7","line":68,"range":{"start_line":66,"start_character":0,"end_line":68,"end_character":30},"in_reply_to":"dae33548_31774aa1","updated":"2016-02-18 21:07:13.000000000","message":"Done","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"383076fb5294450a3f82a12cdb384f0fc66de8a4","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def __init__(self, env_desc, host_desc, test_name,"},{"line_number":179,"context_line":"                 neutron_cfg_fixture, agent_cfg_fixture,"},{"line_number":180,"context_line":"                 namespace\u003dNone):"},{"line_number":181,"context_line":"        self.env_desc \u003d env_desc"},{"line_number":182,"context_line":"        self.host_desc \u003d host_desc"},{"line_number":183,"context_line":"        self.test_name \u003d test_name"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_717b927b","line":180,"updated":"2016-02-18 10:54:38.000000000","message":"Missing call to superclass __init__()","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"741783e6100e9e0ed2bd49f7108cd177e9aa6592","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def __init__(self, env_desc, host_desc, test_name,"},{"line_number":179,"context_line":"                 neutron_cfg_fixture, agent_cfg_fixture,"},{"line_number":180,"context_line":"                 namespace\u003dNone):"},{"line_number":181,"context_line":"        self.env_desc \u003d env_desc"},{"line_number":182,"context_line":"        self.host_desc \u003d host_desc"},{"line_number":183,"context_line":"        self.test_name \u003d test_name"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_52c2ab53","line":180,"in_reply_to":"dae33548_717b927b","updated":"2016-02-18 21:07:13.000000000","message":"Done","commit_id":"276d162755ac38c070bd3d4b3b6b9e61ba4d033f"}],"neutron/tests/fullstack/test_connectivity.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"82e4fc38b84be396f0760431c9912b558503c94e","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            host_descriptions)"},{"line_number":103,"context_line":"        super(TestLinuxbridgeConnectivitySameNetwork, self).setUp(env)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_connectivity(self):"},{"line_number":106,"context_line":"        tenant_uuid \u003d uuidutils.generate_uuid()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        network \u003d self.safe_client.create_network(tenant_uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_f71c9d67","line":105,"updated":"2015-12-13 01:55:54.000000000","message":"This is the exact same test, no? The only difference is the type of the VM, in which case there should only be one test, with parameters.\n\nAbout the two new VM classes:\nIt looks like you\u0027re modeling the wrong thing - VMs don\u0027t differ by the L2 agent they\u0027re managed by... They use different VIF drivers to connect correctly. A VM would connect to a centralized OVS bridge, or to a per-network LB. That would be a parameter to a single VM class, and that class would know how to connect to either an OVS or a LB according to its VIF driver.","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"112a684e696cae07a80bbf82033a3850cfa55e3b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            host_descriptions)"},{"line_number":103,"context_line":"        super(TestLinuxbridgeConnectivitySameNetwork, self).setUp(env)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_connectivity(self):"},{"line_number":106,"context_line":"        tenant_uuid \u003d uuidutils.generate_uuid()"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        network \u003d self.safe_client.create_network(tenant_uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a710552_1cabf31e","line":105,"in_reply_to":"7a740942_f71c9d67","updated":"2015-12-15 23:21:46.000000000","message":"I can make it as one test with parameters.\nAbout modeling, You want not me to not create different classes like FakeFullstackLinuxbridgeMachine and FakeFullstackOvsMachine but make one and also parametrize it somehow?","commit_id":"19f0d99b82b6663bdf05cfb7bce12eb12fadabc9"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        network_scenarios, interface_scenarios)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def setUp(self):"},{"line_number":85,"context_line":"        self.fullstack_machine \u003d machine.FakeFullstackOvsMachine"},{"line_number":86,"context_line":"        super(TestOvsConnectivitySameNetwork, self).setUp()"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_connectivity(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_597a0126","line":85,"updated":"2016-01-12 17:17:24.000000000","message":"can\u0027t you define the attr as class attr?","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        network_scenarios, interface_scenarios)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def setUp(self):"},{"line_number":85,"context_line":"        self.fullstack_machine \u003d machine.FakeFullstackOvsMachine"},{"line_number":86,"context_line":"        super(TestOvsConnectivitySameNetwork, self).setUp()"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_connectivity(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_7e134e5d","line":85,"in_reply_to":"da6ed579_597a0126","updated":"2016-01-18 22:37:42.000000000","message":"I think that it should be fine","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"091d4e36e79530e3e39c93f4baccfa49110fa60d","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        super(TestOvsConnectivitySameNetwork, self).setUp()"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_connectivity(self):"},{"line_number":89,"context_line":"        self._test_connectivity()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class TestLinuxbridgeConnectivitySameNetwork(BaseConnectivitySameNetworkTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_bc744b9c","line":89,"updated":"2016-01-12 17:17:24.000000000","message":"hate it but I know why you need the silly method :)","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"10442e813b4e6886b336b463c7957f302f57fd19","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        super(TestOvsConnectivitySameNetwork, self).setUp()"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def test_connectivity(self):"},{"line_number":89,"context_line":"        self._test_connectivity()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class TestLinuxbridgeConnectivitySameNetwork(BaseConnectivitySameNetworkTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_9e108250","line":89,"in_reply_to":"da6ed579_bc744b9c","updated":"2016-01-18 22:37:42.000000000","message":":)","commit_id":"6879c888a4793c77e58a5244944c76c5df08e985"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"eac340615ca6e723356cd698ad4b0a1aeb8a52ad","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    fullstack_machine \u003d machine.FakeFullstackLinuxBridgeMachine"},{"line_number":96,"context_line":"    l2_agent_type \u003d constants.AGENT_TYPE_LINUXBRIDGE"},{"line_number":97,"context_line":"    scenarios \u003d ["},{"line_number":98,"context_line":"        (\u0027VXLAN\u0027, {\u0027network_type\u0027: \u0027vxlan\u0027,"},{"line_number":99,"context_line":"                   \u0027l2_pop\u0027: False}),"},{"line_number":100,"context_line":"        (\u0027VLANs\u0027, {\u0027network_type\u0027: \u0027vlan\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_a90eb089","line":97,"updated":"2016-02-07 20:03:33.000000000","message":"Missing vxlan with l2pop?","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"f0f62f7244cab27e2949677ad92307d39d17a730","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    fullstack_machine \u003d machine.FakeFullstackLinuxBridgeMachine"},{"line_number":96,"context_line":"    l2_agent_type \u003d constants.AGENT_TYPE_LINUXBRIDGE"},{"line_number":97,"context_line":"    scenarios \u003d ["},{"line_number":98,"context_line":"        (\u0027VXLAN\u0027, {\u0027network_type\u0027: \u0027vxlan\u0027,"},{"line_number":99,"context_line":"                   \u0027l2_pop\u0027: False}),"},{"line_number":100,"context_line":"        (\u0027VLANs\u0027, {\u0027network_type\u0027: \u0027vlan\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_63af1a95","line":97,"in_reply_to":"5a5ae5dd_07669b50","updated":"2016-02-09 13:12:35.000000000","message":"The problem with VXLAN + l2pop should be fixed before this patch is merged, then.","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0e8ec3299d83f1d057a5ef235262480c9d0c10d5","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    fullstack_machine \u003d machine.FakeFullstackLinuxBridgeMachine"},{"line_number":96,"context_line":"    l2_agent_type \u003d constants.AGENT_TYPE_LINUXBRIDGE"},{"line_number":97,"context_line":"    scenarios \u003d ["},{"line_number":98,"context_line":"        (\u0027VXLAN\u0027, {\u0027network_type\u0027: \u0027vxlan\u0027,"},{"line_number":99,"context_line":"                   \u0027l2_pop\u0027: False}),"},{"line_number":100,"context_line":"        (\u0027VLANs\u0027, {\u0027network_type\u0027: \u0027vlan\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a57f1b5_878288c7","line":97,"in_reply_to":"5a5ae5dd_63af1a95","updated":"2016-02-09 21:38:17.000000000","message":"Yes, I\u0027m on it with Mathieu Rohon","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7e16dcad9848172cba7bc09f43c868ecb75af8c5","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    fullstack_machine \u003d machine.FakeFullstackLinuxBridgeMachine"},{"line_number":96,"context_line":"    l2_agent_type \u003d constants.AGENT_TYPE_LINUXBRIDGE"},{"line_number":97,"context_line":"    scenarios \u003d ["},{"line_number":98,"context_line":"        (\u0027VXLAN\u0027, {\u0027network_type\u0027: \u0027vxlan\u0027,"},{"line_number":99,"context_line":"                   \u0027l2_pop\u0027: False}),"},{"line_number":100,"context_line":"        (\u0027VLANs\u0027, {\u0027network_type\u0027: \u0027vlan\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_07669b50","line":97,"in_reply_to":"5a5ae5dd_a90eb089","updated":"2016-02-08 22:08:30.000000000","message":"Yep. I forgot about this scenario here.\nProblem is that this test is failing on my dev host and I have no idea why. In logs all looks fine. I can see ip neigh in each \"host\" namespace but it IPs assigned to \"vms\" are not pinging and I have no idea why :/","commit_id":"7e8413f62b5a2433b3dbd4e2ab4d69526b131b9f"}]}
