)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3e131a9307ca4378dc0b7663376503d288a9cec7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix breaking out of nested loops"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1659169"},{"line_number":10,"context_line":"Change-Id: Ibdeb94541931a7ad0221c9eaca59f79f190770fd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a461143_5bb9fae8","line":9,"updated":"2017-01-25 21:38:32.000000000","message":"Current commit message is hard to understand the problem.\nIt is necessary to include what the original problem is.\n\nPlease see https://wiki.openstack.org/wiki/GitCommitMessages#Information_in_commit_messages\n\n Do not assume the reviewer understands what the original problem was.\n\n When reading bug reports, after a number of back \u0026 forth\n comments, it is often as clear as mud, what the root cause\n problem is. The commit message should have a clear statement\n as to what the original problem is. The bug is merely\n interesting historical background on /how/ the problem was\n identified. It should be possible to review a proposed patch\n for correctness without needing to read the bug ticket.","commit_id":"afff2f3d695c4714902a7ed3118883ec299073e2"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"3cbc3668d29f5cddd6ad9d3cefd97e820fb72e4d","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1676,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1677,"context_line":"                    port_id \u003d p[\u0027id\u0027]"},{"line_number":1678,"context_line":"                    break"},{"line_number":1679,"context_line":"            else:"},{"line_number":1680,"context_line":"                continue"},{"line_number":1681,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_6596e54d","line":1678,"range":{"start_line":1678,"start_character":20,"end_line":1678,"end_character":25},"updated":"2017-02-06 05:44:36.000000000","message":"actually we can return at here directly.","commit_id":"72e34383cb533c1c70ab085821b7d12b1b16551b"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"3b767c536af622d4627123e62107ad03af3db3e1","unresolved":false,"context_lines":[{"line_number":1675,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1676,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1677,"context_line":"                    port_id \u003d p[\u0027id\u0027]"},{"line_number":1678,"context_line":"                    break"},{"line_number":1679,"context_line":"            else:"},{"line_number":1680,"context_line":"                continue"},{"line_number":1681,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_8573d1e6","line":1678,"range":{"start_line":1678,"start_character":20,"end_line":1678,"end_character":25},"in_reply_to":"1a430d35_6596e54d","updated":"2017-02-06 06:09:13.000000000","message":"indeed, thanks Alex for the suggestion!","commit_id":"72e34383cb533c1c70ab085821b7d12b1b16551b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"230994593432d22d19b8df70f353384f03b79402","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                       \u0027device_owner\u0027: zone}"},{"line_number":1671,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":1672,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_1c4d2fc4","line":1676,"range":{"start_line":1673,"start_character":0,"end_line":1676,"end_character":34},"updated":"2017-02-07 14:37:17.000000000","message":"Is is possible for more than one port to be associated with an IP address? If so, this would be a changing behavior as previously the last port with a matching IP address would be found, whereas now the first matching port will be returned.","commit_id":"71eb84c2bf14e62dc5a38f12aba39b97b958e9b9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"20c01bee1482038b8c65ba7834880ff561cce066","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                       \u0027device_owner\u0027: zone}"},{"line_number":1671,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":1672,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_c84f0090","line":1676,"range":{"start_line":1673,"start_character":0,"end_line":1676,"end_character":34},"in_reply_to":"1a430d35_1c4d2fc4","updated":"2017-02-09 12:31:28.000000000","message":"It is technically possible, thats a good point...\n\nIts tempting to raise a different exception for \"there is more than one port with that address, so I can\u0027t help you\"","commit_id":"71eb84c2bf14e62dc5a38f12aba39b97b958e9b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"33551d217246f40881da0016363cd8250c64e448","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                       \u0027device_owner\u0027: zone}"},{"line_number":1671,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":1672,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa31d9ce_9bee14eb","line":1676,"range":{"start_line":1673,"start_character":0,"end_line":1676,"end_character":34},"in_reply_to":"1a430d35_2b423eae","updated":"2017-02-10 05:09:28.000000000","message":"just clarify, I talk with John at IRC, I get clear what he proposal, he prefer to not change anything.\n\nI\u0027m ok with it. Actually I think both it is ok, I feel vm have to port with same fixed id, and try to attach floating ip is a strange use-case. I didn\u0027t few the behaviour change to attach the first port only will break user something. But I\u0027m also ok just keep with current behaviour. When the user try to do that, I guess they just didn\u0027t clear what are they doing...","commit_id":"71eb84c2bf14e62dc5a38f12aba39b97b958e9b9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dc07932df59fb85a81fab7807b43664f1cc71038","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                       \u0027device_owner\u0027: zone}"},{"line_number":1671,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":1672,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_2b423eae","line":1676,"range":{"start_line":1673,"start_character":0,"end_line":1676,"end_character":34},"in_reply_to":"1a430d35_6b1c466a","updated":"2017-02-09 12:44:52.000000000","message":"Raise exception instead of just choice one of it, so that sounds like change the API behaviour","commit_id":"71eb84c2bf14e62dc5a38f12aba39b97b958e9b9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fce28189b2e70192f5f474e4d9931cfeec691a59","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                       \u0027device_owner\u0027: zone}"},{"line_number":1671,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":1672,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_6b1c466a","line":1676,"range":{"start_line":1673,"start_character":0,"end_line":1676,"end_character":34},"in_reply_to":"1a430d35_c84f0090","updated":"2017-02-09 12:33:52.000000000","message":"I should expand, you have two private networks, they can both have 192.168.0.42 on that network.\n\nNow if you do that and attach them to the same VM, you probably have a world of pain...\n\nit is tempting to raise an exception if you find two ports with the address.","commit_id":"71eb84c2bf14e62dc5a38f12aba39b97b958e9b9"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"be1ac490965e40baaa6e2032a736b167ae01a8c0","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                       \u0027device_owner\u0027: zone}"},{"line_number":1671,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":1672,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa31d9ce_a7452fb4","line":1676,"range":{"start_line":1673,"start_character":0,"end_line":1676,"end_character":34},"in_reply_to":"fa31d9ce_67f41787","updated":"2017-02-13 05:31:33.000000000","message":"and I suspect the current behavior was not intentional, maybe just something wrong with breaking out the nested loops.","commit_id":"71eb84c2bf14e62dc5a38f12aba39b97b958e9b9"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"d58ba94bd3debcc2b0d3500218191fabfc5f0b0b","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                       \u0027device_owner\u0027: zone}"},{"line_number":1671,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":1672,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa31d9ce_67f41787","line":1676,"range":{"start_line":1673,"start_character":0,"end_line":1676,"end_character":34},"in_reply_to":"fa31d9ce_9bee14eb","updated":"2017-02-13 05:26:24.000000000","message":"thanks all for the review, but I don\u0027t find the difference between the first port and the last port to choose if the instance has more than one port with the same fixed ip address. but if you like to keep the current behavior, I think we should at least leave some comments here for why we need the last port, wdyt?","commit_id":"71eb84c2bf14e62dc5a38f12aba39b97b958e9b9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2d8af98c5576d9513fbcace35efacdc61d29e7f6","unresolved":false,"context_lines":[{"line_number":1670,"context_line":"                       \u0027device_owner\u0027: zone}"},{"line_number":1671,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":1672,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1679,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_4d80debf","line":1676,"range":{"start_line":1673,"start_character":0,"end_line":1676,"end_character":34},"in_reply_to":"fa31d9ce_a7452fb4","updated":"2017-04-20 16:29:17.000000000","message":"I think you can do what you\u0027ve done, and add a note that we\u0027re returning the first port because having more than one port with the same ID is silly","commit_id":"71eb84c2bf14e62dc5a38f12aba39b97b958e9b9"},{"author":{"_account_id":25562,"name":"Chen","email":"dstbtgagt@foxmail.com","username":"chenn2"},"change_message_id":"41e5e6e8304e8f91ab5885aece3fefb68a2ea464","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"        for p in ports:"},{"line_number":1674,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":1675,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":1676,"context_line":"                    # NOTE: we\u0027re returning the first port because having"},{"line_number":1677,"context_line":"                    # more than one port with the same ID is silly"},{"line_number":1678,"context_line":"                    return p[\u0027id\u0027]"},{"line_number":1679,"context_line":""},{"line_number":1680,"context_line":"        raise exception.FixedIpNotFoundForAddress(address\u003daddress)"},{"line_number":1681,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_a854cc22","line":1678,"range":{"start_line":1676,"start_character":20,"end_line":1678,"end_character":34},"updated":"2018-06-27 09:30:04.000000000","message":"It seems the fact is, multiple ports can have identical fixed address from different subnets. If taking that into consideration, we should handle this logical flaw first (that is, return the first or last matched port, log something, or raise an exception). I have filled a bug report https://bugs.launchpad.net/nova/+bug/1778870. You can assign it to yourself if you like.","commit_id":"8b47cbdd574bd3fef381ccc1dcbce10c33ef2c15"}]}
