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 2014/01/27 20:49:21 UTC

[1/5] git commit: TS-2519: make using RECP_NULL a compilation error

Updated Branches:
  refs/heads/master 6215bf9e9 -> 77e2776ba


TS-2519: make using RECP_NULL a compilation error

RECP_NULL can still be useful to represent the case when a record
does not have a persistence type. It might be a configuration record,
for example. However, stats records shold never be registered as
RECP_NULL, because that's ambiguous as to whether it should be
persisted This change add some template helpers to ensure that any
attempt to register a RECP_NULL stat dies in a horrible shower of
compiler errors.


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

Branch: refs/heads/master
Commit: 7eeb5c782b2f49a99d5e0ec62599f8c171fa7ea1
Parents: 7352493
Author: James Peach <jp...@apache.org>
Authored: Wed Jan 22 21:47:07 2014 -0800
Committer: James Peach <jp...@apache.org>
Committed: Mon Jan 27 09:30:14 2014 -0800

----------------------------------------------------------------------
 lib/records/I_RecCore.h    | 14 ++++++++++----
 lib/records/I_RecDefs.h    | 25 +++++++++++++++++++++++++
 lib/records/I_RecProcess.h |  4 +++-
 lib/records/P_RecCore.cc   |  8 ++++----
 lib/records/RecProcess.cc  |  2 +-
 5 files changed, 43 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/I_RecCore.h
----------------------------------------------------------------------
diff --git a/lib/records/I_RecCore.h b/lib/records/I_RecCore.h
index 424b1c2..e9b1a4f 100644
--- a/lib/records/I_RecCore.h
+++ b/lib/records/I_RecCore.h
@@ -73,11 +73,17 @@ const char * RecConfigOverrideFromEnvironment(const char * name, const char * va
 //-------------------------------------------------------------------------
 // Stat Registration
 //-------------------------------------------------------------------------
-int RecRegisterStatInt(RecT rec_type, const char *name, RecInt data_default, RecPersistT persist_type);
-int RecRegisterStatFloat(RecT rec_type, const char *name, RecFloat data_default, RecPersistT persist_type);
-int RecRegisterStatString(RecT rec_type, const char *name, RecString data_default, RecPersistT persist_type);
-int RecRegisterStatCounter(RecT rec_type, const char *name, RecCounter data_default, RecPersistT persist_type);
+int _RecRegisterStatInt(RecT rec_type, const char *name, RecInt data_default, RecPersistT persist_type);
+#define RecRegisterStatInt(rec_type, name, data_default, persist_type) _RecRegisterStatInt((rec_type), (name), (data_default), REC_PERSISTENCE_TYPE(persist_type))
 
+int _RecRegisterStatFloat(RecT rec_type, const char *name, RecFloat data_default, RecPersistT persist_type);
+#define RecRegisterStatFloat(rec_type, name, data_default, persist_type) _RecRegisterStatFloat((rec_type), (name), (data_default), REC_PERSISTENCE_TYPE(persist_type))
+
+int _RecRegisterStatString(RecT rec_type, const char *name, RecString data_default, RecPersistT persist_type);
+#define RecRegisterStatString(rec_type, name, data_default, persist_type) _RecRegisterStatString((rec_type), (name), (data_default), REC_PERSISTENCE_TYPE(persist_type))
+
+int _RecRegisterStatCounter(RecT rec_type, const char *name, RecCounter data_default, RecPersistT persist_type);
+#define RecRegisterStatCounter(rec_type, name, data_default, persist_type) _RecRegisterStatCounter((rec_type), (name), (data_default), REC_PERSISTENCE_TYPE(persist_type))
 
 //-------------------------------------------------------------------------
 // Config Registration

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/I_RecDefs.h
----------------------------------------------------------------------
diff --git a/lib/records/I_RecDefs.h b/lib/records/I_RecDefs.h
index 5a9c121..ec3afbc 100644
--- a/lib/records/I_RecDefs.h
+++ b/lib/records/I_RecDefs.h
@@ -88,6 +88,31 @@ enum RecPersistT
   RECP_NON_PERSISTENT
 };
 
+// RECP_NULL should never be used by callers of RecRegisterStat*(). You have to decide
+// whether to persist stats or not. The template goop below make sure that passing RECP_NULL
+// is a very ugle compile-time error.
+
+namespace rec {
+namespace detail {
+template <RecPersistT>
+struct is_valid_persistence;
+
+template<>
+struct is_valid_persistence<RECP_PERSISTENT>
+{
+  static const RecPersistT value = RECP_PERSISTENT;
+};
+
+template<>
+struct is_valid_persistence<RECP_NON_PERSISTENT>
+{
+  static const RecPersistT value = RECP_NON_PERSISTENT;
+};
+
+}}
+
+#define REC_PERSISTENCE_TYPE(P) rec::detail::is_valid_persistence<P>::value
+
 enum RecUpdateT
 {
   RECU_NULL,                    // default: don't know the behavior

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/I_RecProcess.h
----------------------------------------------------------------------
diff --git a/lib/records/I_RecProcess.h b/lib/records/I_RecProcess.h
index 8faffe7..123041e 100644
--- a/lib/records/I_RecProcess.h
+++ b/lib/records/I_RecProcess.h
@@ -46,8 +46,10 @@ void RecProcess_set_remote_sync_interval_ms(int ms);
 // RawStat Registration
 //-------------------------------------------------------------------------
 RecRawStatBlock *RecAllocateRawStatBlock(int num_stats);
-int RecRegisterRawStat(RecRawStatBlock * rsb, RecT rec_type, const char *name, RecDataT data_type, RecPersistT persist_type, int id, RecRawStatSyncCb sync_cb);
 
+int _RecRegisterRawStat(RecRawStatBlock * rsb, RecT rec_type, const char *name, RecDataT data_type, RecPersistT persist_type, int id, RecRawStatSyncCb sync_cb);
+#define RecRegisterRawStat(rsb, rec_type, name, data_type, persist_type, id, sync_cb) \
+  _RecRegisterRawStat((rsb), (rec_type), (name), (data_type), REC_PERSISTENCE_TYPE(persist_type), (id), (sync_cb))
 
 // RecRawStatRange* RecAllocateRawStatRange (int num_buckets);
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/P_RecCore.cc
----------------------------------------------------------------------
diff --git a/lib/records/P_RecCore.cc b/lib/records/P_RecCore.cc
index 2be8116..152bf05 100644
--- a/lib/records/P_RecCore.cc
+++ b/lib/records/P_RecCore.cc
@@ -291,25 +291,25 @@ recv_message_cb(RecMessage * msg, RecMessageT msg_type, void */* cookie */)
   }
 
 int
-RecRegisterStatInt(RecT rec_type, const char *name, RecInt data_default, RecPersistT persist_type)
+_RecRegisterStatInt(RecT rec_type, const char *name, RecInt data_default, RecPersistT persist_type)
 {
   REC_REGISTER_STAT_XXX(rec_int, RECD_INT);
 }
 
 int
-RecRegisterStatFloat(RecT rec_type, const char *name, RecFloat data_default, RecPersistT persist_type)
+_RecRegisterStatFloat(RecT rec_type, const char *name, RecFloat data_default, RecPersistT persist_type)
 {
   REC_REGISTER_STAT_XXX(rec_float, RECD_FLOAT);
 }
 
 int
-RecRegisterStatString(RecT rec_type, const char *name, RecString data_default, RecPersistT persist_type)
+_RecRegisterStatString(RecT rec_type, const char *name, RecString data_default, RecPersistT persist_type)
 {
   REC_REGISTER_STAT_XXX(rec_string, RECD_STRING);
 }
 
 int
