You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ge...@apache.org on 2010/01/23 18:15:39 UTC

svn commit: r902446 - in /incubator/trafficserver/traffic/branches/dev/proxy: logcat.cc logging/LogStandalone.cc logstats.cc mgmt2/cli/CliMain.cc mgmt2/cli/clientCLI.cc mgmt2/cli/clientCLI.h sac.cc

Author: georgep
Date: Sat Jan 23 17:15:38 2010
New Revision: 902446

URL: http://svn.apache.org/viewvc?rev=902446&view=rev
Log:
TS-112: Fix the issue with finding TS directories properly for traffic_line, logstats, logcat and sac programs after the fix for TS-103 was integrated into trunk and dev branches. 

Modified:
    incubator/trafficserver/traffic/branches/dev/proxy/logcat.cc
    incubator/trafficserver/traffic/branches/dev/proxy/logging/LogStandalone.cc
    incubator/trafficserver/traffic/branches/dev/proxy/logstats.cc
    incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/CliMain.cc
    incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.cc
    incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.h
    incubator/trafficserver/traffic/branches/dev/proxy/sac.cc

Modified: incubator/trafficserver/traffic/branches/dev/proxy/logcat.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/proxy/logcat.cc?rev=902446&r1=902445&r2=902446&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/proxy/logcat.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/proxy/logcat.cc Sat Jan 23 17:15:38 2010
@@ -45,9 +45,6 @@
 #include "LogSock.h"
 #include "Log.h"
 
-char system_local_state_dir[PATH_NAME_MAX + 1] = DEFAULT_LOCAL_STATE_DIRECTORY;
-char system_log_dir[PATH_NAME_MAX + 1] = DEFAULT_LOG_DIRECTORY;
-
 // logcat-specific command-line flags
 static int version_flag = 0;
 static int help = 0;

Modified: incubator/trafficserver/traffic/branches/dev/proxy/logging/LogStandalone.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/proxy/logging/LogStandalone.cc?rev=902446&r1=902445&r2=902446&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/proxy/logging/LogStandalone.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/proxy/logging/LogStandalone.cc Sat Jan 23 17:15:38 2010
@@ -41,6 +41,11 @@
 #include "MgmtUtils.h"
 #include "RecordsConfig.h"
 
+#define DEFAULT_ROOT_DIRECTORY            PREFIX
+#define DEFAULT_LOCAL_STATE_DIRECTORY     "./var/trafficserver"
+#define DEFAULT_SYSTEM_CONFIG_DIRECTORY   "./etc/trafficserver"
+#define DEFAULT_LOG_DIRECTORY             "./var/log/trafficserver"
+
 #define LOG_ReadConfigString REC_ReadConfigString
 
 #define HttpBodyFactory		int
@@ -60,12 +65,16 @@
 int auto_clear_hostdb_flag = 0;
 char proxy_name[256] = "unknown";
 
-char system_config_directory[PATH_NAME_MAX + 1] = "conf/yts";
-char management_directory[256] = "conf/yts";
+char system_root_dir[PATH_NAME_MAX + 1] = DEFAULT_ROOT_DIRECTORY;
+char system_config_directory[PATH_NAME_MAX + 1] = DEFAULT_SYSTEM_CONFIG_DIRECTORY;
+char system_local_state_dir[PATH_NAME_MAX + 1] = DEFAULT_LOCAL_STATE_DIRECTORY;
+char system_log_dir[PATH_NAME_MAX + 1] = DEFAULT_LOG_DIRECTORY;
+char management_directory[256] = DEFAULT_SYSTEM_CONFIG_DIRECTORY;
+
 char error_tags[1024] = "";
 char action_tags[1024] = "";
 char command_string[512] = "";
-char system_root_dir[PATH_NAME_MAX + 1] = DEFAULT_ROOT_DIRECTORY;
+
 
 Diags *diags = NULL;
 DiagsConfig *diagsConfig = NULL;
