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}