)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ed1197b53ae428c451c7fa9fef9d402f92e32d55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2e208ea9_322ef5bd","updated":"2023-06-14 09:00:19.000000000","message":"Thanks for the feedback","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"24b4d1b465753baa418c0d3e821bf8674b3cd7f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"11697571_c92ae30d","updated":"2023-06-13 21:49:38.000000000","message":"what Kuba said plus one more suggestion","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"9fe1f2ddf7441a8f3380748e4c8e98ccc00520db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4cae3a5c_9bc72cc1","updated":"2023-06-15 12:29:01.000000000","message":"Error is unrelated:\n\n2023-06-15 09:29:43.325618 | compute1 | ERROR: Could not find a version that satisfies the requirement beagle\u003e\u003d0.2.1 (from openstack-requirements) (from versions: none)\n2023-06-15 09:29:43.326056 | compute1 | ERROR: No matching distribution found for beagle\u003e\u003d0.2.1","commit_id":"afa20faec3c37bd06346360cadbad0d69e9925f0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0bfcb9d92fede10670f5cc0eb4b561955b82b001","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"08c1feb9_828d991b","updated":"2023-06-16 10:02:14.000000000","message":"We already have 2+2 from other core reviewers. I am marking this as W+ because I will need this code for future patches I\u0027m currently working on.","commit_id":"afa20faec3c37bd06346360cadbad0d69e9925f0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ab8272ed7df5414fdc3a1a3743d880c1aea59dbf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3bea3e80_78196061","updated":"2023-06-16 08:38:55.000000000","message":"recheck\n\nunrelated error","commit_id":"afa20faec3c37bd06346360cadbad0d69e9925f0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"37793900641de8714481e93db2539a2e437be55f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5f46209f_ed8c4fc8","updated":"2023-06-14 12:12:53.000000000","message":"recheck\n\nunrelated failure from the linuxbridge test","commit_id":"afa20faec3c37bd06346360cadbad0d69e9925f0"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d1032b7bbdd11ce389093ea52ff1eb3913ff1c6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9e3c04ee_c974ee4c","updated":"2023-06-15 07:00:30.000000000","message":"recheck\nHit of https://bugs.launchpad.net/neutron/+bug/2015065","commit_id":"afa20faec3c37bd06346360cadbad0d69e9925f0"},{"author":{"_account_id":33983,"name":"Luigi Dino Tamagnone","display_name":"luigi","email":"ltamagno@redhat.com","username":"ltamagno"},"change_message_id":"aba82f2875fcdc73422e7424f51770f5f341c2c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4e35d5f2_7c590e4a","updated":"2023-06-14 15:15:35.000000000","message":"seems good to me, and have some logs for hash ring is useful","commit_id":"afa20faec3c37bd06346360cadbad0d69e9925f0"}],"neutron/db/ovn_hash_ring_db.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"24b4d1b465753baa418c0d3e821bf8674b3cd7f7","unresolved":true,"context_lines":[{"line_number":64,"context_line":"    _touch(context, node_uuid\u003dnode_uuid)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def _get_nodes(context, interval, group_name, offline\u003dFalse, count\u003dFalse,"},{"line_number":68,"context_line":"               from_host\u003dFalse):"},{"line_number":69,"context_line":"    limit \u003d timeutils.utcnow() - datetime.timedelta(seconds\u003dinterval)"},{"line_number":70,"context_line":"    with db_api.CONTEXT_READER.using(context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3efc0128_f24df63d","line":67,"updated":"2023-06-13 21:49:38.000000000","message":"I don\u0027t think it\u0027s a good idea to introduce a `count` flag to a `get` function that makes its return value type different. Instead, a separate function should be introduced to do the counting. If needed, introduce a `_get_nodes_query()` function that you can then modify with `.count()` or `.all()` as needed.","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ed1197b53ae428c451c7fa9fef9d402f92e32d55","unresolved":true,"context_lines":[{"line_number":64,"context_line":"    _touch(context, node_uuid\u003dnode_uuid)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def _get_nodes(context, interval, group_name, offline\u003dFalse, count\u003dFalse,"},{"line_number":68,"context_line":"               from_host\u003dFalse):"},{"line_number":69,"context_line":"    limit \u003d timeutils.utcnow() - datetime.timedelta(seconds\u003dinterval)"},{"line_number":70,"context_line":"    with db_api.CONTEXT_READER.using(context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"95d60557_10e7ef80","line":67,"in_reply_to":"3efc0128_f24df63d","updated":"2023-06-14 09:00:19.000000000","message":"++ I agree. I had it like this cause it\u0027s an internal method (prefixed with _) but yeah, better to keep each method tidy","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"371ecfc01d0acebe7bb516b0f5ba74886433977e","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    _touch(context, node_uuid\u003dnode_uuid)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def _get_nodes(context, interval, group_name, offline\u003dFalse, count\u003dFalse,"},{"line_number":68,"context_line":"               from_host\u003dFalse):"},{"line_number":69,"context_line":"    limit \u003d timeutils.utcnow() - datetime.timedelta(seconds\u003dinterval)"},{"line_number":70,"context_line":"    with db_api.CONTEXT_READER.using(context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"2977b5b6_71e8816e","line":67,"in_reply_to":"95d60557_10e7ef80","updated":"2023-06-14 09:04:42.000000000","message":"Done","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"409242313f11f8a5092be6a093ffc8bb98de50c3","unresolved":true,"context_lines":[{"line_number":71,"context_line":"        query \u003d context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":72,"context_line":"            ovn_models.OVNHashRing.group_name \u003d\u003d group_name)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if not offline:"},{"line_number":75,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003e\u003d limit)"},{"line_number":76,"context_line":"        else:"},{"line_number":77,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003c\u003d limit)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d14775e8_3018f394","line":74,"range":{"start_line":74,"start_character":0,"end_line":74,"end_character":23},"updated":"2023-06-13 16:15:46.000000000","message":"Would be a bit readable if this it was not negated since we use both branches.","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ed1197b53ae428c451c7fa9fef9d402f92e32d55","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        query \u003d context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":72,"context_line":"            ovn_models.OVNHashRing.group_name \u003d\u003d group_name)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if not offline:"},{"line_number":75,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003e\u003d limit)"},{"line_number":76,"context_line":"        else:"},{"line_number":77,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003c\u003d limit)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4850d7c7_4f733a1e","line":74,"range":{"start_line":74,"start_character":0,"end_line":74,"end_character":23},"in_reply_to":"d14775e8_3018f394","updated":"2023-06-14 09:00:19.000000000","message":"Done","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"409242313f11f8a5092be6a093ffc8bb98de50c3","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        if not offline:"},{"line_number":75,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003e\u003d limit)"},{"line_number":76,"context_line":"        else:"},{"line_number":77,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003c\u003d limit)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if from_host:"},{"line_number":80,"context_line":"            query \u003d query.filter_by(hostname\u003dCONF.host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4d0e00fb_5c20175d","line":77,"range":{"start_line":77,"start_character":68,"end_line":77,"end_character":69},"updated":"2023-06-13 16:15:46.000000000","message":"I think the node that is still at the limit should be considered online.","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ed1197b53ae428c451c7fa9fef9d402f92e32d55","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        if not offline:"},{"line_number":75,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003e\u003d limit)"},{"line_number":76,"context_line":"        else:"},{"line_number":77,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003c\u003d limit)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if from_host:"},{"line_number":80,"context_line":"            query \u003d query.filter_by(hostname\u003dCONF.host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6c2b34d4_cf3ca461","line":77,"range":{"start_line":77,"start_character":68,"end_line":77,"end_character":69},"in_reply_to":"4d0e00fb_5c20175d","updated":"2023-06-14 09:00:19.000000000","message":"Indeed","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"371ecfc01d0acebe7bb516b0f5ba74886433977e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if not offline:"},{"line_number":75,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003e\u003d limit)"},{"line_number":76,"context_line":"        else:"},{"line_number":77,"context_line":"            query \u003d query.filter(ovn_models.OVNHashRing.updated_at \u003c\u003d limit)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if from_host:"},{"line_number":80,"context_line":"            query \u003d query.filter_by(hostname\u003dCONF.host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c2cf3025_8ff6d848","line":77,"range":{"start_line":77,"start_character":68,"end_line":77,"end_character":69},"in_reply_to":"6c2b34d4_cf3ca461","updated":"2023-06-14 09:04:42.000000000","message":"Done","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"409242313f11f8a5092be6a093ffc8bb98de50c3","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    return _get_nodes(context, interval, group_name, from_host\u003dfrom_host)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def count_offline_nodes(context, interval, group_name, from_host\u003dFalse):"},{"line_number":90,"context_line":"    return _get_nodes(context, interval, group_name, offline\u003dTrue, count\u003dTrue,"},{"line_number":91,"context_line":"                      from_host\u003dfrom_host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"43ef3ff1_903b4c5f","line":89,"range":{"start_line":89,"start_character":55,"end_line":89,"end_character":70},"updated":"2023-06-13 16:15:46.000000000","message":"Is this used anywhere?","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"371ecfc01d0acebe7bb516b0f5ba74886433977e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    return _get_nodes(context, interval, group_name, from_host\u003dfrom_host)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def count_offline_nodes(context, interval, group_name, from_host\u003dFalse):"},{"line_number":90,"context_line":"    return _get_nodes(context, interval, group_name, offline\u003dTrue, count\u003dTrue,"},{"line_number":91,"context_line":"                      from_host\u003dfrom_host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"411011a0_97928419","line":89,"range":{"start_line":89,"start_character":55,"end_line":89,"end_character":70},"in_reply_to":"03873512_95dd4ca3","updated":"2023-06-14 09:04:42.000000000","message":"Done","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ed1197b53ae428c451c7fa9fef9d402f92e32d55","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    return _get_nodes(context, interval, group_name, from_host\u003dfrom_host)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def count_offline_nodes(context, interval, group_name, from_host\u003dFalse):"},{"line_number":90,"context_line":"    return _get_nodes(context, interval, group_name, offline\u003dTrue, count\u003dTrue,"},{"line_number":91,"context_line":"                      from_host\u003dfrom_host)"}],"source_content_type":"text/x-python","patch_set":1,"id":"03873512_95dd4ca3","line":89,"range":{"start_line":89,"start_character":55,"end_line":89,"end_character":70},"in_reply_to":"43ef3ff1_903b4c5f","updated":"2023-06-14 09:00:19.000000000","message":"It\u0027s not, can be removed.","commit_id":"062280c161e3ebe0c6a0dd47c5e38079a0f164eb"}],"neutron/tests/unit/db/test_ovn_hash_ring_db.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"e9947992a727abd6e8786b19be5c0d403a6fd892","unresolved":true,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        # Assert no nodes are considered offline"},{"line_number":270,"context_line":"        self.assertEqual(0, ovn_hash_ring_db.count_offline_nodes("},{"line_number":271,"context_line":"            self.admin_ctx, interval\u003d60, group_name\u003dHASH_RING_TEST_GROUP))"}],"source_content_type":"text/x-python","patch_set":2,"id":"b7e3a50a_a08c9212","line":271,"updated":"2023-06-14 13:01:17.000000000","message":"the test case seems to test all or nothing but doesn\u0027t test a scenario where some nodes are offline while others are not. I dunno if it\u0027s worth adding these scenarios though, since it\u0027s a unit test and we assume the query is declared correctly and that sqlalchemy is not misbehaving... Take it or leave it.","commit_id":"afa20faec3c37bd06346360cadbad0d69e9925f0"}]}
