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;