-RecRegisterStatCounter(RecT rec_type, const char *name, RecCounter data_default, RecPersistT persist_type)
+_RecRegisterStatCounter(RecT rec_type, const char *name, RecCounter data_default, RecPersistT persist_type)
 {
   REC_REGISTER_STAT_XXX(rec_counter, RECD_COUNTER);
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/RecProcess.cc
----------------------------------------------------------------------
diff --git a/lib/records/RecProcess.cc b/lib/records/RecProcess.cc
index 5dc7392..8cab1de 100644
--- a/lib/records/RecProcess.cc
+++ b/lib/records/RecProcess.cc
@@ -532,7 +532,7 @@ RecAllocateRawStatBlock(int num_stats)
 // RecRegisterRawStat
 //-------------------------------------------------------------------------
 int
-RecRegisterRawStat(RecRawStatBlock *rsb, RecT rec_type, const char *name, RecDataT data_type, RecPersistT persist_type, int id,
+_RecRegisterRawStat(RecRawStatBlock *rsb, RecT rec_type, const char *name, RecDataT data_type, RecPersistT persist_type, int id,
                    RecRawStatSyncCb sync_cb)
 {
   Debug("stats", "RecRawStatSyncCb(%s): rsb pointer:%p id:%d\n", name, rsb, id);


[4/5] git commit: TS-2519: handle stat persistence type changes

Posted by jp...@apache.org.
TS-2519: handle stat persistence type changes

When Traffic Server is upgraded, it is possible for stats to change
their persistence type. If it changes from persistent to non-persistent,
we don't want to preserve the previous value. Detect this case when
we load the records snapshot and also when we register stats.


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

Branch: refs/heads/master
Commit: e2ffb69c179c7daf65e819b29c90ebde4546b94e
Parents: 7eeb5c7
Author: James Peach <jp...@apache.org>
Authored: Thu Jan 23 16:21:25 2014 -0800
Committer: James Peach <jp...@apache.org>
Committed: Mon Jan 27 09:40:13 2014 -0800

----------------------------------------------------------------------
 lib/records/I_RecCore.h  |  1 +
 lib/records/P_RecCore.cc | 30 ++++++++++++++++++++++++--
 lib/records/RecCore.cc   | 49 ++++++++++++++++++++++++++++++++++++++++---
 3 files changed, 75 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e2ffb69c/lib/records/I_RecCore.h
----------------------------------------------------------------------
diff --git a/lib/records/I_RecCore.h b/lib/records/I_RecCore.h
index e9b1a4f..5bc1358 100644
--- a/lib/records/I_RecCore.h
+++ b/lib/records/I_RecCore.h
@@ -151,6 +151,7 @@ int RecGetRecordByte(const char *name, RecByte * rec_byte, bool lock = true);
 //------------------------------------------------------------------------
 int RecGetRecordType(const char *name, RecT * rec_type, bool lock = true);
 int RecGetRecordDataType(const char *name, RecDataT * data_type, bool lock = true);
+int RecGetRecordPersistenceType(const char *name, RecPersistT * persist_type, bool lock = true);
 int RecGetRecordUpdateCount(RecT data_type);
 int RecGetRecordOrderAndId(const char *name, int *order, int *id, bool lock = true);
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e2ffb69c/lib/records/P_RecCore.cc
----------------------------------------------------------------------
diff --git a/lib/records/P_RecCore.cc b/lib/records/P_RecCore.cc
index 152bf05..b90a5d3 100644
--- a/lib/records/P_RecCore.cc
+++ b/lib/records/P_RecCore.cc
@@ -531,6 +531,7 @@ RecReadStatsFile()
   RecRecord *r;
   RecMessage *m;
   RecMessageItr itr;
+  RecPersistT persist_type = RECP_NULL;
   xptr<char> snap_fpath(RecConfigReadPersistentStatsPath());
 
   // lock our hash table
@@ -539,8 +540,33 @@ RecReadStatsFile()
   if ((m = RecMessageReadFromDisk(snap_fpath)) != NULL) {
     if (RecMessageUnmarshalFirst(m, &itr, &r) != REC_ERR_FAIL) {
       do {
-        if ((r->name == NULL) || (!strlen(r->name)))
+        if ((r->name == NULL) || (!strlen(r->name))) {
           continue;
+        }
+
+        // If we don't have a persistence type for this record, it means that it is not a stat, or it is
+        // not registered yet. Either way, it's ok to just set the persisted value and keep going.
+        if (RecGetRecordPersistenceType(r->name, &persist_type, false /* lock */) != REC_ERR_OKAY) {
+          RecDebug(DL_Debug, "restoring value for persisted stat '%s'", r->name);
+          RecSetRecord(r->rec_type, r->name, r->data_type, &(r->data), &(r->stat_meta.data_raw), false);
+          continue;
+        }
+
+        if (!REC_TYPE_IS_STAT(r->rec_type)) {
+          // This should not happen, but be defensive against records changing their type ..
+          RecLog(DL_Warning, "skipping restore of non-stat record '%s'", r->name);
+          continue;
+        }
+
+        // Check whether the persistence type was changed by a new software version. If the record is
+        // already registered with an updated persistence type, then we don't want to set it. We should
+        // keep the registered value.
+        if (persist_type == RECP_NON_PERSISTENT) {
+          RecDebug(DL_Debug, "preserving current value of formerly persistent stat '%s'", r->name);
+          continue;
+        }
+
+        RecDebug(DL_Debug, "restoring value for persisted stat '%s'", r->name);
         RecSetRecord(r->rec_type, r->name, r->data_type, &(r->data), &(r->stat_meta.data_raw), false);
       } while (RecMessageUnmarshalNext(m, &itr, &r) != REC_ERR_FAIL);
     }
@@ -579,7 +605,7 @@ RecSyncStatsFile()
       r = &(g_records[i]);
       rec_mutex_acquire(&(r->lock));
       if (REC_TYPE_IS_STAT(r->rec_type)) {
-        if (r->stat_meta.persist_type != RECP_NON_PERSISTENT) {
+        if (r->stat_meta.persist_type == RECP_PERSISTENT) {
           m = RecMessageMarshal_Realloc(m, r);
           sync_to_disk = true;
         }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e2ffb69c/lib/records/RecCore.cc
----------------------------------------------------------------------
diff --git a/lib/records/RecCore.cc b/lib/records/RecCore.cc
index 484a9c6..1ed4e10 100644
--- a/lib/records/RecCore.cc
+++ b/lib/records/RecCore.cc
@@ -44,7 +44,7 @@ RecTree *g_records_tree = NULL;
 // register_record
 //-------------------------------------------------------------------------
 static RecRecord *
-register_record(RecT rec_type, const char *name, RecDataT data_type, RecData data_default)
+register_record(RecT rec_type, const char *name, RecDataT data_type, RecData data_default, RecPersistT persist_type)
 {
   RecRecord *r = NULL;
 
@@ -61,6 +61,10 @@ register_record(RecT rec_type, const char *name, RecDataT data_type, RecData dat
     RecDataSet(r->data_type, &(r->data), &(data_default));
     RecDataSet(r->data_type, &(r->data_default), &(data_default));
     ink_hash_table_insert(g_records_ht, name, (void *) r);
+
+    if (REC_TYPE_IS_STAT(r->rec_type)) {
+      r->stat_meta.persist_type = persist_type;
+    }
   }
 
   // we're now registered
@@ -467,6 +471,34 @@ RecGetRecordDataType(const char *name, RecDataT * data_type, bool lock)
 }
 
 int
+RecGetRecordPersistenceType(const char *name, RecPersistT * persist_type, bool lock)
+{
+  int err = REC_ERR_FAIL;
+  RecRecord *r = NULL;
+
+  if (lock) {
+    ink_rwlock_rdlock(&g_records_rwlock);
+  }
+
+  *persist_type = RECP_NULL;
+
+  if (ink_hash_table_lookup(g_records_ht, name, (void **) &r)) {
+    rec_mutex_acquire(&(r->lock));
+    if (REC_TYPE_IS_STAT(r->rec_type)) {
+      *persist_type = r->stat_meta.persist_type;
+      err = REC_ERR_OKAY;
+    }
+    rec_mutex_release(&(r->lock));
+  }
+
+  if (lock) {
+    ink_rwlock_unlock(&g_records_rwlock);
+  }
+
+  return err;
+}
+
+int
 RecGetRecordUpdateCount(RecT data_type)
 {
   return g_num_update[data_type];
@@ -690,10 +722,21 @@ RecRegisterStat(RecT rec_type, const char *name, RecDataT data_type, RecData dat
   RecRecord *r = NULL;
 
   ink_rwlock_wrlock(&g_records_rwlock);
-  if ((r = register_record(rec_type, name, data_type, data_default)) != NULL) {
+  if ((r = register_record(rec_type, name, data_type, data_default, persist_type)) != NULL) {
+    // If the persistence type we found in the records hash is not the same as the persistence
+    // type we are registering, then that means that it changed between the previous software
+    // version and the current version. If the metric changed to non-persistent, reset to the
+    // new default value.
+    if ((r->stat_meta.persist_type == RECP_NULL ||r->stat_meta.persist_type == RECP_PERSISTENT) &&
+        persist_type == RECP_NON_PERSISTENT) {
+      RecDebug(DL_Debug, "resetting default value for formerly persisted stat '%s'", r->name);
+      RecDataSet(r->data_type, &(r->data), &(data_default));
+    }
+
     r->stat_meta.persist_type = persist_type;
   } else {
     ink_assert(!"Can't register record!");
+    RecDebug(DL_Warning, "failed to register '%s' record", name);
   }
   ink_rwlock_unlock(&g_records_rwlock);
 
@@ -711,7 +754,7 @@ RecRegisterConfig(RecT rec_type, const char *name, RecDataT data_type,
 {
   RecRecord *r;
   ink_rwlock_wrlock(&g_records_rwlock);
-  if ((r = register_record(rec_type, name, data_type, data_default)) != NULL) {
+  if ((r = register_record(rec_type, name, data_type, data_default, RECP_NULL)) != NULL) {
     // Note: do not modify 'record->config_meta.update_required'
     r->config_meta.update_type = update_type;
     r->config_meta.check_type = check_type;


[3/5] git commit: TS-2519: Stop using the ambiguous RECP_NULL

Posted by jp...@apache.org.
TS-2519: Stop using the ambiguous RECP_NULL

RECP_NULL is ambigious. Should stats with this prsistence type be
saved or not?

The current behavior is that all stats that are not RECP_NON_PERSISTENT
are persisted. Change all registrations of RECP_NULL stats to use
RECP_PERSISTENT instead. Change the build version stats to
RECP_NON_PERSISTENT, since we want these to update when Traffic
Server is upgraded.


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

Branch: refs/heads/master
Commit: 7352493c9ac8e349088fdcf840ac67915196bedc
Parents: 6215bf9
Author: James Peach <jp...@apache.org>
Authored: Wed Jan 22 21:46:13 2014 -0800
Committer: James Peach <jp...@apache.org>
Committed: Mon Jan 27 09:30:14 2014 -0800

----------------------------------------------------------------------
 iocore/aio/AIO.cc                 |   8 +-
 iocore/dns/DNS.cc                 |  14 +-
 iocore/hostdb/HostDB.cc           |  12 +-
 iocore/net/Net.cc                 |  28 +--
 lib/records/test_RecProcess.i     |  12 +-
 lib/records/test_RecordsConfig.cc |  10 +-
 mgmt/BaseManager.h                |   2 +-
 mgmt/LocalManager.cc              |  29 ---
 proxy/ICPStats.cc                 |  52 ++--
 proxy/InkAPI.cc                   |  12 +-
 proxy/Main.cc                     |  14 +-
 proxy/SocksProxy.cc               |   4 +-
 proxy/http/HttpConfig.cc          | 440 ++++++++++++++++-----------------
 proxy/logging/LogStandalone.cc    |  19 +-
 14 files changed, 317 insertions(+), 339 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/iocore/aio/AIO.cc
----------------------------------------------------------------------
diff --git a/iocore/aio/AIO.cc b/iocore/aio/AIO.cc
index f8c1b9d..a64918a 100644
--- a/iocore/aio/AIO.cc
+++ b/iocore/aio/AIO.cc
@@ -150,15 +150,15 @@ ink_aio_init(ModuleVersion v)
 
   aio_rsb = RecAllocateRawStatBlock((int) AIO_STAT_COUNT);
   RecRegisterRawStat(aio_rsb, RECT_PROCESS, "proxy.process.cache.read_per_sec",
-                     RECD_FLOAT, RECP_NULL, (int) AIO_STAT_READ_PER_SEC, aio_stats_cb);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) AIO_STAT_READ_PER_SEC, aio_stats_cb);
   RecRegisterRawStat(aio_rsb, RECT_PROCESS, "proxy.process.cache.write_per_sec",
-                     RECD_FLOAT, RECP_NULL, (int) AIO_STAT_WRITE_PER_SEC, aio_stats_cb);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) AIO_STAT_WRITE_PER_SEC, aio_stats_cb);
   RecRegisterRawStat(aio_rsb, RECT_PROCESS,
                      "proxy.process.cache.KB_read_per_sec",
-                     RECD_FLOAT, RECP_NULL, (int) AIO_STAT_KB_READ_PER_SEC, aio_stats_cb);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) AIO_STAT_KB_READ_PER_SEC, aio_stats_cb);
   RecRegisterRawStat(aio_rsb, RECT_PROCESS,
                      "proxy.process.cache.KB_write_per_sec",
-                     RECD_FLOAT, RECP_NULL, (int) AIO_STAT_KB_WRITE_PER_SEC, aio_stats_cb);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) AIO_STAT_KB_WRITE_PER_SEC, aio_stats_cb);
 #if AIO_MODE != AIO_MODE_NATIVE
   memset(&aio_reqs, 0, MAX_DISKS_POSSIBLE * sizeof(AIO_Reqs *));
   ink_mutex_init(&insert_mutex, NULL);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/iocore/dns/DNS.cc
----------------------------------------------------------------------
diff --git a/iocore/dns/DNS.cc b/iocore/dns/DNS.cc
index 0a7d7cf..74d972e 100644
--- a/iocore/dns/DNS.cc
+++ b/iocore/dns/DNS.cc
@@ -1629,11 +1629,11 @@ ink_dns_init(ModuleVersion v)
   //
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
                      "proxy.process.dns.total_dns_lookups",
-                     RECD_INT, RECP_NULL, (int) dns_total_lookups_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) dns_total_lookups_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
                      "proxy.process.dns.lookup_avg_time",
-                     RECD_INT, RECP_NULL, (int) dns_response_time_stat, RecRawStatSyncHrTimeAvg);
+                     RECD_INT, RECP_PERSISTENT, (int) dns_response_time_stat, RecRawStatSyncHrTimeAvg);
 
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
                      "proxy.process.dns.success_avg_time",
@@ -1641,22 +1641,22 @@ ink_dns_init(ModuleVersion v)
 
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
                      "proxy.process.dns.lookup_successes",
-                     RECD_INT, RECP_NULL, (int) dns_lookup_success_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) dns_lookup_success_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
                      "proxy.process.dns.fail_avg_time",
-                     RECD_INT, RECP_NULL, (int) dns_fail_time_stat, RecRawStatSyncHrTimeAvg);
+                     RECD_INT, RECP_PERSISTENT, (int) dns_fail_time_stat, RecRawStatSyncHrTimeAvg);
 
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
                      "proxy.process.dns.lookup_failures",
