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 2010/02/09 22:11:49 UTC
svn commit: r908221 - in /incubator/trafficserver/traffic/branches/dev:
iocore/cache/Cache.cc iocore/cache/CachePart.cc iocore/cache/CacheTest.cc
iocore/cache/I_Cache.h iocore/cache/P_CacheInternal.h
iocore/cluster/ClusterCache.cc proxy/InkAPI.cc
Author: jplevyak
Date: Tue Feb 9 21:11:49 2010
New Revision: 908221
URL: http://svn.apache.org/viewvc?rev=908221&view=rev
Log:
TS-133: added more cache regressions, also cleaned up repetitive stats code
by wrapping repetitive stretches in a function (high tech). Also
fixed CacheProcessor::remove to not callback the state machine while
holding the partition lock to reduce contention on that lock.
Modified:
incubator/trafficserver/traffic/branches/dev/iocore/cache/Cache.cc
incubator/trafficserver/traffic/branches/dev/iocore/cache/CachePart.cc
incubator/trafficserver/traffic/branches/dev/iocore/cache/CacheTest.cc
incubator/trafficserver/traffic/branches/dev/iocore/cache/I_Cache.h
incubator/trafficserver/traffic/branches/dev/iocore/cache/P_CacheInternal.h
incubator/trafficserver/traffic/branches/dev/iocore/cluster/ClusterCache.cc
incubator/trafficserver/traffic/branches/dev/proxy/InkAPI.cc
Modified: incubator/trafficserver/traffic/branches/dev/iocore/cache/Cache.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/iocore/cache/Cache.cc?rev=908221&r1=908220&r2=908221&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/iocore/cache/Cache.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/iocore/cache/Cache.cc Tue Feb 9 21:11:49 2010
@@ -25,6 +25,7 @@
#include "P_Cache.h"
+#include "P_CacheTest.h"
// Cache Inspector and State Pages
#ifdef NON_MODULAR
@@ -253,14 +254,14 @@
{
ink_debug_assert(mutex->thread_holding == this_ethread());
closed = (alerrno == -1) ? 1 : -1; // Stupid default arguments
- Debug("cache_close", "do_io_close %lX %d %d", (long) this, alerrno, closed);
+ DDebug("cache_close", "do_io_close %lX %d %d", (long) this, alerrno, closed);
die();
}
void
CacheVC::reenable(VIO *avio)
{
- Debug("cache_reenable", "reenable %lX", (long) this);
+ DDebug("cache_reenable", "reenable %lX", (long) this);
(void) avio;
ink_assert(avio->mutex->thread_holding);
if (!trigger) {
@@ -278,7 +279,7 @@
void
CacheVC::reenable_re(VIO *avio)
{
- Debug("cache_reenable", "reenable_re %lX", (long) this);
+ DDebug("cache_reenable", "reenable_re %lX", (long) this);
(void) avio;
ink_assert(avio->mutex->thread_holding);
if (!trigger) {
@@ -1980,115 +1981,87 @@
}
#endif
-// called to abort another writer so that
-// remove can proceed.
-// checks if there is another writer - if another
-// writer found its write is aborted
-
-// the result of this function call is that -
-// either the other writer (if it exists) is
-// aborted or the cacheVC succeeds in
-// open_write
-
int
-CacheVC::removeAbortWriter(int event, Event *e)
+CacheVC::removeEvent(int event, Event *e)
{
NOWARN_UNUSED(e);
NOWARN_UNUSED(event);
- int ow_ret;
- cancel_trigger();
- if (_action.cancelled)
- return free_CacheVC(this);
-
- CACHE_TRY_LOCK(lock, part->mutex, mutex->thread_holding);
- if (!lock)
- VC_SCHED_LOCK_RETRY();
-
- // if there are other writers, we still want this remove to go through.
- // If we are the first writer, don't allow other writers. Otherwise,
- // we to put the vector in the open directory entry in case there are
- // new writers.
- if ((ow_ret = part->open_write(this, true, 1))) {
- // writer exists
- ink_assert(od = part->open_read(&key));
- od->dont_update_directory = 1;
- od = NULL;
- } else {
- od->dont_update_directory = 1;
- }
-
- SET_HANDLER(&CacheVC::removeReadDone);
- return removeReadDone(EVENT_IMMEDIATE, 0);
-
-}
-// remove code
-
-int
-CacheVC::removeReadDone(int event, Event *e)
-{
- NOWARN_UNUSED(e);
- NOWARN_UNUSED(event);
cancel_trigger();
set_io_not_in_progress();
- MUTEX_TRY_LOCK(lock, part->mutex, mutex->thread_holding);
- if (!lock)
- VC_SCHED_LOCK_RETRY();
-
- if (_action.cancelled) {
- if (od)
- part->close_write(this);
- od = NULL;
- return free_CacheVC(this);
- }
-
- if (!buf)
- goto Lcollision;
-
- if (!dir_valid(part, &dir)) {
- last_collision = NULL;
- goto Lcollision;
- }
- // check read completed correct FIXME: remove bad parts
- if ((int) io.aio_result != (int) io.aiocb.aio_nbytes)
- goto Ldone;
{
- // verify that this is our document
- Doc *doc = (Doc *) buf->data();
- /* should be first_key not key..right?? */
- if (doc->first_key == key) {
- ink_assert(doc->magic == DOC_MAGIC);
- if (dir_delete(&key, part, &dir) > 0) {
- if (od)
- part->close_write(this);
- _action.continuation->handleEvent(CACHE_EVENT_REMOVE, 0);
+ MUTEX_TRY_LOCK(lock, part->mutex, mutex->thread_holding);
+ if (!lock)
+ VC_SCHED_LOCK_RETRY();
+ if (_action.cancelled) {
+ if (od) {
+ part->close_write(this);
+ od = 0;
+ }
+ goto Lfree;
+ }
+ if (!f.remove_aborted_writers) {
+ if (part->open_write(this, true, 1)) {
+ // writer exists
+ ink_assert(od = part->open_read(&key));
+ od->dont_update_directory = 1;
od = NULL;
- return free_CacheVC(this);
+ } else {
+ od->dont_update_directory = 1;
}
+ f.remove_aborted_writers = 1;
+ }
+ Lread:
+ if (!buf)
+ goto Lcollision;
+ if (!dir_valid(part, &dir)) {
+ last_collision = NULL;
+ goto Lcollision;
+ }
+ // check read completed correct FIXME: remove bad parts
+ if ((int) io.aio_result != (int) io.aiocb.aio_nbytes)
goto Ldone;
+ {
+ // verify that this is our document
+ Doc *doc = (Doc *) buf->data();
+ /* should be first_key not key..right?? */
+ if (doc->first_key == key) {
+ ink_assert(doc->magic == DOC_MAGIC);
+ if (dir_delete(&key, part, &dir) > 0) {
+ if (od)
+ part->close_write(this);
+ od = NULL;
+ goto Lremoved;
+ }
+ goto Ldone;
+ }
}
+ Lcollision:
+ // check for collision
+ if (dir_probe(&key, part, &dir, &last_collision) > 0) {
+ int ret = do_read_call(&key);
+ if (ret == EVENT_RETURN)
+ goto Lread;
+ return ret;
+ }
+ Ldone:
+ CACHE_INCREMENT_DYN_STAT(cache_remove_failure_stat);
+ if (od)
+ part->close_write(this);
}
-Lcollision:
- // check for collision
- if (dir_probe(&key, part, &dir, &last_collision) > 0) {
- int ret = do_read_call(&key);
- if (ret == EVENT_RETURN)
- goto Lcallreturn;
- return ret;
- }
-Ldone:
- CACHE_INCREMENT_DYN_STAT(cache_remove_failure_stat);
- if (od)
- part->close_write(this);
+ ink_debug_assert(!part || this_ethread() != part->mutex->thread_holding);
_action.continuation->handleEvent(CACHE_EVENT_REMOVE_FAILED, (void *) -ECACHE_NO_DOC);
+ goto Lfree;
+Lremoved:
+ _action.continuation->handleEvent(CACHE_EVENT_REMOVE, 0);
+Lfree:
return free_CacheVC(this);
-Lcallreturn:
- return handleEvent(AIO_EVENT_DONE, 0); // hopefully a tail call
}
Action *
-Cache::remove(Continuation *cont, CacheKey *key, bool user_agents,
- bool link, CacheFragType type, char *hostname, int host_len)
+Cache::remove(Continuation *cont, CacheKey *key, CacheFragType type,
+ bool user_agents, bool link,
+ char *hostname, int host_len)
{
NOWARN_UNUSED(user_agents);
NOWARN_UNUSED(link);
@@ -2123,9 +2096,8 @@
c->dir = result;
c->f.remove = 1;
- SET_CONTINUATION_HANDLER(c, &CacheVC::removeAbortWriter);
- //Action *ret_action = ACTION_RESULT_DONE;
- int ret = c->removeAbortWriter(EVENT_IMMEDIATE, 0);
+ SET_CONTINUATION_HANDLER(c, &CacheVC::removeEvent);
+ int ret = c->removeEvent(EVENT_IMMEDIATE, 0);
if (ret == EVENT_DONE)
return ACTION_RESULT_DONE;
else
@@ -2140,7 +2112,7 @@
url->MD5_get(&md5);
int host_len = 0;
const char *hostname = url->host_get(&host_len);
- return remove(cont, &md5, true, false, type, (char *) hostname, host_len);
+ return remove(cont, &md5, type, true, false, (char *) hostname, host_len);
}
#endif
@@ -2154,7 +2126,6 @@
void
cplist_init()
{
-
int i;
unsigned int j;
cp_list_len = 0;
@@ -2548,236 +2519,66 @@
return host_rec->parts[0];
}
+static void reg_int(const char *str, int stat, RecRawStatBlock *rsb, const char *prefix) {
+ char stat_str[256];
+ snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, str);
+ RecRegisterRawStat(rsb, RECT_PROCESS,
+ stat_str, RECD_INT, RECP_NON_PERSISTENT, stat, RecRawStatSyncSum);
+ DOCACHE_CLEAR_DYN_STAT(stat)
+}
+#define REG_INT(_str, _stat) reg_int(_str, (int)_stat, rsb, prefix)
// Register Stats
void
register_cache_stats(RecRawStatBlock *rsb, const char *prefix)
{
-
char stat_str[256];
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "bytes_used");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_bytes_used_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_bytes_used_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "bytes_total");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_bytes_total_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_bytes_total_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "ram_cache.bytes_used");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_ram_cache_bytes_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_ram_cache_bytes_stat);
-
+ REG_INT("bytes_used", cache_bytes_used_stat);
+ REG_INT("bytes_total", cache_bytes_total_stat);
snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "ram_cache.total_bytes");
RecRegisterRawStat(rsb, RECT_PROCESS,
stat_str, RECD_INT, RECP_NULL, (int) cache_ram_cache_bytes_total_stat, RecRawStatSyncSum);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "ram_cache.misses");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_ram_cache_misses_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_ram_cache_misses_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "ram_cache.hits");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_ram_cache_hits_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_ram_cache_hits_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "pread_count");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_pread_count_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_pread_count_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "percent_full");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_percent_full_stat, RecRawStatSyncSum);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "lookup.active");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_lookup_active_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_lookup_active_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "lookup.success");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_lookup_success_stat, RecRawStatSyncSum);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "lookup.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_lookup_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_lookup_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "read.active");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_read_active_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_read_active_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "read.success");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_read_success_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_read_success_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "read.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_read_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_read_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "write.active");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_write_active_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_write_active_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "write.success");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_write_success_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_write_success_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "write.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_write_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_write_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "write.backlog.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str,
- RECD_INT, RECP_NON_PERSISTENT, (int) cache_write_backlog_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_write_backlog_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "update.active");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_update_active_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_update_active_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "update.success");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_update_success_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_update_success_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "update.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_update_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_update_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "remove.active");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_remove_active_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_remove_active_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "remove.success");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_remove_success_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_remove_success_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "remove.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_remove_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_remove_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "evacuate.active");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_evacuate_active_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_evacuate_active_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "evacuate.success");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_evacuate_success_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_evacuate_success_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "evacuate.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_evacuate_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_evacuate_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "scan.active");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_scan_active_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_scan_active_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "scan.success");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_scan_success_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_scan_success_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "scan.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_scan_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_scan_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "direntries.total");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_direntries_total_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_direntries_total_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "direntries.used");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_direntries_used_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_direntries_used_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "directory_collision");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str,
- RECD_INT, RECP_NON_PERSISTENT, (int) cache_directory_collision_count_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_directory_collision_count_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "frags_per_doc.1");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str,
- RECD_INT, RECP_NON_PERSISTENT, (int) cache_single_fragment_document_count_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_single_fragment_document_count_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "frags_per_doc.2");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str,
- RECD_INT, RECP_NON_PERSISTENT, (int) cache_two_fragment_document_count_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_two_fragment_document_count_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "frags_per_doc.3+");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str,
- RECD_INT, RECP_NON_PERSISTENT,
- (int) cache_three_plus_plus_fragment_document_count_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_three_plus_plus_fragment_document_count_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "read_busy.success");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_read_busy_success_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_read_busy_success_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "read_busy.failure");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_read_busy_failure_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_read_busy_failure_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "write_bytes_stat");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_write_bytes_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_write_bytes_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "vector_marshals");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_hdr_vector_marshal_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_hdr_vector_marshal_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "hdr_marshals");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_hdr_marshal_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_hdr_marshal_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "hdr_marshal_bytes");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_hdr_marshal_bytes_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_hdr_marshal_bytes_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "gc_bytes_evacuated");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_gc_bytes_evacuated_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_gc_bytes_evacuated_stat);
-
- snprintf(stat_str, sizeof(stat_str), "%s.%s", prefix, "gc_frags_evacuated");
- RecRegisterRawStat(rsb, RECT_PROCESS,
- stat_str, RECD_INT, RECP_NON_PERSISTENT, (int) cache_gc_frags_evacuated_stat, RecRawStatSyncSum);
- DOCACHE_CLEAR_DYN_STAT(cache_gc_frags_evacuated_stat);
+ REG_INT("ram_cache.bytes_used", cache_ram_cache_bytes_stat);
+ REG_INT("ram_cache.hits", cache_ram_cache_hits_stat);
+ REG_INT("pread_count", cache_pread_count_stat);
+ REG_INT("percent_full", cache_percent_full_stat);
+ REG_INT("lookup.active", cache_lookup_active_stat);
+ REG_INT("lookup.success", cache_lookup_success_stat);
+ REG_INT("lookup.failure", cache_lookup_failure_stat);
+ REG_INT("read.active", cache_read_active_stat);
+ REG_INT("read.success", cache_read_success_stat);
+ REG_INT("read.failure", cache_read_failure_stat);
+ REG_INT("write.active", cache_write_active_stat);
+ REG_INT("write.success", cache_write_success_stat);
+ REG_INT("write.failure", cache_write_failure_stat);
+ REG_INT("write.backlog.failure", cache_write_backlog_failure_stat);
+ REG_INT("update.active", cache_update_active_stat);
+ REG_INT("update.success", cache_update_success_stat);
+ REG_INT("update.failure", cache_update_failure_stat);
+ REG_INT("remove.active", cache_remove_active_stat);
+ REG_INT("remove.success", cache_remove_success_stat);
+ REG_INT("remove.failure", cache_remove_failure_stat);
+ REG_INT("evacuate.active", cache_evacuate_active_stat);
+ REG_INT("evacuate.success", cache_evacuate_success_stat);
+ REG_INT("evacuate.failure", cache_evacuate_failure_stat);
+ REG_INT("scan.active", cache_scan_active_stat);
+ REG_INT("scan.success", cache_scan_success_stat);
+ REG_INT("scan.failure", cache_scan_failure_stat);
+ REG_INT("direntries.total", cache_direntries_total_stat);
+ REG_INT("direntries.used", cache_direntries_used_stat);
+ REG_INT("directory_collision", cache_directory_collision_count_stat);
+ REG_INT("frags_per_doc.1", cache_single_fragment_document_count_stat);
+ REG_INT("frags_per_doc.2", cache_two_fragment_document_count_stat);
+ REG_INT("frags_per_doc.3+", cache_three_plus_plus_fragment_document_count_stat);
+ REG_INT("read_busy.success", cache_read_busy_success_stat);
+ REG_INT("read_busy.failure", cache_read_busy_failure_stat);
+ REG_INT("write_bytes_stat", cache_write_bytes_stat);
+ REG_INT("vector_marshals", cache_hdr_vector_marshal_stat);
+ REG_INT("hdr_marshals", cache_hdr_marshal_stat);
+ REG_INT("hdr_marshal_bytes", cache_hdr_marshal_bytes_stat);
+ REG_INT("gc_bytes_evacuated", cache_gc_bytes_evacuated_stat);
+ REG_INT("gc_frags_evacuated", cache_gc_frags_evacuated_stat);
}
@@ -3013,7 +2814,7 @@
sm->handleEvent(CACHE_EVENT_OPEN_WRITE, (void *) vc);
return ACTION_RESULT_DONE;
} else {
- Debug("cache_plugin", "[CacheProcessor::open_write] Error: NewCacheVC not set");
+ DDebug("cache_plugin", "[CacheProcessor::open_write] Error: NewCacheVC not set");
sm->handleEvent(CACHE_EVENT_OPEN_WRITE_FAILED, (void *) -ECACHE_WRITE_FAIL);
return ACTION_RESULT_DONE;
}
@@ -3032,7 +2833,7 @@
}
#endif
if (cache_global_hooks != NULL && cache_global_hooks->hooks_set > 0) {
- Debug("cache_plugin", "[CacheProcessor::remove] Cache hooks are set");
+ DDebug("cache_plugin", "[CacheProcessor::remove] Cache hooks are set");
APIHook *cache_lookup = cache_global_hooks->get(INK_CACHE_PLUGIN_HOOK);
if (cache_lookup != NULL) {
NewCacheVC *vc = NewCacheVC::alloc(cont, url, NULL);
Modified: incubator/trafficserver/traffic/branches/dev/iocore/cache/CachePart.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/iocore/cache/CachePart.cc?rev=908221&r1=908220&r2=908221&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/iocore/cache/CachePart.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/iocore/cache/CachePart.cc Tue Feb 9 21:11:49 2010
@@ -222,7 +222,7 @@
ink_debug_assert(hostinfo_copied);
SET_HANDLER(&CacheVC::scanRemoveDone);
// force remove even if there is a writer
- cacheProcessor.remove(this, &doc->first_key, true, false, CACHE_FRAG_TYPE_HTTP, (char *) hname, hlen);
+ cacheProcessor.remove(this, &doc->first_key, CACHE_FRAG_TYPE_HTTP, true, false, (char *) hname, hlen);
return EVENT_CONT;
} else {
offset = (char *) doc - buf->data();
Modified: incubator/trafficserver/traffic/branches/dev/iocore/cache/CacheTest.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/iocore/cache/CacheTest.cc?rev=908221&r1=908220&r2=908221&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/iocore/cache/CacheTest.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/iocore/cache/CacheTest.cc Tue Feb 9 21:11:49 2010
@@ -313,12 +313,32 @@
read_test.expect_event = VC_EVENT_READ_COMPLETE;
read_test.total_size = 100;
read_test.key = write_test.key;
+
+ CACHE_SM(t, remove_test, { cacheProcessor.remove(this, &key); } );
+ remove_test.expect_event = CACHE_EVENT_REMOVE;
+ remove_test.key = write_test.key;
+
+ CACHE_SM(t, lookup_fail_test, { cacheProcessor.lookup(this, &key); } );
+ lookup_fail_test.expect_event = CACHE_EVENT_LOOKUP_FAILED;
+ lookup_fail_test.key = write_test.key;
+
+ CACHE_SM(t, read_fail_test, { cacheProcessor.open_read(this, &key); } );
+ read_fail_test.expect_event = CACHE_EVENT_OPEN_READ_FAILED;
+ read_fail_test.key = write_test.key;
+ CACHE_SM(t, remove_fail_test, { cacheProcessor.remove(this, &key); } );
+ remove_fail_test.expect_event = CACHE_EVENT_REMOVE_FAILED;
+ rand_CacheKey(&remove_fail_test.key, thread->mutex);
+
r_sequential(
t,
write_test.clone(),
lookup_test.clone(),
read_test.clone(),
+ remove_test.clone(),
+ lookup_fail_test.clone(),
+ read_fail_test.clone(),
+ remove_fail_test.clone(),
NULL
)->run(pstatus);
return;
Modified: incubator/trafficserver/traffic/branches/dev/iocore/cache/I_Cache.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/iocore/cache/I_Cache.h?rev=908221&r1=908220&r2=908221&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/iocore/cache/I_Cache.h (original)
+++ incubator/trafficserver/traffic/branches/dev/iocore/cache/I_Cache.h Tue Feb 9 21:11:49 2010
@@ -79,8 +79,9 @@
time_t pin_in_cache = (time_t) 0,
char *hostname = 0, int host_len = 0);
inkcoreapi Action *remove(Continuation *cont, CacheKey *key,
+ CacheFragType frag_type = CACHE_FRAG_TYPE_NONE,
bool rm_user_agents = true, bool rm_link = false,
- CacheFragType frag_type = CACHE_FRAG_TYPE_NONE, char *hostname = 0, int host_len = 0);
+ char *hostname = 0, int host_len = 0);
Action *scan(Continuation *cont, char *hostname = 0, int host_len = 0, int KB_per_second = 2500);
#ifdef HTTP_CACHE
Action *lookup(Continuation *cont, URL *url, bool local_only = false,
Modified: incubator/trafficserver/traffic/branches/dev/iocore/cache/P_CacheInternal.h
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/iocore/cache/P_CacheInternal.h?rev=908221&r1=908220&r2=908221&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/iocore/cache/P_CacheInternal.h (original)
+++ incubator/trafficserver/traffic/branches/dev/iocore/cache/P_CacheInternal.h Tue Feb 9 21:11:49 2010
@@ -178,20 +178,16 @@
RecIncrRawStat(cache_rsb, mutex->thread_holding, (int) (x), -1); \
RecIncrRawStat(part->cache_part->part_rsb, mutex->thread_holding, (int) (x), -1);
-
#define CACHE_PART_SUM_DYN_STAT(x,y) \
- RecIncrRawStat(part->cache_part->part_rsb, mutex->thread_holding, (int) (x), (int) y);
-
+ RecIncrRawStat(part->cache_part->part_rsb, mutex->thread_holding, (int) (x), (int) y);
#define CACHE_SUM_DYN_STAT(x, y) \
RecIncrRawStat(cache_rsb, mutex->thread_holding, (int) (x), (int) (y)); \
RecIncrRawStat(part->cache_part->part_rsb, mutex->thread_holding, (int) (x), (int) (y));
-
#define GLOBAL_CACHE_SUM_GLOBAL_DYN_STAT(x, y) \
RecIncrGlobalRawStatSum(cache_rsb,(x),(y))
-
#define CACHE_SUM_GLOBAL_DYN_STAT(x, y) \
RecIncrGlobalRawStatSum(cache_rsb,(x),(y)) \
RecIncrGlobalRawStatSum(part->cache_part->part_rsb,(x),(y))
@@ -300,10 +296,9 @@
int updateVector(int event, Event *e);
int updateReadDone(int event, Event *e);
-
int updateVecWrite(int event, Event *e);
- int removeReadDone(int event, Event *e);
- int removeAbortWriter(int event, Event *e);
+
+ int removeEvent(int event, Event *e);
int linkWrite(int event, Event *e);
int derefRead(int event, Event *e);
@@ -448,6 +443,7 @@
#endif
unsigned int update:1;
unsigned int remove:1;
+ unsigned int remove_aborted_writers:1;
unsigned int open_read_timeout:1; // UNUSED
unsigned int data_done:1;
unsigned int read_from_writer_called:1;
@@ -915,8 +911,9 @@
CacheFragType frag_type, bool overwrite = false,
time_t pin_in_cache = (time_t) 0, char *hostname = 0, int host_len = 0);
inkcoreapi Action *remove(Continuation *cont, CacheKey *key,
+ CacheFragType type = CACHE_FRAG_TYPE_HTTP,
bool user_agents = true, bool link = false,
- CacheFragType type = CACHE_FRAG_TYPE_HTTP, char *hostname = 0, int host_len = 0);
+ char *hostname = 0, int host_len = 0);
Action *scan(Continuation *cont, char *hostname = 0, int host_len = 0, int KB_per_second = 2500);
#ifdef HTTP_CACHE
@@ -1134,8 +1131,8 @@
}
inline Action *
-CacheProcessor::remove(Continuation *cont, CacheKey *key,
- bool rm_user_agents, bool rm_link, CacheFragType frag_type, char *hostname, int host_len)
+CacheProcessor::remove(Continuation *cont, CacheKey *key, CacheFragType frag_type,
+ bool rm_user_agents, bool rm_link, char *hostname, int host_len)
{
#ifdef CLUSTER_CACHE
if (cache_clustering_enabled > 0) {
@@ -1146,7 +1143,7 @@
}
}
#endif
- return caches[frag_type]->remove(cont, key, rm_user_agents, rm_link, frag_type, hostname, host_len);
+ return caches[frag_type]->remove(cont, key, frag_type, rm_user_agents, rm_link, hostname, host_len);
}
inline Action *
@@ -1168,8 +1165,6 @@
return lookup(cont, &md5, local_only, frag_type, (char *) hostname, host_len);
}
-
-
inline Action *
CacheProcessor::open_read_buffer(Continuation *cont, MIOBuffer *buf,
URL *url, CacheHTTPHdr *request, CacheLookupHttpConfig *params, CacheFragType type)
@@ -1184,8 +1179,6 @@
return caches[type]->open_read(cont, url, request, params, type);
}
-
-
inline Action *
CacheProcessor::open_write_buffer(Continuation * cont, MIOBuffer * buf, URL * url,
CacheHTTPHdr * request, CacheHTTPHdr * response, CacheFragType type)
@@ -1203,7 +1196,6 @@
#endif
-
#ifdef CLUSTER_CACHE
inline Action *
CacheProcessor::open_read_internal(int opcode,
@@ -1291,13 +1283,4 @@
return theCache;
}
-inline int
-cache_history_dump()
-{
- return 0;
-}
-
-
-
-
#endif /* _P_CACHE_INTERNAL_H__ */
Modified: incubator/trafficserver/traffic/branches/dev/iocore/cluster/ClusterCache.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/iocore/cluster/ClusterCache.cc?rev=908221&r1=908220&r2=908221&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/iocore/cluster/ClusterCache.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/iocore/cluster/ClusterCache.cc Tue Feb 9 21:11:49 2010
@@ -1395,10 +1395,10 @@
}
Cache *call_cache = caches[c->frag_type];
- Action *a = call_cache->remove(c, &key,
+ Action *a = call_cache->remove(c, &key, c->frag_type,
!!(c->cfl_flags & CFL_REMOVE_USER_AGENTS),
!!(c->cfl_flags & CFL_REMOVE_LINK),
- c->frag_type, hostname, host_len);
+ hostname, host_len);
if (a != ACTION_RESULT_DONE) {
c->cache_action = a;
}
Modified: incubator/trafficserver/traffic/branches/dev/proxy/InkAPI.cc
URL: http://svn.apache.org/viewvc/incubator/trafficserver/traffic/branches/dev/proxy/InkAPI.cc?rev=908221&r1=908220&r2=908221&view=diff
==============================================================================
--- incubator/trafficserver/traffic/branches/dev/proxy/InkAPI.cc (original)
+++ incubator/trafficserver/traffic/branches/dev/proxy/InkAPI.cc Tue Feb 9 21:11:49 2010
@@ -7070,7 +7070,7 @@
CacheInfo *info = (CacheInfo *) key;
INKContInternal *i = (INKContInternal *) contp;
return (INKAction)
- cacheProcessor.remove(i, &info->cache_key, true, false, info->frag_type, info->hostname, info->len);
+ cacheProcessor.remove(i, &info->cache_key, info->frag_type, true, false, info->hostname, info->len);
}
INKAction