)]}'
{"neutron/plugins/common/utils.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"a3d0801e2af7a422a98482f8029992cccde2df6b","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    return core_plugin.create_network(context, {\u0027network\u0027: net_data})"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"def update_network(core_plugin, context, network_id, net_data):"},{"line_number":157,"context_line":"    network \u003d core_plugin.update_network("},{"line_number":158,"context_line":"        context, network_id, {resources.NETWORK: net_data})"},{"line_number":159,"context_line":"    # bundle the plugin API update with any other action required to"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a9d85d2_e1e4770e","line":156,"updated":"2016-06-20 22:16:05.000000000","message":"i reckon this function should return network","commit_id":"b1b40556b2d531a8eb119cea1f55cadc5709e2f1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"34a1d12a198938a56cae483b7307b1f1d4c5d673","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    # reflect a state change on the network, e.g. DHCP notifications"},{"line_number":161,"context_line":"    registry.notify(resources.NETWORK, events.BEFORE_RESPONSE, core_plugin,"},{"line_number":162,"context_line":"                    context\u003dcontext, data\u003d{resources.NETWORK: network},"},{"line_number":163,"context_line":"                    method_name\u003d\u0027network.update.end\u0027)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"def create_subnet(core_plugin, context, subnet, check_allow_post\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_177efa18","line":163,"updated":"2016-06-23 07:11:44.000000000","message":"this should return the network dictionary","commit_id":"835f194fce10f9888575d3c800cc7cf294a99291"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5349d6cfad51dccfc9c33fa47c36047aad42ca6d","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    # reflect a state change on the network, e.g. DHCP notifications"},{"line_number":161,"context_line":"    registry.notify(resources.NETWORK, events.BEFORE_RESPONSE, core_plugin,"},{"line_number":162,"context_line":"                    context\u003dcontext, data\u003d{resources.NETWORK: network},"},{"line_number":163,"context_line":"                    method_name\u003d\u0027network.update.end\u0027)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"def create_subnet(core_plugin, context, subnet, check_allow_post\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_eec42d60","line":163,"in_reply_to":"3aaa91ec_177efa18","updated":"2016-06-23 11:59:07.000000000","message":"good point.","commit_id":"835f194fce10f9888575d3c800cc7cf294a99291"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"c800ff98a05ca7eecb5540f6cec6bb3b032e60f5","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    network \u003d core_plugin.update_network("},{"line_number":158,"context_line":"        context, network_id, {resources.NETWORK: net_data})"},{"line_number":159,"context_line":"    # bundle the plugin API update with any other action required to"},{"line_number":160,"context_line":"    # reflect a state change on the network, e.g. DHCP notifications"},{"line_number":161,"context_line":"    registry.notify(resources.NETWORK, events.BEFORE_RESPONSE, core_plugin,"},{"line_number":162,"context_line":"                    context\u003dcontext, data\u003d{resources.NETWORK: network},"},{"line_number":163,"context_line":"                    method_name\u003d\u0027network.update.end\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3aaa91ec_4fa37800","line":160,"updated":"2016-06-24 13:30:12.000000000","message":"http://nedbatchelder.com/blog/201401/comments_should_be_sentences.html","commit_id":"d91a4e1930bd8f05f7b2055a2278f5bd788cd6b4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7cb40aa16ff376e0b273462e72838b7c041f5020","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    network \u003d core_plugin.update_network("},{"line_number":158,"context_line":"        context, network_id, {resources.NETWORK: net_data})"},{"line_number":159,"context_line":"    # bundle the plugin API update with any other action required to"},{"line_number":160,"context_line":"    # reflect a state change on the network, e.g. DHCP notifications"},{"line_number":161,"context_line":"    registry.notify(resources.NETWORK, events.BEFORE_RESPONSE, core_plugin,"},{"line_number":162,"context_line":"                    context\u003dcontext, data\u003d{resources.NETWORK: network},"},{"line_number":163,"context_line":"                    method_name\u003d\u0027network.update.end\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3aaa91ec_b8be7dab","line":160,"in_reply_to":"3aaa91ec_4fa37800","updated":"2016-06-25 17:02:45.000000000","message":"are you telling me I forgot a period at the end? This sounds like a sentence in my head. I am not following, so if you can elaborate I\u0027d be grateful.","commit_id":"d91a4e1930bd8f05f7b2055a2278f5bd788cd6b4"}],"neutron/services/auto_allocate/db.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7c3611944a7f50970a96f091aff1514cc1c3276f","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        if network_id:"},{"line_number":329,"context_line":"            self.core_plugin.delete_network(context, network_id)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def _get_auto_network_uuid(self, tenant_id):"},{"line_number":332,"context_line":"        \"\"\"Generate network UUID from tenant ID.\"\"\""},{"line_number":333,"context_line":"        # It does so by splitting tenant ID in sequences of"},{"line_number":334,"context_line":"        # 8, 4, 4, 4, and 12 characters as per UUID format"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_e8ffd3fe","line":331,"updated":"2016-06-13 15:13:49.000000000","message":"Simple question, why not just use the tenant_id as the network UUID since there should only be one of these types of networks per tenant, right?\n\nAlso, I think we assume tenant IDs are UUIDs, but I don\u0027t think that\u0027s actually a hard-requirement in Keystone, so I\u0027m not sure if the tenant_id parsing here is valid in all cases. Sean Dague definitely knows more details about the tenant ID limitations in OpenStack.","commit_id":"87d394ffca6f65ca14182eea29a7ec40efb12ac8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2fe89d790a8c66b7c14a04f7c2047bf526cc8ce9","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        if network_id:"},{"line_number":329,"context_line":"            self.core_plugin.delete_network(context, network_id)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def _get_auto_network_uuid(self, tenant_id):"},{"line_number":332,"context_line":"        \"\"\"Generate network UUID from tenant ID.\"\"\""},{"line_number":333,"context_line":"        # It does so by splitting tenant ID in sequences of"},{"line_number":334,"context_line":"        # 8, 4, 4, 4, and 12 characters as per UUID format"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_fc82f550","line":331,"in_reply_to":"7aa08908_28f0bbfc","updated":"2016-06-13 16:34:22.000000000","message":"we could use any hash function, I was lazy enough not to use/import anything fancy.","commit_id":"87d394ffca6f65ca14182eea29a7ec40efb12ac8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a4c53d819fae7f0b59958d0b28dff9055dd4d8ab","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        if network_id:"},{"line_number":329,"context_line":"            self.core_plugin.delete_network(context, network_id)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def _get_auto_network_uuid(self, tenant_id):"},{"line_number":332,"context_line":"        \"\"\"Generate network UUID from tenant ID.\"\"\""},{"line_number":333,"context_line":"        # It does so by splitting tenant ID in sequences of"},{"line_number":334,"context_line":"        # 8, 4, 4, 4, and 12 characters as per UUID format"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_28f0bbfc","line":331,"in_reply_to":"7aa08908_e8ffd3fe","updated":"2016-06-13 15:17:31.000000000","message":"If tenant ID isn\u0027t a UUID, you could use something like uuid.uuid5 to create a UUID based on a namespace and pass in the tenant_id as the 2nd arg for a predictable result.","commit_id":"87d394ffca6f65ca14182eea29a7ec40efb12ac8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6479f2355d9f8bb8f1e3907c94d15f8c39a3b20c","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        if network_id:"},{"line_number":329,"context_line":"            self.core_plugin.delete_network(context, network_id)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    def _get_auto_network_uuid(self, tenant_id):"},{"line_number":332,"context_line":"        \"\"\"Generate network UUID from tenant ID.\"\"\""},{"line_number":333,"context_line":"        # It does so by splitting tenant ID in sequences of"},{"line_number":334,"context_line":"        # 8, 4, 4, 4, and 12 characters as per UUID format"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_8ee44c3c","line":331,"in_reply_to":"7aa08908_fc82f550","updated":"2016-06-13 20:04:04.000000000","message":"Sure, np, thanks for actually getting this fix up so fast. I should probably change my devstack or tempest patch to depend on this anyway to test it out.","commit_id":"87d394ffca6f65ca14182eea29a7ec40efb12ac8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"38b9eab1a5d8575de5094f7879f906b48056a382","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                context, tenant_id)"},{"line_number":127,"context_line":"        except db_exc.DBDuplicateEntry:"},{"line_number":128,"context_line":"            LOG.debug(\"Multiple auto-allocated network requests \""},{"line_number":129,"context_line":"                      \"detected for tenant %s.\" % tenant_id)"},{"line_number":130,"context_line":"            return self._response("},{"line_number":131,"context_line":"                self._get_auto_network_uuid(tenant_id),"},{"line_number":132,"context_line":"                tenant_id, fields\u003dfields)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_e46fd05d","line":129,"updated":"2016-06-14 12:10:51.000000000","message":"please use a , instead of the %","commit_id":"567b6744d67ab1669c51462f86aa47846e155eaa"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"6ddd9d841546807c74585a9c986d0438f83890b3","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                context, tenant_id)"},{"line_number":127,"context_line":"        except db_exc.DBDuplicateEntry:"},{"line_number":128,"context_line":"            LOG.debug(\"Multiple auto-allocated network requests \""},{"line_number":129,"context_line":"                      \"detected for tenant %s.\" % tenant_id)"},{"line_number":130,"context_line":"            return self._response("},{"line_number":131,"context_line":"                self._get_auto_network_uuid(tenant_id),"},{"line_number":132,"context_line":"                tenant_id, fields\u003dfields)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_2a8d2131","line":129,"in_reply_to":"7aa08908_e46fd05d","updated":"2016-06-14 12:40:49.000000000","message":"I used the % to see if you spotted it! Well done.","commit_id":"567b6744d67ab1669c51462f86aa47846e155eaa"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"38b9eab1a5d8575de5094f7879f906b48056a382","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def _get_auto_network_uuid(self, tenant_id):"},{"line_number":335,"context_line":"        \"\"\"Generate network UUID from tenant ID.\"\"\""},{"line_number":336,"context_line":"        return str(uuid.uuid5(uuid.NAMESPACE_OID, tenant_id))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_a4c78843","line":336,"updated":"2016-06-14 12:10:51.000000000","message":"could this conflicts with an already existing neutron id?","commit_id":"567b6744d67ab1669c51462f86aa47846e155eaa"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"6ddd9d841546807c74585a9c986d0438f83890b3","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def _get_auto_network_uuid(self, tenant_id):"},{"line_number":335,"context_line":"        \"\"\"Generate network UUID from tenant ID.\"\"\""},{"line_number":336,"context_line":"        return str(uuid.uuid5(uuid.NAMESPACE_OID, tenant_id))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_2a09a195","line":336,"in_reply_to":"7aa08908_a4c78843","updated":"2016-06-14 12:40:49.000000000","message":"Just as much as the probability of collision with another UUID.","commit_id":"567b6744d67ab1669c51462f86aa47846e155eaa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ace2444abd8b72325959d368265da1cb8ee425b6","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            \u0027name\u0027: \u0027auto_allocated_router\u0027,"},{"line_number":258,"context_line":"            l3.EXTERNAL_GW_INFO: default_external_network,"},{"line_number":259,"context_line":"            \u0027tenant_id\u0027: tenant_id,"},{"line_number":260,"context_line":"            \u0027admin_state_up\u0027: True"},{"line_number":261,"context_line":"        }"},{"line_number":262,"context_line":"        router \u003d None"},{"line_number":263,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_d387ccd5","line":260,"range":{"start_line":260,"start_character":12,"end_line":260,"end_character":34},"updated":"2016-06-18 23:52:30.000000000","message":"Seems this should also be False, and it looks like we should delete the duplicate router, I\u0027m seeing two in the tempest run here:\n\nhttp://logs.openstack.org/01/327901/1/check/gate-tempest-dsvm-neutron-full/46ba8c3/console.html#_2016-06-18_21_52_24_088848","commit_id":"2b71b1af9d7f2fb96d09d4cb052b5e256671be4d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"362e11a40778fdffb75e44fc73f2cd0594043a61","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            \u0027name\u0027: \u0027auto_allocated_router\u0027,"},{"line_number":258,"context_line":"            l3.EXTERNAL_GW_INFO: default_external_network,"},{"line_number":259,"context_line":"            \u0027tenant_id\u0027: tenant_id,"},{"line_number":260,"context_line":"            \u0027admin_state_up\u0027: True"},{"line_number":261,"context_line":"        }"},{"line_number":262,"context_line":"        router \u003d None"},{"line_number":263,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a9d85d2_76908696","line":260,"range":{"start_line":260,"start_character":12,"end_line":260,"end_character":34},"in_reply_to":"5a9d85d2_d387ccd5","updated":"2016-06-19 02:30:05.000000000","message":"Ignore, figured out the problem with Armando in IRC, the Tempest test is doing it\u0027s tearDowns in the wrong order.","commit_id":"2b71b1af9d7f2fb96d09d4cb052b5e256671be4d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"05d9eea0699c5a5a73e924fd0f503f0276e516b6","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                context, network_id\u003dnetwork_id,"},{"line_number":305,"context_line":"                router_id\u003drouter_id, subnets\u003dsubnets)"},{"line_number":306,"context_line":"            network_id \u003d self._get_auto_allocated_network(context, tenant_id)"},{"line_number":307,"context_line":"        p_utils.update_network("},{"line_number":308,"context_line":"            self.core_plugin, context, network_id, {\u0027admin_state_up\u0027: True})"},{"line_number":309,"context_line":"        return network_id"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_1d39b8d7","line":307,"updated":"2016-06-24 07:33:22.000000000","message":"I think this belongs after L295. Otherwise you will get all of the racers exiting from L306 also trying to update a network they didn\u0027t create.","commit_id":"9607fb3461de616d1f1fa9be3ebbd8f761cf19bd"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7018ad33d3998106dba5c576128b49c9e55494ce","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                context, network_id\u003dnetwork_id,"},{"line_number":305,"context_line":"                router_id\u003drouter_id, subnets\u003dsubnets)"},{"line_number":306,"context_line":"            network_id \u003d self._get_auto_allocated_network(context, tenant_id)"},{"line_number":307,"context_line":"        p_utils.update_network("},{"line_number":308,"context_line":"            self.core_plugin, context, network_id, {\u0027admin_state_up\u0027: True})"},{"line_number":309,"context_line":"        return network_id"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_fdf02cff","line":307,"in_reply_to":"3aaa91ec_1d39b8d7","updated":"2016-06-24 07:39:31.000000000","message":"good point.","commit_id":"9607fb3461de616d1f1fa9be3ebbd8f761cf19bd"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"63e6772c66ed087640d32d0316df08e9830816ec","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                context, network_id\u003dnetwork_id,"},{"line_number":305,"context_line":"                router_id\u003drouter_id, subnets\u003dsubnets)"},{"line_number":306,"context_line":"            network_id \u003d self._get_auto_allocated_network(context, tenant_id)"},{"line_number":307,"context_line":"        p_utils.update_network("},{"line_number":308,"context_line":"            self.core_plugin, context, network_id, {\u0027admin_state_up\u0027: True})"},{"line_number":309,"context_line":"        return network_id"},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_cf0128b1","line":307,"in_reply_to":"3aaa91ec_fdf02cff","updated":"2016-06-24 13:26:49.000000000","message":"This kind of thing is what the \u0027else\u0027 clause is for in Python\u0027s try-except-else construct.","commit_id":"9607fb3461de616d1f1fa9be3ebbd8f761cf19bd"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"c800ff98a05ca7eecb5540f6cec6bb3b032e60f5","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                        tenant_id\u003dtenant_id,"},{"line_number":294,"context_line":"                        network_id\u003dnetwork_id,"},{"line_number":295,"context_line":"                        router_id\u003drouter_id))"},{"line_number":296,"context_line":"            p_utils.update_network("},{"line_number":297,"context_line":"                self.core_plugin, context,"},{"line_number":298,"context_line":"                network_id, {\u0027admin_state_up\u0027: True})"},{"line_number":299,"context_line":"        except db_exc.DBDuplicateEntry:"},{"line_number":300,"context_line":"            LOG.error(_LE(\"Multiple auto-allocated networks detected for \""},{"line_number":301,"context_line":"                          \"tenant %(tenant)s. Attempting clean up for \""}],"source_content_type":"text/x-python","patch_set":17,"id":"3aaa91ec_8fd3a003","line":298,"range":{"start_line":296,"start_character":12,"end_line":298,"end_character":53},"updated":"2016-06-24 13:30:12.000000000","message":"Any chance you could stick this in an \u0027else\u0027 clause? If you don\u0027t want to I will relent.","commit_id":"d91a4e1930bd8f05f7b2055a2278f5bd788cd6b4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7cb40aa16ff376e0b273462e72838b7c041f5020","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                        tenant_id\u003dtenant_id,"},{"line_number":294,"context_line":"                        network_id\u003dnetwork_id,"},{"line_number":295,"context_line":"                        router_id\u003drouter_id))"},{"line_number":296,"context_line":"            p_utils.update_network("},{"line_number":297,"context_line":"                self.core_plugin, context,"},{"line_number":298,"context_line":"                network_id, {\u0027admin_state_up\u0027: True})"},{"line_number":299,"context_line":"        except db_exc.DBDuplicateEntry:"},{"line_number":300,"context_line":"            LOG.error(_LE(\"Multiple auto-allocated networks detected for \""},{"line_number":301,"context_line":"                          \"tenant %(tenant)s. Attempting clean up for \""}],"source_content_type":"text/x-python","patch_set":17,"id":"3aaa91ec_78cff555","line":298,"range":{"start_line":296,"start_character":12,"end_line":298,"end_character":53},"in_reply_to":"3aaa91ec_8fd3a003","updated":"2016-06-25 17:02:45.000000000","message":"They are equivalent, though, so it\u0027s a matter of style.","commit_id":"d91a4e1930bd8f05f7b2055a2278f5bd788cd6b4"}]}