-                     RECD_INT, RECP_NULL, (int) dns_lookup_fail_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) dns_lookup_fail_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
-                     "proxy.process.dns.retries", RECD_INT, RECP_NULL, (int) dns_retries_stat, RecRawStatSyncSum);
+                     "proxy.process.dns.retries", RECD_INT, RECP_PERSISTENT, (int) dns_retries_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
                      "proxy.process.dns.max_retries_exceeded",
-                     RECD_INT, RECP_NULL, (int) dns_max_retries_exceeded_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) dns_max_retries_exceeded_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(dns_rsb, RECT_PROCESS,
                      "proxy.process.dns.in_flight",

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/iocore/hostdb/HostDB.cc
----------------------------------------------------------------------
diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index d2c5e76..e4adbe0 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -2459,29 +2459,29 @@ ink_hostdb_init(ModuleVersion v)
 
   RecRegisterRawStat(hostdb_rsb, RECT_PROCESS,
                      "proxy.process.hostdb.total_entries",
-                     RECD_INT, RECP_NULL, (int) hostdb_total_entries_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) hostdb_total_entries_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(hostdb_rsb, RECT_PROCESS,
                      "proxy.process.hostdb.total_lookups",
-                     RECD_INT, RECP_NULL, (int) hostdb_total_lookups_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) hostdb_total_lookups_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(hostdb_rsb, RECT_PROCESS,
                      "proxy.process.hostdb.total_hits",
                      RECD_INT, RECP_NON_PERSISTENT, (int) hostdb_total_hits_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(hostdb_rsb, RECT_PROCESS,
-                     "proxy.process.hostdb.ttl", RECD_FLOAT, RECP_NULL, (int) hostdb_ttl_stat, RecRawStatSyncAvg);
+                     "proxy.process.hostdb.ttl", RECD_FLOAT, RECP_PERSISTENT, (int) hostdb_ttl_stat, RecRawStatSyncAvg);
 
   RecRegisterRawStat(hostdb_rsb, RECT_PROCESS,
                      "proxy.process.hostdb.ttl_expires",
-                     RECD_INT, RECP_NULL, (int) hostdb_ttl_expires_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) hostdb_ttl_expires_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(hostdb_rsb, RECT_PROCESS,
                      "proxy.process.hostdb.re_dns_on_reload",
-                     RECD_INT, RECP_NULL, (int) hostdb_re_dns_on_reload_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) hostdb_re_dns_on_reload_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(hostdb_rsb, RECT_PROCESS,
-                     "proxy.process.hostdb.bytes", RECD_INT, RECP_NULL, (int) hostdb_bytes_stat, RecRawStatSyncCount);
+                     "proxy.process.hostdb.bytes", RECD_INT, RECP_PERSISTENT, (int) hostdb_bytes_stat, RecRawStatSyncCount);
 
   ts_host_res_global_init();
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/iocore/net/Net.cc
----------------------------------------------------------------------
diff --git a/iocore/net/Net.cc b/iocore/net/Net.cc
index 485aef1..11c0c48 100644
--- a/iocore/net/Net.cc
+++ b/iocore/net/Net.cc
@@ -49,14 +49,14 @@ register_net_stats()
   // Register statistics
   //
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.net_handler_run",
-                     RECD_INT, RECP_NULL, (int) net_handler_run_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_handler_run_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_handler_run_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.read_bytes",
-                     RECD_INT, RECP_NULL, (int) net_read_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_read_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.write_bytes",
-                     RECD_INT, RECP_NULL, (int) net_write_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_write_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.connections_currently_open",
                      RECD_INT, RECP_NON_PERSISTENT, (int) net_connections_currently_open_stat, RecRawStatSyncSum);
