Skip to content

Commit 242ac17

Browse files
committed
Merge pull request #163 from opdemand/feature/chef-api-retries
LGTM.
2 parents b22cf85 + 9433bf2 commit 242ac17

1 file changed

Lines changed: 13 additions & 4 deletions

File tree

celerytasks/chef.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import httplib
1212
import json
1313
import re
14+
import time
1415
import urlparse
1516

1617
from chef_rsa import Key
@@ -22,7 +23,7 @@ def ruby_b64encode(value):
2223
"""
2324
b64 = base64.b64encode(value)
2425
for i in xrange(0, len(b64), 60):
25-
yield b64[i:i+60]
26+
yield b64[i:i + 60]
2627

2728

2829
class UTC(datetime.tzinfo):
@@ -116,12 +117,20 @@ def __init__(self, server_url, client_name, client_key):
116117
self.conn = httplib.HTTPSConnection(self.hostname)
117118
self.conn.connect()
118119

119-
def request(self, verb, path, body=''):
120+
def request(self, verb, path, body='', attempts=5, interval=5):
120121
url = self.path + path
121122
headers = create_authorization(
122123
self.headers, verb, url, self.client_key, self.client_name, body)
123-
self.conn.request(verb, url, body=body, headers=headers)
124-
resp = self.conn.getresponse()
124+
# retry all chef api requests
125+
for _ in range(attempts):
126+
self.conn.request(verb, url, body=body, headers=headers)
127+
resp = self.conn.getresponse()
128+
if resp.status != 500:
129+
break
130+
time.sleep(interval)
131+
else:
132+
errmsg = 'Chef API requests failed: {}'.format(path)
133+
raise RuntimeError(errmsg)
125134
return resp.read(), resp.status
126135

127136
def create_databag(self, name):

0 commit comments

Comments
 (0)