You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by je...@apache.org on 2010/11/04 03:23:00 UTC

svn commit: r1030805 - in /trafficserver/traffic/trunk: librecords/P_RecCore.h librecords/P_RecDefs.h librecords/RecCore.cc proxy/InkAPI.cc proxy/api/ts/ts.h

Author: jesus
Date: Thu Nov  4 02:23:00 2010
New Revision: 1030805

URL: http://svn.apache.org/viewvc?rev=1030805&view=rev
Log:
TS-508

Generalize RecDumpRecordsHt to use RecDumpRecords which is a callback/map pattern.

Map this into InkAPI with the new

INKRecordDump(INKRecordType rec_type, INKRecordDumpCb callback, void *edata)

function.  This doesn't change any APIs, introduces one and should cause no
functional changes in the product.

Documentation of the INKRecordDump function is still required in ts.h

Modified:
    trafficserver/traffic/trunk/librecords/P_RecCore.h
    trafficserver/traffic/trunk/librecords/P_RecDefs.h
    trafficserver/traffic/trunk/librecords/RecCore.cc
    trafficserver/traffic/trunk/proxy/InkAPI.cc
    trafficserver/traffic/trunk/proxy/api/ts/ts.h

Modified: trafficserver/traffic/trunk/librecords/P_RecCore.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/librecords/P_RecCore.h?rev=1030805&r1=1030804&r2=1030805&view=diff
==============================================================================
--- trafficserver/traffic/trunk/librecords/P_RecCore.h (original)
+++ trafficserver/traffic/trunk/librecords/P_RecCore.h Thu Nov  4 02:23:00 2010
@@ -98,4 +98,7 @@ int RecExecRawStatUpdateFuncs();
 
 void RecDumpRecordsHt(RecT rec_type = RECT_NULL);
 
+void
+RecDumpRecords(RecT rec_type, RecDumpEntryCb callback, void *edata);
+
 #endif

Modified: trafficserver/traffic/trunk/librecords/P_RecDefs.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/librecords/P_RecDefs.h?rev=1030805&r1=1030804&r2=1030805&view=diff
==============================================================================
--- trafficserver/traffic/trunk/librecords/P_RecDefs.h (original)
+++ trafficserver/traffic/trunk/librecords/P_RecDefs.h Thu Nov  4 02:23:00 2010
@@ -171,6 +171,8 @@ struct RecMessageItr
 
 typedef RecMessageHdr RecMessage;
 
+typedef void (*RecDumpEntryCb) (RecT rec_type, void *edata, int registered, const char *name, int data_type, RecData *datum);
+
 typedef int (*RecMessageRecvCb) (RecMessage * msg, RecMessageT msg_type, void *cookie);
 
 #endif

Modified: trafficserver/traffic/trunk/librecords/RecCore.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/librecords/RecCore.cc?rev=1030805&r1=1030804&r2=1030805&view=diff
==============================================================================
--- trafficserver/traffic/trunk/librecords/RecCore.cc (original)
+++ trafficserver/traffic/trunk/librecords/RecCore.cc Thu Nov  4 02:23:00 2010
@@ -878,42 +878,52 @@ RecForceInsert(RecRecord * record)
 //-------------------------------------------------------------------------
 // RecDumpRecordsHt
 //-------------------------------------------------------------------------
+
+static void
+debug_record_callback(RecT rec_type, void *edata, int registered, const char *name, int data_type, RecData *datum)
+{
+  switch(data_type) {
+  case RECD_INT:
+    RecDebug(DL_Note, "  ([%d] '%s', '%lld')", registered, name, datum->rec_int);
+    break;
+  case RECD_FLOAT:
+    RecDebug(DL_Note, "  ([%d] '%s', '%f')", registered, name, datum->rec_float);
+    break;
+  case RECD_STRING:
+    RecDebug(DL_Note, "  ([%d] '%s', '%s')",
+             registered, name, datum->rec_string ? datum->rec_string : "NULL");
+    break;
+  case RECD_COUNTER:
+    RecDebug(DL_Note, "  ([%d] '%s', '%lld')", registered, name, datum->rec_counter);
+    break;
+  default:
+    RecDebug(DL_Note, "  ([%d] '%s', <? ? ?>)", registered, name);
+    break;
+  }
+}
 void
