Browse Source

Route chat retries through automatic peer selection

master
evgeny 1 week ago
parent
commit
dc34faaada
  1. 6
      src/chat/chat_sync.c
  2. 8
      src/chat/member_sync.c
  3. 2
      src/routing_layer/topo_group.c

6
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);
}
}

8
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,

2
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) {

Loading…
Cancel
Save