#96 configurable query interval and 1 minute max backoff

This commit is contained in:
Henning Jacobs
2017-01-15 17:19:47 +01:00
parent 1b3819a290
commit 747f520d26
2 changed files with 7 additions and 5 deletions

View File

@@ -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)

View File

@@ -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))