)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"13c2d0432d8a7aebf20ee101ec69f560f80caa41","unresolved":false,"context_lines":[{"line_number":15,"context_line":"body. It also extends the \u0027vip\u0027 table with the new column named"},{"line_number":16,"context_line":"\u0027qos_policy_id\u0027 to store the qos_id from neutron."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"ToDo:"},{"line_number":19,"context_line":"Add ApplyQos task in loadbalancer_post_task_flows and loadbalancer_update_task_flows."},{"line_number":20,"context_line":"Then add some Uts and api tests."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Co-Authored-By: Reedip \u003creedip.banerjee@nectechnologies.in\u003e"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":36,"id":"5f2577a7_59b5f6ed","line":20,"range":{"start_line":18,"start_character":0,"end_line":20,"end_character":32},"updated":"2017-09-08 23:30:00.000000000","message":"I think this is done","commit_id":"5dfbb0b73fed40e69e1bbd2348ba34a32a518d3e"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"348cdc94fff31d74275d2e57bf0f7045857548a5","unresolved":false,"context_lines":[{"line_number":765,"context_line":"  type: string"},{"line_number":766,"context_line":"vip_qos_policy_id:"},{"line_number":767,"context_line":"  description: |"},{"line_number":768,"context_line":"    The ID of the QoS Policy id which will apply to the Virtual IP (VIP)."},{"line_number":769,"context_line":"  in: body"},{"line_number":770,"context_line":"  required: true"},{"line_number":771,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7f231b9d_7d850fad","line":768,"range":{"start_line":768,"start_character":29,"end_line":768,"end_character":31},"updated":"2017-06-12 08:21:41.000000000","message":"is this \u0027id\u0027 word necessary?","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"5d56675e452b099c14ec3875bae4a22c31d1ffbb","unresolved":false,"context_lines":[{"line_number":765,"context_line":"  type: string"},{"line_number":766,"context_line":"vip_qos_policy_id:"},{"line_number":767,"context_line":"  description: |"},{"line_number":768,"context_line":"    The ID of the QoS Policy id which will apply to the Virtual IP (VIP)."},{"line_number":769,"context_line":"  in: body"},{"line_number":770,"context_line":"  required: true"},{"line_number":771,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7f231b9d_d99e4cb7","line":768,"range":{"start_line":768,"start_character":29,"end_line":768,"end_character":31},"in_reply_to":"7f231b9d_3b465823","updated":"2017-06-13 07:27:11.000000000","message":"I was thinking like  \u0027The ID of the QoS Policy which will apply to the Virtual IP (VIP).\u0027?,","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"3b83e0408a802b9c1b8e5d723f37be8ba17ee374","unresolved":false,"context_lines":[{"line_number":765,"context_line":"  type: string"},{"line_number":766,"context_line":"vip_qos_policy_id:"},{"line_number":767,"context_line":"  description: |"},{"line_number":768,"context_line":"    The ID of the QoS Policy id which will apply to the Virtual IP (VIP)."},{"line_number":769,"context_line":"  in: body"},{"line_number":770,"context_line":"  required: true"},{"line_number":771,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7f231b9d_3b465823","line":768,"range":{"start_line":768,"start_character":29,"end_line":768,"end_character":31},"in_reply_to":"7f231b9d_7d850fad","updated":"2017-06-13 06:24:43.000000000","message":"Yeah, we must let user to specify the qos policy id.","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"c4f0cb19ecd4aad48b052c0db7cfec238854a9e0","unresolved":false,"context_lines":[{"line_number":765,"context_line":"  type: string"},{"line_number":766,"context_line":"vip_qos_policy_id:"},{"line_number":767,"context_line":"  description: |"},{"line_number":768,"context_line":"    The ID of the QoS Policy id which will apply to the Virtual IP (VIP)."},{"line_number":769,"context_line":"  in: body"},{"line_number":770,"context_line":"  required: true"},{"line_number":771,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7f231b9d_6c6fdb2a","line":768,"range":{"start_line":768,"start_character":29,"end_line":768,"end_character":31},"in_reply_to":"7f231b9d_d99e4cb7","updated":"2017-11-03 03:46:20.000000000","message":"Makes sense","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"348cdc94fff31d74275d2e57bf0f7045857548a5","unresolved":false,"context_lines":[{"line_number":771,"context_line":"  type: string"},{"line_number":772,"context_line":"vip_qos_policy_id-optional:"},{"line_number":773,"context_line":"  description: |"},{"line_number":774,"context_line":"    The ID of the QoS Policy id which will apply to the Virtual IP (VIP)."},{"line_number":775,"context_line":"  in: body"},{"line_number":776,"context_line":"  required: false"},{"line_number":777,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7f231b9d_3d8f97cd","line":774,"range":{"start_line":774,"start_character":29,"end_line":774,"end_character":31},"updated":"2017-06-12 08:21:41.000000000","message":"ditto","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"cc72cbe57011f4351f97c0bb6602e2dc70c55d08","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"  in: body"},{"line_number":1060,"context_line":"  required: false"},{"line_number":1061,"context_line":"  type: string"},{"line_number":1062,"context_line":"vip_qos_policy_id:"},{"line_number":1063,"context_line":"  description: |"},{"line_number":1064,"context_line":"    The ID of the QoS Policy which will apply to the Virtual IP (VIP)."},{"line_number":1065,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":46,"id":"1f485f77_647ae4f1","line":1062,"updated":"2017-11-14 20:19:09.000000000","message":"?? why do we have two of that?","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"5d3036580263c0e92d3ccd631c1df6d53a35e287","unresolved":false,"context_lines":[{"line_number":1059,"context_line":"  in: body"},{"line_number":1060,"context_line":"  required: false"},{"line_number":1061,"context_line":"  type: string"},{"line_number":1062,"context_line":"vip_qos_policy_id:"},{"line_number":1063,"context_line":"  description: |"},{"line_number":1064,"context_line":"    The ID of the QoS Policy which will apply to the Virtual IP (VIP)."},{"line_number":1065,"context_line":"  in: body"}],"source_content_type":"text/x-yaml","patch_set":46,"id":"1f485f77_e47eca69","line":1062,"in_reply_to":"1f485f77_647ae4f1","updated":"2017-11-15 01:51:01.000000000","message":"Do you mean that there are 2 parameters about qos_policy? The first one is for response body, so the required is true. And the option one is for request body, so users could input it optionally. You can find them in \nhttps://review.openstack.org/#/c/458308/46/api-ref/source/v2/loadbalancer.inc","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"}],"api-ref/source/v2/loadbalancer.inc":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a2b7429ece1eb67d01447a718ad2854b18d5b517","unresolved":false,"context_lines":[{"line_number":108,"context_line":"memory for the load balancer."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"An optional ``vip_qos_policy_id`` attribute from Neutron can be used"},{"line_number":111,"context_line":"to apply QoS policies on a loadbalancer which has a VIP."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"You can also specify the ``provider`` attribute when you create a"},{"line_number":114,"context_line":"load balancer. The ``provider`` attribute specifies which backend should"}],"source_content_type":"text/x-c++src","patch_set":57,"id":"df87a7cf_e7c23f34","line":111,"updated":"2017-12-09 01:15:19.000000000","message":"\"on a loadbalancer which has a VIP.\" -\u003e \"on a loadbalancer VIP.\"","commit_id":"10a199c40671f5aa1382900f92b0510508a78a12"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d98e47fe43a1e8357e2e82cb1b55510d6f92b210","unresolved":false,"context_lines":[{"line_number":108,"context_line":"memory for the load balancer."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"An optional ``vip_qos_policy_id`` attribute from Neutron can be used"},{"line_number":111,"context_line":"to apply QoS policies on a loadbalancer which has a VIP."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"You can also specify the ``provider`` attribute when you create a"},{"line_number":114,"context_line":"load balancer. The ``provider`` attribute specifies which backend should"}],"source_content_type":"text/x-c++src","patch_set":57,"id":"df87a7cf_81c46d41","line":111,"in_reply_to":"df87a7cf_e7c23f34","updated":"2017-12-11 04:09:31.000000000","message":"Done","commit_id":"10a199c40671f5aa1382900f92b0510508a78a12"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"4f4db6b4102d6cba13ddaea04a3c41b5589dbc08","unresolved":false,"context_lines":[{"line_number":107,"context_line":"to allow custom load balancer configurations, such as allocating more"},{"line_number":108,"context_line":"memory for the load balancer."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"An optional ``vip_qos_policy_id`` attribute from Neutron can be used"},{"line_number":111,"context_line":"to apply QoS policies on a loadbalancer VIP."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"You can also specify the ``provider`` attribute when you create a"},{"line_number":114,"context_line":"load balancer. The ``provider`` attribute specifies which backend should"}],"source_content_type":"text/x-c++src","patch_set":58,"id":"df87a7cf_c76109d5","line":111,"range":{"start_line":110,"start_character":0,"end_line":111,"end_character":44},"updated":"2017-12-12 01:48:29.000000000","message":"If `null` value removes QoS policy, it should be mentioned here. I actually missed that semantics.","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d1af6bf3494f43a53c7a8ecad6f14dee88a96369","unresolved":false,"context_lines":[{"line_number":107,"context_line":"to allow custom load balancer configurations, such as allocating more"},{"line_number":108,"context_line":"memory for the load balancer."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"An optional ``vip_qos_policy_id`` attribute from Neutron can be used"},{"line_number":111,"context_line":"to apply QoS policies on a loadbalancer VIP."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"You can also specify the ``provider`` attribute when you create a"},{"line_number":114,"context_line":"load balancer. The ``provider`` attribute specifies which backend should"}],"source_content_type":"text/x-c++src","patch_set":58,"id":"df87a7cf_27cd5584","line":111,"range":{"start_line":110,"start_character":0,"end_line":111,"end_character":44},"in_reply_to":"df87a7cf_c76109d5","updated":"2017-12-12 02:15:43.000000000","message":"Yeah, that\u0027s correct. aha. Sorry for confuse.","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"}],"octavia/api/v2/controllers/load_balancer.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        load_balancer \u003d load_balancer.loadbalancer"},{"line_number":196,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":197,"context_line":"        db_lb \u003d self._get_db_lb(context.session, id)"},{"line_number":198,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":199,"context_line":"                (db_lb.vip.qos_policy_id !\u003d"},{"line_number":200,"context_line":"                    load_balancer.vip_qos_policy_id)):"},{"line_number":201,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_054e5f6e","line":198,"updated":"2017-05-09 18:59:41.000000000","message":"How do you remove a vip_qos_policy from an existing load balancer?  Can I pass in null or None?","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        load_balancer \u003d load_balancer.loadbalancer"},{"line_number":196,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":197,"context_line":"        db_lb \u003d self._get_db_lb(context.session, id)"},{"line_number":198,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":199,"context_line":"                (db_lb.vip.qos_policy_id !\u003d"},{"line_number":200,"context_line":"                    load_balancer.vip_qos_policy_id)):"},{"line_number":201,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_99735b81","line":198,"in_reply_to":"1f013ff3_6ef3e80b","updated":"2017-05-18 07:27:19.000000000","message":"Actually, patchset 13 not concern this case. I will modify the code to let user to pass null to remove vip qos_policy.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7f2db6c63738184100bba27a47397d26bb338b9b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        load_balancer \u003d load_balancer.loadbalancer"},{"line_number":196,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":197,"context_line":"        db_lb \u003d self._get_db_lb(context.session, id)"},{"line_number":198,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":199,"context_line":"                (db_lb.vip.qos_policy_id !\u003d"},{"line_number":200,"context_line":"                    load_balancer.vip_qos_policy_id)):"},{"line_number":201,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f013ff3_6ef3e80b","line":198,"in_reply_to":"3f044301_054e5f6e","updated":"2017-05-17 04:21:59.000000000","message":"Handled in https://review.openstack.org/#/c/458308/13/octavia/controller/worker/tasks/network_tasks.py","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"348cdc94fff31d74275d2e57bf0f7045857548a5","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":316,"context_line":"        db_lb \u003d self._get_db_lb(context.session, id)"},{"line_number":317,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":318,"context_line":"                not isinstance(load_balancer.vip_qos_policy_id,"},{"line_number":319,"context_line":"                               wtypes.UnsetType) and"},{"line_number":320,"context_line":"                db_lb.vip.qos_policy_id !\u003d load_balancer.vip_qos_policy_id):"},{"line_number":321,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"},{"line_number":322,"context_line":"        self._test_lb_status(context.session, id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_40c26635","line":319,"range":{"start_line":318,"start_character":16,"end_line":319,"end_character":48},"updated":"2017-06-12 08:21:41.000000000","message":"is it necessary, isn\u0027t this checked by schema in LoadBalancerRootPUT?","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"3b83e0408a802b9c1b8e5d723f37be8ba17ee374","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":316,"context_line":"        db_lb \u003d self._get_db_lb(context.session, id)"},{"line_number":317,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":318,"context_line":"                not isinstance(load_balancer.vip_qos_policy_id,"},{"line_number":319,"context_line":"                               wtypes.UnsetType) and"},{"line_number":320,"context_line":"                db_lb.vip.qos_policy_id !\u003d load_balancer.vip_qos_policy_id):"},{"line_number":321,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"},{"line_number":322,"context_line":"        self._test_lb_status(context.session, id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_7b2bb02f","line":319,"range":{"start_line":318,"start_character":16,"end_line":319,"end_character":48},"in_reply_to":"7f231b9d_40c26635","updated":"2017-06-13 06:24:43.000000000","message":"The schema in LoadBalancerRootPUT will set the attribute to UnsetType if the request body not contain the field. So when call loadbalncer.vip_qos_policy_id. it\u0027s the UnsetType object, but not None.","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"5d56675e452b099c14ec3875bae4a22c31d1ffbb","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":316,"context_line":"        db_lb \u003d self._get_db_lb(context.session, id)"},{"line_number":317,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":318,"context_line":"                not isinstance(load_balancer.vip_qos_policy_id,"},{"line_number":319,"context_line":"                               wtypes.UnsetType) and"},{"line_number":320,"context_line":"                db_lb.vip.qos_policy_id !\u003d load_balancer.vip_qos_policy_id):"},{"line_number":321,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"},{"line_number":322,"context_line":"        self._test_lb_status(context.session, id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_b97ef068","line":319,"range":{"start_line":318,"start_character":16,"end_line":319,"end_character":48},"in_reply_to":"7f231b9d_7b2bb02f","updated":"2017-06-13 07:27:11.000000000","message":"Ok, thanks for clarification.","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f1d1f657baf0a98b59bbd8827b7a9b0465bb9d78","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                objects\u003d\u0027, \u0027.join(allowed_network_objects))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # Validate the port id"},{"line_number":186,"context_line":"        if load_balancer.vip_port_id:"},{"line_number":187,"context_line":"            self._validate_port_and_fill_or_validate_subnet(load_balancer)"},{"line_number":188,"context_line":"        # If no port id, validate the network id (and subnet if provided)"},{"line_number":189,"context_line":"        elif load_balancer.vip_network_id:"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f485f77_e1c1b855","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":37},"updated":"2017-11-18 00:39:29.000000000","message":"Bar RH Has a good point. How are we handling ports that come in with QoS already applied? I think we should check that if vip_qos_policy_id is not specified, if the port has a QoS policy applied already we should pull that QoS ID and store it on the LB so the UI is clear that there is a policy applied.","commit_id":"164e1eeb920d831f8048f647ae78672c1342693e"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"a5432234e2c28b40832e8c2a613ebdff5e641a5b","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                objects\u003d\u0027, \u0027.join(allowed_network_objects))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # Validate the port id"},{"line_number":186,"context_line":"        if load_balancer.vip_port_id:"},{"line_number":187,"context_line":"            self._validate_port_and_fill_or_validate_subnet(load_balancer)"},{"line_number":188,"context_line":"        # If no port id, validate the network id (and subnet if provided)"},{"line_number":189,"context_line":"        elif load_balancer.vip_network_id:"}],"source_content_type":"text/x-python","patch_set":50,"id":"1f485f77_f3be1cd3","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":37},"in_reply_to":"1f485f77_e1c1b855","updated":"2017-11-20 01:27:15.000000000","message":"Thanks, Michael. I think it must contains 2 scenarios:\n1. User request with vip_port_id and vip_qos_policy_id, we need to clear that ignore the qos_policy on the vip_port_id.\n2. User request with vip_port_id only, that\u0027s what you said. Get the qos_policy from the port and set vip_qos_policy_id in LB obj.Then the below check(L196 and LB create workflow) can process like specify vip_qos_policy_id case.\nAnd this check will be hit in LB creation only.","commit_id":"164e1eeb920d831f8048f647ae78672c1342693e"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        load_balancer.vip_network_id \u003d port.network_id"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # validate the request vip port whether applied the qos_policy and"},{"line_number":136,"context_line":"        # store the port_qos_policy to loadbalancer obj if possible. The"},{"line_number":137,"context_line":"        # default behavior is the \u0027vip_qos_policy_id\u0027 if you request, will"},{"line_number":138,"context_line":"        # overwrite the qos_policy applied on vip_port."},{"line_number":139,"context_line":"        port_qos_policy_id \u003d port.qos_policy_id"},{"line_number":140,"context_line":"        if (port_qos_policy_id and"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_13efe984","line":137,"range":{"start_line":136,"start_character":69,"end_line":137,"end_character":68},"updated":"2017-11-21 20:35:01.000000000","message":"great! This is exactly the behavior to expect.\nCould you reword this? maybe: \"The default behavior is that if \u0027vip_qos_policy_id\u0027 is specified in the request, it will override...\"","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bd55f27f560602621bc62ff45aab8860da3b13d3","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        load_balancer.vip_network_id \u003d port.network_id"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # validate the request vip port whether applied the qos_policy and"},{"line_number":136,"context_line":"        # store the port_qos_policy to loadbalancer obj if possible. The"},{"line_number":137,"context_line":"        # default behavior is the \u0027vip_qos_policy_id\u0027 if you request, will"},{"line_number":138,"context_line":"        # overwrite the qos_policy applied on vip_port."},{"line_number":139,"context_line":"        port_qos_policy_id \u003d port.qos_policy_id"},{"line_number":140,"context_line":"        if (port_qos_policy_id and"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_58910899","line":137,"range":{"start_line":136,"start_character":69,"end_line":137,"end_character":68},"in_reply_to":"ff82abbf_13efe984","updated":"2017-11-23 09:15:48.000000000","message":"OK. Thanks, update in the next patch. :)","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # overwrite the qos_policy applied on vip_port."},{"line_number":139,"context_line":"        port_qos_policy_id \u003d port.qos_policy_id"},{"line_number":140,"context_line":"        if (port_qos_policy_id and"},{"line_number":141,"context_line":"                isinstance(load_balancer.vip_qos_policy_id, wtypes.UnsetType)):"},{"line_number":142,"context_line":"            load_balancer.vip_qos_policy_id \u003d port_qos_policy_id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Identify the subnet for this port"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_b21e3eb8","line":141,"range":{"start_line":141,"start_character":16,"end_line":141,"end_character":77},"updated":"2017-11-21 20:35:01.000000000","message":"what is the reason you don\u0027t check whether the value is true?\ne.g. ... if lb.vip_qos_policy_id:","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bd55f27f560602621bc62ff45aab8860da3b13d3","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # overwrite the qos_policy applied on vip_port."},{"line_number":139,"context_line":"        port_qos_policy_id \u003d port.qos_policy_id"},{"line_number":140,"context_line":"        if (port_qos_policy_id and"},{"line_number":141,"context_line":"                isinstance(load_balancer.vip_qos_policy_id, wtypes.UnsetType)):"},{"line_number":142,"context_line":"            load_balancer.vip_qos_policy_id \u003d port_qos_policy_id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Identify the subnet for this port"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_98979091","line":141,"range":{"start_line":141,"start_character":16,"end_line":141,"end_character":77},"in_reply_to":"ff82abbf_b21e3eb8","updated":"2017-11-23 09:15:48.000000000","message":"Because \n1. the value is \"Unset\" type if the request dont contain vip_qos_policy_id.\n2. the value must be \"Uuid\" type if the api layer accept this request.\n3. the value should be \"None\" type if the request like {\"loadbalancer\":{\"vip_qos_policy_id\": null, ....}}\nSo We just check whether the request body doesn\u0027t contain \"vip_qos_policy_id\" which the value must be Unset type.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":433,"context_line":"                not isinstance(load_balancer.vip_qos_policy_id,"},{"line_number":434,"context_line":"                               wtypes.UnsetType) and"},{"line_number":435,"context_line":"                db_lb.vip.qos_policy_id !\u003d load_balancer.vip_qos_policy_id):"},{"line_number":436,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"},{"line_number":437,"context_line":"        self._test_lb_status(context.session, id)"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_332ead43","line":434,"range":{"start_line":433,"start_character":16,"end_line":434,"end_character":48},"updated":"2017-11-21 20:35:01.000000000","message":"if lb.vip_qos_policy_id","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bd55f27f560602621bc62ff45aab8860da3b13d3","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":433,"context_line":"                not isinstance(load_balancer.vip_qos_policy_id,"},{"line_number":434,"context_line":"                               wtypes.UnsetType) and"},{"line_number":435,"context_line":"                db_lb.vip.qos_policy_id !\u003d load_balancer.vip_qos_policy_id):"},{"line_number":436,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"},{"line_number":437,"context_line":"        self._test_lb_status(context.session, id)"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_78e3ac34","line":434,"range":{"start_line":433,"start_character":16,"end_line":434,"end_character":48},"in_reply_to":"ff82abbf_332ead43","updated":"2017-11-23 09:15:48.000000000","message":"The same as L141 comment. And this check is for verify the qos exist in neutron, so we need to check lb.vip_qos_policy_id first.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"d76e97e05510084d4aabaaded18ce67dc4a5ae43","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        # default behavior is that if \u0027vip_qos_policy_id\u0027 is specified in the"},{"line_number":138,"context_line":"        # request, it will override the qos_policy applied on vip_port."},{"line_number":139,"context_line":"        port_qos_policy_id \u003d port.qos_policy_id"},{"line_number":140,"context_line":"        if (port_qos_policy_id and"},{"line_number":141,"context_line":"                isinstance(load_balancer.vip_qos_policy_id, wtypes.UnsetType)):"},{"line_number":142,"context_line":"            load_balancer.vip_qos_policy_id \u003d port_qos_policy_id"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_80277dca","line":140,"range":{"start_line":140,"start_character":12,"end_line":140,"end_character":30},"updated":"2017-12-12 01:25:03.000000000","message":"\u0027is not None\u0027 is better.","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d1af6bf3494f43a53c7a8ecad6f14dee88a96369","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        # default behavior is that if \u0027vip_qos_policy_id\u0027 is specified in the"},{"line_number":138,"context_line":"        # request, it will override the qos_policy applied on vip_port."},{"line_number":139,"context_line":"        port_qos_policy_id \u003d port.qos_policy_id"},{"line_number":140,"context_line":"        if (port_qos_policy_id and"},{"line_number":141,"context_line":"                isinstance(load_balancer.vip_qos_policy_id, wtypes.UnsetType)):"},{"line_number":142,"context_line":"            load_balancer.vip_qos_policy_id \u003d port_qos_policy_id"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_47a9798d","line":140,"range":{"start_line":140,"start_character":12,"end_line":140,"end_character":30},"in_reply_to":"df87a7cf_80277dca","updated":"2017-12-12 02:15:43.000000000","message":"No, I can\u0027t. Please think if port_qos_policy_id \u003d\u0027\u0027","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"d76e97e05510084d4aabaaded18ce67dc4a5ae43","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # request, it will override the qos_policy applied on vip_port."},{"line_number":139,"context_line":"        port_qos_policy_id \u003d port.qos_policy_id"},{"line_number":140,"context_line":"        if (port_qos_policy_id and"},{"line_number":141,"context_line":"                isinstance(load_balancer.vip_qos_policy_id, wtypes.UnsetType)):"},{"line_number":142,"context_line":"            load_balancer.vip_qos_policy_id \u003d port_qos_policy_id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Identify the subnet for this port"}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_a4e2c3d3","line":141,"range":{"start_line":141,"start_character":16,"end_line":141,"end_character":78},"updated":"2017-12-12 01:25:03.000000000","message":"This can be replaced by load_balancer.vip_qos_policy_id, because bool(Unset) is False.\nActually, that\u0027s already done in L205.","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d1af6bf3494f43a53c7a8ecad6f14dee88a96369","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        # request, it will override the qos_policy applied on vip_port."},{"line_number":139,"context_line":"        port_qos_policy_id \u003d port.qos_policy_id"},{"line_number":140,"context_line":"        if (port_qos_policy_id and"},{"line_number":141,"context_line":"                isinstance(load_balancer.vip_qos_policy_id, wtypes.UnsetType)):"},{"line_number":142,"context_line":"            load_balancer.vip_qos_policy_id \u003d port_qos_policy_id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Identify the subnet for this port"}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_a7896575","line":141,"range":{"start_line":141,"start_character":16,"end_line":141,"end_character":78},"in_reply_to":"df87a7cf_a4e2c3d3","updated":"2017-12-12 02:15:43.000000000","message":"Oh, really? I will test it.","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"d76e97e05510084d4aabaaded18ce67dc4a5ae43","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":433,"context_line":"                not isinstance(load_balancer.vip_qos_policy_id,"},{"line_number":434,"context_line":"                               wtypes.UnsetType) and"},{"line_number":435,"context_line":"                db_lb.vip.qos_policy_id !\u003d load_balancer.vip_qos_policy_id):"},{"line_number":436,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"},{"line_number":437,"context_line":"        self._test_lb_status(context.session, id)"},{"line_number":438,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_6436fb53","line":435,"range":{"start_line":433,"start_character":0,"end_line":435,"end_character":76},"updated":"2017-12-12 01:25:03.000000000","message":"Are these necessary?","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d1af6bf3494f43a53c7a8ecad6f14dee88a96369","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                                   constants.RBAC_PUT)"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        if (load_balancer.vip_qos_policy_id and"},{"line_number":433,"context_line":"                not isinstance(load_balancer.vip_qos_policy_id,"},{"line_number":434,"context_line":"                               wtypes.UnsetType) and"},{"line_number":435,"context_line":"                db_lb.vip.qos_policy_id !\u003d load_balancer.vip_qos_policy_id):"},{"line_number":436,"context_line":"            validate.qos_policy_exists(load_balancer.vip_qos_policy_id)"},{"line_number":437,"context_line":"        self._test_lb_status(context.session, id)"},{"line_number":438,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_c79ca96b","line":435,"range":{"start_line":433,"start_character":0,"end_line":435,"end_character":76},"in_reply_to":"df87a7cf_6436fb53","updated":"2017-12-12 02:15:43.000000000","message":"Yeah. \nFor update db_lb.vip.qos_policy_id !\u003d load_balancer.vip_qos_policy_id, we need to check whether the qos_policy is exist in neutron side. But I test before, the UnsetType is True if I check in \u0027if\u0027","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"}],"octavia/common/validate.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"972edbe46e8bf5a285c0291fcd1073a4758eae74","unresolved":false,"context_lines":[{"line_number":223,"context_line":"    return subnet"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def qos_policy_exists(qos_policy_id):"},{"line_number":227,"context_line":"    network_driver \u003d utils.get_network_driver()"},{"line_number":228,"context_line":"    try:"},{"line_number":229,"context_line":"        qos_policy \u003d network_driver.get_qos_policy(qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_80db7deb","line":226,"updated":"2017-05-09 19:19:58.000000000","message":"Missing unit test","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":223,"context_line":"    return subnet"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def qos_policy_exists(qos_policy_id):"},{"line_number":227,"context_line":"    network_driver \u003d utils.get_network_driver()"},{"line_number":228,"context_line":"    try:"},{"line_number":229,"context_line":"        qos_policy \u003d network_driver.get_qos_policy(qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_19374bb3","line":226,"in_reply_to":"3f044301_80db7deb","updated":"2017-05-18 07:27:19.000000000","message":"add it soon.:)","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"}],"octavia/controller/worker/flows/load_balancer_flows.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"13c2d0432d8a7aebf20ee101ec69f560f80caa41","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        update_LB_flow.add(network_tasks.ApplyQos("},{"line_number":346,"context_line":"            requires\u003dconstants.LOADBALANCER))"},{"line_number":347,"context_line":"        update_LB_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":348,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":349,"context_line":"        update_LB_flow.add(database_tasks.UpdateLoadbalancerInDB("},{"line_number":350,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.UPDATE_DICT]))"},{"line_number":351,"context_line":"        update_LB_flow.add(database_tasks.MarkLBActiveInDB("}],"source_content_type":"text/x-python","patch_set":36,"id":"5f2577a7_0f127c59","line":348,"range":{"start_line":348,"start_character":22,"end_line":348,"end_character":44},"updated":"2017-09-08 23:30:00.000000000","message":"This fails because the LOADBALANCER stored in the flow is missing the vip object.  The model passed in here as LOADBALANCER needs to have the updated vip information attached.\nI think you need a model_tasks.UpdateAttributes task to update a vip object stored in the flow and then make sure the load balancer model passed into ListenersUpdate includes the vip or expand listeners update to accept the vip object and merge it before sending it to the amphora-agent.","commit_id":"5dfbb0b73fed40e69e1bbd2348ba34a32a518d3e"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"74a239f84ed2698ec0c1300551cacd449259bc0b","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        update_LB_flow.add(network_tasks.ApplyQos("},{"line_number":346,"context_line":"            requires\u003dconstants.LOADBALANCER))"},{"line_number":347,"context_line":"        update_LB_flow.add(amphora_driver_tasks.ListenersUpdate("},{"line_number":348,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.LISTENERS]))"},{"line_number":349,"context_line":"        update_LB_flow.add(database_tasks.UpdateLoadbalancerInDB("},{"line_number":350,"context_line":"            requires\u003d[constants.LOADBALANCER, constants.UPDATE_DICT]))"},{"line_number":351,"context_line":"        update_LB_flow.add(database_tasks.MarkLBActiveInDB("}],"source_content_type":"text/x-python","patch_set":37,"id":"5f2577a7_ca44cb49","line":348,"range":{"start_line":348,"start_character":32,"end_line":348,"end_character":44},"updated":"2017-09-15 16:53:50.000000000","message":"Check PS#36, Michael\u0027s comments have not been addressed","commit_id":"a97a81ede82b83f56a366fde27139adf92ec7c07"}],"octavia/controller/worker/task_utils.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a2b7429ece1eb67d01447a718ad2854b18d5b517","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                      \"provisioning status to ERROR due to: \""},{"line_number":235,"context_line":"                      \"%(except)s\", {\u0027pool\u0027: pool_id, \u0027except\u0027: e})"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def get_current_loadbalancer_from_db(self, loadbalancer_id):"},{"line_number":238,"context_line":"        \"\"\"Gets a Loadbalancer from db."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        :param: loadbalancer_id: Load balancer ID which to get from db"}],"source_content_type":"text/x-python","patch_set":57,"id":"df87a7cf_1a8a1abe","line":237,"updated":"2017-12-09 01:15:19.000000000","message":"This is missing a unit test.","commit_id":"10a199c40671f5aa1382900f92b0510508a78a12"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d98e47fe43a1e8357e2e82cb1b55510d6f92b210","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                      \"provisioning status to ERROR due to: \""},{"line_number":235,"context_line":"                      \"%(except)s\", {\u0027pool\u0027: pool_id, \u0027except\u0027: e})"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def get_current_loadbalancer_from_db(self, loadbalancer_id):"},{"line_number":238,"context_line":"        \"\"\"Gets a Loadbalancer from db."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        :param: loadbalancer_id: Load balancer ID which to get from db"}],"source_content_type":"text/x-python","patch_set":57,"id":"df87a7cf_a1bf31a8","line":237,"in_reply_to":"df87a7cf_1a8a1abe","updated":"2017-12-11 04:09:31.000000000","message":"Thanks, Michael. Will update.","commit_id":"10a199c40671f5aa1382900f92b0510508a78a12"}],"octavia/controller/worker/tasks/model_tasks.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"366da7bb77a926538e06db68adc44ab09f621184","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def execute(self, object, update_dict):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        for key, value in update_dict.items():"},{"line_number":34,"context_line":"            if (hasattr(object, key) and"},{"line_number":35,"context_line":"                    isinstance(getattr(object, key),"},{"line_number":36,"context_line":"                               data_models.BaseDataModel) and"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_d5f380e6","line":33,"updated":"2017-12-15 23:18:48.000000000","message":"OK, I ... THINK this is fine. Very confusing though. Maybe we can figure out a more self-documenting way to do this later?\nCould we maybe get a comment or two now to help describe what\u0027s happening?","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f22832c69ef4e75dd2d57ca9a91d7238fcfd15f1","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def execute(self, object, update_dict):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        for key, value in update_dict.items():"},{"line_number":34,"context_line":"            if (hasattr(object, key) and"},{"line_number":35,"context_line":"                    isinstance(getattr(object, key),"},{"line_number":36,"context_line":"                               data_models.BaseDataModel) and"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_b1b9107a","line":33,"in_reply_to":"df87a7cf_d5f380e6","updated":"2017-12-18 06:57:02.000000000","message":"Yeah, good suggestion, I will add the related description for this function. Thank you","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"}],"octavia/controller/worker/tasks/network_tasks.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"872cef5c2aefdee4979c9b20cfd4994b33e62358","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":474,"context_line":"            vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":475,"context_line":"        elif topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY:"},{"line_number":476,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":477,"context_line":"        LOG.debug(\"Appling Qos for VIP port: %s, the real port(vrrp): %s\", ("},{"line_number":478,"context_line":"            vip_port_id, vrrp_port_ids))"},{"line_number":479,"context_line":"        for port_id in vrrp_port_ids:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5ff73747_84eed5b1","line":476,"updated":"2017-04-27 13:29:08.000000000","message":"mmh, can\u0027t we just always loop over the amp. Also there might be other topologies (ACTIVE-ACTIVE)  so we at least need some else logging an error \"Unsupported Topology\"","commit_id":"9a57ae0267144f4d7d4e451ad690dba0a182946d"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6f30b24d7863f0b8a6eff226c77de0accb3b68c3","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":474,"context_line":"            vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":475,"context_line":"        elif topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY:"},{"line_number":476,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":477,"context_line":"        LOG.debug(\"Appling Qos for VIP port: %s, the real port(vrrp): %s\", ("},{"line_number":478,"context_line":"            vip_port_id, vrrp_port_ids))"},{"line_number":479,"context_line":"        for port_id in vrrp_port_ids:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5ff73747_9ff049ff","line":476,"in_reply_to":"5ff73747_84eed5b1","updated":"2017-04-28 01:15:41.000000000","message":"Thanks, german. You said is correct. The ACTIVE-ACTIVE topology and other topology need to be added here. Will update later. :)","commit_id":"9a57ae0267144f4d7d4e451ad690dba0a182946d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"class ApplyQos(BaseNetworkTask):"},{"line_number":456,"context_line":"    \"\"\"Task to plumb a VIP.\"\"\""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def execute(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone):"},{"line_number":459,"context_line":"        \"\"\"Apply qos policy to the vrrp ports which are related with vip.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_40ca156d","line":456,"range":{"start_line":456,"start_character":7,"end_line":456,"end_character":27},"updated":"2017-05-09 18:59:41.000000000","message":"docstring is inaccurate.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"class ApplyQos(BaseNetworkTask):"},{"line_number":456,"context_line":"    \"\"\"Task to plumb a VIP.\"\"\""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def execute(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone):"},{"line_number":459,"context_line":"        \"\"\"Apply qos policy to the vrrp ports which are related with vip.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_760ad426","line":456,"range":{"start_line":456,"start_character":7,"end_line":456,"end_character":27},"in_reply_to":"3f044301_40ca156d","updated":"2017-05-18 07:27:19.000000000","message":"Thanks, correct it soon.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"972edbe46e8bf5a285c0291fcd1073a4758eae74","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            qos_policy_id \u003d loadbalancer.vip.get(\u0027qos_policy_id\u0027, None)"},{"line_number":462,"context_line":"        else:"},{"line_number":463,"context_line":"            qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":464,"context_line":"        if not qos_policy_id:"},{"line_number":465,"context_line":"            return"},{"line_number":466,"context_line":"        if not update_dict and not amps_data:"},{"line_number":467,"context_line":"            topology \u003d loadbalancer.topology"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_40fe9537","line":464,"updated":"2017-05-09 19:19:58.000000000","message":"No unit test coverage","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":461,"context_line":"            qos_policy_id \u003d loadbalancer.vip.get(\u0027qos_policy_id\u0027, None)"},{"line_number":462,"context_line":"        else:"},{"line_number":463,"context_line":"            qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":464,"context_line":"        if not qos_policy_id:"},{"line_number":465,"context_line":"            return"},{"line_number":466,"context_line":"        if not update_dict and not amps_data:"},{"line_number":467,"context_line":"            topology \u003d loadbalancer.topology"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_36045c17","line":464,"in_reply_to":"3f044301_40fe9537","updated":"2017-05-18 07:27:19.000000000","message":"Add it soon","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        else:"},{"line_number":470,"context_line":"            topology \u003d update_dict.get(constants.LOADBALANCER_TOPOLOGY, None)"},{"line_number":471,"context_line":"        vrrp_port_ids \u003d []"},{"line_number":472,"context_line":"        vip_port_id \u003d amps_data[0].ha_port_id"},{"line_number":473,"context_line":"        if topology in constants.SUPPORTED_LB_TOPOLOGIES:"},{"line_number":474,"context_line":"            if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":475,"context_line":"                vrrp_port_ids.append(amps_data[0].vrrp_port_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_c041850d","line":472,"updated":"2017-05-09 18:59:41.000000000","message":"This will only log for the vip_port_id of the first amp.  This could be mis-leading.  Is it necessary?","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            topology \u003d update_dict.get(constants.LOADBALANCER_TOPOLOGY, None)"},{"line_number":471,"context_line":"        vrrp_port_ids \u003d []"},{"line_number":472,"context_line":"        vip_port_id \u003d amps_data[0].ha_port_id"},{"line_number":473,"context_line":"        if topology in constants.SUPPORTED_LB_TOPOLOGIES:"},{"line_number":474,"context_line":"            if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":475,"context_line":"                vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":476,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_2069498a","line":473,"range":{"start_line":473,"start_character":8,"end_line":473,"end_character":57},"updated":"2017-05-09 18:59:41.000000000","message":"Is this conditional necessary?  I don\u0027t think so.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            topology \u003d update_dict.get(constants.LOADBALANCER_TOPOLOGY, None)"},{"line_number":471,"context_line":"        vrrp_port_ids \u003d []"},{"line_number":472,"context_line":"        vip_port_id \u003d amps_data[0].ha_port_id"},{"line_number":473,"context_line":"        if topology in constants.SUPPORTED_LB_TOPOLOGIES:"},{"line_number":474,"context_line":"            if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":475,"context_line":"                vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":476,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_793887d2","line":473,"range":{"start_line":473,"start_character":8,"end_line":473,"end_character":57},"in_reply_to":"3f044301_2069498a","updated":"2017-05-18 07:27:19.000000000","message":"If the process is OK, the \"topology\" is always in SUPPORTED_LB_TOPOLOGIES. I could remove it. Thank you","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":475,"context_line":"                vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":476,"context_line":"            else:"},{"line_number":477,"context_line":"                vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":478,"context_line":"        else:"},{"line_number":479,"context_line":"            LOG.error(_LE(\"Not supported topology: %s, ApplyQos to \""},{"line_number":480,"context_line":"                          \"LoadBalance instances failed.\"), topology)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_606f5192","line":477,"updated":"2017-05-09 18:59:41.000000000","message":"Wouldn\u0027t this work for the all topology?\nDo we really need to handle TOPOLOGY_SINGLE differently?","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":475,"context_line":"                vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":476,"context_line":"            else:"},{"line_number":477,"context_line":"                vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":478,"context_line":"        else:"},{"line_number":479,"context_line":"            LOG.error(_LE(\"Not supported topology: %s, ApplyQos to \""},{"line_number":480,"context_line":"                          \"LoadBalance instances failed.\"), topology)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_b9829f4e","line":477,"in_reply_to":"3f044301_606f5192","updated":"2017-05-18 07:27:19.000000000","message":"I think this could support all topology, here is collect the vrrp_port, as SINGLE just have 1 instance which has vrrp port.others like ACTIVE-STANDBY and ACTIVE-ACTIVE contain more than 1 instances. So.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def revert(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":488,"context_line":"               *args, **kwargs):"},{"line_number":489,"context_line":"        \"\"\"Handle a failure to plumb a vip.\"\"\""},{"line_number":490,"context_line":"        if isinstance(loadbalancer.vip, dict):"},{"line_number":491,"context_line":"            qos_policy_id \u003d loadbalancer.vip.get(\u0027qos_policy_id\u0027, None)"},{"line_number":492,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_e00801da","line":489,"range":{"start_line":489,"start_character":11,"end_line":489,"end_character":43},"updated":"2017-05-09 18:59:41.000000000","message":"This docstring is inaccurate.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def revert(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":488,"context_line":"               *args, **kwargs):"},{"line_number":489,"context_line":"        \"\"\"Handle a failure to plumb a vip.\"\"\""},{"line_number":490,"context_line":"        if isinstance(loadbalancer.vip, dict):"},{"line_number":491,"context_line":"            qos_policy_id \u003d loadbalancer.vip.get(\u0027qos_policy_id\u0027, None)"},{"line_number":492,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_7994078c","line":489,"range":{"start_line":489,"start_character":11,"end_line":489,"end_character":43},"in_reply_to":"3f044301_e00801da","updated":"2017-05-18 07:27:19.000000000","message":"Soon to correct","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":503,"context_line":"            vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":504,"context_line":"        elif topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY:"},{"line_number":505,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":506,"context_line":"        try:"},{"line_number":507,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":508,"context_line":"                self.network_driver.undo_qos_on_port(qos_policy_id, port_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_00bd2dd7","line":505,"range":{"start_line":505,"start_character":13,"end_line":505,"end_character":67},"updated":"2017-05-09 18:59:41.000000000","message":"Same as above, wouldn\u0027t this work for all topology?","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":506,"context_line":"        try:"},{"line_number":507,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":508,"context_line":"                self.network_driver.undo_qos_on_port(qos_policy_id, port_id)"},{"line_number":509,"context_line":"        except Exception:"},{"line_number":510,"context_line":"            LOG.warning(_LW(\u0027Failed to undo qos policy {qos_policy_id} \u0027"},{"line_number":511,"context_line":"                            \u0027on vrrp port: {port} from amphora: {amp}\u0027).format("}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_8095bd42","line":508,"range":{"start_line":508,"start_character":53,"end_line":508,"end_character":66},"updated":"2017-05-09 18:59:41.000000000","message":"This is unused, remove.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":506,"context_line":"        try:"},{"line_number":507,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":508,"context_line":"                self.network_driver.undo_qos_on_port(qos_policy_id, port_id)"},{"line_number":509,"context_line":"        except Exception:"},{"line_number":510,"context_line":"            LOG.warning(_LW(\u0027Failed to undo qos policy {qos_policy_id} \u0027"},{"line_number":511,"context_line":"                            \u0027on vrrp port: {port} from amphora: {amp}\u0027).format("}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_99dc7b75","line":508,"range":{"start_line":508,"start_character":53,"end_line":508,"end_character":66},"in_reply_to":"1f013ff3_6e84080d","updated":"2017-05-18 07:27:19.000000000","message":"Thanks. :)","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7f2db6c63738184100bba27a47397d26bb338b9b","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":506,"context_line":"        try:"},{"line_number":507,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":508,"context_line":"                self.network_driver.undo_qos_on_port(qos_policy_id, port_id)"},{"line_number":509,"context_line":"        except Exception:"},{"line_number":510,"context_line":"            LOG.warning(_LW(\u0027Failed to undo qos policy {qos_policy_id} \u0027"},{"line_number":511,"context_line":"                            \u0027on vrrp port: {port} from amphora: {amp}\u0027).format("}],"source_content_type":"text/x-python","patch_set":13,"id":"1f013ff3_6e84080d","line":508,"range":{"start_line":508,"start_character":53,"end_line":508,"end_character":66},"in_reply_to":"3f044301_8095bd42","updated":"2017-05-17 04:21:59.000000000","message":"Yep thats true","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                self.network_driver.undo_qos_on_port(qos_policy_id, port_id)"},{"line_number":509,"context_line":"        except Exception:"},{"line_number":510,"context_line":"            LOG.warning(_LW(\u0027Failed to undo qos policy {qos_policy_id} \u0027"},{"line_number":511,"context_line":"                            \u0027on vrrp port: {port} from amphora: {amp}\u0027).format("},{"line_number":512,"context_line":"                qos_policy_id\u003dqos_policy_id, port\u003dvrrp_port_ids,"},{"line_number":513,"context_line":"                amp\u003d[amp.id for amp in amps_data]))"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_a0b9d9e9","line":511,"range":{"start_line":511,"start_character":55,"end_line":511,"end_character":62},"updated":"2017-05-09 18:59:41.000000000","message":"nit: amphorae","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                self.network_driver.undo_qos_on_port(qos_policy_id, port_id)"},{"line_number":509,"context_line":"        except Exception:"},{"line_number":510,"context_line":"            LOG.warning(_LW(\u0027Failed to undo qos policy {qos_policy_id} \u0027"},{"line_number":511,"context_line":"                            \u0027on vrrp port: {port} from amphora: {amp}\u0027).format("},{"line_number":512,"context_line":"                qos_policy_id\u003dqos_policy_id, port\u003dvrrp_port_ids,"},{"line_number":513,"context_line":"                amp\u003d[amp.id for amp in amps_data]))"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_59e6e346","line":511,"range":{"start_line":511,"start_character":55,"end_line":511,"end_character":62},"in_reply_to":"3f044301_a0b9d9e9","updated":"2017-05-18 07:27:19.000000000","message":"Thank you for correct.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"348cdc94fff31d74275d2e57bf0f7045857548a5","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        try:"},{"line_number":499,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":500,"context_line":"                self.network_driver.undo_qos_on_port(port_id)"},{"line_number":501,"context_line":"        except Exception:"},{"line_number":502,"context_line":"            LOG.warning((\u0027Failed to undo qos policy {qos_policy_id} \u0027"},{"line_number":503,"context_line":"                         \u0027on vrrp port: {port} from amphorae: {amp}\u0027).format("},{"line_number":504,"context_line":"                qos_policy_id\u003dqos_policy_id, port\u003dvrrp_port_ids,"},{"line_number":505,"context_line":"                amp\u003d[amp.id for amp in amps_data]))"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_0036ae04","line":505,"range":{"start_line":501,"start_character":8,"end_line":505,"end_character":51},"updated":"2017-06-12 08:21:41.000000000","message":"can\u0027t we log exception here? I think that would be useful for debug purpose.","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"3b83e0408a802b9c1b8e5d723f37be8ba17ee374","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        try:"},{"line_number":499,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":500,"context_line":"                self.network_driver.undo_qos_on_port(port_id)"},{"line_number":501,"context_line":"        except Exception:"},{"line_number":502,"context_line":"            LOG.warning((\u0027Failed to undo qos policy {qos_policy_id} \u0027"},{"line_number":503,"context_line":"                         \u0027on vrrp port: {port} from amphorae: {amp}\u0027).format("},{"line_number":504,"context_line":"                qos_policy_id\u003dqos_policy_id, port\u003dvrrp_port_ids,"},{"line_number":505,"context_line":"                amp\u003d[amp.id for amp in amps_data]))"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_dbbc04de","line":505,"range":{"start_line":501,"start_character":8,"end_line":505,"end_character":51},"in_reply_to":"7f231b9d_0036ae04","updated":"2017-06-13 06:24:43.000000000","message":"eh...But I think the whole function is from neutron. If we see this warning log, we must know there are some issues in neutron side, we can go there to check its log. And Octavia just use neutron qos, if it failed, I don\u0027t think we can do something on Octavia side...:)","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":16277,"name":"Pradeep Kumar Singh","email":"ps4openstack@gmail.com","username":"pradeep_singh"},"change_message_id":"5d56675e452b099c14ec3875bae4a22c31d1ffbb","unresolved":false,"context_lines":[{"line_number":498,"context_line":"        try:"},{"line_number":499,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":500,"context_line":"                self.network_driver.undo_qos_on_port(port_id)"},{"line_number":501,"context_line":"        except Exception:"},{"line_number":502,"context_line":"            LOG.warning((\u0027Failed to undo qos policy {qos_policy_id} \u0027"},{"line_number":503,"context_line":"                         \u0027on vrrp port: {port} from amphorae: {amp}\u0027).format("},{"line_number":504,"context_line":"                qos_policy_id\u003dqos_policy_id, port\u003dvrrp_port_ids,"},{"line_number":505,"context_line":"                amp\u003d[amp.id for amp in amps_data]))"}],"source_content_type":"text/x-python","patch_set":23,"id":"7f231b9d_79c6189d","line":505,"range":{"start_line":501,"start_character":8,"end_line":505,"end_character":51},"in_reply_to":"7f231b9d_dbbc04de","updated":"2017-06-13 07:27:11.000000000","message":"ok, thnx.","commit_id":"2d47d51a0da63fe65e4503b2b51907afeb945f71"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54e41f6f29616d7e75eb76cb78f3e3e7a7137937","unresolved":false,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def revert(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":479,"context_line":"               *args, **kwargs):"},{"line_number":480,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":481,"context_line":"        if isinstance(loadbalancer.vip, dict):"},{"line_number":482,"context_line":"            qos_policy_id \u003d loadbalancer.vip.get(\u0027qos_policy_id\u0027, None)"},{"line_number":483,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff346bd7_f6037f0e","line":480,"updated":"2017-07-24 04:15:55.000000000","message":"I might consider the case where the execute method fails and this is not a revert step.\n\n       if isinstance(result, failure.Failure):","commit_id":"3cd839c95ba588379d5a71436bc32ac77e17f8d8"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"0350cdc71c6b0445415e3f58e6c5d20fb7b3c05c","unresolved":false,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def revert(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":479,"context_line":"               *args, **kwargs):"},{"line_number":480,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":481,"context_line":"        if isinstance(loadbalancer.vip, dict):"},{"line_number":482,"context_line":"            qos_policy_id \u003d loadbalancer.vip.get(\u0027qos_policy_id\u0027, None)"},{"line_number":483,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff346bd7_fbb3384c","line":480,"in_reply_to":"ff346bd7_f6037f0e","updated":"2017-07-25 09:32:12.000000000","message":"Thanks, michael. Sorry for the late. Because in loadbalancer post flow, the initial stored is loadbalancer_id, when in networking post flow, the stored loadbalancer had been wrapper as a object, also loadbalancer.vip in the sub-flow. But in loadbalancer update flow, we just get the lb from db repos, and when process to _data_model, the vip attr is not process as the if judgement condition, so loadbalancer.vip is dict type. I tried to fixed it, but have no very appropriate way.","commit_id":"3cd839c95ba588379d5a71436bc32ac77e17f8d8"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54e41f6f29616d7e75eb76cb78f3e3e7a7137937","unresolved":false,"context_lines":[{"line_number":478,"context_line":"    def revert(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":479,"context_line":"               *args, **kwargs):"},{"line_number":480,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":481,"context_line":"        if isinstance(loadbalancer.vip, dict):"},{"line_number":482,"context_line":"            qos_policy_id \u003d loadbalancer.vip.get(\u0027qos_policy_id\u0027, None)"},{"line_number":483,"context_line":"        else:"},{"line_number":484,"context_line":"            qos_policy_id \u003d loadbalancer.vip.qos_policy_id"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff346bd7_16aba31d","line":481,"updated":"2017-07-24 04:15:55.000000000","message":"This should all be wrapped in a try block.  We don\u0027t want the revert flow to abort due to an exception.","commit_id":"3cd839c95ba588379d5a71436bc32ac77e17f8d8"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"0350cdc71c6b0445415e3f58e6c5d20fb7b3c05c","unresolved":false,"context_lines":[{"line_number":478,"context_line":"    def revert(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":479,"context_line":"               *args, **kwargs):"},{"line_number":480,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":481,"context_line":"        if isinstance(loadbalancer.vip, dict):"},{"line_number":482,"context_line":"            qos_policy_id \u003d loadbalancer.vip.get(\u0027qos_policy_id\u0027, None)"},{"line_number":483,"context_line":"        else:"},{"line_number":484,"context_line":"            qos_policy_id \u003d loadbalancer.vip.qos_policy_id"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff346bd7_7bf628fc","line":481,"in_reply_to":"ff346bd7_16aba31d","updated":"2017-07-25 09:32:12.000000000","message":"Thanks, get it.","commit_id":"3cd839c95ba588379d5a71436bc32ac77e17f8d8"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"1db341eb12d9feb4fc17bfbf51d352232206f8d5","unresolved":false,"context_lines":[{"line_number":455,"context_line":"    def execute(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone):"},{"line_number":456,"context_line":"        \"\"\"Apply qos policy to the vrrp ports which are related with vip.\"\"\""},{"line_number":457,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":458,"context_line":"        if (not qos_policy_id and"},{"line_number":459,"context_line":"                (\u0027vip\u0027 not in update_dict or"},{"line_number":460,"context_line":"                 \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":461,"context_line":"            return"},{"line_number":462,"context_line":"        if not amps_data:"},{"line_number":463,"context_line":"            topology \u003d loadbalancer.topology"},{"line_number":464,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_a2d8c77e","line":461,"range":{"start_line":458,"start_character":0,"end_line":461,"end_character":18},"updated":"2017-11-14 23:33:36.000000000","message":"Why default update_dict with None? Is it required?\nYou assume in several places this variable supports __getitem__() and __iter__()","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"5d3036580263c0e92d3ccd631c1df6d53a35e287","unresolved":false,"context_lines":[{"line_number":455,"context_line":"    def execute(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone):"},{"line_number":456,"context_line":"        \"\"\"Apply qos policy to the vrrp ports which are related with vip.\"\"\""},{"line_number":457,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":458,"context_line":"        if (not qos_policy_id and"},{"line_number":459,"context_line":"                (\u0027vip\u0027 not in update_dict or"},{"line_number":460,"context_line":"                 \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":461,"context_line":"            return"},{"line_number":462,"context_line":"        if not amps_data:"},{"line_number":463,"context_line":"            topology \u003d loadbalancer.topology"},{"line_number":464,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_a47e9216","line":461,"range":{"start_line":458,"start_character":0,"end_line":461,"end_character":18},"in_reply_to":"1f485f77_a2d8c77e","updated":"2017-11-15 01:51:01.000000000","message":"Because the loadbalancer creation and update workflow are different, in the creation workflow, this function will just get amps_data, there is no update_dict as we are in creation workflow, and if in creation workflow, the loadbalancer obj has contained the qos_polcy_id if user request loadbalancer with qos_policy. So we can just check if qos_policy_id exist. For update workflow, this function will just get update_dict parameter, so we need check if there is qos_policy request in update request. And why the default value is None, because I want use the same function into both of create and update workflow.\n\nYou could find the reason also in:\nhttps://review.openstack.org/#/c/458308/46/octavia/controller/worker/flows/load_balancer_flows.py","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"cc72cbe57011f4351f97c0bb6602e2dc70c55d08","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        else:"},{"line_number":466,"context_line":"            topology \u003d update_dict.get(constants.LOADBALANCER_TOPOLOGY)"},{"line_number":467,"context_line":"        vrrp_port_ids \u003d []"},{"line_number":468,"context_line":"        if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":469,"context_line":"            vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":470,"context_line":"        else:"},{"line_number":471,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_384e4c6f","line":468,"updated":"2017-11-14 20:19:09.000000000","message":"do we really need this if? It looks to me like the code in the else would work for both cases.","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"5d3036580263c0e92d3ccd631c1df6d53a35e287","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        else:"},{"line_number":466,"context_line":"            topology \u003d update_dict.get(constants.LOADBALANCER_TOPOLOGY)"},{"line_number":467,"context_line":"        vrrp_port_ids \u003d []"},{"line_number":468,"context_line":"        if topology \u003d\u003d constants.TOPOLOGY_SINGLE:"},{"line_number":469,"context_line":"            vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":470,"context_line":"        else:"},{"line_number":471,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_e4e7eae3","line":468,"in_reply_to":"1f485f77_384e4c6f","updated":"2017-11-15 01:51:01.000000000","message":"eh, Thanks for point out. Initially, I just want to show vip_qos_policy feature can support what topology we have. Yeah, it is true that the \u0027if\u0027 is not necessary currently. I will update it.","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"1db341eb12d9feb4fc17bfbf51d352232206f8d5","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":492,"context_line":"            else:"},{"line_number":493,"context_line":"                vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":494,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":495,"context_line":"                self.network_driver.undo_qos_on_port(port_id)"},{"line_number":496,"context_line":"        except Exception:"},{"line_number":497,"context_line":"            LOG.warning(\u0027Failed to undo qos policy %(qos_policy_id)s \u0027"},{"line_number":498,"context_line":"                        \u0027on vrrp port: %(port)s from amphorae: %(amp)s\u0027,"}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_42bd93d6","line":495,"range":{"start_line":494,"start_character":0,"end_line":495,"end_character":61},"updated":"2017-11-14 23:33:36.000000000","message":"I\u0027d suggest try\u0026suppress block here, so it would try to call undo_qos_on_port() on all ports in vrrp_port_ids, even if one fails.\nSince you don\u0027t check for failure, some variables in the warning are not guaranteed to be set.","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"5d3036580263c0e92d3ccd631c1df6d53a35e287","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                vrrp_port_ids.append(amps_data[0].vrrp_port_id)"},{"line_number":492,"context_line":"            else:"},{"line_number":493,"context_line":"                vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":494,"context_line":"            for port_id in vrrp_port_ids:"},{"line_number":495,"context_line":"                self.network_driver.undo_qos_on_port(port_id)"},{"line_number":496,"context_line":"        except Exception:"},{"line_number":497,"context_line":"            LOG.warning(\u0027Failed to undo qos policy %(qos_policy_id)s \u0027"},{"line_number":498,"context_line":"                        \u0027on vrrp port: %(port)s from amphorae: %(amp)s\u0027,"}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_c773d0b0","line":495,"range":{"start_line":494,"start_character":0,"end_line":495,"end_character":61},"in_reply_to":"1f485f77_42bd93d6","updated":"2017-11-15 01:51:01.000000000","message":"Oh, I may make some mistakes here, as the previous code here there was a exception need to include all the code in try\u0026catch block. So I make the LOG like this. And for the second question, if I\u0027m right, you means that the warning log info need guarantee which port failed, right? So I suspect whether we need to make it as port granularity, just for my understood, this is for vip qos_policy from neutron side. We should focus on vip granularity, that means we need report the all vrrp_ports towards the loadbalancer which vip locates. Right? What about you suggestion?Thanks.","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"5592f2398e590785ae4e139b529df0a7d59351ca","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        \"\"\"Apply qos policy to the vrrp ports which are related with vip.\"\"\""},{"line_number":457,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":458,"context_line":"        if (not qos_policy_id and"},{"line_number":459,"context_line":"                (\u0027vip\u0027 not in update_dict or"},{"line_number":460,"context_line":"                 \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":461,"context_line":"            return"},{"line_number":462,"context_line":"        if not amps_data:"},{"line_number":463,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f485f77_71c944aa","line":460,"range":{"start_line":459,"start_character":15,"end_line":460,"end_character":61},"updated":"2017-11-16 13:36:11.000000000","message":"Is it possible scenario that loadbalancer.vip.qos_policy_id\u003dFalse and update_dict\u003dNone?\nIf so, it will fail to call update_dict.__contains__()","commit_id":"64d904b21ce51a26b7fc3c1e037d364db9d5aaf1"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"b74dd54237b47885ddbf4869b7ae66f280fc9dcd","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        \"\"\"Apply qos policy to the vrrp ports which are related with vip.\"\"\""},{"line_number":457,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":458,"context_line":"        if (not qos_policy_id and"},{"line_number":459,"context_line":"                (\u0027vip\u0027 not in update_dict or"},{"line_number":460,"context_line":"                 \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":461,"context_line":"            return"},{"line_number":462,"context_line":"        if not amps_data:"},{"line_number":463,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":49,"id":"1f485f77_abc29657","line":460,"range":{"start_line":459,"start_character":15,"end_line":460,"end_character":61},"in_reply_to":"1f485f77_71c944aa","updated":"2017-11-17 06:23:07.000000000","message":"loadbalancer.vip.qos_policy_id\u003dFalse\nAs the post validate and put validate for this parameter like:\nwtypes.wsattr(wtypes.UuidType())\nSo the qos_policy_id should uuid type, it will be block by API level if set vip_qos_policy_id to other type. You can find the definition in https://review.openstack.org/#/c/458308/49/octavia/api/v2/types/load_balancer.py.\n\nFor update_dict\u003d None, that means this function are doing some create workflow, so if we are in create workflow, and I found the qos_policy_id, then this function can do the next. Also in update workflow, the update_dict is from the user request body towards loadbalancer obj, so I think it won\u0027t to be None.\n\nJust like my mentioned the situation about this function, for this \u0027if\u0027, there are some scenarios like below:\n1. Create LB without vip_qos, that means loadbalancer obj had been genarated, and we cannot get qos_policy_id, \u0027not qos_policy_id\u0027 will be True, so it will break directly.\n2. Create LB with vip_qos, that means we got qos_policy_id, \u0027not qos_policy_id\u0027 will be False, this \u0027if\u0027 will not process the other update_dict part， just go to the next step for qos application.\n3. Update LB with vip_qos, it\u0027s will be OK whatever the exist resource contains qos or not.\n4.1 Update LB without vip_qos, the qos_policy_id will be None if the exist vip not associated with qos. So we can check if \u0027vip\u0027 contained by update_dict, no -\u003e break, yes -\u003e continue check if \u0027qos_policy_id\u0027 part. This will be false.\n4.2 Update LB without vip_qos, and exist LB vip had associated with a qos. This \u0027if\u0027 will be False directly as \u0027not qos_policy_id\u0027 is False, then it will be re-apply the exist qos to the ports of amphora instances like other flow does, such as \u0027ListenersUpdate\u0027, it will reload the haproxy configuration.\n5. qos_policy_id \u003d None and update_dict \u003d None, means this scenario is in creation flow. The \u0027if\u0027 passed to return, this function do nothing.","commit_id":"64d904b21ce51a26b7fc3c1e037d364db9d5aaf1"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":452,"context_line":"class ApplyQos(BaseNetworkTask):"},{"line_number":453,"context_line":"    \"\"\"Apply Quality of Services to the VIP\"\"\""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def execute(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone):"},{"line_number":456,"context_line":"        \"\"\"Apply qos policy to the vrrp ports which are related with vip.\"\"\""},{"line_number":457,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":458,"context_line":"        if (not qos_policy_id and"},{"line_number":459,"context_line":"                (\u0027vip\u0027 not in update_dict or"},{"line_number":460,"context_line":"                 \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":461,"context_line":"            return"},{"line_number":462,"context_line":"        if not amps_data:"},{"line_number":463,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_d6472f1d","line":460,"range":{"start_line":455,"start_character":0,"end_line":460,"end_character":61},"updated":"2017-11-21 20:35:01.000000000","message":"I read your elaborate explanation carefully as for why it is not supposed to fail on runtime. Nonetheless, if you don\u0027t mind, please add a condition on the validity of update_dict, before accessing it. Both as a precaution, and to improve readability.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bd55f27f560602621bc62ff45aab8860da3b13d3","unresolved":false,"context_lines":[{"line_number":452,"context_line":"class ApplyQos(BaseNetworkTask):"},{"line_number":453,"context_line":"    \"\"\"Apply Quality of Services to the VIP\"\"\""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def execute(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone):"},{"line_number":456,"context_line":"        \"\"\"Apply qos policy to the vrrp ports which are related with vip.\"\"\""},{"line_number":457,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":458,"context_line":"        if (not qos_policy_id and"},{"line_number":459,"context_line":"                (\u0027vip\u0027 not in update_dict or"},{"line_number":460,"context_line":"                 \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":461,"context_line":"            return"},{"line_number":462,"context_line":"        if not amps_data:"},{"line_number":463,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_f8601c35","line":460,"range":{"start_line":455,"start_character":0,"end_line":460,"end_character":61},"in_reply_to":"ff82abbf_d6472f1d","updated":"2017-11-23 09:15:48.000000000","message":"Thanks for review. I think it is true that here is bad for read. Sorry for making confusion. I may make a mistake in the previous comment, the update_dict won\u0027t be None, please check http://git.openstack.org/cgit/openstack/octavia/tree/octavia/controller/worker/controller_worker.py#n271\n\nIt will store topology info in update_dict and the workflow elements just to check the info not change it. So in creation and update workflow, update_dict will always be a dict type, not None. \n\nAnd why the function parameters like this, because in create / update lb flow, I passed different parameters. So I just want to meet both scenarios(create/update LB) with different passed parameters.\ncreate: I pass lb_obj, amps_data, update_dict\nupdate: I pass lb_obj,  why I just passed lb_obj, because the \"UpdateAttributes\" element in update taskflow had updated the lb_obj according to update_dict( please check https://review.openstack.org/#/c/458308/52/octavia/controller/worker/tasks/model_tasks.py ). So this function will still work for applying qos if there is a qos_policy in lb_obj like other elements done in update taskflow.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        for port_id in vrrp_port_ids:"},{"line_number":466,"context_line":"            self.network_driver.apply_qos_on_port(qos_policy_id, port_id)"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def revert(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":469,"context_line":"               *args, **kwargs):"},{"line_number":470,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":471,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_16e27704","line":468,"range":{"start_line":468,"start_character":4,"end_line":468,"end_character":34},"updated":"2017-11-21 20:35:01.000000000","message":"I think you\u0027ve missed \u0027result\u0027 parameter. You should read it and compare it to failure, exit if needed, prior to entering the rest of the revert functionality.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bd55f27f560602621bc62ff45aab8860da3b13d3","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        for port_id in vrrp_port_ids:"},{"line_number":466,"context_line":"            self.network_driver.apply_qos_on_port(qos_policy_id, port_id)"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    def revert(self, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":469,"context_line":"               *args, **kwargs):"},{"line_number":470,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":471,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_b66fd990","line":468,"range":{"start_line":468,"start_character":4,"end_line":468,"end_character":34},"in_reply_to":"ff82abbf_16e27704","updated":"2017-11-23 09:15:48.000000000","message":"Yeah, but I think the parameter is useless for this function. Because we need to restore the qos_policy into the original lb and re-update the related amp ports. We can accept result. But I think it may not very useful.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":469,"context_line":"               *args, **kwargs):"},{"line_number":470,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":471,"context_line":"        qos_policy_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":472,"context_line":"        if (not qos_policy_id and"},{"line_number":473,"context_line":"                (\u0027vip\u0027 not in update_dict or"},{"line_number":474,"context_line":"                 \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":475,"context_line":"            return"},{"line_number":476,"context_line":"        if not amps_data:"},{"line_number":477,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_36bc5bdb","line":474,"range":{"start_line":472,"start_character":0,"end_line":474,"end_character":61},"updated":"2017-11-21 20:35:01.000000000","message":"same as above, check update_dict is not None before accessing it.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":2245,"name":"Jacky Hu","email":"hudayou@hotmail.com","username":"hudayou"},"change_message_id":"8ecf57f6b72c4e596b567d8ca5750a2c68e7db2b","unresolved":false,"context_lines":[{"line_number":472,"context_line":"               *args, **kwargs):"},{"line_number":473,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":474,"context_line":"        request_qos_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":475,"context_line":"        ori_lb \u003d self.task_util.get_current_loadbalancer_from_db("},{"line_number":476,"context_line":"            loadbalancer.id)"},{"line_number":477,"context_line":"        if not ori_lb:"},{"line_number":478,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_6cd835ee","line":475,"updated":"2017-12-11 13:45:19.000000000","message":"Is ori meaning original? I guess orig or og or o or ogf might be better for an abbreviation.\nhttp://www.abbreviations.com/abbreviation/Original","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d1af6bf3494f43a53c7a8ecad6f14dee88a96369","unresolved":false,"context_lines":[{"line_number":472,"context_line":"               *args, **kwargs):"},{"line_number":473,"context_line":"        \"\"\"Handle a failure to apply QoS to VIP\"\"\""},{"line_number":474,"context_line":"        request_qos_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":475,"context_line":"        ori_lb \u003d self.task_util.get_current_loadbalancer_from_db("},{"line_number":476,"context_line":"            loadbalancer.id)"},{"line_number":477,"context_line":"        if not ori_lb:"},{"line_number":478,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_87a301b2","line":475,"in_reply_to":"df87a7cf_6cd835ee","updated":"2017-12-12 02:15:43.000000000","message":"Yeah, it means original.","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"366da7bb77a926538e06db68adc44ab09f621184","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        if not qos_policy_id and ("},{"line_number":466,"context_line":"            update_dict and ("},{"line_number":467,"context_line":"                \u0027vip\u0027 not in update_dict or"},{"line_number":468,"context_line":"                \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":469,"context_line":"            return"},{"line_number":470,"context_line":"        if not amps_data:"},{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_35d3cc3a","line":468,"updated":"2017-12-15 23:18:48.000000000","message":"Wait... The way I read this is:\n\n\"If we don\u0027t have a QoS Policy on the existing LB, and we have an Update Including QoS Policy\", which seems like we\u0027d then want to apply the policy?\nDid I read this wrong?","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f22832c69ef4e75dd2d57ca9a91d7238fcfd15f1","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        if not qos_policy_id and ("},{"line_number":466,"context_line":"            update_dict and ("},{"line_number":467,"context_line":"                \u0027vip\u0027 not in update_dict or"},{"line_number":468,"context_line":"                \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":469,"context_line":"            return"},{"line_number":470,"context_line":"        if not amps_data:"},{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_b16ef0fd","line":468,"in_reply_to":"df87a7cf_18f6fdfa","updated":"2017-12-18 06:57:02.000000000","message":"Thanks, I know here maybe hard to make it clear. Sorry. If review with the workflow part to see how the different flow input different parameters would helpful here.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"93211cf130ae6421c42e0f13cb4e4d4f017700ef","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        if not qos_policy_id and ("},{"line_number":466,"context_line":"            update_dict and ("},{"line_number":467,"context_line":"                \u0027vip\u0027 not in update_dict or"},{"line_number":468,"context_line":"                \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":469,"context_line":"            return"},{"line_number":470,"context_line":"        if not amps_data:"},{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_d508602e","line":468,"in_reply_to":"df87a7cf_3563cc1c","updated":"2017-12-15 23:41:39.000000000","message":"OK Hold on, so yeah, i misread it, but here\u0027s what I think it means now:\n\n1) We don\u0027t have a QoS Policy on the existing (or new) LB\n2) We have an update dict, but it doesn\u0027t have a QoS Policy\n\nWhat about:\n1) We don\u0027t have a QoS Policy on the existing (or new) LB\n2) We don\u0027t have an update dict\n\nDoes that go past this by not matching the conditionals?\n\nAlso, if we had an old QoS Policy on the LB, but we have an updated one in the dict ... it looks like we apply the old one from the LB below?","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d5eb68dbff141cfb772bf02a0aafd0189ab1fa47","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        if not qos_policy_id and ("},{"line_number":466,"context_line":"            update_dict and ("},{"line_number":467,"context_line":"                \u0027vip\u0027 not in update_dict or"},{"line_number":468,"context_line":"                \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":469,"context_line":"            return"},{"line_number":470,"context_line":"        if not amps_data:"},{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_153ec8d9","line":468,"in_reply_to":"df87a7cf_3563cc1c","updated":"2017-12-15 23:39:12.000000000","message":"That would be \"if not qos_policy_id in the lb obj\" \u003d True\nAND\nThere is an update_dict, but it either doesn\u0027t have a vip object or qos_policy-id isn\u0027t there\nTHEN\nreturn because we have no qos_policy_id to apply.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"71d98dd7d46816dce5dbd2c071144d3b2b8bd8ee","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        if not qos_policy_id and ("},{"line_number":466,"context_line":"            update_dict and ("},{"line_number":467,"context_line":"                \u0027vip\u0027 not in update_dict or"},{"line_number":468,"context_line":"                \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":469,"context_line":"            return"},{"line_number":470,"context_line":"        if not amps_data:"},{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_954ad8a9","line":468,"in_reply_to":"df87a7cf_35d3cc3a","updated":"2017-12-15 23:30:59.000000000","message":"Isn\u0027t this:\nIf we didn\u0027t get a qos_policy_id in the loadbalancer vip,\nAND we didn\u0027t get a qos_policy_id in the update_dict,\nreturn because we have no qos_policy_id to apply.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7819347b756fbdc9ca9434a0d868d6eca746096c","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        if not qos_policy_id and ("},{"line_number":466,"context_line":"            update_dict and ("},{"line_number":467,"context_line":"                \u0027vip\u0027 not in update_dict or"},{"line_number":468,"context_line":"                \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":469,"context_line":"            return"},{"line_number":470,"context_line":"        if not amps_data:"},{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_3563cc1c","line":468,"in_reply_to":"df87a7cf_954ad8a9","updated":"2017-12-15 23:34:56.000000000","message":"What about the unset case (on an Update)?","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"58f1fe2757daa0eb754d42513f1e2ab1dcfe200a","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        if not qos_policy_id and ("},{"line_number":466,"context_line":"            update_dict and ("},{"line_number":467,"context_line":"                \u0027vip\u0027 not in update_dict or"},{"line_number":468,"context_line":"                \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":469,"context_line":"            return"},{"line_number":470,"context_line":"        if not amps_data:"},{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_18f6fdfa","line":468,"in_reply_to":"df87a7cf_d508602e","updated":"2017-12-15 23:55:17.000000000","message":"OK, so apparently this loadbalancer object already has the updates applied to it, so it\u0027s not the \"before\" state like I thought. So, this should be OK I think. If there is a bug, someone can report it and we can fix it, but it is probably OK, since tests are passing and they looked alright.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"366da7bb77a926538e06db68adc44ab09f621184","unresolved":false,"context_lines":[{"line_number":467,"context_line":"                \u0027vip\u0027 not in update_dict or"},{"line_number":468,"context_line":"                \u0027qos_policy_id\u0027 not in update_dict[\u0027vip\u0027])):"},{"line_number":469,"context_line":"            return"},{"line_number":470,"context_line":"        if not amps_data:"},{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"},{"line_number":472,"context_line":"        vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":473,"context_line":"        for port_id in vrrp_port_ids:"},{"line_number":474,"context_line":"            self.network_driver.apply_qos_on_port(qos_policy_id, port_id)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def revert(self, result, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":477,"context_line":"               *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_35a18caa","line":474,"range":{"start_line":470,"start_character":0,"end_line":474,"end_character":73},"updated":"2017-12-15 23:18:48.000000000","message":"Also, this is repeated below. Could pull it out to be DRY?","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"366da7bb77a926538e06db68adc44ab09f621184","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"},{"line_number":472,"context_line":"        vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":473,"context_line":"        for port_id in vrrp_port_ids:"},{"line_number":474,"context_line":"            self.network_driver.apply_qos_on_port(qos_policy_id, port_id)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def revert(self, result, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":477,"context_line":"               *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_d5e140fe","line":474,"updated":"2017-12-15 23:18:48.000000000","message":"This is one spot where it might be nice to pass these args as keywords, just for clarity.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f22832c69ef4e75dd2d57ca9a91d7238fcfd15f1","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            amps_data \u003d loadbalancer.amphorae"},{"line_number":472,"context_line":"        vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":473,"context_line":"        for port_id in vrrp_port_ids:"},{"line_number":474,"context_line":"            self.network_driver.apply_qos_on_port(qos_policy_id, port_id)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def revert(self, result, loadbalancer, amps_data\u003dNone, update_dict\u003dNone,"},{"line_number":477,"context_line":"               *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_9142cc67","line":474,"in_reply_to":"df87a7cf_d5e140fe","updated":"2017-12-18 06:57:02.000000000","message":"Thanks, I will move the repeat part to a single function.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"366da7bb77a926538e06db68adc44ab09f621184","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        request_qos_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":480,"context_line":"        orig_lb \u003d self.task_utils.get_current_loadbalancer_from_db("},{"line_number":481,"context_line":"            loadbalancer.id)"},{"line_number":482,"context_line":"        if not orig_lb:"},{"line_number":483,"context_line":"            return"},{"line_number":484,"context_line":"        orig_qos_id \u003d orig_lb.vip.qos_policy_id"},{"line_number":485,"context_line":"        if request_qos_id !\u003d orig_qos_id:"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_35bc2cdb","line":482,"updated":"2017-12-15 23:18:48.000000000","message":"Is this really possible?","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"71d98dd7d46816dce5dbd2c071144d3b2b8bd8ee","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        request_qos_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":480,"context_line":"        orig_lb \u003d self.task_utils.get_current_loadbalancer_from_db("},{"line_number":481,"context_line":"            loadbalancer.id)"},{"line_number":482,"context_line":"        if not orig_lb:"},{"line_number":483,"context_line":"            return"},{"line_number":484,"context_line":"        orig_qos_id \u003d orig_lb.vip.qos_policy_id"},{"line_number":485,"context_line":"        if request_qos_id !\u003d orig_qos_id:"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_d5d5c0b8","line":482,"in_reply_to":"df87a7cf_35bc2cdb","updated":"2017-12-15 23:30:59.000000000","message":"Well, it\u0027s a revert flow, so, maybe?","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7819347b756fbdc9ca9434a0d868d6eca746096c","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        request_qos_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":480,"context_line":"        orig_lb \u003d self.task_utils.get_current_loadbalancer_from_db("},{"line_number":481,"context_line":"            loadbalancer.id)"},{"line_number":482,"context_line":"        if not orig_lb:"},{"line_number":483,"context_line":"            return"},{"line_number":484,"context_line":"        orig_qos_id \u003d orig_lb.vip.qos_policy_id"},{"line_number":485,"context_line":"        if request_qos_id !\u003d orig_qos_id:"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_f56c8409","line":482,"in_reply_to":"df87a7cf_d5d5c0b8","updated":"2017-12-15 23:34:56.000000000","message":"Even if we\u0027re reverting a LB Create, the API created the object in the DB for the LB and we\u0027d be going to ERROR on it...","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f22832c69ef4e75dd2d57ca9a91d7238fcfd15f1","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        request_qos_id \u003d loadbalancer.vip.qos_policy_id"},{"line_number":480,"context_line":"        orig_lb \u003d self.task_utils.get_current_loadbalancer_from_db("},{"line_number":481,"context_line":"            loadbalancer.id)"},{"line_number":482,"context_line":"        if not orig_lb:"},{"line_number":483,"context_line":"            return"},{"line_number":484,"context_line":"        orig_qos_id \u003d orig_lb.vip.qos_policy_id"},{"line_number":485,"context_line":"        if request_qos_id !\u003d orig_qos_id:"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_510e843b","line":482,"in_reply_to":"df87a7cf_f56c8409","updated":"2017-12-18 06:57:02.000000000","message":"Thanks, I know the create LB will stored the db, but we don\u0027t know whether the orig_db get from db is good and no raise error, eventhough we know it will be OK at 99.9%, so my thought is just left it here to make the flow stronger. As it will be None if raise some errors. If we don\u0027t like, I will remove it.\n\nAnd for the revert of update/create Lb, it\u0027s better to recover the initial status(orig_qos or some thing) I think.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"366da7bb77a926538e06db68adc44ab09f621184","unresolved":false,"context_lines":[{"line_number":483,"context_line":"            return"},{"line_number":484,"context_line":"        orig_qos_id \u003d orig_lb.vip.qos_policy_id"},{"line_number":485,"context_line":"        if request_qos_id !\u003d orig_qos_id:"},{"line_number":486,"context_line":"            if not amps_data:"},{"line_number":487,"context_line":"                amps_data \u003d loadbalancer.amphorae"},{"line_number":488,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":489,"context_line":"            try:"},{"line_number":490,"context_line":"                for port_id in vrrp_port_ids:"},{"line_number":491,"context_line":"                    self.network_driver.apply_qos_on_port(orig_qos_id, port_id)"},{"line_number":492,"context_line":"            except Exception:"},{"line_number":493,"context_line":"                LOG.warning(\u0027Failed to undo qos policy %(qos_id)s \u0027"},{"line_number":494,"context_line":"                            \u0027on vrrp port: %(port)s from \u0027"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_55bf70cf","line":491,"range":{"start_line":486,"start_character":0,"end_line":491,"end_character":79},"updated":"2017-12-15 23:18:48.000000000","message":"This block is repeated from above -- would it be worth making it a little shared function?","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f22832c69ef4e75dd2d57ca9a91d7238fcfd15f1","unresolved":false,"context_lines":[{"line_number":483,"context_line":"            return"},{"line_number":484,"context_line":"        orig_qos_id \u003d orig_lb.vip.qos_policy_id"},{"line_number":485,"context_line":"        if request_qos_id !\u003d orig_qos_id:"},{"line_number":486,"context_line":"            if not amps_data:"},{"line_number":487,"context_line":"                amps_data \u003d loadbalancer.amphorae"},{"line_number":488,"context_line":"            vrrp_port_ids \u003d [amp.vrrp_port_id for amp in amps_data]"},{"line_number":489,"context_line":"            try:"},{"line_number":490,"context_line":"                for port_id in vrrp_port_ids:"},{"line_number":491,"context_line":"                    self.network_driver.apply_qos_on_port(orig_qos_id, port_id)"},{"line_number":492,"context_line":"            except Exception:"},{"line_number":493,"context_line":"                LOG.warning(\u0027Failed to undo qos policy %(qos_id)s \u0027"},{"line_number":494,"context_line":"                            \u0027on vrrp port: %(port)s from \u0027"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_710b8829","line":491,"range":{"start_line":486,"start_character":0,"end_line":491,"end_character":79},"in_reply_to":"df87a7cf_55bf70cf","updated":"2017-12-18 06:57:02.000000000","message":"Thanks, update in the next patch.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"}],"octavia/db/migration/alembic_migrations/versions/0aee2b450512_extend_api_to_accept_qos_policy_id.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Intel Corporation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_456467e4","line":1,"updated":"2017-05-09 18:59:41.000000000","message":"Is this the right copyright?","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Intel Corporation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_962448c8","line":1,"in_reply_to":"3f044301_456467e4","updated":"2017-05-18 07:27:19.000000000","message":"haha.Thanks.Forget this to correct.","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7f2db6c63738184100bba27a47397d26bb338b9b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Add ID column to Healthmonitor table"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Revision ID: 0aee2b450512"},{"line_number":19,"context_line":"Revises: 5309960964f8"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f013ff3_8e8d1433","line":16,"range":{"start_line":16,"start_character":20,"end_line":16,"end_character":33},"updated":"2017-05-17 04:21:59.000000000","message":"Is this correct?","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Add ID column to Healthmonitor table"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Revision ID: 0aee2b450512"},{"line_number":19,"context_line":"Revises: 5309960964f8"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_161a787c","line":16,"range":{"start_line":16,"start_character":20,"end_line":16,"end_character":33},"in_reply_to":"1f013ff3_8e8d1433","updated":"2017-05-18 07:27:19.000000000","message":"Nice catch","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"}],"octavia/db/models.py":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"7f2db6c63738184100bba27a47397d26bb338b9b","unresolved":false,"context_lines":[{"line_number":360,"context_line":"    load_balancer \u003d orm.relationship(\"LoadBalancer\", uselist\u003dFalse,"},{"line_number":361,"context_line":"                                     backref\u003dorm.backref(\"vip\", uselist\u003dFalse,"},{"line_number":362,"context_line":"                                                         cascade\u003d\"delete\"))"},{"line_number":363,"context_line":"    qos_policy_id \u003d sa.Column(sa.String(36), nullable\u003dTrue)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class Listener(base_models.BASE, base_models.IdMixin,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f013ff3_8ebbd4c2","line":363,"range":{"start_line":363,"start_character":54,"end_line":363,"end_character":58},"updated":"2017-05-17 04:21:59.000000000","message":"Default should be none here","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":360,"context_line":"    load_balancer \u003d orm.relationship(\"LoadBalancer\", uselist\u003dFalse,"},{"line_number":361,"context_line":"                                     backref\u003dorm.backref(\"vip\", uselist\u003dFalse,"},{"line_number":362,"context_line":"                                                         cascade\u003d\"delete\"))"},{"line_number":363,"context_line":"    qos_policy_id \u003d sa.Column(sa.String(36), nullable\u003dTrue)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class Listener(base_models.BASE, base_models.IdMixin,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_36569c2b","line":363,"range":{"start_line":363,"start_character":54,"end_line":363,"end_character":58},"in_reply_to":"1f013ff3_8ebbd4c2","updated":"2017-05-18 07:27:19.000000000","message":"OK","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"}],"octavia/network/base.py":[{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"1db341eb12d9feb4fc17bfbf51d352232206f8d5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class Qos_policyNotFound(NetworkException):"},{"line_number":83,"context_line":"    pass"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_87c6fd47","line":82,"range":{"start_line":82,"start_character":6,"end_line":82,"end_character":24},"updated":"2017-11-14 23:33:36.000000000","message":"typo? QosPolicyNotFound","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"5d3036580263c0e92d3ccd631c1df6d53a35e287","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class Qos_policyNotFound(NetworkException):"},{"line_number":83,"context_line":"    pass"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_242ce200","line":82,"range":{"start_line":82,"start_character":6,"end_line":82,"end_character":24},"in_reply_to":"1f485f77_87c6fd47","updated":"2017-11-15 01:51:01.000000000","message":"Thanks for point out. Will update.","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"5592f2398e590785ae4e139b529df0a7d59351ca","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class Qos_policyNotFound(NetworkException):"},{"line_number":83,"context_line":"    pass"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"1f485f77_f132d4f1","line":82,"range":{"start_line":82,"start_character":0,"end_line":82,"end_character":24},"updated":"2017-11-16 13:36:11.000000000","message":"Does not comply with class naming convention.\nSuggestion: try to replace resource_type.capitalize() with \"\".join([w.capitalize() for w in resource_type.split(\u0027_\u0027)]) in Neutron\u0027s base.py","commit_id":"64d904b21ce51a26b7fc3c1e037d364db9d5aaf1"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"b74dd54237b47885ddbf4869b7ae66f280fc9dcd","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class Qos_policyNotFound(NetworkException):"},{"line_number":83,"context_line":"    pass"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"1f485f77_cb8b921c","line":82,"range":{"start_line":82,"start_character":0,"end_line":82,"end_character":24},"in_reply_to":"1f485f77_f132d4f1","updated":"2017-11-17 06:23:07.000000000","message":"Thanks for review and kind suggest. It works. :)","commit_id":"64d904b21ce51a26b7fc3c1e037d364db9d5aaf1"}],"octavia/network/drivers/neutron/base.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"972edbe46e8bf5a285c0291fcd1073a4758eae74","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        }"},{"line_number":132,"context_line":"        self.neutron_client.create_security_group_rule(rule)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def apply_qos_on_port(self, qos_id, port_id):"},{"line_number":135,"context_line":"        body \u003d {"},{"line_number":136,"context_line":"            \u0027port\u0027:"},{"line_number":137,"context_line":"                {\u0027qos_policy\u0027: qos_id}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_a0a2f949","line":134,"updated":"2017-05-09 19:19:58.000000000","message":"Missing unit test","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        }"},{"line_number":132,"context_line":"        self.neutron_client.create_security_group_rule(rule)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def apply_qos_on_port(self, qos_id, port_id):"},{"line_number":135,"context_line":"        body \u003d {"},{"line_number":136,"context_line":"            \u0027port\u0027:"},{"line_number":137,"context_line":"                {\u0027qos_policy\u0027: qos_id}"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_f6502435","line":134,"in_reply_to":"3f044301_a0a2f949","updated":"2017-05-18 07:27:19.000000000","message":"Thanks, add soon. Sorry for late return..","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"972edbe46e8bf5a285c0291fcd1073a4758eae74","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        }"},{"line_number":139,"context_line":"        self.neutron_client.update_port(port_id, body)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def undo_qos_on_port(self, qos_id, port_id):"},{"line_number":142,"context_line":"        body \u003d {"},{"line_number":143,"context_line":"            \u0027port\u0027:"},{"line_number":144,"context_line":"                {\u0027qos_policy\u0027: None}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_80893dcb","line":141,"range":{"start_line":141,"start_character":8,"end_line":141,"end_character":23},"updated":"2017-05-09 19:19:58.000000000","message":"Missing unit test","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8e7d2d2235b78a559a49b54b1098d42b2b81d415","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        }"},{"line_number":139,"context_line":"        self.neutron_client.update_port(port_id, body)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def undo_qos_on_port(self, qos_id, port_id):"},{"line_number":142,"context_line":"        body \u003d {"},{"line_number":143,"context_line":"            \u0027port\u0027:"},{"line_number":144,"context_line":"                {\u0027qos_policy\u0027: None}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_409fb55e","line":141,"range":{"start_line":141,"start_character":31,"end_line":141,"end_character":37},"updated":"2017-05-09 18:59:41.000000000","message":"This is unused, remove","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        }"},{"line_number":139,"context_line":"        self.neutron_client.update_port(port_id, body)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def undo_qos_on_port(self, qos_id, port_id):"},{"line_number":142,"context_line":"        body \u003d {"},{"line_number":143,"context_line":"            \u0027port\u0027:"},{"line_number":144,"context_line":"                {\u0027qos_policy\u0027: None}"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_d6452072","line":141,"range":{"start_line":141,"start_character":31,"end_line":141,"end_character":37},"in_reply_to":"3f044301_409fb55e","updated":"2017-05-18 07:27:19.000000000","message":"Done","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        }"},{"line_number":139,"context_line":"        self.neutron_client.update_port(port_id, body)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def undo_qos_on_port(self, qos_id, port_id):"},{"line_number":142,"context_line":"        body \u003d {"},{"line_number":143,"context_line":"            \u0027port\u0027:"},{"line_number":144,"context_line":"                {\u0027qos_policy\u0027: None}"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_765c144b","line":141,"range":{"start_line":141,"start_character":8,"end_line":141,"end_character":23},"in_reply_to":"3f044301_80893dcb","updated":"2017-05-18 07:27:19.000000000","message":"Thanks, add soon. Sorry for late return..","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"972edbe46e8bf5a285c0291fcd1073a4758eae74","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                                             network_id\u003dnetwork_id,"},{"line_number":221,"context_line":"                                             device_id\u003ddevice_id)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def get_qos_policy(self, qos_policy_id):"},{"line_number":224,"context_line":"        return self._get_resource(\u0027qos_policy\u0027, qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_00bf6d61","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":22},"updated":"2017-05-09 19:19:58.000000000","message":"Missing unit test","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                                             network_id\u003dnetwork_id,"},{"line_number":221,"context_line":"                                             device_id\u003ddevice_id)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def get_qos_policy(self, qos_policy_id):"},{"line_number":224,"context_line":"        return self._get_resource(\u0027qos_policy\u0027, qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_56591058","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":22},"in_reply_to":"3f044301_00bf6d61","updated":"2017-05-18 07:27:19.000000000","message":"Thanks, add soon. Sorry for late return..","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"18f97f547c3555b0bdbb4084abba0801a706385c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def apply_qos_on_port(self, qos_id, port_id):"},{"line_number":137,"context_line":"        body \u003d {"},{"line_number":138,"context_line":"            \u0027port\u0027:"},{"line_number":139,"context_line":"                {\u0027qos_policy\u0027: qos_id}"},{"line_number":140,"context_line":"        }"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            self.neutron_client.update_port(port_id, body)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff346bd7_7de4a03c","line":139,"range":{"start_line":139,"start_character":18,"end_line":139,"end_character":28},"updated":"2017-07-26 18:09:35.000000000","message":"qos_policy_id","commit_id":"3cd839c95ba588379d5a71436bc32ac77e17f8d8"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"18f97f547c3555b0bdbb4084abba0801a706385c","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    def undo_qos_on_port(self, port_id):"},{"line_number":149,"context_line":"        body \u003d {"},{"line_number":150,"context_line":"            \u0027port\u0027:"},{"line_number":151,"context_line":"                {\u0027qos_policy\u0027: None}"},{"line_number":152,"context_line":"        }"},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            self.neutron_client.update_port(port_id, body)"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff346bd7_fdc9b0ab","line":151,"range":{"start_line":151,"start_character":18,"end_line":151,"end_character":28},"updated":"2017-07-26 18:09:35.000000000","message":"qos_policy_id","commit_id":"3cd839c95ba588379d5a71436bc32ac77e17f8d8"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"13c2d0432d8a7aebf20ee101ec69f560f80caa41","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        except Exception as e:"},{"line_number":147,"context_line":"            raise base.NetworkException(str(e))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def undo_qos_on_port(self, port_id):"},{"line_number":150,"context_line":"        body \u003d {"},{"line_number":151,"context_line":"            \u0027port\u0027:"},{"line_number":152,"context_line":"                {\u0027qos_policy_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":36,"id":"5f2577a7_598296ca","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":24},"updated":"2017-09-08 23:30:00.000000000","message":"nit: Really this is \"remove\" more than undo.  Undo implies putting it back to a previous setting, which might have been a different QoS policy ID.","commit_id":"5dfbb0b73fed40e69e1bbd2348ba34a32a518d3e"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"077377c1ac696b2f937b19025e62b51eab9cff2b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        except Exception as e:"},{"line_number":147,"context_line":"            raise base.NetworkException(str(e))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def undo_qos_on_port(self, port_id):"},{"line_number":150,"context_line":"        body \u003d {"},{"line_number":151,"context_line":"            \u0027port\u0027:"},{"line_number":152,"context_line":"                {\u0027qos_policy_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":36,"id":"5f2577a7_d6a6b6ab","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":24},"in_reply_to":"5f2577a7_598296ca","updated":"2017-10-19 12:20:59.000000000","message":"Thanks, michael. It will be done as your suggestion","commit_id":"5dfbb0b73fed40e69e1bbd2348ba34a32a518d3e"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"1db341eb12d9feb4fc17bfbf51d352232206f8d5","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        except Exception as e:"},{"line_number":148,"context_line":"            raise base.NetworkException(str(e))"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def undo_qos_on_port(self, port_id):"},{"line_number":151,"context_line":"        body \u003d {"},{"line_number":152,"context_line":"            \u0027port\u0027:"},{"line_number":153,"context_line":"                {\u0027qos_policy_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_2793c951","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":24},"updated":"2017-11-14 23:33:36.000000000","message":"why revert from \u0027remove_qos_on_port\u0027?","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"5d3036580263c0e92d3ccd631c1df6d53a35e287","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        except Exception as e:"},{"line_number":148,"context_line":"            raise base.NetworkException(str(e))"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def undo_qos_on_port(self, port_id):"},{"line_number":151,"context_line":"        body \u003d {"},{"line_number":152,"context_line":"            \u0027port\u0027:"},{"line_number":153,"context_line":"                {\u0027qos_policy_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":46,"id":"1f485f77_073568f7","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":24},"in_reply_to":"1f485f77_2793c951","updated":"2017-11-15 01:51:01.000000000","message":"As we dont real remove the qos. So I think apply and undo may be appropriate for these function name. Just a though.","commit_id":"6b7ec0be47fee1d3b34f59175d70694308509e3a"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        except Exception as e:"},{"line_number":148,"context_line":"            raise base.NetworkException(str(e))"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def undo_qos_on_port(self, port_id):"},{"line_number":151,"context_line":"        body \u003d {"},{"line_number":152,"context_line":"            \u0027port\u0027:"},{"line_number":153,"context_line":"                {\u0027qos_policy_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_332b0dec","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":24},"updated":"2017-11-21 20:35:01.000000000","message":"I believe it should not be \u0027undo_qos\u0027, but \u0027remove_qos\u0027.\nundo has a notion of rollback to former state, and this functionality could be used to override whatever the property of the port has been.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bd55f27f560602621bc62ff45aab8860da3b13d3","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        except Exception as e:"},{"line_number":148,"context_line":"            raise base.NetworkException(str(e))"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def undo_qos_on_port(self, port_id):"},{"line_number":151,"context_line":"        body \u003d {"},{"line_number":152,"context_line":"            \u0027port\u0027:"},{"line_number":153,"context_line":"                {\u0027qos_policy_id\u0027: None}"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_f65a4128","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":24},"in_reply_to":"ff82abbf_332b0dec","updated":"2017-11-23 09:15:48.000000000","message":"I will rework here, thanks.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                resource_type\u003dresource_type, filters\u003dfilters)"},{"line_number":205,"context_line":"            LOG.exception(message)"},{"line_number":206,"context_line":"            raise getattr(base, \u0027%sNotFound\u0027 %"},{"line_number":207,"context_line":"                          resource_type.capitalize())(message)"},{"line_number":208,"context_line":"        except Exception:"},{"line_number":209,"context_line":"            message \u003d _(\u0027Error retrieving {resource_type} \u0027"},{"line_number":210,"context_line":"                        \u0027({resource_type} Filters: {filters}.\u0027).format("}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_9347794c","line":207,"range":{"start_line":207,"start_character":26,"end_line":207,"end_character":52},"updated":"2017-11-21 20:35:01.000000000","message":"please insert L184 fix here too.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"d76e97e05510084d4aabaaded18ce67dc4a5ae43","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        try:"},{"line_number":144,"context_line":"            self.neutron_client.update_port(port_id, body)"},{"line_number":145,"context_line":"        except neutron_client_exceptions.PortNotFoundClient as e:"},{"line_number":146,"context_line":"            raise base.PortNotFound(e.message)"},{"line_number":147,"context_line":"        except Exception as e:"},{"line_number":148,"context_line":"            raise base.NetworkException(str(e))"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_51393bef","line":146,"range":{"start_line":146,"start_character":36,"end_line":146,"end_character":45},"updated":"2017-12-12 01:25:03.000000000","message":"You shouldn\u0027t rely on the exception to have a message field.\nThis member is deprecated from Exception.\nIf, for some reason, you prefer message over str(e), I\u0027d suggest: getattr(e, \u0027message\u0027, str(e))","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d1af6bf3494f43a53c7a8ecad6f14dee88a96369","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        try:"},{"line_number":144,"context_line":"            self.neutron_client.update_port(port_id, body)"},{"line_number":145,"context_line":"        except neutron_client_exceptions.PortNotFoundClient as e:"},{"line_number":146,"context_line":"            raise base.PortNotFound(e.message)"},{"line_number":147,"context_line":"        except Exception as e:"},{"line_number":148,"context_line":"            raise base.NetworkException(str(e))"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"df87a7cf_c7758933","line":146,"range":{"start_line":146,"start_character":36,"end_line":146,"end_character":45},"in_reply_to":"df87a7cf_51393bef","updated":"2017-12-12 02:15:43.000000000","message":"OK, thanks. I will update if possible. But please see L113, I just follow the type with it. :)","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"}],"octavia/network/drivers/noop_driver/driver.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"972edbe46e8bf5a285c0291fcd1073a4758eae74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"3f044301_20a82975","updated":"2017-05-09 19:19:58.000000000","message":"This file is missing apply_qos_on_port() and undo_qos_on_port()","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"ff0f0b1f_5680f08b","in_reply_to":"3f044301_20a82975","updated":"2017-05-18 07:27:19.000000000","message":"Thanks, add soon. Sorry for late return..","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"972edbe46e8bf5a285c0291fcd1073a4758eae74","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        LOG.debug(\"failover %s no-op, wait_for_port_detach, amphora id %s\","},{"line_number":171,"context_line":"                  self.__class__.__name__, amphora.id)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def get_qos_policy(self, qos_policy_id):"},{"line_number":174,"context_line":"        LOG.debug(\"Qos Policy %s no-op, get_qos_policy qos_policy_id %s\","},{"line_number":175,"context_line":"                  self.__class__.__name__, qos_policy_id)"},{"line_number":176,"context_line":"        self.networkconfigconfig[qos_policy_id] \u003d (qos_policy_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_40ac5533","line":173,"range":{"start_line":173,"start_character":8,"end_line":173,"end_character":22},"updated":"2017-05-09 19:19:58.000000000","message":"Missing unit test","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        LOG.debug(\"failover %s no-op, wait_for_port_detach, amphora id %s\","},{"line_number":171,"context_line":"                  self.__class__.__name__, amphora.id)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def get_qos_policy(self, qos_policy_id):"},{"line_number":174,"context_line":"        LOG.debug(\"Qos Policy %s no-op, get_qos_policy qos_policy_id %s\","},{"line_number":175,"context_line":"                  self.__class__.__name__, qos_policy_id)"},{"line_number":176,"context_line":"        self.networkconfigconfig[qos_policy_id] \u003d (qos_policy_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff0f0b1f_367d7cb1","line":173,"range":{"start_line":173,"start_character":8,"end_line":173,"end_character":22},"in_reply_to":"3f044301_40ac5533","updated":"2017-05-18 07:27:19.000000000","message":"Thanks, add soon. Sorry for late return..","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"}],"octavia/tests/functional/api/v2/test_load_balancer.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"972edbe46e8bf5a285c0291fcd1073a4758eae74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"3f044301_60519162","updated":"2017-05-09 19:19:58.000000000","message":"Missing a functional test for update with qos_policy_id","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"369b424bfe7dc889af0a8ba307f3636bd0548bec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"ff0f0b1f_7673f4e8","in_reply_to":"3f044301_60519162","updated":"2017-05-18 07:27:19.000000000","message":"Thanks, add soon. Sorry for late return..","commit_id":"265ea527209e08b1549220621228f7bce0f66dc4"},{"author":{"_account_id":27303,"name":"Bar Elharar","email":"elhararb@gmail.com","username":"elhararb"},"change_message_id":"d41285fe86b875d209357829c055aa77a0179302","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        self.assertEqual(subnet.id, api_lb.get(\u0027vip_subnet_id\u0027))"},{"line_number":483,"context_line":"        self.assertEqual(qos_policy_id, api_lb.get(\u0027vip_qos_policy_id\u0027))"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        # Test with vip_port_id which applied qos_policy"},{"line_number":486,"context_line":"        port_qos_policy_id \u003d uuidutils.generate_uuid()"},{"line_number":487,"context_line":"        ip_address \u003d \u0027192.168.50.50\u0027"},{"line_number":488,"context_line":"        network \u003d network_models.Network(id\u003duuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_123b6aeb","line":485,"range":{"start_line":485,"start_character":8,"end_line":485,"end_character":56},"updated":"2017-11-21 20:35:01.000000000","message":"1. This new port test should reside in another function.\n2. Would you mind adding the following tests:\n(1) Override port QoS configuration with:\ne.g.\nport create --qos \u0027old_qos_policy\u0027\nloadbalancer create --qos \u0027new_qos_policy\u0027\n# loadbalancer is created with \u0027new_qos_policy\u0027\n\n(2) loadbalancer updates its QoS policy from policy a to b","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"bd55f27f560602621bc62ff45aab8860da3b13d3","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        self.assertEqual(subnet.id, api_lb.get(\u0027vip_subnet_id\u0027))"},{"line_number":483,"context_line":"        self.assertEqual(qos_policy_id, api_lb.get(\u0027vip_qos_policy_id\u0027))"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        # Test with vip_port_id which applied qos_policy"},{"line_number":486,"context_line":"        port_qos_policy_id \u003d uuidutils.generate_uuid()"},{"line_number":487,"context_line":"        ip_address \u003d \u0027192.168.50.50\u0027"},{"line_number":488,"context_line":"        network \u003d network_models.Network(id\u003duuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":52,"id":"ff82abbf_564bed57","line":485,"range":{"start_line":485,"start_character":8,"end_line":485,"end_character":56},"in_reply_to":"ff82abbf_123b6aeb","updated":"2017-11-23 09:15:48.000000000","message":"OK, I will update it. Thanks.","commit_id":"c6b2f8c69ce4017d465ed0e79594bbf52f31c4f3"}],"octavia/tests/unit/controller/worker/tasks/test_network_tasks.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"366da7bb77a926538e06db68adc44ab09f621184","unresolved":false,"context_lines":[{"line_number":32,"context_line":"SUBNET_ID \u003d uuidutils.generate_uuid()"},{"line_number":33,"context_line":"NETWORK_ID \u003d uuidutils.generate_uuid()"},{"line_number":34,"context_line":"QOS_POLICY_ID \u003d uuidutils.generate_uuid()"},{"line_number":35,"context_line":"QOS_POLICY_ID2 \u003d uuidutils.generate_uuid()"},{"line_number":36,"context_line":"IP_ADDRESS \u003d \"172.24.41.1\""},{"line_number":37,"context_line":"VRRP_IP_ADDRESS1 \u003d \"172.24.41.10\""},{"line_number":38,"context_line":"VRRP_IP_ADDRESS2 \u003d \"172.24.41.11\""}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_d5f4e089","line":35,"updated":"2017-12-15 23:18:48.000000000","message":"Wow, I feel like we should be using test_constants for all of this? Right? Since we bothered to define basically all of this there... But, that be cleaned up later I guess?\nI know it doesn\u0027t include Model objects like below, but at least all of these constants could just be pulled from there.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f22832c69ef4e75dd2d57ca9a91d7238fcfd15f1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"SUBNET_ID \u003d uuidutils.generate_uuid()"},{"line_number":33,"context_line":"NETWORK_ID \u003d uuidutils.generate_uuid()"},{"line_number":34,"context_line":"QOS_POLICY_ID \u003d uuidutils.generate_uuid()"},{"line_number":35,"context_line":"QOS_POLICY_ID2 \u003d uuidutils.generate_uuid()"},{"line_number":36,"context_line":"IP_ADDRESS \u003d \"172.24.41.1\""},{"line_number":37,"context_line":"VRRP_IP_ADDRESS1 \u003d \"172.24.41.10\""},{"line_number":38,"context_line":"VRRP_IP_ADDRESS2 \u003d \"172.24.41.11\""}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_118f9ccd","line":35,"in_reply_to":"df87a7cf_d5f4e089","updated":"2017-12-18 06:57:02.000000000","message":"I just want to split the cases into one place. Ok, I will rework this constants part.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"}],"octavia/tests/unit/network/drivers/neutron/test_base.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54e41f6f29616d7e75eb76cb78f3e3e7a7137937","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                          t_constants.MOCK_NEUTRON_QOS_POLICY_ID)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def test_undo_qos_on_port(self):"},{"line_number":308,"context_line":"        self.test_apply_qos_on_port()"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff346bd7_7174399a","line":308,"updated":"2017-07-24 04:15:55.000000000","message":"This is not a test.  Please add test conditions.","commit_id":"3cd839c95ba588379d5a71436bc32ac77e17f8d8"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"0350cdc71c6b0445415e3f58e6c5d20fb7b3c05c","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                          t_constants.MOCK_NEUTRON_QOS_POLICY_ID)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def test_undo_qos_on_port(self):"},{"line_number":308,"context_line":"        self.test_apply_qos_on_port()"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff346bd7_bbd5b045","line":308,"in_reply_to":"ff346bd7_7174399a","updated":"2017-07-25 09:32:12.000000000","message":"Sorry about this ut. I miss to modify it.","commit_id":"3cd839c95ba588379d5a71436bc32ac77e17f8d8"}],"octavia/tests/unit/network/drivers/test_network_noop_driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"366da7bb77a926538e06db68adc44ab09f621184","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.subnet_id \u003d self.FAKE_UUID_3"},{"line_number":48,"context_line":"        self.subnet_name \u003d \u0027subnet1\u0027"},{"line_number":49,"context_line":"        self.qos_policy_id \u003d self.FAKE_UUID_4"},{"line_number":50,"context_line":"        self.vrrp_port_id \u003d self.FAKE_UUID_3"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_allocate_vip(self):"},{"line_number":53,"context_line":"        self.driver.allocate_vip(self.load_balancer)"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_352bcceb","line":50,"updated":"2017-12-15 23:18:48.000000000","message":"Didn\u0027t want to make new UUIDs for these? :/","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f22832c69ef4e75dd2d57ca9a91d7238fcfd15f1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.subnet_id \u003d self.FAKE_UUID_3"},{"line_number":48,"context_line":"        self.subnet_name \u003d \u0027subnet1\u0027"},{"line_number":49,"context_line":"        self.qos_policy_id \u003d self.FAKE_UUID_4"},{"line_number":50,"context_line":"        self.vrrp_port_id \u003d self.FAKE_UUID_3"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def test_allocate_vip(self):"},{"line_number":53,"context_line":"        self.driver.allocate_vip(self.load_balancer)"}],"source_content_type":"text/x-python","patch_set":64,"id":"df87a7cf_91e64cb0","line":50,"in_reply_to":"df87a7cf_352bcceb","updated":"2017-12-18 06:57:02.000000000","message":"I think the existing UUIDs string are enough, as I just test the input and the function are OK, so not focus on the different UUIDs. Should we make new for these?．hmmmm, if we need, I will add for the next patch.","commit_id":"477a02256d6915fdefdcf3c9108db8eab131f608"}],"releasenotes/notes/extend_api_to_accept_qos_policy_id-128ab592a735f3b8.yaml":[{"author":{"_account_id":2245,"name":"Jacky Hu","email":"hudayou@hotmail.com","username":"hudayou"},"change_message_id":"8ecf57f6b72c4e596b567d8ca5750a2c68e7db2b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Now Octavia API can accept the QoS Policy id from neutron to support the"},{"line_number":4,"context_line":"    QoS requirements towards Load Blancer VIP port when create/update load"},{"line_number":5,"context_line":"    balancer."}],"source_content_type":"text/x-yaml","patch_set":58,"id":"df87a7cf_eca685c1","line":4,"updated":"2017-12-11 13:45:19.000000000","message":"Blancer -\u003e Balancer","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"d1af6bf3494f43a53c7a8ecad6f14dee88a96369","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Now Octavia API can accept the QoS Policy id from neutron to support the"},{"line_number":4,"context_line":"    QoS requirements towards Load Blancer VIP port when create/update load"},{"line_number":5,"context_line":"    balancer."}],"source_content_type":"text/x-yaml","patch_set":58,"id":"df87a7cf_8791c149","line":4,"in_reply_to":"df87a7cf_eca685c1","updated":"2017-12-12 02:15:43.000000000","message":"good catch. :)","commit_id":"c970be2aecd6fc3ef6ac712b9e9a9637515e23fb"}]}
