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