This is an automated email from the ASF dual-hosted git repository.

shinrich pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new d8ee0cb  Update logic to watch config files even if they are not 
default
d8ee0cb is described below

commit d8ee0cbcf22170f12f319227d3457539e26441d9
Author: Susan Hinrichs <shinr...@apache.org>
AuthorDate: Thu Oct 11 13:06:35 2018 -0500

    Update logic to watch config files even if they are not default
---
 mgmt/FileManager.cc                       | 28 ++++++++-------
 mgmt/FileManager.h                        | 14 ++++----
 mgmt/Rollback.cc                          |  6 ++--
 mgmt/Rollback.h                           |  9 ++++-
 src/traffic_manager/AddConfigFilesHere.cc | 41 ++++++++++++++--------
 src/traffic_manager/traffic_manager.cc    | 57 +++++--------------------------
 6 files changed, 70 insertions(+), 85 deletions(-)

diff --git a/mgmt/FileManager.cc b/mgmt/FileManager.cc
index 5232b42..c9e8783 100644
--- a/mgmt/FileManager.cc
+++ b/mgmt/FileManager.cc
@@ -104,20 +104,22 @@ FileManager::registerCallback(FileCallbackFunc func)
 //  Pointers to the new objects are stored in the bindings hashtable
 //
 void
-FileManager::addFile(const char *fileName, bool root_access_needed, Rollback 
*parentRollback, unsigned flags)
+FileManager::addFile(const char *fileName, const char *configName, bool 
root_access_needed, Rollback *parentRollback,
+                     unsigned flags)
 {
   ink_mutex_acquire(&accessLock);
-  addFileHelper(fileName, root_access_needed, parentRollback, flags);
+  addFileHelper(fileName, configName, root_access_needed, parentRollback, 
flags);
   ink_mutex_release(&accessLock);
 }
 
 // caller must hold the lock
 void
-FileManager::addFileHelper(const char *fileName, bool root_access_needed, 
Rollback *parentRollback, unsigned flags)
+FileManager::addFileHelper(const char *fileName, const char *configName, bool 
root_access_needed, Rollback *parentRollback,
+                           unsigned flags)
 {
   ink_assert(fileName != nullptr);
 
-  Rollback *rb    = new Rollback(fileName, root_access_needed, parentRollback, 
flags);
+  Rollback *rb    = new Rollback(fileName, configName, root_access_needed, 
parentRollback, flags);
   rb->configFiles = this;
 
   ink_hash_table_insert(bindings, fileName, rb);
@@ -151,19 +153,21 @@ FileManager::getRollbackObj(const char *fileName, 
Rollback **rbPtr)
 //
 //
 void
-FileManager::fileChanged(const char *fileName, bool incVersion)
+FileManager::fileChanged(const char *fileName, const char *configName, bool 
incVersion)
 {
   callbackListable *cb;
-  char *filenameCopy;
+  char *filenameCopy, *confignameCopy;
   Debug("lm", "filename changed %s", fileName);
   ink_mutex_acquire(&cbListLock);
 
   for (cb = cblist.head; cb != nullptr; cb = cb->link.next) {
     // Dup the string for each callback to be
     //  defensive incase it modified when it is not supposed to be
-    filenameCopy = ats_strdup(fileName);
-    (*cb->func)(filenameCopy, incVersion);
+    confignameCopy = ats_strdup(configName);
+    filenameCopy   = ats_strdup(fileName);
+    (*cb->func)(filenameCopy, confignameCopy, incVersion);
     ats_free(filenameCopy);
+    ats_free(confignameCopy);
   }
   ink_mutex_release(&cbListLock);
 }
@@ -228,7 +232,7 @@ FileManager::rereadConfig()
   n = parentFileNeedChange.size();
   for (size_t i = 0; i < n; i++) {
     if (std::find(changedFiles.begin(), changedFiles.end(), 
parentFileNeedChange[i]) == changedFiles.end()) {
-      fileChanged(parentFileNeedChange[i]->getFileName(), true);
+      fileChanged(parentFileNeedChange[i]->getFileName(), 
parentFileNeedChange[i]->getConfigName(), true);
     }
   }
   // INKqa11910
@@ -236,9 +240,9 @@ FileManager::rereadConfig()
   bool found;
   int enabled = 
(int)REC_readInteger("proxy.config.body_factory.enable_customizations", &found);
   if (found && enabled) {
-    fileChanged("proxy.config.body_factory.template_sets_dir", true);
+    fileChanged("proxy.config.body_factory.template_sets_dir", 
"proxy.config.body_factory.template_sets_dir", true);
   }
-  fileChanged("proxy.config.ssl.server.ticket_key.filename", true);
+  fileChanged("proxy.config.ssl.server.ticket_key.filename", 
"proxy.config.ssl.server.ticket_key.filename", true);
 }
 
 bool
