)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"f335c79821298b79c116568425413ef374d7951c","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DHCP agent generates DHCPv6 hosts entries if subnet\u0027s ipv6_address_mode"},{"line_number":10,"context_line":"is unset or dhcpv6-statefull.  DHCP agent skips generating per-subnet"},{"line_number":11,"context_line":"DHCPv6 options if subnet\u0027s ipv6_address_mode is unset of slaac.  In"},{"line_number":12,"context_line":"configurations that existed before ipv6-two-attributes were introduced"},{"line_number":13,"context_line":"we end up having entry in hosts file and no per-subnet options (dns"},{"line_number":14,"context_line":"servers and search domain) in opts file."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_c5fc22ba","line":11,"updated":"2015-09-30 20:09:24.000000000","message":"nit: s/of slaac/or slaac","commit_id":"d371eb11e5ea99c7dee9cd9e502d3a6a6f7ee46a"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"7c0263b9d4346fd599091d55d3914ef7994ce100","unresolved":false,"context_lines":[{"line_number":10,"context_line":"is unset or dhcpv6-statefull.  DHCP agent skips generating per-subnet"},{"line_number":11,"context_line":"DHCPv6 options if subnet\u0027s ipv6_address_mode is unset of slaac.  In"},{"line_number":12,"context_line":"configurations that existed before ipv6-two-attributes were introduced"},{"line_number":13,"context_line":"we end up having entry in hosts file and no per-subnet options (dns"},{"line_number":14,"context_line":"servers and search domain) in opts file."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch skips generation of per-subnet options if enable_dhcp is off"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_3aec1929","line":13,"updated":"2015-09-30 19:23:32.000000000","message":"This is a bit of a historical inaccuracy. Prior to commit that fixed https://bugs.launchpad.net/neutron/+bug/1316190 , entries for IPv6 slaac addresses were getting added to the host file, which would break dnsmasq so badly that it would bring the network down (no ipv4 leases, no renews).\n\nI think it\u0027s important context, and I think a reader could read between the lines and come to incorrect conclusions.","commit_id":"d371eb11e5ea99c7dee9cd9e502d3a6a6f7ee46a"},{"author":{"_account_id":11061,"name":"Alexey I. Froloff","email":"raorn@raorn.name","username":"raorn"},"change_message_id":"be08b5a29a4e69384749e53edf5b8f8993168006","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch skips generation of per-subnet options if enable_dhcp is off"},{"line_number":17,"context_line":"or ipv6_address_mode is slaac."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: 1501451"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I372c93fa5667e955c7b81181daa2e66f47d85fdf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_0bac528a","line":18,"updated":"2015-10-01 11:41:54.000000000","message":"Is this commit message better?\n\nDHCP agent writes DHCPv6 host entries if subnet\u0027s ipv6_address_mode is\nnot slaac or dhcpv6-stateless.  Port-specific DHCPv6 options\n(extra_dhcp_opts) are written if ipv6_address_mode is not slaac.\nHowever, subnet-specific options are written if ipv6_address_mode is not\nunset or slaac.\n\nThis patch allows generation of subnet-specific option in subnet\u0027s\nipv6_address_mode is not slaac.","commit_id":"d371eb11e5ea99c7dee9cd9e502d3a6a6f7ee46a"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"c2551fc3c5231934644c421c30db49f5c09a9dd7","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch skips generation of per-subnet options if enable_dhcp is off"},{"line_number":17,"context_line":"or ipv6_address_mode is slaac."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: 1501451"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I372c93fa5667e955c7b81181daa2e66f47d85fdf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a1a9d01_99caee6d","line":18,"in_reply_to":"9a1a9d01_0bac528a","updated":"2015-10-01 15:13:00.000000000","message":"yep that sounds good","commit_id":"d371eb11e5ea99c7dee9cd9e502d3a6a6f7ee46a"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"68a7e2110769e7658b44d822073252410346aec9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DHCP agent writes DHCPv6 host entries if subnet\u0027s ipv6_address_mode is"},{"line_number":10,"context_line":"not slaac or dhcpv6-stateless.  Port-specific DHCPv6 options"},{"line_number":11,"context_line":"(extra_dhcp_opts) are written if ipv6_address_mode is not slaac."},{"line_number":12,"context_line":"However, subnet-specific options are written if ipv6_address_mode is not"},{"line_number":13,"context_line":"unset or slaac."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a2fa921_88316a5c","line":11,"updated":"2015-10-09 15:59:18.000000000","message":"Port specific DHCPv6 options (extra_dhcp_opts) are written if a subnet that a port is associated with, are written to the dnsmasq hosts file are written if ipv6_address_mode is not slaac.","commit_id":"68c9fabd5782588a632c3c62a742f8ab265705c9"},{"author":{"_account_id":11061,"name":"Alexey I. Froloff","email":"raorn@raorn.name","username":"raorn"},"change_message_id":"12ebf519b724e1006b738d44db418dc46f330925","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"DHCP agent writes DHCPv6 host entries if subnet\u0027s ipv6_address_mode is"},{"line_number":10,"context_line":"not slaac or dhcpv6-stateless.  Port-specific DHCPv6 options"},{"line_number":11,"context_line":"(extra_dhcp_opts) are written if ipv6_address_mode is not slaac."},{"line_number":12,"context_line":"However, subnet-specific options are written if ipv6_address_mode is not"},{"line_number":13,"context_line":"unset or slaac."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a2fa921_1214a84a","line":11,"in_reply_to":"7a2fa921_88316a5c","updated":"2015-10-09 16:25:59.000000000","message":"Done","commit_id":"68c9fabd5782588a632c3c62a742f8ab265705c9"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"68a7e2110769e7658b44d822073252410346aec9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"However, subnet-specific options are written if ipv6_address_mode is not"},{"line_number":13,"context_line":"unset or slaac."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch allows generation of subnet-specific option in subnet\u0027s"},{"line_number":16,"context_line":"ipv6_address_mode is not slaac."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: #1501451"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a2fa921_4837d24c","line":15,"updated":"2015-10-09 15:59:18.000000000","message":"subnet specific options if a subnet\u0027s","commit_id":"68c9fabd5782588a632c3c62a742f8ab265705c9"},{"author":{"_account_id":11061,"name":"Alexey I. Froloff","email":"raorn@raorn.name","username":"raorn"},"change_message_id":"12ebf519b724e1006b738d44db418dc46f330925","unresolved":false,"context_lines":[{"line_number":12,"context_line":"However, subnet-specific options are written if ipv6_address_mode is not"},{"line_number":13,"context_line":"unset or slaac."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch allows generation of subnet-specific option in subnet\u0027s"},{"line_number":16,"context_line":"ipv6_address_mode is not slaac."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: #1501451"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a2fa921_7205dc11","line":15,"in_reply_to":"7a2fa921_4837d24c","updated":"2015-10-09 16:25:59.000000000","message":"Done","commit_id":"68c9fabd5782588a632c3c62a742f8ab265705c9"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"1d08971b4d5404a56f7817f99c599b5139f2b2dc","unresolved":false,"context_lines":[{"line_number":11,"context_line":"(extra_dhcp_opts) are written if a subnet that a port is associated with"},{"line_number":12,"context_line":"ipv6_address_mode is not slaac.  However, subnet specific options are"},{"line_number":13,"context_line":"written to the dnsmasq hosts file are written if ipv6_address_mode is"},{"line_number":14,"context_line":"not slaac."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch allows generation of subnet specific options if a subnet\u0027s"},{"line_number":17,"context_line":"ipv6_address_mode is not slaac."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a2fa921_af49c232","line":14,"updated":"2015-10-09 20:04:04.000000000","message":"This paragraph is still hard to comprehend, and I think I know what you are trying to fix. We need to clean this up because otherwise if someone ever has to go back and read why you did this it\u0027s going to be tough.\n\nLet me think of a better way to phrase it and report back.","commit_id":"a90b92c9d9c06ef22e769fd218e4c769001b049f"},{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"cafc46c38223e6574c27baa05bdd89a209c910cf","unresolved":false,"context_lines":[{"line_number":11,"context_line":"(extra_dhcp_opts) are written if a subnet that a port is associated with"},{"line_number":12,"context_line":"ipv6_address_mode is not slaac.  However, subnet specific options are"},{"line_number":13,"context_line":"written to the dnsmasq hosts file are written if ipv6_address_mode is"},{"line_number":14,"context_line":"not slaac."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch allows generation of subnet specific options if a subnet\u0027s"},{"line_number":17,"context_line":"ipv6_address_mode is not slaac."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a2fa921_eeab0ed5","line":14,"in_reply_to":"7a2fa921_af49c232","updated":"2015-10-12 14:42:47.000000000","message":"Sean, how about this:\n\nThe DHCP agent is inconsistent in how it handles subnets who\u0027s ipv6_address_mode is not slaac. While the DHCP agent writes out both DHCPv6 host entries and DHCPv6 options for ports scoped by the subnet for dnsmasq to use, subnet specific options are not written.\n\nThis patch addresses this inconsistency by generating subnet specific options when the subnet\u0027s ipv6_address_mode is not slaac.\"","commit_id":"a90b92c9d9c06ef22e769fd218e4c769001b049f"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"6cf85b6db8d200cb16564b49998cb5bf394e2c76","unresolved":false,"context_lines":[{"line_number":11,"context_line":"(extra_dhcp_opts) are written if a subnet that a port is associated with"},{"line_number":12,"context_line":"ipv6_address_mode is not slaac.  However, subnet specific options are"},{"line_number":13,"context_line":"written to the dnsmasq hosts file are written if ipv6_address_mode is"},{"line_number":14,"context_line":"not slaac."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch allows generation of subnet specific options if a subnet\u0027s"},{"line_number":17,"context_line":"ipv6_address_mode is not slaac."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a2fa921_61306f9f","line":14,"in_reply_to":"7a2fa921_eeab0ed5","updated":"2015-10-12 15:07:59.000000000","message":"oh yes that explains things much better. Only nit is who\u0027s typo - it should be \"whose\"","commit_id":"a90b92c9d9c06ef22e769fd218e4c769001b049f"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"e86c58be7d237e98f99405b962c435a8e6cb564b","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        for i, subnet in enumerate(self.network.subnets):"},{"line_number":759,"context_line":"            if (not subnet.enable_dhcp or"},{"line_number":760,"context_line":"                (subnet.ip_version \u003d\u003d 6 and"},{"line_number":761,"context_line":"                 subnet.ipv6_address_mode \u003d\u003d constants.IPV6_SLAAC)):"},{"line_number":762,"context_line":"                continue"},{"line_number":763,"context_line":"            if subnet.dns_nameservers:"},{"line_number":764,"context_line":"                options.append("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_6630899f","line":761,"updated":"2015-10-01 21:57:32.000000000","message":"The commit doesn\u0027t explain why you replaces getattr(...) by subnet.ipv6...mode","commit_id":"1b948b0d0205184f7d5bcc2cad7bf5f6365e7dee"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"40e79e90013bb1ec91122c59974cff7f297ddffd","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        for i, subnet in enumerate(self.network.subnets):"},{"line_number":759,"context_line":"            if (not subnet.enable_dhcp or"},{"line_number":760,"context_line":"                (subnet.ip_version \u003d\u003d 6 and"},{"line_number":761,"context_line":"                 subnet.ipv6_address_mode \u003d\u003d constants.IPV6_SLAAC)):"},{"line_number":762,"context_line":"                continue"},{"line_number":763,"context_line":"            if subnet.dns_nameservers:"},{"line_number":764,"context_line":"                options.append("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_8b07ab1c","line":761,"in_reply_to":"9a1a9d01_0bf15b6a","updated":"2015-10-03 17:22:05.000000000","message":"It is not a mandatory attribute in the API, but it is a core attribute with a default value [1] and it is populated by _make_subnet_dict() [2], so it will be a key and passed to the agent. (Unless I missed some code path.)\n\n- [1] https://github.com/openstack/neutron/blob/master/neutron/api/v2/attributes.py#L808\n- [2] https://github.com/openstack/neutron/blob/master/neutron/db/db_base_plugin_common.py#L125","commit_id":"1b948b0d0205184f7d5bcc2cad7bf5f6365e7dee"},{"author":{"_account_id":11061,"name":"Alexey I. Froloff","email":"raorn@raorn.name","username":"raorn"},"change_message_id":"1eff8b9338ae70de488713ff1745a5266bb8264b","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        for i, subnet in enumerate(self.network.subnets):"},{"line_number":759,"context_line":"            if (not subnet.enable_dhcp or"},{"line_number":760,"context_line":"                (subnet.ip_version \u003d\u003d 6 and"},{"line_number":761,"context_line":"                 subnet.ipv6_address_mode \u003d\u003d constants.IPV6_SLAAC)):"},{"line_number":762,"context_line":"                continue"},{"line_number":763,"context_line":"            if subnet.dns_nameservers:"},{"line_number":764,"context_line":"                options.append("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_f088bdc8","line":761,"in_reply_to":"9a1a9d01_6630899f","updated":"2015-10-02 09:27:22.000000000","message":"Because ipv6_address_mode is mandatory attribute and _iter_hosts doesn\u0027t use getattr for this.","commit_id":"1b948b0d0205184f7d5bcc2cad7bf5f6365e7dee"},{"author":{"_account_id":11061,"name":"Alexey I. Froloff","email":"raorn@raorn.name","username":"raorn"},"change_message_id":"5edf90b774041175a244792d256a0407039f8d59","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        for i, subnet in enumerate(self.network.subnets):"},{"line_number":759,"context_line":"            if (not subnet.enable_dhcp or"},{"line_number":760,"context_line":"                (subnet.ip_version \u003d\u003d 6 and"},{"line_number":761,"context_line":"                 subnet.ipv6_address_mode \u003d\u003d constants.IPV6_SLAAC)):"},{"line_number":762,"context_line":"                continue"},{"line_number":763,"context_line":"            if subnet.dns_nameservers:"},{"line_number":764,"context_line":"                options.append("}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_25f2989b","line":761,"in_reply_to":"9a1a9d01_8b07ab1c","updated":"2015-10-05 15:43:16.000000000","message":"OK.  I\u0027m putting getattr back here.  Maybe later it will be refactored by someone.","commit_id":"1b948b0d0205184f7d5bcc2cad7bf5f6365e7dee"},{"author":{"_account_id":11061,"name":"Alexey I. Froloff","email":"raorn@raorn.name","username":"raorn"},"change_message_id":"54e8c162cb58c05d3b00591380ec5fb2e02f0235","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        for i, subnet in enumerate(self.network.subnets):"},{"line_number":759,"context_line":"            if (not subnet.enable_dhcp or"},{"line_number":760,"context_line":"                (subnet.ip_version \u003d\u003d 6 and"},{"line_number":761,"context_line":"                 subnet.ipv6_address_mode \u003d\u003d constants.IPV6_SLAAC)):"},{"line_number":762,"context_line":"                continue"},{"line_number":763,"context_line":"            if subnet.dns_nameservers:"},{"line_number":764,"context_line":"                options.append("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_7db474d0","line":761,"in_reply_to":"9a1a9d01_f088bdc8","updated":"2015-10-02 15:31:07.000000000","message":"https://git.openstack.org/cgit/openstack/neutron/commit/?id\u003d1715eb7c8e1f2433df3c081e357f8c40dfe2a28a uses both, getattr and property.  HenryG suggests adding \"Note: since ipv6_address_mode is a core attribute of subnet, we do not need to use getattr() to check the value.\" to commit message.  My personal opinion is that using property instead of getattr makes code more readable...","commit_id":"1b948b0d0205184f7d5bcc2cad7bf5f6365e7dee"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"97b8556ec3b6023927067d9cfaa7a9af558af05f","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        for i, subnet in enumerate(self.network.subnets):"},{"line_number":759,"context_line":"            if (not subnet.enable_dhcp or"},{"line_number":760,"context_line":"                (subnet.ip_version \u003d\u003d 6 and"},{"line_number":761,"context_line":"                 subnet.ipv6_address_mode \u003d\u003d constants.IPV6_SLAAC)):"},{"line_number":762,"context_line":"                continue"},{"line_number":763,"context_line":"            if subnet.dns_nameservers:"},{"line_number":764,"context_line":"                options.append("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_0bf15b6a","line":761,"in_reply_to":"9a1a9d01_f088bdc8","updated":"2015-10-03 16:30:05.000000000","message":"ipv6_address_mode is not a mandatory attribute. It is optional in the API. I would double check to ensure that if a subnet is created in the API without the attributes set, that a key is still created for the attributes when the data structure is passed from the plugin to the DHCP agent. It\u0027s been a while since I wrote this, but I\u0027m pretty sure I put that in there exactly for this reason.","commit_id":"1b948b0d0205184f7d5bcc2cad7bf5f6365e7dee"}]}
