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:53 UTC

[08/12] trafficserver git commit: TS-3231: add the proxy.node.config.reconfigure_required metric

TS-3231: add the proxy.node.config.reconfigure_required metric


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

Branch: refs/heads/master
Commit: 52c9e32d701e3f7338b90d8c8d9dea029c6489b8
Parents: acaedef
Author: James Peach <jp...@apache.org>
Authored: Mon Nov 17 12:42:21 2014 -0800
Committer: James Peach <jp...@apache.org>
Committed: Tue Dec 9 13:48:30 2014 -0800

----------------------------------------------------------------------
 cmd/traffic_manager/traffic_manager.cc |  1 +
 lib/records/RecLocal.cc                |  6 ++++++
 mgmt/FileManager.cc                    | 25 ++++++++++++++++++++++++-
 mgmt/FileManager.h                     |  4 ++++
 mgmt/Rollback.cc                       | 28 +++++++++++++++-------------
 mgmt/Rollback.h                        |  8 +++++++-
 mgmt/api/CoreAPI.cc                    |  1 +
 7 files changed, 58 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/52c9e32d/cmd/traffic_manager/traffic_manager.cc
----------------------------------------------------------------------
diff --git a/cmd/traffic_manager/traffic_manager.cc b/cmd/traffic_manager/traffic_manager.cc
index 9c35bad..31576c0 100644
--- a/cmd/traffic_manager/traffic_manager.cc
+++ b/cmd/traffic_manager/traffic_manager.cc
@@ -686,6 +686,7 @@ main(int argc, char **argv)
   statProcessor = new StatProcessor(configFiles);
 
   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);
 
   for (;;) {
     lmgmt->processEventQueue();

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/52c9e32d/lib/records/RecLocal.cc
----------------------------------------------------------------------
diff --git a/lib/records/RecLocal.cc b/lib/records/RecLocal.cc
index aca8eec..0245f08 100644
--- a/lib/records/RecLocal.cc
+++ b/lib/records/RecLocal.cc
@@ -93,7 +93,13 @@ sync_thr(void * data)
           rb->setLastModifiedTime();
         }
       }
+    } else {
+      // If we didn't sync to disk, check whether we need to update ....
+      if (configFiles->isConfigStale()) {
+        RecSetRecordInt("proxy.node.config.reconfigure_required", 1);
+      }
     }
+
     usleep(REC_REMOTE_SYNC_INTERVAL_MS * 1000);
   }
   return NULL;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/52c9e32d/mgmt/FileManager.cc
----------------------------------------------------------------------
diff --git a/mgmt/FileManager.cc b/mgmt/FileManager.cc
index 2ab4952..6352e11 100644
--- a/mgmt/FileManager.cc
+++ b/mgmt/FileManager.cc
@@ -684,7 +684,7 @@ FileManager::rereadConfig()
        entry != NULL; entry = ink_hash_table_iterator_next(bindings, &iterator_state)) {
 
     rb = (Rollback *) ink_hash_table_entry_value(bindings, entry);
-    rb->checkForUserUpdate();
+    rb->checkForUserUpdate(ROLLBACK_CHECK_AND_UPDATE);
   }
   ink_mutex_release(&accessLock);
 
@@ -698,6 +698,29 @@ FileManager::rereadConfig()
   }
 }
 
+bool
+FileManager::isConfigStale()
+{
+  Rollback *rb;
+  InkHashTableEntry *entry;
+  InkHashTableIteratorState iterator_state;
+  bool stale = false;
+
+  ink_mutex_acquire(&accessLock);
+  for (entry = ink_hash_table_iterator_first(bindings, &iterator_state);
+       entry != NULL; entry = ink_hash_table_iterator_next(bindings, &iterator_state)) {
+
+    rb = (Rollback *) ink_hash_table_entry_value(bindings, entry);
+    if (rb->checkForUserUpdate(ROLLBACK_CHECK_ONLY)) {
+      stale = true;
+      break;
+    }
+  }
+
+  ink_mutex_release(&accessLock);
+  return stale;
+}
+
 // void FileManager::displaySnapPage(textBuffer* output, httpResponse& answerHdr)
 //
 //  Generates an HTML page with the add form and the list

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/52c9e32d/mgmt/FileManager.h
----------------------------------------------------------------------
diff --git a/mgmt/FileManager.h b/mgmt/FileManager.h
index eafd86f..d82b48c 100644
--- a/mgmt/FileManager.h
+++ b/mgmt/FileManager.h
@@ -92,6 +92,9 @@ class ExpandingArray;
 //       list of call files being managed by the FileManager.  CALLEE
 //       is responsible for deleting the returned object
 //
