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 2013/10/31 16:18:32 UTC

[13/17] git commit: TS-2302: allow predefined formats to specify log collation support

TS-2302: allow predefined formats to specify log collation support

Directly specify the log file format in the predefined format
structure. Specify whether this predefined log format supports log
collation or not. Currently the error log does not support collation.


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

Branch: refs/heads/master
Commit: b4ee382d35b3d71aad90363069195358198ee259
Parents: 538eba5
Author: James Peach <jp...@apache.org>
Authored: Tue Oct 15 10:54:25 2013 -0700
Committer: James Peach <jp...@apache.org>
Committed: Thu Oct 31 08:16:28 2013 -0700

----------------------------------------------------------------------
 proxy/logging/LogConfig.cc     | 35 +++++++++++++++++++++--------------
 proxy/logging/LogConfig.h      |  4 ++--
 proxy/logging/LogPredefined.cc | 19 +++++++++++++------
 proxy/logging/LogPredefined.h  |  8 +++++---
 4 files changed, 41 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b4ee382d/proxy/logging/LogConfig.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogConfig.cc b/proxy/logging/LogConfig.cc
index 54080f0..c411336 100644
--- a/proxy/logging/LogConfig.cc
+++ b/proxy/logging/LogConfig.cc
@@ -829,29 +829,36 @@ LogConfig::create_predefined_object(const PreDefinedFormatInfo * pdi, size_t num
   }
 
   if (force_extension) {
-    ink_string_append(obj_filt_fname,
-                      (char *) (pdi->is_ascii ?
-                                LOG_FILE_ASCII_OBJECT_FILENAME_EXTENSION :
-                                LOG_FILE_BINARY_OBJECT_FILENAME_EXTENSION), PATH_NAME_MAX);
+    switch (pdi->filefmt) {
+      case LOG_FILE_ASCII:
+        ink_string_append(obj_filt_fname, (char *)LOG_FILE_ASCII_OBJECT_FILENAME_EXTENSION, PATH_NAME_MAX);
+        break;
+      case LOG_FILE_BINARY:
+        ink_string_append(obj_filt_fname, (char *)LOG_FILE_BINARY_OBJECT_FILENAME_EXTENSION, PATH_NAME_MAX);
+        break;
+      default:
+        break;
+    }
   }
 
   // create object with filters
   //
   LogObject *obj;
   obj = NEW(new LogObject(pdi->format, logfile_dir, obj_fname,
-                          pdi->is_ascii ? LOG_FILE_ASCII : LOG_FILE_BINARY,
-                          pdi->header, rolling_enabled,
+                          pdi->filefmt, pdi->header, rolling_enabled,
                           collation_preproc_threads, rolling_interval_sec,
                           rolling_offset_hr, rolling_size_mb));
 
-  if (collation_mode == SEND_STD_FMTS || collation_mode == SEND_STD_AND_NON_XML_CUSTOM_FMTS) {
+  if (pdi->collatable) {
+    if (collation_mode == SEND_STD_FMTS || collation_mode == SEND_STD_AND_NON_XML_CUSTOM_FMTS) {
 
-    LogHost *loghost = NEW(new LogHost(obj->get_full_filename(),
-                                       obj->get_signature()));
-    ink_assert(loghost != NULL);
+      LogHost *loghost = NEW(new LogHost(obj->get_full_filename(),
+                                         obj->get_signature()));
+      ink_assert(loghost != NULL);
 
-    loghost->set_name_port(collation_host, collation_port);
-    obj->add_loghost(loghost, false);
+      loghost->set_name_port(collation_host, collation_port);
+      obj->add_loghost(loghost, false);
+    }
   }
 
   for (size_t i = 0; i < num_filters; ++i) {
@@ -1643,7 +1650,7 @@ LogConfig::read_xml_log_config(int from_memory)
   if (!from_memory) {
 
     if (log_config.parse() < 0) {
-      Note("Error parsing log config file; ensure that it is XML-based.");
+      Note("Error parsing log config file %s; ensure that it is XML-based", config_path);
       return;
     }
 
@@ -1657,7 +1664,7 @@ LogConfig::read_xml_log_config(int from_memory)
     char *ptr = (char *)ats_malloc(ptr_size);
 
     if (pipe(filedes) != 0) {
-      Note("xml parsing: Error in Opening a pipe\n");
+      Note("xml parsing: Error in Opening a pipe");
       return;
     }
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b4ee382d/proxy/logging/LogConfig.h
----------------------------------------------------------------------
diff --git a/proxy/logging/LogConfig.h b/proxy/logging/LogConfig.h
index 78fe25f..ab1cb40 100644
--- a/proxy/logging/LogConfig.h
+++ b/proxy/logging/LogConfig.h
@@ -260,9 +260,9 @@ private:
   LogFilter *split_by_protocol(const PreDefinedFormatList & pre_def_info_list);
   size_t split_by_hostname(const PreDefinedFormatList & pre_def_info_list, LogFilter * reject_protocol);
   LogObject * create_predefined_object(const PreDefinedFormatInfo * pdi, size_t nfilters,
-                                              LogFilter ** filters, const char *filt_name = 0, bool force_extension = false);
+        LogFilter ** filters, const char *filt_name = 0, bool force_extension = false);
   void create_predefined_objects_with_filter(const PreDefinedFormatList &pre_def_info_list, size_t nfilters,
-                                              LogFilter ** filters, const char *filt_name = 0, bool force_extension = false);
+        LogFilter ** filters, const char *filt_name = 0, bool force_extension = false);
 
   void add_filters_to_search_log_object(const char *format_name);
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b4ee382d/proxy/logging/LogPredefined.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogPredefined.cc b/proxy/logging/LogPredefined.cc
index f91d5a0..9aa1bb4 100644
--- a/proxy/logging/LogPredefined.cc
+++ b/proxy/logging/LogPredefined.cc
@@ -21,10 +21,10 @@
   limitations under the License.
  */
 
-#include "LogPredefined.h"
 #include "LogObject.h"
 #include "LogConfig.h"
 #include "LogFormat.h"
+#include "LogPredefined.h"
 
 // predefined formats
 const char * const PreDefinedFormatInfo::squid =
@@ -48,7 +48,9 @@ MakePredefinedErrorLog(LogConfig * config)
 
   fmt = MakeTextLogFormat("error");
   config->global_format_list.add(fmt, false);
-  return NEW(new PreDefinedFormatInfo(fmt, "error.log", true /* always ascii */, NULL /* no log header */));
+
+  // The error log is always ASCII, and currently does not work correctly with log collation.
+  return NEW(new PreDefinedFormatInfo(fmt, "error.log", NULL /* no log header */, LOG_FILE_ASCII, false));
 }
 
 PreDefinedFormatList::PreDefinedFormatList()