@@ -67,49 +67,49 @@ register_net_stats()
   NET_CLEAR_DYN_STAT(net_accepts_currently_open_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.calls_to_readfromnet",
-                     RECD_INT, RECP_NULL, (int) net_calls_to_readfromnet_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_calls_to_readfromnet_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_calls_to_readfromnet_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.calls_to_readfromnet_afterpoll",
-                     RECD_INT, RECP_NULL, (int) net_calls_to_readfromnet_afterpoll_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_calls_to_readfromnet_afterpoll_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_calls_to_readfromnet_afterpoll_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.calls_to_read",
-                     RECD_INT, RECP_NULL, (int) net_calls_to_read_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_calls_to_read_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_calls_to_read_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.calls_to_read_nodata",
-                     RECD_INT, RECP_NULL, (int) net_calls_to_read_nodata_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_calls_to_read_nodata_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_calls_to_read_nodata_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.calls_to_writetonet",
-                     RECD_INT, RECP_NULL, (int) net_calls_to_writetonet_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_calls_to_writetonet_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_calls_to_writetonet_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.calls_to_writetonet_afterpoll",
-                     RECD_INT, RECP_NULL, (int) net_calls_to_writetonet_afterpoll_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_calls_to_writetonet_afterpoll_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_calls_to_writetonet_afterpoll_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.calls_to_write",
-                     RECD_INT, RECP_NULL, (int) net_calls_to_write_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_calls_to_write_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_calls_to_write_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.calls_to_write_nodata",
-                     RECD_INT, RECP_NULL, (int) net_calls_to_write_nodata_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) net_calls_to_write_nodata_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(net_calls_to_write_nodata_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.socks.connections_successful",
-                     RECD_INT, RECP_NULL, (int) socks_connections_successful_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) socks_connections_successful_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.socks.connections_unsuccessful",
-                     RECD_INT, RECP_NULL, (int) socks_connections_unsuccessful_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) socks_connections_unsuccessful_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.socks.connections_currently_open",
                      RECD_INT, RECP_NON_PERSISTENT, (int) socks_connections_currently_open_stat, RecRawStatSyncSum);
   NET_CLEAR_DYN_STAT(socks_connections_currently_open_stat);
 
   RecRegisterRawStat(net_rsb, RECT_PROCESS, "proxy.process.net.inactivity_cop_lock_acquire_failure",
-                     RECD_INT, RECP_NULL, (int) inactivity_cop_lock_acquire_failure_stat,
+                     RECD_INT, RECP_PERSISTENT, (int) inactivity_cop_lock_acquire_failure_stat,
                      RecRawStatSyncSum);
 }
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/lib/records/test_RecProcess.i
----------------------------------------------------------------------
diff --git a/lib/records/test_RecProcess.i b/lib/records/test_RecProcess.i
index 82084cf..4f15703 100644
--- a/lib/records/test_RecProcess.i
+++ b/lib/records/test_RecProcess.i
@@ -510,25 +510,25 @@ Test03()
   g_rsb = RecAllocateRawStatBlock((int) MY_STAT_COUNT);
 
   RecRegisterRawStat(g_rsb, RECT_PROCESS, "proxy.process.test_raw_stat_a",
-                     RECD_FLOAT, RECP_NULL, (int) MY_STAT_A, RecRawStatSyncAvg);
+                     RECD_FLOAT, RECP_NON_PERSISTENT, (int) MY_STAT_A, RecRawStatSyncAvg);
 
   RecRegisterRawStat(g_rsb, RECT_PROCESS, "proxy.process.test_raw_stat_b",
                      RECD_INT, RECP_PERSISTENT, (int) MY_STAT_B, RecRawStatSyncSum);
 
   RecRegisterRawStat(g_rsb, RECT_PROCESS, "proxy.process.test_raw_stat_c",
-                     RECD_INT, RECP_NULL, (int) MY_STAT_C, RecRawStatSyncCount);
+                     RECD_INT, RECP_NON_PERSISTENT, (int) MY_STAT_C, RecRawStatSyncCount);
 
   RecRegisterRawStat(g_rsb, RECT_PROCESS, "proxy.process.test_raw_stat_d",
-                     RECD_FLOAT, RECP_NULL, (int) MY_STAT_D, raw_stat_sync_ticks_per_sec);
+                     RECD_FLOAT, RECP_NON_PERSISTENT, (int) MY_STAT_D, raw_stat_sync_ticks_per_sec);
 
   RecRegisterRawStat(g_rsb, RECT_PROCESS, "proxy.process.test_raw_stat_e",
-                     RECD_FLOAT, RECP_NULL, (int) MY_STAT_E, RecRawStatSyncHrTimeAvg);
+                     RECD_FLOAT, RECP_NON_PERSISTENT, (int) MY_STAT_E, RecRawStatSyncHrTimeAvg);
   RecRegisterRawStat(g_rsb, RECT_PROCESS, "proxy.process.test_raw_stat_f",
-                     RECD_INT, RECP_NULL, (int) MY_STAT_F, RecRawStatSyncCount);
+                     RECD_INT, RECP_NON_PERSISTENT, (int) MY_STAT_F, RecRawStatSyncCount);
   // If forget to Register this RawStat, we will have SEGV when checking 
   // g_rsb->global[MY_STAT_G]
   RecRegisterRawStat(g_rsb, RECT_PROCESS, "proxy.process.test_raw_stat_g",
-                     RECD_INT, RECP_NULL, (int) MY_STAT_G, RecRawStatSyncSum);
+                     RECD_INT, RECP_NON_PERSISTENT, (int) MY_STAT_G, RecRawStatSyncSum);
 
   // Schedule a bunch of continuations that will use the stats registered above
   RawStatCont *sc = new RawStatCont(new_ProxyMutex());

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/lib/records/test_RecordsConfig.cc
----------------------------------------------------------------------
diff --git a/lib/records/test_RecordsConfig.cc b/lib/records/test_RecordsConfig.cc
index 0c395eb..e62e4a8 100644
--- a/lib/records/test_RecordsConfig.cc
+++ b/lib/records/test_RecordsConfig.cc
@@ -51,10 +51,10 @@ RecordsConfigRegister()
   RecRegisterConfigCounter(RECT_CONFIG, "proxy.config.link_test_3", 0, RECU_DYNAMIC, RECC_NULL, NULL);
 
   // NODE
-  RecRegisterStatString(RECT_NODE, "proxy.node.cb_test_1", "cb_test_1__original", RECP_NULL);
-  RecRegisterStatString(RECT_NODE, "proxy.node.cb_test_2", "cb_test_2__original", RECP_NULL);
-  RecRegisterStatInt(RECT_NODE, "proxy.node.cb_test_int", 0, RECP_NULL);
-  RecRegisterStatFloat(RECT_NODE, "proxy.node.cb_test_float", 0.0f, RECP_NULL);
-  RecRegisterStatCounter(RECT_NODE, "proxy.node.cb_test_count", 0, RECP_NULL);
+  RecRegisterStatString(RECT_NODE, "proxy.node.cb_test_1", "cb_test_1__original", RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_NODE, "proxy.node.cb_test_2", "cb_test_2__original", RECP_NON_PERSISTENT);
+  RecRegisterStatInt(RECT_NODE, "proxy.node.cb_test_int", 0, RECP_NON_PERSISTENT);
+  RecRegisterStatFloat(RECT_NODE, "proxy.node.cb_test_float", 0.0f, RECP_NON_PERSISTENT);
+  RecRegisterStatCounter(RECT_NODE, "proxy.node.cb_test_count", 0, RECP_NON_PERSISTENT);
 
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/mgmt/BaseManager.h
----------------------------------------------------------------------
diff --git a/mgmt/BaseManager.h b/mgmt/BaseManager.h
index a651e28..0fa7a3c 100644
--- a/mgmt/BaseManager.h
+++ b/mgmt/BaseManager.h
@@ -92,7 +92,7 @@
 #define MGMT_SIGNAL_LOGGING_WARNING       10
 // Currently unused: 11
 // Currently unused: 12
-#define MGMT_SIGNAL_PLUGIN_ADD_REC        13
+// Currently unused: 13
 #define MGMT_SIGNAL_PLUGIN_SET_CONFIG     14
 #define MGMT_SIGNAL_LOG_FILES_ROLLED      15
 #define MGMT_SIGNAL_LIBRECORDS            16

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/mgmt/LocalManager.cc
----------------------------------------------------------------------
diff --git a/mgmt/LocalManager.cc b/mgmt/LocalManager.cc
index 2bc67ad..ce4b85a 100644
--- a/mgmt/LocalManager.cc
+++ b/mgmt/LocalManager.cc
@@ -617,35 +617,6 @@ LocalManager::handleMgmtMsgFromProcesses(MgmtMessageHdr * mh)
   case MGMT_SIGNAL_CONFIG_FILE_READ:
     mgmt_log(stderr, "[LocalManager::handleMgmtMsgFromProcesses] File done '%d'\n", data_raw);
     break;
-  case MGMT_SIGNAL_PLUGIN_ADD_REC:
-    {
-      char var_name[256];
-      char var_value[256];
-      RecDataT data_type;
-      // data_type is an enum type, so cast to an int* to avoid warnings. /leif
-      // coverity[secure_coding]
-      if (sscanf(data_raw, "%255s %d %255s", var_name, (int *) &data_type, var_value) != 3) {
-        Debug("lm", "Warning: Bad data_type: %s", (char *) data_raw);
-        data_type = RECD_MAX;
-      }
-      switch (data_type) {
-      case RECD_COUNTER:
-        RecRegisterStatCounter(RECT_PLUGIN, var_name, ink_atoi64(var_value), RECP_NULL);
-        break;
-      case RECD_INT:
-        RecRegisterStatInt(RECT_PLUGIN, var_name, ink_atoi64(var_value), RECP_NULL);
-        break;
-      case RECD_FLOAT:
-        RecRegisterStatFloat(RECT_PLUGIN, var_name, atof(var_value), RECP_NULL);
-        break;
-      case RECD_STRING:
-        RecRegisterStatString(RECT_PLUGIN, var_name, var_value, RECP_NULL);
-        break;
-      default:
-        break;
-      }
-      break;
-    }
   case MGMT_SIGNAL_PLUGIN_SET_CONFIG:
     {
       char var_name[256];

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/proxy/ICPStats.cc
----------------------------------------------------------------------
diff --git a/proxy/ICPStats.cc b/proxy/ICPStats.cc
index b9da078..9cb370b 100644
--- a/proxy/ICPStats.cc
+++ b/proxy/ICPStats.cc
@@ -44,81 +44,81 @@ ICPProcessor::InitICPStatCallbacks()
 
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.config_mgmt_callouts",
-                     RECD_INT, RECP_NULL, (int) config_mgmt_callouts_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) config_mgmt_callouts_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.reconfig_polls",
-                     RECD_INT, RECP_NULL, (int) reconfig_polls_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) reconfig_polls_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.reconfig_events",
-                     RECD_INT, RECP_NULL, (int) reconfig_events_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) reconfig_events_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.invalid_poll_data",
-                     RECD_INT, RECP_NULL, (int) invalid_poll_data_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) invalid_poll_data_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.no_data_read",
-                     RECD_INT, RECP_NULL, (int) no_data_read_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) no_data_read_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
-                     "proxy.process.icp.short_read", RECD_INT, RECP_NULL, (int) short_read_stat, RecRawStatSyncCount);
+                     "proxy.process.icp.short_read", RECD_INT, RECP_PERSISTENT, (int) short_read_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.invalid_sender",
-                     RECD_INT, RECP_NULL, (int) invalid_sender_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) invalid_sender_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.read_not_v2_icp",
-                     RECD_INT, RECP_NULL, (int) read_not_v2_icp_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) read_not_v2_icp_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.icp_remote_query_requests",
-                     RECD_INT, RECP_NULL, (int) icp_remote_query_requests_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_remote_query_requests_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.icp_remote_responses",
-                     RECD_INT, RECP_NULL, (int) icp_remote_responses_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_remote_responses_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.cache_lookup_success",
-                     RECD_INT, RECP_NULL, (int) icp_cache_lookup_success_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_cache_lookup_success_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.cache_lookup_fail",
-                     RECD_INT, RECP_NULL, (int) icp_cache_lookup_fail_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_cache_lookup_fail_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.query_response_write",
-                     RECD_INT, RECP_NULL, (int) query_response_write_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) query_response_write_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.query_response_partial_write",
-                     RECD_INT, RECP_NULL, (int) query_response_partial_write_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) query_response_partial_write_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.no_icp_request_for_response",
-                     RECD_INT, RECP_NULL, (int) no_icp_request_for_response_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) no_icp_request_for_response_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.icp_response_request_nolock",
-                     RECD_INT, RECP_NULL, (int) icp_response_request_nolock_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_response_request_nolock_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.icp_start_icpoff",
-                     RECD_INT, RECP_NULL, (int) icp_start_icpoff_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_start_icpoff_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.send_query_partial_write",
-                     RECD_INT, RECP_NULL, (int) send_query_partial_write_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) send_query_partial_write_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.icp_queries_no_expected_replies",
-                     RECD_INT, RECP_NULL, (int) icp_queries_no_expected_replies_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_queries_no_expected_replies_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.icp_query_hits",
-                     RECD_INT, RECP_NULL, (int) icp_query_hits_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_query_hits_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.icp_query_misses",
-                     RECD_INT, RECP_NULL, (int) icp_query_misses_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_query_misses_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.invalid_icp_query_response",
-                     RECD_INT, RECP_NULL, (int) invalid_icp_query_response_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) invalid_icp_query_response_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.icp_query_requests",
-                     RECD_INT, RECP_NULL, (int) icp_query_requests_stat, RecRawStatSyncCount);
+                     RECD_INT, RECP_PERSISTENT, (int) icp_query_requests_stat, RecRawStatSyncCount);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.total_icp_response_time",
-                     RECD_FLOAT, RECP_NULL, (int) total_icp_response_time_stat, RecRawStatSyncMHrTimeAvg);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) total_icp_response_time_stat, RecRawStatSyncMHrTimeAvg);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.total_udp_send_queries",
-                     RECD_INT, RECP_NULL, (int) total_udp_send_queries_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) total_udp_send_queries_stat, RecRawStatSyncSum);
   RecRegisterRawStat(icp_rsb, RECT_PROCESS,
                      "proxy.process.icp.total_icp_request_time",
-                     RECD_FLOAT, RECP_NULL, (int) total_icp_request_time_stat, RecRawStatSyncMHrTimeAvg);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) total_icp_request_time_stat, RecRawStatSyncMHrTimeAvg);
 
 }
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/proxy/InkAPI.cc
----------------------------------------------------------------------
diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc
index 53a8b65..a0f752f 100644
--- a/proxy/InkAPI.cc
+++ b/proxy/InkAPI.cc
@@ -6663,7 +6663,17 @@ TSStatCreate(const char *the_name, TSRecordDataType the_type, TSStatPersistence
     syncer = RecRawStatSyncCount;
     break;
   }
