You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2014/12/13 01:18:55 UTC

trafficserver git commit: TS-1461: Update traffic_manager to restart with exponential backoff

Repository: trafficserver
Updated Branches:
  refs/heads/master 99682fd3a -> e63b4ac69


TS-1461: Update traffic_manager to restart with exponential backoff


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/e63b4ac6
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/e63b4ac6
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/e63b4ac6

Branch: refs/heads/master
Commit: e63b4ac690ec503c5efb2ad636ac0a4fdce9144a
Parents: 99682fd
Author: Eric Schwartz <es...@yahoo-inc.com>
Authored: Fri Dec 12 16:17:11 2014 -0800
Committer: Bryan Call <bc...@apache.org>
Committed: Fri Dec 12 16:18:08 2014 -0800

----------------------------------------------------------------------
 cmd/traffic_manager/traffic_manager.cc | 30 ++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e63b4ac6/cmd/traffic_manager/traffic_manager.cc
----------------------------------------------------------------------
diff --git a/cmd/traffic_manager/traffic_manager.cc b/cmd/traffic_manager/traffic_manager.cc
index b08cf82..fb3ce44 100644
--- a/cmd/traffic_manager/traffic_manager.cc
+++ b/cmd/traffic_manager/traffic_manager.cc
@@ -361,6 +361,15 @@ Init_Errata_Logging() {
 }
 #endif
 
+static void
+millisleep(int ms) {
+  struct timespec ts;
+
+  ts.tv_sec = ms / 1000;
+  ts.tv_nsec = (ms - ts.tv_sec * 1000) * 1000 * 1000;
+  nanosleep(&ts, NULL); //we use nanosleep instead of sleep because it does not interact with signals
+}
+
 int
 main(int argc, char **argv)
 {
@@ -710,6 +719,8 @@ main(int argc, char **argv)
   RecRegisterStatInt(RECT_NODE, "proxy.node.config.restart_required.manager", 0, RECP_NON_PERSISTENT);
   RecRegisterStatInt(RECT_NODE, "proxy.node.config.restart_required.cop", 0, RECP_NON_PERSISTENT);
 
+  int sleep_time = 0; //sleep_time given in sec
+
   for (;;) {
     lmgmt->processEventQueue();
     lmgmt->pollMgmtProcessServer();
@@ -773,10 +784,19 @@ main(int argc, char **argv)
     }
 
     if (lmgmt->run_proxy && !lmgmt->processRunning()) { /* Make sure we still have a proxy up */
-      if (lmgmt->startProxy())
+      if (sleep_time) {
+        mgmt_log(stderr, "Relaunching proxy after %d sec...", sleep_time);
+        millisleep(1000 * sleep_time); //we use millisleep instead of sleep because it doesnt interfere with signals
+        sleep_time = (sleep_time > 30) ? 60 : sleep_time * 2;
+      } else {
+        sleep_time = 1;
+      }
+      if (lmgmt->startProxy()) {
         just_started = 0;
-      else
+        sleep_time = 0;
+      } else {
         just_started++;
+      }
     } else {                    /* Give the proxy a chance to fire up */
       just_started++;
     }
@@ -792,13 +812,13 @@ main(int argc, char **argv)
         if (WIFSIGNALED(res)) {
           int sig = WTERMSIG(res);
 #ifdef NEED_PSIGNAL
-          mgmt_log(stderr, "[main] Proxy terminated due to Sig %d\n", sig);
+          mgmt_log(stderr, "[main] Proxy terminated due to Sig %d. Relaunching after %d sec...\n", sig, sleep_time);
 #else
-          mgmt_log(stderr, "[main] Proxy terminated due to Sig %d: %s\n", sig, strsignal(sig));
+          mgmt_log(stderr, "[main] Proxy terminated due to Sig %d: %s. Relaunching after %d sec...\n", sig, strsignal(sig), sleep_time);
 #endif /* NEED_PSIGNAL */
         }
       }
-      mgmt_log(stderr, "[main] Proxy launch failed, retrying...\n");
+      mgmt_log(stderr, "[main] Proxy launch failed, retrying after %d sec...\n", sleep_time);
     }
 
   }