X-Git-Url: https://git.rkrishnan.org/?a=blobdiff_plain;f=src%2Fallmydata%2Fstorage_client.py;h=dd9780f23a8c4efd8eefccd1de47cd3d7f92d060;hb=96eaca6a6dbea0f743694a9836993694f14b2f35;hp=e532db1a68d8658d60d06cd347c25f90ba6b2fa0;hpb=d349f0710b2216cbe854482fd3e95371490670d3;p=tahoe-lafs%2Ftahoe-lafs.git diff --git a/src/allmydata/storage_client.py b/src/allmydata/storage_client.py index e532db1a..dd9780f2 100644 --- a/src/allmydata/storage_client.py +++ b/src/allmydata/storage_client.py @@ -62,10 +62,11 @@ class StorageFarmBroker: I'm also responsible for subscribing to the IntroducerClient to find out about new servers as they are announced by the Introducer. """ - def __init__(self, tub, permute_peers): + def __init__(self, tub, permute_peers, preferred_peers=()): self.tub = tub assert permute_peers # False not implemented yet self.permute_peers = permute_peers + self.preferred_peers = preferred_peers # self.servers maps serverid -> IServer, and keeps track of all the # storage servers that we've heard about. Each descriptor manages its # own Reconnector, and will give us a RemoteReference when we ask @@ -121,10 +122,13 @@ class StorageFarmBroker: def get_servers_for_psi(self, peer_selection_index): # return a list of server objects (IServers) assert self.permute_peers == True + connected_servers = self.get_connected_servers() + preferred_servers = frozenset(s for s in connected_servers if s.get_longname() in self.preferred_peers) def _permuted(server): seed = server.get_permutation_seed() - return sha1(peer_selection_index + seed).digest() - return sorted(self.get_connected_servers(), key=_permuted) + is_unpreferred = server not in preferred_servers + return (is_unpreferred, sha1(peer_selection_index + seed).digest()) + return sorted(connected_servers, key=_permuted) def get_all_serverids(self): return frozenset(self.servers.keys())