)]}'
{"neutron/tests/common/agents/dhcp_agent.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def DhcpLocalProcess_init(self, conf, network, process_monitor, version\u003dNone,"},{"line_number":41,"context_line":"                          plugin\u003dNone):"},{"line_number":42,"context_line":"    super(linux_dhcp.DhcpLocalProcess, self).__init__("},{"line_number":43,"context_line":"        conf, network, process_monitor, version, plugin)"},{"line_number":44,"context_line":"    self.confs_dir \u003d self.get_confs_dir(conf)"},{"line_number":45,"context_line":"    network_dir \u003d \"%s%s\" % (network.id, cfg.CONF.test_namespace_suffix)"},{"line_number":46,"context_line":"    self.network_conf_dir \u003d os.path.join(self.confs_dir, network_dir)"},{"line_number":47,"context_line":"    fileutils.ensure_tree(self.network_conf_dir, mode\u003d0o755)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"@classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_87f851e7","line":47,"range":{"start_line":42,"start_character":0,"end_line":47,"end_character":60},"updated":"2017-01-02 12:44:55.000000000","message":"You could have just made a copy of \u0027network\u0027 object, change network_copy.id to contain the suffix and pass it down to the original init to avoid code duplication and be compatible with changes made to DhcpLocalProcess.__init__","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b7faf5543a067436230d46ff3dbbecd03b7d0510","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def DhcpLocalProcess_init(self, conf, network, process_monitor, version\u003dNone,"},{"line_number":41,"context_line":"                          plugin\u003dNone):"},{"line_number":42,"context_line":"    super(linux_dhcp.DhcpLocalProcess, self).__init__("},{"line_number":43,"context_line":"        conf, network, process_monitor, version, plugin)"},{"line_number":44,"context_line":"    self.confs_dir \u003d self.get_confs_dir(conf)"},{"line_number":45,"context_line":"    network_dir \u003d \"%s%s\" % (network.id, cfg.CONF.test_namespace_suffix)"},{"line_number":46,"context_line":"    self.network_conf_dir \u003d os.path.join(self.confs_dir, network_dir)"},{"line_number":47,"context_line":"    fileutils.ensure_tree(self.network_conf_dir, mode\u003d0o755)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"@classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_eaad5232","line":47,"range":{"start_line":42,"start_character":0,"end_line":47,"end_character":60},"in_reply_to":"ba5201f7_6dd34739","updated":"2017-01-03 10:44:30.000000000","message":"You\u0027d need to store it outside of the function code, for example with closure:\n\n def monkey_patch_dhcp_agent():\n     original_dhcp_local_proc_init \u003d linux_dhcp.DhcpLocalProcess.__init__\n     def DhcpLocalProcess_init(....):\n         network_copy \u003d copy.deepcopy(network)\n         network_copy.id \u003d \"%s%s\" % (network.id, cfg.CONF.test_namespace_suffix)\n         original_dhcp_local_proc_init(...., network_copy, ....)\n\n     linux_dhcp.DhcpLocalProcess.__init__ \u003d DhcpLocalProcess_init","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def DhcpLocalProcess_init(self, conf, network, process_monitor, version\u003dNone,"},{"line_number":41,"context_line":"                          plugin\u003dNone):"},{"line_number":42,"context_line":"    super(linux_dhcp.DhcpLocalProcess, self).__init__("},{"line_number":43,"context_line":"        conf, network, process_monitor, version, plugin)"},{"line_number":44,"context_line":"    self.confs_dir \u003d self.get_confs_dir(conf)"},{"line_number":45,"context_line":"    network_dir \u003d \"%s%s\" % (network.id, cfg.CONF.test_namespace_suffix)"},{"line_number":46,"context_line":"    self.network_conf_dir \u003d os.path.join(self.confs_dir, network_dir)"},{"line_number":47,"context_line":"    fileutils.ensure_tree(self.network_conf_dir, mode\u003d0o755)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"@classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_6dd34739","line":47,"range":{"start_line":42,"start_character":0,"end_line":47,"end_character":60},"in_reply_to":"ba5201f7_87f851e7","updated":"2017-01-02 21:45:45.000000000","message":"Sorry for (maybe stupid) question but how I can monkeypatch DhcpLocalProcess.__init__ and call original method from this patched one?","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e5730c17f386680e1a57f23b30667d15d9199543","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def DhcpLocalProcess_init(self, conf, network, process_monitor, version\u003dNone,"},{"line_number":41,"context_line":"                          plugin\u003dNone):"},{"line_number":42,"context_line":"    super(linux_dhcp.DhcpLocalProcess, self).__init__("},{"line_number":43,"context_line":"        conf, network, process_monitor, version, plugin)"},{"line_number":44,"context_line":"    self.confs_dir \u003d self.get_confs_dir(conf)"},{"line_number":45,"context_line":"    network_dir \u003d \"%s%s\" % (network.id, cfg.CONF.test_namespace_suffix)"},{"line_number":46,"context_line":"    self.network_conf_dir \u003d os.path.join(self.confs_dir, network_dir)"},{"line_number":47,"context_line":"    fileutils.ensure_tree(self.network_conf_dir, mode\u003d0o755)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"@classmethod"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_69ba3b0c","line":47,"range":{"start_line":42,"start_character":0,"end_line":47,"end_character":60},"in_reply_to":"ba5201f7_eaad5232","updated":"2017-01-03 20:37:35.000000000","message":"Thx. I made it like that and it works. I had to set \"self.network\" to network after calling original_init method but it\u0027s working properly :)","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    return networks"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"linux_dhcp.NetModel.__init__ \u003d NetModel_init"},{"line_number":66,"context_line":"linux_dhcp.DhcpLocalProcess.__init__ \u003d DhcpLocalProcess_init"},{"line_number":67,"context_line":"linux_dhcp.Dnsmasq.existing_dhcp_networks \u003d existing_dhcp_networks"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def register_opts(conf):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_67ca8da3","line":67,"range":{"start_line":65,"start_character":0,"end_line":67,"end_character":66},"updated":"2017-01-02 12:44:55.000000000","message":"Would it make more sense to put the monkey patching into a function and call it on L75? To avoid side effects when importing this module.","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    return networks"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"linux_dhcp.NetModel.__init__ \u003d NetModel_init"},{"line_number":66,"context_line":"linux_dhcp.DhcpLocalProcess.__init__ \u003d DhcpLocalProcess_init"},{"line_number":67,"context_line":"linux_dhcp.Dnsmasq.existing_dhcp_networks \u003d existing_dhcp_networks"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"def register_opts(conf):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_8dd86b55","line":67,"range":{"start_line":65,"start_character":0,"end_line":67,"end_character":66},"in_reply_to":"ba5201f7_67ca8da3","updated":"2017-01-02 21:45:45.000000000","message":"Done","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def main():"},{"line_number":75,"context_line":"    register_opts(cfg.CONF)"},{"line_number":76,"context_line":"    dhcp_agent.main()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_87469121","line":75,"range":{"start_line":75,"start_character":4,"end_line":75,"end_character":17},"updated":"2017-01-02 12:44:55.000000000","message":"Nit/Personal opinion: I\u0027d call cfg.CONF.register_opts(OPTS) directly.","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def main():"},{"line_number":75,"context_line":"    register_opts(cfg.CONF)"},{"line_number":76,"context_line":"    dhcp_agent.main()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_addd2f44","line":75,"range":{"start_line":75,"start_character":4,"end_line":75,"end_character":17},"in_reply_to":"ba5201f7_87469121","updated":"2017-01-02 21:45:45.000000000","message":"thx, this function register_opts() is really not necessary here :)","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"}],"neutron/tests/fullstack/resources/config.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7a3350ea016fcf6b6469141799969c8936d704cd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                \u0027service_plugins\u0027: \u0027,\u0027.join(service_plugins),"},{"line_number":70,"context_line":"                \u0027auth_strategy\u0027: \u0027noauth\u0027,"},{"line_number":71,"context_line":"                \u0027debug\u0027: \u0027True\u0027,"},{"line_number":72,"context_line":"                \u0027agent_down_time\u0027: 10,"},{"line_number":73,"context_line":"                \u0027transport_url\u0027:"},{"line_number":74,"context_line":"                    \u0027rabbit://%(user)s:%(password)s@%(host)s:5672/%(vhost)s\u0027 %"},{"line_number":75,"context_line":"                    {\u0027user\u0027: rabbitmq_environment.user,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da4df55a_425e5cea","line":72,"updated":"2016-12-22 14:16:27.000000000","message":"You should also set dhcp_agents_per_network to value to number of dhcp agents.","commit_id":"ab3bf06d036daefe9ba6126eea3d4a8a3ac7731a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"089b4c23bbf6a09154cc1c3a720abd5de92bb45e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                \u0027service_plugins\u0027: \u0027,\u0027.join(service_plugins),"},{"line_number":70,"context_line":"                \u0027auth_strategy\u0027: \u0027noauth\u0027,"},{"line_number":71,"context_line":"                \u0027debug\u0027: \u0027True\u0027,"},{"line_number":72,"context_line":"                \u0027agent_down_time\u0027: 10,"},{"line_number":73,"context_line":"                \u0027transport_url\u0027:"},{"line_number":74,"context_line":"                    \u0027rabbit://%(user)s:%(password)s@%(host)s:5672/%(vhost)s\u0027 %"},{"line_number":75,"context_line":"                    {\u0027user\u0027: rabbitmq_environment.user,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_6f3b51ec","line":72,"in_reply_to":"da4df55a_425e5cea","updated":"2016-12-30 21:12:35.000000000","message":"In fact I wanted to have it set to default value \u003d 1 because I wanted to make two tests:\n\n1. Test reschedule network on different agent if one is down and check if new Machine will get IP from new \"agent\"\n\n2. Test if network added to 2 dhcp agents will still have dhcp service working if one agent will be down - for this test it would be better to have this option set to 2 but I can achieve it also by adding network to second DHCP agent manually.\n\nWhat do You think about such tests? Are they fine for You? Or maybe I should change those tests somehow?","commit_id":"ab3bf06d036daefe9ba6126eea3d4a8a3ac7731a"}],"neutron/tests/fullstack/resources/process.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"968fb3d00bcdcf7c205c8a66b6d182f3a26ed7bd","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            self.process.stop(block\u003dTrue, kill_signal\u003dself.kill_signal)"},{"line_number":73,"context_line":"        except async_process.AsyncProcessException as e:"},{"line_number":74,"context_line":"            if \"Process is not running\" not in str(e):"},{"line_number":75,"context_line":"                raise"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_2774059b","line":74,"updated":"2017-01-02 09:58:46.000000000","message":"We shouldn\u0027t compare raw strings against possibly-translated errors - see [1] and [2].\n\n[1]: https://review.openstack.org/#/c/402140/19/neutron/agent/linux/utils.py@240\n[2]: https://bugs.launchpad.net/neutron/+bug/1638273","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"d5474f0323585dc859079df327bfcca4ac127820","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            self.process.stop(block\u003dTrue, kill_signal\u003dself.kill_signal)"},{"line_number":73,"context_line":"        except async_process.AsyncProcessException as e:"},{"line_number":74,"context_line":"            if \"Process is not running\" not in str(e):"},{"line_number":75,"context_line":"                raise"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_78e22a05","line":74,"in_reply_to":"ba5201f7_0701c1ae","updated":"2017-01-02 12:50:37.000000000","message":"I\u0027m fine with agnosticity (is that even a word?) as well.","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            self.process.stop(block\u003dTrue, kill_signal\u003dself.kill_signal)"},{"line_number":73,"context_line":"        except async_process.AsyncProcessException as e:"},{"line_number":74,"context_line":"            if \"Process is not running\" not in str(e):"},{"line_number":75,"context_line":"                raise"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_0701c1ae","line":74,"in_reply_to":"ba5201f7_2774059b","updated":"2017-01-02 12:44:55.000000000","message":"@John: Do you know if there is any requirement to keep fullstack tests agnostic to localization? I\u0027m fine supporting English environments only.","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            self.process.stop(block\u003dTrue, kill_signal\u003dself.kill_signal)"},{"line_number":73,"context_line":"        except async_process.AsyncProcessException as e:"},{"line_number":74,"context_line":"            if \"Process is not running\" not in str(e):"},{"line_number":75,"context_line":"                raise"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_ad6d2f06","line":74,"in_reply_to":"ba5201f7_78e22a05","updated":"2017-01-02 21:45:45.000000000","message":"But async_process.AsyncProcessException() is simple exception class which inherits directly from Exception class and there is no any errno or something like that in this class. I\u0027m not sure if I should change it only to make tests agnostic to localization","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                test_name\u003dself.test_name,"},{"line_number":267,"context_line":"                process_name\u003dself.NEUTRON_DHCP_AGENT,"},{"line_number":268,"context_line":"                exec_name\u003dspawn.find_executable("},{"line_number":269,"context_line":"                    \u0027dhcp_agent.py\u0027,"},{"line_number":270,"context_line":"                    path\u003dos.path.join(base.ROOTDIR, \u0027common\u0027, \u0027agents\u0027)),"},{"line_number":271,"context_line":"                config_filenames\u003dconfig_filenames,"},{"line_number":272,"context_line":"                namespace\u003dself.namespace"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_a720f54a","line":269,"range":{"start_line":269,"start_character":21,"end_line":269,"end_character":31},"updated":"2017-01-02 12:44:55.000000000","message":"Suggestion: Let\u0027s use unique name from the codebase - like fullstack_dhcp_agent.py","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def clean_dhcp_namespaces(self):"},{"line_number":288,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":289,"context_line":"        pattern \u003d (r\"qdhcp-[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}%s\" %"},{"line_number":290,"context_line":"                   self.get_namespace_suffix())"},{"line_number":291,"context_line":"        for namespace in ip_wrapper.get_namespaces():"},{"line_number":292,"context_line":"            if re.match(pattern, namespace):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_c7cb3971","line":289,"range":{"start_line":289,"start_character":8,"end_line":289,"end_character":15},"updated":"2017-01-02 12:44:55.000000000","message":"It\u0027s better to pre-compile the pattern as constant and reuse it later.\n\n DHCP_NAMESPACE_PATTERN \u003d re.compile(r\"qdhcp-...\")\n\n for namespace in ip_wrapper.get_namespaces():\n     if DHCP_NAMESPACE_PATTERN.match(namespace):","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def clean_dhcp_namespaces(self):"},{"line_number":288,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":289,"context_line":"        pattern \u003d (r\"qdhcp-[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}%s\" %"},{"line_number":290,"context_line":"                   self.get_namespace_suffix())"},{"line_number":291,"context_line":"        for namespace in ip_wrapper.get_namespaces():"},{"line_number":292,"context_line":"            if re.match(pattern, namespace):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_6d4a6785","line":289,"range":{"start_line":289,"start_character":8,"end_line":289,"end_character":15},"in_reply_to":"ba5201f7_c7cb3971","updated":"2017-01-02 21:45:45.000000000","message":"Done","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                   self.get_namespace_suffix())"},{"line_number":291,"context_line":"        for namespace in ip_wrapper.get_namespaces():"},{"line_number":292,"context_line":"            if re.match(pattern, namespace):"},{"line_number":293,"context_line":"                ip_wrapper.netns.delete(namespace)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_27a165aa","line":293,"range":{"start_line":293,"start_character":16,"end_line":293,"end_character":39},"updated":"2017-01-02 12:44:55.000000000","message":"We should wrap it with try-catch block in case the deletion fails to not stop deleting remaining namespaces.","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                   self.get_namespace_suffix())"},{"line_number":291,"context_line":"        for namespace in ip_wrapper.get_namespaces():"},{"line_number":292,"context_line":"            if re.match(pattern, namespace):"},{"line_number":293,"context_line":"                ip_wrapper.netns.delete(namespace)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_0d5c7b4a","line":293,"range":{"start_line":293,"start_character":16,"end_line":293,"end_character":39},"in_reply_to":"ba5201f7_27a165aa","updated":"2017-01-02 21:45:45.000000000","message":"Done","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"09c0d6e5d60ea4f76a872e702be857aa733ef57e","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self.process_fixture.stop()"},{"line_number":288,"context_line":"        self.clean_dhcp_namespaces()"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def clean_dhcp_namespaces(self):"},{"line_number":291,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":292,"context_line":"        for namespace in ip_wrapper.get_namespaces():"},{"line_number":293,"context_line":"            if self.dhcp_namespace_pattern.match(namespace):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_c7d3dd02","line":290,"updated":"2017-01-04 21:57:03.000000000","message":"This could probably use a comment explaining that it deletes all DHCP namespaces created by this DHCP agent, using the agent\u0027s namespace_suffix.","commit_id":"22147f9a2f3ac2c37f08773d6e0885e349b0c95b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a7fa9ad1a14b7bfee28cf355f65096d7c3f58fb8","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self.process_fixture.stop()"},{"line_number":288,"context_line":"        self.clean_dhcp_namespaces()"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def clean_dhcp_namespaces(self):"},{"line_number":291,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":292,"context_line":"        for namespace in ip_wrapper.get_namespaces():"},{"line_number":293,"context_line":"            if self.dhcp_namespace_pattern.match(namespace):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_ca976446","line":290,"in_reply_to":"ba5201f7_c7d3dd02","updated":"2017-01-04 22:53:18.000000000","message":"Done","commit_id":"22147f9a2f3ac2c37f08773d6e0885e349b0c95b"}],"neutron/tests/fullstack/test_dhcp_agent.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self._create_network_subnet_and_vm()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _spawn_vm(self):"},{"line_number":57,"context_line":"        host \u003d random.randint(0, self.number_of_hosts - 1)"},{"line_number":58,"context_line":"        vm \u003d self.useFixture("},{"line_number":59,"context_line":"            machine.FakeFullstackMachine("},{"line_number":60,"context_line":"                self.environment.hosts[host],"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_fdc52c5b","line":57,"range":{"start_line":57,"start_character":15,"end_line":57,"end_character":58},"updated":"2017-01-02 12:44:55.000000000","message":"random.choice(self.environment.hosts)","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self._create_network_subnet_and_vm()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _spawn_vm(self):"},{"line_number":57,"context_line":"        host \u003d random.randint(0, self.number_of_hosts - 1)"},{"line_number":58,"context_line":"        vm \u003d self.useFixture("},{"line_number":59,"context_line":"            machine.FakeFullstackMachine("},{"line_number":60,"context_line":"                self.environment.hosts[host],"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_8d36ab01","line":57,"range":{"start_line":57,"start_character":15,"end_line":57,"end_character":58},"in_reply_to":"ba5201f7_fdc52c5b","updated":"2017-01-02 21:45:45.000000000","message":"Done","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        def _agent_rescheduled():"},{"line_number":108,"context_line":"            network_agents \u003d self.client.list_dhcp_agent_hosting_networks("},{"line_number":109,"context_line":"                self.network[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":110,"context_line":"            if len(network_agents):"},{"line_number":111,"context_line":"                return network_agents[0][\u0027id\u0027] !\u003d old_agent[\u0027id\u0027]"},{"line_number":112,"context_line":"            return False"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_386342b3","line":110,"range":{"start_line":110,"start_character":15,"end_line":110,"end_character":34},"updated":"2017-01-02 12:44:55.000000000","message":"network_agents","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        def _agent_rescheduled():"},{"line_number":108,"context_line":"            network_agents \u003d self.client.list_dhcp_agent_hosting_networks("},{"line_number":109,"context_line":"                self.network[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":110,"context_line":"            if len(network_agents):"},{"line_number":111,"context_line":"                return network_agents[0][\u0027id\u0027] !\u003d old_agent[\u0027id\u0027]"},{"line_number":112,"context_line":"            return False"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_ad3b6fea","line":110,"range":{"start_line":110,"start_character":15,"end_line":110,"end_character":34},"in_reply_to":"ba5201f7_386342b3","updated":"2017-01-02 21:45:45.000000000","message":"Done","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"968fb3d00bcdcf7c205c8a66b6d182f3a26ed7bd","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            hostname \u003d host.dhcp_agent.get_agent_hostname()"},{"line_number":119,"context_line":"            if hostname \u003d\u003d agent[\u0027host\u0027]:"},{"line_number":120,"context_line":"                host.dhcp_agent.kill()"},{"line_number":121,"context_line":"                break"},{"line_number":122,"context_line":"        self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_e762fdd7","line":121,"range":{"start_line":121,"start_character":16,"end_line":121,"end_character":21},"updated":"2017-01-02 09:58:46.000000000","message":"In case no match was found, line 122 will block pointlessly for 60 seconds.","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            hostname \u003d host.dhcp_agent.get_agent_hostname()"},{"line_number":119,"context_line":"            if hostname \u003d\u003d agent[\u0027host\u0027]:"},{"line_number":120,"context_line":"                host.dhcp_agent.kill()"},{"line_number":121,"context_line":"                break"},{"line_number":122,"context_line":"        self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_f8b61a3c","line":121,"range":{"start_line":121,"start_character":16,"end_line":121,"end_character":21},"in_reply_to":"ba5201f7_e762fdd7","updated":"2017-01-02 12:44:55.000000000","message":"Good catch, L122 should be part of this if-block","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            hostname \u003d host.dhcp_agent.get_agent_hostname()"},{"line_number":119,"context_line":"            if hostname \u003d\u003d agent[\u0027host\u0027]:"},{"line_number":120,"context_line":"                host.dhcp_agent.kill()"},{"line_number":121,"context_line":"                break"},{"line_number":122,"context_line":"        self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_ed2577c2","line":121,"range":{"start_line":121,"start_character":16,"end_line":121,"end_character":21},"in_reply_to":"ba5201f7_f8b61a3c","updated":"2017-01-02 21:45:45.000000000","message":"Done","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"},{"line_number":125,"context_line":"        dhcp_agents \u003d self.client.list_agents("},{"line_number":126,"context_line":"            agent_type\u003d\"DHCP agent\")[\u0027agents\u0027]"},{"line_number":127,"context_line":"        for agent in dhcp_agents:"},{"line_number":128,"context_line":"            if agent[\u0027id\u0027] !\u003d current_agent[\u0027id\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_f869ba8c","line":125,"range":{"start_line":125,"start_character":34,"end_line":125,"end_character":45},"updated":"2017-01-02 12:44:55.000000000","message":"Can you just fetch a single agent by current_agent[\u0027id\u0027]?","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b7faf5543a067436230d46ff3dbbecd03b7d0510","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"},{"line_number":125,"context_line":"        dhcp_agents \u003d self.client.list_agents("},{"line_number":126,"context_line":"            agent_type\u003d\"DHCP agent\")[\u0027agents\u0027]"},{"line_number":127,"context_line":"        for agent in dhcp_agents:"},{"line_number":128,"context_line":"            if agent[\u0027id\u0027] !\u003d current_agent[\u0027id\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_a816f3ee","line":125,"range":{"start_line":125,"start_character":34,"end_line":125,"end_character":45},"in_reply_to":"ba5201f7_6d18a785","updated":"2017-01-03 10:44:30.000000000","message":"Aaah, my bad. Makes sense now :)","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"},{"line_number":125,"context_line":"        dhcp_agents \u003d self.client.list_agents("},{"line_number":126,"context_line":"            agent_type\u003d\"DHCP agent\")[\u0027agents\u0027]"},{"line_number":127,"context_line":"        for agent in dhcp_agents:"},{"line_number":128,"context_line":"            if agent[\u0027id\u0027] !\u003d current_agent[\u0027id\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_6d18a785","line":125,"range":{"start_line":125,"start_character":34,"end_line":125,"end_character":45},"in_reply_to":"ba5201f7_f869ba8c","updated":"2017-01-02 21:45:45.000000000","message":"But I want to add network to any other agent than current_agent. That\u0027s why I get list of all agents and looking for first other than current one.","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"},{"line_number":125,"context_line":"        dhcp_agents \u003d self.client.list_agents("},{"line_number":126,"context_line":"            agent_type\u003d\"DHCP agent\")[\u0027agents\u0027]"},{"line_number":127,"context_line":"        for agent in dhcp_agents:"},{"line_number":128,"context_line":"            if agent[\u0027id\u0027] !\u003d current_agent[\u0027id\u0027]:"},{"line_number":129,"context_line":"                self.client.add_network_to_dhcp_agent("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_98afcee2","line":126,"range":{"start_line":126,"start_character":23,"end_line":126,"end_character":35},"updated":"2017-01-02 12:44:55.000000000","message":"constants.AGENT_TYPE_DHCP","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"},{"line_number":125,"context_line":"        dhcp_agents \u003d self.client.list_agents("},{"line_number":126,"context_line":"            agent_type\u003d\"DHCP agent\")[\u0027agents\u0027]"},{"line_number":127,"context_line":"        for agent in dhcp_agents:"},{"line_number":128,"context_line":"            if agent[\u0027id\u0027] !\u003d current_agent[\u0027id\u0027]:"},{"line_number":129,"context_line":"                self.client.add_network_to_dhcp_agent("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_ad128f60","line":126,"range":{"start_line":126,"start_character":23,"end_line":126,"end_character":35},"in_reply_to":"ba5201f7_98afcee2","updated":"2017-01-02 21:45:45.000000000","message":"Done","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"c27f0a5c96e01bc9950dac5efaebcb902d3834b9","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            self.network[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":153,"context_line":"        self.assertEqual(1, len(network_dhcp_agents))"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        self._add_network_to_new_agent(network_dhcp_agents[0])"},{"line_number":156,"context_line":"        # ensure that two agents are handling DHCP for this network"},{"line_number":157,"context_line":"        network_dhcp_agents \u003d self.client.list_dhcp_agent_hosting_networks("},{"line_number":158,"context_line":"            self.network[\u0027id\u0027])[\u0027agents\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_7814eaf4","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":62},"updated":"2017-01-02 12:44:55.000000000","message":"I don\u0027t understand this - doesn\u0027t it mean you\u0027re adding the same agent again?","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b7faf5543a067436230d46ff3dbbecd03b7d0510","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            self.network[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":153,"context_line":"        self.assertEqual(1, len(network_dhcp_agents))"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        self._add_network_to_new_agent(network_dhcp_agents[0])"},{"line_number":156,"context_line":"        # ensure that two agents are handling DHCP for this network"},{"line_number":157,"context_line":"        network_dhcp_agents \u003d self.client.list_dhcp_agent_hosting_networks("},{"line_number":158,"context_line":"            self.network[\u0027id\u0027])[\u0027agents\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_68f40b87","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":62},"in_reply_to":"ba5201f7_2d077f1d","updated":"2017-01-03 10:44:30.000000000","message":"I misread the _add_network_to_new_agent method :)","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"267c61cffd95e24f46daf01b138dc871776081ca","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            self.network[\u0027id\u0027])[\u0027agents\u0027]"},{"line_number":153,"context_line":"        self.assertEqual(1, len(network_dhcp_agents))"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        self._add_network_to_new_agent(network_dhcp_agents[0])"},{"line_number":156,"context_line":"        # ensure that two agents are handling DHCP for this network"},{"line_number":157,"context_line":"        network_dhcp_agents \u003d self.client.list_dhcp_agent_hosting_networks("},{"line_number":158,"context_line":"            self.network[\u0027id\u0027])[\u0027agents\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_2d077f1d","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":62},"in_reply_to":"ba5201f7_7814eaf4","updated":"2017-01-02 21:45:45.000000000","message":"no, I pass to this method agent which currently handle network to find any other agent and assign network to this new agent.\nMaybe name of this network is not the best - if You have any better idea, I can change it :)","commit_id":"c1db9628530f5566006a4528b3e91c3c55f0772a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"09c0d6e5d60ea4f76a872e702be857aa733ef57e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":122,"context_line":"                break"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"},{"line_number":125,"context_line":"        dhcp_agents \u003d self.client.list_agents("},{"line_number":126,"context_line":"            agent_type\u003dconstants.AGENT_TYPE_DHCP)[\u0027agents\u0027]"},{"line_number":127,"context_line":"        for agent in dhcp_agents:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_47628d3f","line":124,"updated":"2017-01-04 21:57:03.000000000","message":"This function doesn\u0027t actually need to accept a \u0027current_agent\u0027. You can grab all DHCP agents, then grab the DHCP agents hosting self.network and schedule it to an agent in the set difference.","commit_id":"22147f9a2f3ac2c37f08773d6e0885e349b0c95b"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7d77887d31666a52108670025bb8b3a5e5a17b7c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":122,"context_line":"                break"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"},{"line_number":125,"context_line":"        dhcp_agents \u003d self.client.list_agents("},{"line_number":126,"context_line":"            agent_type\u003dconstants.AGENT_TYPE_DHCP)[\u0027agents\u0027]"},{"line_number":127,"context_line":"        for agent in dhcp_agents:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_edb9907a","line":124,"in_reply_to":"ba5201f7_2aee30b4","updated":"2017-01-05 10:56:10.000000000","message":"I personally liked this solution better as it saves one API call :) for listing dhcp agents hosting network.","commit_id":"22147f9a2f3ac2c37f08773d6e0885e349b0c95b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a7fa9ad1a14b7bfee28cf355f65096d7c3f58fb8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                self._wait_until_agent_down(agent[\u0027id\u0027])"},{"line_number":122,"context_line":"                break"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _add_network_to_new_agent(self, current_agent):"},{"line_number":125,"context_line":"        dhcp_agents \u003d self.client.list_agents("},{"line_number":126,"context_line":"            agent_type\u003dconstants.AGENT_TYPE_DHCP)[\u0027agents\u0027]"},{"line_number":127,"context_line":"        for agent in dhcp_agents:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5201f7_2aee30b4","line":124,"in_reply_to":"ba5201f7_47628d3f","updated":"2017-01-04 22:53:18.000000000","message":"You\u0027re right. Changed","commit_id":"22147f9a2f3ac2c37f08773d6e0885e349b0c95b"}]}
