]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm/schedule: shuffle candidates, not final placements
authorSage Weil <sage@newdream.net>
Tue, 9 Mar 2021 23:47:34 +0000 (18:47 -0500)
committerSage Weil <sage@newdream.net>
Tue, 16 Mar 2021 12:56:18 +0000 (07:56 -0500)
Otherwise we may end out randomly doubling up on some hosts and none on
others (when we have more than one placement per host).

Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit 8931958580c3d876fb45b2cec864817b4321a1c2)

src/pybind/mgr/cephadm/schedule.py

index 6148b6a181dee7305d78dd92c969dbb73289c54a..785a1bebaf818d21eee0e4f944650d3e53e840a2 100644 (file)
@@ -44,10 +44,6 @@ class SimpleScheduler(BaseScheduler):
         if not host_pool:
             return []
         host_pool = [x for x in host_pool]
-        # gen seed off of self.spec to make shuffling deterministic
-        seed = hash(self.spec.service_name())
-        # shuffle for pseudo random selection
-        random.Random(seed).shuffle(host_pool)
         return host_pool[:count]
 
 
@@ -239,6 +235,10 @@ class HostAssignment(object):
                     f"Filtered out host {h.hostname}: could not verify host allowed virtual ips")
                 logger.debug('Filtered %s down to %s' % (old, hosts))
 
+        # shuffle for pseudo random selection
+        # gen seed off of self.spec to make shuffling deterministic
+        seed = hash(self.spec.service_name())
+        random.Random(seed).shuffle(hosts)
         return hosts
 
     def hosts_with_daemons(self, candidates: List[HostPlacementSpec]) -> List[HostPlacementSpec]: