Browse Source

Add retries to release.py script (#8021)

pull/8029/head
David Arthur 5 years ago committed by GitHub
parent
commit
0780f0043d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      release.py

23
release.py

@ -60,6 +60,7 @@ import os @@ -60,6 +60,7 @@ import os
import subprocess
import sys
import tempfile
import time
import re
PROJECT_NAME = "kafka"
@ -96,10 +97,11 @@ def print_output(output): @@ -96,10 +97,11 @@ def print_output(output):
for line in output.split('\n'):
print(">", line)
def cmd(action, cmd, *args, **kwargs):
if isinstance(cmd, basestring) and not kwargs.get("shell", False):
cmd = cmd.split()
def cmd(action, cmd_arg, *args, **kwargs):
if isinstance(cmd_arg, basestring) and not kwargs.get("shell", False):
cmd_arg = cmd_arg.split()
allow_failure = kwargs.pop("allow_failure", False)
num_retries = kwargs.pop("num_retries", 0)
stdin_log = ""
if "stdin" in kwargs and isinstance(kwargs["stdin"], basestring):
@ -109,13 +111,20 @@ def cmd(action, cmd, *args, **kwargs): @@ -109,13 +111,20 @@ def cmd(action, cmd, *args, **kwargs):
stdin.seek(0)
kwargs["stdin"] = stdin
print(action, cmd, stdin_log)
print(action, cmd_arg, stdin_log)
try:
output = subprocess.check_output(cmd, *args, stderr=subprocess.STDOUT, **kwargs)
output = subprocess.check_output(cmd_arg, *args, stderr=subprocess.STDOUT, **kwargs)
print_output(output)
except subprocess.CalledProcessError as e:
print_output(e.output)
if num_retries > 0:
kwargs['num_retries'] = num_retries - 1
kwargs['allow_failure'] = allow_failure
print("Retrying... %d remaining retries" % (num_retries - 1))
time.sleep(4. / (num_retries + 1)) # e.g., if retries=3, sleep for 1s, 1.3s, 2s
return cmd(action, cmd_arg, *args, **kwargs)
if allow_failure:
return
@ -153,7 +162,7 @@ def regexReplace(path, pattern, replacement): @@ -153,7 +162,7 @@ def regexReplace(path, pattern, replacement):
def user_ok(msg):
ok = raw_input(msg)
return ok.lower() == 'y'
return ok.strip().lower() == 'y'
def sftp_mkdir(dir):
basedir, dirname = os.path.split(dir)
@ -164,7 +173,7 @@ def sftp_mkdir(dir): @@ -164,7 +173,7 @@ def sftp_mkdir(dir):
cd %s
-mkdir %s
""" % (basedir, dirname)
cmd("Creating '%s' in '%s' in your Apache home directory if it does not exist (errors are ok if the directory already exists)" % (dirname, basedir), "sftp -b - %s@home.apache.org" % apache_id, stdin=cmd_str, allow_failure=True)
cmd("Creating '%s' in '%s' in your Apache home directory if it does not exist (errors are ok if the directory already exists)" % (dirname, basedir), "sftp -b - %s@home.apache.org" % apache_id, stdin=cmd_str, allow_failure=True, num_retries=3)
except subprocess.CalledProcessError:
# This is ok. The command fails if the directory already exists
pass

Loading…
Cancel
Save