1
- import urllib2 , json , os , time , base64
1
+ import urllib2 , json , os , time , base64 , ssl
2
2
import logging
3
3
from urllib import urlencode
4
4
import helpers .errors
@@ -28,7 +28,7 @@ def get_client_path(self, path, max_attempts=1):
28
28
request .add_header ("Authorization" , "Basic %s" % base64string )
29
29
response = urllib2 .urlopen (request , timeout = self .timeout ).read ()
30
30
break
31
- except (urllib2 .HTTPError , urllib2 .URLError ) as e :
31
+ except (urllib2 .HTTPError , urllib2 .URLError , ssl . SSLError ) as e :
32
32
attempts += 1
33
33
if attempts < max_attempts :
34
34
logger .warning ("Failed to return %s, trying again. (%s of %s)" % (path , attempts , max_attempts ))
@@ -61,7 +61,7 @@ def current_leader(self):
61
61
if e .code == 404 :
62
62
return None
63
63
raise helpers .errors .CurrentLeaderError ("Etcd is not responding properly" )
64
- except urllib2 .URLError :
64
+ except ( urllib2 .URLError , ssl . SSLError ) :
65
65
raise helpers .errors .CurrentLeaderError ("Etcd is not responding properly" )
66
66
67
67
def members (self ):
@@ -77,7 +77,7 @@ def members(self):
77
77
if e .code == 404 :
78
78
return None
79
79
raise helpers .errors .CurrentLeaderError ("Etcd is not responding properly" )
80
- except urllib2 .URLError :
80
+ except ( urllib2 .URLError , ssl . SSLError ) :
81
81
raise helpers .errors .CurrentLeaderError ("Etcd is not responding properly" )
82
82
83
83
@@ -94,7 +94,7 @@ def attempt_to_acquire_leader(self, value):
94
94
if e .code == 412 :
95
95
logger .info ("Could not take out TTL lock: %s" % e )
96
96
return False
97
- except urllib2 .URLError :
97
+ except ( urllib2 .URLError , ssl . SSLError ) :
98
98
return False
99
99
100
100
def update_leader (self , state_handler ):
@@ -112,7 +112,7 @@ def last_leader_operation(self):
112
112
if e .code == 404 :
113
113
logger .error ("Error updating TTL on ETCD for primary." )
114
114
return None
115
- except urllib2 .URLError :
115
+ except ( urllib2 .URLError , ssl . SSLError ) :
116
116
logger .error ("Error updating TTL on ETCD for primary." )
117
117
return None
118
118
@@ -128,19 +128,17 @@ def leader_unlocked(self):
128
128
return False
129
129
except ValueError :
130
130
return False
131
+ except ssl .SSLError :
132
+ return False
131
133
132
134
def am_i_leader (self , value ):
133
135
try :
134
136
reponse = self .get_client_path ("/leader" )
135
137
logger .info ("Lock owner: %s; I am %s" % (reponse ["node" ]["value" ], value ))
136
138
return reponse ["node" ]["value" ] == value
137
- except urllib2 .HTTPError :
139
+ except ( urllib2 .HTTPError , ssl . SSLError , urllib2 . URLError ) :
138
140
logger .error ("Couldn't reach etcd" )
139
141
return False
140
- except urllib2 .URLError :
141
- logger .error ("Couldn't reach etcd" )
142
- return False
143
-
144
142
145
143
def race (self , path , value ):
146
144
while True :
@@ -152,6 +150,6 @@ def race(self, path, value):
152
150
else :
153
151
logger .warning ("etcd is not ready for connections" )
154
152
time .sleep (10 )
155
- except urllib2 .URLError :
153
+ except ( urllib2 .URLError , ssl . SSLError ) :
156
154
logger .warning ("Issue connecting to etcd" )
157
155
time .sleep (10 )
0 commit comments