-  RecRegisterRawStat(api_rsb, RECT_PLUGIN, the_name, (RecDataT)the_type, (RecPersistT)persist, id, syncer);
+
+  switch (persist) {
+  case TS_STAT_PERSISTENT:
+    RecRegisterRawStat(api_rsb, RECT_PLUGIN, the_name, (RecDataT)the_type, RECP_PERSISTENT, id, syncer);
+    break;
+  case TS_STAT_NON_PERSISTENT:
+    RecRegisterRawStat(api_rsb, RECT_PLUGIN, the_name, (RecDataT)the_type, RECP_NON_PERSISTENT, id, syncer);
+    break;
+  default:
+    return TS_ERROR;
+  }
 
   return id;
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/proxy/Main.cc
----------------------------------------------------------------------
diff --git a/proxy/Main.cc b/proxy/Main.cc
index a48e48a..f224e9b 100644
--- a/proxy/Main.cc
+++ b/proxy/Main.cc
@@ -326,13 +326,13 @@ initialize_process_manager()
   //
   // Define version info records
   //
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.short", appVersionInfo.VersionStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.long", appVersionInfo.FullVersionInfoStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_number", appVersionInfo.BldNumStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_time", appVersionInfo.BldTimeStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_date", appVersionInfo.BldDateStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_machine", appVersionInfo.BldMachineStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_person", appVersionInfo.BldPersonStr, RECP_NULL);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.short", appVersionInfo.VersionStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.long", appVersionInfo.FullVersionInfoStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_number", appVersionInfo.BldNumStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_time", appVersionInfo.BldTimeStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_date", appVersionInfo.BldDateStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_machine", appVersionInfo.BldMachineStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_person", appVersionInfo.BldPersonStr, RECP_NON_PERSISTENT);
 }
 
 //

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/proxy/SocksProxy.cc
----------------------------------------------------------------------
diff --git a/proxy/SocksProxy.cc b/proxy/SocksProxy.cc
index 10b2b10..e447f12 100644
--- a/proxy/SocksProxy.cc
+++ b/proxy/SocksProxy.cc
@@ -535,11 +535,11 @@ start_SocksProxy(int port)
   if (socksproxy_stat_block) {
     RecRegisterRawStat(socksproxy_stat_block, RECT_PROCESS,
                        "proxy.process.socks.proxy.http_connections",
-                       RECD_INT, RECP_NULL, socksproxy_http_connections_stat, RecRawStatSyncCount);
+                       RECD_INT, RECP_PERSISTENT, socksproxy_http_connections_stat, RecRawStatSyncCount);
 
     RecRegisterRawStat(socksproxy_stat_block, RECT_PROCESS,
                        "proxy.process.socks.proxy.tunneled_connections",
-                       RECD_INT, RECP_NULL, socksproxy_tunneled_connections_stat, RecRawStatSyncCount);
+                       RECD_INT, RECP_PERSISTENT, socksproxy_tunneled_connections_stat, RecRawStatSyncCount);
   }
 }
 


[5/5] git commit: TS-2519: update CHANGES

Posted by jp...@apache.org.
TS-2519: update CHANGES


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

Branch: refs/heads/master
Commit: 77e2776bab304f3548749569f75d34432fa15cc6
Parents: e2ffb69
Author: James Peach <jp...@apache.org>
Authored: Mon Jan 27 11:34:32 2014 -0800
Committer: James Peach <jp...@apache.org>
Committed: Mon Jan 27 11:34:32 2014 -0800

----------------------------------------------------------------------
 CHANGES | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/77e2776b/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 81e8e6e..d2cce2d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 4.2.0
 
+  *) [TS-2519] Make build version metrics non-persistent.
+
   *) [TS-1606] Log buffers are not flushed periodically when TS is launched 
    with NO_REMOTE_MANAGEMENT flag
 


Re: [1/5] git commit: TS-2519: make using RECP_NULL a compilation error

Posted by James Peach <jp...@apache.org>.
On Jan 27, 2014, at 12:18 PM, Igor Galić <i....@brainsware.org> wrote:

> 
> 
> ----- Original Message -----
>> Updated Branches:
>>  refs/heads/master 6215bf9e9 -> 77e2776ba
>> 
>> 
>> TS-2519: make using RECP_NULL a compilation error
>> 
>> RECP_NULL can still be useful to represent the case when a record
>> does not have a persistence type. It might be a configuration record,
>> for example. However, stats records shold never be registered as
>> RECP_NULL, because that's ambiguous as to whether it should be
>> persisted This change add some template helpers to ensure that any
>> attempt to register a RECP_NULL stat dies in a horrible shower of
>> compiler errors.
> 
> Shouldn't this go on 5.0.x?

There's no compatibility change here.


>> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/7eeb5c78
>> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/7eeb5c78
>> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/7eeb5c78
>> 
>> Branch: refs/heads/master
>> Commit: 7eeb5c782b2f49a99d5e0ec62599f8c171fa7ea1
>> Parents: 7352493
>> Author: James Peach <jp...@apache.org>
>> Authored: Wed Jan 22 21:47:07 2014 -0800
>> Committer: James Peach <jp...@apache.org>
>> Committed: Mon Jan 27 09:30:14 2014 -0800
>> 
>> ----------------------------------------------------------------------
>> lib/records/I_RecCore.h    | 14 ++++++++++----
>> lib/records/I_RecDefs.h    | 25 +++++++++++++++++++++++++
>> lib/records/I_RecProcess.h |  4 +++-
>> lib/records/P_RecCore.cc   |  8 ++++----
>> lib/records/RecProcess.cc  |  2 +-
>> 5 files changed, 43 insertions(+), 10 deletions(-)
>> ----------------------------------------------------------------------
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/I_RecCore.h
>> ----------------------------------------------------------------------
>> diff --git a/lib/records/I_RecCore.h b/lib/records/I_RecCore.h
>> index 424b1c2..e9b1a4f 100644
>> --- a/lib/records/I_RecCore.h
>> +++ b/lib/records/I_RecCore.h
>> @@ -73,11 +73,17 @@ const char * RecConfigOverrideFromEnvironment(const char
>> * name, const char * va
>> //-------------------------------------------------------------------------
>> // Stat Registration
>> //-------------------------------------------------------------------------
>> -int RecRegisterStatInt(RecT rec_type, const char *name, RecInt data_default,
>> RecPersistT persist_type);
>> -int RecRegisterStatFloat(RecT rec_type, const char *name, RecFloat
>> data_default, RecPersistT persist_type);
>> -int RecRegisterStatString(RecT rec_type, const char *name, RecString
>> data_default, RecPersistT persist_type);
>> -int RecRegisterStatCounter(RecT rec_type, const char *name, RecCounter
>> data_default, RecPersistT persist_type);
>> +int _RecRegisterStatInt(RecT rec_type, const char *name, RecInt
>> data_default, RecPersistT persist_type);
>> +#define RecRegisterStatInt(rec_type, name, data_default, persist_type)
>> _RecRegisterStatInt((rec_type), (name), (data_default),
>> REC_PERSISTENCE_TYPE(persist_type))
>> 
>> +int _RecRegisterStatFloat(RecT rec_type, const char *name, RecFloat
>> data_default, RecPersistT persist_type);
>> +#define RecRegisterStatFloat(rec_type, name, data_default, persist_type)
>> _RecRegisterStatFloat((rec_type), (name), (data_default),
>> REC_PERSISTENCE_TYPE(persist_type))
>> +
>> +int _RecRegisterStatString(RecT rec_type, const char *name, RecString
>> data_default, RecPersistT persist_type);
>> +#define RecRegisterStatString(rec_type, name, data_default, persist_type)
>> _RecRegisterStatString((rec_type), (name), (data_default),
>> REC_PERSISTENCE_TYPE(persist_type))
>> +
>> +int _RecRegisterStatCounter(RecT rec_type, const char *name, RecCounter
>> data_default, RecPersistT persist_type);
>> +#define RecRegisterStatCounter(rec_type, name, data_default, persist_type)
>> _RecRegisterStatCounter((rec_type), (name), (data_default),
>> REC_PERSISTENCE_TYPE(persist_type))
>> 
>> //-------------------------------------------------------------------------
>> // Config Registration
>> 
>> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/I_RecDefs.h
>> ----------------------------------------------------------------------
>> diff --git a/lib/records/I_RecDefs.h b/lib/records/I_RecDefs.h
>> index 5a9c121..ec3afbc 100644
>> --- a/lib/records/I_RecDefs.h
>> +++ b/lib/records/I_RecDefs.h
>> @@ -88,6 +88,31 @@ enum RecPersistT
>>   RECP_NON_PERSISTENT
>> };
>> 
>> +// RECP_NULL should never be used by callers of RecRegisterStat*(). You have
>> to decide
>> +// whether to persist stats or not. The template goop below make sure that
>> passing RECP_NULL
>> +// is a very ugle compile-time error.
> 
> s/ugle/ugly/
> 
> Wouldn't a #pragma error have done it too?

