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

svn commit: r926813 - in /incubator/trafficserver/traffic/trunk: iocore/cache/Cache.cc librecords/I_RecDefs.h librecords/RecProcess.cc

Author: bcall
Date: Tue Mar 23 22:14:26 2010
New Revision: 926813

URL: http://svn.apache.org/viewvc?rev=926813&view=rev
Log:
TS-162 Wrapped a mutex around the updating of the lasts and globals in
the sync and clear functions.  Changed the get and set in cache for the
stats to increment.

Modified:
    incubator/trafficserver/traffic/trunk/iocore/cache/Cache.cc
    incubator/trafficserver/traffic/trunk/librecords/I_RecDefs.h
    incubator/trafficserver/traffic/trunk/librecords/RecProcess.cc

Modified: incubator/trafficserver/traffic/trunk/iocore/cache/Cache.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/iocore/cache/Cache.cc?rev=926813&r1=926812&r2=926813&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/iocore/cache/Cache.cc (original)
+++ incubator/trafficserver/traffic/trunk/iocore/cache/Cache.cc Tue Mar 23 22:14:26 2010
@@ -1621,7 +1621,6 @@ AIO_Callback_handler::handle_disk_failur
         inku64 total_bytes_delete = 0;
         inku64 total_dir_delete = 0;
         inku64 used_dir_delete = 0;
-        ink64 sum;
 
         for (p = 0; p < gnpart; p++) {
           if (d->fd == gpart[p]->fd) {
@@ -1630,17 +1629,10 @@ AIO_Callback_handler::handle_disk_failur
             total_bytes_delete = gpart[p]->len - part_dirlen(gpart[p]);
           }
         }
-        RecGetGlobalRawStatSum(cache_rsb, cache_bytes_total_stat, &sum);
-        sum -= total_bytes_delete;
-        RecSetGlobalRawStatSum(cache_rsb, cache_bytes_total_stat, sum);
-
-        RecGetGlobalRawStatSum(cache_rsb, cache_direntries_total_stat, &sum);
-        sum -= total_dir_delete;
-        RecSetGlobalRawStatSum(cache_rsb, cache_direntries_total_stat, sum);
-
-        RecGetGlobalRawStatSum(cache_rsb, cache_direntries_used_stat, &sum);
-        sum -= used_dir_delete;
-        RecSetGlobalRawStatSum(cache_rsb, cache_direntries_used_stat, sum);
+
+        RecIncrGlobalRawStat(cache_rsb, cache_bytes_total_stat, -total_bytes_delete);
+        RecIncrGlobalRawStat(cache_rsb, cache_bytes_total_stat, -total_dir_delete);
+        RecIncrGlobalRawStat(cache_rsb, cache_bytes_total_stat, -cache_direntries_used_stat);
 
         if (theCache) {
           rebuild_host_table(theCache);

Modified: incubator/trafficserver/traffic/trunk/librecords/I_RecDefs.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/librecords/I_RecDefs.h?rev=926813&r1=926812&r2=926813&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/librecords/I_RecDefs.h (original)
+++ incubator/trafficserver/traffic/trunk/librecords/I_RecDefs.h Tue Mar 23 22:14:26 2010
@@ -157,6 +157,7 @@ struct RecRawStatBlock
   RecRawStat **global;          // global raw-stat storage (ptr to RecRecord)
   int num_stats;                // number of stats in this block
   int max_stats;                // maximum number of stats for this block
+  ink_mutex mutex;
 };
 
 //-------------------------------------------------------------------------

Modified: incubator/trafficserver/traffic/trunk/librecords/RecProcess.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/librecords/RecProcess.cc?rev=926813&r1=926812&r2=926813&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/librecords/RecProcess.cc (original)
+++ incubator/trafficserver/traffic/trunk/librecords/RecProcess.cc Tue Mar 23 22:14:26 2010
@@ -89,12 +89,15 @@ raw_stat_sync_to_global(RecRawStatBlock 
     total.count += tlp->count;
   }
 
+  // lock so the setting of the globals and last values are atomic
+  ink_mutex_acquire(&(rsb->mutex));
+
   // get the delta from the last sync
   RecRawStat delta;
   delta.sum = total.sum - rsb->global[id]->last_sum;
   delta.count = total.count - rsb->global[id]->last_count;
 
-  Debug("stats", "raw_stat_sync_to_global(): rsb pointer:%016llX id:%d delta:%lld total:%lld last:%lld global:%lld\n", (long long)rsb, id, delta.sum, total.sum, rsb->global[id]->last_sum, rsb->global[id]->sum);
+  Debug("stats", "raw_stat_sync_to_global(): rsb pointer:%llX id:%d delta:%lld total:%lld last:%lld global:%lld\n", (long long)rsb, id, delta.sum, total.sum, rsb->global[id]->last_sum, rsb->global[id]->sum);
 
   // increment the global values by the delta
   ink_atomic_increment64(&(rsb->global[id]->sum), delta.sum);
@@ -104,8 +107,9 @@ raw_stat_sync_to_global(RecRawStatBlock 
   ink_atomic_swap64(&(rsb->global[id]->last_sum), total.sum);
   ink_atomic_swap64(&(rsb->global[id]->last_count), total.count);
 
-  return REC_ERR_OKAY;
+  ink_mutex_release(&(rsb->mutex));
 
+  return REC_ERR_OKAY;
 }
 
 //-------------------------------------------------------------------------
@@ -118,8 +122,11 @@ raw_stat_clear_sum(RecRawStatBlock *rsb,
   Debug("stats", "raw_stat_clear_sum(): rsb pointer:%llX id:%d\n", (long long)rsb, id);
 
   // the globals need to be reset too
+  // lock so the setting of the globals and last values are atomic
+  ink_mutex_acquire(&(rsb->mutex));
   ink_atomic_swap64(&(rsb->global[id]->sum), 0);
   ink_atomic_swap64(&(rsb->global[id]->last_sum), 0);
+  ink_mutex_release(&(rsb->mutex));
 
   // reset the local stats
   RecRawStat *tlp;
@@ -140,8 +147,11 @@ raw_stat_clear_count(RecRawStatBlock * r
   Debug("stats", "raw_stat_clear_count(): rsb pointer:%llX id:%d\n", (long long)rsb, id);
 
   // the globals need to be reset too
+  // lock so the setting of the globals and last values are atomic
+  ink_mutex_acquire(&(rsb->mutex));
   ink_atomic_swap64(&(rsb->global[id]->count), 0);
   ink_atomic_swap64(&(rsb->global[id]->last_count), 0);
+  ink_mutex_release(&(rsb->mutex));
 
   // reset the local stats
   RecRawStat *tlp;