)]}'
{"neutron/plugins/ml2/drivers/agent/_common_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"480364800ec3d7442e9b84266516e0ecc0d71f0a","unresolved":false,"context_lines":[{"line_number":313,"context_line":"                                context\u003dself.context,"},{"line_number":314,"context_line":"                                device_details\u003ddevice_details)"},{"line_number":315,"context_line":"            elif c_const.NO_ACTIVE_BINDING in device_details:"},{"line_number":316,"context_line":"                LOG.debug(\"Device %s has no active binding in host\", device)"},{"line_number":317,"context_line":"            else:"},{"line_number":318,"context_line":"                LOG.info(\"Device %s not defined on plugin\", device)"},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_6f17c847","line":316,"range":{"start_line":316,"start_character":16,"end_line":316,"end_character":25},"updated":"2018-07-08 07:54:55.000000000","message":"why is this debug and not info like the line below?","commit_id":"61952c8e6b014c85a0bf88c27e770742496f9ccb"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3c45c402916a15fb1ac7e6352db75f941cec76c2","unresolved":false,"context_lines":[{"line_number":313,"context_line":"                                context\u003dself.context,"},{"line_number":314,"context_line":"                                device_details\u003ddevice_details)"},{"line_number":315,"context_line":"            elif c_const.NO_ACTIVE_BINDING in device_details:"},{"line_number":316,"context_line":"                LOG.debug(\"Device %s has no active binding in host\", device)"},{"line_number":317,"context_line":"            else:"},{"line_number":318,"context_line":"                LOG.info(\"Device %s not defined on plugin\", device)"},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_9b4273ac","line":316,"range":{"start_line":316,"start_character":16,"end_line":316,"end_character":25},"in_reply_to":"5f7c97a3_6f17c847","updated":"2018-07-10 22:31:21.000000000","message":"Good point. Fixed","commit_id":"61952c8e6b014c85a0bf88c27e770742496f9ccb"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"d2cd05ef9ce91f024d5838678322b4176fa5819e","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                                events.AFTER_UPDATE, self,"},{"line_number":313,"context_line":"                                context\u003dself.context,"},{"line_number":314,"context_line":"                                device_details\u003ddevice_details)"},{"line_number":315,"context_line":"            elif c_const.NO_ACTIVE_BINDING in device_details:"},{"line_number":316,"context_line":"                LOG.info(\"Device %s has no active binding in host\", device)"},{"line_number":317,"context_line":"            else:"},{"line_number":318,"context_line":"                LOG.info(\"Device %s not defined on plugin\", device)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_fa606a0f","line":315,"range":{"start_line":315,"start_character":12,"end_line":315,"end_character":61},"updated":"2018-07-19 21:47:22.000000000","message":"I\u0027m wondering if elif is right fit logically here, ?\n\nwhat if port_id is there in device_details and there\u0027s no NO_ACTIVE_BINDING as well ? or correct me if I am wrong,\n\nin that case elif part will never be reached if my understanding is correct then wouldn\u0027t it make sense to have\nthis as just if _const.NO_ACTIVE_BINDING in device_details:\n?","commit_id":"f7064f2b6c6ba1d0ab5f9872b2d5ad7969a64e7b"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"99c0c5d8d02242e916f18c9270cc177d3ccb5d2b","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                                events.AFTER_UPDATE, self,"},{"line_number":313,"context_line":"                                context\u003dself.context,"},{"line_number":314,"context_line":"                                device_details\u003ddevice_details)"},{"line_number":315,"context_line":"            elif c_const.NO_ACTIVE_BINDING in device_details:"},{"line_number":316,"context_line":"                LOG.info(\"Device %s has no active binding in host\", device)"},{"line_number":317,"context_line":"            else:"},{"line_number":318,"context_line":"                LOG.info(\"Device %s not defined on plugin\", device)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_498d0833","line":315,"range":{"start_line":315,"start_character":12,"end_line":315,"end_character":61},"in_reply_to":"5f7c97a3_18152e9b","updated":"2018-07-20 13:58:58.000000000","message":"No dumb questions. Questions from reviewers help us improve our patches and confirm our reasoning about them. Thanks for taking the time :-)","commit_id":"f7064f2b6c6ba1d0ab5f9872b2d5ad7969a64e7b"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"b429704c5bbe71ea0ac223ff8a00aced4d5b4efc","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                                events.AFTER_UPDATE, self,"},{"line_number":313,"context_line":"                                context\u003dself.context,"},{"line_number":314,"context_line":"                                device_details\u003ddevice_details)"},{"line_number":315,"context_line":"            elif c_const.NO_ACTIVE_BINDING in device_details:"},{"line_number":316,"context_line":"                LOG.info(\"Device %s has no active binding in host\", device)"},{"line_number":317,"context_line":"            else:"},{"line_number":318,"context_line":"                LOG.info(\"Device %s not defined on plugin\", device)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_18152e9b","line":315,"range":{"start_line":315,"start_character":12,"end_line":315,"end_character":61},"in_reply_to":"5f7c97a3_9daa9017","updated":"2018-07-19 22:41:07.000000000","message":"thanks for details, I ask dumb question sometimes.","commit_id":"f7064f2b6c6ba1d0ab5f9872b2d5ad7969a64e7b"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"1dee9c82b323e9f2b5500379154e145480675e2b","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                                events.AFTER_UPDATE, self,"},{"line_number":313,"context_line":"                                context\u003dself.context,"},{"line_number":314,"context_line":"                                device_details\u003ddevice_details)"},{"line_number":315,"context_line":"            elif c_const.NO_ACTIVE_BINDING in device_details:"},{"line_number":316,"context_line":"                LOG.info(\"Device %s has no active binding in host\", device)"},{"line_number":317,"context_line":"            else:"},{"line_number":318,"context_line":"                LOG.info(\"Device %s not defined on plugin\", device)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_9daa9017","line":315,"range":{"start_line":315,"start_character":12,"end_line":315,"end_character":61},"in_reply_to":"5f7c97a3_fa606a0f","updated":"2018-07-19 22:08:29.000000000","message":"That is not the case. Please look at https://review.openstack.org/#/c/577637/13/neutron/plugins/ml2/rpc.py@141. As you can see, _get_device_details will only add port_id to device_details after checking in L128 that the port is bound to this host. The device details we are looking for in this elif is created in L134, which doesn\u0027t have a port_id key","commit_id":"f7064f2b6c6ba1d0ab5f9872b2d5ad7969a64e7b"}],"neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"480364800ec3d7442e9b84266516e0ecc0d71f0a","unresolved":false,"context_lines":[{"line_number":872,"context_line":"    #   1.1 Support Security Group RPC"},{"line_number":873,"context_line":"    #   1.3 Added param devices_to_update to security_groups_provider_updated"},{"line_number":874,"context_line":"    #   1.4 Added support for network_update"},{"line_number":875,"context_line":"    #   1.5 Added binding_activate and binding_deactivate"},{"line_number":876,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.5\u0027)"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"    def network_delete(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_2f2790b8","line":875,"range":{"start_line":875,"start_character":12,"end_line":875,"end_character":34},"updated":"2018-07-08 07:54:55.000000000","message":"this should have a new version 1.6","commit_id":"61952c8e6b014c85a0bf88c27e770742496f9ccb"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3c45c402916a15fb1ac7e6352db75f941cec76c2","unresolved":false,"context_lines":[{"line_number":872,"context_line":"    #   1.1 Support Security Group RPC"},{"line_number":873,"context_line":"    #   1.3 Added param devices_to_update to security_groups_provider_updated"},{"line_number":874,"context_line":"    #   1.4 Added support for network_update"},{"line_number":875,"context_line":"    #   1.5 Added binding_activate and binding_deactivate"},{"line_number":876,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.5\u0027)"},{"line_number":877,"context_line":""},{"line_number":878,"context_line":"    def network_delete(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_1bcbc31d","line":875,"range":{"start_line":875,"start_character":12,"end_line":875,"end_character":34},"in_reply_to":"5f7c97a3_2f2790b8","updated":"2018-07-10 22:31:21.000000000","message":"I am bumping the version in another patch of this series: https://review.openstack.org/#/c/563803/12/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py@874\n\nI broke the work to be done in smaller pieces for ease of development and review. The idea is that these two patches will be merged and released together. That is why I am considering only one version bump.","commit_id":"61952c8e6b014c85a0bf88c27e770742496f9ccb"}],"releasenotes/notes/add-multiple-port-bindings-f16eb47ebdddff2d.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65aeb466191245d100ddfc074fe3cd47bae603ae","unresolved":false,"context_lines":[{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"    - In order to better support instance migration, multiple port"},{"line_number":6,"context_line":"      bindings can be associated to compute owned ports"},{"line_number":7,"context_line":"    - CRUD operations are supported for port bindings by the ReST API"},{"line_number":8,"context_line":"    - A compute owned port can have one active binding and many"},{"line_number":9,"context_line":"      inactive bindings"},{"line_number":10,"context_line":"    - There can be only one binding (active or inactive) per compute"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_25e79a11","line":7,"range":{"start_line":7,"start_character":61,"end_line":7,"end_character":69},"updated":"2018-06-26 14:29:06.000000000","message":"Would be nice to either (1) link to API reference docs (don\u0027t think those exist yet) or (2) list the operations here, which I think from memory are:\n\n* GET /ports/{port_id}/bindings - get bindings for port\n* POST /ports/{port_id}/bindings - create port binding\n* PUT /ports/{port_id}/bindings/{host}/activate - activate port binding for a given host\n* DELETE /ports/{port_id}/bindings/{host} - delete port binding for a given host","commit_id":"1ccd28b04452d6721d68874ef9942998171539bb"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"15ff3816432cad5df3cc3dce7bb134175c9d65e0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"    - In order to better support instance migration, multiple port"},{"line_number":6,"context_line":"      bindings can be associated to compute owned ports"},{"line_number":7,"context_line":"    - CRUD operations are supported for port bindings by the ReST API"},{"line_number":8,"context_line":"    - A compute owned port can have one active binding and many"},{"line_number":9,"context_line":"      inactive bindings"},{"line_number":10,"context_line":"    - There can be only one binding (active or inactive) per compute"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_c91cb878","line":7,"range":{"start_line":7,"start_character":61,"end_line":7,"end_character":69},"in_reply_to":"5f7c97a3_25e79a11","updated":"2018-06-26 21:33:05.000000000","message":"Good idea. Done","commit_id":"1ccd28b04452d6721d68874ef9942998171539bb"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bafb605b670e0a9333bfdf5c499eaa65bbce85bf","unresolved":false,"context_lines":[{"line_number":8,"context_line":"      for port bindings by the ReST API."},{"line_number":9,"context_line":"    - A compute owned port can have one active binding and many"},{"line_number":10,"context_line":"      inactive bindings"},{"line_number":11,"context_line":"    - There can be only one binding (active or inactive) per compute"},{"line_number":12,"context_line":"      host"},{"line_number":13,"context_line":"    - When the `activate` operation is executed, a previously inactive"},{"line_number":14,"context_line":"      binding is made active. The previously active binding becomes"},{"line_number":15,"context_line":"      inactive"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"5f7c97a3_4ab7f5f9","line":12,"range":{"start_line":11,"start_character":56,"end_line":12,"end_character":10},"updated":"2018-07-12 14:21:48.000000000","message":"nit: per port per compute node? If my understanding is right. :)","commit_id":"3f76191780ee535e82417b96dc5d1fc8cf617f59"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c8c9bcbf4089feb601ec1ba506b3225dbc43c66f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Support multiple bindings for compute owned ports."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"    - In order to better support instance migration, multiple port"},{"line_number":6,"context_line":"      bindings can be associated to compute owned ports"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_fe62a73c","line":3,"updated":"2018-07-19 15:24:04.000000000","message":"So the usage of prelude and features makes the release notes \"interesting\":\n\nhttp://logs.openstack.org/37/577637/12/check/build-openstack-releasenotes/59d9b95/html/unreleased.html\n\nI think something needs to be done as it\u0027s not obvious all the feature bullets below belong to the prelude.","commit_id":"50557cc7bde6cf33d7f36ae022ad3c4323cf45df"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ad32bcbd0ccb1c26213b37b30b7eb5ae09445d84","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Support multiple bindings for compute owned ports."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"    - In order to better support instance migration, multiple port"},{"line_number":6,"context_line":"      bindings can be associated to compute owned ports"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_2777aba1","line":3,"in_reply_to":"5f7c97a3_fe62a73c","updated":"2018-07-19 20:13:40.000000000","message":"Yes, you are right. Thanks for checking the rendering","commit_id":"50557cc7bde6cf33d7f36ae022ad3c4323cf45df"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c8c9bcbf4089feb601ec1ba506b3225dbc43c66f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Support multiple bindings for compute owned ports."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"    - In order to better support instance migration, multiple port"},{"line_number":6,"context_line":"      bindings can be associated to compute owned ports"},{"line_number":7,"context_line":"    - Create, update, list, show and activate operations are supported"},{"line_number":8,"context_line":"      for port bindings by the ReST API."},{"line_number":9,"context_line":"    - A compute owned port can have one active binding and many"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_9e7cd3ea","line":6,"range":{"start_line":6,"start_character":54,"end_line":6,"end_character":55},"updated":"2018-07-19 15:24:04.000000000","message":"nit: missing ending periods on most of these sentences","commit_id":"50557cc7bde6cf33d7f36ae022ad3c4323cf45df"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ad32bcbd0ccb1c26213b37b30b7eb5ae09445d84","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Support multiple bindings for compute owned ports."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"    - In order to better support instance migration, multiple port"},{"line_number":6,"context_line":"      bindings can be associated to compute owned ports"},{"line_number":7,"context_line":"    - Create, update, list, show and activate operations are supported"},{"line_number":8,"context_line":"      for port bindings by the ReST API."},{"line_number":9,"context_line":"    - A compute owned port can have one active binding and many"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_c76917c0","line":6,"range":{"start_line":6,"start_character":54,"end_line":6,"end_character":55},"in_reply_to":"5f7c97a3_9e7cd3ea","updated":"2018-07-19 20:13:40.000000000","message":"Done","commit_id":"50557cc7bde6cf33d7f36ae022ad3c4323cf45df"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c8c9bcbf4089feb601ec1ba506b3225dbc43c66f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"      inactive bindings"},{"line_number":11,"context_line":"    - There can be only one binding (active or inactive) per compute"},{"line_number":12,"context_line":"      host"},{"line_number":13,"context_line":"    - When the `activate` operation is executed, a previously inactive"},{"line_number":14,"context_line":"      binding is made active. The previously active binding becomes"},{"line_number":15,"context_line":"      inactive"},{"line_number":16,"context_line":"    - As a consequence of the multiple port bindings implementation, the"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_be0aef74","line":13,"range":{"start_line":13,"start_character":15,"end_line":13,"end_character":16},"updated":"2018-07-19 15:24:04.000000000","message":"These should all be ``","commit_id":"50557cc7bde6cf33d7f36ae022ad3c4323cf45df"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"ad32bcbd0ccb1c26213b37b30b7eb5ae09445d84","unresolved":false,"context_lines":[{"line_number":10,"context_line":"      inactive bindings"},{"line_number":11,"context_line":"    - There can be only one binding (active or inactive) per compute"},{"line_number":12,"context_line":"      host"},{"line_number":13,"context_line":"    - When the `activate` operation is executed, a previously inactive"},{"line_number":14,"context_line":"      binding is made active. The previously active binding becomes"},{"line_number":15,"context_line":"      inactive"},{"line_number":16,"context_line":"    - As a consequence of the multiple port bindings implementation, the"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_87679fea","line":13,"range":{"start_line":13,"start_character":15,"end_line":13,"end_character":16},"in_reply_to":"5f7c97a3_be0aef74","updated":"2018-07-19 20:13:40.000000000","message":"Done","commit_id":"50557cc7bde6cf33d7f36ae022ad3c4323cf45df"}]}
