)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8d21138ab62bb3e7409d867eb0334222244c271d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Neutron: Check port binding status"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron api creates/uses a port which the port vif_type are"},{"line_number":10,"context_line":"\u0027binding_failed\u0027/\u0027unbound\u0027 without any verification, this leads libvirt"},{"line_number":11,"context_line":"driver failed to create instance, and cause vif driver raise"},{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da9b358b_00c19be4","line":10,"updated":"2015-03-28 14:08:48.000000000","message":"this leads to libvirt driver failing to create instance,*","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"81046ee2164223a90ed58cadca094e18edbdf67c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Neutron: Check port binding status"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron api creates/uses a port which the port vif_type are"},{"line_number":10,"context_line":"\u0027binding_failed\u0027/\u0027unbound\u0027 without any verification, this leads libvirt"},{"line_number":11,"context_line":"driver failed to create instance, and cause vif driver raise"},{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da9b358b_892f0ba1","line":10,"in_reply_to":"da9b358b_00c19be4","updated":"2015-03-30 01:24:04.000000000","message":"thanks claudiu, will fix in next ps.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8d21138ab62bb3e7409d867eb0334222244c271d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron api creates/uses a port which the port vif_type are"},{"line_number":10,"context_line":"\u0027binding_failed\u0027/\u0027unbound\u0027 without any verification, this leads libvirt"},{"line_number":11,"context_line":"driver failed to create instance, and cause vif driver raise"},{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"this patch addes a new exception PortBindingFailed to indicats"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da9b358b_e0b5977e","line":11,"updated":"2015-03-28 14:08:48.000000000","message":"and causes the vif driver to raise*","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8d21138ab62bb3e7409d867eb0334222244c271d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"driver failed to create instance, and cause vif driver raise"},{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"this patch addes a new exception PortBindingFailed to indicats"},{"line_number":15,"context_line":"the port binding failed."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"this patch addes a helper function _show_port to wrapper show_power, and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da9b358b_4090c3ec","line":14,"updated":"2015-03-28 14:08:48.000000000","message":"indicates","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron api creates/uses a port which the port vif_type are"},{"line_number":10,"context_line":"\u0027binding_failed\u0027/\u0027unbound\u0027 without any verification, this leads to libvirt"},{"line_number":11,"context_line":"driver failed to create instance, and cause vif driver to raise"},{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"this patch addes a new exception PortBindingFailed to indicate port binding"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da9b358b_8af90183","line":11,"updated":"2015-03-31 11:44:29.000000000","message":"failing*","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron api creates/uses a port which the port vif_type are"},{"line_number":10,"context_line":"\u0027binding_failed\u0027/\u0027unbound\u0027 without any verification, this leads to libvirt"},{"line_number":11,"context_line":"driver failed to create instance, and cause vif driver to raise"},{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"this patch addes a new exception PortBindingFailed to indicate port binding"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da9b358b_91722c10","line":11,"in_reply_to":"da9b358b_8af90183","updated":"2015-04-02 05:41:39.000000000","message":"Done","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"\u0027binding_failed\u0027 without any verification, this leads to libvirt"},{"line_number":11,"context_line":"driver failing to create instance, and cause vif driver to raise"},{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":"this patch addes a new exception PortBindingFailed to indicate port binding"},{"line_number":14,"context_line":"failed."},{"line_number":15,"context_line":"this patch addes a helper function _validate_port to wrapper show_port, and"},{"line_number":16,"context_line":"handle some exceptions, or it will lead allocate_for_instance is too complex"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7ad32947_d9c057e3","line":13,"updated":"2015-04-27 14:31:36.000000000","message":"addes \u003d\u003e adds","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":"this patch addes a new exception PortBindingFailed to indicate port binding"},{"line_number":14,"context_line":"failed."},{"line_number":15,"context_line":"this patch addes a helper function _validate_port to wrapper show_port, and"},{"line_number":16,"context_line":"handle some exceptions, or it will lead allocate_for_instance is too complex"},{"line_number":17,"context_line":"error when doing pep8 checking."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7ad32947_b96c7b09","line":15,"updated":"2015-04-27 14:31:36.000000000","message":"addes \u003d\u003e adds\n\nwrapper \u003d\u003e wraps","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"this patch addes a new exception PortBindingFailed to indicate port binding"},{"line_number":14,"context_line":"failed."},{"line_number":15,"context_line":"this patch addes a helper function _validate_port to wrapper show_port, and"},{"line_number":16,"context_line":"handle some exceptions, or it will lead allocate_for_instance is too complex"},{"line_number":17,"context_line":"error when doing pep8 checking."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: 1390336"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7ad32947_bf40db08","line":16,"updated":"2015-04-27 14:31:36.000000000","message":"handle \u003d\u003e handles","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"failed."},{"line_number":15,"context_line":"this patch addes a helper function _validate_port to wrapper show_port, and"},{"line_number":16,"context_line":"handle some exceptions, or it will lead allocate_for_instance is too complex"},{"line_number":17,"context_line":"error when doing pep8 checking."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: 1390336"},{"line_number":20,"context_line":"Change-Id: I66763ff5293473d1283d55f76dfe33d153abaaec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7ad32947_df6277ad","line":17,"updated":"2015-04-27 14:31:36.000000000","message":"checking \u003d\u003e checks","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fc02300ca0458e68fc1ebfd37b52acacb0e9c74d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"\u0027binding_failed\u0027 without any verification, this leads to libvirt"},{"line_number":11,"context_line":"driver failing to create instance, and cause vif driver to raise"},{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":"this patch adds a new exception PortBindingFailed to indicate port binding"},{"line_number":14,"context_line":"failed."},{"line_number":15,"context_line":"this patch adds a helper function _validate_port to wrap show_port, and"},{"line_number":16,"context_line":"handles some exceptions, or it will lead allocate_for_instance is too complex"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"7a016987_b1da5e15","line":13,"updated":"2015-05-22 21:59:21.000000000","message":"nit: this -\u003e This","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fc02300ca0458e68fc1ebfd37b52acacb0e9c74d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"a wrong exception message."},{"line_number":13,"context_line":"this patch adds a new exception PortBindingFailed to indicate port binding"},{"line_number":14,"context_line":"failed."},{"line_number":15,"context_line":"this patch adds a helper function _validate_port to wrap show_port, and"},{"line_number":16,"context_line":"handles some exceptions, or it will lead allocate_for_instance is too complex"},{"line_number":17,"context_line":"error when doing pep8 checks."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"7a016987_510a0a8b","line":15,"updated":"2015-05-22 21:59:21.000000000","message":"nit: this -\u003e This","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fc02300ca0458e68fc1ebfd37b52acacb0e9c74d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"failed."},{"line_number":15,"context_line":"this patch adds a helper function _validate_port to wrap show_port, and"},{"line_number":16,"context_line":"handles some exceptions, or it will lead allocate_for_instance is too complex"},{"line_number":17,"context_line":"error when doing pep8 checks."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: #1390336"},{"line_number":20,"context_line":"Change-Id: I66763ff5293473d1283d55f76dfe33d153abaaec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"7a016987_7115069a","line":17,"updated":"2015-05-22 21:59:21.000000000","message":"I don\u0027t understand the last phase: \"it will lead allocate_for_instance is too complex error when doing pep8 checks.\"","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08779015ed414eb43179f2417a8ee689400a96e4","unresolved":false,"context_lines":[{"line_number":14,"context_line":"failed."},{"line_number":15,"context_line":"this patch adds a helper function _validate_port to wrap show_port, and"},{"line_number":16,"context_line":"handles some exceptions, or it will lead allocate_for_instance is too complex"},{"line_number":17,"context_line":"error when doing pep8 checks."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: #1390336"},{"line_number":20,"context_line":"Change-Id: I66763ff5293473d1283d55f76dfe33d153abaaec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"3afb71cf_6203bd10","line":17,"in_reply_to":"7a016987_7115069a","updated":"2015-06-05 14:05:45.000000000","message":"We enforce max complexity limits in pep8 checks:\n\nhttps://github.com/openstack/nova/blob/master/tox.ini#L88\n\nGiven allocate_for_instance is a mess of conditions, it\u0027s overly complex and trying to change it leads to more complexity and pep8 failures.\n\nHowever, this isn\u0027t actually reality since this patch was introduced since we refactored some of the large chunks out of allocate_for_instance so now we\u0027re not actually pulling anything new out of that method, so the commit message and code should be updated.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"}],"nova/exception.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4f186028b87c76d1a6e9542dd691115d75a08454","unresolved":false,"context_lines":[{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"class PortBindingFailed(NovaException):"},{"line_number":1310,"context_line":"    msg_fmt \u003d _(\"Port id %(port_id)s binding failed\")"},{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":""},{"line_number":1313,"context_line":"class AggregateError(NovaException):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_48fea36c","line":1310,"updated":"2015-06-05 14:11:20.000000000","message":"nit: I\u0027d probably reword this as:\n\n\"Binding failed for port %(port_id)s\"\n\nI wonder if it makes any sense to put some additional debug hints in here, like \u0027ensure the neutron L2 agent is available\u0027 and/or \u0027check the neutron logs for more information\u0027.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d64462688cd9eac53d4fc840e9245b6a5ebd1f92","unresolved":false,"context_lines":[{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"class PortBindingFailed(NovaException):"},{"line_number":1310,"context_line":"    msg_fmt \u003d _(\"Port id %(port_id)s binding failed\")"},{"line_number":1311,"context_line":""},{"line_number":1312,"context_line":""},{"line_number":1313,"context_line":"class AggregateError(NovaException):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_c68a5ebf","line":1310,"in_reply_to":"3afb71cf_48fea36c","updated":"2015-08-13 07:18:24.000000000","message":"hi Matt, thanks, yes, more debug message are needed.\nthanks.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7dbe81b747d85cc73500d4ad7d201b94f6b3a2f2","unresolved":false,"context_lines":[{"line_number":784,"context_line":""},{"line_number":785,"context_line":"class PortBindingFailed(Invalid):"},{"line_number":786,"context_line":"    msg_fmt \u003d _(\"Binding failed for port %(port_id)s, ensure the neutron L2 \""},{"line_number":787,"context_line":"                \"agent is available, check neutron logs for more information.\")"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":""},{"line_number":790,"context_line":"class FixedIpExists(NovaException):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a4dcd0f_c0cf0556","line":787,"updated":"2015-08-14 06:09:01.000000000","message":"there are some plugins that do not run agents so this will be confusing","commit_id":"a92e9754b42a0756011d06d63ac4b8d882889021"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d15c321f484646715f1b3fa49668f574f2e8bca7","unresolved":false,"context_lines":[{"line_number":784,"context_line":""},{"line_number":785,"context_line":"class PortBindingFailed(Invalid):"},{"line_number":786,"context_line":"    msg_fmt \u003d _(\"Binding failed for port %(port_id)s, ensure the neutron L2 \""},{"line_number":787,"context_line":"                \"agent is available, check neutron logs for more information.\")"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":""},{"line_number":790,"context_line":"class FixedIpExists(NovaException):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a4dcd0f_cb04c1c7","line":787,"in_reply_to":"1a4dcd0f_c0cf0556","updated":"2015-08-17 00:36:28.000000000","message":"Done","commit_id":"a92e9754b42a0756011d06d63ac4b8d882889021"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"e8db52459c157dc3066c5b6ebfb859c040e6de62","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        created_port_ids \u003d []"},{"line_number":465,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":466,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":467,"context_line":"        for request in ordered_networks:"},{"line_number":468,"context_line":"            # Network lookup for available network_id"},{"line_number":469,"context_line":"            network \u003d None"},{"line_number":470,"context_line":"            for net in nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_9f0f5e88","line":467,"updated":"2015-03-16 21:27:48.000000000","message":"if we can do request.port_id: check here \nwe can raise the exception earlier to avoid waste time","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"57c3355d9a5ed7c0c5820c72250fb1b341faf600","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        created_port_ids \u003d []"},{"line_number":465,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":466,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":467,"context_line":"        for request in ordered_networks:"},{"line_number":468,"context_line":"            # Network lookup for available network_id"},{"line_number":469,"context_line":"            network \u003d None"},{"line_number":470,"context_line":"            for net in nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_a3931eff","line":467,"in_reply_to":"9a80dd14_081b3174","updated":"2015-03-17 08:52:39.000000000","message":"yes, but if you check line 501 , we can raise exception \nif that condition is satisified","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"234307b92ece5745ec8937151f78a3acddcf4c9f","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        created_port_ids \u003d []"},{"line_number":465,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":466,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":467,"context_line":"        for request in ordered_networks:"},{"line_number":468,"context_line":"            # Network lookup for available network_id"},{"line_number":469,"context_line":"            network \u003d None"},{"line_number":470,"context_line":"            for net in nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_f953c8df","line":467,"in_reply_to":"9a80dd14_45c25d35","updated":"2015-03-18 09:47:08.000000000","message":"raise exception here seems not right.\nyou will see in line 517, it catch Exceptions and do some clean up work.\nlike unbind_port and delete_port etc.\nI will update based on newly code.","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"cd7d6c8bb16cbf390275532b44e357727eae3b56","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        created_port_ids \u003d []"},{"line_number":465,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":466,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":467,"context_line":"        for request in ordered_networks:"},{"line_number":468,"context_line":"            # Network lookup for available network_id"},{"line_number":469,"context_line":"            network \u003d None"},{"line_number":470,"context_line":"            for net in nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_b816e156","line":467,"in_reply_to":"9a80dd14_58d6c5c4","updated":"2015-03-17 11:38:34.000000000","message":"maybe earlier ,our logic is \n\nfor each request, do a lot of checks , and finally we found \nsome of them definitely will fail then we will go back and rollback everything, if that\u0027s the case, why we don\u0027t check it first and raise exception?","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4b2787eb2f44a6c72449539704e284ea66fba4a4","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        created_port_ids \u003d []"},{"line_number":465,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":466,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":467,"context_line":"        for request in ordered_networks:"},{"line_number":468,"context_line":"            # Network lookup for available network_id"},{"line_number":469,"context_line":"            network \u003d None"},{"line_number":470,"context_line":"            for net in nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_081b3174","line":467,"in_reply_to":"9a80dd14_9f0f5e88","updated":"2015-03-17 01:11:29.000000000","message":"I don\u0027t think it make sense. check line 507, if we don\u0027t provide request.port_id(the port is new created by neutron).","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"e481f96c8298eb0673e0305e72d47b8762b01a2b","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        created_port_ids \u003d []"},{"line_number":465,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":466,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":467,"context_line":"        for request in ordered_networks:"},{"line_number":468,"context_line":"            # Network lookup for available network_id"},{"line_number":469,"context_line":"            network \u003d None"},{"line_number":470,"context_line":"            for net in nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_58d6c5c4","line":467,"in_reply_to":"9a80dd14_a3931eff","updated":"2015-03-17 11:30:16.000000000","message":"Do you mean we raise the exception at here and line 516?","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"e1f25326ccc9c115d34fc58522c9e2743fe85f42","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        created_port_ids \u003d []"},{"line_number":465,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":466,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":467,"context_line":"        for request in ordered_networks:"},{"line_number":468,"context_line":"            # Network lookup for available network_id"},{"line_number":469,"context_line":"            network \u003d None"},{"line_number":470,"context_line":"            for net in nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_45c25d35","line":467,"in_reply_to":"9a80dd14_b816e156","updated":"2015-03-17 12:51:28.000000000","message":"hi jichenjc,\n\nthanks for your reply, sure, the earlier the good.\n\nbut what I am thinking about is for the situation of new created port , it is created in line 507, so, we need to raise the exception for 2 times, first one is in line 467, \nif request.port_id and  ports[request.port_id].get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:\n    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])\n\nand second one is  in line 514:\n\nif neutron.show_port(created_port)[\u0027port\u0027].get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:\n    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])\n\nmake sense for you?","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"dcfb0f6a8b15de7b1040dbc6406841f609df7c2b","unresolved":false,"context_lines":[{"line_number":464,"context_line":"        created_port_ids \u003d []"},{"line_number":465,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":466,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":467,"context_line":"        for request in ordered_networks:"},{"line_number":468,"context_line":"            # Network lookup for available network_id"},{"line_number":469,"context_line":"            network \u003d None"},{"line_number":470,"context_line":"            for net in nets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_342ba734","line":467,"in_reply_to":"9a80dd14_f953c8df","updated":"2015-03-18 09:50:43.000000000","message":"yes, but if we do check before line 467 ,it\u0027s not a problem then\n... but I think it\u0027s a plus if we can do so....","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"e8db52459c157dc3066c5b6ebfb859c040e6de62","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":513,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":514,"context_line":"                # check the port binding status"},{"line_number":515,"context_line":"                if port.get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:"},{"line_number":516,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":517,"context_line":"            except Exception:"},{"line_number":518,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_ff9cda6c","line":515,"updated":"2015-03-16 21:27:48.000000000","message":"do we have other type of failure belongs to this \ne.g binding_xxx also may lead to error later?","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":11114,"name":"yalei wang","email":"yalei.wang@intel.com","username":"yalie"},"change_message_id":"e5488f71cfc192c07821821f2f50a4d3f1c0b38e","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":513,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":514,"context_line":"                # check the port binding status"},{"line_number":515,"context_line":"                if port.get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:"},{"line_number":516,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":517,"context_line":"            except Exception:"},{"line_number":518,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_a8b785f4","line":515,"in_reply_to":"9a80dd14_68082dda","updated":"2015-03-17 01:23:11.000000000","message":"https://github.com/openstack/neutron/blob/master/neutron/extensions/portbindings.py#L50\n\nVIF_TYPE_UNBOUND \u003d \u0027unbound\u0027\n\nVIF_TYPE_BINDING_FAILED \u003d \u0027binding_failed\u0027\n\nmaybe not use string directly.","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"57c3355d9a5ed7c0c5820c72250fb1b341faf600","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":513,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":514,"context_line":"                # check the port binding status"},{"line_number":515,"context_line":"                if port.get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:"},{"line_number":516,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":517,"context_line":"            except Exception:"},{"line_number":518,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_03a30a50","line":515,"in_reply_to":"9a80dd14_7302de0a","updated":"2015-03-17 08:52:39.000000000","message":"better than original one\nI am not expert in neutron, prefer generic exception handles :)","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"3bb30cf460ef712cd1a5e3a7a37c3d4eb4c74259","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":513,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":514,"context_line":"                # check the port binding status"},{"line_number":515,"context_line":"                if port.get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:"},{"line_number":516,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":517,"context_line":"            except Exception:"},{"line_number":518,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_7302de0a","line":515,"in_reply_to":"9a80dd14_a8b785f4","updated":"2015-03-17 01:43:02.000000000","message":"thanks yalei.\n\nokay, it\u0027s better to check unbound status.\nsure, we need to define \nVIF_TYPE_ERROR \u003d (\u0027unbound\u0027, \u0027binding_failed\u0027)\nand check if port.get(\u0027binding:vif_type\u0027) in VIF_TYPE_ERROR ?\n\nhow about you jichenjc?","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":11114,"name":"yalei wang","email":"yalei.wang@intel.com","username":"yalie"},"change_message_id":"384178649bd5d893223cd0a8ecf2b85d01d4189d","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":513,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":514,"context_line":"                # check the port binding status"},{"line_number":515,"context_line":"                if port.get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:"},{"line_number":516,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":517,"context_line":"            except Exception:"},{"line_number":518,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_68082dda","line":515,"in_reply_to":"9a80dd14_c893d9a2","updated":"2015-03-17 01:18:57.000000000","message":"there will be a LOG.error when binding fails. Not sure if this is you want?\n\nhttps://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/managers.py#L592","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"4b2787eb2f44a6c72449539704e284ea66fba4a4","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":513,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":514,"context_line":"                # check the port binding status"},{"line_number":515,"context_line":"                if port.get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:"},{"line_number":516,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":517,"context_line":"            except Exception:"},{"line_number":518,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_c893d9a2","line":515,"in_reply_to":"9a80dd14_ff9cda6c","updated":"2015-03-17 01:11:29.000000000","message":"not sure. I will let other neutron developer to check this.\nthx.","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"cb773299233c80e8b86b4d14bf8968968f6a0aeb","unresolved":false,"context_lines":[{"line_number":513,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":514,"context_line":"                # check the port binding status"},{"line_number":515,"context_line":"                if port.get(\u0027binding:vif_type\u0027) \u003d\u003d \u0027binding_failed\u0027:"},{"line_number":516,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":517,"context_line":"            except Exception:"},{"line_number":518,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":519,"context_line":"                    for port_id in touched_port_ids:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_8c02cc07","line":516,"updated":"2015-03-17 06:59:23.000000000","message":"uh.. then we need additional exception? \n@yalei , will unbound happened?","commit_id":"c3ecc75f039f2210af9af4ee5b7db73d881c523f"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"30b7cb09cf9bf20090202d99fc992961059da9bf","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                            security_group_ids, available_macs, dhcp_opts)"},{"line_number":575,"context_line":"                    created_port_ids.append(created_port)"},{"line_number":576,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":577,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":578,"context_line":"                # check the port binding status"},{"line_number":579,"context_line":"                if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":580,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_1fb957cb","line":577,"updated":"2015-03-18 12:18:42.000000000","message":"I apologize for flip-flopping on this one, but the need for the show_port() is really bugging me. Since the ML2 plugin is the one that produces these unusable vif_type values, please verify that it does not pass it back as part of the create_port() return value? A call from the neutron client command line *does* show the binding:vif_type in the return value.","commit_id":"7490f9af012d8a206702d1737e5c64ffbfb045b5"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"1f3490a09df36586d05c0c3146bac423f9a6712b","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                            security_group_ids, available_macs, dhcp_opts)"},{"line_number":575,"context_line":"                    created_port_ids.append(created_port)"},{"line_number":576,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":577,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":578,"context_line":"                # check the port binding status"},{"line_number":579,"context_line":"                if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":580,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_4cceab5b","line":577,"in_reply_to":"9a80dd14_1fb957cb","updated":"2015-03-19 00:35:45.000000000","message":"hi Brent, I am not sure I understand you correctly.\nthe return value of create_port() is only a port_id, and \n\nport_client.create_port(port_req_body)[\u0027port\u0027][\u0027id\u0027]\n\nin _create_port() don\u0027t raise any exception about binding failed error.\n\nso we need to do a query show_port() to get the port information.\n\nI print out the created_port in unit test case, it is only a port id number.\n\n    \u003d\u003d\u003d\u003d\u003dcreate_port\u003d\u003d\u003d\u003d\u003d\n    fake","commit_id":"7490f9af012d8a206702d1737e5c64ffbfb045b5"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"26b27caf5c14caa0b4a47b07dfb7e363f383d111","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                            security_group_ids, available_macs, dhcp_opts)"},{"line_number":575,"context_line":"                    created_port_ids.append(created_port)"},{"line_number":576,"context_line":"                    ports_in_requested_order.append(created_port)"},{"line_number":577,"context_line":"                    port \u003d neutron.show_port(created_port)[\u0027port\u0027]"},{"line_number":578,"context_line":"                # check the port binding status"},{"line_number":579,"context_line":"                if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":580,"context_line":"                    raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_e3bcc06e","line":577,"in_reply_to":"9a80dd14_4cceab5b","updated":"2015-03-19 10:19:17.000000000","message":"Right. You would need to put the check of vif_type in _create_port(). nova.network.neutronv2.api.API._create_port() isn\u0027t much of a standalone method really, from all appearances it was refactored out of allocate_for_instance() simply to reduce the number of lines in that method. A quick check confirms that this is the only place it is used. If checking the vif_type after creating a port is required by nova, it seems just as valid to do it inside _create_port() as it is outside of it.\n\nAlso, you will want to find a way to test this at a system level, i.e. a tempest test. For example, if you do a \"neutron port-create\" or a \"neutron port-show\" on the command line, you get different results whether you are an admin tenant or not (in this code, port_client should have the required privileges). A non-admin tenant in a typical devstack deployment does not show vif_type. Did you verify that this code actually does what it is intended with a non-admin tenant?","commit_id":"7490f9af012d8a206702d1737e5c64ffbfb045b5"},{"author":{"_account_id":9215,"name":"Tong Da","email":"tongda@outlook.com","username":"tongda"},"change_message_id":"2eacefc58477c97682eaa4670492c0a533009b2e","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                port_req_body[\u0027port\u0027][\u0027mac_address\u0027] \u003d mac_address"},{"line_number":307,"context_line":"            if dhcp_opts is not None:"},{"line_number":308,"context_line":"                port_req_body[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d dhcp_opts"},{"line_number":309,"context_line":"            port_id \u003d port_client.create_port(port_req_body)[\u0027port\u0027][\u0027id\u0027]"},{"line_number":310,"context_line":"            port \u003d port_client.show_port(port_id)[\u0027port\u0027]"},{"line_number":311,"context_line":"            if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":312,"context_line":"                raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_a341d93b","line":309,"updated":"2015-03-28 14:53:15.000000000","message":"I suggest that retrieve the \"port_client.create_port\" and the show_port check into another tool method called, say, _create_port.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a2e619c1715f43c107593aa4a4285a1e936e555e","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                port_req_body[\u0027port\u0027][\u0027mac_address\u0027] \u003d mac_address"},{"line_number":307,"context_line":"            if dhcp_opts is not None:"},{"line_number":308,"context_line":"                port_req_body[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d dhcp_opts"},{"line_number":309,"context_line":"            port_id \u003d port_client.create_port(port_req_body)[\u0027port\u0027][\u0027id\u0027]"},{"line_number":310,"context_line":"            port \u003d port_client.show_port(port_id)[\u0027port\u0027]"},{"line_number":311,"context_line":"            if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":312,"context_line":"                raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_3c27f5b7","line":309,"in_reply_to":"da9b358b_a341d93b","updated":"2015-03-31 00:54:12.000000000","message":"hi tong, da, we already have _create_port method","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8d21138ab62bb3e7409d867eb0334222244c271d","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            if dhcp_opts is not None:"},{"line_number":308,"context_line":"                port_req_body[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d dhcp_opts"},{"line_number":309,"context_line":"            port_id \u003d port_client.create_port(port_req_body)[\u0027port\u0027][\u0027id\u0027]"},{"line_number":310,"context_line":"            port \u003d port_client.show_port(port_id)[\u0027port\u0027]"},{"line_number":311,"context_line":"            if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":312,"context_line":"                raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":313,"context_line":"            LOG.debug(\u0027Successfully created port: %s\u0027, port_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_40a7a34f","line":310,"updated":"2015-03-28 14:08:48.000000000","message":"why not use self._show_port(...)?","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"81046ee2164223a90ed58cadca094e18edbdf67c","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            if dhcp_opts is not None:"},{"line_number":308,"context_line":"                port_req_body[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d dhcp_opts"},{"line_number":309,"context_line":"            port_id \u003d port_client.create_port(port_req_body)[\u0027port\u0027][\u0027id\u0027]"},{"line_number":310,"context_line":"            port \u003d port_client.show_port(port_id)[\u0027port\u0027]"},{"line_number":311,"context_line":"            if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":312,"context_line":"                raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":313,"context_line":"            LOG.debug(\u0027Successfully created port: %s\u0027, port_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_6974c7fc","line":310,"in_reply_to":"da9b358b_40a7a34f","updated":"2015-03-30 01:24:04.000000000","message":"sure, good idea, thanks.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"33fdba0e96eb3f79b17bdf3da451a9c398afb3f6","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            if dhcp_opts is not None:"},{"line_number":308,"context_line":"                port_req_body[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d dhcp_opts"},{"line_number":309,"context_line":"            port_id \u003d port_client.create_port(port_req_body)[\u0027port\u0027][\u0027id\u0027]"},{"line_number":310,"context_line":"            port \u003d port_client.show_port(port_id)[\u0027port\u0027]"},{"line_number":311,"context_line":"            if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":312,"context_line":"                raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":313,"context_line":"            LOG.debug(\u0027Successfully created port: %s\u0027, port_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_4ff90c4d","line":310,"in_reply_to":"da9b358b_40a7a34f","updated":"2015-03-29 05:06:29.000000000","message":"the vif type can only be read when an admin user reads the port.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"81046ee2164223a90ed58cadca094e18edbdf67c","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            if dhcp_opts is not None:"},{"line_number":308,"context_line":"                port_req_body[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d dhcp_opts"},{"line_number":309,"context_line":"            port_id \u003d port_client.create_port(port_req_body)[\u0027port\u0027][\u0027id\u0027]"},{"line_number":310,"context_line":"            port \u003d port_client.show_port(port_id)[\u0027port\u0027]"},{"line_number":311,"context_line":"            if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":312,"context_line":"                raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":313,"context_line":"            LOG.debug(\u0027Successfully created port: %s\u0027, port_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_89fcab3f","line":310,"in_reply_to":"da9b358b_4ff90c4d","updated":"2015-03-30 01:24:04.000000000","message":"hi garyk, thanks.\ncan you check line 444, if we have port binding, then we are a admin context.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"33fdba0e96eb3f79b17bdf3da451a9c398afb3f6","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        if port.get(\u0027device_id\u0027):"},{"line_number":401,"context_line":"            raise exception.PortInUse(port_id\u003drequest_port_id)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":404,"context_line":"            raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":405,"context_line":"        return port"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_2f95a8e3","line":403,"updated":"2015-03-29 05:06:29.000000000","message":"same as comment above this needs to be an admin user to read the vif type","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"81046ee2164223a90ed58cadca094e18edbdf67c","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        if port.get(\u0027device_id\u0027):"},{"line_number":401,"context_line":"            raise exception.PortInUse(port_id\u003drequest_port_id)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":404,"context_line":"            raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":405,"context_line":"        return port"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_49bc636c","line":403,"in_reply_to":"da9b358b_2f95a8e3","updated":"2015-03-30 01:24:04.000000000","message":"then we need to check if neutron (which is from the parameter)\nhas binding extension, then do port.get(\u0027binding:vif_type\u0027) ?\n\njust like this:\n\nif self._has_port_binding_extension(context, refresh_cache\u003dTrue, neutron\u003dneutron) :\n    if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:\n        raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])\n\nthanks Eli.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b5e2e33fa48bb5700ac423ad160a94668c9e5c4b","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        if port.get(\u0027device_id\u0027):"},{"line_number":401,"context_line":"            raise exception.PortInUse(port_id\u003drequest_port_id)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":404,"context_line":"            raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":405,"context_line":"        return port"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_ae49b0d2","line":403,"in_reply_to":"da9b358b_49bc636c","updated":"2015-03-30 06:17:53.000000000","message":"thanks - i just think that maybe you should highlight in the docstring that the client needs to be an admin user","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a2e619c1715f43c107593aa4a4285a1e936e555e","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        if port.get(\u0027device_id\u0027):"},{"line_number":401,"context_line":"            raise exception.PortInUse(port_id\u003drequest_port_id)"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        if port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":404,"context_line":"            raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":405,"context_line":"        return port"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_3c75b597","line":403,"in_reply_to":"da9b358b_ae49b0d2","updated":"2015-03-31 00:54:12.000000000","message":"thanks garyk,\nI am struggling with the unit test case now..\nto many failed.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":9215,"name":"Tong Da","email":"tongda@outlook.com","username":"tongda"},"change_message_id":"2eacefc58477c97682eaa4670492c0a533009b2e","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        if requested_networks:"},{"line_number":461,"context_line":"            for request in requested_networks:"},{"line_number":462,"context_line":"                if request.port_id:"},{"line_number":463,"context_line":"                    port \u003d self._show_port(neutron, request.port_id, instance)"},{"line_number":464,"context_line":"                    if hypervisor_macs is not None:"},{"line_number":465,"context_line":"                        if port[\u0027mac_address\u0027] not in hypervisor_macs:"},{"line_number":466,"context_line":"                            raise exception.PortNotUsable("}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_634bd15a","line":463,"updated":"2015-03-28 14:53:15.000000000","message":"I think use port_client.show_port here, and collect all the `if` things into one method called validate_port should be more elegant.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a2e619c1715f43c107593aa4a4285a1e936e555e","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        if requested_networks:"},{"line_number":461,"context_line":"            for request in requested_networks:"},{"line_number":462,"context_line":"                if request.port_id:"},{"line_number":463,"context_line":"                    port \u003d self._show_port(neutron, request.port_id, instance)"},{"line_number":464,"context_line":"                    if hypervisor_macs is not None:"},{"line_number":465,"context_line":"                        if port[\u0027mac_address\u0027] not in hypervisor_macs:"},{"line_number":466,"context_line":"                            raise exception.PortNotUsable("}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_5c3079e8","line":463,"in_reply_to":"da9b358b_634bd15a","updated":"2015-03-31 00:54:12.000000000","message":"hi tong da, thanks, ignore my previous comments. validate_port will be better.\nthanks for reviewing.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"81046ee2164223a90ed58cadca094e18edbdf67c","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        if requested_networks:"},{"line_number":461,"context_line":"            for request in requested_networks:"},{"line_number":462,"context_line":"                if request.port_id:"},{"line_number":463,"context_line":"                    port \u003d self._show_port(neutron, request.port_id, instance)"},{"line_number":464,"context_line":"                    if hypervisor_macs is not None:"},{"line_number":465,"context_line":"                        if port[\u0027mac_address\u0027] not in hypervisor_macs:"},{"line_number":466,"context_line":"                            raise exception.PortNotUsable("}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_c95e3345","line":463,"in_reply_to":"da9b358b_634bd15a","updated":"2015-03-30 01:24:04.000000000","message":"hmm. thanks tong da.\nbut I don\u0027t agree with you, because that we have a return value \u0027port\u0027, the validate_port method seems not very accuracy.\n\nthanks Eli.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                     available_macs\u003dNone, dhcp_opts\u003dNone):"},{"line_number":275,"context_line":"        \"\"\"Attempts to create a port for the instance on the given network."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        :param context: Admin client, if don\u0027t have port binding extension, it"},{"line_number":278,"context_line":"            is None."},{"line_number":279,"context_line":"        :param port_client: The client to use to create the port."},{"line_number":280,"context_line":"        :param instance: Create the port for the given instance."}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_aaeba577","line":277,"updated":"2015-03-31 11:44:29.000000000","message":":param admin_client:\n\nor, name the argument context.\n\nAlso, I don\u0027t really understand this line..","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                     available_macs\u003dNone, dhcp_opts\u003dNone):"},{"line_number":275,"context_line":"        \"\"\"Attempts to create a port for the instance on the given network."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        :param context: Admin client, if don\u0027t have port binding extension, it"},{"line_number":278,"context_line":"            is None."},{"line_number":279,"context_line":"        :param port_client: The client to use to create the port."},{"line_number":280,"context_line":"        :param instance: Create the port for the given instance."}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_71620840","line":277,"in_reply_to":"da9b358b_aaeba577","updated":"2015-04-02 05:41:39.000000000","message":"if have port binding extension ,admin_client can be None , check line 462","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :raises PortLimitExceeded: If neutron fails with an OverQuota error."},{"line_number":291,"context_line":"        :raises NoMoreFixedIps: If neutron fails with"},{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"         :raises FixedIpAlreadyInUse: if requested fixed ip is used by others"},{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port is not belone to"},{"line_number":296,"context_line":"            this tenant."}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_2a731517","line":293,"updated":"2015-03-31 11:44:29.000000000","message":"overindented by one space.\n\nIf the requested fixed IP is already in use.","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :raises PortLimitExceeded: If neutron fails with an OverQuota error."},{"line_number":291,"context_line":"        :raises NoMoreFixedIps: If neutron fails with"},{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"         :raises FixedIpAlreadyInUse: if requested fixed ip is used by others"},{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port is not belone to"},{"line_number":296,"context_line":"            this tenant."}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_31e6c0b0","line":293,"in_reply_to":"da9b358b_2a731517","updated":"2015-04-02 05:41:39.000000000","message":"Done","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"         :raises FixedIpAlreadyInUse: if requested fixed ip is used by others"},{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port is not belone to"},{"line_number":296,"context_line":"            this tenant."},{"line_number":297,"context_line":"        :raises PortInUse: If the request port is in used."},{"line_number":298,"context_line":"        :raises PortBindingFailed: if Port binding failed."}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_ca8389cb","line":295,"updated":"2015-03-31 11:44:29.000000000","message":"If the requested port does not belong to this tenant.","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"         :raises FixedIpAlreadyInUse: if requested fixed ip is used by others"},{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port is not belone to"},{"line_number":296,"context_line":"            this tenant."},{"line_number":297,"context_line":"        :raises PortInUse: If the request port is in used."},{"line_number":298,"context_line":"        :raises PortBindingFailed: if Port binding failed."}],"source_content_type":"text/x-python","patch_set":4,"id":"baa041b7_489a1a16","line":295,"in_reply_to":"da9b358b_ca8389cb","updated":"2015-04-02 05:41:39.000000000","message":"Done","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port is not belone to"},{"line_number":296,"context_line":"            this tenant."},{"line_number":297,"context_line":"        :raises PortInUse: If the request port is in used."},{"line_number":298,"context_line":"        :raises PortBindingFailed: if Port binding failed."},{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_ea152d9b","line":297,"updated":"2015-03-31 11:44:29.000000000","message":"If the requested port is in use.*","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port is not belone to"},{"line_number":296,"context_line":"            this tenant."},{"line_number":297,"context_line":"        :raises PortInUse: If the request port is in used."},{"line_number":298,"context_line":"        :raises PortBindingFailed: if Port binding failed."},{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa041b7_c8862ab9","line":297,"in_reply_to":"da9b358b_ea152d9b","updated":"2015-04-02 05:41:39.000000000","message":"Done","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                LOG.exception(_LE(\"Unable to clear device ID \""},{"line_number":383,"context_line":"                                  \"for port \u0027%s\u0027\"), port_id)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _validate_port(self, admin_clinet, port_client, request_port_id,"},{"line_number":386,"context_line":"                       instance):"},{"line_number":387,"context_line":"        \"\"\"A helper function to valid port for allocate_for_instance"},{"line_number":388,"context_line":"        neutron client should be an admin user if we want to check"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_2a8f95cd","line":385,"updated":"2015-03-31 11:44:29.000000000","message":"admin_client","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                LOG.exception(_LE(\"Unable to clear device ID \""},{"line_number":383,"context_line":"                                  \"for port \u0027%s\u0027\"), port_id)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _validate_port(self, admin_clinet, port_client, request_port_id,"},{"line_number":386,"context_line":"                       instance):"},{"line_number":387,"context_line":"        \"\"\"A helper function to valid port for allocate_for_instance"},{"line_number":388,"context_line":"        neutron client should be an admin user if we want to check"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa041b7_48c1fae3","line":385,"in_reply_to":"da9b358b_2a8f95cd","updated":"2015-04-02 05:41:39.000000000","message":"Done","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    def _validate_port(self, admin_clinet, port_client, request_port_id,"},{"line_number":386,"context_line":"                       instance):"},{"line_number":387,"context_line":"        \"\"\"A helper function to valid port for allocate_for_instance"},{"line_number":388,"context_line":"        neutron client should be an admin user if we want to check"},{"line_number":389,"context_line":"        port_binding status."},{"line_number":390,"context_line":"        :param admin_clinet: admin clinet, can be None if not has port_binding"},{"line_number":391,"context_line":"            extension."}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_8ab10192","line":388,"updated":"2015-03-31 11:44:29.000000000","message":"since you renamed the \u0027neutron\u0027 argument to \u0027port_client\u0027, it should be:\n\nport_client should be an admin user if we..\n\nAlso, if port_client can be an admin user, why do you need the \u0027admin_client\u0027 for?","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    def _validate_port(self, admin_clinet, port_client, request_port_id,"},{"line_number":386,"context_line":"                       instance):"},{"line_number":387,"context_line":"        \"\"\"A helper function to valid port for allocate_for_instance"},{"line_number":388,"context_line":"        neutron client should be an admin user if we want to check"},{"line_number":389,"context_line":"        port_binding status."},{"line_number":390,"context_line":"        :param admin_clinet: admin clinet, can be None if not has port_binding"},{"line_number":391,"context_line":"            extension."}],"source_content_type":"text/x-python","patch_set":4,"id":"baa041b7_4868daf5","line":388,"in_reply_to":"da9b358b_8ab10192","updated":"2015-04-02 05:41:39.000000000","message":"admin_client will be none if we don\u0027t have port binding extension.\nso it can not process in line 404","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        \"\"\"A helper function to valid port for allocate_for_instance"},{"line_number":388,"context_line":"        neutron client should be an admin user if we want to check"},{"line_number":389,"context_line":"        port_binding status."},{"line_number":390,"context_line":"        :param admin_clinet: admin clinet, can be None if not has port_binding"},{"line_number":391,"context_line":"            extension."},{"line_number":392,"context_line":"        :param port_client: neutron client"},{"line_number":393,"context_line":"        :param request_port_id: id of request port"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_ea664d28","line":390,"updated":"2015-03-31 11:44:29.000000000","message":"admin_client*\n\n...if it has no port_binding*","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        \"\"\"A helper function to valid port for allocate_for_instance"},{"line_number":388,"context_line":"        neutron client should be an admin user if we want to check"},{"line_number":389,"context_line":"        port_binding status."},{"line_number":390,"context_line":"        :param admin_clinet: admin clinet, can be None if not has port_binding"},{"line_number":391,"context_line":"            extension."},{"line_number":392,"context_line":"        :param port_client: neutron client"},{"line_number":393,"context_line":"        :param request_port_id: id of request port"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa041b7_0872d2e5","line":390,"in_reply_to":"da9b358b_ea664d28","updated":"2015-04-02 05:41:39.000000000","message":"Done","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"82aa87262889f4e9ab5b43f10dee041391936320","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        if port.get(\u0027device_id\u0027):"},{"line_number":413,"context_line":"            raise exception.PortInUse(port_id\u003drequest_port_id)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        if admin_clinet and port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":416,"context_line":"            raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        return port"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_eabf6d5e","line":415,"updated":"2015-03-31 11:44:29.000000000","message":"admin_client","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a019ba2a726b6ef4954c22f1586ce6048839207a","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        if port.get(\u0027device_id\u0027):"},{"line_number":413,"context_line":"            raise exception.PortInUse(port_id\u003drequest_port_id)"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        if admin_clinet and port.get(\u0027binding:vif_type\u0027) in PORT_ERROR_STATES:"},{"line_number":416,"context_line":"            raise exception.PortBindingFailed(port_id\u003dport[\u0027id\u0027])"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        return port"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa041b7_e877aed2","line":415,"in_reply_to":"da9b358b_eabf6d5e","updated":"2015-04-02 05:41:39.000000000","message":"Done","commit_id":"e755b9da2874bcb97da519e5024cf02a71192488"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":139,"context_line":"_ADMIN_AUTH \u003d None"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"# This is from neutron code, \u0027vif_type\u0027 will be \u0027binding_failed\u0027 if try to"},{"line_number":143,"context_line":"# binding a port failed"},{"line_number":144,"context_line":"VIF_TYPE_BINDING_FAILED \u003d \u0027binding_failed\u0027"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_fced418f","line":142,"updated":"2015-04-27 14:31:36.000000000","message":"if try to binding a port failed \u003d\u003e when binding a port failed.","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                     available_macs\u003dNone, dhcp_opts\u003dNone):"},{"line_number":274,"context_line":"        \"\"\"Attempts to create a port for the instance on the given network."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        :param admin_client: Admin client, if don\u0027t have port binding extension"},{"line_number":277,"context_line":"            it is None."},{"line_number":278,"context_line":"        :param port_client: The client to use to create the port."},{"line_number":279,"context_line":"        :param instance: Create the port for the given instance."}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_bc6d89ce","line":276,"updated":"2015-04-27 14:31:36.000000000","message":"if don\u0027t have port binding extension \u003d\u003e if there is no port binding extension","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :raises PortLimitExceeded: If neutron fails with an OverQuota error."},{"line_number":291,"context_line":"        :raises NoMoreFixedIps: If neutron fails with"},{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"        :raises FixedIpAlreadyInUse: if requested fixed ip is used by others"},{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port does not belong to this"},{"line_number":296,"context_line":"            tenant this tenant."}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_39dbcb1d","line":293,"updated":"2015-04-27 14:31:36.000000000","message":"if the requested fixed IP is already in use.","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"        :raises FixedIpAlreadyInUse: if requested fixed ip is used by others"},{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port does not belong to this"},{"line_number":296,"context_line":"            tenant this tenant."},{"line_number":297,"context_line":"        :raises PortInUse: If the request port is in use."},{"line_number":298,"context_line":"        :raises PortBindingFailed: if port binding failed."}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_d92f37f5","line":295,"updated":"2015-04-27 14:31:36.000000000","message":"I don\u0027t see this exception being raised in this method. Is this exception raised by the port_client?","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        :raises PortNotFound: If not found by request_port_id"},{"line_number":295,"context_line":"        :raises PortNotUsable: If the request port does not belong to this"},{"line_number":296,"context_line":"            tenant this tenant."},{"line_number":297,"context_line":"        :raises PortInUse: If the request port is in use."},{"line_number":298,"context_line":"        :raises PortBindingFailed: if port binding failed."},{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_dc2f25f5","line":297,"updated":"2015-04-27 14:31:36.000000000","message":"You could copy the exception descriptions for PortNotFound, PortNotUsable, PortInUse from Lines 424-431. This way you don\u0027t have to worry about grammar and spelling, since they are correct.","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        :type neutron: neutronclient.v2_0.client.Client"},{"line_number":401,"context_line":"        :param requested_networks: list of NetworkRequests"},{"line_number":402,"context_line":"        :type requested_networks: nova.objects.NetworkRequestList"},{"line_number":403,"context_line":"        :param admin_client: Admin neutron client session, if don\u0027t have port"},{"line_number":404,"context_line":"            binding extension, default value is None."},{"line_number":405,"context_line":"        :type admin_client: neutronclient.v2_0.client.Client"},{"line_number":406,"context_line":"        :param hypervisor_macs: None or a set of MAC addresses that the"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_7c26d117","line":403,"updated":"2015-04-27 14:31:36.000000000","message":"if don\u0027t have port binding extension \u003d\u003e if there is no port binding extension","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def _validate_port(self, admin_client, port_client, request_port_id,"},{"line_number":538,"context_line":"                       instance):"},{"line_number":539,"context_line":"        \"\"\"A helper function to valid port for allocate_for_instance,"},{"line_number":540,"context_line":"        we need an admin user, so admin_client should now be None if we want"},{"line_number":541,"context_line":"        to check port binding extension."},{"line_number":542,"context_line":"        :param admin_client: admin client, can be None if has no port_binding"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_3c93b9fc","line":539,"updated":"2015-04-27 14:31:36.000000000","message":"How about:\n\n    A helper function to validate port for allocate_for_instance. An admin user\n    is necessary for this.\n\nthe part about the admin_client is already explained below.","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        \"\"\"A helper function to valid port for allocate_for_instance,"},{"line_number":540,"context_line":"        we need an admin user, so admin_client should now be None if we want"},{"line_number":541,"context_line":"        to check port binding extension."},{"line_number":542,"context_line":"        :param admin_client: admin client, can be None if has no port_binding"},{"line_number":543,"context_line":"            extension."},{"line_number":544,"context_line":"        :param port_client: neutron client."},{"line_number":545,"context_line":"        :param request_port_id: id of request port"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_1c559d1c","line":542,"updated":"2015-04-27 14:31:36.000000000","message":"if there is no port binding extension.","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        :param admin_client: admin client, can be None if has no port_binding"},{"line_number":543,"context_line":"            extension."},{"line_number":544,"context_line":"        :param port_client: neutron client."},{"line_number":545,"context_line":"        :param request_port_id: id of request port"},{"line_number":546,"context_line":"        :param instance: instance object."},{"line_number":547,"context_line":"        :returns: port of request_port_id."},{"line_number":548,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_fc30a109","line":545,"updated":"2015-04-27 14:31:36.000000000","message":"of the requested port.","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"e19a5e198b13e59763af3c5f8ddbf05e67a63bf4","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        :raises PortNotFound: If not found by request_port_id."},{"line_number":550,"context_line":"        :raises PortNotUsable: If the request port is not belone to"},{"line_number":551,"context_line":"            this tenant."},{"line_number":552,"context_line":"        :raises PortInUse: If the request port is in used."},{"line_number":553,"context_line":"        :raises PortBindingFailed: If port binding failed."},{"line_number":554,"context_line":"        \"\"\""},{"line_number":555,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ad32947_fc9421e9","line":552,"updated":"2015-04-27 14:31:36.000000000","message":"You could copy the exception descriptions for PortNotFound, PortNotUsable, PortInUse from Lines 424-431. This way you don\u0027t have to worry about grammar and spelling, since they are correct.","commit_id":"02a1743cbe2d6dbbdd4e1cf37ed97601a82a3f76"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6008743201d63387eefbf3f3824e574feb2937ac","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"        :raises FixedIpAlreadyInUse: if the requested fixed IP is already in"},{"line_number":294,"context_line":"            use."},{"line_number":295,"context_line":"        :raises PortInUse: If the request port is in use."},{"line_number":296,"context_line":"        :raises PortBindingFailed: if port binding failed."},{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ad32947_1acfc180","line":295,"updated":"2015-04-28 08:43:40.000000000","message":"requested","commit_id":"53803f53037a2782d2228b68138856f8bd31a663"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"9eb319920f6996275d3b390a6e4e3a6eb3e7955c","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"        :raises FixedIpAlreadyInUse: if the requested fixed IP is already in"},{"line_number":294,"context_line":"            use."},{"line_number":295,"context_line":"        :raises PortInUse: If the request port is in use."},{"line_number":296,"context_line":"        :raises PortBindingFailed: if port binding failed."},{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_c11dba74","line":295,"in_reply_to":"7ad32947_1acfc180","updated":"2015-05-15 02:58:54.000000000","message":"Done","commit_id":"53803f53037a2782d2228b68138856f8bd31a663"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08779015ed414eb43179f2417a8ee689400a96e4","unresolved":false,"context_lines":[{"line_number":139,"context_line":"_ADMIN_AUTH \u003d None"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"# This is from neutron code, \u0027vif_type\u0027 will be \u0027binding_failed\u0027 when binding"},{"line_number":143,"context_line":"# a port failed"},{"line_number":144,"context_line":"VIF_TYPE_BINDING_FAILED \u003d \u0027binding_failed\u0027"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_0869cbbe","line":142,"updated":"2015-06-05 14:05:45.000000000","message":"Let\u0027s keep this in nova.network.model with the other VIF_TYPE constants for consistency:\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/nova/network/model.py?id\u003d2015.1.0#n31","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d64462688cd9eac53d4fc840e9245b6a5ebd1f92","unresolved":false,"context_lines":[{"line_number":139,"context_line":"_ADMIN_AUTH \u003d None"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"# This is from neutron code, \u0027vif_type\u0027 will be \u0027binding_failed\u0027 when binding"},{"line_number":143,"context_line":"# a port failed"},{"line_number":144,"context_line":"VIF_TYPE_BINDING_FAILED \u003d \u0027binding_failed\u0027"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_06b75687","line":142,"in_reply_to":"3afb71cf_0869cbbe","updated":"2015-08-13 07:18:24.000000000","message":"yeah, good idea.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08779015ed414eb43179f2417a8ee689400a96e4","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                     available_macs\u003dNone, dhcp_opts\u003dNone):"},{"line_number":274,"context_line":"        \"\"\"Attempts to create a port for the instance on the given network."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        :param admin_client: Admin client, if there is no port binding"},{"line_number":277,"context_line":"            extension, it is None."},{"line_number":278,"context_line":"        :param port_client: The client to use to create the port."},{"line_number":279,"context_line":"        :param instance: Create the port for the given instance."}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_e8cb0f71","line":276,"updated":"2015-06-05 14:05:45.000000000","message":"You shouldn\u0027t need this, just use the port_client.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fc02300ca0458e68fc1ebfd37b52acacb0e9c74d","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :raises PortLimitExceeded: If neutron fails with an OverQuota error."},{"line_number":291,"context_line":"        :raises NoMoreFixedIps: If neutron fails with"},{"line_number":292,"context_line":"            IpAddressGenerationFailure error."},{"line_number":293,"context_line":"        :raises FixedIpAlreadyInUse: if the requested fixed IP is already in"},{"line_number":294,"context_line":"            use."},{"line_number":295,"context_line":"        :raises PortInUse: If the requested port is in use."},{"line_number":296,"context_line":"        :raises PortBindingFailed: if port binding failed."}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_b11ffeb5","line":293,"updated":"2015-05-22 21:59:21.000000000","message":"nit: if -\u003e If (for consistency)","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fc02300ca0458e68fc1ebfd37b52acacb0e9c74d","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        :raises FixedIpAlreadyInUse: if the requested fixed IP is already in"},{"line_number":294,"context_line":"            use."},{"line_number":295,"context_line":"        :raises PortInUse: If the requested port is in use."},{"line_number":296,"context_line":"        :raises PortBindingFailed: if port binding failed."},{"line_number":297,"context_line":"        \"\"\""},{"line_number":298,"context_line":"        try:"},{"line_number":299,"context_line":"            if fixed_ip:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_911ac2c4","line":296,"updated":"2015-05-22 21:59:21.000000000","message":"ditto","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4f186028b87c76d1a6e9542dd691115d75a08454","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        port_id \u003d port[\u0027port\u0027][\u0027id\u0027]"},{"line_number":341,"context_line":"        if (admin_client and"},{"line_number":342,"context_line":"            port[\u0027port\u0027].get(\u0027binding:vif_type\u0027) \u003d\u003d VIF_TYPE_BINDING_FAILED):"},{"line_number":343,"context_line":"            raise exception.PortBindingFailed(port_id\u003dport_id)"},{"line_number":344,"context_line":"        LOG.debug(\u0027Successfully created port: %s\u0027, port_id,"},{"line_number":345,"context_line":"            instance\u003dinstance)"},{"line_number":346,"context_line":"        return port_id"}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_68ccbf35","line":343,"updated":"2015-06-05 14:11:20.000000000","message":"You have to delete the port at this point since allocate_for_instance won\u0027t have a chance to.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d64462688cd9eac53d4fc840e9245b6a5ebd1f92","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        port_id \u003d port[\u0027port\u0027][\u0027id\u0027]"},{"line_number":341,"context_line":"        if (admin_client and"},{"line_number":342,"context_line":"            port[\u0027port\u0027].get(\u0027binding:vif_type\u0027) \u003d\u003d VIF_TYPE_BINDING_FAILED):"},{"line_number":343,"context_line":"            raise exception.PortBindingFailed(port_id\u003dport_id)"},{"line_number":344,"context_line":"        LOG.debug(\u0027Successfully created port: %s\u0027, port_id,"},{"line_number":345,"context_line":"            instance\u003dinstance)"},{"line_number":346,"context_line":"        return port_id"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_ad8eb276","line":343,"in_reply_to":"3afb71cf_68ccbf35","updated":"2015-08-13 07:18:24.000000000","message":"oh, yes, I missed that, thanks.\nI was thinking _unbind_ports and _delete_ports will handle, but I missed _create_port  won\u0027t return anything.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08779015ed414eb43179f2417a8ee689400a96e4","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                LOG.exception(_LE(\"Unable to clear device ID \""},{"line_number":384,"context_line":"                                  \"for port \u0027%s\u0027\"), port_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def _validate_port(self, admin_client, port_client, request_port_id,"},{"line_number":387,"context_line":"                       instance):"},{"line_number":388,"context_line":"        \"\"\"A helper function to validate port for allocate_for_instance. An"},{"line_number":389,"context_line":"        admin user is necessary for this. we need an admin user, so"}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_885edbe7","line":386,"updated":"2015-06-05 14:05:45.000000000","message":"_process_requested_networks fixed the max complexity issue with allocate_for_instance, so rather than add this giant new method, can we just add the new binding:vif_type check in _process_requested_networks please?  This isn\u0027t doing complete validation anyway since it\u0027s not checking the hypervisor_macs, _process_requested_networks is still doing that.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d64462688cd9eac53d4fc840e9245b6a5ebd1f92","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                LOG.exception(_LE(\"Unable to clear device ID \""},{"line_number":384,"context_line":"                                  \"for port \u0027%s\u0027\"), port_id)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def _validate_port(self, admin_client, port_client, request_port_id,"},{"line_number":387,"context_line":"                       instance):"},{"line_number":388,"context_line":"        \"\"\"A helper function to validate port for allocate_for_instance. An"},{"line_number":389,"context_line":"        admin user is necessary for this. we need an admin user, so"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_b2c28f32","line":386,"in_reply_to":"3afb71cf_885edbe7","updated":"2015-08-13 07:18:24.000000000","message":"okay, thanks.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08779015ed414eb43179f2417a8ee689400a96e4","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        return port"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def _process_requested_networks(self, instance, neutron,"},{"line_number":427,"context_line":"                                    requested_networks, admin_client\u003dNone,"},{"line_number":428,"context_line":"                                    hypervisor_macs\u003dNone):"},{"line_number":429,"context_line":"        \"\"\"Processes and validates requested networks for allocation."},{"line_number":430,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_88d37b38","line":427,"updated":"2015-06-05 14:05:45.000000000","message":"Make this port_client rather than admin_client since the port_client is only available if the port binding extension is enabled which is what this is needed for.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"fc02300ca0458e68fc1ebfd37b52acacb0e9c74d","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        :type neutron: neutronclient.v2_0.client.Client"},{"line_number":439,"context_line":"        :param requested_networks: list of NetworkRequests"},{"line_number":440,"context_line":"        :type requested_networks: nova.objects.NetworkRequestList"},{"line_number":441,"context_line":"        :param admin_client: Admin neutron client session, if don\u0027t have port"},{"line_number":442,"context_line":"            binding extension, default value is None."},{"line_number":443,"context_line":"        :type admin_client: neutronclient.v2_0.client.Client"},{"line_number":444,"context_line":"        :param hypervisor_macs: None or a set of MAC addresses that the"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_511e8a70","line":441,"updated":"2015-05-22 21:59:21.000000000","message":"nit: Admin -\u003e admin (for consistency)","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08779015ed414eb43179f2417a8ee689400a96e4","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        ports, net_ids, ordered_networks, available_macs \u003d ("},{"line_number":620,"context_line":"            self._process_requested_networks("},{"line_number":621,"context_line":"                instance, neutron, requested_networks,"},{"line_number":622,"context_line":"                admin_client, hypervisor_macs))"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        nets \u003d self._get_available_networks(context, instance.project_id,"},{"line_number":625,"context_line":"                                            net_ids, neutron\u003dneutron)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_e8f66fd6","line":622,"updated":"2015-06-05 14:05:45.000000000","message":"Pass in port_client since it\u0027s more clear what this is used for.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"08779015ed414eb43179f2417a8ee689400a96e4","unresolved":false,"context_lines":[{"line_number":704,"context_line":"                    ports_in_requested_order.append(port[\u0027id\u0027])"},{"line_number":705,"context_line":"                else:"},{"line_number":706,"context_line":"                    created_port \u003d self._create_port("},{"line_number":707,"context_line":"                            admin_client, port_client, instance,"},{"line_number":708,"context_line":"                            request.network_id, port_req_body, request.address,"},{"line_number":709,"context_line":"                            security_group_ids, available_macs, dhcp_opts)"},{"line_number":710,"context_line":"                    created_port_ids.append(created_port)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_68bf1fd1","line":707,"updated":"2015-06-05 14:05:45.000000000","message":"admin_client shouldn\u0027t be necessary here, you already have port_client.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4f186028b87c76d1a6e9542dd691115d75a08454","unresolved":false,"context_lines":[{"line_number":714,"context_line":"                    self._unbind_ports(context,"},{"line_number":715,"context_line":"                                       preexisting_port_ids,"},{"line_number":716,"context_line":"                                       neutron, port_client)"},{"line_number":717,"context_line":"                    self._delete_ports(neutron, instance, created_port_ids)"},{"line_number":718,"context_line":"        nw_info \u003d self.get_instance_nw_info("},{"line_number":719,"context_line":"            context, instance, networks\u003dnets_in_requested_order,"},{"line_number":720,"context_line":"            port_ids\u003dports_in_requested_order,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_086e6b2f","line":717,"updated":"2015-06-05 14:11:20.000000000","message":"You need to do this for the created port up in _create_port when you\u0027ve detected that port binding failed since you\u0027re going to raise an exception from that method before the new port is added to created_port_ids.append(created_port), so the created port that failed binding will actually be orphaned in this flow.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d64462688cd9eac53d4fc840e9245b6a5ebd1f92","unresolved":false,"context_lines":[{"line_number":714,"context_line":"                    self._unbind_ports(context,"},{"line_number":715,"context_line":"                                       preexisting_port_ids,"},{"line_number":716,"context_line":"                                       neutron, port_client)"},{"line_number":717,"context_line":"                    self._delete_ports(neutron, instance, created_port_ids)"},{"line_number":718,"context_line":"        nw_info \u003d self.get_instance_nw_info("},{"line_number":719,"context_line":"            context, instance, networks\u003dnets_in_requested_order,"},{"line_number":720,"context_line":"            port_ids\u003dports_in_requested_order,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_480a7c21","line":717,"in_reply_to":"3afb71cf_086e6b2f","updated":"2015-08-13 07:18:24.000000000","message":"hi matt, thanks for patiently reviewing. I will update it.","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"b7df726349049f1e867a9e62081bde0ab291b1f2","unresolved":false,"context_lines":[{"line_number":297,"context_line":"            port_id \u003d port[\u0027port\u0027][\u0027id\u0027]"},{"line_number":298,"context_line":"            if (port[\u0027port\u0027].get(\u0027binding:vif_type\u0027) \u003d\u003d"},{"line_number":299,"context_line":"                network_model.VIF_TYPE_BINDING_FAILED):"},{"line_number":300,"context_line":"                port_client.delete_port(port_id)"},{"line_number":301,"context_line":"                raise exception.PortBindingFailed(port_id\u003dport_id)"},{"line_number":302,"context_line":"            LOG.debug(\u0027Successfully created port: %s\u0027, port_id,"},{"line_number":303,"context_line":"                      instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa1b9901_8ab2de92","line":300,"updated":"2015-08-20 15:09:46.000000000","message":"Is this necessary to delete_port here since a generic exception will be caught in allocate_for_instance for unbinding and deleting the port in case of failure ?","commit_id":"7fc38d0c8498f73f6502520fee99158d130bbfc3"}],"nova/tests/unit/network/test_neutronv2.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8d21138ab62bb3e7409d867eb0334222244c271d","unresolved":false,"context_lines":[{"line_number":428,"context_line":"                                             \u0027tenant_id\u0027: self.tenant_id,"},{"line_number":429,"context_line":"                                             \u0027mac_address\u0027: \u0027my_mac1\u0027,"},{"line_number":430,"context_line":"                                             \u0027device_id\u0027: kwargs.get(\u0027_device\u0027)"},{"line_number":431,"context_line":"                                                 and self.instance2.uuid or \u0027\u0027}"},{"line_number":432,"context_line":"                                   }"},{"line_number":433,"context_line":"                        if kwargs.get(\u0027_break\u0027) \u003d\u003d \u0027port_error\u0027:"},{"line_number":434,"context_line":"                            ret_port[\u0027port\u0027].update({\u0027binding:vif_type\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_6081878f","line":431,"updated":"2015-03-28 14:08:48.000000000","message":"so:\n\n    device_id \u003d kwargs.get(\u0027_device\u0027) if kwargs.get(\u0027_device\u0027) and self.instance2.uuid else \"\"\n\nis this the expected value?","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"81046ee2164223a90ed58cadca094e18edbdf67c","unresolved":false,"context_lines":[{"line_number":428,"context_line":"                                             \u0027tenant_id\u0027: self.tenant_id,"},{"line_number":429,"context_line":"                                             \u0027mac_address\u0027: \u0027my_mac1\u0027,"},{"line_number":430,"context_line":"                                             \u0027device_id\u0027: kwargs.get(\u0027_device\u0027)"},{"line_number":431,"context_line":"                                                 and self.instance2.uuid or \u0027\u0027}"},{"line_number":432,"context_line":"                                   }"},{"line_number":433,"context_line":"                        if kwargs.get(\u0027_break\u0027) \u003d\u003d \u0027port_error\u0027:"},{"line_number":434,"context_line":"                            ret_port[\u0027port\u0027].update({\u0027binding:vif_type\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_4931030b","line":431,"in_reply_to":"da9b358b_6081878f","updated":"2015-03-30 01:24:04.000000000","message":"this is from origin code.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8d21138ab62bb3e7409d867eb0334222244c271d","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                        if kwargs.get(\u0027_break\u0027) \u003d\u003d \u0027port_error\u0027:"},{"line_number":434,"context_line":"                            ret_port[\u0027port\u0027].update({\u0027binding:vif_type\u0027:"},{"line_number":435,"context_line":"                                                     kwargs.get(\u0027port_error\u0027)})"},{"line_number":436,"context_line":"                            self.moxed_client.show_port(request.port_id).\\"},{"line_number":437,"context_line":"                                AndReturn(ret_port)"},{"line_number":438,"context_line":"                            self.mox.ReplayAll()"},{"line_number":439,"context_line":"                            return api"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_004f5b93","line":436,"updated":"2015-03-28 14:08:48.000000000","message":"try not to use \\ for multiline statements. How about:\n\n    self.moxed_client.show_port(\n        request.port_id).AndReturn(ret_port)","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"81046ee2164223a90ed58cadca094e18edbdf67c","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                        if kwargs.get(\u0027_break\u0027) \u003d\u003d \u0027port_error\u0027:"},{"line_number":434,"context_line":"                            ret_port[\u0027port\u0027].update({\u0027binding:vif_type\u0027:"},{"line_number":435,"context_line":"                                                     kwargs.get(\u0027port_error\u0027)})"},{"line_number":436,"context_line":"                            self.moxed_client.show_port(request.port_id).\\"},{"line_number":437,"context_line":"                                AndReturn(ret_port)"},{"line_number":438,"context_line":"                            self.mox.ReplayAll()"},{"line_number":439,"context_line":"                            return api"}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_e93fb7d4","line":436,"in_reply_to":"da9b358b_004f5b93","updated":"2015-03-30 01:24:04.000000000","message":"sure, thanks for reminder.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8d21138ab62bb3e7409d867eb0334222244c271d","unresolved":false,"context_lines":[{"line_number":1287,"context_line":"        requested_networks \u003d objects.NetworkRequestList("},{"line_number":1288,"context_line":"            objects \u003d ["},{"line_number":1289,"context_line":"                objects.NetworkRequest(network_id\u003dself.nets2[1][\u0027id\u0027]),"},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"                objects.NetworkRequest(port_id\u003d\u0027my_portid1\u0027)])"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"        api \u003d self._stub_allocate_for_instance("}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_00687bf4","line":1290,"updated":"2015-03-28 14:08:48.000000000","message":"unnecessary new line.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"81046ee2164223a90ed58cadca094e18edbdf67c","unresolved":false,"context_lines":[{"line_number":1287,"context_line":"        requested_networks \u003d objects.NetworkRequestList("},{"line_number":1288,"context_line":"            objects \u003d ["},{"line_number":1289,"context_line":"                objects.NetworkRequest(network_id\u003dself.nets2[1][\u0027id\u0027]),"},{"line_number":1290,"context_line":""},{"line_number":1291,"context_line":"                objects.NetworkRequest(port_id\u003d\u0027my_portid1\u0027)])"},{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"        api \u003d self._stub_allocate_for_instance("}],"source_content_type":"text/x-python","patch_set":3,"id":"da9b358b_c92513c3","line":1290,"in_reply_to":"da9b358b_00687bf4","updated":"2015-03-30 01:24:04.000000000","message":"thx.","commit_id":"087b8473b713b9b7f96f423589367a7cf29cff52"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bafe1ab448092fce79a74dc54c6eae7b2f39ae33","unresolved":false,"context_lines":[{"line_number":3378,"context_line":"        mock_unbind.assert_called_once_with(mock.sentinel.ctx, [\u00272\u0027],"},{"line_number":3379,"context_line":"                                            mock_client)"},{"line_number":3380,"context_line":""},{"line_number":3381,"context_line":"    def test_create_port_binding_failed(self):"},{"line_number":3382,"context_line":"        instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":3383,"context_line":"        admin_client \u003d mock.Mock()"},{"line_number":3384,"context_line":"        port_client \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":12,"id":"3afb71cf_57cef7b4","line":3381,"updated":"2015-06-08 17:42:36.000000000","message":"Can we move new unit tests into the TestNeutronV2WithMock class so we can use mock rather than rely on the mox and mega stubout stuff in the setUp of this class?","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"d64462688cd9eac53d4fc840e9245b6a5ebd1f92","unresolved":false,"context_lines":[{"line_number":3378,"context_line":"        mock_unbind.assert_called_once_with(mock.sentinel.ctx, [\u00272\u0027],"},{"line_number":3379,"context_line":"                                            mock_client)"},{"line_number":3380,"context_line":""},{"line_number":3381,"context_line":"    def test_create_port_binding_failed(self):"},{"line_number":3382,"context_line":"        instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":3383,"context_line":"        admin_client \u003d mock.Mock()"},{"line_number":3384,"context_line":"        port_client \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_f6c7a295","line":3381,"in_reply_to":"3afb71cf_57cef7b4","updated":"2015-08-13 07:18:24.000000000","message":"Done","commit_id":"d2293ce2bc87c8dff12165f17635e17516441857"}]}