-RecDumpRecordsHt(RecT rec_type)
+RecDumpRecords(RecT rec_type, RecDumpEntryCb callback, void *edata)
 {
   int i, num_records;
 
-  RecDebug(DL_Note, "Dumping Records:");
-
   num_records = g_num_records;
   for (i = 0; i < num_records; i++) {
     RecRecord *r = &(g_records[i]);
     if ((rec_type == RECT_NULL) || (rec_type == r->rec_type)) {
       rec_mutex_acquire(&(r->lock));
-      switch (r->data_type) {
-      case RECD_INT:
-        RecDebug(DL_Note, "  ([%d] '%s', '%lld')", r->registered, r->name, r->data.rec_int);
-        break;
-      case RECD_FLOAT:
-        RecDebug(DL_Note, "  ([%d] '%s', '%f')", r->registered, r->name, r->data.rec_float);
-        break;
-      case RECD_STRING:
-        RecDebug(DL_Note, "  ([%d] '%s', '%s')",
-                 r->registered, r->name, r->data.rec_string ? r->data.rec_string : "NULL");
-        break;
-      case RECD_COUNTER:
-        RecDebug(DL_Note, "  ([%d] '%s', '%lld')", r->registered, r->name, r->data.rec_counter);
-        break;
-      default:
-        RecDebug(DL_Note, "  ([%d] '%s', <? ? ?>)", r->registered, r->name);
-        break;
-      }
+      callback(rec_type, edata, r->registered, r->name, r->data_type, &r->data);
       rec_mutex_release(&(r->lock));
     }
   }
 }
 
 void
+RecDumpRecordsHt(RecT rec_type) {
+  RecDebug(DL_Note, "Dumping Records:");
+  RecDumpRecords(rec_type, debug_record_callback, NULL);
+}
+
+void
 RecGetRecordTree(char *subtree)
 {
   RecTree *tree = g_records_tree;

Modified: trafficserver/traffic/trunk/proxy/InkAPI.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/InkAPI.cc?rev=1030805&r1=1030804&r2=1030805&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/InkAPI.cc (original)
+++ trafficserver/traffic/trunk/proxy/InkAPI.cc Thu Nov  4 02:23:00 2010
@@ -8229,4 +8229,10 @@ INKAIOThreadNumSet(int thread_num)
   }
 }
 
+void
+INKRecordDump(INKRecordType rec_type, INKRecordDumpCb callback, void *edata)
+{
+  RecDumpRecords((RecT)rec_type, (RecDumpEntryCb)callback, edata);
+}
+
 #endif //INK_NO_API

Modified: trafficserver/traffic/trunk/proxy/api/ts/ts.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/api/ts/ts.h?rev=1030805&r1=1030804&r2=1030805&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/api/ts/ts.h (original)
+++ trafficserver/traffic/trunk/proxy/api/ts/ts.h Thu Nov  4 02:23:00 2010
@@ -2506,6 +2506,43 @@ extern "C"
   typedef void *INKTextLogObject;
 
   /**
+      This type represents a context for data records.
+   */
+  typedef enum 
+  {
+    INK_RECORDTYPE_NULL = 0,
+    INK_RECORDTYPE_CONFIG,
+    INK_RECORDTYPE_PROCESS,
+    INK_RECORDTYPE_NODE,
+    INK_RECORDTYPE_CLUSTER,
+    INK_RECORDTYPE_LOCAL,
+    INK_RECORDTYPE_PLUGIN,
+    INK_RECORDTYPE_MAX
+  } INKRecordType;
+
+  typedef enum
+  {
+    INK_RECORDDATATYPE_NULL = 0,
+    INK_RECORDDATATYPE_INT,
+    INK_RECORDDATATYPE_FLOAT,
+    INK_RECORDDATATYPE_STRING,
+    INK_RECORDDATATYPE_COUNTER,
+    INK_RECORDDATATYPE_MAX
+  } INKRecordDataType;
+
+  typedef union 
+  {
+    int64 rec_int;
+    float rec_float;
+    char *rec_string;
+    int64 rec_counter;
+  } INKRecordData;
+
+  typedef void (*INKRecordDumpCb) (INKRecordType rec_type, void *edata, int registered, const char *name, INKRecordDataType data_type, INKRecordData *datum);
+
+  inkapi void INKRecordDump(INKRecordType rec_type, INKRecordDumpCb callback, void *edata);
+
+  /**
 
       Creates a new custom log file that your plugin can write to. You
       can design the fields and inputs to the log file using the