|
|
|
|
@ -1144,7 +1144,7 @@ static void pressure_tick(struct stream_network *net, uint64_t now) {
|
|
|
|
|
else if (!net->global_candidate) { net->global_candidate = 1; net->global_since_ms = now; } |
|
|
|
|
net->global_pressure = net->global_candidate && now - net->global_since_ms >= STREAM_LOAD_CONFIRM_MS; |
|
|
|
|
if (net->global_pressure) { |
|
|
|
|
uint64_t required = global.growth_rate ? global.growth_rate + global.growth_rate / 10 + 1 : global.queued.bytes / 2 + 1; |
|
|
|
|
uint64_t required = global.growth_rate ? global.growth_rate + global.growth_rate / 100 + 1 : global.queued.bytes / 2 + 1; |
|
|
|
|
for (unsigned pass = 0; pass < net->peer_count && required; pass++) { |
|
|
|
|
struct stream_peer *best = NULL; uint64_t best_rate = 0; |
|
|
|
|
for (struct stream_peer *p = net->peers; p; p = p->next) { |
|
|
|
|
@ -1164,7 +1164,7 @@ static void pressure_tick(struct stream_network *net, uint64_t now) {
|
|
|
|
|
p->busy++; |
|
|
|
|
if (!net->global_pressure && p->load.snapshot.confirmed && !p->pressure.active && !p->cooling) { |
|
|
|
|
uint64_t g = p->load.snapshot.growth_rate; |
|
|
|
|
pressure_begin(p, g ? g + g / 10 + 1 : p->load.queued.bytes / 2 + 1, now); |
|
|
|
|
pressure_begin(p, g ? g + g / 100 + 1 : p->load.queued.bytes / 2 + 1, now); |
|
|
|
|
} |
|
|
|
|
if (p->pressure.active && now >= p->pressure.deadline_ms) { |
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_STREAM, "stream OVERLOAD deadline peer=%llx id=%llu released=%llu required=%llu", |
|
|
|
|
|