@@ -275,7 +279,7 @@ FileManager::configFileChild(const char *parent, const char 
*child, unsigned fla
   int htfound = ink_hash_table_lookup(bindings, parent, &lookup);
   if (htfound) {
     parentRollback = (Rollback *)lookup;
-    addFileHelper(child, parentRollback->rootAccessNeeded(), parentRollback, 
flags);
+    addFileHelper(child, "", parentRollback->rootAccessNeeded(), 
parentRollback, flags);
   }
   ink_mutex_release(&accessLock);
 }
diff --git a/mgmt/FileManager.h b/mgmt/FileManager.h
index 60f26cc..9bd77cb 100644
--- a/mgmt/FileManager.h
+++ b/mgmt/FileManager.h
@@ -30,7 +30,7 @@
 class ExpandingArray;
 class Rollback;
 
-typedef void (*FileCallbackFunc)(char *, bool);
+typedef void (*FileCallbackFunc)(char *, char *, bool);
 
 struct callbackListable {
 public:
@@ -47,7 +47,7 @@ enum lockAction_t {
 //
 //  public functions:
 //
-//  addFile(char*, configFileInfo*) - adds a new config file to be
+//  addFile(char*, char *, configFileInfo*) - adds a new config file to be
 //       managed.  A rollback object is created for the file.
 //       if the file_info ptr is not NULL, a WebFileEdit object
 //       is also created
@@ -65,7 +65,7 @@ enum lockAction_t {
 //       callback function should NOT use the calling thread to
 //       access any Rollback objects or block for a long time
 //
-//  fileChanged(const char* fileName) - called by Rollback objects
+//  fileChanged(const char* fileName, const char *configName) - called by 
Rollback objects
 //       when their contents change.  Triggers callbacks to FileCallbackFuncs
 //
 //  isConfigStale() - returns whether the in-memory files might be stale
@@ -79,10 +79,11 @@ class FileManager
 public:
   FileManager();
   ~FileManager();
-  void addFile(const char *fileName, bool root_access_needed, Rollback 
*parentRollback = nullptr, unsigned flags = 0);
+  void addFile(const char *fileName, const char *configName, bool 
root_access_needed, Rollback *parentRollback = nullptr,
+               unsigned flags = 0);
   bool getRollbackObj(const char *fileName, Rollback **rbPtr);
   void registerCallback(FileCallbackFunc func);
-  void fileChanged(const char *fileName, bool incVersion);
+  void fileChanged(const char *fileName, const char *configName, bool 
incVersion);
   void rereadConfig();
   bool isConfigStale();
   void configFileChild(const char *parent, const char *child, unsigned int 
options);
@@ -92,7 +93,8 @@ private:
   ink_mutex cbListLock; // Protects the CallBack List
   DLL<callbackListable> cblist;
   InkHashTable *bindings;
-  void addFileHelper(const char *fileName, bool root_access_needed, Rollback 
*parentRollback, unsigned flags = 0);
+  void addFileHelper(const char *fileName, const char *configName, bool 
root_access_needed, Rollback *parentRollback,
+                     unsigned flags = 0);
 };
 
 void initializeRegistry(); // implemented in AddConfigFilesHere.cc
diff --git a/mgmt/Rollback.cc b/mgmt/Rollback.cc
index dec9d6f..e299101 100644
--- a/mgmt/Rollback.cc
+++ b/mgmt/Rollback.cc
@@ -52,7 +52,8 @@ constexpr int INVALID_VERSION = -1;
 const char *RollbackStrings[] = {"Rollback Ok", "File was not found", "Version 
was out of date", "System Call Error",
                                  "Invalid Version - Version Numbers Must 
Increase"};
 
-Rollback::Rollback(const char *fileName_, bool root_access_needed_, Rollback 
*parentRollback_, unsigned flags)
+Rollback::Rollback(const char *fileName_, const char *configName_, bool 
root_access_needed_, Rollback *parentRollback_,
+                   unsigned flags)
   : configFiles(nullptr),
     root_access_needed(root_access_needed_),
     parentRollback(parentRollback_),
@@ -86,6 +87,7 @@ Rollback::Rollback(const char *fileName_, bool 
root_access_needed_, Rollback *pa
   // Copy the file name.
   fileNameLen = strlen(fileName_);
   fileName    = ats_strdup(fileName_);
+  configName  = ats_strdup(configName_);
 
   // Extract the file base name.
   fileBaseName = strrchr(fileName, '/');
@@ -479,7 +481,7 @@ Rollback::internalUpdate(TextBuffer *buf, version_t 
newVersion, bool notifyChang
 
   // Post the change to the config file manager
   if (notifyChange && configFiles) {
-    configFiles->fileChanged(fileName, incVersion);
+    configFiles->fileChanged(fileName, configName, incVersion);
   }
 
 UPDATE_CLEANUP:
diff --git a/mgmt/Rollback.h b/mgmt/Rollback.h
index 38d8c94..2ea74e4 100644
--- a/mgmt/Rollback.h
+++ b/mgmt/Rollback.h
@@ -135,7 +135,8 @@ class Rollback
 {
 public:
   // fileName_ should be rooted or a base file name.
-  Rollback(const char *fileName_, bool root_access_needed, Rollback 
*parentRollback = nullptr, unsigned flags = 0);
+  Rollback(const char *fileName_, const char *configName_, bool 
root_access_needed, Rollback *parentRollback = nullptr,
+           unsigned flags = 0);
   ~Rollback();
 
   // Manual take out of lock required
@@ -197,6 +198,11 @@ public:
   {
     return fileName;
   }
+  const char *
+  getConfigName() const
+  {
+    return configName;
+  }
   bool
   isChildRollback() const
   {
@@ -233,6 +239,7 @@ private:
   ink_mutex fileAccessLock;
   char *fileName;
   char *fileBaseName;
+  char *configName;
   size_t fileNameLen;
   bool root_access_needed;
   Rollback *parentRollback;
diff --git a/src/traffic_manager/AddConfigFilesHere.cc 
b/src/traffic_manager/AddConfigFilesHere.cc
index fd3b961..dc816b0 100644
--- a/src/traffic_manager/AddConfigFilesHere.cc
+++ b/src/traffic_manager/AddConfigFilesHere.cc
@@ -36,11 +36,21 @@ extern FileManager *configFiles;
  ****************************************************************************/
 
 void
-testcall(char *foo, bool /* incVersion */)
+testcall(char *foo, char * /*configName */, bool /* incVersion */)
 {
   Debug("lm", "Received Callback that %s has changed", foo);
 }
 
+void
+registerFile(const char *configName, const char *defaultName)
+{
+  bool found        = false;
+  const char *fname = REC_readString(configName, &found);
+  if (!found)
+    fname = defaultName;
+  configFiles->addFile(fname, configName, false);
+}
+
 //
 // initializeRegistry()
 //
@@ -61,19 +71,20 @@ initializeRegistry()
     ink_assert(!"Configuration Object Registry Initialized More than Once");
   }
 
-  configFiles->addFile("logging.yaml", false);
-  configFiles->addFile("storage.config", false);
-  configFiles->addFile("socks.config", false);
-  configFiles->addFile("records.config", false);
-  configFiles->addFile("cache.config", false);
-  configFiles->addFile("ip_allow.config", false);
-  configFiles->addFile("parent.config", false);
-  configFiles->addFile("remap.config", false);
-  configFiles->addFile("volume.config", false);
-  configFiles->addFile("hosting.config", false);
-  configFiles->addFile("plugin.config", false);
-  configFiles->addFile("splitdns.config", false);
-  configFiles->addFile("ssl_multicert.config", false);
-  configFiles->addFile(SSL_SERVER_NAME_CONFIG, false);
+  registerFile("proxy.config.log.config.filename", "logging.yaml");
+  registerFile("", "storage.config");
+  registerFile("proxy.config.socks.socks_config_file", "socks.config");
+  registerFile("records.config", "records.config");
+  registerFile("proxy.config.cache.control.filename", "cache.config");
+  registerFile("proxy.config.cache.ip_allow.filename", "ip_allow.config");
+  registerFile("proxy.config.http.parent_proxy.file", "parent.config");
+  registerFile("proxy.config.url_remap.filename", "remap.config");
+  registerFile("", "volume.config");
+  registerFile("proxy.config.cache.hosting_filename", "hosting.config");
+  registerFile("", "plugin.config");
+  registerFile("proxy.config.dns.splitdns.filename", "splitdns.config");
+  registerFile("proxy.config.ssl.server.multicert.filename", 
"ssl_multicert.config");
+  registerFile("proxy.config.ssl.servername.filename", SSL_SERVER_NAME_CONFIG);
+
   configFiles->registerCallback(testcall);
 }
diff --git a/src/traffic_manager/traffic_manager.cc 
b/src/traffic_manager/traffic_manager.cc
index f1d47f0..87be590 100644
--- a/src/traffic_manager/traffic_manager.cc
+++ b/src/traffic_manager/traffic_manager.cc
@@ -71,7 +71,7 @@ using namespace std::literals;
 LocalManager *lmgmt = nullptr;
 FileManager *configFiles;
 
-static void fileUpdated(char *fname, bool incVersion);
+static void fileUpdated(char *fname, char *configName, bool incVersion);
 static void runAsUser(const char *userName);
 
 #if defined(freebsd)
@@ -948,56 +948,15 @@ SigChldHandler(int /* sig ATS_UNUSED */)
 }
 
 void
-fileUpdated(char *fname, bool incVersion)
+fileUpdated(char *fname, char *configName, bool incVersion)
 {
-  if (strcmp(fname, "remap.config") == 0) {
-    lmgmt->signalFileChange("proxy.config.url_remap.filename");
-
-  } else if (strcmp(fname, "socks.config") == 0) {
-    lmgmt->signalFileChange("proxy.config.socks.socks_config_file");
-
-  } else if (strcmp(fname, "records.config") == 0) {
-    lmgmt->signalFileChange("records.config", incVersion);
-
-  } else if (strcmp(fname, "cache.config") == 0) {
-    lmgmt->signalFileChange("proxy.config.cache.control.filename");
-
-  } else if (strcmp(fname, "parent.config") == 0) {
-    lmgmt->signalFileChange("proxy.config.http.parent_proxy.file");
-
-  } else if (strcmp(fname, "ip_allow.config") == 0) {
-    lmgmt->signalFileChange("proxy.config.cache.ip_allow.filename");
-
-  } else if (strcmp(fname, "storage.config") == 0) {
-    mgmt_log("[fileUpdated] storage.config changed, need restart auto-rebuild 
mode\n");
-
-  } else if (strcmp(fname, "volume.config") == 0) {
-    mgmt_log("[fileUpdated] volume.config changed, need restart\n");
-
-  } else if (strcmp(fname, "hosting.config") == 0) {
-    lmgmt->signalFileChange("proxy.config.cache.hosting_filename");
-
-  } else if (strcmp(fname, "logging.yaml") == 0) {
-    lmgmt->signalFileChange("proxy.config.log.config.filename");
-
-  } else if (strcmp(fname, "splitdns.config") == 0) {
-    lmgmt->signalFileChange("proxy.config.dns.splitdns.filename");
-
-  } else if (strcmp(fname, "plugin.config") == 0) {
-    mgmt_log("[fileUpdated] plugin.config file has been modified\n");
-
-  } else if (strcmp(fname, "ssl_multicert.config") == 0) {
-    lmgmt->signalFileChange("proxy.config.ssl.server.multicert.filename");
-
-  } else if (strcmp(fname, "proxy.config.body_factory.template_sets_dir") == 
0) {
-    lmgmt->signalFileChange("proxy.config.body_factory.template_sets_dir");
-
-  } else if (strcmp(fname, "proxy.config.ssl.server.ticket_key.filename") == 
0) {
-    lmgmt->signalFileChange("proxy.config.ssl.server.ticket_key.filename");
-  } else if (strcmp(fname, SSL_SERVER_NAME_CONFIG) == 0) {
-    lmgmt->signalFileChange("proxy.config.ssl.servername.filename");
+  // If there is no config name recorded, assume this file is not reloadable
+  // Just log a message
+  if (configName == nullptr || configName[0] == '\0') {
+    mgmt_log("[fileUpdated] %s changed, need restart", fname);
   } else {
-    mgmt_log("[fileUpdated] Unknown config file updated '%s'\n", fname);
+    // Signal based on the config entry that has the changed file name
+    lmgmt->signalFileChange(configName);
   }
   return;
 } /* End fileUpdate */

Reply via email to