)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21909,"name":"Bob Fournier","email":"bfournie@redhat.com","username":"bfournie"},"change_message_id":"52f1865027c87ce0dc6303c9975556624cf6b754","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Harald Jensås \u003chjensas@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-07-19 13:14:01 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filter secuirty group list on the ID\u0027s we expect"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Filter the list of security groups based on the security"},{"line_number":10,"context_line":"group IDs we plan on using for the network. Also only"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7faddb67_f3b15045","line":7,"range":{"start_line":7,"start_character":7,"end_line":7,"end_character":15},"updated":"2019-07-19 12:42:55.000000000","message":"nit - typo","commit_id":"19cc3d3aabea3707da81b32d58ba415e60e70a63"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0efab51f2601a13c0b846c31780b1e89faefb27b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Julia Kreger \u003cjuliaashleykreger@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-07-19 13:16:12 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filter secuirty group list on the ID\u0027s we expect"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Filter the list of security groups based on the security"},{"line_number":10,"context_line":"group IDs we plan on using for the network. Also only"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7faddb67_3fca49a0","line":7,"range":{"start_line":7,"start_character":7,"end_line":7,"end_character":15},"updated":"2019-07-19 15:57:31.000000000","message":"there was another typo here.","commit_id":"9a2e1b7c156e27dbf0b20bd4662c6069a409a50f"}],"ironic/common/neutron.py":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"10935ed4c10a89421b61839983efc5490bd8857d","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        LOG.exception(msg)"},{"line_number":193,"context_line":"        raise exception.NetworkError(msg)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    missing_sec_groups \u003d (set(security_groups) -"},{"line_number":196,"context_line":"                          set(x[\u0027id\u0027] for x in neutron_sec_groups))"},{"line_number":197,"context_line":"    if missing_sec_groups:"},{"line_number":198,"context_line":"        msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_335da846","line":195,"range":{"start_line":195,"start_character":47,"end_line":195,"end_character":48},"updated":"2019-07-19 13:28:50.000000000","message":"nit: there are also `set.issubset` and `set.issuperset` methods. They should be a tad bit faster, arguably.","commit_id":"9a2e1b7c156e27dbf0b20bd4662c6069a409a50f"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"23e81b50a006c8387968165c1804b6c9627fa090","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        LOG.exception(msg)"},{"line_number":193,"context_line":"        raise exception.NetworkError(msg)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    missing_sec_groups \u003d (set(security_groups) -"},{"line_number":196,"context_line":"                          set(x[\u0027id\u0027] for x in neutron_sec_groups))"},{"line_number":197,"context_line":"    if missing_sec_groups:"},{"line_number":198,"context_line":"        msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_b91979d7","line":195,"range":{"start_line":195,"start_character":47,"end_line":195,"end_character":48},"in_reply_to":"7faddb67_335da846","updated":"2019-07-19 14:33:33.000000000","message":"We need to get the difference for the LOG and exception message.\n\nWe could do the difference only if issubset is not true?\n\n    if not set(security_groups).issubset(\n        set(x[\u0027id\u0027] for x in neutron_sec_groups)):\n        missing_sec_groups \u003d set(security_groups).difference(\n            set(x[\u0027id\u0027] for x in neutron_sec_groups))\n        msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027\n                 \u0027config) in neutron: %(ir-sg)s\u0027)\n               % {\u0027ir-sg\u0027: list(missing_sec_groups)})\n        LOG.error(msg)\n        raise exception.NetworkError(msg)","commit_id":"9a2e1b7c156e27dbf0b20bd4662c6069a409a50f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"92adfeab2c9d7b6957e24c7ae94f92a9baa04afb","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        LOG.exception(msg)"},{"line_number":193,"context_line":"        raise exception.NetworkError(msg)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    missing_sec_groups \u003d (set(security_groups) -"},{"line_number":196,"context_line":"                          set(x[\u0027id\u0027] for x in neutron_sec_groups))"},{"line_number":197,"context_line":"    if missing_sec_groups:"},{"line_number":198,"context_line":"        msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_e448a4b3","line":195,"range":{"start_line":195,"start_character":47,"end_line":195,"end_character":48},"in_reply_to":"7faddb67_b91979d7","updated":"2019-07-19 15:26:01.000000000","message":"Perhaps, that feels a bit better, but that\u0027s the nitpick anyway!\n\nBTW, may be second `set` can be implicit?\n\n    if not set(security_groups).issubset(x[\u0027id\u0027] for x in neutron_sec_groups)","commit_id":"9a2e1b7c156e27dbf0b20bd4662c6069a409a50f"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"0efab51f2601a13c0b846c31780b1e89faefb27b","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        LOG.exception(msg)"},{"line_number":193,"context_line":"        raise exception.NetworkError(msg)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    missing_sec_groups \u003d (set(security_groups) -"},{"line_number":196,"context_line":"                          set(x[\u0027id\u0027] for x in neutron_sec_groups))"},{"line_number":197,"context_line":"    if missing_sec_groups:"},{"line_number":198,"context_line":"        msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_1fc3cd8a","line":195,"range":{"start_line":195,"start_character":47,"end_line":195,"end_character":48},"in_reply_to":"7faddb67_e448a4b3","updated":"2019-07-19 15:57:31.000000000","message":"Done","commit_id":"9a2e1b7c156e27dbf0b20bd4662c6069a409a50f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"46e5ca12aa5f6e396ef7f4c388a5b0a15d3b432a","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_3549fa8a","line":187,"updated":"2019-07-22 08:40:38.000000000","message":"Does it really allow several values for `id`? I cannot find any references to that.","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"79a2adb075ca45b6f2509304cee136c18850707a","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_2c5e1a12","line":187,"in_reply_to":"7faddb67_0a09c693","updated":"2019-07-30 07:46:23.000000000","message":"Now we also added note about it to the api-ref: https://docs.openstack.org/api-ref/network/v2/index.html#filtering-and-column-selection","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"76c18a8ee49b6e563084126bdf23d770c9720a5e","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_8512e308","line":187,"in_reply_to":"7faddb67_11bb9d0e","updated":"2019-07-23 13:35:25.000000000","message":"I was checking that and also discussing that with amotoki. And it looks that this is only docs issue. We should update api-ref to mention that it can be passed as list of elements.\nIt will work like that for other resources too.\nAnd according to amotoki this is used e.g. in horizon in couple of places already.","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2ec1eaaf355d657c28d156ef6b4f898102f0fa2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_acba0a6b","line":187,"in_reply_to":"7faddb67_2c5e1a12","updated":"2019-07-30 08:42:18.000000000","message":"Thanks for confirming!","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4852b7926e93e402217a37dbf6c3b0279fdadd67","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d79c206c","line":187,"in_reply_to":"7faddb67_3549fa8a","updated":"2019-07-22 19:44:23.000000000","message":"Looking at neutron\u0027s api/v2/base.py... I have a strong feeling the answer is no. This makes me think that the only realistic way is to try and handle less of a list of security groups.","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"edad95db203590e8162f9ee18c7a25e300892ca8","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_0a09c693","line":187,"in_reply_to":"7faddb67_8512e308","updated":"2019-07-29 21:14:54.000000000","message":"Wow, Awesome!","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"d728f2444c4765d1317c3c7318186b1cf50c1dff","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        return"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_11bb9d0e","line":187,"in_reply_to":"7faddb67_d79c206c","updated":"2019-07-23 09:31:12.000000000","message":"It most certanly does work. This is the code I used to test this while writing the patch:\n  \nimport json\n\nfrom keystoneauth1 import identity\nfrom keystoneauth1 import session\nfrom neutronclient.v2_0 import client\n\n\nusername\u003d\u0027demo\u0027\npassword\u003d\u0027secret\u0027\nproject_name\u003d\u0027demo\u0027\nproject_domain_id\u003d\u0027default\u0027\nuser_domain_id\u003d\u0027default\u0027\nauth_url\u003d\u0027http://192.168.122.8/identity\u0027\nauth \u003d identity.Password(auth_url\u003dauth_url,\n                         username\u003dusername,\n                         password\u003dpassword,\n                         project_name\u003dproject_name,\n                         project_domain_id\u003dproject_domain_id,\n                         user_domain_id\u003duser_domain_id)\n\nsess \u003d session.Session(auth\u003dauth)\nneutron \u003d client.Client(session\u003dsess)\n\nsecurity_groups \u003d [\u0027537dcbdb-4d9a-4687-b9fe-15fd97121392\u0027, \u00271706634c-f060-49a9-ba19-17b315b8b9e1\u0027]\n# security_groups \u003d [\u0027537dcbdb-4d9a-4687-b9fe-15fd97121392\u0027, \u0027missingb-4d9a-4687-b9fe-15fd97121392\u0027]\n\nneutron_sec_groups \u003d neutron.list_security_groups(\n                      id\u003dsecurity_groups,\n                      fields\u003d\u0027id\u0027,).get(\u0027security_groups\u0027, [])\n\n\n\nmissing_sec_groups \u003d (set(security_groups) -\n                      set(x[\u0027id\u0027] for x in neutron_sec_groups))\n\nprint set(security_groups)\nprint set(x[\u0027id\u0027] for x in neutron_sec_groups)\nprint missing_sec_groups\n\n\n\n\n\nstack@container-undercloud:~$ openstack security group list\n+--------------------------------------+--------------+------------------------+----------------------------------+------+\n| ID                                   | Name         | Description            | Project                          | Tags |\n+--------------------------------------+--------------+------------------------+----------------------------------+------+\n| 1706634c-f060-49a9-ba19-17b315b8b9e1 | test_sec_grp | test_sec_grp           | dc422bc02d384c4780ad284a1ace7a1f | []   |\n| 537dcbdb-4d9a-4687-b9fe-15fd97121392 | default      | Default security group | dc422bc02d384c4780ad284a1ace7a1f | []   |\n+--------------------------------------+--------------+------------------------+----------------------------------+------+\n\nResult with both existing security groups:\n##########################################\n\n$ python list_sec_group.py \nset([\u00271706634c-f060-49a9-ba19-17b315b8b9e1\u0027, \u0027537dcbdb-4d9a-4687-b9fe-15fd97121392\u0027])\nset([u\u00271706634c-f060-49a9-ba19-17b315b8b9e1\u0027, u\u0027537dcbdb-4d9a-4687-b9fe-15fd97121392\u0027])\nset([])\n\nResult with the missing security group:\n#######################################\n\n$ python list_sec_group.py \nset([\u0027missingb-4d9a-4687-b9fe-15fd97121392\u0027, \u0027537dcbdb-4d9a-4687-b9fe-15fd97121392\u0027])\nset([u\u0027537dcbdb-4d9a-4687-b9fe-15fd97121392\u0027])\nset([\u0027missingb-4d9a-4687-b9fe-15fd97121392\u0027])\n\n\n\nIt also works without the client:\ncurl -H \"X-Auth-Token:$(openstack token issue -f value -c id)\" \"http://192.168.122.8:9696/v2.0/security_groups?id\u003d1706634c-f060-49a9-ba19-17b315b8b9e1\u0026id\u003d537dcbdb-4d9a-4687-b9fe-15fd97121392\"","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4852b7926e93e402217a37dbf6c3b0279fdadd67","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"},{"line_number":191,"context_line":"               {\u0027exc\u0027: e})"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_37cc9460","line":188,"updated":"2019-07-22 19:44:23.000000000","message":"So crazy idea. Why not change the access pattern as the purpose of the helper is to verify the security groups. Enumerate through the list of groups. Individually ask neutron about each one. That WILL take loner because we keep asking it for updates, but for a longer list being returned from the API it is no longer a database scan and ship of the data to the conductor to parse/process. We would hit neutron\u0027s API in rapid succession for index based queries. It would definitely slow down if someone had a long list of security groups to apply to their provisioning/cleaning networks... but we wouldn\u0027t be trying to sort through everything neutron is aware of.","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2ec1eaaf355d657c28d156ef6b4f898102f0fa2","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        neutron_sec_groups \u003d ("},{"line_number":187,"context_line":"            client.list_security_groups(id\u003dsecurity_groups, fields\u003d\u0027id\u0027).get("},{"line_number":188,"context_line":"                \u0027security_groups\u0027, []))"},{"line_number":189,"context_line":"    except neutron_exceptions.NeutronClientException as e:"},{"line_number":190,"context_line":"        msg \u003d (_(\"Could not retrieve security groups from neutron: %(exc)s\") %"},{"line_number":191,"context_line":"               {\u0027exc\u0027: e})"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_2ca61a55","line":188,"in_reply_to":"7faddb67_37cc9460","updated":"2019-07-30 08:42:18.000000000","message":"I guess since `id` query does work, we don\u0027t need this?","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4852b7926e93e402217a37dbf6c3b0279fdadd67","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        raise exception.NetworkError(msg)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    if set(security_groups).issubset(x[\u0027id\u0027] for x in neutron_sec_groups):"},{"line_number":196,"context_line":"        return"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    missing_sec_groups \u003d set(security_groups).difference("},{"line_number":199,"context_line":"        x[\u0027id\u0027] for x in neutron_sec_groups)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_17f8787a","line":196,"updated":"2019-07-22 19:44:23.000000000","message":"If we have success for each in the list, then we don\u0027t need to do list comprehensions. if len(security_groups) \u003d\u003d found_security_groups: return.","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"46e5ca12aa5f6e396ef7f4c388a5b0a15d3b432a","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    if set(security_groups).issubset(x[\u0027id\u0027] for x in neutron_sec_groups):"},{"line_number":196,"context_line":"        return"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    missing_sec_groups \u003d set(security_groups).difference("},{"line_number":199,"context_line":"        x[\u0027id\u0027] for x in neutron_sec_groups)"},{"line_number":200,"context_line":"    msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027"},{"line_number":201,"context_line":"             \u0027config) in neutron: %(ir-sg)s\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d55d0649","line":198,"updated":"2019-07-22 08:40:38.000000000","message":"nit: now you\u0027re doing set operations twice. I\u0027d still do\n\n if not missing_sec_groups:\n     return","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"46e5ca12aa5f6e396ef7f4c388a5b0a15d3b432a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        x[\u0027id\u0027] for x in neutron_sec_groups)"},{"line_number":200,"context_line":"    msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027"},{"line_number":201,"context_line":"             \u0027config) in neutron: %(ir-sg)s\u0027)"},{"line_number":202,"context_line":"           % {\u0027ir-sg\u0027: list(missing_sec_groups)})"},{"line_number":203,"context_line":"    LOG.error(msg)"},{"line_number":204,"context_line":"    raise exception.NetworkError(msg)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_f55a824e","line":202,"updated":"2019-07-22 08:40:38.000000000","message":"nit: I\u0027d use \u0027, \u0027.join(missing_sec_groups) for readability","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4852b7926e93e402217a37dbf6c3b0279fdadd67","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        x[\u0027id\u0027] for x in neutron_sec_groups)"},{"line_number":200,"context_line":"    msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027"},{"line_number":201,"context_line":"             \u0027config) in neutron: %(ir-sg)s\u0027)"},{"line_number":202,"context_line":"           % {\u0027ir-sg\u0027: list(missing_sec_groups)})"},{"line_number":203,"context_line":"    LOG.error(msg)"},{"line_number":204,"context_line":"    raise exception.NetworkError(msg)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_f7eefcb2","line":202,"in_reply_to":"7faddb67_f55a824e","updated":"2019-07-22 19:44:23.000000000","message":"It would be more noisy, but if we shift he logic to individually querying each security group that we need, then we could just log per each one. It would be less conductor side processing in the end if there are 10,000 or 100,000 security groups in neutron as a whole.","commit_id":"59787768cbf1d757611be27406777a088fb16659"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a2ec1eaaf355d657c28d156ef6b4f898102f0fa2","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        x[\u0027id\u0027] for x in neutron_sec_groups)"},{"line_number":200,"context_line":"    msg \u003d (_(\u0027Could not find these security groups (specified via ironic \u0027"},{"line_number":201,"context_line":"             \u0027config) in neutron: %(ir-sg)s\u0027)"},{"line_number":202,"context_line":"           % {\u0027ir-sg\u0027: list(missing_sec_groups)})"},{"line_number":203,"context_line":"    LOG.error(msg)"},{"line_number":204,"context_line":"    raise exception.NetworkError(msg)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_cc62e616","line":202,"in_reply_to":"7faddb67_f7eefcb2","updated":"2019-07-30 08:42:18.000000000","message":"I\u0027m not sure printing [u\"...\", u\"...\"] is more noisy than printing ..., ...","commit_id":"59787768cbf1d757611be27406777a088fb16659"}]}
