You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2015/06/16 03:06:42 UTC
[1/2] trafficserver git commit: Add TS-3541
Repository: trafficserver
Updated Branches:
refs/heads/master 2c9acad7d -> 4a24228cc
Add TS-3541
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/4a24228c
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/4a24228c
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/4a24228c
Branch: refs/heads/master
Commit: 4a24228cc7bc4823bd28e5e3ef59c9360aed75b1
Parents: 6ad5348
Author: Leif Hedstrom <zw...@apache.org>
Authored: Mon Jun 15 16:38:53 2015 -0600
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Mon Jun 15 19:01:51 2015 -0600
----------------------------------------------------------------------
CHANGES | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/4a24228c/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index df42717..d0df05e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
-*- coding: utf-8 -*-
Changes with Apache Traffic Server 6.0.0
+ *) [TS-3541] Eliminate the interim cache feature.
+
*) [TS-3327]: Nuke the support for HTTP/0.9.
*) [TS-2054] Generate warning for reserved port open failure.
[2/2] trafficserver git commit: TS-3541 Eliminate the interim cache
feature
Posted by zw...@apache.org.
TS-3541 Eliminate the interim cache feature
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/6ad5348f
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/6ad5348f
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/6ad5348f
Branch: refs/heads/master
Commit: 6ad5348ffa8e66a20acc4344d5fe0df68073ebbb
Parents: 2c9acad
Author: Leif Hedstrom <zw...@apache.org>
Authored: Thu Apr 30 11:17:56 2015 -0600
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Mon Jun 15 19:01:51 2015 -0600
----------------------------------------------------------------------
configure.ac | 16 +-
iocore/cache/Cache.cc | 533 ------------------------------------
iocore/cache/CacheDir.cc | 152 ----------
iocore/cache/CacheRead.cc | 55 ----
iocore/cache/CacheWrite.cc | 177 ------------
iocore/cache/I_Store.h | 5 -
iocore/cache/P_CacheDir.h | 31 ---
iocore/cache/P_CacheInternal.h | 69 +----
iocore/cache/P_CacheVol.h | 455 ------------------------------
iocore/cache/Store.cc | 48 ----
lib/ts/ink_config.h.in | 1 -
mgmt/RecordsConfig.cc | 6 -
12 files changed, 2 insertions(+), 1546 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/configure.ac
----------------------------------------------------------------------
diff --git a/configure.ac b/configure.ac
index 440dcea..ce9a8b6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -264,20 +264,6 @@ TS_ARG_ENABLE_VAR([has],[wccp])
AC_SUBST(has_wccp)
AM_CONDITIONAL([BUILD_WCCP], [test 0 -ne $has_wccp])
-#
-# InterimCache
-#
-AC_MSG_CHECKING([whether to enable interim cache support])
-AC_ARG_ENABLE([interim_cache],
- [AS_HELP_STRING([--enable-interim-cache],[enable interim cache])],
- [],
- [enable_interim_cache=no]
-)
-AC_MSG_RESULT([$enable_interim_cache])
-TS_ARG_ENABLE_VAR([has],[interim_cache])
-AC_SUBST(has_interim_cache)
-AM_CONDITIONAL([BUILD_INTERIM_CACHE], [test 0 -ne $has_interim_cache])
-
# Google profiler
AC_MSG_CHECKING([whether to enable profiler])
AC_ARG_WITH([profiler],
@@ -473,7 +459,7 @@ AC_MSG_RESULT([$enable_cppapi])
AM_CONDITIONAL([ENABLE_CPPAPI], [ test "x${enable_cppapi}" = "xyes" ])
#
-# Disable LuaJIT? This is a interrim option, when Lua becomes part of the core
+# Disable LuaJIT? This is a interim option, when Lua becomes part of the core
# requirements, we will remove this option.
#
AC_MSG_CHECKING([whether to disable LuaJIT])
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/Cache.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/Cache.cc b/iocore/cache/Cache.cc
index e062c08..8e8fd6e 100644
--- a/iocore/cache/Cache.cc
+++ b/iocore/cache/Cache.cc
@@ -88,9 +88,6 @@ static int enable_cache_empty_http_doc = 0;
int cache_config_compatibility_4_2_0_fixup = 1;
#endif
-#if TS_USE_INTERIM_CACHE == 1
-int migrate_threshold = 2;
-#endif
// Globals
@@ -114,21 +111,12 @@ int CacheProcessor::auto_clear_flag = 0;
CacheProcessor cacheProcessor;
Vol **gvol = NULL;
volatile int gnvol = 0;
-#if TS_USE_INTERIM_CACHE == 1
-CacheDisk **g_interim_disks = NULL;
-int gn_interim_disks = 0;
-int good_interim_disks = 0;
-uint64_t total_cache_size = 0;
-#endif
ClassAllocator<CacheVC> cacheVConnectionAllocator("cacheVConnection");
ClassAllocator<EvacuationBlock> evacuationBlockAllocator("evacuationBlock");
ClassAllocator<CacheRemoveCont> cacheRemoveContAllocator("cacheRemoveCont");
ClassAllocator<EvacuationKey> evacuationKeyAllocator("evacuationKey");
int CacheVC::size_to_init = -1;
CacheKey zero_key;
-#if TS_USE_INTERIM_CACHE == 1
-ClassAllocator<MigrateToInterimCache> migrateToInterimCacheAllocator("migrateToInterimCache");
-#endif
struct VolInitInfo {
off_t recover_pos;
@@ -545,10 +533,6 @@ Vol::begin_read(CacheVC *cont)
// no need for evacuation as the entire document is already in memory
if (cont->f.single_fragment)
return 0;
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_ininterim(&cont->earliest_dir))
- return 0;
-#endif
int i = dir_evac_bucket(&cont->earliest_dir);
EvacuationBlock *b;
for (b = evacuate[i].head; b; b = b->link.next) {
@@ -642,99 +626,7 @@ CacheProcessor::start_internal(int flags)
start_done = 0;
int diskok = 1;
Span *sd;
-#if TS_USE_INTERIM_CACHE == 1
- gn_interim_disks = theCacheStore.n_interim_disks;
- g_interim_disks = (CacheDisk **)ats_malloc(gn_interim_disks * sizeof(CacheDisk *));
-
- gn_interim_disks = 0;
-
- for (int i = 0; i < theCacheStore.n_interim_disks; i++) {
- sd = theCacheStore.interim_disk[i];
- char path[PATH_MAX];
- int opts = O_RDWR;
- ink_strlcpy(path, sd->pathname, sizeof(path));
- if (!sd->file_pathname) {
-#if !defined(_WIN32)
- if (config_volumes.num_http_volumes && config_volumes.num_stream_volumes) {
- Warning("It is suggested that you use raw disks if streaming and http are in the same cache");
- }
-#endif
- ink_strlcat(path, "/cache.db", sizeof(path));
- opts |= O_CREAT;
- }
-
-#ifdef O_DIRECT
- opts |= O_DIRECT;
-#endif
-
-#ifdef O_DSYNC
- opts |= O_DSYNC;
-#endif
- if (check) {
- opts &= ~O_CREAT;
- opts |= O_RDONLY;
- }
- int fd = open(path, opts, 0644);
- int64_t blocks = sd->blocks;
- if (fd > 0) {
- if (!sd->file_pathname) {
- if (!check) {
- if (ftruncate(fd, blocks * STORE_BLOCK_SIZE) < 0) {
- Warning("unable to truncate cache file '%s' to %" PRId64 " blocks", path, blocks);
- diskok = 0;
- }
- } else { // read-only mode
- struct stat sbuf;
- diskok = 0;
- if (-1 == fstat(fd, &sbuf)) {
- fprintf(stderr, "Failed to stat cache file for directory %s\n", path);
- } else if (blocks != sbuf.st_size / STORE_BLOCK_SIZE) {
- fprintf(stderr, "Cache file for directory %s is %" PRId64 " bytes, expected %" PRId64 "\n", path, sbuf.st_size,
- blocks * STORE_BLOCK_SIZE);
- } else {
- diskok = 1;
- }
- }
- }
- if (diskok) {
- CacheDisk *disk = new CacheDisk();
- if (check)
- disk->read_only_p = true;
- Debug("cache_hosting", "interim Disk: %d, blocks: %" PRId64 "", gn_interim_disks, blocks);
- int sector_size = sd->hw_sector_size;
- if (sector_size < cache_config_force_sector_size)
- sector_size = cache_config_force_sector_size;
- if (sd->hw_sector_size <= 0 || sector_size > STORE_BLOCK_SIZE) {
- Note("resetting hardware sector size from %d to %d", sector_size, STORE_BLOCK_SIZE);
- sector_size = STORE_BLOCK_SIZE;
- }
- off_t skip = ROUND_TO_STORE_BLOCK(
- (sd->offset * STORE_BLOCK_SIZE < START_POS ? START_POS + sd->alignment : sd->offset * STORE_BLOCK_SIZE));
- blocks = blocks - (skip >> STORE_BLOCK_SHIFT);
- disk->path = ats_strdup(path);
- disk->hw_sector_size = sector_size;
- disk->fd = fd;
- disk->skip = skip;
- disk->start = skip;
- /* we can't use fractions of store blocks. */
- disk->len = blocks;
- disk->io.aiocb.aio_fildes = fd;
- disk->io.aiocb.aio_reqprio = 0;
- disk->io.action = disk;
- disk->io.thread = AIO_CALLBACK_THREAD_ANY;
- g_interim_disks[gn_interim_disks++] = disk;
- }
- } else
- Warning("cache unable to open '%s': %s", path, strerror(errno));
- }
-
- if (gn_interim_disks == 0) {
- Warning("unable to open cache disk(s): InterimCache Cache Disabled\n");
- }
- good_interim_disks = gn_interim_disks;
- diskok = 1;
-#endif
/* read the config file and create the data structures corresponding
to the file */
gndisks = theCacheStore.n_disks;
@@ -744,11 +636,6 @@ CacheProcessor::start_internal(int flags)
ink_aio_set_callback(new AIO_Callback_handler());
config_volumes.read_config_file();
-#if TS_USE_INTERIM_CACHE == 1
- total_cache_size = 0;
- for (unsigned i = 0; i < theCacheStore.n_disks; i++)
- total_cache_size += theCacheStore.disk[i]->blocks;
-#endif
for (unsigned i = 0; i < theCacheStore.n_disks; i++) {
sd = theCacheStore.disk[i];
char path[PATH_NAME_MAX];
@@ -1048,9 +935,6 @@ CacheProcessor::cacheInitialized()
for (i = 0; i < gnvol; i++) {
vol = gvol[i];
gvol[i]->ram_cache->init(vol_dirlen(vol) * DEFAULT_RAM_CACHE_MULTIPLIER, vol);
-#if TS_USE_INTERIM_CACHE == 1
- gvol[i]->history.init(1 << 20, 2097143);
-#endif
ram_cache_bytes += vol_dirlen(gvol[i]);
Debug("cache_init", "CacheProcessor::cacheInitialized - ram_cache_bytes = %" PRId64 " = %" PRId64 "Mb", ram_cache_bytes,
ram_cache_bytes / (1024 * 1024));
@@ -1109,9 +993,6 @@ CacheProcessor::cacheInitialized()
}
Debug("cache_init", "CacheProcessor::cacheInitialized[%d] - ram_cache_bytes = %" PRId64 " = %" PRId64 "Mb", i,
ram_cache_bytes, ram_cache_bytes / (1024 * 1024));
-#if TS_USE_INTERIM_CACHE == 1
- gvol[i]->history.init(1 << 20, 2097143);
-#endif
vol_total_cache_bytes = gvol[i]->len - vol_dirlen(gvol[i]);
total_cache_bytes += vol_total_cache_bytes;
CACHE_VOL_SUM_DYN_STAT(cache_bytes_total_stat, vol_total_cache_bytes);
@@ -1381,23 +1262,6 @@ vol_init_dir(Vol *d)
}
}
-#if TS_USE_INTERIM_CACHE == 1
-void
-interimvol_clear_init(InterimCacheVol *d)
-{
- memset(d->header, 0, sizeof(InterimVolHeaderFooter));
- d->header->magic = VOL_MAGIC;
- d->header->version.ink_major = CACHE_DB_MAJOR_VERSION;
- d->header->version.ink_minor = CACHE_DB_MINOR_VERSION;
- d->header->agg_pos = d->header->write_pos = d->start;
- d->header->last_write_pos = d->header->write_pos;
- d->header->phase = 0;
- d->header->cycle = 0;
- d->header->create_time = time(NULL);
- d->header->dirty = 0;
- d->sector_size = d->header->sector_size = d->disk->hw_sector_size;
-}
-#endif
void
vol_clear_init(Vol *d)
@@ -1417,11 +1281,6 @@ vol_clear_init(Vol *d)
d->sector_size = d->header->sector_size = d->disk->hw_sector_size;
*d->footer = *d->header;
-#if TS_USE_INTERIM_CACHE == 1
- for (int i = 0; i < d->num_interim_vols; i++) {
- interimvol_clear_init(&(d->interim_vols[i]));
- }
-#endif
}
int
@@ -1500,18 +1359,6 @@ Vol::init(char *s, off_t blocks, off_t dir_skip, bool clear)
header = (VolHeaderFooter *)raw_dir;
footer = (VolHeaderFooter *)(raw_dir + vol_dirlen(this) - ROUND_TO_STORE_BLOCK(sizeof(VolHeaderFooter)));
-#if TS_USE_INTERIM_CACHE == 1
- num_interim_vols = good_interim_disks;
- ink_assert(num_interim_vols >= 0 && num_interim_vols <= 8);
- for (int i = 0; i < num_interim_vols; i++) {
- double r = (double)blocks / total_cache_size;
- off_t vlen = off_t(r * g_interim_disks[i]->len * STORE_BLOCK_SIZE);
- vlen = (vlen / STORE_BLOCK_SIZE) * STORE_BLOCK_SIZE;
- off_t start = ink_atomic_increment(&g_interim_disks[i]->skip, vlen);
- interim_vols[i].init(start, vlen, g_interim_disks[i], this, &(this->header->interim_header[i]));
- ink_assert(interim_vols[i].start + interim_vols[i].len <= g_interim_disks[i]->len * STORE_BLOCK_SIZE);
- }
-#endif
if (clear) {
Note("clearing cache directory '%s'", hash_text.get());
@@ -1602,20 +1449,9 @@ Vol::handle_dir_read(int event, void *data)
sector_size = header->sector_size;
-#if TS_USE_INTERIM_CACHE == 1
- if (num_interim_vols > 0) {
- interim_done = 0;
- for (int i = 0; i < num_interim_vols; i++) {
- interim_vols[i].recover_data();
- }
- } else {
-#endif
return this->recover_data();
-#if TS_USE_INTERIM_CACHE == 1
- }
-#endif
return EVENT_CONT;
}
@@ -1997,216 +1833,6 @@ Vol::dir_init_done(int /* event ATS_UNUSED */, void * /* data ATS_UNUSED */)
}
}
-#if TS_USE_INTERIM_CACHE == 1
-int
-InterimCacheVol::recover_data()
-{
- io.aiocb.aio_fildes = fd;
- io.action = this;
- io.thread = AIO_CALLBACK_THREAD_ANY;
- io.then = 0;
-
- SET_HANDLER(&InterimCacheVol::handle_recover_from_data);
- return handle_recover_from_data(EVENT_IMMEDIATE, 0);
-}
-
-int
-InterimCacheVol::handle_recover_from_data(int event, void *data)
-{
- (void)data;
- uint32_t got_len = 0;
- uint32_t max_sync_serial = header->sync_serial;
- char *s, *e;
- int ndone, offset;
-
- if (event == EVENT_IMMEDIATE) {
- if (header->magic != VOL_MAGIC || header->version.ink_major != CACHE_DB_MAJOR_VERSION) {
- Warning("bad header in cache directory for '%s', clearing", hash_text.get());
- goto Lclear;
- } else if (header->sync_serial == 0) {
- io.aiocb.aio_buf = NULL;
- goto Lfinish;
- }
-
- // initialize
- recover_wrapped = 0;
- last_sync_serial = 0;
- last_write_serial = 0;
- recover_pos = header->last_write_pos;
- if (recover_pos >= skip + len) {
- recover_wrapped = 1;
- recover_pos = start;
- }
-
- io.aiocb.aio_buf = (char *)ats_memalign(sysconf(_SC_PAGESIZE), RECOVERY_SIZE);
- io.aiocb.aio_nbytes = RECOVERY_SIZE;
- if ((off_t)(recover_pos + io.aiocb.aio_nbytes) > (off_t)(skip + len))
- io.aiocb.aio_nbytes = (skip + len) - recover_pos;
-
- } else if (event == AIO_EVENT_DONE) {
- if ((size_t)io.aiocb.aio_nbytes != (size_t)io.aio_result) {
- Warning("disk read error on recover '%s', clearing", hash_text.get());
- goto Lclear;
- }
-
- if (io.aiocb.aio_offset == header->last_write_pos) {
- uint32_t to_check = header->write_pos - header->last_write_pos;
- ink_assert(to_check && to_check < (uint32_t)io.aiocb.aio_nbytes);
- uint32_t done = 0;
- s = (char *)io.aiocb.aio_buf;
- while (done < to_check) {
- Doc *doc = (Doc *)(s + done);
- if (doc->magic != DOC_MAGIC || doc->write_serial > header->write_serial) {
- Warning("no valid directory found while recovering '%s', clearing", hash_text.get());
- goto Lclear;
- }
- done += round_to_approx_size(doc->len);
- if (doc->sync_serial > last_write_serial)
- last_sync_serial = doc->sync_serial;
- }
- ink_assert(done == to_check);
-
- got_len = io.aiocb.aio_nbytes - done;
- recover_pos += io.aiocb.aio_nbytes;
- s = (char *)io.aiocb.aio_buf + done;
- e = s + got_len;
- } else {
- got_len = io.aiocb.aio_nbytes;
- recover_pos += io.aiocb.aio_nbytes;
- s = (char *)io.aiocb.aio_buf;
- e = s + got_len;
- }
- }
-
- // examine what we got
- if (got_len) {
- Doc *doc = NULL;
-
- if (recover_wrapped && start == io.aiocb.aio_offset) {
- doc = (Doc *)s;
- if (doc->magic != DOC_MAGIC || doc->write_serial < last_write_serial) {
- recover_pos = skip + len - EVACUATION_SIZE;
- goto Ldone;
- }
- }
-
- while (s < e) {
- doc = (Doc *)s;
-
- if (doc->magic != DOC_MAGIC || doc->sync_serial != last_sync_serial) {
- if (doc->magic == DOC_MAGIC) {
- if (doc->sync_serial > header->sync_serial)
- max_sync_serial = doc->sync_serial;
-
- if (doc->sync_serial > last_sync_serial && doc->sync_serial <= header->sync_serial + 1) {
- last_sync_serial = doc->sync_serial;
- s += round_to_approx_size(doc->len);
- continue;
-
- } else if (recover_pos - (e - s) > (skip + len) - AGG_SIZE) {
- recover_wrapped = 1;
- recover_pos = start;
- io.aiocb.aio_nbytes = RECOVERY_SIZE;
- break;
- }
-
- recover_pos -= e - s;
- goto Ldone;
-
- } else {
- recover_pos -= e - s;
- if (recover_pos > (skip + len) - AGG_SIZE) {
- recover_wrapped = 1;
- recover_pos = start;
- io.aiocb.aio_nbytes = RECOVERY_SIZE;
- break;
- }
-
- goto Ldone;
- }
- }
-
- last_write_serial = doc->write_serial;
- s += round_to_approx_size(doc->len);
- }
-
- if (s >= e) {
- if (s > e)
- s -= round_to_approx_size(doc->len);
-
- recover_pos -= e - s;
- if (recover_pos >= skip + len)
- recover_pos = start;
-
- io.aiocb.aio_nbytes = RECOVERY_SIZE;
- if ((off_t)(recover_pos + io.aiocb.aio_nbytes) > (off_t)(skip + len))
- io.aiocb.aio_nbytes = (skip + len) - recover_pos;
- }
- }
-
- if (recover_pos == prev_recover_pos)
- goto Lclear;
-
- prev_recover_pos = recover_pos;
- io.aiocb.aio_offset = recover_pos;
- ink_assert(ink_aio_read(&io));
- return EVENT_CONT;
-
-Ldone : {
- if (recover_pos == header->write_pos && recover_wrapped) {
- goto Lfinish;
- }
-
- recover_pos += EVACUATION_SIZE;
- if (recover_pos < header->write_pos && (recover_pos + EVACUATION_SIZE >= header->write_pos)) {
- Debug("cache_init", "Head Pos: %" PRIu64 ", Rec Pos: %" PRIu64 ", Wrapped:%d", header->write_pos, recover_pos, recover_wrapped);
- Warning("no valid directory found while recovering '%s', clearing", hash_text.get());
- goto Lclear;
- }
-
- if (recover_pos > skip + len)
- recover_pos -= skip + len;
-
- uint32_t next_sync_serial = max_sync_serial + 1;
- if (!(header->sync_serial & 1) == !(next_sync_serial & 1))
- next_sync_serial++;
-
- off_t clear_start = offset_to_vol_offset(this, header->write_pos);
- off_t clear_end = offset_to_vol_offset(this, recover_pos);
-
- if (clear_start <= clear_end)
- dir_clean_range_interimvol(clear_start, clear_end, this);
- else {
- dir_clean_range_interimvol(clear_end, DIR_OFFSET_MAX, this);
- dir_clean_range_interimvol(1, clear_start, this);
- }
-
- header->sync_serial = next_sync_serial;
-
- goto Lfinish;
-}
-
-Lclear:
-
- interimvol_clear_init(this);
- offset = this - vol->interim_vols;
- clear_interimvol_dir(vol, offset); // remove this interimvol dir
-
-Lfinish:
-
- free((char *)io.aiocb.aio_buf);
- io.aiocb.aio_buf = NULL;
-
- set_io_not_in_progress();
-
- ndone = ink_atomic_increment(&vol->interim_done, 1);
- if (ndone == vol->num_interim_vols - 1) { // all interim finished
- return vol->recover_data();
- }
-
- return EVENT_CONT;
-}
-#endif
// explicit pair for random table in build_vol_hash_table
struct rtable_pair {
@@ -2418,27 +2044,6 @@ AIO_Callback_handler::handle_disk_failure(int /* event ATS_UNUSED */, void *data
return EVENT_DONE;
int disk_no = 0;
AIOCallback *cb = (AIOCallback *)data;
-#if TS_USE_INTERIM_CACHE == 1
- for (; disk_no < gn_interim_disks; disk_no++) {
- CacheDisk *d = g_interim_disks[disk_no];
-
- if (d->fd == cb->aiocb.aio_fildes) {
- char message[256];
-
- d->num_errors++;
- if (!DISK_BAD(d)) {
- snprintf(message, sizeof(message), "Error accessing Disk %s [%d/%d]", d->path, d->num_errors, cache_config_max_disk_errors);
- Warning("%s", message);
- RecSignalManager(REC_SIGNAL_CACHE_WARNING, message);
- } else if (!DISK_BAD_SIGNALLED(d)) {
- snprintf(message, sizeof(message), "too many errors [%d] accessing disk %s: declaring disk bad", d->num_errors, d->path);
- Warning("%s", message);
- RecSignalManager(REC_SIGNAL_CACHE_ERROR, message);
- good_interim_disks--;
- }
- }
- }
-#endif
for (; disk_no < gndisks; disk_no++) {
CacheDisk *d = gdisks[disk_no];
@@ -2758,48 +2363,7 @@ CacheVC::handleReadDone(int event, Event *e)
okay = 0;
}
}
-#if TS_USE_INTERIM_CACHE == 1
- ink_assert(vol->num_interim_vols >= good_interim_disks);
- if (mts && !f.doc_from_ram_cache) {
- int indx;
- do {
- indx = vol->interim_index++ % vol->num_interim_vols;
- } while (good_interim_disks > 0 && DISK_BAD(vol->interim_vols[indx].disk));
-
- if (good_interim_disks) {
- if (f.write_into_interim) {
- mts->interim_vol = interim_vol = &vol->interim_vols[indx];
- mts->agg_len = interim_vol->round_to_approx_size(doc->len);
- if (vol->sector_size != interim_vol->sector_size) {
- dir_set_approx_size(&mts->dir, mts->agg_len);
- }
- }
- if (f.transistor) {
- mts->interim_vol = interim_vol;
- mts->agg_len = interim_vol->round_to_approx_size(doc->len);
- ink_assert(mts->agg_len == dir_approx_size(&mts->dir));
- }
-
- if (!interim_vol->is_io_in_progress()) {
- mts->buf = buf;
- mts->copy = false;
- interim_vol->agg.enqueue(mts);
- interim_vol->aggWrite(event, e);
- } else {
- mts->buf = new_IOBufferData(iobuffer_size_to_index(mts->agg_len, MAX_BUFFER_SIZE_INDEX), MEMALIGNED);
- mts->copy = true;
- memcpy(mts->buf->data(), buf->data(), doc->len);
- interim_vol->agg.enqueue(mts);
- }
- } else {
- vol->set_migrate_failed(mts);
- migrateToInterimCacheAllocator.free(mts);
- }
- mts = NULL;
- }
-#else
(void)e; // Avoid compiler warnings
-#endif
bool http_copy_hdr = false;
#ifdef HTTP_CACHE
http_copy_hdr =
@@ -2821,31 +2385,15 @@ CacheVC::handleReadDone(int event, Event *e)
cutoff_check = ((!doc_len && (int64_t)doc->total_len < cache_config_ram_cache_cutoff) ||
(doc_len && (int64_t)doc_len < cache_config_ram_cache_cutoff) || !cache_config_ram_cache_cutoff);
if (cutoff_check && !f.doc_from_ram_cache) {
-#if TS_USE_INTERIM_CACHE == 1
- if (!f.ram_fixup) {
- uint64_t o = dir_get_offset(&dir);
- vol->ram_cache->put(read_key, buf, doc->len, http_copy_hdr, (uint32_t)(o >> 32), (uint32_t)o);
- } else {
- vol->ram_cache->put(read_key, buf, doc->len, http_copy_hdr, (uint32_t)(dir_off >> 32), (uint32_t)dir_off);
- }
-#else
uint64_t o = dir_offset(&dir);
vol->ram_cache->put(read_key, buf, doc->len, http_copy_hdr, (uint32_t)(o >> 32), (uint32_t)o);
-#endif
}
if (!doc_len) {
// keep a pointer to it. In case the state machine decides to
// update this document, we don't have to read it back in memory
// again
vol->first_fragment_key = *read_key;
-#if TS_USE_INTERIM_CACHE == 1
- if (!f.ram_fixup)
- vol->first_fragment_offset = dir_get_offset(&dir);
- else
- vol->first_fragment_offset = dir_off;
-#else
vol->first_fragment_offset = dir_offset(&dir);
-#endif
vol->first_fragment_data = buf;
}
} // end VIO::READ check
@@ -2855,18 +2403,8 @@ CacheVC::handleReadDone(int event, Event *e)
unmarshal_helper(doc, buf, okay);
#endif
} // end io.ok() check
-#if TS_USE_INTERIM_CACHE == 1
- Ldone:
- if (mts) {
- vol->set_migrate_failed(mts);
- migrateToInterimCacheAllocator.free(mts);
- mts = NULL;
- }
- }
-#else
}
Ldone:
-#endif
POP_HANDLER;
return handleEvent(AIO_EVENT_DONE, 0);
}
@@ -2881,57 +2419,16 @@ CacheVC::handleRead(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSED */)
// check ram cache
ink_assert(vol->mutex->thread_holding == this_ethread());
-#if TS_USE_INTERIM_CACHE == 1
- uint64_t o = dir_get_offset(&dir);
- if (f.read_from_interim && mts && mts->rewrite) {
- goto LinterimRead;
- }
-#else
int64_t o = dir_offset(&dir);
-#endif
if (vol->ram_cache->get(read_key, &buf, (uint32_t)(o >> 32), (uint32_t)o)) {
goto LramHit;
}
// check if it was read in the last open_read call
-#if TS_USE_INTERIM_CACHE == 1
- if (*read_key == vol->first_fragment_key && dir_get_offset(&dir) == vol->first_fragment_offset) {
-#else
if (*read_key == vol->first_fragment_key && dir_offset(&dir) == vol->first_fragment_offset) {
-#endif
buf = vol->first_fragment_data;
goto LmemHit;
}
-#if TS_USE_INTERIM_CACHE == 1
-LinterimRead:
- if (f.read_from_interim) {
- if (dir_agg_buf_valid(interim_vol, &dir)) {
- int interim_agg_offset = vol_offset(interim_vol, &dir) - interim_vol->header->write_pos;
- buf = new_IOBufferData(iobuffer_size_to_index(io.aiocb.aio_nbytes, MAX_BUFFER_SIZE_INDEX), MEMALIGNED);
- ink_assert((interim_agg_offset + io.aiocb.aio_nbytes) <= (unsigned)interim_vol->agg_buf_pos);
- char *doc = buf->data();
- char *agg = interim_vol->agg_buffer + interim_agg_offset;
- memcpy(doc, agg, io.aiocb.aio_nbytes);
- io.aio_result = io.aiocb.aio_nbytes;
- SET_HANDLER(&CacheVC::handleReadDone);
- return EVENT_RETURN;
- }
-
- io.aiocb.aio_fildes = interim_vol->fd;
- io.aiocb.aio_offset = vol_offset(interim_vol, &dir);
- if ((off_t)(io.aiocb.aio_offset + io.aiocb.aio_nbytes) > (off_t)(interim_vol->skip + interim_vol->len))
- io.aiocb.aio_nbytes = interim_vol->skip + interim_vol->len - io.aiocb.aio_offset;
- buf = new_IOBufferData(iobuffer_size_to_index(io.aiocb.aio_nbytes, MAX_BUFFER_SIZE_INDEX), MEMALIGNED);
- io.aiocb.aio_buf = buf->data();
- io.action = this;
- io.thread = mutex->thread_holding->tt == DEDICATED ? AIO_CALLBACK_THREAD_ANY : mutex->thread_holding;
-
- SET_HANDLER(&CacheVC::handleReadDone);
- ink_assert(ink_aio_read(&io) >= 0);
- CACHE_DEBUG_INCREMENT_DYN_STAT(cache_pread_count_stat);
- return EVENT_CONT;
- }
-#endif
// see if its in the aggregation buffer
if (dir_agg_buf_valid(vol, &dir)) {
int agg_offset = vol_offset(vol, &dir) - vol->header->write_pos;
@@ -2970,13 +2467,6 @@ LramHit : {
LmemHit:
f.doc_from_ram_cache = true;
io.aio_result = io.aiocb.aio_nbytes;
-#if TS_USE_INTERIM_CACHE == 1
- if (mts) { // for hit from memory, not migrate
- vol->set_migrate_failed(mts);
- migrateToInterimCacheAllocator.free(mts);
- mts = NULL;
- }
-#endif
POP_HANDLER;
return EVENT_RETURN; // allow the caller to release the volume lock
}
@@ -3064,13 +2554,6 @@ CacheVC::removeEvent(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSED */)
Lcollision:
// check for collision
if (dir_probe(&key, vol, &dir, &last_collision) > 0) {
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_ininterim(&dir)) {
- dir_delete(&key, vol, &dir);
- last_collision = NULL;
- goto Lcollision;
- }
-#endif
int ret = do_read_call(&key);
if (ret == EVENT_RETURN)
goto Lread;
@@ -3630,11 +3113,6 @@ register_cache_stats(RecRawStatBlock *rsb, const char *prefix)
REG_INT("read.active", cache_read_active_stat);
REG_INT("read.success", cache_read_success_stat);
REG_INT("read.failure", cache_read_failure_stat);
-#if TS_USE_INTERIM_CACHE == 1
- REG_INT("interim.read.success", cache_interim_read_success_stat);
- REG_INT("disk.read.success", cache_disk_read_success_stat);
- REG_INT("ram.read.success", cache_ram_read_success_stat);
-#endif
REG_INT("write.active", cache_write_active_stat);
REG_INT("write.success", cache_write_success_stat);
REG_INT("write.failure", cache_write_failure_stat);
@@ -3732,10 +3210,6 @@ ink_cache_init(ModuleVersion v)
REC_EstablishStaticConfigInt32(cache_config_compatibility_4_2_0_fixup, "proxy.config.cache.http.compatibility.4-2-0-fixup");
#endif
-#if TS_USE_INTERIM_CACHE == 1
- REC_EstablishStaticConfigInt32(migrate_threshold, "proxy.config.cache.interim.migrate_threshold");
- Debug("cache_init", "proxy.config.cache.migrate_threshold = %d", migrate_threshold);
-#endif
REC_EstablishStaticConfigInt32(cache_config_max_disk_errors, "proxy.config.cache.max_disk_errors");
Debug("cache_init", "proxy.config.cache.max_disk_errors = %d", cache_config_max_disk_errors);
@@ -3767,13 +3241,6 @@ ink_cache_init(ModuleVersion v)
Warning("no cache disks specified in %s: cache disabled\n", (const char *)path);
// exit(1);
}
-#if TS_USE_INTERIM_CACHE == 1
- else {
- theCacheStore.read_interim_config();
- if (theCacheStore.n_interim_disks == 0)
- Warning("no interim disks specified in %s: \n", "proxy.config.cache.interim.storage");
- }
-#endif
}
//----------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/CacheDir.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/CacheDir.cc b/iocore/cache/CacheDir.cc
index f37000b..000bc46 100644
--- a/iocore/cache/CacheDir.cc
+++ b/iocore/cache/CacheDir.cc
@@ -378,97 +378,6 @@ dir_clean_vol(Vol *d)
CHECK_DIR(d);
}
-#if TS_USE_INTERIM_CACHE == 1
-static inline void
-interim_dir_clean_bucket(Dir *b, int s, Vol *vol, int offset)
-{
- Dir *e = b, *p = NULL;
- Dir *seg = dir_segment(s, vol);
- do {
- if (dir_ininterim(e) && dir_get_index(e) == offset) {
- e = dir_delete_entry(e, p, s, vol);
- continue;
- }
- p = e;
- e = next_dir(e, seg);
- } while (e);
-}
-
-void
-clear_interimvol_dir(Vol *v, int offset)
-{
- for (int i = 0; i < v->segments; i++) {
- Dir *seg = dir_segment(i, v);
- for (int j = 0; j < v->buckets; j++) {
- interim_dir_clean_bucket(dir_bucket(j, seg), i, v, offset);
- }
- }
-}
-void
-dir_clean_bucket(Dir *b, int s, InterimCacheVol *d)
-{
- Dir *e = b, *p = NULL;
- Vol *vol = d->vol;
- Dir *seg = dir_segment(s, vol);
-#ifdef LOOP_CHECK_MODE
- int loop_count = 0;
-#endif
- do {
-#ifdef LOOP_CHECK_MODE
- loop_count++;
- if (loop_count > DIR_LOOP_THRESHOLD) {
- if (dir_bucket_loop_fix(b, s, vol))
- return;
- }
-#endif
- if (!dir_valid(d, e) || !dir_offset(e)) {
- if (is_debug_tag_set("dir_clean"))
- Debug("dir_clean", "cleaning %p tag %X boffset %" PRId64 " b %p p %p l %d", e, dir_tag(e), dir_offset(e), b, p,
- dir_bucket_length(b, s, vol));
- if (dir_offset(e))
- CACHE_DEC_DIR_USED(vol->mutex);
- e = dir_delete_entry(e, p, s, vol);
- continue;
- }
- p = e;
- e = next_dir(e, seg);
- } while (e);
-}
-void
-dir_clean_segment(int s, InterimCacheVol *d)
-{
- Dir *seg = dir_segment(s, d->vol);
- for (int i = 0; i < d->vol->buckets; i++) {
- dir_clean_bucket(dir_bucket(i, seg), s, d);
- ink_assert(!dir_next(dir_bucket(i, seg)) || dir_offset(dir_bucket(i, seg)));
- }
-}
-void
-dir_clean_interimvol(InterimCacheVol *d)
-{
- for (int i = 0; i < d->vol->segments; i++)
- dir_clean_segment(i, d);
- CHECK_DIR(d);
-}
-
-void
-dir_clean_range_interimvol(off_t start, off_t end, InterimCacheVol *svol)
-{
- Vol *vol = svol->vol;
- int offset = svol - vol->interim_vols;
-
- for (int i = 0; i < vol->buckets * DIR_DEPTH * vol->segments; i++) {
- Dir *e = dir_index(vol, i);
- if (dir_ininterim(e) && dir_get_index(e) == offset && !dir_token(e) && dir_offset(e) >= (int64_t)start &&
- dir_offset(e) < (int64_t)end) {
- CACHE_DEC_DIR_USED(vol->mutex);
- dir_set_offset(e, 0); // delete
- }
- }
-
- dir_clean_interimvol(svol);
-}
-#endif
void
dir_clear_range(off_t start, off_t end, Vol *vol)
@@ -635,9 +544,7 @@ Lagain:
dir_offset(e));
dir_assign(result, e);
*last_collision = e;
-#if !TS_USE_INTERIM_CACHE
ink_assert(dir_offset(e) * CACHE_BLOCK_SIZE < d->len);
-#endif
return 1;
} else { // delete the invalid entry
CACHE_DEC_DIR_USED(d->mutex);
@@ -699,21 +606,12 @@ Lagain:
if (!e)
goto Lagain;
Llink:
-#if TS_USE_INTERIM_CACHE == 1
- dir_assign(e, b);
-#else
dir_set_next(e, dir_next(b));
-#endif
dir_set_next(b, dir_to_offset(e, seg));
Lfill:
-#if TS_USE_INTERIM_CACHE == 1
- dir_assign_data(b, to_part);
- dir_set_tag(b, key->slice32(2));
-#else
dir_assign_data(e, to_part);
dir_set_tag(e, key->slice32(2));
ink_assert(vol_offset(d, e) < (d->skip + d->len));
-#endif
DDebug("dir_insert", "insert %p %X into vol %d bucket %d at %p tag %X %X boffset %" PRId64 "", e, key->slice32(0), d->fd, bi, e,
key->slice32(1), dir_tag(e), dir_offset(e));
CHECK_DIR(d);
@@ -755,11 +653,7 @@ Lagain:
}
}
#endif
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_tag(e) == t && dir_get_offset(e) == dir_get_offset(overwrite))
-#else
if (dir_tag(e) == t && dir_offset(e) == dir_offset(overwrite))
-#endif
goto Lfill;
e = next_dir(e, seg);
} while (e);
@@ -822,11 +716,7 @@ dir_delete(const CacheKey *key, Vol *d, Dir *del)
return 0;
}
#endif
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_compare_tag(e, key) && dir_get_offset(e) == dir_get_offset(del)) {
-#else
if (dir_compare_tag(e, key) && dir_offset(e) == dir_offset(del)) {
-#endif
CACHE_DEC_DIR_USED(d->mutex);
dir_delete_entry(e, p, s, d);
CHECK_DIR(d);
@@ -893,11 +783,7 @@ dir_lookaside_fixup(const CacheKey *key, Vol *d)
int res = dir_overwrite(key, d, &b->new_dir, &b->dir, false);
DDebug("dir_lookaside", "fixup %X %X offset %" PRId64 " phase %d %d", key->slice32(0), key->slice32(1),
dir_offset(&b->new_dir), dir_phase(&b->new_dir), res);
-#if TS_USE_INTERIM_CACHE == 1
- int64_t o = dir_get_offset(&b->dir), n = dir_get_offset(&b->new_dir);
-#else
int64_t o = dir_offset(&b->dir), n = dir_offset(&b->new_dir);
-#endif
d->ram_cache->fixup(key, (uint32_t)(o >> 32), (uint32_t)o, (uint32_t)(n >> 32), (uint32_t)n);
d->lookaside[i].remove(b);
free_EvacuationBlock(b, d->mutex->thread_holding);
@@ -1058,26 +944,6 @@ sync_cache_dir_on_shutdown(void)
d->header->write_serial++;
}
-#if TS_USE_INTERIM_CACHE == 1
- for (int i = 0; i < d->num_interim_vols; i++) {
- InterimCacheVol *sv = &(d->interim_vols[i]);
- if (sv->agg_buf_pos) {
- Debug("cache_dir_sync", "Dir %s: flushing agg buffer first to interim", d->hash_text.get());
- sv->header->agg_pos = sv->header->write_pos + sv->agg_buf_pos;
-
- int r = pwrite(sv->fd, sv->agg_buffer, sv->agg_buf_pos, sv->header->write_pos);
- if (r != sv->agg_buf_pos) {
- ink_assert(!"flusing agg buffer failed to interim");
- continue;
- }
- sv->header->last_write_pos = sv->header->write_pos;
- sv->header->write_pos += sv->agg_buf_pos;
- ink_assert(sv->header->write_pos == sv->header->agg_pos);
- sv->agg_buf_pos = 0;
- sv->header->write_serial++;
- }
- }
-#endif
if (buflen < dirlen) {
if (buf) {
@@ -1105,11 +971,6 @@ sync_cache_dir_on_shutdown(void)
}
d->footer->sync_serial = d->header->sync_serial;
-#if TS_USE_INTERIM_CACHE == 1
- for (int j = 0; j < d->num_interim_vols; j++) {
- d->interim_vols[j].header->sync_serial = d->header->sync_serial;
- }
-#endif
CHECK_DIR(d);
memcpy(buf, d->raw_dir, dirlen);
size_t B = d->header->sync_serial & 1;
@@ -1198,14 +1059,6 @@ Lrestart:
vol->dir_sync_waiting = 1;
if (!vol->is_io_in_progress())
vol->aggWrite(EVENT_IMMEDIATE, 0);
-#if TS_USE_INTERIM_CACHE == 1
- for (int i = 0; i < vol->num_interim_vols; i++) {
- if (!vol->interim_vols[i].is_io_in_progress()) {
- vol->interim_vols[i].sync = true;
- vol->interim_vols[i].aggWrite(EVENT_IMMEDIATE, 0);
- }
- }
-#endif
return EVENT_CONT;
}
Debug("cache_dir_sync", "pos: %" PRIu64 " Dir %s dirty...syncing to disk", vol->header->write_pos, vol->hash_text.get());
@@ -1230,11 +1083,6 @@ Lrestart:
}
vol->header->sync_serial++;
vol->footer->sync_serial = vol->header->sync_serial;
-#if TS_USE_INTERIM_CACHE == 1
- for (int j = 0; j < vol->num_interim_vols; j++) {
- vol->interim_vols[j].header->sync_serial = vol->header->sync_serial;
- }
-#endif
CHECK_DIR(d);
memcpy(buf, vol->raw_dir, dirlen);
vol->dir_sync_in_progress = 1;
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/CacheRead.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/CacheRead.cc b/iocore/cache/CacheRead.cc
index bba2ec2..590e498 100644
--- a/iocore/cache/CacheRead.cc
+++ b/iocore/cache/CacheRead.cc
@@ -562,31 +562,13 @@ CacheVC::openReadReadDone(int event, Event *e)
Warning("Middle: Doc checksum does not match for %s", key.toHexStr(tmpstring));
else
Warning("Middle: Doc magic does not match for %s", key.toHexStr(tmpstring));
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_ininterim(&dir)) {
- dir_delete(&key, vol, &dir);
- goto Lread;
- }
-#endif
goto Lerror;
}
if (doc->key == key)
goto LreadMain;
-#if TS_USE_INTERIM_CACHE == 1
- else if (dir_ininterim(&dir)) {
- dir_delete(&key, vol, &dir);
- last_collision = NULL;
- }
-#endif
}
-#if TS_USE_INTERIM_CACHE == 1
- if (last_collision && dir_get_offset(&dir) != dir_get_offset(last_collision))
- last_collision = 0;
- Lread:
-#else
if (last_collision && dir_offset(&dir) != dir_offset(last_collision))
last_collision = 0; // object has been/is being overwritten
-#endif
if (dir_probe(&key, vol, &dir, &last_collision)) {
int ret = do_read_call(&key);
if (ret == EVENT_RETURN)
@@ -596,11 +578,7 @@ CacheVC::openReadReadDone(int event, Event *e)
if (writer_done()) {
last_collision = NULL;
while (dir_probe(&earliest_key, vol, &dir, &last_collision)) {
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_get_offset(&dir) == dir_get_offset(&earliest_dir)) {
-#else
if (dir_offset(&dir) == dir_offset(&earliest_dir)) {
-#endif
DDebug("cache_read_agg", "%p: key: %X ReadRead complete: %d", this, first_key.slice32(1), (int)vio.ndone);
doc_len = vio.ndone;
goto Ldone;
@@ -847,9 +825,6 @@ CacheVC::openReadStartEarliest(int /* event ATS_UNUSED */, Event * /* e ATS_UNUS
vol->begin_read(this);
if (vol->within_hit_evacuate_window(&earliest_dir) &&
(!cache_config_hit_evacuate_size_limit || doc_len <= (uint64_t)cache_config_hit_evacuate_size_limit)
-#if TS_USE_INTERIM_CACHE == 1
- && !dir_ininterim(&dir)
-#endif
) {
DDebug("cache_hit_evac", "dir: %" PRId64 ", write: %" PRId64 ", phase: %d", dir_offset(&earliest_dir),
offset_to_vol_offset(vol, vol->header->write_pos), vol->header->phase);
@@ -859,13 +834,6 @@ CacheVC::openReadStartEarliest(int /* event ATS_UNUSED */, Event * /* e ATS_UNUS
Lread:
if (dir_probe(&key, vol, &earliest_dir, &last_collision) || dir_lookaside_probe(&key, vol, &earliest_dir, NULL)) {
dir = earliest_dir;
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_ininterim(&dir) && alternate.get_frag_offset_count() > 1) {
- dir_delete(&key, vol, &dir);
- last_collision = NULL;
- goto Lread;
- }
-#endif
if ((ret = do_read_call(&key)) == EVENT_RETURN)
goto Lcallreturn;
return ret;
@@ -887,10 +855,6 @@ CacheVC::openReadStartEarliest(int /* event ATS_UNUSED */, Event * /* e ATS_UNUS
// (cannot assert on the return value)
dir_delete(&first_key, vol, &first_dir);
}
-#if TS_USE_INTERIM_CACHE == 1
- else if (dir_ininterim(&first_dir))
- dir_delete(&first_key, vol, &first_dir);
-#endif
else {
buf = NULL;
last_collision = NULL;
@@ -1025,12 +989,6 @@ CacheVC::openReadStartHead(int event, Event *e)
// a directory entry which is nolonger valid may have been overwritten
if (!dir_valid(vol, &dir))
last_collision = NULL;
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_ininterim(&dir)) {
- dir_delete(&key, vol, &dir);
- last_collision = NULL;
- }
-#endif
goto Lread;
}
doc = (Doc *)buf->data();
@@ -1053,17 +1011,7 @@ CacheVC::openReadStartHead(int event, Event *e)
goto Lread;
}
if (!(doc->first_key == key))
-#if TS_USE_INTERIM_CACHE == 1
- {
- if (dir_ininterim(&dir)) {
- dir_delete(&key, vol, &dir);
- last_collision = NULL;
- }
goto Lread;
- }
-#else
- goto Lread;
-#endif
if (f.lookup)
goto Lookup;
earliest_dir = dir;
@@ -1154,9 +1102,6 @@ CacheVC::openReadStartHead(int event, Event *e)
if (vol->within_hit_evacuate_window(&dir) &&
(!cache_config_hit_evacuate_size_limit || doc_len <= (uint64_t)cache_config_hit_evacuate_size_limit)
-#if TS_USE_INTERIM_CACHE == 1
- && !f.read_from_interim
-#endif
) {
DDebug("cache_hit_evac", "dir: %" PRId64 ", write: %" PRId64 ", phase: %d", dir_offset(&dir),
offset_to_vol_offset(vol, vol->header->write_pos), vol->header->phase);
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/CacheWrite.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/CacheWrite.cc b/iocore/cache/CacheWrite.cc
index 3b7d9c9..2fe09c2 100644
--- a/iocore/cache/CacheWrite.cc
+++ b/iocore/cache/CacheWrite.cc
@@ -539,9 +539,6 @@ evacuate_fragments(CacheKey *key, CacheKey *earliest_key, int force, Vol *vol)
// next fragment cannot be a head...if it is, it must have been a
// directory collision.
if (dir_head(&dir)
-#if TS_USE_INTERIM_CACHE == 1
- || dir_ininterim(&dir)
-#endif
)
continue;
EvacuationBlock *b = evacuation_block_exists(&dir, vol);
@@ -732,9 +729,6 @@ agg_copy(char *p, CacheVC *vc)
dir_set_approx_size(&vc->dir, vc->agg_len);
dir_set_offset(&vc->dir, offset_to_vol_offset(vol, o));
ink_assert(vol_offset(vol, &vc->dir) < (vol->skip + vol->len));
-#if TS_USE_INTERIM_CACHE == 1
- dir_set_indisk(&vc->dir);
-#endif
dir_set_phase(&vc->dir, vol->header->phase);
// fill in document header
@@ -864,9 +858,6 @@ agg_copy(char *p, CacheVC *vc)
vc->dir = vc->overwrite_dir;
dir_set_offset(&vc->dir, offset_to_vol_offset(vc->vol, o));
dir_set_phase(&vc->dir, vc->vol->header->phase);
-#if TS_USE_INTERIM_CACHE == 1
- dir_set_indisk(&vc->dir);
-#endif
return l;
}
}
@@ -1494,31 +1485,9 @@ CacheVC::openWriteStartDone(int event, Event *e)
if (doc->magic != DOC_MAGIC || !doc->hlen || this->load_http_info(write_vector, doc, buf) != doc->hlen) {
err = ECACHE_BAD_META_DATA;
-#if TS_USE_INTERIM_CACHE == 1
- if (dir_ininterim(&dir)) {
- dir_delete(&first_key, vol, &dir);
- last_collision = NULL;
- goto Lcollision;
- }
-#endif
goto Lfailure;
}
ink_assert(write_vector->count() > 0);
-#if TS_USE_INTERIM_CACHE == 1
- Lagain:
- if (dir_ininterim(&dir)) {
- dir_delete(&first_key, vol, &dir);
- last_collision = NULL;
- if (dir_probe(&first_key, vol, &dir, &last_collision)) {
- goto Lagain;
- } else {
- if (f.update) {
- // fail update because vector has been GC'd
- goto Lfailure;
- }
- }
- }
-#endif
od->first_dir = dir;
first_dir = dir;
if (doc->single_fragment()) {
@@ -1804,150 +1773,4 @@ Lcallreturn:
return &c->_action;
}
-#if TS_USE_INTERIM_CACHE == 1
-int
-InterimCacheVol::aggWrite(int /* event ATS_UNUSED */, void * /* ATS_UNUSED e */)
-{
- ink_assert(!is_io_in_progress());
- MigrateToInterimCache *mts;
- Doc *doc;
- uint64_t old_off, new_off;
- ink_assert(this_ethread() == mutex.m_ptr->thread_holding && vol->mutex.m_ptr == mutex.m_ptr);
-Lagain:
-
- while ((mts = agg.head) != NULL) {
- doc = (Doc *)mts->buf->data();
- uint32_t agg_len = dir_approx_size(&mts->dir);
- ink_assert(agg_len == mts->agg_len);
- ink_assert(agg_len <= AGG_SIZE && agg_buf_pos <= AGG_SIZE);
-
- if (agg_buf_pos + agg_len > AGG_SIZE || header->agg_pos + agg_len > (skip + len))
- break;
- mts = agg.dequeue();
-
- if (!mts->notMigrate) {
- old_off = dir_get_offset(&mts->dir);
- Dir old_dir = mts->dir;
- doc->sync_serial = header->sync_serial;
- doc->write_serial = header->write_serial;
-
- memcpy(agg_buffer + agg_buf_pos, doc, doc->len);
- off_t o = header->write_pos + agg_buf_pos;
- dir_set_offset(&mts->dir, offset_to_vol_offset(this, o));
- ink_assert(this == mts->interim_vol);
- ink_assert(vol_offset(this, &mts->dir) < mts->interim_vol->skip + mts->interim_vol->len);
- dir_set_phase(&mts->dir, header->phase);
- dir_set_ininterim(&mts->dir);
- dir_set_index(&mts->dir, (this - vol->interim_vols));
-
- agg_buf_pos += agg_len;
- header->agg_pos = header->write_pos + agg_buf_pos;
- new_off = dir_get_offset(&mts->dir);
-
- if (mts->rewrite)
- dir_overwrite(&mts->key, vol, &mts->dir, &old_dir);
- else
- dir_insert(&mts->key, vol, &mts->dir);
- DDebug("cache_insert",
- "InterimCache: WriteDone: key: %X, first_key: %X, write_len: %d, write_offset: %" PRId64 ", dir_last_word: %X",
- doc->key.slice32(0), doc->first_key.slice32(0), mts->agg_len, o, mts->dir.w[4]);
-
- if (mts->copy) {
- mts->interim_vol->vol->ram_cache->fixup(&mts->key, (uint32_t)(old_off >> 32), (uint32_t)old_off, (uint32_t)(new_off >> 32),
- (uint32_t)new_off);
- } else {
- mts->vc->f.ram_fixup = 1;
- mts->vc->dir_off = new_off;
- }
- vol->set_migrate_done(mts);
- } else
- vol->set_migrate_failed(mts);
-
- mts->buf = NULL;
- migrateToInterimCacheAllocator.free(mts);
- }
-
- if (!agg_buf_pos) {
- if (header->write_pos + AGG_SIZE > (skip + len)) {
- header->write_pos = start;
- header->phase = !(header->phase);
-
- header->cycle++;
- header->agg_pos = header->write_pos;
- dir_clean_interimvol(this);
- goto Lagain;
- }
- return EVENT_CONT;
- }
-
- if (agg.head == NULL && agg_buf_pos < (AGG_SIZE / 2) && !sync && header->write_pos + AGG_SIZE <= (skip + len))
- return EVENT_CONT;
-
- for (mts = agg.head; mts != NULL; mts = mts->link.next) {
- if (!mts->copy) {
- Ptr<IOBufferData> buf = mts->buf;
- doc = (Doc *)buf->data();
- mts->buf = new_IOBufferData(iobuffer_size_to_index(mts->agg_len, MAX_BUFFER_SIZE_INDEX), MEMALIGNED);
- mts->copy = true;
- memcpy(mts->buf->data(), buf->data(), doc->len);
- buf = NULL;
- }
- }
- // set write limit
-
- io.aiocb.aio_fildes = fd;
- io.aiocb.aio_offset = header->write_pos;
- io.aiocb.aio_buf = agg_buffer;
- io.aiocb.aio_nbytes = agg_buf_pos;
- io.action = this;
- /*
- Callback on AIO thread so that we can issue a new write ASAP
- as all writes are serialized in the volume. This is not necessary
- for reads proceed independently.
- */
- io.thread = AIO_CALLBACK_THREAD_AIO;
- SET_HANDLER(&InterimCacheVol::aggWriteDone);
- ink_aio_write(&io);
- return EVENT_CONT;
-}
-
-int
-InterimCacheVol::aggWriteDone(int event, void *e)
-{
- ink_release_assert(this_ethread() == mutex.m_ptr->thread_holding && vol->mutex.m_ptr == mutex.m_ptr);
- if (io.ok()) {
- header->last_write_pos = header->write_pos;
- header->write_pos += io.aiocb.aio_nbytes;
- ink_assert(header->write_pos >= start);
- DDebug("cache_agg", "Write: %" PRIu64 ", last Write: %" PRIu64 "\n", header->write_pos, header->last_write_pos);
- ink_assert(header->write_pos == header->agg_pos);
- agg_buf_pos = 0;
- header->write_serial++;
- } else {
- // delete all the directory entries that we inserted
- // for fragments is this aggregation buffer
- Debug("cache_disk_error", "Write error on disk %s\n \
- write range : [%" PRIu64 " - %" PRIu64 " bytes] [%" PRIu64 " - %" PRIu64 " blocks] \n",
- "InterimCache ID", (uint64_t)io.aiocb.aio_offset, (uint64_t)(io.aiocb.aio_offset + io.aiocb.aio_nbytes),
- (uint64_t)io.aiocb.aio_offset / CACHE_BLOCK_SIZE,
- (uint64_t)(io.aiocb.aio_offset + io.aiocb.aio_nbytes) / CACHE_BLOCK_SIZE);
- Dir del_dir;
- dir_clear(&del_dir);
- dir_set_ininterim(&del_dir);
- dir_set_index(&del_dir, (this - vol->interim_vols));
- for (int done = 0; done < agg_buf_pos;) {
- Doc *doc = (Doc *)(agg_buffer + done);
- dir_set_offset(&del_dir, header->write_pos + done);
- dir_delete(&doc->key, vol, &del_dir);
- done += this->round_to_approx_size(doc->len);
- }
- agg_buf_pos = 0;
- }
- set_io_not_in_progress();
- sync = false;
- if (agg.head)
- aggWrite(event, e);
- return EVENT_CONT;
-}
-#endif
#endif
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/I_Store.h
----------------------------------------------------------------------
diff --git a/iocore/cache/I_Store.h b/iocore/cache/I_Store.h
index 6ebfd6e..b5f9721 100644
--- a/iocore/cache/I_Store.h
+++ b/iocore/cache/I_Store.h
@@ -242,11 +242,6 @@ struct Store {
unsigned n_disks;
Span **disk;
-#if TS_USE_INTERIM_CACHE == 1
- int n_interim_disks;
- Span **interim_disk;
- const char *read_interim_config();
-#endif
//
// returns NULL on success
// if fd >= 0 then on failure it returns an error string
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/P_CacheDir.h
----------------------------------------------------------------------
diff --git a/iocore/cache/P_CacheDir.h b/iocore/cache/P_CacheDir.h
index 881d6be..5a40456 100644
--- a/iocore/cache/P_CacheDir.h
+++ b/iocore/cache/P_CacheDir.h
@@ -86,7 +86,6 @@ struct CacheVC;
dir_assign(_e, _x); \
dir_set_next(_e, next); \
} while (0)
-#if !TS_USE_INTERIM_CACHE
// entry is valid
#define dir_valid(_d, _e) (_d->header->phase == dir_phase(_e) ? vol_in_phase_valid(_d, _e) : vol_out_of_phase_valid(_d, _e))
// entry is valid and outside of write aggregation region
@@ -95,7 +94,6 @@ struct CacheVC;
#define dir_write_valid(_d, _e) \
(_d->header->phase == dir_phase(_e) ? vol_in_phase_valid(_d, _e) : vol_out_of_phase_write_valid(_d, _e))
#define dir_agg_buf_valid(_d, _e) (_d->header->phase == dir_phase(_e) && vol_in_phase_agg_buf_valid(_d, _e))
-#endif
#define dir_is_empty(_e) (!dir_offset(_e))
#define dir_clear(_e) \
do { \
@@ -155,41 +153,13 @@ struct FreeDir {
unsigned int reserved : 8;
unsigned int prev : 16; // (2)
unsigned int next : 16; // (3)
-#if TS_USE_INTERIM_CACHE == 1
- unsigned int offset_high : 12; // 8GB * 4K = 32TB
- unsigned int index : 3; // interim index
- unsigned int ininterim : 1; // in interim or not
-#else
inku16 offset_high; // 0: empty
-#endif
#else
uint16_t w[5];
FreeDir() { dir_clear(this); }
#endif
};
-#if TS_USE_INTERIM_CACHE == 1
-#define dir_ininterim(_e) (((_e)->w[4] >> 15) & 1)
-#define dir_set_ininterim(_e) ((_e)->w[4] |= (1 << 15));
-#define dir_set_indisk(_e) ((_e)->w[4] &= 0x0FFF);
-#define dir_get_index(_e) (((_e)->w[4] >> 12) & 0x7)
-#define dir_set_index(_e, i) ((_e)->w[4] |= (i << 12))
-#define dir_offset(_e) \
- ((int64_t)(((uint64_t)(_e)->w[0]) | (((uint64_t)((_e)->w[1] & 0xFF)) << 16) | (((uint64_t)((_e)->w[4] & 0x0FFF)) << 24)))
-#define dir_set_offset(_e, _o) \
- do { \
- (_e)->w[0] = (uint16_t)_o; \
- (_e)->w[1] = (uint16_t)((((_o) >> 16) & 0xFF) | ((_e)->w[1] & 0xFF00)); \
- (_e)->w[4] = (((_e)->w[4] & 0xF000) | ((uint16_t)((_o) >> 24))); \
- } while (0)
-#define dir_get_offset(_e) \
- ((int64_t)(((uint64_t)(_e)->w[0]) | (((uint64_t)((_e)->w[1] & 0xFF)) << 16) | (((uint64_t)(_e)->w[4]) << 24)))
-
-void clear_interim_dir(Vol *v);
-void clear_interimvol_dir(Vol *v, int offset);
-void dir_clean_range_interimvol(off_t start, off_t end, InterimCacheVol *svol);
-
-#else
#define dir_offset(_e) \
((int64_t)(((uint64_t)(_e)->w[0]) | (((uint64_t)((_e)->w[1] & 0xFF)) << 16) | (((uint64_t)(_e)->w[4]) << 24)))
#define dir_set_offset(_e, _o) \
@@ -198,7 +168,6 @@ void dir_clean_range_interimvol(off_t start, off_t end, InterimCacheVol *svol);
(_e)->w[1] = (uint16_t)((((_o) >> 16) & 0xFF) | ((_e)->w[1] & 0xFF00)); \
(_e)->w[4] = (uint16_t)((_o) >> 24); \
} while (0)
-#endif
#define dir_bit(_e, _w, _b) ((uint32_t)(((_e)->w[_w] >> (_b)) & 1))
#define dir_set_bit(_e, _w, _b, _v) (_e)->w[_w] = (uint16_t)(((_e)->w[_w] & ~(1 << (_b))) | (((_v) ? 1 : 0) << (_b)))
#define dir_big(_e) ((uint32_t)((((_e)->w[1]) >> 8) & 0x3))
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/P_CacheInternal.h
----------------------------------------------------------------------
diff --git a/iocore/cache/P_CacheInternal.h b/iocore/cache/P_CacheInternal.h
index 7007bc2..28cb44f 100644
--- a/iocore/cache/P_CacheInternal.h
+++ b/iocore/cache/P_CacheInternal.h
@@ -126,11 +126,6 @@ enum {
cache_read_active_stat,
cache_read_success_stat,
cache_read_failure_stat,
-#if TS_USE_INTERIM_CACHE == 1
- cache_interim_read_success_stat,
- cache_disk_read_success_stat,
- cache_ram_read_success_stat,
-#endif
cache_write_active_stat,
cache_write_success_stat,
cache_write_failure_stat,
@@ -227,9 +222,7 @@ extern int cache_config_force_sector_size;
extern int cache_config_target_fragment_size;
extern int cache_config_mutex_retry_delay;
extern int cache_config_read_while_writer_max_retries;
-#if TS_USE_INTERIM_CACHE == 1
-extern int good_interim_disks;
-#endif
+
// CacheVC
struct CacheVC : public CacheVConnection {
CacheVC();
@@ -466,11 +459,6 @@ struct CacheVC : public CacheVConnection {
int header_to_write_len;
void *header_to_write;
short writer_lock_retry;
-#if TS_USE_INTERIM_CACHE == 1
- InterimCacheVol *interim_vol;
- MigrateToInterimCache *mts;
- uint64_t dir_off;
-#endif
union {
uint32_t flags;
struct {
@@ -493,12 +481,6 @@ struct CacheVC : public CacheVConnection {
unsigned int readers : 1;
unsigned int doc_from_ram_cache : 1;
unsigned int hit_evacuate : 1;
-#if TS_USE_INTERIM_CACHE == 1
- unsigned int read_from_interim : 1;
- unsigned int write_into_interim : 1;
- unsigned int ram_fixup : 1;
- unsigned int transistor : 1;
-#endif
#ifdef HTTP_CACHE
unsigned int allow_empty_doc : 1; // used for cache empty http document
#endif
@@ -534,9 +516,6 @@ struct CacheRemoveCont : public Continuation {
// Global Data
-#if TS_USE_INTERIM_CACHE == 1
-extern ClassAllocator<MigrateToInterimCache> migrateToInterimCacheAllocator;
-#endif
extern ClassAllocator<CacheVC> cacheVConnectionAllocator;
extern CacheKey zero_key;
extern CacheSync *cacheDirSync;
@@ -581,17 +560,6 @@ free_CacheVC(CacheVC *cont)
CACHE_DECREMENT_DYN_STAT(cont->base_stat + CACHE_STAT_ACTIVE);
if (cont->closed > 0) {
CACHE_INCREMENT_DYN_STAT(cont->base_stat + CACHE_STAT_SUCCESS);
-#if TS_USE_INTERIM_CACHE == 1
- if (cont->vio.op == VIO::READ) {
- if (cont->f.doc_from_ram_cache) {
- CACHE_INCREMENT_DYN_STAT(cache_ram_read_success_stat);
- } else if (cont->f.read_from_interim) {
- CACHE_INCREMENT_DYN_STAT(cache_interim_read_success_stat);
- } else {
- CACHE_INCREMENT_DYN_STAT(cache_disk_read_success_stat);
- }
- }
-#endif
} // else abort,cancel
}
ink_assert(mutex->thread_holding == this_ethread());
@@ -675,35 +643,6 @@ CacheVC::do_read_call(CacheKey *akey)
doc_pos = 0;
read_key = akey;
io.aiocb.aio_nbytes = dir_approx_size(&dir);
-#if TS_USE_INTERIM_CACHE == 1
- interim_vol = NULL;
- ink_assert(mts == NULL);
- mts = NULL;
- f.write_into_interim = 0;
- f.ram_fixup = 0;
- f.transistor = 0;
- f.read_from_interim = dir_ininterim(&dir);
-
- if (!f.read_from_interim && vio.op == VIO::READ && good_interim_disks > 0) {
- vol->history.put_key(read_key);
- if (vol->history.is_hot(read_key) && !vol->migrate_probe(read_key, NULL) && !od) {
- f.write_into_interim = 1;
- }
- }
- if (f.read_from_interim) {
- interim_vol = &vol->interim_vols[dir_get_index(&dir)];
- if (vio.op == VIO::READ && vol_transistor_range_valid(interim_vol, &dir) && !vol->migrate_probe(read_key, NULL) && !od)
- f.transistor = 1;
- }
- if (f.write_into_interim || f.transistor) {
- mts = migrateToInterimCacheAllocator.alloc();
- mts->vc = this;
- mts->key = *read_key;
- mts->rewrite = (f.transistor == 1);
- dir_assign(&mts->dir, &dir);
- vol->set_migrate_in_progress(mts);
- }
-#endif
PUSH_HANDLER(&CacheVC::handleRead);
return handleRead(EVENT_CALL, 0);
}
@@ -829,12 +768,6 @@ Vol::open_write(CacheVC *cont, int allow_if_writers, int max_writers)
CACHE_INCREMENT_DYN_STAT(cache_write_backlog_failure_stat);
return ECACHE_WRITE_FAIL;
}
-#if TS_USE_INTERIM_CACHE == 1
- MigrateToInterimCache *m_result = NULL;
- if (vol->migrate_probe(&cont->first_key, &m_result)) {
- m_result->notMigrate = true;
- }
-#endif
if (open_dir.open_write(cont, allow_if_writers, max_writers)) {
#ifdef CACHE_STAT_PAGES
ink_assert(cont->mutex->thread_holding == this_ethread());
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/P_CacheVol.h
----------------------------------------------------------------------
diff --git a/iocore/cache/P_CacheVol.h b/iocore/cache/P_CacheVol.h
index 5499d24..10eddc6 100644
--- a/iocore/cache/P_CacheVol.h
+++ b/iocore/cache/P_CacheVol.h
@@ -70,24 +70,6 @@
#define sizeofDoc (((uint32_t)(uintptr_t) & ((Doc *)0)->checksum) + (uint32_t)sizeof(uint32_t))
-#if TS_USE_INTERIM_CACHE == 1
-struct InterimVolHeaderFooter {
- unsigned int magic;
- VersionNumber version;
- time_t create_time;
- off_t write_pos;
- off_t last_write_pos;
- off_t agg_pos;
- uint32_t generation; // token generation (vary), this cannot be 0
- uint32_t phase;
- uint32_t cycle;
- uint32_t sync_serial;
- uint32_t write_serial;
- uint32_t dirty;
- uint32_t sector_size;
- int32_t unused; // pad out to 8 byte boundary
-};
-#endif
struct Cache;
struct Vol;
@@ -111,9 +93,6 @@ struct VolHeaderFooter {
uint32_t dirty;
uint32_t sector_size;
uint32_t unused; // pad out to 8 byte boundary
-#if TS_USE_INTERIM_CACHE == 1
- InterimVolHeaderFooter interim_header[8];
-#endif
uint16_t freelist[1];
};
@@ -144,293 +123,6 @@ struct EvacuationBlock {
LINK(EvacuationBlock, link);
};
-#if TS_USE_INTERIM_CACHE == 1
-#define MIGRATE_BUCKETS 1021
-extern int migrate_threshold;
-extern int good_interim_disks;
-
-
-union AccessEntry {
- uintptr_t v[2];
- struct {
- uint32_t next;
- uint32_t prev;
- uint32_t index;
- uint16_t tag;
- int16_t count;
- } item;
-};
-
-struct AccessHistory {
- AccessEntry *base;
- int size; // 1M
-
- uint32_t *hash;
- int hash_size; // 2097143
-
- AccessEntry *freelist;
-
- void
- freeEntry(AccessEntry *entry)
- {
- entry->v[0] = (uintptr_t)freelist;
- entry->v[1] = 0xABCD1234U;
- freelist = entry;
- }
-
- void
- init(int size, int hash_size)
- {
- this->size = size;
- this->hash_size = hash_size;
- freelist = NULL;
-
- base = (AccessEntry *)malloc(sizeof(AccessEntry) * size);
- hash = (uint32_t *)malloc(sizeof(uint32_t) * hash_size);
-
- memset(hash, 0, sizeof(uint32_t) * hash_size);
-
- base[0].item.next = base[0].item.prev = 0;
- base[0].v[1] = 0xABCD1234UL;
- for (int i = size; --i > 0;)
- freeEntry(&base[i]);
-
- return;
- }
-
- void
- remove(AccessEntry *entry)
- {
- if (entry == &(base[base[0].item.prev])) { // head
- base[0].item.prev = entry->item.next;
- } else {
- base[entry->item.prev].item.next = entry->item.next;
- }
- if (entry == &(base[base[0].item.next])) { // tail
- base[0].item.next = entry->item.prev;
- } else {
- base[entry->item.next].item.prev = entry->item.prev;
- }
- uint32_t hash_index = (uint32_t)(entry->item.index % hash_size);
- hash[hash_index] = 0;
- }
-
- void
- enqueue(AccessEntry *entry)
- {
- uint32_t hash_index = (uint32_t)(entry->item.index % hash_size);
- hash[hash_index] = entry - base;
-
- entry->item.prev = 0;
- entry->item.next = base[0].item.prev;
- base[base[0].item.prev].item.prev = entry - base;
- base[0].item.prev = entry - base;
- if (base[0].item.next == 0)
- base[0].item.next = entry - base;
- }
-
- AccessEntry *
- dequeue()
- {
- AccessEntry *tail = &base[base[0].item.next];
- if (tail != base)
- remove(tail);
-
- return tail;
- }
-
- void
- set_in_progress(CryptoHash *key)
- {
- uint32_t key_index = key->slice32(3);
- uint16_t tag = static_cast<uint16_t>(key->slice32(1));
- unsigned int hash_index = (uint32_t)(key_index % hash_size);
-
- uint32_t index = hash[hash_index];
- AccessEntry *entry = &base[index];
- if (index != 0 && entry->item.tag == tag && entry->item.index == key_index) {
- entry->item.count |= 0x8000;
- }
- }
-
- void
- set_not_in_progress(CryptoHash *key)
- {
- uint32_t key_index = key->slice32(3);
- uint16_t tag = static_cast<uint16_t>(key->slice32(1));
- unsigned int hash_index = (uint32_t)(key_index % hash_size);
-
- uint32_t index = hash[hash_index];
- AccessEntry *entry = &base[index];
- if (index != 0 && entry->item.tag == tag && entry->item.index == key_index) {
- entry->item.count &= 0x7FFF;
- }
- }
-
- void
- put_key(CryptoHash *key)
- {
- uint32_t key_index = key->slice32(3);
- uint16_t tag = static_cast<uint16_t>(key->slice32(1));
- unsigned int hash_index = (uint32_t)(key_index % hash_size);
-
- uint32_t index = hash[hash_index];
- AccessEntry *entry = &base[index];
- if (index != 0 && entry->item.tag == tag && entry->item.index == key_index) { // seen before
- remove(entry);
- enqueue(entry);
- ++entry->item.count;
- } else {
- if (index == 0) { // not seen before
- if (!freelist) {
- entry = dequeue();
- if (entry == base) {
- return;
- }
- } else {
- entry = freelist;
- freelist = (AccessEntry *)entry->v[0];
- }
- } else { // collation
- remove(entry);
- }
- entry->item.index = key_index;
- entry->item.tag = tag;
- entry->item.count = 1;
- enqueue(entry);
- }
- }
-
- bool
- remove_key(CryptoHash *key)
- {
- unsigned int hash_index = static_cast<uint32_t>(key->slice32(3) % hash_size);
- uint32_t index = hash[hash_index];
- AccessEntry *entry = &base[index];
- if (index != 0 && entry->item.tag == static_cast<uint16_t>(key->slice32(1)) && entry->item.index == key->slice32(3)) {
- remove(entry);
- freeEntry(entry);
- return true;
- }
- return false;
- }
-
- bool
- is_hot(CryptoHash *key)
- {
- uint32_t key_index = key->slice32(3);
- uint16_t tag = (uint16_t)key->slice32(1);
- unsigned int hash_index = (uint32_t)(key_index % hash_size);
-
- uint32_t index = hash[hash_index];
- AccessEntry *entry = &base[index];
-
- return (index != 0 && entry->item.tag == tag && entry->item.index == key_index && entry->item.count >= migrate_threshold);
- }
-};
-
-struct InterimCacheVol;
-
-struct MigrateToInterimCache {
- MigrateToInterimCache() {}
- Ptr<IOBufferData> buf;
- uint32_t agg_len;
- CacheKey key;
- Dir dir;
- InterimCacheVol *interim_vol;
- CacheVC *vc;
- bool notMigrate;
- bool rewrite;
- bool copy;
- LINK(MigrateToInterimCache, link);
- LINK(MigrateToInterimCache, hash_link);
-};
-
-struct InterimCacheVol : public Continuation {
- ats_scoped_str hash_text;
- InterimVolHeaderFooter *header;
-
- off_t recover_pos;
- off_t prev_recover_pos;
- uint32_t last_sync_serial;
- uint32_t last_write_serial;
- bool recover_wrapped;
-
- off_t scan_pos;
- off_t skip; // start of headers
- off_t start; // start of data
- off_t len;
- off_t data_blocks;
- char *agg_buffer;
- int agg_todo_size;
- int agg_buf_pos;
- uint32_t sector_size;
- int fd;
- CacheDisk *disk;
- Vol *vol; // backpointer to vol
- AIOCallbackInternal io;
- Queue<MigrateToInterimCache, MigrateToInterimCache::Link_link> agg;
- int64_t transistor_range_threshold;
- bool sync;
- bool
- is_io_in_progress()
- {
- return io.aiocb.aio_fildes != AIO_NOT_IN_PROGRESS;
- }
-
- int recover_data();
- int handle_recover_from_data(int event, void *data);
-
- void
- set_io_not_in_progress()
- {
- io.aiocb.aio_fildes = AIO_NOT_IN_PROGRESS;
- }
-
- int aggWrite(int event, void *e);
- int aggWriteDone(int event, void *e);
- uint32_t
- round_to_approx_size(uint32_t l)
- {
- uint32_t ll = round_to_approx_dir_size(l);
- return INK_ALIGN(ll, disk->hw_sector_size);
- }
-
- void
- init(off_t s, off_t l, CacheDisk *interim, Vol *v, InterimVolHeaderFooter *hptr)
- {
- char *seed_str = interim->hash_base_string ? interim->hash_base_string : interim->path;
- const size_t hash_seed_size = strlen(seed_str);
- const size_t hash_text_size = hash_seed_size + 32;
-
- hash_text = static_cast<char *>(ats_malloc(hash_text_size));
- snprintf(hash_text, hash_text_size, "%s %" PRIu64 ":%" PRIu64 "", seed_str, s, l);
-
- skip = start = s;
- len = l;
- disk = interim;
- fd = disk->fd;
- vol = v;
- transistor_range_threshold = len / 5; // 20% storage size for transistor
- sync = false;
-
- header = hptr;
-
- agg_todo_size = 0;
- agg_buf_pos = 0;
-
- agg_buffer = (char *)ats_memalign(sysconf(_SC_PAGESIZE), AGG_SIZE);
- memset(agg_buffer, 0, AGG_SIZE);
- this->mutex = ((Continuation *)vol)->mutex;
- }
-};
-
-
-void dir_clean_bucket(Dir *b, int s, InterimCacheVol *d);
-void dir_clean_segment(int s, InterimCacheVol *d);
-void dir_clean_interimvol(InterimCacheVol *d);
-
-#endif
struct Vol : public Continuation {
char *path;
@@ -487,50 +179,6 @@ struct Vol : public Continuation {
int64_t first_fragment_offset;
Ptr<IOBufferData> first_fragment_data;
-#if TS_USE_INTERIM_CACHE == 1
- int num_interim_vols;
- InterimCacheVol interim_vols[8];
- AccessHistory history;
- uint32_t interim_index;
- Queue<MigrateToInterimCache, MigrateToInterimCache::Link_hash_link> mig_hash[MIGRATE_BUCKETS];
- volatile int interim_done;
-
-
- bool
- migrate_probe(CacheKey *key, MigrateToInterimCache **result)
- {
- uint32_t indx = key->slice32(3) % MIGRATE_BUCKETS;
- MigrateToInterimCache *m = mig_hash[indx].head;
- while (m != NULL && !(m->key == *key)) {
- m = mig_hash[indx].next(m);
- }
- if (result != NULL)
- *result = m;
- return m != NULL;
- }
-
- void
- set_migrate_in_progress(MigrateToInterimCache *m)
- {
- uint32_t indx = m->key.slice32(3) % MIGRATE_BUCKETS;
- mig_hash[indx].enqueue(m);
- }
-
- void
- set_migrate_failed(MigrateToInterimCache *m)
- {
- uint32_t indx = m->key.slice32(3) % MIGRATE_BUCKETS;
- mig_hash[indx].remove(m);
- }
-
- void
- set_migrate_done(MigrateToInterimCache *m)
- {
- uint32_t indx = m->key.slice32(3) % MIGRATE_BUCKETS;
- mig_hash[indx].remove(m);
- history.remove_key(&m->key);
- }
-#endif
void cancel_trigger();
@@ -559,9 +207,6 @@ struct Vol : public Continuation {
int handle_recover_write_dir(int event, void *data);
int handle_header_read(int event, void *data);
-#if TS_USE_INTERIM_CACHE == 1
- int recover_interim_vol();
-#endif
int dir_init_done(int event, void *data);
@@ -697,35 +342,6 @@ vol_direntries(Vol *d)
return d->buckets * DIR_DEPTH * d->segments;
}
-#if TS_USE_INTERIM_CACHE == 1
-#define vol_out_of_phase_valid(d, e) (dir_offset(e) - 1 >= ((d->header->agg_pos - d->start) / CACHE_BLOCK_SIZE))
-
-#define vol_out_of_phase_agg_valid(d, e) (dir_offset(e) - 1 >= ((d->header->agg_pos - d->start + AGG_SIZE) / CACHE_BLOCK_SIZE))
-
-#define vol_out_of_phase_write_valid(d, e) (dir_offset(e) - 1 >= ((d->header->agg_pos - d->start + AGG_SIZE) / CACHE_BLOCK_SIZE))
-
-#define vol_in_phase_valid(d, e) (dir_offset(e) - 1 < ((d->header->write_pos + d->agg_buf_pos - d->start) / CACHE_BLOCK_SIZE))
-
-#define vol_offset_to_offset(d, pos) (d->start + pos * CACHE_BLOCK_SIZE - CACHE_BLOCK_SIZE)
-
-#define vol_dir_segment(d, s) (Dir *)(((char *)d->dir) + (s * d->buckets) * DIR_DEPTH * SIZEOF_DIR)
-
-#define offset_to_vol_offset(d, pos) ((pos - d->start + CACHE_BLOCK_SIZE) / CACHE_BLOCK_SIZE)
-
-#define vol_offset(d, e) ((d)->start + (off_t)((off_t)dir_offset(e) * CACHE_BLOCK_SIZE) - CACHE_BLOCK_SIZE)
-
-#define vol_in_phase_agg_buf_valid(d, e) \
- ((vol_offset(d, e) >= d->header->write_pos) && vol_offset(d, e) < (d->header->write_pos + d->agg_buf_pos))
-
-#define vol_transistor_range_valid(d, e) \
- ((d->header->agg_pos + d->transistor_range_threshold < d->start + d->len) ? \
- (vol_out_of_phase_write_valid(d, e) && \
- (dir_offset(e) <= ((d->header->agg_pos - d->start + d->transistor_range_threshold) / CACHE_BLOCK_SIZE))) : \
- ((dir_offset(e) <= ((d->header->agg_pos - d->start + d->transistor_range_threshold - d->len) / CACHE_BLOCK_SIZE)) || \
- (dir_offset(e) > ((d->header->agg_pos - d->start) / CACHE_BLOCK_SIZE))))
-
-
-#else
TS_INLINE int
vol_out_of_phase_valid(Vol *d, Dir *e)
{
@@ -779,7 +395,6 @@ vol_in_phase_agg_buf_valid(Vol *d, Dir *e)
{
return (vol_offset(d, e) >= d->header->write_pos && vol_offset(d, e) < (d->header->write_pos + d->agg_buf_pos));
}
-#endif
// length of the partition not including the offset of location 0.
TS_INLINE off_t
vol_relative_length(Vol *v, off_t start_offset)
@@ -889,74 +504,4 @@ Vol::round_to_approx_size(uint32_t l)
return ROUND_TO_SECTOR(this, ll);
}
-#if TS_USE_INTERIM_CACHE == 1
-inline bool
-dir_valid(Vol *_d, Dir *_e)
-{
- if (!dir_ininterim(_e))
- return _d->header->phase == dir_phase(_e) ? vol_in_phase_valid(_d, _e) : vol_out_of_phase_valid(_d, _e);
- else {
- int idx = dir_get_index(_e);
- if (good_interim_disks <= 0 || idx >= _d->num_interim_vols)
- return false;
- InterimCacheVol *sv = &(_d->interim_vols[idx]);
- return !DISK_BAD(sv->disk) ?
- (sv->header->phase == dir_phase(_e) ? vol_in_phase_valid(sv, _e) : vol_out_of_phase_valid(sv, _e)) :
- false;
- }
-}
-
-inline bool
-dir_valid(InterimCacheVol *_d, Dir *_e)
-{
- if (!dir_ininterim(_e))
- return true;
- InterimCacheVol *sv = &(_d->vol->interim_vols[dir_get_index(_e)]);
- if (_d != sv)
- return true;
- return !DISK_BAD(sv->disk) ? (sv->header->phase == dir_phase(_e) ? vol_in_phase_valid(sv, _e) : vol_out_of_phase_valid(sv, _e)) :
- false;
-}
-
-inline bool
-dir_agg_valid(Vol *_d, Dir *_e)
-{
- if (!dir_ininterim(_e))
- return _d->header->phase == dir_phase(_e) ? vol_in_phase_valid(_d, _e) : vol_out_of_phase_agg_valid(_d, _e);
- else {
- int idx = dir_get_index(_e);
- if (good_interim_disks <= 0 || idx >= _d->num_interim_vols)
- return false;
- InterimCacheVol *sv = &(_d->interim_vols[idx]);
- return sv->header->phase == dir_phase(_e) ? vol_in_phase_valid(sv, _e) : vol_out_of_phase_agg_valid(sv, _e);
- }
-}
-inline bool
-dir_write_valid(Vol *_d, Dir *_e)
-{
- if (!dir_ininterim(_e))
- return _d->header->phase == dir_phase(_e) ? vol_in_phase_valid(_d, _e) : vol_out_of_phase_write_valid(_d, _e);
- else {
- InterimCacheVol *sv = &(_d->interim_vols[dir_get_index(_e)]);
- return sv->header->phase == dir_phase(_e) ? vol_in_phase_valid(sv, _e) : vol_out_of_phase_write_valid(sv, _e);
- }
-}
-inline bool
-dir_agg_buf_valid(Vol *_d, Dir *_e)
-{
- if (!dir_ininterim(_e))
- return _d->header->phase == dir_phase(_e) && vol_in_phase_agg_buf_valid(_d, _e);
- else {
- InterimCacheVol *sv = &(_d->interim_vols[dir_get_index(_e)]);
- return sv->header->phase == dir_phase(_e) && vol_in_phase_agg_buf_valid(sv, _e);
- }
-}
-
-inline bool
-dir_agg_buf_valid(InterimCacheVol *_d, Dir *_e)
-{
- return _d->header->phase == dir_phase(_e) && vol_in_phase_agg_buf_valid(_d, _e);
-}
-
-#endif // TS_USE_INTERIM_CACHE
#endif /* _P_CACHE_VOL_H__ */
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/iocore/cache/Store.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/Store.cc b/iocore/cache/Store.cc
index 84af046..44a0a4a 100644
--- a/iocore/cache/Store.cc
+++ b/iocore/cache/Store.cc
@@ -70,10 +70,6 @@ span_file_typename(mode_t st_mode)
Ptr<ProxyMutex> tmp_p;
Store::Store()
: n_disks(0), disk(NULL)
-#if TS_USE_INTERIM_CACHE == 1
- ,
- n_interim_disks(0), interim_disk(NULL)
-#endif
{
}
@@ -434,50 +430,6 @@ Lfail:
return err;
}
-#if TS_USE_INTERIM_CACHE == 1
-const char *
-Store::read_interim_config()
-{
- char p[PATH_NAME_MAX];
- Span *sd = NULL;
- Span *ns;
- int interim_store = 0;
- REC_ReadConfigString(p, "proxy.config.cache.interim.storage", PATH_NAME_MAX);
-
- char *n = p;
- int sz = strlen(p);
-
- const char *err = NULL;
- for (int len = 0; n < p + sz; n += len + 1) {
- char *e = strpbrk(n, " \t\n");
- len = e ? e - n : strlen(n);
- n[len] = '\0';
- ns = new Span;
- if ((err = ns->init(n, -1))) {
- RecSignalWarning(REC_SIGNAL_SYSTEM_ERROR, "could not initialize storage \"%s\" [%s]", n, err);
- Debug("cache_init", "Store::read_interim_config - could not initialize storage \"%s\" [%s]", n, err);
- delete ns;
- continue;
- }
- ns->link.next = sd;
- sd = ns;
- interim_store++;
- }
-
- n_interim_disks = interim_store;
- interim_disk = (Span **)ats_malloc(interim_store * sizeof(Span *));
- {
- int i = 0;
- while (sd) {
- ns = sd;
- sd = sd->link.next;
- ns->link.next = NULL;
- interim_disk[i++] = ns;
- }
- }
- return NULL;
-}
-#endif
int
Store::write_config_data(int fd) const
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/lib/ts/ink_config.h.in
----------------------------------------------------------------------
diff --git a/lib/ts/ink_config.h.in b/lib/ts/ink_config.h.in
index 25cc250..9ae0160 100644
--- a/lib/ts/ink_config.h.in
+++ b/lib/ts/ink_config.h.in
@@ -77,7 +77,6 @@
#define TS_USE_SET_RBIO @use_set_rbio@
#define TS_USE_TLS_ECKEY @use_tls_eckey@
#define TS_USE_LINUX_NATIVE_AIO @use_linux_native_aio@
-#define TS_USE_INTERIM_CACHE @has_interim_cache@
#define TS_HAS_SO_PEERCRED @has_so_peercred@
#define TS_USE_REMOTE_UNWINDING @use_remote_unwinding@
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/6ad5348f/mgmt/RecordsConfig.cc
----------------------------------------------------------------------
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index 1ae8492..d84d2df 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -938,12 +938,6 @@ static const RecordElement RecordsConfig[] =
,
{RECT_CONFIG, "proxy.config.cache.target_fragment_size", RECD_INT, "1048576", RECU_DYNAMIC, RR_NULL, RECC_NULL, NULL, RECA_NULL}
,
- // # only be used when compiled with --enable-interim-cache
- {RECT_LOCAL, "proxy.config.cache.interim.storage", RECD_STRING, NULL, RECU_RESTART_TS, RR_NULL, RECC_NULL, NULL, RECA_NULL}
- ,
- // # only be used when compiled with --enable-interim-cache
- {RECT_CONFIG, "proxy.config.cache.interim.migrate_threshold", RECD_INT, "2", RECU_DYNAMIC, RR_NULL, RECC_NULL, NULL, RECA_NULL}
- ,
// # The maximum size of a document that will be stored in the cache.
// # (0 disables the maximum document size check)
{RECT_CONFIG, "proxy.config.cache.max_doc_size", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_STR, "^[0-9]+$", RECA_NULL}