@@ -124,6 +133,8 @@
 initialize_process_manager()
 {
   ProcessRecords *precs;
+  struct stat s;
+  int err;
 
   mgmt_use_syslog();
 
@@ -137,6 +148,18 @@
   if (management_directory[strlen(management_directory) - 1] == '/')
     management_directory[strlen(management_directory) - 1] = 0;
 
+  if ((err = stat(management_directory, &s)) < 0) {
+    // Try 'system_root_dir/etc/trafficserver' directory
+    snprintf(management_directory, sizeof(management_directory), 
+             "%s%s%s%s%s",system_root_dir, DIR_SEP,"etc",DIR_SEP,"trafficserver");
+    if ((err = stat(management_directory, &s)) < 0) {
+      fprintf(stderr,"unable to stat() management path '%s': %d %d, %s\n", 
+                management_directory, err, errno, strerror(errno));
+      fprintf(stderr,"please set management path via command line '-d <managment directory>'\n");
+      _exit(1);
+    }
+  }
+
   // diags should have been initialized by caller, e.g.: sac.cc
   ink_assert(diags);
 
@@ -200,8 +223,22 @@
   int err;
   pid_t holding_pid;
   char lockfile[PATH_NAME_MAX + 1];
+  char lockdir[PATH_NAME_MAX] = DEFAULT_LOCAL_STATE_DIRECTORY;
+  struct stat s;
+
+  if ((err = stat(lockdir, &s)) < 0) {
+    // Try 'system_root_dir/var/trafficserver' directory
+    snprintf(lockdir, sizeof(lockdir), 
+             "%s%s%s%s%s",system_root_dir, DIR_SEP,"var",DIR_SEP,"trafficserver");
+    if ((err = stat(lockdir, &s)) < 0) {
+      fprintf(stderr,"unable to stat() dir'%s': %d %d, %s\n", 
+                lockdir, err, errno, strerror(errno));
+      fprintf(stderr," please set correct path in env variable TS_ROOT \n");
+      _exit(1);
+    }
+  } 
+  int nn = snprintf(lockfile, sizeof(lockfile),"%s%s%s", lockdir,DIR_SEP,SERVER_LOCK);
 
-  int nn = snprintf(lockfile, sizeof(lockfile), "%s/internal/%s_lock", config_dir, pgm_name);
   ink_assert(nn > 0);
 
   Lockfile server_lockfile(lockfile);
@@ -298,3 +335,49 @@
 
   diags_init = 1;
 }
+
+int
+get_ts_directory(char *ts_path)
+{
+  FILE *fp;
+  char *env_path;
+  struct stat s;
+  int err;
+
+  if ((env_path = getenv("TS_ROOT"))) {
+    ink_strncpy(ts_path, env_path, PATH_NAME_MAX);
+  } else {
+    if ((fp = fopen("/etc/traffic_server", "r")) != NULL) {
+      if (fgets(ts_path, PATH_NAME_MAX, fp) == NULL) {
+        fclose(fp);
+        fprintf(stderr,"\nInvalid contents in /etc/traffic_server\n");
+        fprintf(stderr," Please set correct path in env variable TS_ROOT \n");
+        return -1;
+      }
+      // strip newline if it exists
+      int len = strlen(ts_path);
+      if (ts_path[len - 1] == '\n') {
+        ts_path[len - 1] = '\0';
+      }
+      // strip trailing "/" if it exists
+      len = strlen(ts_path);
+      if (ts_path[len - 1] == '/') {
+        ts_path[len - 1] = '\0';
+      }
+      
+      fclose(fp);
+    } else {
+      ink_strncpy(ts_path, PREFIX, PATH_NAME_MAX);
+    }
+  }
+
+  if ((err = stat(ts_path, &s)) < 0) {
+    fprintf(stderr,"unable to stat() TS PATH '%s': %d %d, %s\n", 
+              ts_path, err, errno, strerror(errno));
+    fprintf(stderr," Please set correct path in env variable TS_ROOT \n");
+    return -1;
+  }
+
+  return 0;
+}
+

Modified: incubator/trafficserver/traffic/branches/dev/proxy/logstats.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/proxy/logstats.cc?rev=902446&r1=902445&r2=902446&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/proxy/logstats.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/proxy/logstats.cc Sat Jan 23 17:15:38 2010
@@ -60,11 +60,6 @@
 #define PROGRAM_VERSION		"1.0"
 #define PROGRAM_NAME		"logstats"
 
-#define DEFAULT_ROOT_DIRECTORY            PREFIX
-#define DEFAULT_LOCAL_STATE_DIRECTORY     "./var/trafficserver"
-#define DEFAULT_SYSTEM_CONFIG_DIRECTORY   "./etc/trafficserver"
-#define DEFAULT_LOG_DIRECTORY             "./var/log/trafficserver"
-
 const int MAX_LOGBUFFER_SIZE = 65536;
 const int DEFAULT_LINE_LEN = 78;
 const double LOG10_1024 = 3.0102999566398116;
@@ -93,14 +88,6 @@
 const int IMAG_AS_INT = 1734438249;     // For "image"
 const int HTTP_AS_INT = 1886680168;     // For "http" followed by "s://" or "://"
 
