Reject zero CM request ids before creating peer state

This commit is contained in:
evgeny committed 2026-10-24 16:25:27 +02:00
1 parent 8e7fb1f31b
commit 6cfd88afcf
2 files changed
+10 -1

No files matched your search

+2 -1
View File
@@ -129,7 +129,8 @@ BG ping проверяет по одному узлу каждые 100 мс; п
первый подходящий UDP endpoint IPv4/IPv6. Candidate ping работает каждые 2 секунды:
обновляет до трёх кандидатов, пингует активные UDP/STCP-линки и запускает пробы
route_connectivity для неактивных. Без активного линка устаревший замер удаляет
кандидата через 30 секунд; проверка свежести RTT для согласования использует 20 секунд.
кандидата через 30 секунд. Если у READY-транспорта нет текущего RTT, результат
route_connectivity используется только в пределах 20 секунд после пробы.
NAT-детектор откладывает эти пробы, standby переносит их в активную фазу.
Кандидаты упорядочены по RTT, затем node_id. При заполнении кеша кандидат с
+8
View File
@@ -438,6 +438,14 @@ static void test_local_allocation_failures(struct wire_fixture *f) {
assert(!topo_node_find_by_id(created, bootstrap.node_id) && !topo_node_registry_find(&f->groups, bootstrap.node_id));
assert(live_allocations() == before);
}
struct TOPO_NODE* known = topo_node_sqlite_node_load(f->inst.topo_sqlite_db, &f->groups, bootstrap.node_id);
assert(known && topo_node_registry_store(&f->groups, known));
struct CM_DIRECT_REQ invalid_direct = {ETCP_RT_ID_CONN_MGR, CM_SUBCMD_DIRECT_REQ, 0};
cm_handle_direct_req(bootstrap.node_id, created->conn_mgr, (const uint8_t*)&invalid_direct, sizeof(invalid_direct));
struct CM_EXCHANGE_REQ invalid_exchange = {.cmd = ETCP_RT_ID_CONN_MGR, .subcmd = CM_SUBCMD_INTERM_EXCHANGE_REQ};
cm_handle_interm_exchange_req(bootstrap.node_id, created->conn_mgr, &invalid_exchange);
assert(!created->conn_mgr->entries->head);
topo_node_registry_unref(&f->groups, bootstrap.node_id);
assert(sqlite3_close(f->inst.topo_sqlite_db) == SQLITE_OK); f->inst.topo_sqlite_db = NULL;
topo_groups_remove_group(&f->groups, 43); uasync_poll(f->inst.ua, 0);
queue_free(f->groups.group_list); f->groups.group_list = NULL;