No, I don't think so. That's really only useful for #ifdeffery and that can't work for not allowing particular enum values in a specific context.

J

Re: [1/5] git commit: TS-2519: make using RECP_NULL a compilation error

Posted by Igor Galić <i....@brainsware.org>.

----- Original Message -----
> Updated Branches:
>   refs/heads/master 6215bf9e9 -> 77e2776ba
> 
> 
> TS-2519: make using RECP_NULL a compilation error
> 
> RECP_NULL can still be useful to represent the case when a record
> does not have a persistence type. It might be a configuration record,
> for example. However, stats records shold never be registered as
> RECP_NULL, because that's ambiguous as to whether it should be
> persisted This change add some template helpers to ensure that any
> attempt to register a RECP_NULL stat dies in a horrible shower of
> compiler errors.

Shouldn't this go on 5.0.x?

> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/7eeb5c78
> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/7eeb5c78
> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/7eeb5c78
> 
> Branch: refs/heads/master
> Commit: 7eeb5c782b2f49a99d5e0ec62599f8c171fa7ea1
> Parents: 7352493
> Author: James Peach <jp...@apache.org>
> Authored: Wed Jan 22 21:47:07 2014 -0800
> Committer: James Peach <jp...@apache.org>
> Committed: Mon Jan 27 09:30:14 2014 -0800
> 
> ----------------------------------------------------------------------
>  lib/records/I_RecCore.h    | 14 ++++++++++----
>  lib/records/I_RecDefs.h    | 25 +++++++++++++++++++++++++
>  lib/records/I_RecProcess.h |  4 +++-
>  lib/records/P_RecCore.cc   |  8 ++++----
>  lib/records/RecProcess.cc  |  2 +-
>  5 files changed, 43 insertions(+), 10 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/I_RecCore.h
> ----------------------------------------------------------------------
> diff --git a/lib/records/I_RecCore.h b/lib/records/I_RecCore.h
> index 424b1c2..e9b1a4f 100644
> --- a/lib/records/I_RecCore.h
> +++ b/lib/records/I_RecCore.h
> @@ -73,11 +73,17 @@ const char * RecConfigOverrideFromEnvironment(const char
> * name, const char * va
>  //-------------------------------------------------------------------------
>  // Stat Registration
>  //-------------------------------------------------------------------------
> -int RecRegisterStatInt(RecT rec_type, const char *name, RecInt data_default,
> RecPersistT persist_type);
> -int RecRegisterStatFloat(RecT rec_type, const char *name, RecFloat
> data_default, RecPersistT persist_type);
> -int RecRegisterStatString(RecT rec_type, const char *name, RecString
> data_default, RecPersistT persist_type);
> -int RecRegisterStatCounter(RecT rec_type, const char *name, RecCounter
> data_default, RecPersistT persist_type);
> +int _RecRegisterStatInt(RecT rec_type, const char *name, RecInt
> data_default, RecPersistT persist_type);
> +#define RecRegisterStatInt(rec_type, name, data_default, persist_type)
> _RecRegisterStatInt((rec_type), (name), (data_default),
> REC_PERSISTENCE_TYPE(persist_type))
>  
> +int _RecRegisterStatFloat(RecT rec_type, const char *name, RecFloat
> data_default, RecPersistT persist_type);
> +#define RecRegisterStatFloat(rec_type, name, data_default, persist_type)
> _RecRegisterStatFloat((rec_type), (name), (data_default),
> REC_PERSISTENCE_TYPE(persist_type))
> +
> +int _RecRegisterStatString(RecT rec_type, const char *name, RecString
> data_default, RecPersistT persist_type);
> +#define RecRegisterStatString(rec_type, name, data_default, persist_type)
> _RecRegisterStatString((rec_type), (name), (data_default),
> REC_PERSISTENCE_TYPE(persist_type))
> +
> +int _RecRegisterStatCounter(RecT rec_type, const char *name, RecCounter
> data_default, RecPersistT persist_type);
> +#define RecRegisterStatCounter(rec_type, name, data_default, persist_type)
> _RecRegisterStatCounter((rec_type), (name), (data_default),
> REC_PERSISTENCE_TYPE(persist_type))
>  
>  //-------------------------------------------------------------------------
>  // Config Registration
> 
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7eeb5c78/lib/records/I_RecDefs.h
> ----------------------------------------------------------------------
> diff --git a/lib/records/I_RecDefs.h b/lib/records/I_RecDefs.h
> index 5a9c121..ec3afbc 100644
> --- a/lib/records/I_RecDefs.h
> +++ b/lib/records/I_RecDefs.h
> @@ -88,6 +88,31 @@ enum RecPersistT
>    RECP_NON_PERSISTENT
>  };
>  
> +// RECP_NULL should never be used by callers of RecRegisterStat*(). You have
> to decide
> +// whether to persist stats or not. The template goop below make sure that
> passing RECP_NULL
> +// is a very ugle compile-time error.

s/ugle/ugly/

Wouldn't a #pragma error have done it too?

> +
> +namespace rec {
> +namespace detail {
> +template <RecPersistT>
> +struct is_valid_persistence;
> +
> +template<>
> +struct is_valid_persistence<RECP_PERSISTENT>
> +{
> +  static const RecPersistT value = RECP_PERSISTENT;
> +};
> +
> +template<>
> +struct is_valid_persistence<RECP_NON_PERSISTENT>
> +{
> +  static const RecPersistT value = RECP_NON_PERSISTENT;
> +};
> +
> +}}
> +
> +#define REC_PERSISTENCE_TYPE(P) rec::detail::is_valid_persistence<P>::value
> +
>  enum RecUpdateT
>  {
>    RECU_NULL,                    // default: don't know the behavior
> 

-- 
Igor Galić

Tel: +43 (0) 664 886 22 883
Mail: i.galic@brainsware.org
URL: http://brainsware.org/
GPG: 8716 7A9F 989B ABD5 100F  4008 F266 55D6 2998 1641


[2/5] TS-2519: Stop using the ambiguous RECP_NULL

Posted by jp...@apache.org.
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/proxy/http/HttpConfig.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index be6f0d8..61ba66b 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -176,31 +176,31 @@ register_stat_callbacks()
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.completed_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_completed_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_completed_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_incoming_connections",
-                     RECD_COUNTER, RECP_NULL, (int) http_total_incoming_connections_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_total_incoming_connections_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_client_connections",
-                     RECD_COUNTER, RECP_NULL, (int) http_total_client_connections_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_total_client_connections_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_client_connections_ipv4",
-                     RECD_COUNTER, RECP_NULL, (int) http_total_client_connections_ipv4_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_total_client_connections_ipv4_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_client_connections_ipv6",
-                     RECD_COUNTER, RECP_NULL, (int) http_total_client_connections_ipv6_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_total_client_connections_ipv6_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_server_connections",
-                     RECD_COUNTER, RECP_NULL, (int) http_total_server_connections_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_total_server_connections_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_parent_proxy_connections",
-                     RECD_COUNTER, RECP_NULL, (int) http_total_parent_proxy_connections_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_total_parent_proxy_connections_stat, RecRawStatSyncCount);
 
   // Upstream current connections stats
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
@@ -218,59 +218,59 @@ register_stat_callbacks()
   HTTP_CLEAR_DYN_STAT(http_current_cache_connections_stat);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.avg_transactions_per_client_connection",
