From a2988361c5699edfc22ca8567fcfb7350db9441f Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Tue, 9 Jun 2015 12:30:16 +0200 Subject: [PATCH 1/2] Retry with host from config when it failed to resolve SRV --- helpers/etcd.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/helpers/etcd.py b/helpers/etcd.py index 72c0995e..c579d481 100644 --- a/helpers/etcd.py +++ b/helpers/etcd.py @@ -104,13 +104,17 @@ class Client: def load_members(self): load_from_srv = False if not self._base_uri: + if not 'discovery_srv' in self._config and not 'host' in self._config: + raise Exception('Neither discovery_srv nor host are defined in etcd section of config') + if 'discovery_srv' in self._config: load_from_srv = True self._members_cache = self.get_peers_urls_from_dns(self._config['discovery_srv']) - elif 'host' in self._config: + + if not self._members_cache and 'host' in self._config: + load_from_srv = False self._members_cache = self.get_client_urls_from_dns(self._config['host']) - else: - raise Exception('Neither discovery_srv nor host are defined in etcd section of config') + self._next_server() response, status_code = self._get('/members') From 57914821d0193fe402234bee28cb6a6bbc6d822e Mon Sep 17 00:00:00 2001 From: Alexander Kukushkin Date: Tue, 9 Jun 2015 12:30:58 +0200 Subject: [PATCH 2/2] Randomize list of etcd cluster members --- helpers/etcd.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/helpers/etcd.py b/helpers/etcd.py index c579d481..4fb39f47 100644 --- a/helpers/etcd.py +++ b/helpers/etcd.py @@ -1,4 +1,5 @@ import logging +import random import requests import socket import sys @@ -124,7 +125,8 @@ class Client: members_cache = [] for member in response if load_from_srv else response['members']: members_cache.extend([m + '/' + self.API_VERSION for m in member['clientURLs']]) - self._members_cache = list(set(members_cache)) # TODO: randomize + self._members_cache = list(set(members_cache)) + random.shuffle(self._members_cache) if load_from_srv: self._next_server() else: