From dc34faaadafeb4a3668661a7e84986815f25b370 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 2 Oct 2026 11:44:46 +0300 Subject: [PATCH] Route chat retries through automatic peer selection --- src/chat/chat_sync.c | 6 +----- src/chat/member_sync.c | 8 +++++++- src/routing_layer/topo_group.c | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/chat/chat_sync.c b/src/chat/chat_sync.c index d92f0966..70263d71 100644 --- a/src/chat/chat_sync.c +++ b/src/chat/chat_sync.c @@ -809,11 +809,7 @@ void chat_sync_retry_channels_on_socket_change(struct UTUN_INSTANCE* inst) { uint64_t gid = strtoull(cs->channels[i].channel_id, NULL, 10); struct TOPO_GROUP* group = topo_groups_find(inst->topo_groups, gid); if (!group || !group->connect) continue; - if (topo_group_connect_active_count(group) == 0) { - DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "%s: socket change — restarting connect for ch=%s (no active connections)", - CS_ID, cs->channels[i].channel_id); - topo_group_connect_restart(group); - } + topo_group_connect_restart(group); } } diff --git a/src/chat/member_sync.c b/src/chat/member_sync.c index d99f34d0..84f252ab 100644 --- a/src/chat/member_sync.c +++ b/src/chat/member_sync.c @@ -707,7 +707,13 @@ static void member_committed(struct UTUN_INSTANCE* inst, const char* ns, uint64_ merkle_sync_changed(inst, ns); struct TOPO_GROUP* g = inst->topo_groups ? topo_groups_find(inst->topo_groups, strtoull(ns, NULL, 10)) : NULL; struct ETCP_CONN* conn = instance_find_conn(inst, node_id); - if (g && g->group_type == TOPO_GROUP_TYPE_CHAT && conn) topo_group_connect_node_once(g, node_id); + if (g && g->group_type == TOPO_GROUP_TYPE_CHAT) { + /* Существующий UP сохраняем; новый транспорт выбирает только автопланировщик. */ + if (conn && conn->links_up && !conn->close_requested && topo_group_new_conn(g, conn) < 0) + DEBUG_WARN(DEBUG_CATEGORY_MEMBER_SYNC, "%s: cannot attach UP member channel=%s node=%016llx", MS_ID, ns, + (unsigned long long)node_id); + topo_group_connect_changed(g); + } } int member_sync_apply_record(struct UTUN_INSTANCE* inst, const char* ch_id, diff --git a/src/routing_layer/topo_group.c b/src/routing_layer/topo_group.c index b9a45bd7..babcc5b7 100644 --- a/src/routing_layer/topo_group.c +++ b/src/routing_layer/topo_group.c @@ -849,7 +849,7 @@ struct TOPO_GROUP* topo_groups_create_group(struct TOPO_GROUPS* g, uint64_t grou while (entry) { struct conn_queue_entry* cqe = (struct conn_queue_entry*)entry->data; if (cqe->conn && cqe->peer_node_id != 0) { - if (group_type == TOPO_GROUP_TYPE_CHAT && db) { + if (group_type == TOPO_GROUP_TYPE_CHAT && db && cqe->conn->links_up && !cqe->conn->close_requested) { /* CHAT: добавляем conn только если пир — член именно этого канала */ uint64_t* chs = NULL; int chn = 0; if (topo_node_sqlite_get_member_channels(db, cqe->peer_node_id, &chs, &chn) == 0) {