-                     RECD_FLOAT, RECP_NULL, (int) http_transactions_per_client_con, RecRawStatSyncAvg);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) http_transactions_per_client_con, RecRawStatSyncAvg);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.avg_transactions_per_server_connection",
-                     RECD_FLOAT, RECP_NULL, (int) http_transactions_per_server_con, RecRawStatSyncAvg);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) http_transactions_per_server_con, RecRawStatSyncAvg);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.avg_transactions_per_parent_connection",
-                     RECD_FLOAT, RECP_NULL, (int) http_transactions_per_parent_con, RecRawStatSyncAvg);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) http_transactions_per_parent_con, RecRawStatSyncAvg);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.client_connection_time",
-                     RECD_INT, RECP_NULL, (int) http_client_connection_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_client_connection_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.parent_proxy_connection_time",
-                     RECD_INT, RECP_NULL, (int) http_parent_proxy_connection_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_parent_proxy_connection_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.server_connection_time",
-                     RECD_INT, RECP_NULL, (int) http_server_connection_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_server_connection_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_connection_time",
-                     RECD_INT, RECP_NULL, (int) http_cache_connection_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_cache_connection_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.errors.pre_accept_hangups",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_pre_accept_hangups_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.errors.pre_accept_hangups",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_pre_accept_hangups_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.errors.empty_hangups",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_empty_hangups_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.errors.empty_hangups",
-                     RECD_FLOAT, RECP_NULL, (int) http_ua_msecs_counts_errors_empty_hangups_stat, RecRawStatSyncCount);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) http_ua_msecs_counts_errors_empty_hangups_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.errors.early_hangups",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_early_hangups_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.errors.early_hangups",
-                     RECD_FLOAT, RECP_NULL, (int) http_ua_msecs_counts_errors_early_hangups_stat, RecRawStatSyncCount);
+                     RECD_FLOAT, RECP_PERSISTENT, (int) http_ua_msecs_counts_errors_early_hangups_stat, RecRawStatSyncCount);
 
 
 
@@ -278,391 +278,391 @@ register_stat_callbacks()
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.incoming_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_incoming_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_incoming_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.outgoing_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_outgoing_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_outgoing_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.incoming_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_incoming_responses_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_incoming_responses_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.invalid_client_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_invalid_client_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_invalid_client_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.missing_host_hdr",
-                     RECD_COUNTER, RECP_NULL, (int) http_missing_host_hdr_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_missing_host_hdr_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.get_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_get_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_get_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.head_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_head_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_head_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.trace_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_trace_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_trace_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.options_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_options_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_options_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.post_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_post_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_post_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.put_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_put_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_put_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.push_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_push_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_push_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.delete_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_delete_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_delete_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.purge_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_purge_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_purge_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.connect_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_connect_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_connect_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.extension_method_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_extension_method_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_extension_method_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.client_no_cache_requests",
-                     RECD_COUNTER, RECP_NULL, (int) http_client_no_cache_requests_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_client_no_cache_requests_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.broken_server_connections",
-                     RECD_COUNTER, RECP_NULL, (int) http_broken_server_connections_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_broken_server_connections_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_lookups",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_lookups_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_lookups_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_writes",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_writes_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_writes_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_updates",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_updates_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_updates_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_deletes",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_deletes_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_deletes_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tunnels",
-                     RECD_COUNTER, RECP_NULL, (int) http_tunnels_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tunnels_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.throttled_proxy_only",
-                     RECD_COUNTER, RECP_NULL, (int) http_throttled_proxy_only_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_throttled_proxy_only_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_taxonomy.i0_n0_m0",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_taxonomy_i0_n0_m0_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_taxonomy_i0_n0_m0_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_taxonomy.i1_n0_m0",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_taxonomy_i1_n0_m0_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_taxonomy_i1_n0_m0_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_taxonomy.i0_n1_m0",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_taxonomy_i0_n1_m0_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_taxonomy_i0_n1_m0_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_taxonomy.i1_n1_m0",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_taxonomy_i1_n1_m0_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_taxonomy_i1_n1_m0_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_taxonomy.i0_n0_m1",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_taxonomy_i0_n0_m1_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_taxonomy_i0_n0_m1_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_taxonomy.i1_n0_m1",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_taxonomy_i1_n0_m1_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_taxonomy_i1_n0_m1_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_taxonomy.i0_n1_m1",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_taxonomy_i0_n1_m1_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_taxonomy_i0_n1_m1_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_taxonomy.i1_n1_m1",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_taxonomy_i1_n1_m1_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_taxonomy_i1_n1_m1_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.icp_suggested_lookups",
-                     RECD_COUNTER, RECP_NULL, (int) http_icp_suggested_lookups_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_icp_suggested_lookups_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.client_transaction_time",
-                     RECD_INT, RECP_NULL, (int) http_client_transaction_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_client_transaction_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.client_write_time",
-                     RECD_INT, RECP_NULL, (int) http_client_write_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_client_write_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.server_read_time",
-                     RECD_INT, RECP_NULL, (int) http_server_read_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_server_read_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.icp_transaction_time",
-                     RECD_INT, RECP_NULL, (int) http_icp_transaction_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_icp_transaction_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.icp_raw_transaction_time",
-                     RECD_INT, RECP_NULL, (int) http_icp_raw_transaction_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_icp_raw_transaction_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.parent_proxy_transaction_time",
-                     RECD_INT, RECP_NULL, (int) http_parent_proxy_transaction_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_parent_proxy_transaction_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.parent_proxy_raw_transaction_time",
-                     RECD_INT, RECP_NULL, (int) http_parent_proxy_raw_transaction_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_parent_proxy_raw_transaction_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.server_transaction_time",
-                     RECD_INT, RECP_NULL, (int) http_server_transaction_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_server_transaction_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.server_raw_transaction_time",
-                     RECD_INT, RECP_NULL, (int) http_server_raw_transaction_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_server_raw_transaction_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_request_header_total_size",
-                     RECD_INT, RECP_NULL, (int) http_user_agent_request_header_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_user_agent_request_header_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_response_header_total_size",
-                     RECD_INT, RECP_NULL, (int) http_user_agent_response_header_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_user_agent_response_header_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_request_document_total_size",
-                     RECD_INT, RECP_NULL, (int) http_user_agent_request_document_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_user_agent_request_document_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_response_document_total_size",
-                     RECD_INT, RECP_NULL, (int) http_user_agent_response_document_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_user_agent_response_document_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_request_header_total_size",
-                     RECD_INT, RECP_NULL, (int) http_origin_server_request_header_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_origin_server_request_header_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_response_header_total_size",
-                     RECD_INT, RECP_NULL, (int) http_origin_server_response_header_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_origin_server_response_header_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_request_document_total_size",
-                     RECD_INT, RECP_NULL, (int) http_origin_server_request_document_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_origin_server_request_document_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_response_document_total_size",
-                     RECD_INT, RECP_NULL,
+                     RECD_INT, RECP_PERSISTENT,
                      (int) http_origin_server_response_document_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.parent_proxy_request_total_bytes",
-                     RECD_INT, RECP_NULL, (int) http_parent_proxy_request_total_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_parent_proxy_request_total_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.parent_proxy_response_total_bytes",
-                     RECD_INT, RECP_NULL, (int) http_parent_proxy_response_total_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_parent_proxy_response_total_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.pushed_response_header_total_size",
-                     RECD_INT, RECP_NULL, (int) http_pushed_response_header_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_pushed_response_header_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.pushed_document_total_size",
-                     RECD_INT, RECP_NULL, (int) http_pushed_document_total_size_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_pushed_document_total_size_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.response_document_size_100",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_document_size_100_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_document_size_100_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.response_document_size_1K",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_document_size_1K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_document_size_1K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.response_document_size_3K",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_document_size_3K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_document_size_3K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.response_document_size_5K",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_document_size_5K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_document_size_5K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.response_document_size_10K",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_document_size_10K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_document_size_10K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.response_document_size_1M",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_document_size_1M_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_document_size_1M_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.response_document_size_inf",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_document_size_inf_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_document_size_inf_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_document_size_100",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_document_size_100_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_document_size_100_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_document_size_1K",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_document_size_1K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_document_size_1K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_document_size_3K",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_document_size_3K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_document_size_3K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_document_size_5K",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_document_size_5K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_document_size_5K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_document_size_10K",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_document_size_10K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_document_size_10K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_document_size_1M",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_document_size_1M_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_document_size_1M_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.request_document_size_inf",
-                     RECD_COUNTER, RECP_NULL, (int) http_request_document_size_inf_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_request_document_size_inf_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_speed_bytes_per_sec_100",
-                     RECD_COUNTER, RECP_NULL, (int) http_user_agent_speed_bytes_per_sec_100_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_user_agent_speed_bytes_per_sec_100_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_speed_bytes_per_sec_1K",
-                     RECD_COUNTER, RECP_NULL, (int) http_user_agent_speed_bytes_per_sec_1K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_user_agent_speed_bytes_per_sec_1K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_speed_bytes_per_sec_10K",
-                     RECD_COUNTER, RECP_NULL, (int) http_user_agent_speed_bytes_per_sec_10K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_user_agent_speed_bytes_per_sec_10K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_speed_bytes_per_sec_100K",
-                     RECD_COUNTER, RECP_NULL, (int) http_user_agent_speed_bytes_per_sec_100K_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_user_agent_speed_bytes_per_sec_100K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_speed_bytes_per_sec_1M",
-                     RECD_COUNTER, RECP_NULL, (int) http_user_agent_speed_bytes_per_sec_1M_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_user_agent_speed_bytes_per_sec_1M_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_speed_bytes_per_sec_10M",
-                     RECD_COUNTER, RECP_NULL, (int) http_user_agent_speed_bytes_per_sec_10M_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_user_agent_speed_bytes_per_sec_10M_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.user_agent_speed_bytes_per_sec_100M",
-                     RECD_COUNTER, RECP_NULL, (int) http_user_agent_speed_bytes_per_sec_100M_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_user_agent_speed_bytes_per_sec_100M_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_speed_bytes_per_sec_100",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_origin_server_speed_bytes_per_sec_100_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_speed_bytes_per_sec_1K",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_origin_server_speed_bytes_per_sec_1K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_speed_bytes_per_sec_10K",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_origin_server_speed_bytes_per_sec_10K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_speed_bytes_per_sec_100K",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_origin_server_speed_bytes_per_sec_100K_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_speed_bytes_per_sec_1M",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_origin_server_speed_bytes_per_sec_1M_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_speed_bytes_per_sec_10M",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_origin_server_speed_bytes_per_sec_10M_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.origin_server_speed_bytes_per_sec_100M",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_origin_server_speed_bytes_per_sec_100M_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_transactions_time",
-                     RECD_INT, RECP_NULL, (int) http_total_transactions_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_total_transactions_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_transactions_think_time",
-                     RECD_INT, RECP_NULL, (int) http_total_transactions_think_time_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_total_transactions_think_time_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_hit_fresh",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_hit_fresh_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_hit_fresh_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_hit_mem_fresh",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_hit_mem_fresh_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_hit_mem_fresh_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_hit_revalidated",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_hit_reval_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_hit_reval_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_hit_ims",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_hit_ims_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_hit_ims_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_hit_stale_served",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_hit_stale_served_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_hit_stale_served_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_miss_cold",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_miss_cold_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_miss_cold_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_miss_changed",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_miss_changed_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_miss_changed_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_miss_client_no_cache",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_miss_client_no_cache_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_miss_client_no_cache_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_miss_client_not_cacheable",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_miss_uncacheable_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_miss_uncacheable_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_miss_ims",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_miss_ims_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_miss_ims_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_read_error",
-                     RECD_COUNTER, RECP_NULL, (int) http_cache_read_error_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_cache_read_error_stat, RecRawStatSyncCount);
 
   /////////////////////////////////////////
   // Bandwidth Savings Transaction Stats //
