)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d15fcc7bdf8b9a2db61bb5724fb155e1d395d04","unresolved":false,"context_lines":[{"line_number":10,"context_line":"due to the requested networks not being owned by the tenant."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In the case when there is no matched network we use the details"},{"line_number":13,"context_line":"form the used port."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie28e88ec9a9c7a180410ae5e57f84b1f653bbffc"},{"line_number":16,"context_line":"Closes-Bug: #1246258"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F%2FfHo%3D","line":13,"updated":"2013-11-04 22:23:56.000000000","message":"s/form/from/","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e9adf657190bafbf047f59157fe803f3ad1cc5ad","unresolved":false,"context_lines":[{"line_number":10,"context_line":"due to the requested networks not being owned by the tenant."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"In the case when there is no matched network we use the details"},{"line_number":13,"context_line":"form the used port."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie28e88ec9a9c7a180410ae5e57f84b1f653bbffc"},{"line_number":16,"context_line":"Closes-Bug: #1246258"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F%2FVkk%3D","line":13,"in_reply_to":"AAAATn%2F%2FfHo%3D","updated":"2013-11-09 09:48:40.000000000","message":"Done","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ac9408aa73d6ba6600682324bcbf1305812e4d0","unresolved":false,"context_lines":[{"line_number":955,"context_line":"            bridge\u003dbridge,"},{"line_number":956,"context_line":"            injected\u003dCONF.flat_injected,"},{"line_number":957,"context_line":"            label\u003dnetwork_name,"},{"line_number":958,"context_line":"            tenant_id\u003dnet[\u0027tenant_id\u0027]"},{"line_number":959,"context_line":"            )"},{"line_number":960,"context_line":"        network[\u0027subnets\u0027] \u003d subnets"},{"line_number":961,"context_line":"        port_profile \u003d port.get(\u0027binding:profile\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FfF8%3D","side":"PARENT","line":958,"updated":"2013-11-04 22:31:52.000000000","message":"Good call from Dims on this one.","commit_id":"cd48f06f497a4dcb61a5284cbcfdd207ce5baca6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ac9408aa73d6ba6600682324bcbf1305812e4d0","unresolved":false,"context_lines":[{"line_number":933,"context_line":"                tenant_id \u003d net[\u0027tenant_id\u0027]"},{"line_number":934,"context_line":"                break"},{"line_number":935,"context_line":"        if not network_name:"},{"line_number":936,"context_line":"            LOG.warning(_(\"Network %s not matched!\"),"},{"line_number":937,"context_line":"                        port[\u0027network_id\u0027])"},{"line_number":938,"context_line":"            tenant_id \u003d port[\u0027tenant_id\u0027]"},{"line_number":939,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FfGA%3D","line":936,"updated":"2013-11-04 22:31:52.000000000","message":"This warning could use some more information for the user, i.e. are they doing things between tenants and that\u0027s why it\u0027s not working?  Is there something the user can investigate?","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e9adf657190bafbf047f59157fe803f3ad1cc5ad","unresolved":false,"context_lines":[{"line_number":933,"context_line":"                tenant_id \u003d net[\u0027tenant_id\u0027]"},{"line_number":934,"context_line":"                break"},{"line_number":935,"context_line":"        if not network_name:"},{"line_number":936,"context_line":"            LOG.warning(_(\"Network %s not matched!\"),"},{"line_number":937,"context_line":"                        port[\u0027network_id\u0027])"},{"line_number":938,"context_line":"            tenant_id \u003d port[\u0027tenant_id\u0027]"},{"line_number":939,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FVk4%3D","line":936,"in_reply_to":"AAAATn%2F%2FfGA%3D","updated":"2013-11-09 09:48:40.000000000","message":"Done","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"c1b2bb52dcc9de921c509f604157990b1cb45a54","unresolved":false,"context_lines":[{"line_number":936,"context_line":"                network_name \u003d net[\u0027name\u0027]"},{"line_number":937,"context_line":"                tenant_id \u003d net[\u0027tenant_id\u0027]"},{"line_number":938,"context_line":"                break"},{"line_number":939,"context_line":"        if not network_name:"},{"line_number":940,"context_line":"            LOG.warning(_(\"Network %s not matched with the tenants \""},{"line_number":941,"context_line":"                          \"network! The ports tenant will be used.\"),"},{"line_number":942,"context_line":"                        port[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FKqU%3D","line":939,"updated":"2013-11-13 13:53:49.000000000","message":"You could use a for ... else construct here instead, which would be a bit more elegant that setting network_name to None and testing for it still being Null","commit_id":"ad331d6e33736b8e362ab38362881d5a04ea9834"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"16ab1adb24bdcaf91e74276f0bb71ba62a13b58a","unresolved":false,"context_lines":[{"line_number":936,"context_line":"                network_name \u003d net[\u0027name\u0027]"},{"line_number":937,"context_line":"                tenant_id \u003d net[\u0027tenant_id\u0027]"},{"line_number":938,"context_line":"                break"},{"line_number":939,"context_line":"        if not network_name:"},{"line_number":940,"context_line":"            LOG.warning(_(\"Network %s not matched with the tenants \""},{"line_number":941,"context_line":"                          \"network! The ports tenant will be used.\"),"},{"line_number":942,"context_line":"                        port[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FKlU%3D","line":939,"in_reply_to":"AAAATn%2F%2FKqU%3D","updated":"2013-11-13 14:15:36.000000000","message":"Done","commit_id":"ad331d6e33736b8e362ab38362881d5a04ea9834"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"14cac5fc4eb3a7c380c4b606909a41541e290311","unresolved":false,"context_lines":[{"line_number":938,"context_line":"                break"},{"line_number":939,"context_line":"        if not network_name:"},{"line_number":940,"context_line":"            LOG.warning(_(\"Network %s not matched with the tenants \""},{"line_number":941,"context_line":"                          \"network! The ports tenant will be used.\"),"},{"line_number":942,"context_line":"                        port[\u0027network_id\u0027])"},{"line_number":943,"context_line":"            tenant_id \u003d port[\u0027tenant_id\u0027]"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FR2s%3D","line":941,"updated":"2013-11-11 20:00:31.000000000","message":"nit: if you push another patch up for whatever reason, might be good to put the port\u0027s tenant in the message also.","commit_id":"ad331d6e33736b8e362ab38362881d5a04ea9834"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"16ab1adb24bdcaf91e74276f0bb71ba62a13b58a","unresolved":false,"context_lines":[{"line_number":938,"context_line":"                break"},{"line_number":939,"context_line":"        if not network_name:"},{"line_number":940,"context_line":"            LOG.warning(_(\"Network %s not matched with the tenants \""},{"line_number":941,"context_line":"                          \"network! The ports tenant will be used.\"),"},{"line_number":942,"context_line":"                        port[\u0027network_id\u0027])"},{"line_number":943,"context_line":"            tenant_id \u003d port[\u0027tenant_id\u0027]"},{"line_number":944,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FKlQ%3D","line":941,"in_reply_to":"AAAATn%2F%2FR2s%3D","updated":"2013-11-13 14:15:36.000000000","message":"Done","commit_id":"ad331d6e33736b8e362ab38362881d5a04ea9834"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"a9b0513a2db41373d18560f6a4991e2f8ffd19aa","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    raise exception.PortNotFound(port_id\u003dport_id)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"},{"line_number":419,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2B7Zs%3D","line":416,"updated":"2013-11-19 15:04:36.000000000","message":"I don\u0027t think you need to re-raise the exception in this case,  as we\u0027re trying to delete a port that doesn\u0027t exist.  Delete should just log and carry on in this case.   Other errors, like a lack of permissions, should raise an exception - but this is covered in your else block.","commit_id":"e3aa4fa0f3a3b7672c34c964f9f295180be8b369"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"282db99f41a644858a013b1ac037a9fd8c220b08","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    raise exception.PortNotFound(port_id\u003dport_id)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"},{"line_number":419,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2B1Ic%3D","line":416,"in_reply_to":"AAAATn%2F%2B7Zs%3D","updated":"2013-11-19 16:14:41.000000000","message":"Done","commit_id":"e3aa4fa0f3a3b7672c34c964f9f295180be8b369"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64fd75defd8c2d8670befdcb92dec342c3b1ec08","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port_id)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2Bq8Q%3D","line":415,"updated":"2013-11-21 18:45:12.000000000","message":"What is covering this case in the tests?","commit_id":"d467cf915b27f5c08489452db8dd976458671c64"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0175748cb71494adbdd4256759be0524945b4f46","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port_id)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2Bnxg%3D","line":415,"in_reply_to":"AAAATn%2F%2Bq8Q%3D","updated":"2013-11-22 11:00:45.000000000","message":"Good catch. My bad","commit_id":"d467cf915b27f5c08489452db8dd976458671c64"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64fd75defd8c2d8670befdcb92dec342c3b1ec08","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port_id)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"},{"line_number":419,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2Bq8Y%3D","line":416,"updated":"2013-11-21 18:45:12.000000000","message":"Where is port_id defined in scope?","commit_id":"d467cf915b27f5c08489452db8dd976458671c64"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0175748cb71494adbdd4256759be0524945b4f46","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port_id)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"},{"line_number":419,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BnxQ%3D","line":416,"in_reply_to":"AAAATn%2F%2Bq8Y%3D","updated":"2013-11-22 11:00:45.000000000","message":"hmmmm. i should be flogged in the town square for this one","commit_id":"d467cf915b27f5c08489452db8dd976458671c64"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e97771d0ea87610e226f5fb90f0d6bd82648667a","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        for port in ports:"},{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9gZ4%3D","line":413,"updated":"2013-12-10 20:38:40.000000000","message":"It makes me think, It could be interesting to implement batch operations (I don\u0027t mean in this patch). Thanks for the fix.","commit_id":"a17d7d6a1976a21e51aa6a9781e5035f28429762"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e41cc48dca4d22c6b6f348f38ae789b3a77a6bd7","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        for port in ports:"},{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9Wj0%3D","line":413,"in_reply_to":"AAAATn%2F9gVE%3D","updated":"2013-12-12 11:06:21.000000000","message":"At the moment neutron only supports bulk creation and not bulk deletion. That is certainly something that we can and should address in the future. Still do not see what that should block this patch.","commit_id":"a17d7d6a1976a21e51aa6a9781e5035f28429762"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"262b0c9f97cd53340d512cfbe433fdea5325a8c8","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        for port in ports:"},{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9gVE%3D","line":413,"in_reply_to":"AAAATn%2F9gZ4%3D","updated":"2013-12-10 20:50:10.000000000","message":"Speak of the devil(s):\n\nhttps://blueprints.launchpad.net/neutron/+spec/instance-nw-info-api\n\nhttps://blueprints.launchpad.net/nova/+spec/batch-operation-attach-interfaces","commit_id":"a17d7d6a1976a21e51aa6a9781e5035f28429762"},{"author":{"_account_id":6447,"name":"Avishay Balderman","email":"avishayb@radware.com","username":"avishayb"},"change_message_id":"9415a822dc5e2a2862d6c1610544647fbd61c8b0","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9V0k%3D","line":415,"updated":"2013-12-12 13:53:58.000000000","message":"consider using : webob.exc.HTTPNotFound.code and not 404","commit_id":"a17d7d6a1976a21e51aa6a9781e5035f28429762"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b75a5dc53b96a78abeb160525fc32eae87380183","unresolved":false,"context_lines":[{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":414,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":415,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9KHs%3D","line":415,"in_reply_to":"AAAATn%2F9V0k%3D","updated":"2013-12-16 07:18:27.000000000","message":"i will do that in another patch as it needs to be addressed in other places too. nice idea","commit_id":"a17d7d6a1976a21e51aa6a9781e5035f28429762"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"b41183c9340c7d929dc62967a6ee708bd7ef9333","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"},{"line_number":419,"context_line":"                    raise"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def allocate_port_for_instance(self, context, instance, port_id,"},{"line_number":422,"context_line":"                                   network_id\u003dNone, requested_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FriQ%3D","line":419,"updated":"2014-01-09 17:23:32.000000000","message":"With eventlet this might not raise the exception you\u0027re expecting and could actually throw an error.  You\u0027ll need some version of save and reraise","commit_id":"a17d7d6a1976a21e51aa6a9781e5035f28429762"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"76c83b87f150b5e22d4c84a44ff0f035558c7abf","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"},{"line_number":419,"context_line":"                    raise"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def allocate_port_for_instance(self, context, instance, port_id,"},{"line_number":422,"context_line":"                                   network_id\u003dNone, requested_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FiLs%3D","line":419,"in_reply_to":"AAAAUH%2F%2FriQ%3D","updated":"2014-01-12 09:55:09.000000000","message":"Done","commit_id":"a17d7d6a1976a21e51aa6a9781e5035f28429762"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"3a5ecaab4dff29f15685bd38161b97841c209dc1","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"},{"line_number":417,"context_line":"                else:"},{"line_number":418,"context_line":"                    LOG.exception(_(\"Failed to delete neutron port %s\"), port)"},{"line_number":419,"context_line":"                    raise"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def allocate_port_for_instance(self, context, instance, port_id,"},{"line_number":422,"context_line":"                                   network_id\u003dNone, requested_ip\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FmHc%3D","line":419,"in_reply_to":"AAAAUH%2F%2FriQ%3D","updated":"2014-01-10 17:02:51.000000000","message":"Yep, that is correct","commit_id":"a17d7d6a1976a21e51aa6a9781e5035f28429762"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"e37b6b6cbd735be61e30e0c457063c394b09ecd5","unresolved":false,"context_lines":[{"line_number":395,"context_line":""},{"line_number":396,"context_line":"        for port in ports:"},{"line_number":397,"context_line":"            try:"},{"line_number":398,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":399,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":400,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":401,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FL7U%3D","line":398,"updated":"2014-01-16 16:38:25.000000000","message":"A minor point, but it seems odd that we carry the overhead of getting a client twice in the same method (A client is created at line 389)","commit_id":"5efd1e1fe6f45d67f87258d65ecf72fca511a29d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"fc53ec763aea7d71c91a59a6aae83acb9e057cb1","unresolved":false,"context_lines":[{"line_number":395,"context_line":""},{"line_number":396,"context_line":"        for port in ports:"},{"line_number":397,"context_line":"            try:"},{"line_number":398,"context_line":"                neutronv2.get_client(context).delete_port(port)"},{"line_number":399,"context_line":"            except neutronv2.exceptions.NeutronClientException as e:"},{"line_number":400,"context_line":"                if e.status_code \u003d\u003d 404:"},{"line_number":401,"context_line":"                    LOG.warning(_(\"Port %s does not exist\"), port)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FAig%3D","line":398,"in_reply_to":"AAAAUH%2F%2FL7U%3D","updated":"2014-01-19 10:15:31.000000000","message":"Done","commit_id":"5efd1e1fe6f45d67f87258d65ecf72fca511a29d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a266f026368d97ddbe3a22bf02597c977619d0dd","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"            net_ids \u003d [iface[\u0027network\u0027][\u0027id\u0027] for iface in ifaces]"},{"line_number":1021,"context_line":"            networks \u003d self._get_available_networks(context,"},{"line_number":1022,"context_line":"                                                    instance[\u0027project_id\u0027],"},{"line_number":1023,"context_line":"                                                    net_ids)"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"        # ensure ports are in preferred network order, and filter out"},{"line_number":1026,"context_line":"        # those not attached to one of the provided list of networks"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2B1L8%3D","line":1023,"updated":"2014-01-21 16:37:12.000000000","message":"Why is this here now?  Shows up in patch set 10 but I don\u0027t see any comments about why it\u0027s needed in the previous reviews or in the commit message.","commit_id":"b12da559b6a40fba4e4431d74372b5e350047525"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9465a1afb36622611152cebb25164f998df04c0d","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"            net_ids \u003d [iface[\u0027network\u0027][\u0027id\u0027] for iface in ifaces]"},{"line_number":1021,"context_line":"            networks \u003d self._get_available_networks(context,"},{"line_number":1022,"context_line":"                                                    instance[\u0027project_id\u0027],"},{"line_number":1023,"context_line":"                                                    net_ids)"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"        # ensure ports are in preferred network order, and filter out"},{"line_number":1026,"context_line":"        # those not attached to one of the provided list of networks"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2Bx5U%3D","line":1023,"in_reply_to":"AAAAUH%2F%2B1L8%3D","updated":"2014-01-22 08:11:22.000000000","message":"Sorry, this was an issue that we discussed over IRC. When a \"Service\" VM run by an admin account connects cross tenants, the network name did not show. This addresses that edge case.","commit_id":"b12da559b6a40fba4e4431d74372b5e350047525"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"924d611dd5ca0c5aa72de1572959cbb9aa289e69","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"            net_ids \u003d [iface[\u0027network\u0027][\u0027id\u0027] for iface in ifaces]"},{"line_number":1021,"context_line":"            networks \u003d self._get_available_networks(context,"},{"line_number":1022,"context_line":"                                                    instance[\u0027project_id\u0027],"},{"line_number":1023,"context_line":"                                                    net_ids)"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"        # ensure ports are in preferred network order, and filter out"},{"line_number":1026,"context_line":"        # those not attached to one of the provided list of networks"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2BwWA%3D","line":1023,"in_reply_to":"AAAAUH%2F%2Bx5U%3D","updated":"2014-01-22 13:47:55.000000000","message":"OK, makes sense.  Plus I just realized that before this change, the net_ids var in scope wasn\u0027t being used.  Did someone goof on that?  Looks like it was just a mistake since net_ids was set in this block, and wasn\u0027t caught/fixed in commit 10004672.","commit_id":"b12da559b6a40fba4e4431d74372b5e350047525"}],"nova/tests/network/test_neutronv2.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ac9408aa73d6ba6600682324bcbf1305812e4d0","unresolved":false,"context_lines":[{"line_number":1553,"context_line":"        neutronv2.get_client(\u0027fake\u0027)"},{"line_number":1554,"context_line":"        net, iid \u003d api._nw_info_build_network(fake_port, fake_nets,"},{"line_number":1555,"context_line":"                                              fake_subnets)"},{"line_number":1556,"context_line":"        self.assertEqual(net[\u0027subnets\u0027], fake_subnets)"},{"line_number":1557,"context_line":"        self.assertEqual(net[\u0027id\u0027], \u0027net-id1\u0027)"},{"line_number":1558,"context_line":""},{"line_number":1559,"context_line":"    def test_build_network_info_model(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FfFw%3D","line":1556,"updated":"2013-11-04 22:31:52.000000000","message":"nit: assertEquals args are (expected, observed) so these should be reversed.","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e9adf657190bafbf047f59157fe803f3ad1cc5ad","unresolved":false,"context_lines":[{"line_number":1553,"context_line":"        neutronv2.get_client(\u0027fake\u0027)"},{"line_number":1554,"context_line":"        net, iid \u003d api._nw_info_build_network(fake_port, fake_nets,"},{"line_number":1555,"context_line":"                                              fake_subnets)"},{"line_number":1556,"context_line":"        self.assertEqual(net[\u0027subnets\u0027], fake_subnets)"},{"line_number":1557,"context_line":"        self.assertEqual(net[\u0027id\u0027], \u0027net-id1\u0027)"},{"line_number":1558,"context_line":""},{"line_number":1559,"context_line":"    def test_build_network_info_model(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FVk0%3D","line":1556,"in_reply_to":"AAAATn%2F%2FfFw%3D","updated":"2013-11-09 09:48:40.000000000","message":"Done","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ac9408aa73d6ba6600682324bcbf1305812e4d0","unresolved":false,"context_lines":[{"line_number":1554,"context_line":"        net, iid \u003d api._nw_info_build_network(fake_port, fake_nets,"},{"line_number":1555,"context_line":"                                              fake_subnets)"},{"line_number":1556,"context_line":"        self.assertEqual(net[\u0027subnets\u0027], fake_subnets)"},{"line_number":1557,"context_line":"        self.assertEqual(net[\u0027id\u0027], \u0027net-id1\u0027)"},{"line_number":1558,"context_line":""},{"line_number":1559,"context_line":"    def test_build_network_info_model(self):"},{"line_number":1560,"context_line":"        api \u003d neutronapi.API()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FfFs%3D","line":1557,"updated":"2013-11-04 22:31:52.000000000","message":"ditto","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e9adf657190bafbf047f59157fe803f3ad1cc5ad","unresolved":false,"context_lines":[{"line_number":1554,"context_line":"        net, iid \u003d api._nw_info_build_network(fake_port, fake_nets,"},{"line_number":1555,"context_line":"                                              fake_subnets)"},{"line_number":1556,"context_line":"        self.assertEqual(net[\u0027subnets\u0027], fake_subnets)"},{"line_number":1557,"context_line":"        self.assertEqual(net[\u0027id\u0027], \u0027net-id1\u0027)"},{"line_number":1558,"context_line":""},{"line_number":1559,"context_line":"    def test_build_network_info_model(self):"},{"line_number":1560,"context_line":"        api \u003d neutronapi.API()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FVkw%3D","line":1557,"in_reply_to":"AAAATn%2F%2FfFs%3D","updated":"2013-11-09 09:48:40.000000000","message":"Done","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ac9408aa73d6ba6600682324bcbf1305812e4d0","unresolved":false,"context_lines":[{"line_number":1555,"context_line":"                                              fake_subnets)"},{"line_number":1556,"context_line":"        self.assertEqual(net[\u0027subnets\u0027], fake_subnets)"},{"line_number":1557,"context_line":"        self.assertEqual(net[\u0027id\u0027], \u0027net-id1\u0027)"},{"line_number":1558,"context_line":""},{"line_number":1559,"context_line":"    def test_build_network_info_model(self):"},{"line_number":1560,"context_line":"        api \u003d neutronapi.API()"},{"line_number":1561,"context_line":"        fake_inst \u003d {\u0027project_id\u0027: \u0027fake\u0027, \u0027uuid\u0027: \u0027uuid\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FfFQ%3D","line":1558,"updated":"2013-11-04 22:31:52.000000000","message":"Add an assertion for the tenant_id set in the net object.","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e9adf657190bafbf047f59157fe803f3ad1cc5ad","unresolved":false,"context_lines":[{"line_number":1555,"context_line":"                                              fake_subnets)"},{"line_number":1556,"context_line":"        self.assertEqual(net[\u0027subnets\u0027], fake_subnets)"},{"line_number":1557,"context_line":"        self.assertEqual(net[\u0027id\u0027], \u0027net-id1\u0027)"},{"line_number":1558,"context_line":""},{"line_number":1559,"context_line":"    def test_build_network_info_model(self):"},{"line_number":1560,"context_line":"        api \u003d neutronapi.API()"},{"line_number":1561,"context_line":"        fake_inst \u003d {\u0027project_id\u0027: \u0027fake\u0027, \u0027uuid\u0027: \u0027uuid\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FVko%3D","line":1558,"in_reply_to":"AAAATn%2F%2FfFQ%3D","updated":"2013-11-09 09:48:40.000000000","message":"Done","commit_id":"e571c2df804fb5b20306051cfbdbd0793b6c1af2"}]}
