瀏覽代碼

HUE-7697 [core] Allow Kerberos Renewer to retry kinit multiple times

jdesjean 8 年之前
父節點
當前提交
bd61cc5f86
共有 1 個文件被更改,包括 15 次插入7 次删除
  1. 15 7
      desktop/core/src/desktop/kt_renewer.py

+ 15 - 7
desktop/core/src/desktop/kt_renewer.py

@@ -33,21 +33,29 @@ def renew_from_kt():
           "-t", CONF.HUE_KEYTAB.get(), # specify keytab
           "-c", CONF.CCACHE_PATH.get(), # specify credentials cache
           CONF.HUE_PRINCIPAL.get()]
-  LOG.info("Reinitting kerberos from keytab: " +
-           " ".join(cmdv))
+  retries = 0
+  max_retries = 3
+  while retries < max_retries:
+     LOG.info("Reinitting kerberos retry attempt %s from keytab %s" % (retries, " ".join(cmdv)))
 
-  subp = subprocess.Popen(cmdv,
+     subp = subprocess.Popen(cmdv,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE,
                           close_fds=True,
                           bufsize=-1)
-  subp.wait()
-  if subp.returncode != 0:
-    LOG.error("Couldn't reinit from keytab! `kinit' exited with %s.\n%s\n%s" % (
+     subp.wait()
+     if subp.returncode != 0:
+       retries = retries + 1
+       LOG.error("Couldn't reinit from keytab! `kinit' exited with %s.\n%s\n%s" % (
               subp.returncode,
               "\n".join(subp.stdout.readlines()),
               "\n".join(subp.stderr.readlines())))
-    sys.exit(subp.returncode)
+       if retries >= max_retries:
+          LOG.error("FATAL: max_retries of %s reached. Exiting..." % max_retries)
+          sys.exit(subp.returncode)
+       time.sleep(3)
+     else:
+       break
 
   global NEED_KRB181_WORKAROUND
   if NEED_KRB181_WORKAROUND is None: