)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1db5ce7f07846e3d11542fe7452c6e21aa5e4432","unresolved":false,"context_lines":[{"line_number":13,"context_line":"methods instead. It also removes an unnecessary call to set the"},{"line_number":14,"context_line":"default route in the restart method."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: 1290068"},{"line_number":17,"context_line":"Change-Id: I639bcf93725c4969d1011d2d20491d461ccfdbed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAWH%2F%2BIfA%3D","line":16,"updated":"2014-03-28 22:41:50.000000000","message":"Related-Bug: #1294254","commit_id":"84e7dc6fb22ef194db72c1e71ec4e26a3b9eb322"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"a9cdd40d832e30305344251f7e4a05737c45587f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"methods instead. It also removes an unnecessary call to set the"},{"line_number":14,"context_line":"default route in the restart method."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: 1290068"},{"line_number":17,"context_line":"Change-Id: I639bcf93725c4969d1011d2d20491d461ccfdbed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAWH%2F9948%3D","line":16,"in_reply_to":"AAAAWH%2F%2BIfA%3D","updated":"2014-03-31 21:09:20.000000000","message":"Done","commit_id":"84e7dc6fb22ef194db72c1e71ec4e26a3b9eb322"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"e9a2594c6043c0bdacaae74c0033921aef73a5cf","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        host_uuid \u003d uuid.uuid5(uuid.NAMESPACE_DNS, socket.gethostname())"},{"line_number":646,"context_line":"        return \u0027dhcp%s-%s\u0027 % (host_uuid, network.id)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    def _set_default_route(self, network, device_name):"},{"line_number":649,"context_line":"        \"\"\"Sets the default gateway for this dhcp namespace."},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"        This method is idempotent and will only adjust the route if adjusting"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FD2E%3D","line":648,"updated":"2014-03-10 09:58:41.000000000","message":"The previous rpc call the port was created by the plugin if not previously existing, I\u0027m a bit concern about the impact of a such change ? your thoughts","commit_id":"7c710d894c95e05fe4b18f3fc57822a6e3030cac"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"d3b5a36853282aba0e4f089e4cecc0b00dc336ba","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        host_uuid \u003d uuid.uuid5(uuid.NAMESPACE_DNS, socket.gethostname())"},{"line_number":646,"context_line":"        return \u0027dhcp%s-%s\u0027 % (host_uuid, network.id)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    def _set_default_route(self, network, device_name):"},{"line_number":649,"context_line":"        \"\"\"Sets the default gateway for this dhcp namespace."},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"        This method is idempotent and will only adjust the route if adjusting"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FDqM%3D","line":648,"in_reply_to":"AAAAVn%2F%2FD2E%3D","updated":"2014-03-10 10:46:10.000000000","message":"But the first time _set_default_route() gets called on a host for a network, it will have been preceded by setup(), and it creates the port if it does not already exist - L754 below.\n\nMaybe I\u0027m missing something. Can you explain your scenario in more detail please?","commit_id":"7c710d894c95e05fe4b18f3fc57822a6e3030cac"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"40fd03e8bfd1b917a79940a220b8e480620f17bc","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        host_uuid \u003d uuid.uuid5(uuid.NAMESPACE_DNS, socket.gethostname())"},{"line_number":646,"context_line":"        return \u0027dhcp%s-%s\u0027 % (host_uuid, network.id)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    def _set_default_route(self, network, device_name):"},{"line_number":649,"context_line":"        \"\"\"Sets the default gateway for this dhcp namespace."},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"        This method is idempotent and will only adjust the route if adjusting"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2B5WA%3D","line":648,"in_reply_to":"AAAAVn%2F%2FDqM%3D","updated":"2014-03-11 13:34:19.000000000","message":"Ok got it, thanks","commit_id":"7c710d894c95e05fe4b18f3fc57822a6e3030cac"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"d608b83e00abc97616303a56b02c4f07db3766d2","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        else:"},{"line_number":397,"context_line":"            LOG.debug(_(\u0027Pid %d is stale, relaunching dnsmasq\u0027), self.pid)"},{"line_number":398,"context_line":"        LOG.debug(_(\u0027Reloading allocations for network: %s\u0027), self.network.id)"},{"line_number":399,"context_line":"        self.device_manager.update(self.network, self.interface_name)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def _output_hosts_file(self):"},{"line_number":402,"context_line":"        \"\"\"Writes a dnsmasq compatible hosts file.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2Bz90%3D","line":399,"updated":"2014-03-12 00:53:14.000000000","message":"Updating the interface is not an expected action of this method based on the name.  Why was this moved?","commit_id":"84e7dc6fb22ef194db72c1e71ec4e26a3b9eb322"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"c4b8d408c8bb59e6653af48912d23b9dace0259a","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        else:"},{"line_number":397,"context_line":"            LOG.debug(_(\u0027Pid %d is stale, relaunching dnsmasq\u0027), self.pid)"},{"line_number":398,"context_line":"        LOG.debug(_(\u0027Reloading allocations for network: %s\u0027), self.network.id)"},{"line_number":399,"context_line":"        self.device_manager.update(self.network, self.interface_name)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def _output_hosts_file(self):"},{"line_number":402,"context_line":"        \"\"\"Writes a dnsmasq compatible hosts file.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2F%2BLU%3D","line":399,"in_reply_to":"AAAAVn%2F%2Bz90%3D","updated":"2014-03-12 16:23:38.000000000","message":"I agree, but I did not move it with this patch. I guess the reason is because the dnsmasq files have to be updated when a subnet\u0027s dns_nameservers, host_routes or gateway_ip changes. So refresh_dhcp_helper simply calls here and there is a chained call to update the device\u0027s default route to cover the case where it has changed. \nhttps://github.com/openstack/neutron/blob/5f8617bacf05d02db995289e734345bebab8124e/neutron/agent/dhcp_agent.py#L248\nOf course this always results in a rootwrapped call to \u0027ip netns exec $NS ip route\u0027 to check, which will happen a lot.\n\nI think a better way would be to remove this chained call here and have refresh_dhcp_helper invoke it more directly. It could even determine if the default route needs to be changed at all. I can do another patchset to show that - let me know.","commit_id":"84e7dc6fb22ef194db72c1e71ec4e26a3b9eb322"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"4974522a4700a88b2bf8f80c72f4779f1f1e957c","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        else:"},{"line_number":397,"context_line":"            LOG.debug(_(\u0027Pid %d is stale, relaunching dnsmasq\u0027), self.pid)"},{"line_number":398,"context_line":"        LOG.debug(_(\u0027Reloading allocations for network: %s\u0027), self.network.id)"},{"line_number":399,"context_line":"        self.device_manager.update(self.network, self.interface_name)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def _output_hosts_file(self):"},{"line_number":402,"context_line":"        \"\"\"Writes a dnsmasq compatible hosts file.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F9q7Y%3D","line":399,"in_reply_to":"AAAAWH%2F%2F%2BLU%3D","updated":"2014-04-02 22:51:27.000000000","message":"See my comments on patch set 3.","commit_id":"84e7dc6fb22ef194db72c1e71ec4e26a3b9eb322"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"5dca540061145f0b1fbf718f80f7c170f731ea99","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    def disable(self, retain_port\u003dFalse):"},{"line_number":124,"context_line":"        \"\"\"Disable dhcp for this network.\"\"\""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def restart(self):"},{"line_number":127,"context_line":"        \"\"\"Restart the dhcp service for the network.\"\"\""},{"line_number":128,"context_line":"        self.disable(retain_port\u003dTrue)"},{"line_number":129,"context_line":"        self.enable()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9omQ%3D","side":"PARENT","line":126,"updated":"2014-04-03 08:16:38.000000000","message":"aside: is this supposed to be an abstract class? This method and __init__ are doing actual stuff.","commit_id":"9e90eb6965d94ea9bf0580bb232d8e847c5d87e7"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"f5a65772f9db50936ec42e57646311e03d95c72c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    def disable(self, retain_port\u003dFalse):"},{"line_number":124,"context_line":"        \"\"\"Disable dhcp for this network.\"\"\""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def restart(self):"},{"line_number":127,"context_line":"        \"\"\"Restart the dhcp service for the network.\"\"\""},{"line_number":128,"context_line":"        self.disable(retain_port\u003dTrue)"},{"line_number":129,"context_line":"        self.enable()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2FuDI%3D","side":"PARENT","line":126,"in_reply_to":"AAAAWH%2F9omQ%3D","updated":"2014-04-10 21:25:28.000000000","message":"Abstract means the implementation is incomplete and the class cannot be instantiated directly.","commit_id":"9e90eb6965d94ea9bf0580bb232d8e847c5d87e7"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d475f2de0d7c66ab71c9edc33d67e9c8aaff0265","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        \"\"\"Restart the dhcp service for the network.\"\"\""},{"line_number":128,"context_line":"        self.disable(retain_port\u003dTrue)"},{"line_number":129,"context_line":"        self.enable()"},{"line_number":130,"context_line":"        self.device_manager.update(self.network)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @abc.abstractproperty"},{"line_number":133,"context_line":"    def active(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9q28%3D","side":"PARENT","line":130,"updated":"2014-04-02 22:50:57.000000000","message":"It looks like there may be a reason for this to be here.  It might not be a great reason.  Let me know what you think.\n\nIf you look at refresh_dhcp_helper, it calls restart if the subnets on the network change.  That could result in a change in the default gateway because it could be that a subnet was added *or* one was removed.","commit_id":"9e90eb6965d94ea9bf0580bb232d8e847c5d87e7"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"f5a65772f9db50936ec42e57646311e03d95c72c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        \"\"\"Restart the dhcp service for the network.\"\"\""},{"line_number":128,"context_line":"        self.disable(retain_port\u003dTrue)"},{"line_number":129,"context_line":"        self.enable()"},{"line_number":130,"context_line":"        self.device_manager.update(self.network)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @abc.abstractproperty"},{"line_number":133,"context_line":"    def active(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2FuCo%3D","side":"PARENT","line":130,"in_reply_to":"AAAAWH%2F9orw%3D","updated":"2014-04-10 21:25:28.000000000","message":"Okay, I\u0027ll buy that.","commit_id":"9e90eb6965d94ea9bf0580bb232d8e847c5d87e7"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"5dca540061145f0b1fbf718f80f7c170f731ea99","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        \"\"\"Restart the dhcp service for the network.\"\"\""},{"line_number":128,"context_line":"        self.disable(retain_port\u003dTrue)"},{"line_number":129,"context_line":"        self.enable()"},{"line_number":130,"context_line":"        self.device_manager.update(self.network)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @abc.abstractproperty"},{"line_number":133,"context_line":"    def active(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9orw%3D","side":"PARENT","line":130,"in_reply_to":"AAAAWH%2F9q28%3D","updated":"2014-04-03 08:16:38.000000000","message":"hmm, I looked again and I\u0027m afraid I\u0027m not following. Looking at device_manager.update(), all it does is call device_manager._set_default_route(). But the previous line (L129) has just called enable(), and enable() calls device_manager.setup() on L163, and that calls _set_default_route() on L854. So it looks to me that calling enable() here just has the effect of calling _set_default_route for a second time in a row, and I can\u0027t see a reason for that. So I removed it here, and doing that means update() is now only called by reload_allocations, which knows and can pass the device name. This allows the RPC to be removed from update().","commit_id":"9e90eb6965d94ea9bf0580bb232d8e847c5d87e7"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d475f2de0d7c66ab71c9edc33d67e9c8aaff0265","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        else:"},{"line_number":399,"context_line":"            LOG.debug(_(\u0027Pid %d is stale, relaunching dnsmasq\u0027), self.pid)"},{"line_number":400,"context_line":"        LOG.debug(_(\u0027Reloading allocations for network: %s\u0027), self.network.id)"},{"line_number":401,"context_line":"        self.device_manager.update(self.network, self.interface_name)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def _iter_hosts(self):"},{"line_number":404,"context_line":"        \"\"\"Iterate over hosts."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9q0E%3D","line":401,"updated":"2014-04-02 22:50:57.000000000","message":"The call here covers the case where the set of subnets on a network didn\u0027t change but an attribute of the subnet, like the gateway_ip or enable_dhcp, might have changed.  I wouldn\u0027t think that would happen very much.\n\nYour comments on patch set 2 hint at refactoring this to call this more directly from refresh_dhcp_helper.  That sounds like it might be the way to go since this patch has recently been reduced to optimizing only the \"update\" code path anyway.\n\nWhat do you think?","commit_id":"0c6e080c5dd71e01b2cdaffe6477b0fc51e327a1"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"f5a65772f9db50936ec42e57646311e03d95c72c","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        else:"},{"line_number":399,"context_line":"            LOG.debug(_(\u0027Pid %d is stale, relaunching dnsmasq\u0027), self.pid)"},{"line_number":400,"context_line":"        LOG.debug(_(\u0027Reloading allocations for network: %s\u0027), self.network.id)"},{"line_number":401,"context_line":"        self.device_manager.update(self.network, self.interface_name)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def _iter_hosts(self):"},{"line_number":404,"context_line":"        \"\"\"Iterate over hosts."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAW3%2F%2FuCM%3D","line":401,"in_reply_to":"AAAAWH%2F9oco%3D","updated":"2014-04-10 21:25:28.000000000","message":"At this point, I\u0027m not sure there is much benefit to doing that now.  I could go either way.  But, this patch is already pretty much finished.","commit_id":"0c6e080c5dd71e01b2cdaffe6477b0fc51e327a1"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"5dca540061145f0b1fbf718f80f7c170f731ea99","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        else:"},{"line_number":399,"context_line":"            LOG.debug(_(\u0027Pid %d is stale, relaunching dnsmasq\u0027), self.pid)"},{"line_number":400,"context_line":"        LOG.debug(_(\u0027Reloading allocations for network: %s\u0027), self.network.id)"},{"line_number":401,"context_line":"        self.device_manager.update(self.network, self.interface_name)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def _iter_hosts(self):"},{"line_number":404,"context_line":"        \"\"\"Iterate over hosts."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9oco%3D","line":401,"in_reply_to":"AAAAWH%2F9q0E%3D","updated":"2014-04-03 08:16:38.000000000","message":"Yes, let me know if I should push another patchset with that. I think so, as we are already down the road to refactoring how updating the default gateway is done. But first will need agreement on the other comment.","commit_id":"0c6e080c5dd71e01b2cdaffe6477b0fc51e327a1"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d475f2de0d7c66ab71c9edc33d67e9c8aaff0265","unresolved":false,"context_lines":[{"line_number":845,"context_line":"            device.route.pullup_route(interface_name)"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        if self.conf.use_namespaces:"},{"line_number":848,"context_line":"            self._set_default_route(network, interface_name)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"        return interface_name"},{"line_number":851,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9qz0%3D","line":848,"updated":"2014-04-02 22:50:57.000000000","message":"Note that we\u0027re no longer really optimizing this code path as patch set 2 was.","commit_id":"0c6e080c5dd71e01b2cdaffe6477b0fc51e327a1"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"5dca540061145f0b1fbf718f80f7c170f731ea99","unresolved":false,"context_lines":[{"line_number":845,"context_line":"            device.route.pullup_route(interface_name)"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        if self.conf.use_namespaces:"},{"line_number":848,"context_line":"            self._set_default_route(network, interface_name)"},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"        return interface_name"},{"line_number":851,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9ogU%3D","line":848,"in_reply_to":"AAAAWH%2F9qz0%3D","updated":"2014-04-03 08:16:38.000000000","message":"Right. I changed update() so it could be called from reload_allocations with the device name. Then I changed the signature of _set_default_route() so it called from update with the device name instead of the port.","commit_id":"0c6e080c5dd71e01b2cdaffe6477b0fc51e327a1"}],"neutron/tests/unit/test_linux_dhcp.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"00b1814844f814a59a6e86e9e9ef53bae954e39a","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"            self.safe.assert_has_calls([mock.call(exp_host_name,"},{"line_number":1061,"context_line":"                                                  exp_host_data),"},{"line_number":1062,"context_line":"                                        mock.call(exp_opt_name, exp_opt_data)])"},{"line_number":1063,"context_line":"            mock_open.assert_any_call(\u0027/proc/5/cmdline\u0027, \u0027r\u0027)"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def test_release_unused_leases(self):"},{"line_number":1066,"context_line":"        dnsmasq \u003d dhcp.Dnsmasq(self.conf, FakeDualNetwork())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2B%2Brk%3D","line":1063,"updated":"2014-03-10 22:05:49.000000000","message":"Hmm, could you explain this particular change? I am always wary when I see a loosening of an expectation in a test case like this.","commit_id":"7c710d894c95e05fe4b18f3fc57822a6e3030cac"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"f3c6583911fab3c409b382e179b2038537a1fd6d","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"            self.safe.assert_has_calls([mock.call(exp_host_name,"},{"line_number":1061,"context_line":"                                                  exp_host_data),"},{"line_number":1062,"context_line":"                                        mock.call(exp_opt_name, exp_opt_data)])"},{"line_number":1063,"context_line":"            mock_open.assert_any_call(\u0027/proc/5/cmdline\u0027, \u0027r\u0027)"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def test_release_unused_leases(self):"},{"line_number":1066,"context_line":"        dnsmasq \u003d dhcp.Dnsmasq(self.conf, FakeDualNetwork())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2B6oI%3D","line":1063,"in_reply_to":"AAAAVn%2F%2B%2Brk%3D","updated":"2014-03-11 10:22:52.000000000","message":"aghh, I meant to come back and look at this before pushing.\n\nI\u0027m not sure what the point of this test is in the first place. Even if we detect a stale pid, it seems we do nothing but LOG.debug(). So maybe assert kill -HUP was not called? I can\u0027t see how a stale pid can happen in the first place.\n\nAnyway, my patch affects this test because I added the parameter self.interface_name to self.device_manager.update(). self.interface_name is actually a property that opens and reads the interface name from a file, and this patch uses that in the case of allocation reloads instead of doing an RPC. But that causes another open() in the test, and assert_called_once_with only checks the last call. \n\nI\u0027ll push a new patchset to mock out the interface_name property instead, so open() won\u0027t be called again. And update test_reload_allocations to show the call to update().","commit_id":"7c710d894c95e05fe4b18f3fc57822a6e3030cac"}]}
