)]}'
{"neutron/db/external_net_db.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"8d992a6653c0baac48e1ae2ec2abf664ae80c421","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":"        # If the network still have rbac policies, we should not"},{"line_number":178,"context_line":"        # update external attribute."},{"line_number":179,"context_line":"        if net_obj.NetworkRBAC.get_objects("},{"line_number":180,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":181,"context_line":"                action\u003d\u0027access_as_external\u0027):"},{"line_number":182,"context_line":"            return"},{"line_number":183,"context_line":"        net \u003d self.get_network(context, policy[\u0027object_id\u0027])"},{"line_number":184,"context_line":"        self._process_l3_update(context, net,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_22ff3236","line":181,"range":{"start_line":179,"start_character":11,"end_line":181,"end_character":44},"updated":"2018-10-08 18:42:34.000000000","message":"to keep the behavior exactly same may be making it\n\nlen(net_obj.NetworkRBAC.get_objects(\n          context, object_id\u003dpolicy[\u0027object_id\u0027],\n          action\u003d\u0027access_as_external\u0027) \u003e 0:\n\nor \n\nthere\u0027s objects count api which return number of objects based on matching filters.","commit_id":"880b34ebbf8863d4efc1b5c43d5e5d3d4972cb69"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dae377d8958903abfc5f6adfd89c5bf1684cb882","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":"        # If the network still have rbac policies, we should not"},{"line_number":178,"context_line":"        # update external attribute."},{"line_number":179,"context_line":"        if net_obj.NetworkRBAC.get_objects("},{"line_number":180,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":181,"context_line":"                action\u003d\u0027access_as_external\u0027):"},{"line_number":182,"context_line":"            return"},{"line_number":183,"context_line":"        net \u003d self.get_network(context, policy[\u0027object_id\u0027])"},{"line_number":184,"context_line":"        self._process_l3_update(context, net,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_e82cb04a","line":181,"range":{"start_line":179,"start_character":11,"end_line":181,"end_character":44},"in_reply_to":"3f79a3b5_22ff3236","updated":"2018-10-09 08:38:54.000000000","message":"get_objects() returns a list. If the list is empty, the branch won\u0027t be executed. This logic is correct.","commit_id":"880b34ebbf8863d4efc1b5c43d5e5d3d4972cb69"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"4ba5b527e53329863cc85437e64746eff79f0054","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":"        # If the network still have rbac policies, we should not"},{"line_number":178,"context_line":"        # update external attribute."},{"line_number":179,"context_line":"        if net_obj.NetworkRBAC.get_objects("},{"line_number":180,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":181,"context_line":"                action\u003d\u0027access_as_external\u0027):"},{"line_number":182,"context_line":"            return"},{"line_number":183,"context_line":"        net \u003d self.get_network(context, policy[\u0027object_id\u0027])"},{"line_number":184,"context_line":"        self._process_l3_update(context, net,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_9ad1b031","line":181,"range":{"start_line":179,"start_character":11,"end_line":181,"end_character":44},"in_reply_to":"3f79a3b5_e82cb04a","updated":"2018-10-09 19:55:00.000000000","message":"logically it looks correct, so im Ok with it.","commit_id":"880b34ebbf8863d4efc1b5c43d5e5d3d4972cb69"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"8d992a6653c0baac48e1ae2ec2abf664ae80c421","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            }"},{"line_number":210,"context_line":"            # if there is a wildcard entry we can safely proceed without the"},{"line_number":211,"context_line":"            # router lookup because they will have access either way"},{"line_number":212,"context_line":"            if net_obj.NetworkRBAC.get_object("},{"line_number":213,"context_line":"                    context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":214,"context_line":"                    action\u003d\u0027access_as_external\u0027, target_tenant\u003d\u0027*\u0027):"},{"line_number":215,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6268caf3","line":212,"range":{"start_line":212,"start_character":35,"end_line":212,"end_character":45},"updated":"2018-10-08 18:42:34.000000000","message":"this is used when primary key is in filter and exactly one row in result is expected, but here I see count was used, so to keep behavior exactly same use count from object\u0027s api ?","commit_id":"880b34ebbf8863d4efc1b5c43d5e5d3d4972cb69"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dae377d8958903abfc5f6adfd89c5bf1684cb882","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            }"},{"line_number":210,"context_line":"            # if there is a wildcard entry we can safely proceed without the"},{"line_number":211,"context_line":"            # router lookup because they will have access either way"},{"line_number":212,"context_line":"            if net_obj.NetworkRBAC.get_object("},{"line_number":213,"context_line":"                    context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":214,"context_line":"                    action\u003d\u0027access_as_external\u0027, target_tenant\u003d\u0027*\u0027):"},{"line_number":215,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_48d604c7","line":212,"range":{"start_line":212,"start_character":35,"end_line":212,"end_character":45},"in_reply_to":"3f79a3b5_6268caf3","updated":"2018-10-09 08:38:54.000000000","message":"NetworkRBAC has the following indexes:\n- id\n- tenant_target \u0026 object_id \u0026 action\n\nget_object() will return an object if matches the indexes or None.\n\nThis logic is correct.","commit_id":"880b34ebbf8863d4efc1b5c43d5e5d3d4972cb69"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"8d992a6653c0baac48e1ae2ec2abf664ae80c421","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                raise rbac_ext.RbacPolicyInUse(object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":226,"context_line":"                                               details\u003dmsg)"},{"line_number":227,"context_line":"            rbac_objs \u003d net_obj.NetworkRBAC.get_objects("},{"line_number":228,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":229,"context_line":"                action\u003d\u0027access_as_external\u0027)"},{"line_number":230,"context_line":"            projects_with_entries \u003d [rbac.target_tenant for rbac in rbac_objs]"},{"line_number":231,"context_line":"            if new_project:"},{"line_number":232,"context_line":"                projects_with_entries.append(new_project)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_225bb255","line":229,"range":{"start_line":228,"start_character":25,"end_line":229,"end_character":43},"updated":"2018-10-08 18:42:34.000000000","message":"why filter target_tenant !\u003d * is dropped ?","commit_id":"880b34ebbf8863d4efc1b5c43d5e5d3d4972cb69"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dae377d8958903abfc5f6adfd89c5bf1684cb882","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                raise rbac_ext.RbacPolicyInUse(object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":226,"context_line":"                                               details\u003dmsg)"},{"line_number":227,"context_line":"            rbac_objs \u003d net_obj.NetworkRBAC.get_objects("},{"line_number":228,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":229,"context_line":"                action\u003d\u0027access_as_external\u0027)"},{"line_number":230,"context_line":"            projects_with_entries \u003d [rbac.target_tenant for rbac in rbac_objs]"},{"line_number":231,"context_line":"            if new_project:"},{"line_number":232,"context_line":"                projects_with_entries.append(new_project)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_48ffe434","line":229,"range":{"start_line":228,"start_character":25,"end_line":229,"end_character":43},"in_reply_to":"3f79a3b5_225bb255","updated":"2018-10-09 08:38:54.000000000","message":"Yes, I missed this part. This should go to the following list comprehension. Thanks!","commit_id":"880b34ebbf8863d4efc1b5c43d5e5d3d4972cb69"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"5962c9e780da22b9ef0a4f7a057b74d15ddd6d8b","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            return"},{"line_number":174,"context_line":"        # If the network still have rbac policies, we should not"},{"line_number":175,"context_line":"        # update external attribute."},{"line_number":176,"context_line":"        if context.session.query(rbac_db.NetworkRBAC.object_id).filter("},{"line_number":177,"context_line":"            rbac_db.NetworkRBAC.object_id \u003d\u003d policy[\u0027object_id\u0027],"},{"line_number":178,"context_line":"            rbac_db.NetworkRBAC.action \u003d\u003d \u0027access_as_external\u0027).count():"},{"line_number":179,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_5289a3c4","side":"PARENT","line":176,"range":{"start_line":176,"start_character":53,"end_line":176,"end_character":62},"updated":"2018-10-10 18:23:27.000000000","message":"This is an optimization by https://review.openstack.org/#/c/592361/ . Is it possible to keep such optimization even if everything is converted to OVO?","commit_id":"119fab8403f6bba2eae9b4c496b82281bb8fd380"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"45e2ed66c7dfb5919d24facc27eca3da618aa821","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            return"},{"line_number":174,"context_line":"        # If the network still have rbac policies, we should not"},{"line_number":175,"context_line":"        # update external attribute."},{"line_number":176,"context_line":"        if context.session.query(rbac_db.NetworkRBAC.object_id).filter("},{"line_number":177,"context_line":"            rbac_db.NetworkRBAC.object_id \u003d\u003d policy[\u0027object_id\u0027],"},{"line_number":178,"context_line":"            rbac_db.NetworkRBAC.action \u003d\u003d \u0027access_as_external\u0027).count():"},{"line_number":179,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_f0ba156f","side":"PARENT","line":176,"range":{"start_line":176,"start_character":53,"end_line":176,"end_character":62},"in_reply_to":"3f79a3b5_5289a3c4","updated":"2018-10-11 13:35:17.000000000","message":"As you suggested, I\u0027m going to use \"count()\". Thanks!","commit_id":"119fab8403f6bba2eae9b4c496b82281bb8fd380"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"5962c9e780da22b9ef0a4f7a057b74d15ddd6d8b","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            }"},{"line_number":208,"context_line":"            # if there is a wildcard entry we can safely proceed without the"},{"line_number":209,"context_line":"            # router lookup because they will have access either way"},{"line_number":210,"context_line":"            if context.session.query(rbac_db.NetworkRBAC.object_id).filter("},{"line_number":211,"context_line":"                    rbac.object_id \u003d\u003d policy[\u0027object_id\u0027],"},{"line_number":212,"context_line":"                    rbac.action \u003d\u003d \u0027access_as_external\u0027,"},{"line_number":213,"context_line":"                    rbac.target_tenant \u003d\u003d \u0027*\u0027).count():"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d2b6138a","side":"PARENT","line":210,"range":{"start_line":210,"start_character":57,"end_line":210,"end_character":66},"updated":"2018-10-10 18:23:27.000000000","message":"Ditto. We don\u0027t want to revert this optimization done by: https://review.openstack.org/#/c/592361/","commit_id":"119fab8403f6bba2eae9b4c496b82281bb8fd380"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"45e2ed66c7dfb5919d24facc27eca3da618aa821","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            }"},{"line_number":208,"context_line":"            # if there is a wildcard entry we can safely proceed without the"},{"line_number":209,"context_line":"            # router lookup because they will have access either way"},{"line_number":210,"context_line":"            if context.session.query(rbac_db.NetworkRBAC.object_id).filter("},{"line_number":211,"context_line":"                    rbac.object_id \u003d\u003d policy[\u0027object_id\u0027],"},{"line_number":212,"context_line":"                    rbac.action \u003d\u003d \u0027access_as_external\u0027,"},{"line_number":213,"context_line":"                    rbac.target_tenant \u003d\u003d \u0027*\u0027).count():"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_10c0f1df","side":"PARENT","line":210,"range":{"start_line":210,"start_character":57,"end_line":210,"end_character":66},"in_reply_to":"3f79a3b5_d2b6138a","updated":"2018-10-11 13:35:17.000000000","message":"Done","commit_id":"119fab8403f6bba2eae9b4c496b82281bb8fd380"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"4ba5b527e53329863cc85437e64746eff79f0054","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                filter(rbac.object_id \u003d\u003d policy[\u0027object_id\u0027],"},{"line_number":229,"context_line":"                       rbac.action \u003d\u003d \u0027access_as_external\u0027,"},{"line_number":230,"context_line":"                       rbac.target_tenant !\u003d \u0027*\u0027))"},{"line_number":231,"context_line":"            projects_with_entries \u003d [projects_with_entry[0]"},{"line_number":232,"context_line":"                                     for projects_with_entry"},{"line_number":233,"context_line":"                                     in projects_with_entries]"},{"line_number":234,"context_line":"            if new_project:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_3a7f3c18","side":"PARENT","line":231,"range":{"start_line":231,"start_character":37,"end_line":231,"end_character":59},"updated":"2018-10-09 19:55:00.000000000","message":"so was it an assumption that first field was always target_tenant ?","commit_id":"119fab8403f6bba2eae9b4c496b82281bb8fd380"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"33373b72d480cd94606dd35f9f0875b151ebc4d5","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                filter(rbac.object_id \u003d\u003d policy[\u0027object_id\u0027],"},{"line_number":229,"context_line":"                       rbac.action \u003d\u003d \u0027access_as_external\u0027,"},{"line_number":230,"context_line":"                       rbac.target_tenant !\u003d \u0027*\u0027))"},{"line_number":231,"context_line":"            projects_with_entries \u003d [projects_with_entry[0]"},{"line_number":232,"context_line":"                                     for projects_with_entry"},{"line_number":233,"context_line":"                                     in projects_with_entries]"},{"line_number":234,"context_line":"            if new_project:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_db1e40bb","side":"PARENT","line":231,"range":{"start_line":231,"start_character":37,"end_line":231,"end_character":59},"in_reply_to":"3f79a3b5_3a7f3c18","updated":"2018-10-10 08:16:35.000000000","message":"Yes, but this parameter wasn\u0027t retrieved in the best way. Look at L235: new_proyect \u003d kwargs[\u0027policy_update\u0027][\u0027target_tenant\u0027]\n\n\"target_tenant\" if the required parameter.","commit_id":"119fab8403f6bba2eae9b4c496b82281bb8fd380"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"5962c9e780da22b9ef0a4f7a057b74d15ddd6d8b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        if external:"},{"line_number":98,"context_line":"            net_obj.ExternalNetwork("},{"line_number":99,"context_line":"                context, network_id\u003dnet_data[\u0027id\u0027]).create()"},{"line_number":100,"context_line":"            np_rbac_args \u003d {\u0027project_id\u0027: net_data[\u0027tenant_id\u0027],"},{"line_number":101,"context_line":"                            \u0027object_id\u0027: net_data[\u0027id\u0027],"},{"line_number":102,"context_line":"                            \u0027action\u0027: \u0027access_as_external\u0027,"},{"line_number":103,"context_line":"                            \u0027target_tenant\u0027: \u0027*\u0027}"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_f27f8f66","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":24},"updated":"2018-10-10 18:23:27.000000000","message":"Super nit: not sure what is \"np_\" means. I would just rename it to \"rbac_args\" or \"net_rbac_args\"","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"45e2ed66c7dfb5919d24facc27eca3da618aa821","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        if external:"},{"line_number":98,"context_line":"            net_obj.ExternalNetwork("},{"line_number":99,"context_line":"                context, network_id\u003dnet_data[\u0027id\u0027]).create()"},{"line_number":100,"context_line":"            np_rbac_args \u003d {\u0027project_id\u0027: net_data[\u0027tenant_id\u0027],"},{"line_number":101,"context_line":"                            \u0027object_id\u0027: net_data[\u0027id\u0027],"},{"line_number":102,"context_line":"                            \u0027action\u0027: \u0027access_as_external\u0027,"},{"line_number":103,"context_line":"                            \u0027target_tenant\u0027: \u0027*\u0027}"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d043596a","line":100,"range":{"start_line":100,"start_character":12,"end_line":100,"end_character":24},"in_reply_to":"3f79a3b5_f27f8f66","updated":"2018-10-11 13:35:17.000000000","message":"np \u003d network policy, but yes, \"net_rbac_args\" sound better","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dbaa6c24bdd70d121db2c0dd5cbd13fc02121635","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                context, network_id\u003dnet_id)"},{"line_number":137,"context_line":"            for rbac in net_obj.NetworkRBAC.get_objects("},{"line_number":138,"context_line":"                    context, object_id\u003dnet_id, action\u003d\u0027access_as_external\u0027):"},{"line_number":139,"context_line":"                rbac.delete()"},{"line_number":140,"context_line":"            net_data[extnet_apidef.EXTERNAL] \u003d False"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _process_l3_delete(self, context, network_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_d1637f44","line":139,"updated":"2018-10-10 09:38:59.000000000","message":"Maybe You can use delete_objects() method directly:\nhttps://github.com/openstack/neutron/blob/a388701ddfe628e9a5bd16a78422164799b11ef8/neutron/objects/db/api.py#L109","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7394274a5c1571059042c195b7589eda02a8c849","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                context, network_id\u003dnet_id)"},{"line_number":137,"context_line":"            for rbac in net_obj.NetworkRBAC.get_objects("},{"line_number":138,"context_line":"                    context, object_id\u003dnet_id, action\u003d\u0027access_as_external\u0027):"},{"line_number":139,"context_line":"                rbac.delete()"},{"line_number":140,"context_line":"            net_data[extnet_apidef.EXTERNAL] \u003d False"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _process_l3_delete(self, context, network_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_b56a6c7f","line":139,"in_reply_to":"3f79a3b5_d1637f44","updated":"2018-10-10 11:35:58.000000000","message":"Upsss, yes, you are right.","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"5962c9e780da22b9ef0a4f7a057b74d15ddd6d8b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":"        # If the network still have rbac policies, we should not"},{"line_number":178,"context_line":"        # update external attribute."},{"line_number":179,"context_line":"        if net_obj.NetworkRBAC.get_objects("},{"line_number":180,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":181,"context_line":"                action\u003d\u0027access_as_external\u0027):"},{"line_number":182,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_92ef3bf9","line":179,"range":{"start_line":179,"start_character":31,"end_line":179,"end_character":42},"updated":"2018-10-10 18:23:27.000000000","message":"There is a \u0027count\u0027 method in OVO: https://github.com/openstack/neutron/blob/100491cec72ecf694cc8cbd6cd17b66a191a5bd7/neutron/objects/db/api.py#L36 . In theory, \u0027count\u0027 should perform better than \u0027get_objects\u0027 because it returns a number instead of a collection of db records.","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"45e2ed66c7dfb5919d24facc27eca3da618aa821","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            return"},{"line_number":177,"context_line":"        # If the network still have rbac policies, we should not"},{"line_number":178,"context_line":"        # update external attribute."},{"line_number":179,"context_line":"        if net_obj.NetworkRBAC.get_objects("},{"line_number":180,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":181,"context_line":"                action\u003d\u0027access_as_external\u0027):"},{"line_number":182,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_50f3c96d","line":179,"range":{"start_line":179,"start_character":31,"end_line":179,"end_character":42},"in_reply_to":"3f79a3b5_92ef3bf9","updated":"2018-10-11 13:35:17.000000000","message":"For sure, that will be faster","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"898aadc1efb1111d1d1a18c713714f18c31a455a","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                raise rbac_ext.RbacPolicyInUse(object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":225,"context_line":"                                               details\u003dmsg)"},{"line_number":226,"context_line":"            projects_with_entries \u003d ("},{"line_number":227,"context_line":"                context.session.query(rbac.target_tenant)."},{"line_number":228,"context_line":"                filter(rbac.object_id \u003d\u003d policy[\u0027object_id\u0027],"},{"line_number":229,"context_line":"                       rbac.action \u003d\u003d \u0027access_as_external\u0027,"},{"line_number":230,"context_line":"                       rbac.target_tenant !\u003d \u0027*\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_ababcb1b","side":"PARENT","line":227,"range":{"start_line":227,"start_character":43,"end_line":227,"end_character":56},"updated":"2018-10-11 18:01:57.000000000","message":"This is not exactly the same before and after the change. In before, it loads a specific column and in after, it loads a full ORM entities. It might matter from performance\u0027s point of view.\n\nI think there are ways to address this. For example, we could introduce a dedicated method in OVO to take the an object_id as input and return projects_with_entries as output.","commit_id":"111e9b20d6838396492d691c781de277a836cb98"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4ef6db28f4f42bba3f6fdb4f425c9f0ad3f6386e","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                raise rbac_ext.RbacPolicyInUse(object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":225,"context_line":"                                               details\u003dmsg)"},{"line_number":226,"context_line":"            projects_with_entries \u003d ("},{"line_number":227,"context_line":"                context.session.query(rbac.target_tenant)."},{"line_number":228,"context_line":"                filter(rbac.object_id \u003d\u003d policy[\u0027object_id\u0027],"},{"line_number":229,"context_line":"                       rbac.action \u003d\u003d \u0027access_as_external\u0027,"},{"line_number":230,"context_line":"                       rbac.target_tenant !\u003d \u0027*\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_f28d2135","side":"PARENT","line":227,"range":{"start_line":227,"start_character":43,"end_line":227,"end_character":56},"in_reply_to":"3f79a3b5_ababcb1b","updated":"2018-10-12 11:32:30.000000000","message":"Done","commit_id":"111e9b20d6838396492d691c781de277a836cb98"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"898aadc1efb1111d1d1a18c713714f18c31a455a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                context, network_id\u003dnet_id).create()"},{"line_number":119,"context_line":"            net_data[extnet_apidef.EXTERNAL] \u003d True"},{"line_number":120,"context_line":"            if allow_all:"},{"line_number":121,"context_line":"                np_rbac_args \u003d {\u0027project_id\u0027: net_data[\u0027tenant_id\u0027],"},{"line_number":122,"context_line":"                                \u0027object_id\u0027: net_id,"},{"line_number":123,"context_line":"                                \u0027action\u0027: \u0027access_as_external\u0027,"},{"line_number":124,"context_line":"                                \u0027target_tenant\u0027: \u0027*\u0027}"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_4bdd57dc","line":121,"range":{"start_line":121,"start_character":16,"end_line":121,"end_character":28},"updated":"2018-10-11 18:01:57.000000000","message":"Super nit: could rename this to \u0027net_rbac_args\u0027 for consistency with line #100","commit_id":"1a9fcb1da4fe6fb00c610fb85d14a5ea70bc1f61"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4ef6db28f4f42bba3f6fdb4f425c9f0ad3f6386e","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                context, network_id\u003dnet_id).create()"},{"line_number":119,"context_line":"            net_data[extnet_apidef.EXTERNAL] \u003d True"},{"line_number":120,"context_line":"            if allow_all:"},{"line_number":121,"context_line":"                np_rbac_args \u003d {\u0027project_id\u0027: net_data[\u0027tenant_id\u0027],"},{"line_number":122,"context_line":"                                \u0027object_id\u0027: net_id,"},{"line_number":123,"context_line":"                                \u0027action\u0027: \u0027access_as_external\u0027,"},{"line_number":124,"context_line":"                                \u0027target_tenant\u0027: \u0027*\u0027}"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_722fd13d","line":121,"range":{"start_line":121,"start_character":16,"end_line":121,"end_character":28},"in_reply_to":"3f79a3b5_4bdd57dc","updated":"2018-10-12 11:32:30.000000000","message":"Done","commit_id":"1a9fcb1da4fe6fb00c610fb85d14a5ea70bc1f61"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"32fe9571eff269f8c193f97b174636e36d6a2262","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            }"},{"line_number":208,"context_line":"            # if there is a wildcard entry we can safely proceed without the"},{"line_number":209,"context_line":"            # router lookup because they will have access either way"},{"line_number":210,"context_line":"            if net_obj.NetworkRBAC.count("},{"line_number":211,"context_line":"                    context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":212,"context_line":"                    action\u003d\u0027access_as_external\u0027, target_tenant\u003d\u0027*\u0027):"},{"line_number":213,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_907aba22","line":210,"range":{"start_line":210,"start_character":35,"end_line":210,"end_character":40},"updated":"2018-10-11 16:42:29.000000000","message":"so you\u0027re finally convinced to use count :)","commit_id":"1a9fcb1da4fe6fb00c610fb85d14a5ea70bc1f61"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"fb50184f4f741b5c2842d39e5a072b4f25696eb3","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":227,"context_line":"                action\u003d\u0027access_as_external\u0027)"},{"line_number":228,"context_line":"            projects_with_entries \u003d [project for project in projects"},{"line_number":229,"context_line":"                                     if projects !\u003d \u0027*\u0027]"},{"line_number":230,"context_line":"            if new_project:"},{"line_number":231,"context_line":"                projects_with_entries.append(new_project)"},{"line_number":232,"context_line":"            router_exist \u003d l3_obj.Router.check_routers_not_owned_by_projects("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_3b0094b1","line":229,"range":{"start_line":229,"start_character":40,"end_line":229,"end_character":55},"updated":"2018-10-22 20:59:25.000000000","message":"It looks we are comparing a list with a string, which should not be the intent. Not sure why the tests don\u0027t catch the issue..","commit_id":"a9027fe5853ff1b6368ee9b4a940b05a352dda44"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e93718473ebaa7205a79289e1f7d524093834a08","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":227,"context_line":"                action\u003d\u0027access_as_external\u0027)"},{"line_number":228,"context_line":"            projects_with_entries \u003d [project for project in projects"},{"line_number":229,"context_line":"                                     if projects !\u003d \u0027*\u0027]"},{"line_number":230,"context_line":"            if new_project:"},{"line_number":231,"context_line":"                projects_with_entries.append(new_project)"},{"line_number":232,"context_line":"            router_exist \u003d l3_obj.Router.check_routers_not_owned_by_projects("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_3b12cdb4","line":229,"range":{"start_line":229,"start_character":40,"end_line":229,"end_character":55},"in_reply_to":"3f79a3b5_3b0094b1","updated":"2018-10-23 05:51:47.000000000","message":"I\u0027ll put this in my debt list: add functional tests to check this.","commit_id":"a9027fe5853ff1b6368ee9b4a940b05a352dda44"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3acf1b04bd9d04cfc7d3c1fe27cf67496bc7a7e0","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":227,"context_line":"                action\u003d\u0027access_as_external\u0027)"},{"line_number":228,"context_line":"            projects_with_entries \u003d [project for project in projects"},{"line_number":229,"context_line":"                                     if projects !\u003d \u0027*\u0027]"},{"line_number":230,"context_line":"            if new_project:"},{"line_number":231,"context_line":"                projects_with_entries.append(new_project)"},{"line_number":232,"context_line":"            router_exist \u003d l3_obj.Router.check_routers_not_owned_by_projects("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_c72f3af3","line":229,"range":{"start_line":229,"start_character":40,"end_line":229,"end_character":55},"in_reply_to":"3f79a3b5_3b12cdb4","updated":"2018-10-23 09:32:22.000000000","message":"Can\u0027t You add such filter to get_projects() in L225 and then You would not need it here?","commit_id":"a9027fe5853ff1b6368ee9b4a940b05a352dda44"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"751ed09a35e416c9e1ff494556efc7a4e4d79d1c","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":227,"context_line":"                action\u003d\u0027access_as_external\u0027)"},{"line_number":228,"context_line":"            projects_with_entries \u003d [project for project in projects"},{"line_number":229,"context_line":"                                     if projects !\u003d \u0027*\u0027]"},{"line_number":230,"context_line":"            if new_project:"},{"line_number":231,"context_line":"                projects_with_entries.append(new_project)"},{"line_number":232,"context_line":"            router_exist \u003d l3_obj.Router.check_routers_not_owned_by_projects("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_6bcb8272","line":229,"range":{"start_line":229,"start_character":40,"end_line":229,"end_character":55},"in_reply_to":"3f79a3b5_7ea4a805","updated":"2018-10-23 20:58:13.000000000","message":"Please forget about my last comment :)","commit_id":"a9027fe5853ff1b6368ee9b4a940b05a352dda44"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3521d237b5c0d960026b263f76189496a0b8dcf9","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                context, object_id\u003dpolicy[\u0027object_id\u0027],"},{"line_number":227,"context_line":"                action\u003d\u0027access_as_external\u0027)"},{"line_number":228,"context_line":"            projects_with_entries \u003d [project for project in projects"},{"line_number":229,"context_line":"                                     if projects !\u003d \u0027*\u0027]"},{"line_number":230,"context_line":"            if new_project:"},{"line_number":231,"context_line":"                projects_with_entries.append(new_project)"},{"line_number":232,"context_line":"            router_exist \u003d l3_obj.Router.check_routers_not_owned_by_projects("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_7ea4a805","line":229,"range":{"start_line":229,"start_character":40,"end_line":229,"end_character":55},"in_reply_to":"3f79a3b5_c72f3af3","updated":"2018-10-23 14:48:12.000000000","message":"How can I create a filter with !\u003d? If I\u0027m not wrong, currently we can\u0027t filter by \"is not\".","commit_id":"a9027fe5853ff1b6368ee9b4a940b05a352dda44"}],"neutron/objects/network.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"f8827f769edcf2e599692d0e7c77d19ff170b97a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                primitive.pop(f)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def get_projects(cls, context, object_id\u003dNone, action\u003dNone,"},{"line_number":62,"context_line":"                     target_tenant\u003dNone):"},{"line_number":63,"context_line":"        clauses \u003d []"},{"line_number":64,"context_line":"        if object_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c39db26c","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":20},"updated":"2018-10-12 18:15:03.000000000","message":"I don\u0027t think it is a good idea to overwrite this method in this case because it will shallow the base class implementation [1] which might be useful for others.\n\nPerhaps creating a new method for this or overriding this method in a backward-compatible way would be better.\n\n[1] https://github.com/openstack/neutron/blob/9fe694dc168b6f7eba5342b1f5fec67b59bbaf0b/neutron/objects/base.py#L566","commit_id":"72db8f5601c153b8d9592118b16cfcfe99c093fd"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"91a328873a302d73854b1879713a85ac3c31755e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                primitive.pop(f)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def get_projects(cls, context, object_id\u003dNone, action\u003dNone,"},{"line_number":62,"context_line":"                     target_tenant\u003dNone):"},{"line_number":63,"context_line":"        clauses \u003d []"},{"line_number":64,"context_line":"        if object_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_e1dc63e3","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":20},"updated":"2018-10-12 23:13:01.000000000","message":"See if you feel like to leverage this feature instead: https://review.openstack.org/#/c/610182/ but I am totally fine to merge this patch as is and I can propose a follow-up patch for that.","commit_id":"72db8f5601c153b8d9592118b16cfcfe99c093fd"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2f7a78bbc53f68112389302a72b162ca96ef6daf","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                primitive.pop(f)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def get_projects(cls, context, object_id\u003dNone, action\u003dNone,"},{"line_number":62,"context_line":"                     target_tenant\u003dNone):"},{"line_number":63,"context_line":"        clauses \u003d []"},{"line_number":64,"context_line":"        if object_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_4e446919","line":61,"range":{"start_line":61,"start_character":3,"end_line":61,"end_character":62},"updated":"2018-10-12 18:50:50.000000000","message":"an unit test should be added for this method ?","commit_id":"72db8f5601c153b8d9592118b16cfcfe99c093fd"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"2acb4e5735ff812e0c2fe19c825fbd33e12a4fe6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                primitive.pop(f)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def get_projects(cls, context, object_id\u003dNone, action\u003dNone,"},{"line_number":62,"context_line":"                     target_tenant\u003dNone):"},{"line_number":63,"context_line":"        clauses \u003d []"},{"line_number":64,"context_line":"        if object_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_ee145544","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":20},"in_reply_to":"3f79a3b5_03272aca","updated":"2018-10-12 18:41:08.000000000","message":"Ops, sorry, my bad.","commit_id":"72db8f5601c153b8d9592118b16cfcfe99c093fd"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"796126eadcf0fb236e7047304172af36003b5940","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                primitive.pop(f)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def get_projects(cls, context, object_id\u003dNone, action\u003dNone,"},{"line_number":62,"context_line":"                     target_tenant\u003dNone):"},{"line_number":63,"context_line":"        clauses \u003d []"},{"line_number":64,"context_line":"        if object_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_aeec1d92","line":61,"range":{"start_line":61,"start_character":3,"end_line":61,"end_character":62},"in_reply_to":"3f79a3b5_4e446919","updated":"2018-10-12 19:22:59.000000000","message":"There are no tests for the NetworkRBAC object at all [1], and adding them would be outside the scope of this change.  \n\n[1] https://git.openstack.org/cgit/openstack/neutron/tree/neutron/tests/unit/objects/test_network.py#n23","commit_id":"72db8f5601c153b8d9592118b16cfcfe99c093fd"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a121d77fe5e53de182f599b9c47a486be5c33fb5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                primitive.pop(f)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def get_projects(cls, context, object_id\u003dNone, action\u003dNone,"},{"line_number":62,"context_line":"                     target_tenant\u003dNone):"},{"line_number":63,"context_line":"        clauses \u003d []"},{"line_number":64,"context_line":"        if object_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_03272aca","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":20},"in_reply_to":"3f79a3b5_c39db26c","updated":"2018-10-12 18:38:46.000000000","message":"But I don\u0027t understand. get_projects is not in the base class. Your link refers to get_objects","commit_id":"72db8f5601c153b8d9592118b16cfcfe99c093fd"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"5fda2504e910822650850669a998092118ec9b43","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                primitive.pop(f)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def get_projects(cls, context, object_id\u003dNone, action\u003dNone,"},{"line_number":62,"context_line":"                     target_tenant\u003dNone):"},{"line_number":63,"context_line":"        clauses \u003d []"},{"line_number":64,"context_line":"        if object_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_c1bfe75d","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":20},"in_reply_to":"3f79a3b5_e1dc63e3","updated":"2018-10-12 23:22:08.000000000","message":"oh, there\u0027s a TODO for adding tests for NetworkRBAC. so fine with it being done in separate patch","commit_id":"72db8f5601c153b8d9592118b16cfcfe99c093fd"}],"neutron/tests/functional/db/test_network.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"4ba5b527e53329863cc85437e64746eff79f0054","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_update_network_shared_to_external(self):"},{"line_number":130,"context_line":"        self._create_network(self.tenant_1, self.network_id, True)"},{"line_number":131,"context_line":"        self._check_rbac(self.network_id, is_none\u003dFalse)"},{"line_number":132,"context_line":"        self._check_rbac(self.network_id, external\u003dTrue)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        network_data \u003d {extnet_apidef.EXTERNAL: True}"},{"line_number":135,"context_line":"        self._update_network(self.network_id, network_data)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_fa222402","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":55},"updated":"2018-10-09 19:55:00.000000000","message":"why this even needed ? the term external is confusing, since the network is created with external\u003dFalse and I assume external of network is expected here ?","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"33373b72d480cd94606dd35f9f0875b151ebc4d5","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_update_network_shared_to_external(self):"},{"line_number":130,"context_line":"        self._create_network(self.tenant_1, self.network_id, True)"},{"line_number":131,"context_line":"        self._check_rbac(self.network_id, is_none\u003dFalse)"},{"line_number":132,"context_line":"        self._check_rbac(self.network_id, external\u003dTrue)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        network_data \u003d {extnet_apidef.EXTERNAL: True}"},{"line_number":135,"context_line":"        self._update_network(self.network_id, network_data)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_1be6f8e8","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":55},"in_reply_to":"3f79a3b5_fa222402","updated":"2018-10-10 08:16:35.000000000","message":"In L130, we are creating a shared and not-external (internal) network.\nL131: is checking the RBAC policy created for shared networks doesn\u0027t exist\nL132: is checking the external RBAC policy exists","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dbaa6c24bdd70d121db2c0dd5cbd13fc02121635","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        network_data \u003d {extnet_apidef.EXTERNAL: False}"},{"line_number":146,"context_line":"        self._update_network(self.network_id, network_data)"},{"line_number":147,"context_line":"        self._check_rbac(self.network_id, is_none\u003dFalse)"},{"line_number":148,"context_line":"        self._check_rbac(self.network_id, external\u003dTrue)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_update_network_to_no_shared_tenant_subnet(self):"},{"line_number":151,"context_line":"        self._create_network(self.tenant_1, self.network_id, True)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_71f94b4c","line":148,"updated":"2018-10-10 09:38:59.000000000","message":"in the past we added such new UT in separate patch before switching to OVO. It can then prove that transition to OVO works fine and don\u0027t change behavior.\nSo IMO all those changes in UT should be done in separate patch","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7394274a5c1571059042c195b7589eda02a8c849","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        network_data \u003d {extnet_apidef.EXTERNAL: False}"},{"line_number":146,"context_line":"        self._update_network(self.network_id, network_data)"},{"line_number":147,"context_line":"        self._check_rbac(self.network_id, is_none\u003dFalse)"},{"line_number":148,"context_line":"        self._check_rbac(self.network_id, external\u003dTrue)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_update_network_to_no_shared_tenant_subnet(self):"},{"line_number":151,"context_line":"        self._create_network(self.tenant_1, self.network_id, True)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_355f3ce5","line":148,"in_reply_to":"3f79a3b5_71f94b4c","updated":"2018-10-10 11:35:58.000000000","message":"I understand your point, but those tests must work with and without the network RBAC OVO migration. IMO, these are \"missing\" functional tests","commit_id":"81083f1b89a822120752851a79523f6be35ef93b"}]}
