wakeConnections: Randomize connections before scanning them

gear/__init__.py:
 Modified Server.wakeConnections() so that it randomizes the
 list of active connections before sending out NOOP's to them.
 This will hopefully spread workload across machines more evenly
 when there are multiple workers per machine.

Reference: https://phabricator.wikimedia.org/T258630

Change-Id: I05dcb9fa383f3aefc8b5b1bb9dd8b3ff6ff7f37d
This commit is contained in:
Ahmon Dancy 2020-07-27 14:46:49 -07:00 committed by Antoine Musso
parent 089471c8fb
commit a160d10735
1 changed files with 8 additions and 1 deletions

View File

@ -15,6 +15,7 @@
import errno
import logging
import os
import random
import select
import six
import socket
@ -3295,7 +3296,13 @@ class Server(BaseClientServer):
def wakeConnections(self, job=None):
p = Packet(constants.RES, constants.NOOP, b'')
for connection in self.active_connections:
# Use a randomized copy of active_connections to try
# to spread workload across the machines that workers are on.
conns = self.active_connections[:]
random.shuffle(conns) # Modifies the list
for connection in conns:
if connection.state == 'SLEEP':
if ((job and job.name in connection.functions) or
(job is None)):