+//  isConfigStale() - returns whether the in-memory files might be stale
+//       compared to what is on disk.
+//
 //  takeSnap(const char* snapName) - creates a new snapshot with
 //       passed in name
 //
@@ -112,6 +115,7 @@ public:
   void fileChanged(const char *baseFileName, bool incVersion);
   textBuffer *filesManaged();
   void rereadConfig();
+  bool isConfigStale();
   //SnapResult takeSnap(const char* snapName);
   SnapResult takeSnap(const char *snapName, const char *snapDir);
   //SnapResult restoreSnap(const char* snapName);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/52c9e32d/mgmt/Rollback.cc
----------------------------------------------------------------------
diff --git a/mgmt/Rollback.cc b/mgmt/Rollback.cc
index 5a722ea..b2e2be3 100644
--- a/mgmt/Rollback.cc
+++ b/mgmt/Rollback.cc
@@ -909,7 +909,7 @@ Rollback::setLastModifiedTime()
 //    of creating a new timestamp
 //
 bool
-Rollback::checkForUserUpdate()
+Rollback::checkForUserUpdate(RollBackCheckType how)
 {
 
   struct stat fileInfo;
@@ -929,19 +929,21 @@ Rollback::checkForUserUpdate()
 
   if (fileLastModified < TS_ARCHIVE_STAT_MTIME(fileInfo)) {
 
-    // We've been modified, Roll a new version
-    currentVersion_local = this->getCurrentVersion();
-    r = this->getVersion_ml(currentVersion_local, &buf);
-    if (r == OK_ROLLBACK) {
-      r = this->updateVersion_ml(buf, currentVersion_local);
-      delete buf;
-    }
-    if (r != OK_ROLLBACK) {
-      mgmt_log(stderr, "[Rollback::checkForUserUpdate] Failed to roll changed user file %s: %s",
-               fileName, RollbackStrings[r]);
-    }
+    if (how == ROLLBACK_CHECK_AND_UPDATE) {
+      // We've been modified, Roll a new version
+      currentVersion_local = this->getCurrentVersion();
+      r = this->getVersion_ml(currentVersion_local, &buf);
+      if (r == OK_ROLLBACK) {
+        r = this->updateVersion_ml(buf, currentVersion_local);
+        delete buf;
+      }
+      if (r != OK_ROLLBACK) {
+        mgmt_log(stderr, "[Rollback::checkForUserUpdate] Failed to roll changed user file %s: %s",
+                 fileName, RollbackStrings[r]);
+      }
 
-    mgmt_log(stderr, "User has changed config file %s\n", fileName);
+      mgmt_log(stderr, "User has changed config file %s\n", fileName);
+    }
 
     result = true;
   } else {

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/52c9e32d/mgmt/Rollback.h
----------------------------------------------------------------------
diff --git a/mgmt/Rollback.h b/mgmt/Rollback.h
index 5382343..fc09403 100644
--- a/mgmt/Rollback.h
+++ b/mgmt/Rollback.h
@@ -59,6 +59,12 @@ enum RollBackCodes
   INVALID_VERSION_ROLLBACK
 };
 
+enum RollBackCheckType
+{
+  ROLLBACK_CHECK_AND_UPDATE,
+  ROLLBACK_CHECK_ONLY
+};
+
 class ExpandingArray;
 
 // Stores info about a backup version
@@ -174,7 +180,7 @@ public:
   version_t extractVersionInfo(ExpandingArray * listNames, const char *testFileName);
 
   // Automatically take out lock
-  bool checkForUserUpdate();
+  bool checkForUserUpdate(RollBackCheckType);
   RollBackCodes removeVersion(version_t version);
   RollBackCodes revertToVersion(version_t version);
   RollBackCodes getVersion(version_t version, textBuffer ** buffer);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/52c9e32d/mgmt/api/CoreAPI.cc
----------------------------------------------------------------------
diff --git a/mgmt/api/CoreAPI.cc b/mgmt/api/CoreAPI.cc
index fe11cfc..33351c5 100644
--- a/mgmt/api/CoreAPI.cc
+++ b/mgmt/api/CoreAPI.cc
@@ -413,6 +413,7 @@ Reconfigure()
   configFiles->rereadConfig();  // TM rereads
   lmgmt->signalEvent(MGMT_EVENT_PLUGIN_CONFIG_UPDATE, "*");     // TS rereads
   RecSetRecordInt("proxy.node.config.reconfigure_time", time(NULL));
+  RecSetRecordInt("proxy.node.config.reconfigure_required", 0);
 
   return TS_ERR_OKAY;
 }