-// Defaults/string constants
-
-// e.g. /usr/local/var/log/trafficserver/logstats.state
-const static char *STATE_FILE = DEFAULT_LOG_DIRECTORY "/logstats.state";
-
-// e.g. /usr/local/var/log/trafficserver
-const static char *LOG_DIR = DEFAULT_LOG_DIRECTORY;
-
 
 // Store our "state" (position in log file etc.)
 struct LastState
@@ -291,8 +278,6 @@
 typedef hash_map < const char *, OriginStats *, hash < const char *>, eqstr > OriginStorage;
 typedef hash_set < const char *, hash < const char *>, eqstr > OriginSet;
 
-char system_local_state_dir[PATH_NAME_MAX + 1] = DEFAULT_LOCAL_STATE_DIRECTORY;
-char system_log_dir[PATH_NAME_MAX + 1] = DEFAULT_LOG_DIRECTORY;
 
 ///////////////////////////////////////////////////////////////////////////////
 // Globals, holding the accumulated stats (ok, I'm lazy ...)
@@ -1753,6 +1738,7 @@
 }
 
 
+
 ///////////////////////////////////////////////////////////////////////////////
 // main
 int
@@ -1765,6 +1751,7 @@
   int main_fd;
   unsigned max_age;
   struct flock lck;
+  char ts_path[PATH_NAME_MAX + 1];
 
   // build the application information structure
   appVersionInfo.setup(PROGRAM_NAME, PROGRAM_VERSION, __DATE__, __TIME__, BUILD_MACHINE, BUILD_PERSON, "");
@@ -1779,6 +1766,14 @@
   origin_set = NULL;
   parse_errors = 0;
 
+  // Get TS directory
+  if (0 == get_ts_directory(ts_path)) {
+    ink_strncpy(system_root_dir, ts_path, sizeof(system_root_dir));
+    ink_snprintf(system_log_dir, sizeof(system_log_dir), "%s/var/log/trafficserver", system_root_dir);
+  } else {
+    ink_strncpy(system_log_dir, DEFAULT_LOG_DIRECTORY, sizeof(system_log_dir));
+  }
+
   // process command-line arguments
   process_args(argument_descriptions, n_argument_descriptions, argv, USAGE_LINE);
 
@@ -1872,16 +1867,17 @@
   hostname = xstrdup(uts_buf.nodename);
 
   // Change directory to the log dir
