Browse Source

Expose overload admission recovery and wait for it in tests

master
evgeny 2 days ago
parent
commit
c9ce8d3a74
  1. 3
      src/stream/stream_network.c
  2. 2
      src/stream/stream_network.h
  3. 3
      tests/test_stream_service.c

3
src/stream/stream_network.c

@ -1209,7 +1209,8 @@ int stream_peer_get_load(struct UTUN_INSTANCE *inst, uint64_t node, struct strea
.required_rate = p->pressure.required_rate, .released_rate = p->pressure.released_rate,
.deadline_ms = p->pressure.deadline_ms, .required_count = p->pressure.required_count, .released_count = p->pressure.released_count,
.request_active = p->pressure.active, .cpu_percent = net->cpu.valid ? net->cpu.average_percent : 0,
.callback_late_ms = net->callback_late_ms, .global_pressure = net->global_pressure};
.callback_late_ms = net->callback_late_ms, .global_pressure = net->global_pressure,
.accepting = !p->pressure.active && !p->cooling};
result.load.queued = p->load.queued; result.load.arrivals = p->load.arrivals; result.load.sent = p->load.sent;
result.load.removed = p->load.removed; result.load.rejected = p->load.rejected;
struct ETCP_CONN *conn = node_conn_direct_get_conn(p->ncd);

2
src/stream/stream_network.h

@ -40,7 +40,7 @@ struct stream_peer_load_info {
double cpu_percent;
uint64_t callback_late_ms;
unsigned required_count, released_count;
int global_pressure, request_active;
int global_pressure, request_active, accepting;
};
int stream_peer_get_load(struct UTUN_INSTANCE *inst, uint64_t peer, struct stream_peer_load_info *info);

3
tests/test_stream_service.c

@ -499,6 +499,9 @@ static void test_pressure(void) {
/* CPU сам по себе не режет выдачи. Подтверждённый backlog нескольких пиров с локальной загрузкой использует общий бюджет. */
static void test_global_pressure(void) {
uint64_t ready_deadline = get_time_tb() + 10000;
while (!source_load().accepting && get_time_tb() < ready_deadline) test_clock_poll(ua, 100);
CHECK(source_load().accepting);
struct STREAM_HANDLE *publisher = NULL, *subscribers[3] = {0}; struct STREAM_RECEIVE *receives[3][2] = {{0}};
struct stream_parameters parameters = {.n = 2, .r = 1, .block_size = STREAM_RS_DEFAULT_SIZE};
CHECK(stream_publish_open(nodes[3], GROUP2, &parameters, &publisher) == STREAM_OK);

Loading…
Cancel
Save