@@ -670,147 +670,147 @@ register_stat_callbacks()
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_hit_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_tcp_hit_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tcp_hit_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_hit_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_hit_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_hit_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_hit_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_hit_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_hit_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_miss_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_tcp_miss_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tcp_miss_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_miss_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_miss_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_miss_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_miss_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_miss_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_miss_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_expired_miss_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_tcp_expired_miss_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tcp_expired_miss_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_expired_miss_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_expired_miss_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_expired_miss_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_expired_miss_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_expired_miss_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_expired_miss_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_refresh_hit_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_tcp_refresh_hit_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tcp_refresh_hit_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_refresh_hit_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_refresh_hit_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_refresh_hit_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_refresh_hit_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_refresh_hit_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_refresh_hit_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_refresh_miss_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_tcp_refresh_miss_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tcp_refresh_miss_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_refresh_miss_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_refresh_miss_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_refresh_miss_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_refresh_miss_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_refresh_miss_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_refresh_miss_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_client_refresh_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_tcp_client_refresh_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tcp_client_refresh_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_client_refresh_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_client_refresh_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_client_refresh_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_client_refresh_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_client_refresh_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_client_refresh_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_ims_hit_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_tcp_ims_hit_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tcp_ims_hit_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_ims_hit_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_ims_hit_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_ims_hit_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_ims_hit_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_ims_hit_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_ims_hit_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_ims_miss_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_tcp_ims_miss_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_tcp_ims_miss_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_ims_miss_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_ims_miss_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_ims_miss_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.tcp_ims_miss_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_tcp_ims_miss_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_tcp_ims_miss_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.err_client_abort_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_err_client_abort_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_err_client_abort_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.err_client_abort_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_err_client_abort_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_err_client_abort_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.err_client_abort_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_err_client_abort_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_err_client_abort_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.err_connect_fail_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_err_connect_fail_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_err_connect_fail_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.err_connect_fail_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_err_connect_fail_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_err_connect_fail_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.err_connect_fail_origin_server_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_err_connect_fail_origin_server_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_err_connect_fail_origin_server_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.misc_count_stat",
-                     RECD_COUNTER, RECP_NULL, (int) http_misc_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_misc_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.misc_user_agent_bytes_stat",
-                     RECD_INT, RECP_NULL, (int) http_misc_user_agent_bytes_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_misc_user_agent_bytes_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.background_fill_bytes_aborted_stat",
-                     RECD_INT, RECP_NULL, (int) http_background_fill_bytes_aborted_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_background_fill_bytes_aborted_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.background_fill_bytes_completed_stat",
-                     RECD_INT, RECP_NULL, (int) http_background_fill_bytes_completed_stat, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_background_fill_bytes_completed_stat, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_write_errors",
-                     RECD_INT, RECP_NULL, (int) http_cache_write_errors, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_cache_write_errors, RecRawStatSyncSum);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.cache_read_errors",
-                     RECD_INT, RECP_NULL, (int) http_cache_read_errors, RecRawStatSyncSum);
+                     RECD_INT, RECP_PERSISTENT, (int) http_cache_read_errors, RecRawStatSyncSum);
 
   ////////////////////////////////////////////////////////////////////////////////
   // status code counts
@@ -818,179 +818,179 @@ register_stat_callbacks()
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.100_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_100_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_100_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.101_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_101_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_101_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.1xx_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_1xx_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_1xx_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.200_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_200_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_200_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.201_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_201_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_201_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.202_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_202_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_202_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.203_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_203_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_203_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.204_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_204_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_204_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.205_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_205_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_205_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.206_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_206_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_206_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.2xx_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_2xx_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_2xx_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.300_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_300_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_300_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.301_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_301_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_301_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.302_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_302_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_302_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.303_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_303_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_303_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.304_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_304_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_304_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.305_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_305_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_305_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.307_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_307_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_307_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.3xx_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_3xx_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_3xx_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.400_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_400_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_400_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.401_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_401_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_401_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.402_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_402_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_402_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.403_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_403_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_403_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.404_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_404_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_404_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.405_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_405_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_405_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.406_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_406_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_406_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.407_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_407_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_407_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.408_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_408_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_408_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.409_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_409_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_409_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.410_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_410_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_410_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.411_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_411_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_411_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.412_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_412_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_412_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.413_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_413_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_413_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.414_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_414_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_414_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.415_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_415_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_415_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.416_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_416_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_416_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.4xx_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_4xx_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_4xx_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.500_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_500_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_500_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.501_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_501_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_501_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.502_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_502_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_502_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.503_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_503_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_503_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.504_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_504_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_504_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.505_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_505_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_505_count_stat, RecRawStatSyncCount);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.5xx_responses",
-                     RECD_COUNTER, RECP_NULL, (int) http_response_status_5xx_count_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_response_status_5xx_count_stat, RecRawStatSyncCount);
 
 
   ////////////////////////////////////////////////////////////////////////////////
@@ -1000,107 +1000,107 @@ register_stat_callbacks()
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.hit_fresh",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_hit_fresh_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_hit_fresh_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.hit_fresh",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_hit_fresh_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.hit_fresh.process",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_hit_fresh_process_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_hit_fresh_process_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.hit_fresh.process",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_hit_fresh_process_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.hit_revalidated",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_hit_reval_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_hit_reval_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.hit_revalidated",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_hit_reval_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.miss_cold",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_miss_cold_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_miss_cold_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.miss_cold",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_miss_cold_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.miss_not_cacheable",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_miss_uncacheable_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_miss_uncacheable_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.miss_not_cacheable",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_miss_uncacheable_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.miss_changed",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_miss_changed_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_miss_changed_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.miss_changed",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_miss_changed_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.miss_client_no_cache",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_miss_client_no_cache_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.miss_client_no_cache",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_miss_client_no_cache_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.errors.aborts",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_errors_aborts_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_errors_aborts_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.errors.aborts",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_aborts_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.errors.possible_aborts",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_possible_aborts_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.errors.possible_aborts",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_possible_aborts_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.errors.connect_failed",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_connect_failed_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.errors.connect_failed",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_connect_failed_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.errors.other",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_errors_other_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_errors_other_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.errors.other",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_errors_other_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_counts.other.unclassified",
-                     RECD_COUNTER, RECP_NULL, (int) http_ua_msecs_counts_other_unclassified_stat, RecRawStatSyncCount);
+                     RECD_COUNTER, RECP_PERSISTENT, (int) http_ua_msecs_counts_other_unclassified_stat, RecRawStatSyncCount);
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.transaction_totaltime.other.unclassified",
-                     RECD_FLOAT, RECP_NULL,
+                     RECD_FLOAT, RECP_PERSISTENT,
                      (int) http_ua_msecs_counts_other_unclassified_stat, RecRawStatSyncIntMsecsToFloatSeconds);
 
   RecRegisterRawStat(http_rsb, RECT_PROCESS,
                      "proxy.process.http.total_x_redirect_count",
-                     RECD_COUNTER, RECP_NULL,
+                     RECD_COUNTER, RECP_PERSISTENT,
                      (int) http_total_x_redirect_stat, RecRawStatSyncCount);
 
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/7352493c/proxy/logging/LogStandalone.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogStandalone.cc b/proxy/logging/LogStandalone.cc
index c60d703..43746cd 100644
--- a/proxy/logging/LogStandalone.cc
+++ b/proxy/logging/LogStandalone.cc
@@ -121,20 +121,17 @@ initialize_process_manager()
   //
   // Define version info records
   //
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.short", appVersionInfo.VersionStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS,
-                        "proxy.process.version.server.long", appVersionInfo.FullVersionInfoStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_number", appVersionInfo.BldNumStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_time", appVersionInfo.BldTimeStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_date", appVersionInfo.BldDateStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS,
-                        "proxy.process.version.server.build_machine", appVersionInfo.BldMachineStr, RECP_NULL);
-  RecRegisterStatString(RECT_PROCESS,
-                        "proxy.process.version.server.build_person", appVersionInfo.BldPersonStr, RECP_NULL);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.short", appVersionInfo.VersionStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.long", appVersionInfo.FullVersionInfoStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_number", appVersionInfo.BldNumStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_time", appVersionInfo.BldTimeStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_date", appVersionInfo.BldDateStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_machine", appVersionInfo.BldMachineStr, RECP_NON_PERSISTENT);
+  RecRegisterStatString(RECT_PROCESS, "proxy.process.version.server.build_person", appVersionInfo.BldPersonStr, RECP_NON_PERSISTENT);
 //    RecRegisterStatString(RECT_PROCESS,
 //                         "proxy.process.version.server.build_compile_flags",
 //                         appVersionInfo.BldCompileFlagsStr,
-//                         RECP_NULL);
+//                         RECP_NON_PERSISTENT);
 }
 
 /*-------------------------------------------------------------------------