@@ -69,12 +71,16 @@ PreDefinedFormatList::init(LogConfig * config)
 {
   LogFormat * fmt;
 
+  // All these predefined formats work with log collation. They are optionally binary or ASCII, each
+  // with a different config option.
+#define make_format(is_ascii)  ((is_ascii) ? LOG_FILE_ASCII : LOG_FILE_BINARY )
+
   fmt = NEW(new LogFormat("squid", PreDefinedFormatInfo::squid));
   config->global_format_list.add(fmt, false);
   Debug("log", "squid format added to the global format list");
 
   if (config->squid_log_enabled) {
-    this->formats.enqueue(NEW(new PreDefinedFormatInfo(fmt, config->squid_log_name, config->squid_log_is_ascii, config->squid_log_header)));
+    this->formats.enqueue(NEW(new PreDefinedFormatInfo(fmt, config->squid_log_name, config->squid_log_header, make_format(config->squid_log_is_ascii), true)));
   }
 
   fmt = NEW(new LogFormat("common", PreDefinedFormatInfo::common));
@@ -82,7 +88,7 @@ PreDefinedFormatList::init(LogConfig * config)
   Debug("log", "common format added to the global format list");
 
   if (config->common_log_enabled) {
-    this->formats.enqueue(NEW(new PreDefinedFormatInfo(fmt, config->common_log_name, config->common_log_is_ascii, config->common_log_header)));
+    this->formats.enqueue(NEW(new PreDefinedFormatInfo(fmt, config->common_log_name, config->common_log_header, make_format(config->common_log_is_ascii), true)));
   }
 
   fmt = NEW(new LogFormat("extended", PreDefinedFormatInfo::extended));
@@ -90,7 +96,7 @@ PreDefinedFormatList::init(LogConfig * config)
   Debug("log", "extended format added to the global format list");
 
   if (config->extended_log_enabled) {
-    this->formats.enqueue(NEW(new PreDefinedFormatInfo(fmt, config->extended_log_name, config->extended_log_is_ascii, config->extended_log_header)));
+    this->formats.enqueue(NEW(new PreDefinedFormatInfo(fmt, config->extended_log_name, config->extended_log_header, make_format(config->extended_log_is_ascii), true)));
   }
 
   fmt = NEW(new LogFormat("extended2", PreDefinedFormatInfo::extended2));
@@ -98,8 +104,9 @@ PreDefinedFormatList::init(LogConfig * config)
   Debug("log", "extended2 format added to the global format list");
 
   if (config->extended2_log_enabled) {
-    this->formats.enqueue(NEW(new PreDefinedFormatInfo(fmt, config->extended2_log_name, config->extended2_log_is_ascii, config->extended2_log_header)));
+    this->formats.enqueue(NEW(new PreDefinedFormatInfo(fmt, config->extended2_log_name, config->extended2_log_header, make_format(config->extended2_log_is_ascii), true)));
   }
 
+#undef make_format
 }
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b4ee382d/proxy/logging/LogPredefined.h
----------------------------------------------------------------------
diff --git a/proxy/logging/LogPredefined.h b/proxy/logging/LogPredefined.h
index b56ce06..2d1bae9 100644
--- a/proxy/logging/LogPredefined.h
+++ b/proxy/logging/LogPredefined.h
@@ -34,12 +34,14 @@ struct PreDefinedFormatInfo
 {
   LogFormat *   format;
   const char *  filename;
-  bool          is_ascii;
   const char *  header;
+  LogFileFormat filefmt;
+  bool          collatable; // whether log collation is supported
+
   LINK(PreDefinedFormatInfo, link);
 
-  PreDefinedFormatInfo(LogFormat * fmt, const char * fname, bool ascii, const char * hdr)
-    :format(fmt), filename(fname), is_ascii(ascii), header(hdr)
+  PreDefinedFormatInfo(LogFormat * fmt, const char * fname, const char * hdr, LogFileFormat _f, bool _c)
+    :format(fmt), filename(fname), header(hdr), filefmt(_f), collatable(_c)
   { }
 
   static const char * const squid;