Subject: bug#51472: substitute servers should be preferred according to their coverage rate

From: Maxim Cournoyer <[email-masked]>
Date: Thu, 28 Oct 2021 22:07:39 -0400

Hello,

When using substitute servers discovery, I've noticed that if one of the
substitute servers doesn't have any substitutes available, it'll keep
getting tried instead of others, leading to a slide-show of substitutes
updates such as:

--8<---------------cut here---------------start------------->8---
normalized load on machine '127.0.0.1' is 0.04
building /gnu/store/ajd0hx104702jpz2ycdwgrnyrv8jsp6d-xorg-server-21.1.0.tar.xz.drv...
process 9195 acquired build slot '/var/guix/offload/127.0.0.1:6666/1'
normalized load on machine '127.0.0.1' is 0.04
building /gnu/store/49rqi3wpvdm5pv6in9pamzdvg0wscrl8-xorgproto-2021.5.drv...
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://127.0.0.1:8080'... 100.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
substitute: updating substitutes from 'http://127.0.0.1:8080'... 100.0%
substitute: updating substitutes from 'http://192.168.10.102:80'...   0.0%
--8<---------------cut here---------------end--------------->8---

We should implement some scheme to prefer querying high-substitute
servers first, instead of wasting time querying servers always failed
queries; this would greatly improve performance when using substitute
discovery for example combined with low coverage.

Thanks!

Maxim