#96 configurable query interval and 1 minute max backoff
This commit is contained in:
@@ -190,7 +190,8 @@ def print_version(ctx, param, value):
|
||||
envvar='CLUSTERS')
|
||||
@click.option('--cluster-registry-url', help='URL to cluster registry', envvar='CLUSTER_REGISTRY_URL')
|
||||
@click.option('--kubeconfig-path', type=click.Path(exists=True), help='Path to kubeconfig file', envvar='KUBECONFIG_PATH')
|
||||
def main(port, debug, mock, secret_key, redis_url, clusters, cluster_registry_url, kubeconfig_path):
|
||||
@click.option('--query-interval', type=float, help='Interval in seconds for querying clusters (default: 5)', envvar='QUERY_INTERVAL', default=5)
|
||||
def main(port, debug, mock, secret_key, redis_url, clusters, cluster_registry_url, kubeconfig_path, query_interval):
|
||||
logging.basicConfig(level=logging.DEBUG if debug else logging.INFO)
|
||||
|
||||
store = RedisStore(redis_url) if redis_url else MemoryStore()
|
||||
@@ -212,7 +213,7 @@ def main(port, debug, mock, secret_key, redis_url, clusters, cluster_registry_ur
|
||||
api_server_urls = clusters.split(',') if clusters else []
|
||||
discoverer = StaticClusterDiscoverer(api_server_urls)
|
||||
|
||||
gevent.spawn(update_clusters, cluster_discoverer=discoverer, query_cluster=cluster_query, store=store, debug=debug)
|
||||
gevent.spawn(update_clusters, cluster_discoverer=discoverer, query_cluster=cluster_query, store=store, query_interval=query_interval, debug=debug)
|
||||
|
||||
signal.signal(signal.SIGTERM, exit_gracefully)
|
||||
http_server = gevent.wsgi.WSGIServer(('0.0.0.0', port), app)
|
||||
|
||||
@@ -11,7 +11,7 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def calculate_backoff(tries: int):
|
||||
return random_jitter(expo(tries, factor=2, max_value=120), jitter=4)
|
||||
return random_jitter(expo(tries, factor=2, max_value=60), jitter=4)
|
||||
|
||||
|
||||
def get_short_error_message(e: requests.exceptions.RequestException):
|
||||
@@ -45,7 +45,7 @@ def handle_query_failure(e: Exception, cluster, backoff: dict):
|
||||
return backoff
|
||||
|
||||
|
||||
def update_clusters(cluster_discoverer, query_cluster: callable, store, query_interval=5, debug: bool=False):
|
||||
def update_clusters(cluster_discoverer, query_cluster: callable, store, query_interval: float=5, debug: bool=False):
|
||||
while True:
|
||||
lock = store.acquire_lock()
|
||||
if lock:
|
||||
@@ -92,4 +92,5 @@ def update_clusters(cluster_discoverer, query_cluster: callable, store, query_in
|
||||
logger.exception('Failed to update')
|
||||
finally:
|
||||
store.release_lock(lock)
|
||||
gevent.sleep(random_jitter(1))
|
||||
# sleep 1-2 seconds
|
||||
gevent.sleep(min(random_jitter(1), query_interval))
|
||||
|
||||
Reference in New Issue
Block a user