def __init__(self, host_provider, expire_time=600, retry_time=60,
invalidation_threshold=0.2):
"""Initialize the host selection.
Args:
host_provider: A ``HostProvider``, used to get the current list
of live hosts.
expire_time: An integer, expire time in seconds.
retry_time: An integer, retry time in seconds.
invalidation_threshold: A float, when the number of entries
being invalidated divided by the number of all valid hosts
is above this threshold, we stop accepting invalidation
requests. We do this to stay on the conservative side to
avoid invalidating hosts too fast to starve requests.
"""
assert host_provider.initialized
# Current host.
self._current = None
# Last host, works even when current host invalided.
self._last = None
# Time when we selected the current host.
self._select_time = None
# Adjust expire time by +/- 10%, but 0 is special for testing purpose.
self._expire_time = expire_time
if expire_time:
self._expire_time = expire_time + int(
random.triangular(-expire_time * 0.1, expire_time * 0.1))
self._retry_time = retry_time
self._invalidation_threshold = invalidation_threshold
# Host name -> time when marked bad.
self._bad_hosts = {}
self._host_provider = host_provider
评论列表
文章目录