)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a514d60bdef09afe96d28d2aeda5c1eb7a054170","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4755f2fc_ef8803a4","updated":"2023-07-14 13:54:44.000000000","message":"-1 for visibility","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b0636e62af238da68777c472838ad939ee2067d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e509a13d_4ae4c73a","updated":"2023-07-14 13:35:47.000000000","message":"Thanks Lucas, great patch!","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ebb14e71f46593e9c654c520bc0144923c6a9ad6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3d23b1e6_1c7e71f7","updated":"2023-07-21 09:00:10.000000000","message":"recheck","commit_id":"e11f61393853613492b9c3fa3caa1a32cf6032f3"}],"neutron/cmd/ovn/neutron_ovn_db_sync_util.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a514d60bdef09afe96d28d2aeda5c1eb7a054170","unresolved":true,"context_lines":[{"line_number":59,"context_line":"        return self._ovn_client"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _remove_node_from_hash_ring(self):"},{"line_number":62,"context_line":"        \"\"\"Don\u0027t remove the node from the Hash Ring."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        If this method was not overridden, cleanup would be performed when"},{"line_number":65,"context_line":"        calling the db sync and running neutron server would remove the"}],"source_content_type":"text/x-python","patch_set":1,"id":"fb642e09_d2e0ff83","line":62,"range":{"start_line":62,"start_character":11,"end_line":62,"end_character":17},"updated":"2023-07-14 13:54:44.000000000","message":"I think we are actually removing the node.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"de7f422bd3a2b7d35969b23e943803611f59978d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return self._ovn_client"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _remove_node_from_hash_ring(self):"},{"line_number":62,"context_line":"        \"\"\"Don\u0027t remove the node from the Hash Ring."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        If this method was not overridden, cleanup would be performed when"},{"line_number":65,"context_line":"        calling the db sync and running neutron server would remove the"}],"source_content_type":"text/x-python","patch_set":1,"id":"d6562a89_b414fc64","line":62,"range":{"start_line":62,"start_character":11,"end_line":62,"end_character":17},"in_reply_to":"9cd41f3f_34c85f9d","updated":"2023-07-24 08:55:45.000000000","message":"Done","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0a687ae46a8843b840676e2f26fe0e7e9d59f2bb","unresolved":true,"context_lines":[{"line_number":59,"context_line":"        return self._ovn_client"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _remove_node_from_hash_ring(self):"},{"line_number":62,"context_line":"        \"\"\"Don\u0027t remove the node from the Hash Ring."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        If this method was not overridden, cleanup would be performed when"},{"line_number":65,"context_line":"        calling the db sync and running neutron server would remove the"}],"source_content_type":"text/x-python","patch_set":1,"id":"9cd41f3f_34c85f9d","line":62,"range":{"start_line":62,"start_character":11,"end_line":62,"end_character":17},"in_reply_to":"fb642e09_d2e0ff83","updated":"2023-07-14 14:01:08.000000000","message":"We do but not here in the db_sync_tool. We overwrite the method to avoid the node from being removed.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"}],"neutron/db/ovn_hash_ring_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a514d60bdef09afe96d28d2aeda5c1eb7a054170","unresolved":true,"context_lines":[{"line_number":104,"context_line":"        return query.count()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def remove_node_by_uuid(context, node_uuid):"},{"line_number":108,"context_line":"    with db_api.CONTEXT_WRITER.using(context):"},{"line_number":109,"context_line":"        context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":110,"context_line":"            ovn_models.OVNHashRing.node_uuid \u003d\u003d node_uuid).delete()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ef85a5d7_8f2bc458","line":107,"updated":"2023-07-14 13:54:44.000000000","message":"nit: I would move this method closer to \"remove_nodes_from_host\"","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fff3157be942016389a886b0acdb14d8be9f8f63","unresolved":true,"context_lines":[{"line_number":104,"context_line":"        return query.count()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def remove_node_by_uuid(context, node_uuid):"},{"line_number":108,"context_line":"    with db_api.CONTEXT_WRITER.using(context):"},{"line_number":109,"context_line":"        context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":110,"context_line":"            ovn_models.OVNHashRing.node_uuid \u003d\u003d node_uuid).delete()"}],"source_content_type":"text/x-python","patch_set":1,"id":"f3adf3bc_1110a5ab","line":107,"in_reply_to":"2d6ab572_73ef58e5","updated":"2023-07-14 13:58:12.000000000","message":"I know but just to have both methods closer. This is just a nit","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"de7f422bd3a2b7d35969b23e943803611f59978d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        return query.count()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def remove_node_by_uuid(context, node_uuid):"},{"line_number":108,"context_line":"    with db_api.CONTEXT_WRITER.using(context):"},{"line_number":109,"context_line":"        context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":110,"context_line":"            ovn_models.OVNHashRing.node_uuid \u003d\u003d node_uuid).delete()"}],"source_content_type":"text/x-python","patch_set":1,"id":"a64f70bf_955845e6","line":107,"in_reply_to":"decc264f_77280eec","updated":"2023-07-24 08:55:45.000000000","message":"Done","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0a687ae46a8843b840676e2f26fe0e7e9d59f2bb","unresolved":true,"context_lines":[{"line_number":104,"context_line":"        return query.count()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def remove_node_by_uuid(context, node_uuid):"},{"line_number":108,"context_line":"    with db_api.CONTEXT_WRITER.using(context):"},{"line_number":109,"context_line":"        context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":110,"context_line":"            ovn_models.OVNHashRing.node_uuid \u003d\u003d node_uuid).delete()"}],"source_content_type":"text/x-python","patch_set":1,"id":"decc264f_77280eec","line":107,"in_reply_to":"ef85a5d7_8f2bc458","updated":"2023-07-14 14:01:08.000000000","message":"Done","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"354e08106520a32875d669287e9b97bb197fcd0e","unresolved":true,"context_lines":[{"line_number":104,"context_line":"        return query.count()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def remove_node_by_uuid(context, node_uuid):"},{"line_number":108,"context_line":"    with db_api.CONTEXT_WRITER.using(context):"},{"line_number":109,"context_line":"        context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":110,"context_line":"            ovn_models.OVNHashRing.node_uuid \u003d\u003d node_uuid).delete()"}],"source_content_type":"text/x-python","patch_set":1,"id":"2d6ab572_73ef58e5","line":107,"in_reply_to":"ef85a5d7_8f2bc458","updated":"2023-07-14 13:56:27.000000000","message":"I think this removes one particular node and not all the nodes form the host.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c69e24dc3e69be15ae989e61dc482bd2c1a47c0f","unresolved":true,"context_lines":[{"line_number":103,"context_line":"    return query.count()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def count_nodes_from_host(context, group_name):"},{"line_number":107,"context_line":"    with db_api.CONTEXT_READER.using(context):"},{"line_number":108,"context_line":"        query \u003d context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":109,"context_line":"            ovn_models.OVNHashRing.group_name \u003d\u003d group_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fe03bd4b_98254956","line":106,"updated":"2023-07-21 19:13:49.000000000","message":"I guess this could just use the decorator? I\u0027m still confused by this...","commit_id":"e11f61393853613492b9c3fa3caa1a32cf6032f3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"36411a16a3ff4851d39842708e06687b06c1be05","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    return query.count()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def count_nodes_from_host(context, group_name):"},{"line_number":107,"context_line":"    with db_api.CONTEXT_READER.using(context):"},{"line_number":108,"context_line":"        query \u003d context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":109,"context_line":"            ovn_models.OVNHashRing.group_name \u003d\u003d group_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"a27cafbb_e6623ae4","line":106,"in_reply_to":"1a160ea0_92fbcc6c","updated":"2023-08-01 09:47:48.000000000","message":"Done","commit_id":"e11f61393853613492b9c3fa3caa1a32cf6032f3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"a856d4f3d70d9ea862391f1c70f0e9bb9eacc1da","unresolved":true,"context_lines":[{"line_number":103,"context_line":"    return query.count()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def count_nodes_from_host(context, group_name):"},{"line_number":107,"context_line":"    with db_api.CONTEXT_READER.using(context):"},{"line_number":108,"context_line":"        query \u003d context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":109,"context_line":"            ovn_models.OVNHashRing.group_name \u003d\u003d group_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a160ea0_92fbcc6c","line":106,"in_reply_to":"325c5e63_de887e44","updated":"2023-08-01 09:06:09.000000000","message":"In this case I think I will just go ahead and change it ? I want to move on with these patches","commit_id":"e11f61393853613492b9c3fa3caa1a32cf6032f3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fcb08cf8fc5b9737e0e543d770ff20b990dc057b","unresolved":true,"context_lines":[{"line_number":103,"context_line":"    return query.count()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def count_nodes_from_host(context, group_name):"},{"line_number":107,"context_line":"    with db_api.CONTEXT_READER.using(context):"},{"line_number":108,"context_line":"        query \u003d context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":109,"context_line":"            ovn_models.OVNHashRing.group_name \u003d\u003d group_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"325c5e63_de887e44","line":106,"in_reply_to":"aa6f5b04_f2a4800e","updated":"2023-07-31 20:29:20.000000000","message":"I would just wait to see if Rodolfo has a preference, I just don\u0027t know the answer. Like you said, the code should behave the same.","commit_id":"e11f61393853613492b9c3fa3caa1a32cf6032f3"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"de7f422bd3a2b7d35969b23e943803611f59978d","unresolved":true,"context_lines":[{"line_number":103,"context_line":"    return query.count()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"def count_nodes_from_host(context, group_name):"},{"line_number":107,"context_line":"    with db_api.CONTEXT_READER.using(context):"},{"line_number":108,"context_line":"        query \u003d context.session.query(ovn_models.OVNHashRing).filter("},{"line_number":109,"context_line":"            ovn_models.OVNHashRing.group_name \u003d\u003d group_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"aa6f5b04_f2a4800e","line":106,"in_reply_to":"fe03bd4b_98254956","updated":"2023-07-24 08:55:45.000000000","message":"I guess we can use the decorators instead of the context manager (with db_api...). The output will be the same, do I change it now or wait if we need a new patch-set ?","commit_id":"e11f61393853613492b9c3fa3caa1a32cf6032f3"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b0636e62af238da68777c472838ad939ee2067d4","unresolved":true,"context_lines":[{"line_number":286,"context_line":"                               resources.SECURITY_GROUP_RULE,"},{"line_number":287,"context_line":"                               events.BEFORE_DELETE)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _remove_node_from_hash_ring(self, *args, **kwargs):"},{"line_number":290,"context_line":"        if self.node_uuid is None:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        admin_context \u003d n_context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"80e46100_a6fec075","line":289,"range":{"start_line":289,"start_character":42,"end_line":289,"end_character":57},"updated":"2023-07-14 13:35:47.000000000","message":"This probably remains from the previous version but since we technically introduce a new private method, I think we can remove it as it appears it\u0027s not used.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"19563e7edcac95d0b2995c6cc0a28c74deffb0ee","unresolved":true,"context_lines":[{"line_number":286,"context_line":"                               resources.SECURITY_GROUP_RULE,"},{"line_number":287,"context_line":"                               events.BEFORE_DELETE)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _remove_node_from_hash_ring(self, *args, **kwargs):"},{"line_number":290,"context_line":"        if self.node_uuid is None:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        admin_context \u003d n_context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"dd1fcdc5_5bdbbd16","line":289,"range":{"start_line":289,"start_character":42,"end_line":289,"end_character":57},"in_reply_to":"80e46100_a6fec075","updated":"2023-07-14 13:53:23.000000000","message":"The signal.signal() method will pass some parameters to the handler but, we just do not use them, see: https://docs.python.org/3/library/signal.html#signal.signal\n\n\"The handler is called with two arguments: the signal number and the current stack frame (None or a frame object; for a description of frame objects, see the description in the type hierarchy or see the attribute descriptions in the inspect module).\"","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d6fb4397fffeff9d35a3939327237e9f23fb8dd0","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                               resources.SECURITY_GROUP_RULE,"},{"line_number":287,"context_line":"                               events.BEFORE_DELETE)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _remove_node_from_hash_ring(self, *args, **kwargs):"},{"line_number":290,"context_line":"        if self.node_uuid is None:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        admin_context \u003d n_context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":1,"id":"b4b252f7_8bf41fa9","line":289,"range":{"start_line":289,"start_character":42,"end_line":289,"end_character":57},"in_reply_to":"dd1fcdc5_5bdbbd16","updated":"2023-07-14 13:55:32.000000000","message":"Ah, right. Thanks.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b0636e62af238da68777c472838ad939ee2067d4","unresolved":true,"context_lines":[{"line_number":287,"context_line":"                               events.BEFORE_DELETE)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _remove_node_from_hash_ring(self, *args, **kwargs):"},{"line_number":290,"context_line":"        if self.node_uuid is None:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":293,"context_line":"        ovn_hash_ring_db.remove_node_by_uuid("}],"source_content_type":"text/x-python","patch_set":1,"id":"65bd197f_206d548f","line":290,"updated":"2023-07-14 13:35:47.000000000","message":"nit: I\u0027d leave a comment here that this means this worker type doesn\u0027t use hash ring and doesn\u0027t process ovsdb events.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"75e8823986bcc5c72d9b370d54e4befbef5417c9","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                               events.BEFORE_DELETE)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _remove_node_from_hash_ring(self, *args, **kwargs):"},{"line_number":290,"context_line":"        if self.node_uuid is None:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":293,"context_line":"        ovn_hash_ring_db.remove_node_by_uuid("}],"source_content_type":"text/x-python","patch_set":1,"id":"fe1a2981_24ec1868","line":290,"in_reply_to":"29da3c1a_2a74656f","updated":"2023-07-18 09:24:41.000000000","message":"Done","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"19563e7edcac95d0b2995c6cc0a28c74deffb0ee","unresolved":true,"context_lines":[{"line_number":287,"context_line":"                               events.BEFORE_DELETE)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _remove_node_from_hash_ring(self, *args, **kwargs):"},{"line_number":290,"context_line":"        if self.node_uuid is None:"},{"line_number":291,"context_line":"            return"},{"line_number":292,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":293,"context_line":"        ovn_hash_ring_db.remove_node_by_uuid("}],"source_content_type":"text/x-python","patch_set":1,"id":"29da3c1a_2a74656f","line":290,"in_reply_to":"65bd197f_206d548f","updated":"2023-07-14 13:53:23.000000000","message":"++","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a514d60bdef09afe96d28d2aeda5c1eb7a054170","unresolved":true,"context_lines":[{"line_number":313,"context_line":"        themselves to the hash ring."},{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        # Attempt to remove the node from the ring when the worker stops"},{"line_number":316,"context_line":"        atexit.register(self._remove_node_from_hash_ring)"},{"line_number":317,"context_line":"        signal.signal(signal.SIGTERM, self._remove_node_from_hash_ring)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":320,"context_line":"        if not self._hash_ring_probe_event.is_set():"}],"source_content_type":"text/x-python","patch_set":1,"id":"c049adb7_5aec4ddb","line":317,"range":{"start_line":316,"start_character":8,"end_line":317,"end_character":71},"updated":"2023-07-14 13:54:44.000000000","message":"Why moving these registers from pre_fork to the post_fork phase?","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"55248f70aa5b8c7b055b8301abe129fdac744daf","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        themselves to the hash ring."},{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        # Attempt to remove the node from the ring when the worker stops"},{"line_number":316,"context_line":"        atexit.register(self._remove_node_from_hash_ring)"},{"line_number":317,"context_line":"        signal.signal(signal.SIGTERM, self._remove_node_from_hash_ring)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":320,"context_line":"        if not self._hash_ring_probe_event.is_set():"}],"source_content_type":"text/x-python","patch_set":1,"id":"0514971e_7c42b36c","line":317,"range":{"start_line":316,"start_character":8,"end_line":317,"end_character":71},"in_reply_to":"99b7b938_046e26a8","updated":"2023-07-14 14:22:38.000000000","message":"In the bug that we saw the hash ring rendering empty it wasn\u0027t the API workers that were being killed by the \"periodic worker\". That was triggering the clean up method and removing the nodes from the ring.\n\nFor this new approach I think we are much more granular and care about the API workers, which makes more sense cause they are the ones that are added to the ring.\n\nAnd when the hash ring was implemented I don\u0027t think we accounted for workers dying at all, so the main thread made sense cause it was just a way to clean up the ovn_hash_ring table when the service stopped.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0a687ae46a8843b840676e2f26fe0e7e9d59f2bb","unresolved":true,"context_lines":[{"line_number":313,"context_line":"        themselves to the hash ring."},{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        # Attempt to remove the node from the ring when the worker stops"},{"line_number":316,"context_line":"        atexit.register(self._remove_node_from_hash_ring)"},{"line_number":317,"context_line":"        signal.signal(signal.SIGTERM, self._remove_node_from_hash_ring)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":320,"context_line":"        if not self._hash_ring_probe_event.is_set():"}],"source_content_type":"text/x-python","patch_set":1,"id":"ee87a8d2_88f183e6","line":317,"range":{"start_line":316,"start_character":8,"end_line":317,"end_character":71},"in_reply_to":"c049adb7_5aec4ddb","updated":"2023-07-14 14:01:08.000000000","message":"In my tests apparently the signal was bound to the main thread and wasn\u0027t being invoked when I manually killed the neutron API workers. I then moved it here on the post_fork so they are bound to the new process that was spawned. Tested locally and it works, also makes sense to only execute this for the workers that actually invoke _setup_hash_ring()","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dc8ea90ec725c5e25d8ba418b29b0d53f11f0ba8","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        themselves to the hash ring."},{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        # Attempt to remove the node from the ring when the worker stops"},{"line_number":316,"context_line":"        atexit.register(self._remove_node_from_hash_ring)"},{"line_number":317,"context_line":"        signal.signal(signal.SIGTERM, self._remove_node_from_hash_ring)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        admin_context \u003d n_context.get_admin_context()"},{"line_number":320,"context_line":"        if not self._hash_ring_probe_event.is_set():"}],"source_content_type":"text/x-python","patch_set":1,"id":"99b7b938_046e26a8","line":317,"range":{"start_line":316,"start_character":8,"end_line":317,"end_character":71},"in_reply_to":"ee87a8d2_88f183e6","updated":"2023-07-14 14:09:01.000000000","message":"Actually how was that working? Only when the main process (not thread) was stopped, the sigterm hook was called. If each worker will deal with its own hash ring, that makes sense.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b0636e62af238da68777c472838ad939ee2067d4","unresolved":true,"context_lines":[{"line_number":335,"context_line":"                                                       self.hash_ring_group)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":338,"context_line":"        num_nodes \u003d ovn_hash_ring_db.count_nodes_from_host("},{"line_number":339,"context_line":"            admin_context, self.hash_ring_group)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if num_nodes \u003e api_workers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"c679d1fa_55c04902","line":338,"updated":"2023-07-14 13:35:47.000000000","message":"Don\u0027t we care only about online nodes? if there is a leftover then the node will be dead after some time and that shouldn\u0027t lead to missed events. I\u0027m not against checking the leftovers but then it\u0027s not a critical thing.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"d6fb4397fffeff9d35a3939327237e9f23fb8dd0","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                                                       self.hash_ring_group)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":338,"context_line":"        num_nodes \u003d ovn_hash_ring_db.count_nodes_from_host("},{"line_number":339,"context_line":"            admin_context, self.hash_ring_group)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if num_nodes \u003e api_workers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f00fe7e2_28cee325","line":338,"in_reply_to":"3b1871f3_d8503329","updated":"2023-07-14 13:55:32.000000000","message":"Aha, thanks.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"de7f422bd3a2b7d35969b23e943803611f59978d","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                                                       self.hash_ring_group)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":338,"context_line":"        num_nodes \u003d ovn_hash_ring_db.count_nodes_from_host("},{"line_number":339,"context_line":"            admin_context, self.hash_ring_group)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if num_nodes \u003e api_workers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f3ec7d25_371d142d","line":338,"in_reply_to":"4ad80d0f_cb803a5c","updated":"2023-07-24 08:55:45.000000000","message":"Done","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0a687ae46a8843b840676e2f26fe0e7e9d59f2bb","unresolved":true,"context_lines":[{"line_number":335,"context_line":"                                                       self.hash_ring_group)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":338,"context_line":"        num_nodes \u003d ovn_hash_ring_db.count_nodes_from_host("},{"line_number":339,"context_line":"            admin_context, self.hash_ring_group)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if num_nodes \u003e api_workers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e5269178_6965965a","line":338,"in_reply_to":"6a532c7a_8a563276","updated":"2023-07-14 14:01:08.000000000","message":"I can move it there, the only reason I added it here is because this is only executed when registering the nodes so it won\u0027t be called over and over again.\n\nBut let me know, if you think the maintenance thread should do it, I can move it there yeah.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a514d60bdef09afe96d28d2aeda5c1eb7a054170","unresolved":true,"context_lines":[{"line_number":335,"context_line":"                                                       self.hash_ring_group)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":338,"context_line":"        num_nodes \u003d ovn_hash_ring_db.count_nodes_from_host("},{"line_number":339,"context_line":"            admin_context, self.hash_ring_group)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if num_nodes \u003e api_workers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6a532c7a_8a563276","line":338,"in_reply_to":"c679d1fa_55c04902","updated":"2023-07-14 13:54:44.000000000","message":"I agree with this comment. We should leave this check to the maintenance mode. Actually we have a \"HashRingHealthCheckPeriodics\" class that could include that check.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"19563e7edcac95d0b2995c6cc0a28c74deffb0ee","unresolved":true,"context_lines":[{"line_number":335,"context_line":"                                                       self.hash_ring_group)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":338,"context_line":"        num_nodes \u003d ovn_hash_ring_db.count_nodes_from_host("},{"line_number":339,"context_line":"            admin_context, self.hash_ring_group)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if num_nodes \u003e api_workers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3b1871f3_d8503329","line":338,"in_reply_to":"c679d1fa_55c04902","updated":"2023-07-14 13:53:23.000000000","message":"Problem is the way that we do the heartbeat, we mark all entries for a specific host as online, meaning that the leftover node will appear as online too. This was done as an optimization to avoid multiple writes to the DB for each worker when heartbeating (could be changed tho).","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"55248f70aa5b8c7b055b8301abe129fdac744daf","unresolved":true,"context_lines":[{"line_number":335,"context_line":"                                                       self.hash_ring_group)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":338,"context_line":"        num_nodes \u003d ovn_hash_ring_db.count_nodes_from_host("},{"line_number":339,"context_line":"            admin_context, self.hash_ring_group)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if num_nodes \u003e api_workers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4ad80d0f_cb803a5c","line":338,"in_reply_to":"cc086eac_abbb88c8","updated":"2023-07-14 14:22:38.000000000","message":"The advantage of the maintenance task is that this will be logged over and over until someone fixes it. While here it will only log every time a worker is restarted. So if it happens only once this message may get lost.\n\nI will move it to the maintenance task and test to see","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dc8ea90ec725c5e25d8ba418b29b0d53f11f0ba8","unresolved":true,"context_lines":[{"line_number":335,"context_line":"                                                       self.hash_ring_group)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":338,"context_line":"        num_nodes \u003d ovn_hash_ring_db.count_nodes_from_host("},{"line_number":339,"context_line":"            admin_context, self.hash_ring_group)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        if num_nodes \u003e api_workers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"cc086eac_abbb88c8","line":338,"in_reply_to":"e5269178_6965965a","updated":"2023-07-14 14:09:01.000000000","message":"This is ok but I though \"HashRingHealthCheckPeriodics\" could be a better place to check that. Actually if you call this here, if we have 20 API workers, we\u0027ll see this critical error 20 times.","commit_id":"d35c70834b4ddddd159a1413851b0fe7e0c31b63"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/maintenance.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"65bfde51e330b05071e0b81b873d9dfb4f469b41","unresolved":true,"context_lines":[{"line_number":1114,"context_line":"                         \u0027host \"%s\". Something is not right and OVSDB \u0027"},{"line_number":1115,"context_line":"                         \u0027events could be missed. Please check the status \u0027"},{"line_number":1116,"context_line":"                         \u0027of the service\u0027, num_nodes, api_workers,"},{"line_number":1117,"context_line":"                         cfg.CONF.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f7811194_808b08f7","line":1117,"updated":"2023-07-14 15:22:03.000000000","message":"What is the appropriate resolution if this happens? Is it typically restarting the workers? Maybe that info could be added to the bug? I\u0027m just assuming it\u0027s a matter of time before one of our customers sees it as well. Thanks.","commit_id":"843cde48b16569dfc66dc086d0c2d8f8751e6736"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"99544d015310cae8ca54bdb836fec35c5b8066ad","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"                         \u0027host \"%s\". Something is not right and OVSDB \u0027"},{"line_number":1115,"context_line":"                         \u0027events could be missed. Please check the status \u0027"},{"line_number":1116,"context_line":"                         \u0027of the service\u0027, num_nodes, api_workers,"},{"line_number":1117,"context_line":"                         cfg.CONF.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fac3b6d_e9e9ba7e","line":1117,"in_reply_to":"2d9a8e08_a2836ec4","updated":"2023-07-24 08:55:55.000000000","message":"Done","commit_id":"843cde48b16569dfc66dc086d0c2d8f8751e6736"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"732123e8f7a563c0e5dbd9f0714d770835f1e563","unresolved":true,"context_lines":[{"line_number":1114,"context_line":"                         \u0027host \"%s\". Something is not right and OVSDB \u0027"},{"line_number":1115,"context_line":"                         \u0027events could be missed. Please check the status \u0027"},{"line_number":1116,"context_line":"                         \u0027of the service\u0027, num_nodes, api_workers,"},{"line_number":1117,"context_line":"                         cfg.CONF.host)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2d9a8e08_a2836ec4","line":1117,"in_reply_to":"f7811194_808b08f7","updated":"2023-07-14 15:42:41.000000000","message":"Yeah, restarting the service fixes it. But this is not very common to be honest, we identified this issue as a side effect of another problem (an overflow error that killed the workers). I don\u0027t really expect this to happen at all but, if it does for whatever reason, I hope these logs helps us to detect the issue. Debugging the hash ring before all these patches was a real challenge, but I think it\u0027s much better now.\n\nI will improve this message with your suggestion too.","commit_id":"843cde48b16569dfc66dc086d0c2d8f8751e6736"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a5b89a01c8138daeabdd084ca15ce12fa345f190","unresolved":true,"context_lines":[{"line_number":1108,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":1109,"context_line":"        num_nodes \u003d hash_ring_db.count_nodes_from_host(self.ctx, self._group)"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"        if num_nodes \u003e api_workers:"},{"line_number":1112,"context_line":"            LOG.critical("},{"line_number":1113,"context_line":"                \u0027The number of nodes in the Hash Ring (%d) is higher than \u0027"},{"line_number":1114,"context_line":"                \u0027the number of API workers (%d) for host \"%s\". Something is \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"a90dd1a2_5b444660","line":1111,"updated":"2023-07-14 16:11:47.000000000","message":"Ok, so I had another question. Can the opposite be true, workers \u003e nodes? Should this be !\u003d ? I don\u0027t know how it could happen, but the \"out of sync\" comment above maybe implies it can? You are the hash ring expert :)","commit_id":"96a12928a30e2d38cecc23573562de37a38952db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"6aa3da5241e7816e0009fefe0a290b67df269658","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":1109,"context_line":"        num_nodes \u003d hash_ring_db.count_nodes_from_host(self.ctx, self._group)"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"        if num_nodes \u003e api_workers:"},{"line_number":1112,"context_line":"            LOG.critical("},{"line_number":1113,"context_line":"                \u0027The number of nodes in the Hash Ring (%d) is higher than \u0027"},{"line_number":1114,"context_line":"                \u0027the number of API workers (%d) for host \"%s\". Something is \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1d4ae599_11a62136","line":1111,"in_reply_to":"189e6371_3c682e18","updated":"2023-07-24 08:56:05.000000000","message":"Done","commit_id":"96a12928a30e2d38cecc23573562de37a38952db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"75e8823986bcc5c72d9b370d54e4befbef5417c9","unresolved":true,"context_lines":[{"line_number":1108,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":1109,"context_line":"        num_nodes \u003d hash_ring_db.count_nodes_from_host(self.ctx, self._group)"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"        if num_nodes \u003e api_workers:"},{"line_number":1112,"context_line":"            LOG.critical("},{"line_number":1113,"context_line":"                \u0027The number of nodes in the Hash Ring (%d) is higher than \u0027"},{"line_number":1114,"context_line":"                \u0027the number of API workers (%d) for host \"%s\". Something is \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"c8911d49_dbd570a1","line":1111,"in_reply_to":"a0fdf8f5_37b17d7c","updated":"2023-07-18 09:24:41.000000000","message":"Does it answer this ?","commit_id":"96a12928a30e2d38cecc23573562de37a38952db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"25f27704948d44fa135e4a062633aff4e985266a","unresolved":true,"context_lines":[{"line_number":1108,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":1109,"context_line":"        num_nodes \u003d hash_ring_db.count_nodes_from_host(self.ctx, self._group)"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"        if num_nodes \u003e api_workers:"},{"line_number":1112,"context_line":"            LOG.critical("},{"line_number":1113,"context_line":"                \u0027The number of nodes in the Hash Ring (%d) is higher than \u0027"},{"line_number":1114,"context_line":"                \u0027the number of API workers (%d) for host \"%s\". Something is \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"a0fdf8f5_37b17d7c","line":1111,"in_reply_to":"a90dd1a2_5b444660","updated":"2023-07-14 19:22:17.000000000","message":"It\u0027s a good point, I wouldn\u0027t expect less or more, otherwise I think we have a bug in Neutron. If I ask for X number of workers (or if it\u0027s calculated using the number of CPUs) I expect to get exactly that number.\n\nIs that a fair assumption ? Cause at the moment we match that, all API workers are registered as nodes in the hash ring [0][1]\n\n[0] https://github.com/openstack/neutron/blob/ce5c60640c8c4ad1cf099eb3f3802d3f49475e9a/neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py#L344-L345\n\n[1] https://github.com/openstack/neutron/blob/ce5c60640c8c4ad1cf099eb3f3802d3f49475e9a/neutron/service.py#L331","commit_id":"96a12928a30e2d38cecc23573562de37a38952db"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5f83c47818ff43e749682c80136cda20ef2e3d1a","unresolved":true,"context_lines":[{"line_number":1108,"context_line":"        api_workers \u003d service._get_api_workers()"},{"line_number":1109,"context_line":"        num_nodes \u003d hash_ring_db.count_nodes_from_host(self.ctx, self._group)"},{"line_number":1110,"context_line":""},{"line_number":1111,"context_line":"        if num_nodes \u003e api_workers:"},{"line_number":1112,"context_line":"            LOG.critical("},{"line_number":1113,"context_line":"                \u0027The number of nodes in the Hash Ring (%d) is higher than \u0027"},{"line_number":1114,"context_line":"                \u0027the number of API workers (%d) for host \"%s\". Something is \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"189e6371_3c682e18","line":1111,"in_reply_to":"c8911d49_dbd570a1","updated":"2023-07-19 16:53:25.000000000","message":"Yes, makes sense.","commit_id":"96a12928a30e2d38cecc23573562de37a38952db"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a5b89a01c8138daeabdd084ca15ce12fa345f190","unresolved":true,"context_lines":[{"line_number":1115,"context_line":"                \u0027not right and OVSDB events could be missed because of this. \u0027"},{"line_number":1116,"context_line":"                \u0027Please check the status of the Neutron processes, this can \u0027"},{"line_number":1117,"context_line":"                \u0027happen when the API workers are killed and restarted. \u0027"},{"line_number":1118,"context_line":"                \u0027Restarting the service should fix the issue. see LP \u0027"},{"line_number":1119,"context_line":"                \u0027#2024205 for more information.\u0027,"},{"line_number":1120,"context_line":"                num_nodes, api_workers, cfg.CONF.host)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba6b2ac6_4df25c1b","line":1118,"range":{"start_line":1118,"start_character":60,"end_line":1118,"end_character":61},"updated":"2023-07-14 16:11:47.000000000","message":"s/,","commit_id":"96a12928a30e2d38cecc23573562de37a38952db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"99544d015310cae8ca54bdb836fec35c5b8066ad","unresolved":false,"context_lines":[{"line_number":1115,"context_line":"                \u0027not right and OVSDB events could be missed because of this. \u0027"},{"line_number":1116,"context_line":"                \u0027Please check the status of the Neutron processes, this can \u0027"},{"line_number":1117,"context_line":"                \u0027happen when the API workers are killed and restarted. \u0027"},{"line_number":1118,"context_line":"                \u0027Restarting the service should fix the issue. see LP \u0027"},{"line_number":1119,"context_line":"                \u0027#2024205 for more information.\u0027,"},{"line_number":1120,"context_line":"                num_nodes, api_workers, cfg.CONF.host)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dc004257_2a3f19b0","line":1118,"range":{"start_line":1118,"start_character":60,"end_line":1118,"end_character":61},"in_reply_to":"8b16e791_a8c58052","updated":"2023-07-24 08:55:55.000000000","message":"Done","commit_id":"96a12928a30e2d38cecc23573562de37a38952db"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"25f27704948d44fa135e4a062633aff4e985266a","unresolved":true,"context_lines":[{"line_number":1115,"context_line":"                \u0027not right and OVSDB events could be missed because of this. \u0027"},{"line_number":1116,"context_line":"                \u0027Please check the status of the Neutron processes, this can \u0027"},{"line_number":1117,"context_line":"                \u0027happen when the API workers are killed and restarted. \u0027"},{"line_number":1118,"context_line":"                \u0027Restarting the service should fix the issue. see LP \u0027"},{"line_number":1119,"context_line":"                \u0027#2024205 for more information.\u0027,"},{"line_number":1120,"context_line":"                num_nodes, api_workers, cfg.CONF.host)"}],"source_content_type":"text/x-python","patch_set":3,"id":"8b16e791_a8c58052","line":1118,"range":{"start_line":1118,"start_character":60,"end_line":1118,"end_character":61},"in_reply_to":"ba6b2ac6_4df25c1b","updated":"2023-07-14 19:22:17.000000000","message":"++","commit_id":"96a12928a30e2d38cecc23573562de37a38952db"}]}