-  if (chdir(LOG_DIR) < 0) {
-    strncat(ymon_notice, " can't chdir to " DEFAULT_LOG_DIRECTORY, sizeof(ymon_notice) - strlen(ymon_notice) - 1);
+  if (chdir(system_log_dir) < 0) {
+    ink_snprintf(ymon_notice, sizeof(ymon_notice), "can't chdir to %s", system_log_dir);
     my_exit(YMON_CRITICAL, ymon_notice);
   }
 
   if (cl.incremental) {
     // Do the incremental parse of the default squid log.
-    std::string sf_name = STATE_FILE;
+    std::string sf_name(system_log_dir);
     struct stat stat_buf;
     int state_fd;
+    sf_name.append("/logstats.state");
 
     if (cl.state_tag[0] != '\0') {
       sf_name.append(".");
@@ -1972,7 +1968,7 @@
       last_state.st_ino = stat_buf.st_ino;
 
       // Find the old log file.
-      dirp = opendir(LOG_DIR);
+      dirp = opendir(system_log_dir);
       if (dirp == NULL) {
         strncat(ymon_notice, " can't read log directory", sizeof(ymon_notice) - strlen(ymon_notice) - 1);
         if (ymon_status == YMON_OK)

Modified: incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/CliMain.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/CliMain.cc?rev=902446&r1=902445&r2=902446&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/CliMain.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/CliMain.cc Sat Jan 23 17:15:38 2010
@@ -363,15 +363,22 @@
   // Connect to Local Manager
 #ifndef _WIN32
   if (cli->connectToLM() != clientCLI::err_none) {
-    cli->readTSdir();           //fix BZ48417 
+    char ts_path[PATH_NAME_MAX + 1];
+    char sock_path[PATH_NAME_MAX + 1];
+    if (0 == cli->GetTSDirectory(ts_path)) {
+      ink_snprintf(sock_path, sizeof(sock_path), "%s/var/trafficserver/cli", ts_path);
+    } else {
+      ink_strncpy(sock_path, clientCLI::defaultSockPath, sizeof(sock_path));
+    }
+    cli->setSockPath(sock_path);
     if (cli->connectToLM() != clientCLI::err_none) {
-      fprintf(stderr, "%s: unable to connect to traffic_manager.\n", programName);
+      fprintf(stderr, "%s: unable to connect to traffic_manager via %s\n", programName, cli->sockPath);
       exit(1);
     }
   }
 #else
   if (cli->connectToLM() != clientCLI::err_none) {
-    fprintf(stderr, "%s: unable to connect to traffic_manager.\n", programName);
+    fprintf(stderr, "%s: unable to connect to traffic_manager via %s\n", programName, cli->sockPath);
     exit(1);
   }
 #endif

Modified: incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.cc?rev=902446&r1=902445&r2=902446&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.cc Sat Jan 23 17:15:38 2010
@@ -74,16 +74,50 @@
 }                               // end ~clientCLI()
 
 #ifndef _WIN32
-//fix BZ48417
-void
-clientCLI::readTSdir()
+int
+clientCLI::GetTSDirectory(char *ts_path)
 {
-  char sPath[PATH_NAME_MAX + 1];
-  if (GetTSDirectory(sPath)) {
-    ink_strncpy(sockPath, clientCLI::defaultSockPath, sizeof(sockPath));
+  FILE *fp;
+  char *env_path;
+
+  struct stat s;
+  int err;
+
+  if ((env_path = getenv("TS_ROOT"))) {
+    ink_strncpy(ts_path, env_path, PATH_NAME_MAX);
   } else {
-    ink_snprintf(sockPath, sizeof(sockPath), "%s/cli", sPath);
+    if ((fp = fopen("/etc/traffic_server", "r")) != NULL) {
+      if (fgets(ts_path, PATH_NAME_MAX, fp) == NULL) {
+        fclose(fp);
+        fprintf(stderr,"\nInvalid contents in /etc/traffic_server\n");
+        fprintf(stderr," Please set correct path in env variable TS_ROOT \n");
+        return -1;
+      }
+      // strip newline if it exists
+      int len = strlen(ts_path);
+      if (ts_path[len - 1] == '\n') {
+        ts_path[len - 1] = '\0';
+      }
+      // strip trailing "/" if it exists
+      len = strlen(ts_path);
+      if (ts_path[len - 1] == '/') {
+        ts_path[len - 1] = '\0';
+      }
+      
+      fclose(fp);
+    } else {
+      ink_strncpy(ts_path, PREFIX, PATH_NAME_MAX);
+    }
   }
+
+  if ((err = stat(ts_path, &s)) < 0) {
+    fprintf(stderr,"unable to stat() TS PATH '%s': %d %d, %s\n", 
+              ts_path, err, errno, strerror(errno));
+    fprintf(stderr," Please set correct path in env variable TS_ROOT \n");
+    return -1;
+  }
+
+  return 0;
 }
 void
 clientCLI::setSockPath(const char *path)

Modified: incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.h?rev=902446&r1=902445&r2=902446&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.h (original)
+++ incubator/trafficserver/traffic/branches/dev/proxy/mgmt2/cli/clientCLI.h Sat Jan 23 17:15:38 2010
@@ -62,8 +62,8 @@
    ~clientCLI(void);
 
 #ifndef _WIN32
-  void setSockPath(const char *path);
-  void readTSdir();
+   int GetTSDirectory(char *ts_path);
+   void setSockPath(const char *path);
 #else
   void setCliPort(int port);
 #endif

Modified: incubator/trafficserver/traffic/branches/dev/proxy/sac.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/proxy/sac.cc?rev=902446&r1=902445&r2=902446&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/proxy/sac.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/proxy/sac.cc Sat Jan 23 17:15:38 2010
@@ -53,9 +53,6 @@
 extern int CacheClusteringEnabled;
 int auto_clear_cache_flag = 0;
 
-char system_local_state_dir[PATH_NAME_MAX + 1] = DEFAULT_LOCAL_STATE_DIRECTORY;
-char system_log_dir[PATH_NAME_MAX + 1] = DEFAULT_LOG_DIRECTORY;
-
 // ldap required externals ...
 //int  gldap_auth_enable    = 0;
 //int  gsplit_ldap_enabled  = 0;
@@ -92,6 +89,7 @@
 int
 main(int argc, char *argv[])
 {
+  char ts_path[PATH_NAME_MAX + 1];
   // build the application information structure
   //
   appVersionInfo.setup(PROGRAM_NAME, PROGRAM_VERSION, __DATE__, __TIME__, BUILD_MACHINE, BUILD_PERSON, "");
@@ -101,6 +99,11 @@
   snprintf(configDirectoryType, sizeof(configDirectoryType), "S%d", PATH_NAME_MAX - 1);
   process_args(argument_descriptions, n_argument_descriptions, argv);
 
+  // Get TS directory
+  if (0 == get_ts_directory(ts_path)) {
+    ink_strncpy(system_root_dir, ts_path, sizeof(system_root_dir));
+  } 
+
   management_directory[0] = 0;
   strncat(management_directory, system_config_directory, 256 - 1);