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);
}
}