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