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

[09/12] trafficserver git commit: TS-3231: track when process restarts are required

TS-3231: track when process restarts are required

Start checking the record update type when we process reconfiguration
events so that we can publish metrics to tell the operator when a
restart is required. Note that is is only as accurate as the
RecordsConfig definitions, so YYMV.

Add the following new metrics:
  proxy.node.config.restart_required.proxy
  proxy.node.config.restart_required.manager
  proxy.node.config.restart_required.cop


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

Branch: refs/heads/master
Commit: f8be3681a0831d842b934628f2a9b31416ddb873
Parents: 52c9e32
Author: James Peach <jp...@apache.org>
Authored: Mon Nov 17 16:44:06 2014 -0800
Committer: James Peach <jp...@apache.org>
Committed: Tue Dec 9 13:48:37 2014 -0800

----------------------------------------------------------------------
 cmd/traffic_manager/traffic_manager.cc |  4 ++++
 lib/records/P_RecCore.cc               | 13 +++++++++++--
 lib/records/P_RecCore.h                |  2 +-
 lib/records/RecLocal.cc                | 20 +++++++++++++++++++-
 mgmt/LocalManager.cc                   |  2 +-
 5 files changed, 36 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f8be3681/cmd/traffic_manager/traffic_manager.cc
----------------------------------------------------------------------
diff --git a/cmd/traffic_manager/traffic_manager.cc b/cmd/traffic_manager/traffic_manager.cc
index 31576c0..d7a37b5 100644
--- a/cmd/traffic_manager/traffic_manager.cc
+++ b/cmd/traffic_manager/traffic_manager.cc
@@ -688,6 +688,10 @@ main(int argc, char **argv)
   RecRegisterStatInt(RECT_NODE, "proxy.node.config.reconfigure_time", time(NULL), RECP_NON_PERSISTENT);
   RecRegisterStatInt(RECT_NODE, "proxy.node.config.reconfigure_required", 0, RECP_NON_PERSISTENT);
 
+  RecRegisterStatInt(RECT_NODE, "proxy.node.config.restart_required.proxy", 0, RECP_NON_PERSISTENT);
+  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);
+
   for (;;) {
     lmgmt->processEventQueue();
     lmgmt->pollMgmtProcessServer();

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f8be3681/lib/records/P_RecCore.cc
----------------------------------------------------------------------
diff --git a/lib/records/P_RecCore.cc b/lib/records/P_RecCore.cc
index 1296fe0..3bcda8c 100644
--- a/lib/records/P_RecCore.cc
+++ b/lib/records/P_RecCore.cc
@@ -798,11 +798,12 @@ RecSyncConfigToTB(textBuffer * tb, bool *inc_version)
 //-------------------------------------------------------------------------
 // RecExecConfigUpdateCbs
 //-------------------------------------------------------------------------
-int
+RecUpdateT
 RecExecConfigUpdateCbs(unsigned int update_required_type)
 {
   RecRecord *r;
   int i, num_records;
+  RecUpdateT update_type = RECU_NULL;
 
   num_records = g_num_records;
   for (i = 0; i < num_records; i++) {
@@ -819,6 +820,14 @@ RecExecConfigUpdateCbs(unsigned int update_required_type)
          }
        */
 
+      if (r->config_meta.update_required) {
+        printf("update (type %#x) required on %s\n", r->config_meta.update_required, r->name);
+
+        if (r->config_meta.update_type > update_type) {
+          update_type = r->config_meta.update_type;
+        }
+      }
+
       if ((r->config_meta.update_required & update_required_type) && (r->config_meta.update_cb_list)) {
         RecConfigUpdateCbList *cur_callback = NULL;
         for (cur_callback = r->config_meta.update_cb_list; cur_callback; cur_callback = cur_callback->next) {
@@ -830,7 +839,7 @@ RecExecConfigUpdateCbs(unsigned int update_required_type)
     rec_mutex_release(&(r->lock));
   }
 
-  return REC_ERR_OKAY;
+  return update_type;
 }
 
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f8be3681/lib/records/P_RecCore.h
----------------------------------------------------------------------
diff --git a/lib/records/P_RecCore.h b/lib/records/P_RecCore.h
index bda0103..0f3e16d 100644
--- a/lib/records/P_RecCore.h
+++ b/lib/records/P_RecCore.h
@@ -95,7 +95,7 @@ int send_push_message();
 int send_pull_message(RecMessageT msg_type);
 int send_register_message(RecRecord * record);
 int recv_message_cb(RecMessage * msg, RecMessageT msg_type, void *cookie);
-int RecExecConfigUpdateCbs(unsigned int update_required_type);
+RecUpdateT RecExecConfigUpdateCbs(unsigned int update_required_type);
 int RecExecStatUpdateFuncs();
 int RecExecRawStatUpdateFuncs();
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f8be3681/lib/records/RecLocal.cc
----------------------------------------------------------------------
diff --git a/lib/records/RecLocal.cc b/lib/records/RecLocal.cc
index 0245f08..10aca66 100644
--- a/lib/records/RecLocal.cc
+++ b/lib/records/RecLocal.cc
@@ -112,8 +112,26 @@ sync_thr(void * data)
 static void *
 config_update_thr(void * /* data */)
 {
+
   while (true) {
-    RecExecConfigUpdateCbs(REC_LOCAL_UPDATE_REQUIRED);
+    switch (RecExecConfigUpdateCbs(REC_LOCAL_UPDATE_REQUIRED)) {
+    case RECU_RESTART_TS:
+      RecSetRecordInt("proxy.node.config.restart_required.proxy", 1);
+      break;
+    case RECU_RESTART_TM:
+      RecSetRecordInt("proxy.node.config.restart_required.proxy", 1);
+      RecSetRecordInt("proxy.node.config.restart_required.manager", 1);
+      break;
+    case RECU_RESTART_TC:
+      RecSetRecordInt("proxy.node.config.restart_required.proxy", 1);
+      RecSetRecordInt("proxy.node.config.restart_required.manager", 1);
+      RecSetRecordInt("proxy.node.config.restart_required.cop", 1);
+      break;
+    case RECU_NULL:
+    case RECU_DYNAMIC:
+      break;
+    }
+
     usleep(REC_CONFIG_UPDATE_INTERVAL_MS * 1000);
   }
   return NULL;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/f8be3681/mgmt/LocalManager.cc
----------------------------------------------------------------------
diff --git a/mgmt/LocalManager.cc b/mgmt/LocalManager.cc
index 4fbbc2b..fc9f148 100644
--- a/mgmt/LocalManager.cc
+++ b/mgmt/LocalManager.cc
@@ -860,7 +860,7 @@ LocalManager::processEventQueue()
     // check if we have a local file update
     if (mh->msg_id == MGMT_EVENT_CONFIG_FILE_UPDATE || mh->msg_id == MGMT_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION) {
       // records.config
-      if (!(strcmp(data_raw, "records.config"))) {
+      if (!(strcmp(data_raw, REC_CONFIG_FILE))) {
         bool incVersion = mh->msg_id == MGMT_EVENT_CONFIG_FILE_UPDATE;
         if (RecReadConfigFile(incVersion) != REC_ERR_OKAY) {
           mgmt_elog(stderr, errno, "[fileUpdated] Config update failed for records.config\n");