Repository: ambari Updated Branches: refs/heads/branch-2.2 f3051f953 -> e23b6e178
AMBARI-15238. Deploying AMS datasource and default dashboards sometimes fails during cluster install. (swagle) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e23b6e17 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e23b6e17 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e23b6e17 Branch: refs/heads/branch-2.2 Commit: e23b6e178b662132018dc99bdee493635527c9e8 Parents: f3051f9 Author: Siddharth Wagle <swa...@hortonworks.com> Authored: Mon Feb 29 18:06:51 2016 -0800 Committer: Siddharth Wagle <swa...@hortonworks.com> Committed: Mon Feb 29 18:06:51 2016 -0800 ---------------------------------------------------------------------- .../package/scripts/metrics_grafana_util.py | 40 +++++++++++++------- 1 file changed, 27 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e23b6e17/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py index eb0b691..593591c 100644 --- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py +++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py @@ -30,7 +30,7 @@ import ambari_simplejson as json import network GRAFANA_CONNECT_TRIES = 5 -GRAFANA_CONNECT_TIMEOUT = 15 +GRAFANA_CONNECT_TIMEOUT = 10 GRAFANA_SEARCH_BULTIN_DASHBOARDS = "/api/search?tag=builtin" GRAFANA_DATASOURCE_URL = "/api/datasources" GRAFANA_DASHBOARDS_URL = "/api/dashboards/db" @@ -40,19 +40,31 @@ Server = namedtuple('Server', [ 'protocol', 'host', 'port', 'user', 'password' ] def perform_grafana_get_call(url, server): grafana_https_enabled = server.protocol.lower() == 'https' + response = None - conn = network.get_http_connection(server.host, - int(server.port), - grafana_https_enabled) + for i in xrange(0, GRAFANA_CONNECT_TRIES): + try: + conn = network.get_http_connection(server.host, + int(server.port), + grafana_https_enabled) - userAndPass = b64encode('{0}:{1}'.format(server.user, server.password)) - headers = { 'Authorization' : 'Basic %s' % userAndPass } + userAndPass = b64encode('{0}:{1}'.format(server.user, server.password)) + headers = { 'Authorization' : 'Basic %s' % userAndPass } - Logger.info("Connecting (GET) to %s:%s%s" % (server.host, server.port, url)) + Logger.info("Connecting (GET) to %s:%s%s" % (server.host, server.port, url)) - conn.request("GET", url, headers = headers) - response = conn.getresponse() - Logger.info("Http response: %s %s" % (response.status, response.reason)) + conn.request("GET", url, headers = headers) + response = conn.getresponse() + Logger.info("Http response: %s %s" % (response.status, response.reason)) + except (httplib.HTTPException, socket.error) as ex: + if i < GRAFANA_CONNECT_TRIES - 1: + time.sleep(GRAFANA_CONNECT_TIMEOUT) + Logger.info("Connection to Grafana failed. Next retry in %s seconds." + % (GRAFANA_CONNECT_TIMEOUT)) + continue + else: + raise Fail("Ambari Metrics Grafana update failed due to: %s" % str(ex)) + pass return response @@ -80,7 +92,8 @@ def perform_grafana_put_call(url, id, payload, server): % (GRAFANA_CONNECT_TIMEOUT)) continue else: - raise Fail("Ambari Metrics Grafana update failed") + raise Fail("Ambari Metrics Grafana update failed due to: %s" % str(ex)) + pass return (response, data) @@ -115,7 +128,8 @@ def perform_grafana_post_call(url, payload, server): % (GRAFANA_CONNECT_TIMEOUT)) continue else: - raise Fail("Ambari Metrics Grafana create failed.") + raise Fail("Ambari Metrics Grafana update failed due to: %s" % str(ex)) + pass return (response, data) @@ -153,7 +167,7 @@ def create_ams_datasource(): response = perform_grafana_get_call(GRAFANA_DATASOURCE_URL, server) create_datasource = True - if response.status == 200: + if response and response.status == 200: datasources = response.read() datasources_json = json.loads(datasources) for i in xrange(0, len(datasources_json)):