You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by so...@apache.org on 2017/05/09 19:58:41 UTC

[trafficserver] branch master updated: Remove even more clustering bits

This is an automated email from the ASF dual-hosted git repository.

sorber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

The following commit(s) were added to refs/heads/master by this push:
       new  17ea1d0   Remove even more clustering bits
17ea1d0 is described below

commit 17ea1d09049d56765cff2d39e2e17a5da92b78a1
Author: Phil Sorber <so...@apache.org>
AuthorDate: Tue May 9 11:45:15 2017 -0600

    Remove even more clustering bits
---
 INSTALL                                            |  12 -
 cmd/traffic_manager/AddConfigFilesHere.cc          |   1 -
 contrib/python/compare_RecordsConfigcc.py          |   1 -
 iocore/cache/P_CacheInternal.h                     |   1 -
 iocore/eventsystem/I_Event.h                       |   1 -
 iocore/hostdb/HostDB.cc                            |   2 +-
 iocore/hostdb/P_HostDBProcessor.h                  |  12 -
 iocore/hostdb/include/Machine.h                    | 115 ------
 iocore/net/P_UnixNetState.h                        |   3 -
 lib/perl/lib/Apache/TS/AdminClient.pm              |  34 --
 lib/records/I_RecDefs.h                            |   2 +-
 lib/records/I_RecEvents.h                          |   1 -
 lib/records/P_RecDefs.h                            |   6 -
 lib/ts/I_Version.h                                 |   2 -
 lib/ts/InkErrno.cc                                 |  18 -
 lib/ts/InkErrno.h                                  |  10 -
 lib/ts/apidefs.h.in                                |   4 +-
 mgmt/RecordsConfig.cc                              |  12 -
 mgmt/api/APITestCliRemote.cc                       | 141 -------
 mgmt/api/CfgContextImpl.cc                         | 114 ------
 mgmt/api/CfgContextImpl.h                          |  26 --
 mgmt/api/CfgContextUtils.cc                        |  41 +-
 mgmt/api/CfgContextUtils.h                         |   1 -
 mgmt/api/EventControlMain.cc                       |   1 -
 mgmt/api/GenericParser.cc                          |  29 --
 mgmt/api/GenericParser.h                           |   1 -
 mgmt/api/INKMgmtAPI.cc                             |  33 +-
 mgmt/api/NetworkMessage.cc                         |   3 -
 mgmt/api/NetworkMessage.h                          |   1 -
 mgmt/api/TSControlMain.cc                          |   1 -
 mgmt/api/include/mgmtapi.h                         |  18 +-
 proxy/Main.h                                       |   3 -
 proxy/README-stats.otl                             |  15 +-
 proxy/TestProxy.cc                                 | 427 ---------------------
 proxy/TimeTrace.h                                  |   3 -
 proxy/api/ts/experimental.h                        | 143 -------
 proxy/config/Makefile.am                           |   2 -
 proxy/config/cluster.config.default                |  26 --
 proxy/config/metrics.config.default                | 326 ----------------
 proxy/config/vaddrs.config.default                 |  22 --
 proxy/http/HttpTransact.h                          |   1 -
 proxy/http/README.via                              |   1 -
 proxy/http/TestHttpTransact.cc                     |  95 -----
 proxy/logging/Log.cc                               |   2 +-
 proxy/logging/LogSock.cc                           |   6 +-
 proxy/logging/LogSock.h                            |   4 +-
 tests/getting_started.md                           |   1 -
 .../gold_tests/autest-site/trafficserver.test.ext  |   4 -
 tools/traffic_shell.pl                             |  17 -
 49 files changed, 19 insertions(+), 1726 deletions(-)

diff --git a/INSTALL b/INSTALL
index 597bb56..2105ea6 100644
--- a/INSTALL
+++ b/INSTALL
@@ -56,18 +56,6 @@ To compile with an alternate set of compilers, e.g. LLVM/Clang
     $ ./configure CC=clang CXX=clang++
 
 
-INITIAL CONFIGURATION
----------------------
-
-Next set the cluster interface in 'records.config'. The network
-interface name will vary depending on the host operating system.
-
-For example:
-    Linux: CONFIG proxy.config.cluster.ethernet_interface STRING eth0
-    OS X: CONFIG proxy.config.cluster.ethernet_interface STRING en0
-    FreeBSD: CONFIG proxy.config.cluster.ethernet_interface STRING em0
-    OpenSolaris: CONFIG proxy.config.cluster.ethernet_interface STRING e1000g0
-
 To start the Traffic Server process stack (TC, TM, TS):
     $ sudo PREFIX/bin/trafficserver start
 
diff --git a/cmd/traffic_manager/AddConfigFilesHere.cc b/cmd/traffic_manager/AddConfigFilesHere.cc
index 35fddb0..0bc2bd0 100644
--- a/cmd/traffic_manager/AddConfigFilesHere.cc
+++ b/cmd/traffic_manager/AddConfigFilesHere.cc
@@ -66,7 +66,6 @@ initializeRegistry()
   configFiles->addFile("storage.config", false);
   configFiles->addFile("socks.config", false);
   configFiles->addFile("records.config", false);
-  configFiles->addFile("vaddrs.config", false);
   configFiles->addFile("cache.config", false);
   configFiles->addFile("icp.config", false);
   configFiles->addFile("ip_allow.config", false);
diff --git a/contrib/python/compare_RecordsConfigcc.py b/contrib/python/compare_RecordsConfigcc.py
index ae7794d..d0e8b81 100644
--- a/contrib/python/compare_RecordsConfigcc.py
+++ b/contrib/python/compare_RecordsConfigcc.py
@@ -41,7 +41,6 @@ ignore_keys = {
     "proxy.config.ssl.client.CA.cert.path": 1,
     "proxy.config.config_dir": 1,
     "proxy.config.proxy_name": 1,
-    "proxy.config.cluster.ethernet_interface": 1,
     "proxy.config.ssl.client.private_key.path": 1,
     "proxy.config.net.defer_accept": 1 # Specified in RecordsConfig.cc funny
 }
diff --git a/iocore/cache/P_CacheInternal.h b/iocore/cache/P_CacheInternal.h
index 8f860a0..a5380b4 100644
--- a/iocore/cache/P_CacheInternal.h
+++ b/iocore/cache/P_CacheInternal.h
@@ -208,7 +208,6 @@ extern int cache_config_agg_write_backlog;
 extern int cache_config_enable_checksum;
 extern int cache_config_alt_rewrite_max_size;
 extern int cache_config_read_while_writer;
-extern int cache_clustering_enabled;
 extern int cache_config_agg_write_backlog;
 extern int cache_config_ram_cache_compress;
 extern int cache_config_ram_cache_compress_percent;
diff --git a/iocore/eventsystem/I_Event.h b/iocore/eventsystem/I_Event.h
index 984f5a2..090c677 100644
--- a/iocore/eventsystem/I_Event.h
+++ b/iocore/eventsystem/I_Event.h
@@ -57,7 +57,6 @@
 #define VC_EVENT_EVENTS_START 100
 #define NET_EVENT_EVENTS_START 200
 #define DISK_EVENT_EVENTS_START 300
-#define CLUSTER_EVENT_EVENTS_START 400
 #define HOSTDB_EVENT_EVENTS_START 500
 #define DNS_EVENT_EVENTS_START 600
 #define CONFIG_EVENT_EVENTS_START 800
diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index d28d760..6f957d9 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -1544,7 +1544,7 @@ HostDBContinuation::probeEvent(int /* event ATS_UNUSED */, Event *e)
 
     // If it suceeds or it was a remote probe, we are done
     //
-    if (r || from) {
+    if (r) {
       hostdb_cont_free(this);
       return EVENT_DONE;
     }
diff --git a/iocore/hostdb/P_HostDBProcessor.h b/iocore/hostdb/P_HostDBProcessor.h
index f7fbbc6..49d5fea 100644
--- a/iocore/hostdb/P_HostDBProcessor.h
+++ b/iocore/hostdb/P_HostDBProcessor.h
@@ -36,8 +36,6 @@
 
 extern int hostdb_enable;
 extern int hostdb_migrate_on_demand;
-extern int hostdb_cluster;
-extern int hostdb_cluster_round_robin;
 extern int hostdb_lookup_timeout;
 extern int hostdb_insert_timeout;
 extern int hostdb_re_dns_on_reload;
@@ -128,16 +126,13 @@ HOSTDB_CLIENT_IP_HASH(sockaddr const *lhs, sockaddr const *rhs)
 //
 
 // period to wait for a remote probe...
-#define HOST_DB_CLUSTER_TIMEOUT HRTIME_MSECONDS(5000)
 #define HOST_DB_RETRY_PERIOD HRTIME_MSECONDS(20)
 #define HOST_DB_ITERATE_PERIOD HRTIME_MSECONDS(5)
 
 //#define TEST(_x) _x
 #define TEST(_x)
 
-struct ClusterMachine;
 struct HostEnt;
-struct ClusterConfiguration;
 
 // Stats
 enum HostDB_Stats {
@@ -441,12 +436,10 @@ struct HostDBContinuation : public Continuation {
   int dns_lookup_timeout;
   //  INK_MD5 md5;
   Event *timeout;
-  ClusterMachine *from;
   Continuation *from_cont;
   HostDBApplicationInfo app;
   int probe_depth;
   size_t current_iterate_pos;
-  ClusterMachine *past_probes[CONFIGURATION_HISTORY_PROBE_DEPTH];
   //  char name[MAXDNAME];
   //  int namelen;
   char md5_host_name_store[MAXDNAME + 1]; // used as backing store for @a md5
@@ -460,8 +453,6 @@ struct HostDBContinuation : public Continuation {
 
   int probeEvent(int event, Event *e);
   int iterateEvent(int event, Event *e);
-  int clusterEvent(int event, Event *e);
-  int clusterResponseEvent(int event, Event *e);
   int dnsEvent(int event, HostEnt *e);
   int dnsPendingEvent(int event, Event *e);
   int backgroundEvent(int event, Event *e);
@@ -488,8 +479,6 @@ struct HostDBContinuation : public Continuation {
   void remove_trigger_pending_dns();
   int set_check_pending_dns();
 
-  ClusterMachine *master_machine(ClusterConfiguration *cc);
-
   HostDBInfo *insert(unsigned int attl);
 
   /** Optional values for @c init.
@@ -515,7 +504,6 @@ struct HostDBContinuation : public Continuation {
       host_res_style(DEFAULT_OPTIONS.host_res_style),
       dns_lookup_timeout(DEFAULT_OPTIONS.timeout),
       timeout(0),
-      from(0),
       from_cont(0),
       probe_depth(0),
       current_iterate_pos(0),
diff --git a/iocore/hostdb/include/Machine.h b/iocore/hostdb/include/Machine.h
deleted file mode 100644
index 7875054..0000000
--- a/iocore/hostdb/include/Machine.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/** @file
-
-  A brief file description
-
-  @section license License
-
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
- */
-
-/****************************************************************************
-
-  Machine.h
-
-
- ****************************************************************************/
-
-//
-//  The Machine is the set of processes which share part of an
-//  address space.
-//
-
-#ifndef _Machine_h
-#define _Machine_h
-
-//
-// Timeout the Machine * this amount of time after they
-// fall out of the current configuration that are deleted.
-//
-#define MACHINE_TIMEOUT (HRTIME_DAY * 2)
-
-//
-//  This is the time processors should delay before freeing up resouces
-//  which are shared with other threads in non-long running operations.
-//  For example, a Machine * is returned by the hash and used to do
-//  a remote invoke.  For the pointer to remain valid (or be recognized as
-//  invalid) he resource should not be raclaimed for NO_RACE_DELAY.
-//
-//  Long running operations should use more sophisticated synchronization.
-//
-#define NO_RACE_DELAY HRTIME_HOUR // a long long time
-
-//#include "Connection.h"
-
-class ClusterHandler; // Leave this a class - VC++ gets very anal  ~SR
-
-struct Machine : Server {
-  bool dead;
-  char *hostname;
-  int hostname_len;
-  //
-  // The network address of the current machine,
-  // stored in network byte order
-  //
-  unsigned int ip;
-  int cluster_port;
-
-  Link<Machine> link;
-
-  // default for localhost
-  Machine(char *hostname = nullptr, unsigned int ip = 0, int acluster_port = 0);
-  ~Machine();
-
-  // Cluster message protocol version
-  uint16_t msg_proto_major;
-  uint16_t msg_proto_minor;
-
-  // Private data for ClusterProcessor
-  //
-  ClusterHandler *clusterHandler;
-};
-
-struct MachineListElement {
-  unsigned int ip;
-  int port;
-};
-
-struct MachineList {
-  int n;
-  MachineListElement machine[1];
-  MachineListElement *
-  find(unsigned int ip, int port = 0)
-  {
-    for (int i = 0; i < n; i++)
-      if (machine[i].ip == ip && (!port || machine[i].port == port))
-        return &machine[i];
-    return nullptr;
-  }
-};
-
-void free_Machine(Machine *m);
-
-MachineList *the_cluster_config();
-extern ProxyMutex *the_cluster_config_mutex;
-
-//
-// Private
-//
-extern MachineList *machines_config;
-extern MachineList *cluster_config;
-
-#endif /* _Machine_h */
diff --git a/iocore/net/P_UnixNetState.h b/iocore/net/P_UnixNetState.h
index ca807af..3b9e531 100644
--- a/iocore/net/P_UnixNetState.h
+++ b/iocore/net/P_UnixNetState.h
@@ -32,9 +32,6 @@
    This information is private to the Net module.   It is only here
    because of the the C++ compiler needs it to define NetVConnection.
 
-   Shared with Cluster.cc
-
-
 
  ****************************************************************************/
 #if !defined(_UnixNetState_h_)
diff --git a/lib/perl/lib/Apache/TS/AdminClient.pm b/lib/perl/lib/Apache/TS/AdminClient.pm
index 70e9514..9676f8d 100644
--- a/lib/perl/lib/Apache/TS/AdminClient.pm
+++ b/lib/perl/lib/Apache/TS/AdminClient.pm
@@ -358,34 +358,6 @@ The Apache Traffic Server Administration Manual will explain what these strings
  proxy.config.cache.storage_filename
  proxy.config.cache.threads_per_disk
  proxy.config.cache.mutex_retry_delay
- proxy.config.cluster.cluster_configuration
- proxy.config.cluster.cluster_load_clear_duration
- proxy.config.cluster.cluster_load_exceed_duration
- proxy.config.cluster.cluster_port
- proxy.config.cluster.delta_thresh
- proxy.config.cluster.enable_monitor
- proxy.config.cluster.ethernet_interface
- proxy.config.cluster.load_compute_interval_msecs
- proxy.config.cluster.load_monitor_enabled
- proxy.config.cluster.log_bogus_mc_msgs
- proxy.config.cluster.mc_group_addr
- proxy.config.cluster.mcport
- proxy.config.cluster.mc_ttl
- proxy.config.cluster.monitor_interval_secs
- proxy.config.cluster.msecs_per_ping_response_bucket
- proxy.config.cluster.peer_timeout
- proxy.config.cluster.periodic_timer_interval_msecs
- proxy.config.cluster.ping_history_buf_length
- proxy.config.cluster.ping_latency_threshold_msecs
- proxy.config.cluster.ping_response_buckets
- proxy.config.cluster.ping_send_interval_msecs
- proxy.config.cluster.receive_buffer_size
- proxy.config.cluster.rpc_cache_cluster
- proxy.config.cluster.rsport
- proxy.config.cluster.send_buffer_size
- proxy.config.cluster.sock_option_flag
- proxy.config.cluster.startup_timeout
- proxy.config.cluster.threads
  proxy.config.config_dir
  proxy.config.cop.core_signal
  proxy.config.cop.linux_min_memfree_kb
@@ -423,8 +395,6 @@ The Apache Traffic Server Administration Manual will explain what these strings
  proxy.config.exec_thread.limit
  proxy.config.header.parse.no_host_url_redirect
  proxy.config.hostdb
- proxy.config.hostdb.cluster
- proxy.config.hostdb.cluster.round_robin
  proxy.config.hostdb.fail.timeout
  proxy.config.hostdb.filename
  proxy.config.hostdb.lookup_timeout
@@ -464,7 +434,6 @@ The Apache Traffic Server Administration Manual will explain what these strings
  proxy.config.http.cache.ignore_accept_mismatch
  proxy.config.http.cache.ignore_authentication
  proxy.config.http.cache.ignore_client_cc_max_age
- proxy.config.http.cache.cluster_cache_local
  proxy.config.http.cache.ignore_client_no_cache
  proxy.config.http.cache.ignore_server_no_cache
  proxy.config.http.cache.ims_on_client_no_cache
@@ -680,9 +649,6 @@ The Apache Traffic Server Administration Manual will explain what these strings
  proxy.config.url_remap.filename
  proxy.config.url_remap.pristine_host_hdr
  proxy.config.url_remap.remap_required
- proxy.config.vmap.addr_file
- proxy.config.vmap.down_up_timeout
- proxy.config.vmap.enabled
 
 =head1 LICENSE
 
diff --git a/lib/records/I_RecDefs.h b/lib/records/I_RecDefs.h
index d2eb2ed..6d6e422 100644
--- a/lib/records/I_RecDefs.h
+++ b/lib/records/I_RecDefs.h
@@ -125,7 +125,7 @@ enum RecSourceT {
   REC_SOURCE_NULL,     ///< No source / value not set.
   REC_SOURCE_DEFAULT,  ///< Built in default.
   REC_SOURCE_PLUGIN,   ///< Plugin supplied default.
-  REC_SOURCE_EXPLICIT, ///< Set by administrator (config file, external API, cluster, etc.)
+  REC_SOURCE_EXPLICIT, ///< Set by administrator (config file, external API, etc.)
   REC_SOURCE_ENV       ///< Process environment variable.
 };
 
diff --git a/lib/records/I_RecEvents.h b/lib/records/I_RecEvents.h
index 1dedd8b..10cff09 100644
--- a/lib/records/I_RecEvents.h
+++ b/lib/records/I_RecEvents.h
@@ -32,7 +32,6 @@
 #define REC_EVENT_CLEAR_STATS 10004
 #define REC_EVENT_CONFIG_FILE_UPDATE 10005
 #define REC_EVENT_PLUGIN_CONFIG_UPDATE 10006
-#define REC_EVENT_HTTP_CLUSTER_DELTA 10007
 #define REC_EVENT_ROLL_LOG_FILES 10008
 #define REC_EVENT_LIBRECORDS 10009
 #define REC_EVENT_CONFIG_FILE_UPDATE_NO_INC_VERSION 10010
diff --git a/lib/records/P_RecDefs.h b/lib/records/P_RecDefs.h
index a1212e8..9cc53cf 100644
--- a/lib/records/P_RecDefs.h
+++ b/lib/records/P_RecDefs.h
@@ -118,12 +118,6 @@ struct RecRecord {
   int rsb_id;
 };
 
-// Used for cluster. TODO: Do we still need this?
-struct RecRecords {
-  int num_recs;
-  RecRecord *recs;
-};
-
 //-------------------------------------------------------------------------
 // Message Items
 //-------------------------------------------------------------------------
diff --git a/lib/ts/I_Version.h b/lib/ts/I_Version.h
index c28a1b1..9b84973 100644
--- a/lib/ts/I_Version.h
+++ b/lib/ts/I_Version.h
@@ -54,8 +54,6 @@ operator==(VersionNumber const &lhs, VersionNumber const &rhs)
 struct Version {
   VersionNumber cacheDB;
   VersionNumber cacheDir;
-  VersionNumber clustering;
-  VersionNumber clustering_min;
 };
 
 enum ModuleVersion {
diff --git a/lib/ts/InkErrno.cc b/lib/ts/InkErrno.cc
index 33301ce..9e637d4 100644
--- a/lib/ts/InkErrno.cc
+++ b/lib/ts/InkErrno.cc
@@ -45,20 +45,6 @@ InkStrerror(int ink_errno)
     return "ESOCK_TIMEOUT";
   case ESOCK_NO_SOCK_SERVER_CONN:
     return "ESOCK_NO_SOCK_SERVER_CONN";
-  case ECLUSTER_NO_VC:
-    return "ECLUSTER_NO_VC";
-  case ECLUSTER_NO_MACHINE:
-    return "ECLUSTER_NO_MACHINE";
-  case ECLUSTER_OP_TIMEOUT:
-    return "ECLUSTER_OP_TIMEOUT";
-  case ECLUSTER_ORB_DATA_READ:
-    return "ECLUSTER_ORB_DATA_READ";
-  case ECLUSTER_ORB_EIO:
-    return "ECLUSTER_ORB_EIO";
-  case ECLUSTER_CHANNEL_INUSE:
-    return "ECLUSTER_CHANNEL_INUSE";
-  case ECLUSTER_NOMORE_CHANNELS:
-    return "ECLUSTER_NOMORE_CHANNELS";
   case ECACHE_NO_DOC:
     return "ECACHE_NO_DOC";
   case ECACHE_DOC_BUSY:
@@ -91,10 +77,6 @@ InkStrerror(int ink_errno)
     return "ECACHE (unknown)";
   }
 
-  if (ink_errno > CLUSTER_ERRNO) {
-    return "ECLUSTER (unknown)";
-  }
-
   if (ink_errno > NET_ERRNO) {
     return "ENET (unknown)";
   }
diff --git a/lib/ts/InkErrno.h b/lib/ts/InkErrno.h
index 89abedc..b77b33a 100644
--- a/lib/ts/InkErrno.h
+++ b/lib/ts/InkErrno.h
@@ -35,7 +35,6 @@
 
 #define SOCK_ERRNO INK_START_ERRNO
 #define NET_ERRNO INK_START_ERRNO + 100
-#define CLUSTER_ERRNO INK_START_ERRNO + 200
 #define CACHE_ERRNO INK_START_ERRNO + 400
 #define HTTP_ERRNO INK_START_ERRNO + 600
 
@@ -47,15 +46,6 @@
 #define ESOCK_TIMEOUT (SOCK_ERRNO + 1)
 #define ESOCK_NO_SOCK_SERVER_CONN (SOCK_ERRNO + 2)
 
-// Error codes for CLUSTER_EVENT_OPEN_FAILED
-#define ECLUSTER_NO_VC (CLUSTER_ERRNO + 0)
-#define ECLUSTER_NO_MACHINE (CLUSTER_ERRNO + 1)
-#define ECLUSTER_OP_TIMEOUT (CLUSTER_ERRNO + 2)
-#define ECLUSTER_ORB_DATA_READ (CLUSTER_ERRNO + 3)
-#define ECLUSTER_ORB_EIO (CLUSTER_ERRNO + 4)
-#define ECLUSTER_CHANNEL_INUSE (CLUSTER_ERRNO + 5)
-#define ECLUSTER_NOMORE_CHANNELS (CLUSTER_ERRNO + 6)
-
 #define ECACHE_NO_DOC (CACHE_ERRNO + 0)
 #define ECACHE_DOC_BUSY (CACHE_ERRNO + 1)
 #define ECACHE_DIR_BAD (CACHE_ERRNO + 2)
diff --git a/lib/ts/apidefs.h.in b/lib/ts/apidefs.h.in
index 6f3ee68..87c77a6 100644
--- a/lib/ts/apidefs.h.in
+++ b/lib/ts/apidefs.h.in
@@ -577,7 +577,6 @@ typedef enum {
   TS_RECORDTYPE_CONFIG  = 0x01,
   TS_RECORDTYPE_PROCESS = 0x02,
   TS_RECORDTYPE_NODE    = 0x04,
-  TS_RECORDTYPE_CLUSTER = 0x08,
   TS_RECORDTYPE_LOCAL   = 0x10,
   TS_RECORDTYPE_PLUGIN  = 0x20,
   TS_RECORDTYPE_ALL     = 0x3F
@@ -765,7 +764,6 @@ typedef enum {
   TS_THREAD_POOL_SSL,
   TS_THREAD_POOL_DNS,
   TS_THREAD_POOL_REMAP,
-  TS_THREAD_POOL_CLUSTER,
   TS_THREAD_POOL_UDP
 } TSThreadPool;
 
@@ -813,7 +811,7 @@ typedef enum {
   TS_MGMT_SOURCE_NULL,     ///< No source / value not found.
   TS_MGMT_SOURCE_DEFAULT,  ///< Built in core default.
   TS_MGMT_SOURCE_PLUGIN,   ///< Plugin supplied default.
-  TS_MGMT_SOURCE_EXPLICIT, ///< Set by administrator (config file, external API, cluster, etc.)
+  TS_MGMT_SOURCE_EXPLICIT, ///< Set by administrator (config file, external API, etc.)
   TS_MGMT_SOURCE_ENV       ///< Process environment variable.
 } TSMgmtSource;
 
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index 7e151a1..4b2f23e 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -288,18 +288,6 @@ static const RecordElement RecordsConfig[] =
 
   //##############################################################################
   //#
-  //# Virtual IP Manager
-  //#
-  //##############################################################################
-  {RECT_CONFIG, "proxy.config.vmap.enabled", RECD_INT, "0", RECU_NULL, RR_NULL, RECC_INT, "[0-1]", RECA_NULL}
-  ,
-  {RECT_CONFIG, "proxy.config.vmap.addr_file", RECD_STRING, "vaddrs.config", RECU_DYNAMIC, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
-  ,
-  {RECT_CONFIG, "proxy.config.vmap.down_up_timeout", RECD_INT, "10", RECU_NULL, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
-  ,
-
-  //##############################################################################
-  //#
   //# Alarm Configuration
   //#
   //##############################################################################
diff --git a/mgmt/api/APITestCliRemote.cc b/mgmt/api/APITestCliRemote.cc
index fae19ed..e3c96e4 100644
--- a/mgmt/api/APITestCliRemote.cc
+++ b/mgmt/api/APITestCliRemote.cc
@@ -60,8 +60,6 @@
  * cfg_get:<config-filename>: prints out the rules in confg-filename
  * cfg:<config-filename>: switches the position of first and last rule of
  *                        <config-filename>
- * cfg_context: calls all the TSCfgCOntext helper function calls using
- *              vaddrs.config
  * cfg_socks: does some basic testing of socks.config (reads in file,
  *            modifies it, eg. add new rules, then commits changes)
  *
@@ -762,17 +760,6 @@ print_storage_ele(TSStorageEle *ele)
   }
 }
 
-void
-print_vaddrs_ele(TSVirtIpAddrEle *ele)
-{
-  if (!ele) {
-    printf("can't print ele\n");
-    return;
-  }
-
-  printf("ip=%s, intr=%s, sub_intr=%d\n", ele->ip_addr, ele->intr, ele->sub_intr);
-}
-
 //
 // print_ele_list
 //
@@ -829,9 +816,6 @@ print_ele_list(TSFileNameT file, TSCfgContext ctx)
     case TS_FNAME_STORAGE:
       print_storage_ele((TSStorageEle *)ele);
       break;
-    case TS_FNAME_VADDRS:
-      print_vaddrs_ele((TSVirtIpAddrEle *)ele);
-      break;
     default:
       printf("[print_ele_list] invalid file type \n");
       return;
@@ -1483,8 +1467,6 @@ test_cfg_context_get(char *args)
     file = TS_FNAME_STORAGE;
   } else if (strcmp(name, "splitdns.config") == 0) {
     file = TS_FNAME_SPLIT_DNS;
-  } else if (strcmp(name, "vaddrs.config") == 0) {
-    file = TS_FNAME_VADDRS;
   } else {
     TSfree(name);
     return;
@@ -1549,8 +1531,6 @@ test_cfg_context_move(char *args)
     file = TS_FNAME_STORAGE;
   } else if (strcmp(name, "splitdns.config") == 0) {
     file = TS_FNAME_SPLIT_DNS;
-  } else if (strcmp(name, "vaddrs.config") == 0) {
-    file = TS_FNAME_VADDRS;
   } else {
     TSfree(name);
     return;
@@ -1594,125 +1574,6 @@ END:
   return;
 }
 
-void
-test_cfg_context_ops()
-{
-  // Not used here.
-  // TSCfgIterState iter_state;
-  // TSCfgEle *cfg_ele;
-  TSMgmtError err;
-  TSCfgContext ctx;
-  TSVirtIpAddrEle *ele;
-  int rm_index = 0, i;
-  int insert_at;
-
-  ctx = TSCfgContextCreate(TS_FNAME_VADDRS);
-
-  if (TSCfgContextGet(ctx) != TS_ERR_OKAY) {
-    printf("ERROR READING FILE\n");
-  }
-
-  printf("\nBEFORE CHANGE:\n");
-  //  print_VirtIpAddr_ele_list(ctx);
-
-  int count = TSCfgContextGetCount(ctx);
-  printf("# ele's = %d\n", count);
-
-  printf("\nShifted all Ele's < %d up\n", rm_index);
-  // move all ele's below rm_index up one; this shifts the rm_index ele to
-  // bottom of TSCfgContext
-  for (i = (rm_index + 1); i < count; i++) {
-    err = TSCfgContextMoveEleUp(ctx, i);
-    if (err != TS_ERR_OKAY) {
-      printf("ERROR moving ele at index %d up \n", i);
-      goto END;
-    }
-  }
-  // print_VirtIpAddr_ele_list(ctx);
-
-  printf("\nREMOVE LAST ELE (originally the first ele)\n");
-  // remove the last ele (which was originally the first ele)
-  err = TSCfgContextRemoveEleAt(ctx, (count - 1));
-  if (err != TS_ERR_OKAY) {
-    printf("ERROR: removing ele at index %d\n", count - 1);
-    goto END;
-  }
-
-  printf("\nRemoving second to last Ele \n");
-  err = TSCfgContextRemoveEleAt(ctx, (count - 2));
-  if (err != TS_ERR_OKAY) {
-    printf("ERROR: removing ele at index %d\n", count - 2);
-    goto END;
-  }
-
-  // append a new ele
-  printf("\nappend new ele\n");
-  ele = TSVirtIpAddrEleCreate();
-  if (ele) {
-    ele->ip_addr  = TSstrdup("201.201.201.201");
-    ele->intr     = TSstrdup("appended");
-    ele->sub_intr = 201;
-    err           = TSCfgContextAppendEle(ctx, (TSCfgEle *)ele);
-    if (err != TS_ERR_OKAY) {
-      printf("ERROR: append ele\n");
-      TSVirtIpAddrEleDestroy(ele);
-      goto END;
-    }
-  } else {
-    printf("Can't create VirtIpAddrEle\n");
-  }
-  // print_VirtIpAddr_ele_list(ctx);
-
-  insert_at = 1;
-  // insert a new ele in insert_at index
-  printf("\nINSERT NEW ELE at %d index\n", insert_at);
-  ele = TSVirtIpAddrEleCreate();
-  if (ele) {
-    ele->ip_addr  = TSstrdup("101.101.101.101");
-    ele->intr     = (char *)TSstrdup("inserted");
-    ele->sub_intr = 100;
-    err           = TSCfgContextInsertEleAt(ctx, (TSCfgEle *)ele, insert_at);
-    if (err != TS_ERR_OKAY) {
-      printf("ERROR: insert ele  at index %d\n", insert_at);
-      TSVirtIpAddrEleDestroy(ele);
-      goto END;
-    }
-  } else {
-    printf("Can't create VirtIpAddrEle\n");
-  }
-  // print_VirtIpAddr_ele_list(ctx);
-
-  printf("\nMove ele at index %d to botoom of list\n", insert_at);
-  for (i = insert_at; i < TSCfgContextGetCount(ctx); i++) {
-    err = TSCfgContextMoveEleDown(ctx, i);
-    if (err != TS_ERR_OKAY) {
-      printf("ERROR: moving ele down at index %d\n", i);
-      goto END;
-    }
-  }
-  // print_VirtIpAddr_ele_list(ctx);
-
-  printf("\nShift all Ele's above last ele down; bottom ele becomes top ele\n");
-  count = TSCfgContextGetCount(ctx);
-  for (i = count - 2; i >= 0; i--) {
-    err = TSCfgContextMoveEleDown(ctx, i);
-    if (err != TS_ERR_OKAY) {
-      printf("ERROR: moving ele down at index %d\n", i);
-      goto END;
-    }
-  }
-  // print_VirtIpAddr_ele_list(ctx);
-
-  // commit change
-  TSCfgContextCommit(ctx, nullptr, nullptr);
-
-  printf("\nAFTER CHANGE:\n");
-// print_VirtIpAddr_ele_list(ctx);
-
-END:
-  TSCfgContextDestroy(ctx);
-}
-
 /* ------------------------------------------------------------------------
  * test_cfg_plugin
  * ------------------------------------------------------------------------
@@ -2251,8 +2112,6 @@ runInteractive()
       test_cfg_context_get(buf);
     } else if (strstr(buf, "cfg:")) {
       test_cfg_context_move(buf);
-    } else if (strstr(buf, "cfg_context")) {
-      test_cfg_context_ops();
     } else if (strstr(buf, "cfg_socks")) {
       test_cfg_socks();
     } else if (strstr(buf, "cfg_plugin")) {
diff --git a/mgmt/api/CfgContextImpl.cc b/mgmt/api/CfgContextImpl.cc
index ac72880..c8191c1 100644
--- a/mgmt/api/CfgContextImpl.cc
+++ b/mgmt/api/CfgContextImpl.cc
@@ -150,9 +150,6 @@ CacheObj::formatEleToRule()
   case TS_CACHE_IGNORE_NO_CACHE:
     ink_strlcat(buf, "action=ignore-no-cache ", sizeof(buf));
     break;
-  case TS_CACHE_CLUSTER_CACHE_LOCAL:
-    ink_strlcat(buf, "action=cluster-cache-local ", sizeof(buf));
-    break;
   case TS_CACHE_IGNORE_CLIENT_NO_CACHE:
     ink_strlcat(buf, "action=ignore-client-no-cache ", sizeof(buf));
     break;
@@ -214,7 +211,6 @@ CacheObj::isValid()
   switch (m_ele->cfg_ele.type) {
   case TS_CACHE_NEVER:
   case TS_CACHE_IGNORE_NO_CACHE:
-  case TS_CACHE_CLUSTER_CACHE_LOCAL:
   case TS_CACHE_IGNORE_CLIENT_NO_CACHE:
   case TS_CACHE_IGNORE_SERVER_NO_CACHE:
   case TS_CACHE_AUTH_CONTENT:
@@ -2326,116 +2322,6 @@ StorageObj::getCfgEleCopy()
   return (TSCfgEle *)copy_storage_ele(m_ele);
 }
 
-//--------------------------------------------------------------------------
-// VirtIpAddrObj
-//--------------------------------------------------------------------------
-VirtIpAddrObj::VirtIpAddrObj(TSVirtIpAddrEle *ele)
-{
-  m_ele   = ele;
-  m_valid = true;
-  m_valid = isValid();
-}
-
-VirtIpAddrObj::VirtIpAddrObj(TokenList *tokens)
-{
-  Token *tok;
-
-  m_ele                = TSVirtIpAddrEleCreate();
-  m_ele->cfg_ele.error = TS_ERR_OKAY;
-  m_valid              = true;
-
-  if (!tokens || (tokens->length != 3)) {
-    goto FORMAT_ERR;
-  }
-
-  m_ele->cfg_ele.type = get_rule_type(tokens, TS_FNAME_VADDRS);
-  if (m_ele->cfg_ele.type == TS_TYPE_UNDEFINED) {
-    goto FORMAT_ERR;
-  }
-  // IP Address
-  tok = tokens->first();
-  if (tok->value != nullptr) {
-    goto FORMAT_ERR;
-  }
-  m_ele->ip_addr = string_to_ip_addr(tok->name);
-
-  // Device
-  tok = tokens->next(tok);
-  if (tok->value != nullptr) {
-    goto FORMAT_ERR;
-  }
-  m_ele->intr = ats_strdup(tok->name);
-
-  // Subinterface
-  tok = tokens->next(tok);
-  if (tok->value != nullptr) {
-    goto FORMAT_ERR;
-  }
-  m_ele->sub_intr = ink_atoi(tok->name); // ERROR: can't convert?
-
-  return;
-
-FORMAT_ERR:
-  m_ele->cfg_ele.error = TS_ERR_INVALID_CONFIG_RULE;
-  m_valid              = false;
-}
-
-VirtIpAddrObj::~VirtIpAddrObj()
-{
-  TSVirtIpAddrEleDestroy(m_ele);
-}
-
-char *
-VirtIpAddrObj::formatEleToRule()
-{
-  if (!isValid()) {
-    m_ele->cfg_ele.error = TS_ERR_INVALID_CONFIG_RULE;
-    return nullptr;
-  }
-
-  char *ip_str;
-  char buf[MAX_RULE_SIZE];
-  memset(buf, 0, MAX_RULE_SIZE);
-
-  ip_str = ip_addr_to_string(m_ele->ip_addr);
-  snprintf(buf, sizeof(buf), "%s %s %d", ip_str, m_ele->intr, m_ele->sub_intr);
-  ats_free(ip_str);
-
-  return ats_strdup(buf);
-}
-
-bool
-VirtIpAddrObj::isValid()
-{
-  if (m_ele->cfg_ele.error != TS_ERR_OKAY) {
-    m_valid = false;
-  }
-
-  if (!ccu_checkIpAddr(m_ele->ip_addr)) {
-    m_valid = false;
-  }
-
-  if (!m_ele->intr) {
-    m_valid = false;
-  }
-
-  if ((m_ele->sub_intr < 1) || (m_ele->sub_intr > 255)) {
-    m_valid = false;
-  }
-
-  if (!m_valid) {
-    m_ele->cfg_ele.error = TS_ERR_INVALID_CONFIG_RULE;
-  }
-
-  return m_valid;
-}
-
-TSCfgEle *
-VirtIpAddrObj::getCfgEleCopy()
-{
-  return (TSCfgEle *)copy_virt_ip_addr_ele(m_ele);
-}
-
 /*****************************************************************
  * CfgContext
  *****************************************************************/
diff --git a/mgmt/api/CfgContextImpl.h b/mgmt/api/CfgContextImpl.h
index 0d5ecc5..6a236b5 100644
--- a/mgmt/api/CfgContextImpl.h
+++ b/mgmt/api/CfgContextImpl.h
@@ -411,32 +411,6 @@ private:
   TSStorageEle *m_ele;
 };
 
-/* vaddrs.config       *******************************************/
-class VirtIpAddrObj : public CfgEleObj
-{
-public:
-  VirtIpAddrObj(TSVirtIpAddrEle *ele);
-  VirtIpAddrObj(TokenList *tokens);
-  ~VirtIpAddrObj();
-
-  virtual char *formatEleToRule();
-  virtual bool isValid();
-  virtual TSCfgEle *getCfgEleCopy();
-  virtual TSCfgEle *
-  getCfgEle()
-  {
-    return (TSCfgEle *)m_ele;
-  }
-  virtual TSRuleTypeT
-  getRuleType()
-  {
-    return m_ele->cfg_ele.type;
-  }
-
-private:
-  TSVirtIpAddrEle *m_ele;
-};
-
 /*****************************************************************
  * CfgContext
  *****************************************************************/
diff --git a/mgmt/api/CfgContextUtils.cc b/mgmt/api/CfgContextUtils.cc
index 72e7409..a674c0b 100644
--- a/mgmt/api/CfgContextUtils.cc
+++ b/mgmt/api/CfgContextUtils.cc
@@ -1481,8 +1481,6 @@ filename_to_string(TSFileNameT file)
     return "splitdns.config";
   case TS_FNAME_STORAGE:
     return "storage.config";
-  case TS_FNAME_VADDRS:
-    return "vaddrs.config";
   default: /* no such config file */
     return nullptr;
   }
@@ -1950,7 +1948,6 @@ create_ele_obj_from_rule_node(Rule *rule)
   switch (rule_type) {
   case TS_CACHE_NEVER: /* all cache rules use same constructor */
   case TS_CACHE_IGNORE_NO_CACHE:
-  case TS_CACHE_CLUSTER_CACHE_LOCAL:
   case TS_CACHE_IGNORE_CLIENT_NO_CACHE:
   case TS_CACHE_IGNORE_SERVER_NO_CACHE:
   case TS_CACHE_PIN_IN_CACHE:
@@ -1999,9 +1996,6 @@ create_ele_obj_from_rule_node(Rule *rule)
   case TS_STORAGE:
     ele = (CfgEleObj *)new StorageObj(token_list);
     break;
-  case TS_VADDRS: /* vaddrs.config */
-    ele = (CfgEleObj *)new VirtIpAddrObj(token_list);
-    break;
   default:
     return nullptr; // invalid rule type
   }
@@ -2029,9 +2023,8 @@ create_ele_obj_from_ele(TSCfgEle *ele)
   }
 
   switch (ele->type) {
-  case TS_CACHE_NEVER:           /* cache.config */
-  case TS_CACHE_IGNORE_NO_CACHE: // fall-through
-  case TS_CACHE_CLUSTER_CACHE_LOCAL:
+  case TS_CACHE_NEVER:                  /* cache.config */
+  case TS_CACHE_IGNORE_NO_CACHE:        // fall-through
   case TS_CACHE_IGNORE_CLIENT_NO_CACHE: // fall-through
   case TS_CACHE_IGNORE_SERVER_NO_CACHE: // fall-through
   case TS_CACHE_PIN_IN_CACHE:           // fall-through
@@ -2091,9 +2084,6 @@ create_ele_obj_from_ele(TSCfgEle *ele)
     ele_obj = (CfgEleObj *)new StorageObj((TSStorageEle *)ele);
     break;
 
-  case TS_VADDRS: /* vaddrs.config */
-    ele_obj = (CfgEleObj *)new VirtIpAddrObj((TSVirtIpAddrEle *)ele);
-    break;
   case TS_TYPE_UNDEFINED:
   default:
     return nullptr; // error
@@ -2129,8 +2119,6 @@ get_rule_type(TokenList *token_list, TSFileNameT file)
           return TS_CACHE_NEVER;
         } else if (strcmp(tok->value, "ignore-no-cache") == 0) {
           return TS_CACHE_IGNORE_NO_CACHE;
-        } else if (strcmp(tok->value, "cluster-cache-local") == 0) {
-          return TS_CACHE_CLUSTER_CACHE_LOCAL;
         } else if (strcmp(tok->value, "ignore-client-no-cache") == 0) {
           return TS_CACHE_IGNORE_CLIENT_NO_CACHE;
         } else if (strcmp(tok->value, "ignore-server-no-cache") == 0) {
@@ -2210,8 +2198,6 @@ get_rule_type(TokenList *token_list, TSFileNameT file)
   case TS_FNAME_STORAGE: /* storage.config */
     return TS_STORAGE;
 
-  case TS_FNAME_VADDRS: /* vaddrs.config */
-    return TS_VADDRS;
   case TS_FNAME_UNDEFINED:
   default:
     return TS_TYPE_UNDEFINED;
@@ -2769,29 +2755,6 @@ copy_storage_ele(TSStorageEle *ele)
   return nele;
 }
 
-TSVirtIpAddrEle *
-copy_virt_ip_addr_ele(TSVirtIpAddrEle *ele)
-{
-  TSVirtIpAddrEle *new_ele;
-
-  if (!ele) {
-    return nullptr;
-  }
-
-  new_ele = TSVirtIpAddrEleCreate();
-  if (!new_ele) {
-    return nullptr;
-  }
-
-  // copy cfg ele
-  copy_cfg_ele(&(ele->cfg_ele), &(new_ele->cfg_ele));
-  new_ele->ip_addr  = ats_strdup(ele->ip_addr);
-  new_ele->intr     = ats_strdup(ele->intr);
-  new_ele->sub_intr = ele->sub_intr;
-
-  return new_ele;
-}
-
 INKCommentEle *
 copy_comment_ele(INKCommentEle *ele)
 {
diff --git a/mgmt/api/CfgContextUtils.h b/mgmt/api/CfgContextUtils.h
index f796f53..1c1ab55 100644
--- a/mgmt/api/CfgContextUtils.h
+++ b/mgmt/api/CfgContextUtils.h
@@ -184,7 +184,6 @@ TSRemapEle *copy_remap_ele(TSRemapEle *ele);
 TSSocksEle *copy_socks_ele(TSSocksEle *ele);
 TSSplitDnsEle *copy_split_dns_ele(TSSplitDnsEle *ele);
 TSStorageEle *copy_storage_ele(TSStorageEle *ele);
-TSVirtIpAddrEle *copy_virt_ip_addr_ele(TSVirtIpAddrEle *ele);
 INKCommentEle *copy_comment_ele(INKCommentEle *ele);
 
 /***************************************************************************
diff --git a/mgmt/api/EventControlMain.cc b/mgmt/api/EventControlMain.cc
index 645262f..9f3067f 100644
--- a/mgmt/api/EventControlMain.cc
+++ b/mgmt/api/EventControlMain.cc
@@ -540,7 +540,6 @@ static const event_message_handler handlers[] = {
   nullptr,                     // SNAPSHOT_GET_MLT
   nullptr,                     // DIAGS
   nullptr,                     // STATS_RESET_NODE
-  nullptr,                     // STATS_RESET_CLUSTER
   nullptr,                     // STORAGE_DEVICE_CMD_OFFLINE
   nullptr,                     // RECORD_MATCH_GET
   nullptr,                     // LIFECYCLE_MESSAGE
diff --git a/mgmt/api/GenericParser.cc b/mgmt/api/GenericParser.cc
index b0d8fdb..b49a048 100644
--- a/mgmt/api/GenericParser.cc
+++ b/mgmt/api/GenericParser.cc
@@ -220,8 +220,6 @@ Rule::parse(const char *const_rule, TSFileNameT filetype)
     return splitdnsParse(rule);
   case TS_FNAME_STORAGE: /* storage.config */
     return storageParse(rule);
-  case TS_FNAME_VADDRS: /* vaddrs.config */
-    return vaddrsParse(rule);
   default:
     return nullptr;
   }
@@ -780,31 +778,6 @@ Rule::updateParse(char *rule)
 }
 
 /**
- * vaddrsParse
- **/
-TokenList *
-Rule::vaddrsParse(char *rule)
-{
-  // ASSUMPTIONS:
-  //   UNIX: IP_address device subinterface
-  //   Win:  IP_address interface
-  Tokenizer ruleTok(" \t");
-  ruleTok.Initialize(rule);
-  tok_iter_state ruleTok_state;
-  const char *tokenStr = ruleTok.iterFirst(&ruleTok_state);
-  Token *token;
-  TokenList *m_tokenList = new TokenList();
-
-  for (; tokenStr; tokenStr = ruleTok.iterNext(&ruleTok_state)) {
-    token = new Token();
-    token->setName(tokenStr);
-    m_tokenList->enqueue(token);
-  }
-
-  return m_tokenList;
-}
-
-/**
  * storageParse
  * ------------
  * the token value is pathname; if a size is specified, that is stored as
@@ -923,8 +896,6 @@ RuleList::parse(char *fileBuf, const char *filename)
     m_filetype = TS_FNAME_SOCKS; /* socks.config */
   } else if (strstr(filename, "splitdns.config")) {
     m_filetype = TS_FNAME_SPLIT_DNS; /* splitdns.config */
-  } else if (strstr(filename, "vaddrs.config")) {
-    m_filetype = TS_FNAME_VADDRS; /* vaddrs.config */
   } else if (strstr(filename, "plugin.config")) {
     m_filetype = TS_FNAME_UNDEFINED; /* plugin.config */
   } else if (strstr(filename, "storage.config")) {
diff --git a/mgmt/api/GenericParser.h b/mgmt/api/GenericParser.h
index 6a1954d..2737a9b 100644
--- a/mgmt/api/GenericParser.h
+++ b/mgmt/api/GenericParser.h
@@ -211,7 +211,6 @@ private:
   TokenList *socksParse(char *rule);
   TokenList *splitdnsParse(char *rule);
   TokenList *updateParse(char *rule);
-  TokenList *vaddrsParse(char *rule);
   TokenList *arm_securityParse(char *rule);
   TokenList *hostingParse(char *rule);
   TokenList *ip_allowParse(char *rule);
diff --git a/mgmt/api/INKMgmtAPI.cc b/mgmt/api/INKMgmtAPI.cc
index 60566ee..7eac29d 100644
--- a/mgmt/api/INKMgmtAPI.cc
+++ b/mgmt/api/INKMgmtAPI.cc
@@ -902,9 +902,9 @@ TSCacheEleCreate(TSRuleTypeT type)
 {
   TSCacheEle *ele;
 
-  if (type != TS_CACHE_NEVER && type != TS_CACHE_IGNORE_NO_CACHE && type != TS_CACHE_CLUSTER_CACHE_LOCAL &&
-      type != TS_CACHE_IGNORE_CLIENT_NO_CACHE && type != TS_CACHE_IGNORE_SERVER_NO_CACHE && type != TS_CACHE_PIN_IN_CACHE &&
-      type != TS_CACHE_REVALIDATE && type != TS_CACHE_TTL_IN_CACHE && type != TS_CACHE_AUTH_CONTENT && type != TS_TYPE_UNDEFINED) {
+  if (type != TS_CACHE_NEVER && type != TS_CACHE_IGNORE_NO_CACHE && type != TS_CACHE_IGNORE_CLIENT_NO_CACHE &&
+      type != TS_CACHE_IGNORE_SERVER_NO_CACHE && type != TS_CACHE_PIN_IN_CACHE && type != TS_CACHE_REVALIDATE &&
+      type != TS_CACHE_TTL_IN_CACHE && type != TS_CACHE_AUTH_CONTENT && type != TS_TYPE_UNDEFINED) {
     return nullptr; // invalid type
   }
 
@@ -1306,33 +1306,6 @@ TSStorageEleDestroy(TSStorageEle *ele)
   return;
 }
 
-/*-------------------------------------------------------------
- * TSVirtIpAddrEle
- *-------------------------------------------------------------*/
-TSVirtIpAddrEle *
-TSVirtIpAddrEleCreate()
-{
-  TSVirtIpAddrEle *ele = (TSVirtIpAddrEle *)ats_malloc(sizeof(TSVirtIpAddrEle));
-
-  ele->cfg_ele.type  = TS_VADDRS;
-  ele->cfg_ele.error = TS_ERR_OKAY;
-  ele->intr          = nullptr;
-  ele->sub_intr      = -1;
-  ele->ip_addr       = TS_INVALID_IP_ADDR;
-
-  return ele;
-}
-
-void
-TSVirtIpAddrEleDestroy(TSVirtIpAddrEle *ele)
-{
-  if (ele) {
-    ats_free(ele->intr);
-    ats_free(ele->ip_addr);
-    ats_free(ele);
-  }
-}
-
 /***************************************************************************
  * API Core
  ***************************************************************************/
diff --git a/mgmt/api/NetworkMessage.cc b/mgmt/api/NetworkMessage.cc
index e9ed4a2..198bb4e 100644
--- a/mgmt/api/NetworkMessage.cc
+++ b/mgmt/api/NetworkMessage.cc
@@ -59,7 +59,6 @@ static const struct NetCmdOperation requests[] = {
   /* SNAPSHOT_REMOVE            */ {2, {MGMT_MARSHALL_INT, MGMT_MARSHALL_STRING}},
   /* SNAPSHOT_GET_MLT           */ {1, {MGMT_MARSHALL_INT}},
   /* STATS_RESET_NODE           */ {2, {MGMT_MARSHALL_INT, MGMT_MARSHALL_STRING}},
-  /* STATS_RESET_CLUSTER        */ {2, {MGMT_MARSHALL_INT, MGMT_MARSHALL_STRING}},
   /* STORAGE_DEVICE_CMD_OFFLINE */ {2, {MGMT_MARSHALL_INT, MGMT_MARSHALL_STRING}},
   /* RECORD_MATCH_GET           */ {2, {MGMT_MARSHALL_INT, MGMT_MARSHALL_STRING}},
   /* API_PING                   */ {2, {MGMT_MARSHALL_INT, MGMT_MARSHALL_INT}},
@@ -91,7 +90,6 @@ static const struct NetCmdOperation responses[] = {
   /* SNAPSHOT_REMOVE            */ {1, {MGMT_MARSHALL_INT}},
   /* SNAPSHOT_GET_MLT           */ {2, {MGMT_MARSHALL_INT, MGMT_MARSHALL_STRING}},
   /* STATS_RESET_NODE           */ {1, {MGMT_MARSHALL_INT}},
-  /* STATS_RESET_CLUSTER        */ {1, {MGMT_MARSHALL_INT}},
   /* STORAGE_DEVICE_CMD_OFFLINE */ {1, {MGMT_MARSHALL_INT}},
   /* RECORD_MATCH_GET           */
   {5, {MGMT_MARSHALL_INT, MGMT_MARSHALL_INT, MGMT_MARSHALL_INT, MGMT_MARSHALL_STRING, MGMT_MARSHALL_DATA}},
@@ -210,7 +208,6 @@ send_mgmt_error(int fd, OpType optype, TSMgmtError error)
   case OpType::SNAPSHOT_REMOVE:
   case OpType::SNAPSHOT_RESTORE:
   case OpType::SNAPSHOT_TAKE:
-  case OpType::STATS_RESET_CLUSTER:
   case OpType::STATS_RESET_NODE:
   case OpType::STORAGE_DEVICE_CMD_OFFLINE:
     ink_release_assert(responses[static_cast<unsigned>(optype)].nfields == 1);
diff --git a/mgmt/api/NetworkMessage.h b/mgmt/api/NetworkMessage.h
index 741c160..c8cb9fa 100644
--- a/mgmt/api/NetworkMessage.h
+++ b/mgmt/api/NetworkMessage.h
@@ -53,7 +53,6 @@ enum class OpType : MgmtMarshallInt {
   SNAPSHOT_REMOVE,
   SNAPSHOT_GET_MLT,
   STATS_RESET_NODE,
-  STATS_RESET_CLUSTER,
   STORAGE_DEVICE_CMD_OFFLINE,
   RECORD_MATCH_GET,
   API_PING,
diff --git a/mgmt/api/TSControlMain.cc b/mgmt/api/TSControlMain.cc
index f5d3269..6d59afc 100644
--- a/mgmt/api/TSControlMain.cc
+++ b/mgmt/api/TSControlMain.cc
@@ -1138,7 +1138,6 @@ static const control_message_handler handlers[] = {
   /* SNAPSHOT_REMOVE            */ {MGMT_API_PRIVILEGED, handle_snapshot},
   /* SNAPSHOT_GET_MLT           */ {0, handle_snapshot_get_mlt},
   /* STATS_RESET_NODE           */ {MGMT_API_PRIVILEGED, handle_stats_reset},
-  /* STATS_RESET_CLUSTER        */ {MGMT_API_PRIVILEGED, handle_stats_reset},
   /* STORAGE_DEVICE_CMD_OFFLINE */ {MGMT_API_PRIVILEGED, handle_storage_device_cmd_offline},
   /* RECORD_MATCH_GET           */ {0, handle_record_match},
   /* API_PING                   */ {0, handle_api_ping},
diff --git a/mgmt/api/include/mgmtapi.h b/mgmt/api/include/mgmtapi.h
index 09d08d9..a50ee77 100644
--- a/mgmt/api/include/mgmtapi.h
+++ b/mgmt/api/include/mgmtapi.h
@@ -283,7 +283,6 @@ typedef enum {
   TS_FNAME_SOCKS,           /* socks.config */
   TS_FNAME_SPLIT_DNS,       /* splitdns.config */
   TS_FNAME_STORAGE,         /* storage.config */
-  TS_FNAME_VADDRS,          /* vaddrs.config */
   TS_FNAME_VSCAN,           /* vscan.config */
   TS_FNAME_VS_TRUSTED_HOST, /* trusted-host.config */
   TS_FNAME_VS_EXTENSION,    /* extensions.config */
@@ -297,7 +296,6 @@ typedef enum {
 typedef enum {
   TS_CACHE_NEVER, /* cache.config */
   TS_CACHE_IGNORE_NO_CACHE,
-  TS_CACHE_CLUSTER_CACHE_LOCAL,
   TS_CACHE_IGNORE_CLIENT_NO_CACHE,
   TS_CACHE_IGNORE_SERVER_NO_CACHE,
   TS_CACHE_PIN_IN_CACHE,
@@ -321,7 +319,6 @@ typedef enum {
   TS_SOCKS_MULTIPLE,
   TS_SPLIT_DNS, /* splitdns.config */
   TS_STORAGE,   /* storage.config */
-  TS_VADDRS,    /* vaddrs.config */
   TS_TYPE_UNDEFINED,
   TS_TYPE_COMMENT /* for internal use only */
 } TSRuleTypeT;
@@ -334,9 +331,8 @@ typedef enum {
 } TSInitOptionT;
 
 typedef enum {
-  TS_RESTART_OPT_NONE    = 0x0,
-  TS_RESTART_OPT_CLUSTER = 0x01, /* Restart across the cluster */
-  TS_RESTART_OPT_DRAIN   = 0x02, /* Wait for traffic to drain before restarting. */
+  TS_RESTART_OPT_NONE  = 0x0,
+  TS_RESTART_OPT_DRAIN = 0x02, /* Wait for traffic to drain before restarting. */
 } TSRestartOptionT;
 
 /***************************************************************************
@@ -618,14 +614,6 @@ typedef struct {
   int size;       /* size of the named pathname (in bytes); optional if raw disk partitions */
 } TSStorageEle;
 
-/* vaddrs.config */
-typedef struct {
-  TSCfgEle cfg_ele;
-  TSIpAddr ip_addr; /* virtual ip address */
-  char *intr;       /* network interface name (hme0) */
-  int sub_intr;     /* the sub-interface number; must be between 1 and 255 */
-} TSVirtIpAddrEle;
-
 /* rmserver.cfg */
 typedef struct {
   TSCfgEle cfg_ele;
@@ -772,8 +760,6 @@ tsapi TSSplitDnsEle *TSSplitDnsEleCreate();
 tsapi void TSSplitDnsEleDestroy(TSSplitDnsEle *ele);
 tsapi TSStorageEle *TSStorageEleCreate();
 tsapi void TSStorageEleDestroy(TSStorageEle *ele);
-tsapi TSVirtIpAddrEle *TSVirtIpAddrEleCreate();
-tsapi void TSVirtIpAddrEleDestroy(TSVirtIpAddrEle *ele);
 /*--- Ele helper operations -------------------------------------*/
 
 /* TSIsValid: checks if the fields in the ele are all valid
diff --git a/proxy/Main.h b/proxy/Main.h
index b8a00a0..0a76129 100644
--- a/proxy/Main.h
+++ b/proxy/Main.h
@@ -53,13 +53,10 @@ extern int auto_clear_hostdb_flag;
 extern int auto_clear_cache_flag;
 extern int fds_limit;
 extern int debug_level;
-extern char cluster_host[MAXDNAME + 1];
-extern int cluster_port_number;
 
 extern int remote_management_flag;
 
 inkcoreapi extern int qt_accept_file_descriptor;
-inkcoreapi extern int cache_clustering_enabled;
 
 // Debugging Configuration
 extern char debug_host[MAXDNAME + 1];
diff --git a/proxy/README-stats.otl b/proxy/README-stats.otl
index 91a7bd3..8064834 100644
--- a/proxy/README-stats.otl
+++ b/proxy/README-stats.otl
@@ -144,8 +144,8 @@ consistency, coupling, clearing and persistence problems.
 Brian's Rant:
 -------------
 In any case, I want to change the stats system once to address all the issues
-of clearing, persistence, monotonicity, coupled computations, cluster
-aggregation, etc.  Let's be sure we all understand the design issues and do
+of clearing, persistence, monotonicity, coupled computations,
+etc.  Let's be sure we all understand the design issues and do
 the right thing one time.  We've gone through lots of band-aids in the past
 which got us nowhere, so let's get the design right.
 ---------------------------------------------------------------------------------
@@ -155,8 +155,7 @@ Issues:
 2) Persistence
 3) Monotonicity
 4) Coupled computations
-5) Cluster aggregation
-6) Inconsistencies between related stats
+5) Inconsistencies between related stats
 
 - Want to be able to clear stats
 - Do not want to see inconsistencies between stats
@@ -446,14 +445,6 @@ cache hit time
 
 Logging
 total  logging space used
-
-Cluster
-cluster network utilization %
-
-ICP
-total icp responses
-icp hit rate
-total icp requests
 ---------------------------------------------------------------------------------
 Subject: Re: Simple UI for TS100
 Date: Thu, 26 Mar 1998 11:48:15 -0800
diff --git a/proxy/TestProxy.cc b/proxy/TestProxy.cc
deleted file mode 100644
index bff558a..0000000
--- a/proxy/TestProxy.cc
+++ /dev/null
@@ -1,427 +0,0 @@
-/** @file
-
-  This file implements the functionality to test the Proxy
-
-  @section license License
-
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
- */
-#include <limits.h>
-#include "Net.h"
-#include "Disk.h"
-#include "Main.h"
-#include "HostDB.h"
-#include "Cluster.h"
-#include "OneWayTunnel.h"
-#include "OneWayMultiTunnel.h"
-#include "Cache.h"
-
-struct TestProxy : Continuation {
-  VConnection *vc;
-  VConnection *vconnection_vector[2];
-  VConnection *remote;
-  MIOBuffer *inbuf;
-  MIOBuffer *outbuf;
-  VIO *clusterOutVIO;
-  VIO *inVIO;
-  char host[1024], *url, *url_end, amode;
-  int port;
-  char s[1024];
-  ClusterVCToken token;
-  OneWayTunnel *tunnel;
-  char url_str[1024];
-  VConnection *cachefile;
-  URL *url_struct;
-  HostDBInfo *hostdbinfo;
-  CacheObjInfo *objinfo;
-  HttpHeader *request_header;
-
-  int
-  done()
-  {
-    ink_assert(inbuf);
-    if (inbuf)
-      free_MIOBuffer(inbuf);
-    inbuf = 0;
-    if (outbuf)
-      free_MIOBuffer(outbuf);
-    if (vc)
-      vc->do_io(VIO::CLOSE);
-    if (remote)
-      remote->do_io(VIO::CLOSE);
-    if (cachefile)
-      cachefile->do_io(VIO::CLOSE);
-    if (tunnel)
-      delete tunnel;
-    delete this;
-    return EVENT_DONE;
-  }
-
-  int
-  gets(VIO *vio)
-  {
-    char *sx = s, *x;
-    int t, i;
-    for (x = vio->buffer.mbuf->start; *x && x < vio->buffer.mbuf->end; x++) {
-      if (x - vio->buffer.mbuf->start > 1023)
-        return -1;
-      if (*x == '\n')
-        break;
-      *sx++ = *x;
-    }
-
-    t = 2;
-    for (i = 0; t && s[i]; i++) {
-      if (s[i] == ' ')
-        --t;
-    }
-
-    //    i = strrchr(s,' ');
-
-    if (s[i - 2] == 'X') {
-      i -= 2;
-      amode = 'x';
-      while (s[i] != '\0') {
-        s[i] = s[i + 1];
-        ++i;
-      }
-      return x - vio->buffer.mbuf->start - 1;
-    }
-    return x - vio->buffer.mbuf->start;
-  }
-
-  int
-  startEvent(int event, VIO *vio)
-  {
-    char *temp;
-    if (event != VC_EVENT_READ_READY) {
-      printf("TestProxy startEvent error %d %X\n", event, (unsigned int)vio->vc_server);
-      return done();
-    }
-    inVIO       = vio;
-    vc          = (NetVConnection *)vio->vc_server;
-    int res     = 0;
-    char *thost = NULL;
-    if ((res = gets(vio))) {
-      if (res < 0) {
-        printf("TestProxy startEvent line too long\n");
-        return done();
-      }
-      // for (int i = 0; i <= res; i++) fprintf(stderr,"[%c (%d)]\n",s[i],s[i]);
-      s[res] = 0;
-      if ((res > 0) && (s[res - 1] == '\r'))
-        s[res - 1] = 0;
-      // printf("got [%s]\n",s);
-      if (s[4] == '/') {
-        url      = s + 5;
-        url_end  = strchr(url, ' ');
-        *url_end = 0;
-        SET_HANDLER(fileEvent);
-        diskProcessor.open_vc(this, url, O_RDONLY);
-        return EVENT_DONE;
-      } else
-        thost = s + 11;             // GET http
-      url     = strchr(thost, '/'); // done before portStr stompage */
-      temp    = strchr(thost, ' ');
-      ink_assert(temp - thost < 1024);
-      ink_strlcpy(url_str, thost, sizeof(url_str));
-      if (!url)
-        return done();
-      char *portStr = strchr(thost, ':');
-      *url          = 0;
-      if (portStr == NULL) {
-        port = 80;
-        ink_strlcpy(host, thost, sizeof(host));
-      } else {
-        *portStr = '\0'; /* close off the hostname */
-        port     = atoi(portStr + 1);
-        ink_strlcpy(host, thost, sizeof(host));
-        *portStr = ':';
-      }
-      url_end = strchr(url + 1, ' ');
-      SET_HANDLER(dnsEvent);
-      *url = '/';
-      hostDBProcessor.getbyname(this, host);
-      return EVENT_DONE;
-    }
-    return EVENT_CONT;
-  }
-
-  int
-  clusterOpenEvent(int event, void *data)
-  {
-    if (event == CLUSTER_EVENT_OPEN_FAILED)
-      return done();
-    if (event == CLUSTER_EVENT_OPEN) {
-      if (!data)
-        return done();
-      remote        = (VConnection *)data;
-      clusterOutVIO = remote->do_io(VIO::WRITE, this, INT64_MAX, inbuf);
-      ink_assert(clusterOutVIO);
-      SET_HANDLER(tunnelEvent);
-      tunnel = new OneWayTunnel(remote, vc, this, TUNNEL_TILL_DONE, true, true, true);
-    }
-    return EVENT_CONT;
-  }
-
-  int
-  clusterEvent(int event, VConnection *data)
-  {
-    (void)event;
-    vc = data;
-    if (!vc)
-      return done();
-    SET_HANDLER(startEvent);
-    vc->do_io(VIO::READ, this, INT64_MAX, inbuf);
-    return EVENT_CONT;
-  }
-
-  int
-  fileEvent(int event, DiskVConnection *aremote)
-  {
-    if (event != DISK_EVENT_OPEN) {
-      printf("TestProxy fileEvent error %d\n", event);
-      return done();
-    }
-    remote = aremote;
-    SET_HANDLER(tunnelEvent);
-    tunnel = new OneWayTunnel(remote, vc, this, TUNNEL_TILL_DONE, true, true, true);
-    return EVENT_CONT;
-  }
-
-  int
-  dnsEvent(int event, HostDBInfo *info)
-  {
-    if (!info) {
-      printf("TestProxy dnsEvent error %d\n", event);
-      return done();
-    }
-    SET_HANDLER(cacheCheckEvent);
-    url_struct = new URL((const char *)url_str, sizeof(url_str), true);
-    hostdbinfo = info;
-    cacheProcessor.lookup(this, url_struct, false);
-    // SET_HANDLER(connectEvent);
-    // netProcessor.connect(this,info->ip,port,host);
-    return EVENT_DONE;
-  }
-
-  int
-  cacheCheckEvent(int event, void *data)
-  {
-    if (event == CACHE_EVENT_LOOKUP) {
-      if (amode == 'x') {
-        cout << "Removing object from the cache\n";
-        SET_HANDLER(NULL);
-        amode = 0;
-        cacheProcessor.remove(&(((CacheObjInfoVector *)data)->data[0]), false);
-        return done();
-      } else {
-        cout << "Serving the object from cache\n";
-        SET_HANDLER(cacheReadEvent);
-        cacheProcessor.open_read(this, &(((CacheObjInfoVector *)data)->data[0]), false);
-        return EVENT_CONT;
-      }
-    } else if (event == CACHE_EVENT_LOOKUP_FAILED) {
-      cout << "Getting the object from origin server\n";
-      SET_HANDLER(cacheCreateCacheFileEvent);
-      objinfo               = new CacheObjInfo;
-      request_header        = new HttpHeader;
-      request_header->m_url = *url_struct;
-      objinfo->request      = *request_header;
-      cacheProcessor.open_write(this, objinfo, false, CACHE_UNKNOWN_SIZE);
-      return EVENT_DONE;
-    } else {
-      printf("TestProxy cacheCheckEvent error %d\n", event);
-      return done();
-    }
-  }
-
-  int
-  cacheReadEvent(int event, DiskVConnection *aremote)
-  {
-    if (event != CACHE_EVENT_OPEN_READ) {
-      printf("TestProxy cacheReadEvent error %d\n", event);
-      return done();
-    }
-    remote = aremote;
-    SET_HANDLER(tunnelEvent);
-    new OneWayTunnel(remote, vc, this, TUNNEL_TILL_DONE, true, true, true);
-    return EVENT_CONT;
-  }
-  int
-  cacheCreateCacheFileEvent(int event, VConnection *acachefile)
-  {
-    if (event != CACHE_EVENT_OPEN_WRITE) {
-      printf("TestProxy cacheCreateCacheFileEvent error %d\n", event);
-      cachefile = 0;
-    } else
-      cachefile = acachefile;
-    SET_HANDLER(cacheSendGetEvent);
-    netProcessor.connect(this, hostdbinfo->ip, port, host);
-    return EVENT_CONT;
-  }
-  int
-  cacheSendGetEvent(int event, NetVConnection *aremote)
-  {
-    if (event != NET_EVENT_OPEN) {
-      printf("TestProxy cacheSendGetEvent error %d\n", event);
-      return done();
-    }
-    remote = aremote;
-    outbuf = new_MIOBuffer();
-    SET_HANDLER(cacheTransRemoteToCacheFileEvent);
-    // aremote->set_inactivity_timeout(HRTIME_MSECONDS(2000));
-    // aremote->set_active_timeout(HRTIME_MSECONDS(60000));
-    *url_end = 0;
-    sprintf(outbuf->start, "GET %s HTTP/1.0\nHost: %s\n\n", url, host);
-    outbuf->fill(strlen(outbuf->start) + 1);
-    remote->do_io(VIO::WRITE, this, INT64_MAX, outbuf);
-    // printf("sending [%s]\n",outbuf->start);
-    return EVENT_CONT;
-  }
-  int
-  cacheTransRemoteToCacheFileEvent(int event, VIO *vio)
-  {
-    if (event != VC_EVENT_WRITE_READY) {
-      printf("TestProxy cacheTransRemoteToCacheFileEvent error %d\n", event);
-      return done();
-    }
-    if (vio->buffer.size())
-      return EVENT_CONT;
-    SET_HANDLER(tunnelEvent);
-    vconnection_vector[0] = vc;
-    vconnection_vector[1] = cachefile;
-    {
-      int n     = cachefile ? 2 : 1;
-      cachefile = 0;
-      new OneWayMultiTunnel(remote, vconnection_vector, n, this, TUNNEL_TILL_DONE, true, true, true);
-    }
-    return EVENT_DONE;
-  }
-
-  int
-  connectEvent(int event, NetVConnection *aremote)
-  {
-    if (event != NET_EVENT_OPEN) {
-      printf("TestProxy connectEvent error %d\n", event);
-      return done();
-    }
-    remote = aremote;
-    outbuf = new_MIOBuffer();
-    SET_HANDLER(sendEvent);
-    *url_end = 0;
-    sprintf(outbuf->start, "GET %s HTTP/1.0\nHost: %s\n\n", url, host);
-    outbuf->fill(strlen(outbuf->start) + 1);
-    remote->do_io(VIO::WRITE, this, INT64_MAX, outbuf);
-    // printf("sending [%s]\n",outbuf->start);
-    return EVENT_CONT;
-  }
-
-  int
-  sendEvent(int event, VIO *vio)
-  {
-    if (event != VC_EVENT_WRITE_READY) {
-      printf("TestProxy sendEvent error %d\n", event);
-      return done();
-    }
-    if (vio->buffer.size())
-      return EVENT_CONT;
-    SET_HANDLER(tunnelEvent);
-    clusterOutVIO = (VIO *)-1; // some impossible value
-    if (((NetVConnectionBase *)vc)->closed) {
-      printf("TestProxy sendEvent unexpected close %X\n", (unsigned int)vc);
-      vc = 0;
-      return done();
-    }
-    tunnel = new OneWayTunnel(remote, vc, this, TUNNEL_TILL_DONE, true, true, true);
-    return EVENT_DONE;
-  }
-
-  int
-  tunnelEvent(int event, Continuation *cont)
-  {
-    (void)cont;
-    if ((VIO *)cont == clusterOutVIO || (VIO *)cont == inVIO) {
-      if (event == VC_EVENT_WRITE_COMPLETE)
-        return EVENT_DONE;
-      if (event == VC_EVENT_ERROR || event == VC_EVENT_EOS)
-        return EVENT_DONE;
-      return EVENT_CONT;
-    }
-    remote = 0;
-    vc     = 0;
-    if (event != VC_EVENT_EOS) {
-      printf("TestProxy sendEvent error %d\n", event);
-      return done();
-    }
-    // printf("successful proxy of %s\n",url);
-    return done();
-  }
-
-  TestProxy(MIOBuffer *abuf)
-    : Continuation(new_ProxyMutex()),
-      vc(0),
-      remote(0),
-      inbuf(abuf),
-      outbuf(0),
-      clusterOutVIO(0),
-      inVIO(0),
-      url(0),
-      url_end(0),
-      amode(0),
-      tunnel(0),
-      cachefile(0)
-  {
-    SET_HANDLER(startEvent);
-  }
-};
-
-struct TestAccept : Continuation {
-  int
-  startEvent(int event, NetVConnection *e)
-  {
-    if (event == NET_EVENT_ACCEPT) {
-      MIOBuffer *buf = new_MIOBuffer();
-      e->do_io(VIO::READ, new TestProxy(buf), INT64_MAX, buf);
-    } else {
-      printf("TestAccept error %d\n", event);
-      return EVENT_DONE;
-    }
-    return EVENT_CONT;
-  }
-  TestAccept() : Continuation(new_ProxyMutex()) { SET_HANDLER(startEvent); }
-};
-
-void
-redirect_test(Machine *m, void *data, int len)
-{
-  (void)m;
-  (void)len;
-  MIOBuffer *buf = new_MIOBuffer();
-  TestProxy *c   = new TestProxy(buf);
-  SET_CONTINUATION_HANDLER(c, clusterEvent);
-  clusterProcessor.connect(c, *(ClusterVCToken *)data);
-}
-
-#ifndef SUB_TEST
-void
-test()
-{
-  ptest_ClusterFunction = redirect_test;
-  netProcessor.proxy_accept(new TestAccept);
-}
-#endif
diff --git a/proxy/TimeTrace.h b/proxy/TimeTrace.h
index 40bc064..15ad8a3 100644
--- a/proxy/TimeTrace.h
+++ b/proxy/TimeTrace.h
@@ -60,9 +60,6 @@ extern int inmsg_events;
 
 extern int open_delay_time_dist[TIME_DIST_BUCKETS_SIZE];
 extern int open_delay_events;
-
-extern int cluster_send_time_dist[TIME_DIST_BUCKETS_SIZE];
-extern int cluster_send_events;
 #endif // ENABLE_TIME_TRACE
 
 #ifdef ENABLE_TIME_TRACE
diff --git a/proxy/api/ts/experimental.h b/proxy/api/ts/experimental.h
index c44fb4e..5181d88 100644
--- a/proxy/api/ts/experimental.h
+++ b/proxy/api/ts/experimental.h
@@ -344,149 +344,6 @@ tsapi TSReturnCode TSMgmtConfigIntSet(const char *var_name, TSMgmtInt value);
 #define TS_NET_EVENT_DATAGRAM_OPEN TS_EVENT_INTERNAL_211
 #define TS_NET_EVENT_DATAGRAM_ERROR TS_EVENT_INTERNAL_212
 
-/*****************************************************************************
- * 			Cluster RPC API support 			     *
- *****************************************************************************/
-/*
- *  Usage notes:
- *    1) User is responsible for marshalling and unmarshaling data.
- *    2) RPC message incompatiblities due to different plugin versions
- *	 must be dealt with by the user.
- *    3) Upon receipt of a machine offline, no guarantees are made about
- *	 messages sent prior to the machine offline.
- *    4) A node transitioning to the online state in an active cluster,
- *	 is assumed to have no prior knowledge of messages processed in
- *	 the past.
- *    5) Key point to reiterate, actions taken in the functions specified in
- *	 TSAddClusterStatusFunction() and TSAddClusterRPCFunction() must
- *       be non-blocking (i.e. usage of TSMutexLock() and file i/o is
- *       not allowed).
- *    6) TSSendClusterRPC() can only process TSClusterRPCMsg_t generated
- *	 by TSAllocClusterRPCMsg().  Failure to adhere to this rule will
- *	 result in heap corruption.
- *    7) Messages sent via TSSendClusterRPC() must be at least 4 bytes in
- * 	 length.
- *    8) The user is not provided with any alignment guarantees on the
- *	 'm_data' field in the TSClusterRPCMsg_t returned via
- *	 TSAllocClusterRPCMsg().  Assume byte alignment.
- *    9) TSSendClusterRPC() interface owns the memory and is responsible
- *       for freeing the memory.
- *   10) RPC functions defined via TSAddClusterRPCFunction() own the
- *       memory when invoked and are responsible for freeing it via
- *	 TSFreeRPCMsg().
- */
-#define MAX_CLUSTER_NODES 256
-
-typedef struct TSClusterRPCHandle {
-  int opaque[2];
-} TSClusterRPCHandle_t;
-
-typedef int TSClusterStatusHandle_t;
-typedef int TSNodeHandle_t;
-
-typedef struct TSClusterRPCMsg {
-  TSClusterRPCHandle_t m_handle;
-  char m_data[4];
-} TSClusterRPCMsg_t;
-
-typedef enum {
-  NODE_ONLINE = 1,
-  NODE_OFFLINE,
-} TSNodeStatus_t;
-
-typedef enum {
-  RPC_API_WIRELESS_F01 = 51,
-  RPC_API_WIRELESS_F02,
-  RPC_API_WIRELESS_F03,
-  RPC_API_WIRELESS_F04,
-  RPC_API_WIRELESS_F05,
-  RPC_API_WIRELESS_F06,
-  RPC_API_WIRELESS_F07,
-  RPC_API_WIRELESS_F08,
-  RPC_API_WIRELESS_F09,
-  RPC_API_WIRELESS_F10
-} TSClusterRPCKey_t;
-
-typedef void (*TSClusterRPCFunction)(TSNodeHandle_t *node, TSClusterRPCMsg_t *msg, int msg_data_len);
-typedef void (*TSClusterStatusFunction)(TSNodeHandle_t *node, TSNodeStatus_t s);
-
-/****************************************************************************
- *  Subscribe to node up/down status notification.     		    *
- *	Return == 0 Success						    *
- *	Return != 0 Failure						    *
- * contact: OXY, DY
- ****************************************************************************/
-tsapi int TSAddClusterStatusFunction(TSClusterStatusFunction Status_Function, TSMutex m, TSClusterStatusHandle_t *h);
-/****************************************************************************
- *  Cancel subscription to node up/down status notification. 		    *
- *	Return == 0 Success						    *
- *	Return != 0 Failure						    *
- * contact: OXY, DY
- ****************************************************************************/
-tsapi int TSDeleteClusterStatusFunction(TSClusterStatusHandle_t *h);
-
-/****************************************************************************
- *  Get the struct in_addr associated with the TSNodeHandle_t.	    *
- *	Return == 0 Success						    *
- *	Return != 0 Failure						    *
- * contact: OXY, DY
- ****************************************************************************/
-tsapi int TSNodeHandleToIPAddr(TSNodeHandle_t *h, struct in_addr *in);
-
-/****************************************************************************
- *  Get the TSNodeHandle_t for the local node.	    	    	    *
- *  contact: OXY, DY
- ****************************************************************************/
-tsapi void TSGetMyNodeHandle(TSNodeHandle_t *h);
-
-/****************************************************************************
- *  Enable node up/down notification for subscription added via 	    *
- *  TSAddClusterStatusFunction().					    *
- *  contact: OXY, DY
- ****************************************************************************/
-tsapi void TSEnableClusterStatusCallout(TSClusterStatusHandle_t *h);
-
-/****************************************************************************
- *  Associate the given key with the given RPC function.		    *
- *	Return == 0 Success						    *
- *	Return != 0 Failure						    *
- *  contact: OXY, DY
- ****************************************************************************/
-tsapi int TSAddClusterRPCFunction(TSClusterRPCKey_t k, TSClusterRPCFunction RPC_Function, TSClusterRPCHandle_t *h);
-
-/****************************************************************************
- *  Delete the key to function association created via 		    *
- *  TSAddClusterRPCFunction().					    *
- *	Return == 0 Success						    *
- *	Return != 0 Failure						    *
- *  contact: OXY, DY
- ****************************************************************************/
-tsapi int TSDeleteClusterRPCFunction(TSClusterRPCHandle_t *h);
-
-/****************************************************************************
- *  Free TSClusterRPCMsg_t received via RPC function		    	    *
- *  contact: OXY, DY
- ****************************************************************************/
-tsapi void TSFreeRPCMsg(TSClusterRPCMsg_t *msg, int msg_data_len);
-
-/****************************************************************************
- *  Allocate TSClusterRPCMsg_t for use in TSSendClusterRPC() 		    *
- *	Return != 0 Success						    *
- *	Return == 0 Allocation failed					    *
- *  contact: OXY, DY
- ****************************************************************************/
-tsapi TSClusterRPCMsg_t *TSAllocClusterRPCMsg(TSClusterRPCHandle_t *h, int data_size);
-
-/****************************************************************************
- *  Send the RPC message to the specified node.			    *
- *    Cluster frees the given memory on send.				    *
- *    RPC function frees memory on receive.				    *
- *	Return == 0 Success						    *
- *	Return != 0 Failure						    *
- *  contact: OXY, DY
- ****************************************************************************/
-tsapi int TSSendClusterRPC(TSNodeHandle_t *nh, TSClusterRPCMsg_t *msg);
-
 /**
  * Extended FetchSM's AIPs
  */
diff --git a/proxy/config/Makefile.am b/proxy/config/Makefile.am
index bcf31f5..c84c355 100644
--- a/proxy/config/Makefile.am
+++ b/proxy/config/Makefile.am
@@ -28,7 +28,6 @@ nodist_sysconf_DATA = \
 
 dist_sysconf_DATA =	\
   cache.config.default \
-  cluster.config.default \
   congestion.config.default \
   hosting.config.default \
   ip_allow.config.default \
@@ -41,7 +40,6 @@ dist_sysconf_DATA =	\
   socks.config.default \
   splitdns.config.default \
   ssl_multicert.config.default \
-  vaddrs.config.default \
   volume.config.default
 
 install-exec-hook:
diff --git a/proxy/config/cluster.config.default b/proxy/config/cluster.config.default
deleted file mode 100644
index a9962f8..0000000
--- a/proxy/config/cluster.config.default
+++ /dev/null
@@ -1,26 +0,0 @@
-# Cluster Configuration file
-#
-# This file is machine generated and machine parsed.
-# Please do not change this file by hand.
-#
-# This file designates the machines which make up the cluster
-# proper.  Data and load are distributed among these machines.
-#
-############################################################################
-# Number
-# IP:Port
-# ...
-############################################################################
-# Number = { 0, 1 ... } where 0 is a stand-alone proxy
-# IP:Port = IP address: cluster accept port number
-#
-# Example 1: stand-alone proxy
-# 0
-#
-# Example 2: 3 machines
-# 3
-# 127.1.2.3:83
-# 127.1.2.4:83
-# 127.1.2.5:83
-#
-0
diff --git a/proxy/config/metrics.config.default b/proxy/config/metrics.config.default
index fb07dd4..2c2c914 100644
--- a/proxy/config/metrics.config.default
+++ b/proxy/config/metrics.config.default
@@ -7,20 +7,6 @@
 -- These are called to set the initial value during XML parsing, so
 -- the net effect is to set the value to 'minimum. Since we always
 -- zero metrice on creation there's nothing to do there.
---
--- In the cluster-based statistics, the aggregation is further
--- divided into two types: sum and re-calculate. Sum refers calculating
--- the proxy.cluster.* variable by simply summing all required
--- proxy.node.* variables from nodes in the cluster. Re-calculate
--- refers to summing all proxy.nodes.* variables that are used in the
--- process of calculation before performing the calculation.  An analogy
--- would be, summing all open connection in the cluster vs. the average
--- hit rate in the cluster.
---
--- The "operation" attribute ends up in StatExprToken::m_sum_var. For "sum"
--- and default, m_sum_var is true. For "sum" operations, the cluster metric
--- don't evaluate expression, then just sum the associated node metric across
--- the cluster.
 
 -- Handling periodic updates.
 --
@@ -35,10 +21,6 @@
 
 -- Lua API.
 --
--- VALUE metrics.cluster.sum(METRIC)
---    Sum the named METRIC across the cluster. METRIC must be a string naming a node
---    metric since only node metrics are shared across the cluster.
---
 -- metrics.now.msec
 --    Wall-clock time in milliseconds.
 --
@@ -50,23 +32,12 @@
 --    registered metric will be periodically recalculated by evaluating the
 --    given function.
 --
---    The scope of a metric is derived from the name. 'proxy.cluster.*' metrics
---    are placed in CLUSTER scope and 'proxy.node.*' metrics are placed in NODE
---    scope.
---
 --    The name of the metric is passed to evaluation function on each invocation.
 --    This can be used to greate a unique key for persisting data in global tables.
 
 -- Multiplier to convert seconds to milliseconds
 sec_to_msec = 1000
 
--- Return the sum of the given metric across all cluster nodes. metrics.cluster.sum()
--- will memoize its result so that summing the same value multiple times in the same
--- metrics pass is not too expensive. The metric name should always be a node metric.
-function cluster(name)
-  return metrics.cluster.sum(name)
-end
-
 -- Convert bytes to megabits.
 function mbits(bytes)
   return bytes * 8 / 1000000
@@ -176,50 +147,26 @@ counter 'proxy.node.http.user_agents_total_documents_served' [[
   return proxy.process.http.incoming_requests
 ]]
 
-counter 'proxy.cluster.http.user_agents_total_documents_served' [[
-  return cluster('proxy.node.http.user_agents_total_documents_served')
-]]
-
 counter 'proxy.node.http.user_agents_total_transactions_count' [[
   return proxy.process.http.incoming_requests
 ]]
 
-counter 'proxy.cluster.http.user_agents_total_transactions_count' [[
-  return cluster('proxy.node.http.user_agents_total_transactions_count')
-]]
-
 counter 'proxy.node.http.origin_server_total_transactions_count' [[
   return proxy.process.http.outgoing_requests
 ]]
 
-counter 'proxy.cluster.http.origin_server_total_transactions_count' [[
-  return cluster('proxy.node.http.origin_server_total_transactions_count')
-]]
-
 counter 'proxy.node.http.cache_current_connections_count' [[
   return proxy.process.http.current_cache_connections
 ]]
 
-counter 'proxy.cluster.http.cache_current_connections_count' [[
-  return cluster('proxy.node.http.cache_current_connections_count')
-]]
-
 counter 'proxy.node.http.user_agent_current_connections_count' [[
   return proxy.process.http.current_client_connections
 ]]
 
-counter 'proxy.cluster.http.user_agent_current_connections_count' [[
-  return cluster('proxy.node.http.user_agent_current_connections_count')
-]]
-
 counter 'proxy.node.http.origin_server_current_connections_count' [[
   return proxy.process.http.current_server_connections
 ]]
 
-counter 'proxy.cluster.http.origin_server_current_connections_count' [[
-  return cluster('proxy.node.http.origin_server_current_connections_count')
-]]
-
 --
 -- Cache metrics.
 --
@@ -236,10 +183,6 @@ counter 'proxy.node.dns.total_dns_lookups' [[
   return proxy.process.dns.total_dns_lookups
 ]]
 
-counter 'proxy.cluster.dns.total_dns_lookups' [[
-  return cluster('proxy.node.dns.total_dns_lookups')
-]]
-
 --
 -- HostDB metrics.
 --
@@ -253,14 +196,6 @@ counter 'proxy.node.hostdb.total_hits' [[
 ]]
 
 --
--- Cluster metrics.
---
-
-integer 'proxy.node.cluster.nodes' [[
-  return proxy.process.cluster.nodes
-]]
-
---
 -- HTTP Cache.
 --
 
@@ -341,18 +276,10 @@ integer 'proxy.node.http.user_agent_xacts_per_second' [[
   )
 ]]
 
-integer 'proxy.cluster.http.user_agent_xacts_per_second' [[
-  return cluster('proxy.node.http.user_agent_xacts_per_second')
-]]
-
 integer 'proxy.node.user_agent_xacts_per_second' [[
   return proxy.node.http.user_agent_xacts_per_second
 ]]
 
-integer 'proxy.cluster.user_agent_xacts_per_second' [[
-  return cluster('proxy.cluster.http.user_agent_xacts_per_second')
-]]
-
 counter 'proxy.node.user_agents_total_documents_served' [[
   return proxy.node.http.user_agents_total_documents_served
 ]]
@@ -366,10 +293,6 @@ integer 'proxy.node.dns.lookups_per_second' [[
   )
 ]]
 
-integer 'proxy.cluster.dns.lookups_per_second' [[
-  return cluster('proxy.node.dns.lookups_per_second')
-]]
-
 -- StatAggregation::Ag_HostdbHitRate() -->
 integer 'proxy.node.hostdb.total_lookups_avg_10s' [[
   local self = ...
@@ -379,10 +302,6 @@ integer 'proxy.node.hostdb.total_lookups_avg_10s' [[
   end)
 ]]
 
-integer 'proxy.cluster.hostdb.total_lookups_avg_10s' [[
-  return cluster('proxy.node.hostdb.total_lookups_avg_10s')
-]]
-
 integer 'proxy.node.hostdb.total_hits_avg_10s' [[
   local self = ...
 
@@ -391,10 +310,6 @@ integer 'proxy.node.hostdb.total_hits_avg_10s' [[
   end)
 ]]
 
-integer 'proxy.cluster.hostdb.total_hits_avg_10s' [[
-  return cluster('proxy.node.hostdb.total_hits_avg_10s')
-]]
-
 float 'proxy.node.hostdb.hit_ratio_avg_10s' [[
   local self = ...
 
@@ -405,16 +320,6 @@ float 'proxy.node.hostdb.hit_ratio_avg_10s' [[
   end)
 ]]
 
-float 'proxy.cluster.hostdb.hit_ratio_avg_10s' [[
-  local self = ...
-
-  return interval_of_10s(self, function()
-    return
-      cluster('proxy.node.hostdb.total_hits_avg_10s')    /
-      cluster('proxy.node.hostdb.total_lookups_avg_10s')
-  end)
-]]
-
 float 'proxy.node.hostdb.hit_ratio' [[
   return proxy.process.hostdb.total_hits / proxy.process.hostdb.total_lookups
 ]]
@@ -424,45 +329,21 @@ counter 'proxy.node.http.user_agent_total_request_bytes' [[
     proxy.process.http.user_agent_request_header_total_size
 ]]
 
-counter 'proxy.cluster.http.user_agent_total_request_bytes' [[
-  return cluster('proxy.node.http.user_agent_total_request_bytes')
-]]
-
 counter 'proxy.node.http.user_agent_total_response_bytes' [[
   return proxy.process.http.user_agent_response_document_total_size +
     proxy.process.http.user_agent_response_header_total_size
 ]]
 
-counter 'proxy.cluster.http.user_agent_total_response_bytes' [[
-  return cluster('proxy.node.http.user_agent_total_response_bytes')
-]]
-
 counter 'proxy.node.http.origin_server_total_request_bytes' [[
   return proxy.process.http.origin_server_request_document_total_size +
     proxy.process.http.origin_server_request_header_total_size
 ]]
 
-counter 'proxy.cluster.http.origin_server_total_request_bytes' [[
-  return cluster('proxy.node.http.origin_server_total_request_bytes')
-]]
-
 counter 'proxy.node.http.origin_server_total_response_bytes' [[
   return proxy.process.http.origin_server_response_document_total_size +
     proxy.process.http.origin_server_response_header_total_size
 ]]
 
-counter 'proxy.cluster.http.origin_server_total_response_bytes' [[
-  return cluster('proxy.node.http.origin_server_total_response_bytes')
-]]
-
-counter 'proxy.node.http.parent_proxy_total_request_bytes' [[
-  return cluster('proxy.process.http.parent_proxy_request_total_bytes')
-]]
-
-counter 'proxy.node.http.parent_proxy_total_response_bytes' [[
-  return cluster('proxy.process.http.parent_proxy_response_total_bytes')
-]]
-
 -- Add up the downstream (client <-> proxy) traffic volume.
 counter 'proxy.node.user_agent_total_bytes' [[
   return proxy.node.http.user_agent_total_request_bytes +
@@ -482,11 +363,6 @@ float 'proxy.node.bandwidth_hit_ratio' [[
       / proxy.node.user_agent_total_bytes
 ]]
 
-float 'proxy.cluster.bandwidth_hit_ratio' [[
-  return (cluster('proxy.node.user_agent_total_bytes') - cluster('proxy.node.origin_server_total_bytes'))
-      / cluster('proxy.node.user_agent_total_bytes')
-]]
-
 float 'proxy.node.user_agent_total_bytes_avg_10s' [[
   local self = ...
 
@@ -495,10 +371,6 @@ float 'proxy.node.user_agent_total_bytes_avg_10s' [[
   end)
 ]]
 
-float 'proxy.cluster.user_agent_total_bytes_avg_10s' [[
-  return cluster('proxy.node.user_agent_total_bytes_avg_10s')
-]]
-
 float 'proxy.node.origin_server_total_bytes_avg_10s' [[
   local self = ...
 
@@ -507,10 +379,6 @@ float 'proxy.node.origin_server_total_bytes_avg_10s' [[
   end)
 ]]
 
-float 'proxy.cluster.origin_server_total_bytes_avg_10s' [[
-  return cluster('proxy.node.origin_server_total_bytes_avg_10s')
-]]
-
 float 'proxy.node.bandwidth_hit_ratio_avg_10s' [[
   local self = ...
 
@@ -522,13 +390,6 @@ float 'proxy.node.bandwidth_hit_ratio_avg_10s' [[
   end)
 ]]
 
-float 'proxy.cluster.bandwidth_hit_ratio_avg_10s' [[
-  return (
-    cluster('proxy.node.user_agent_total_bytes_avg_10s') -
-    cluster('proxy.node.origin_server_total_bytes_avg_10s')
-  ) / cluster('proxy.node.user_agent_total_bytes_avg_10s')
-]]
-
 -- StatAggregation::Ag_Throughput()
 integer 'proxy.node.http.throughput' [[
   local self = ...
@@ -538,18 +399,10 @@ integer 'proxy.node.http.throughput' [[
   )
 ]]
 
-integer 'proxy.cluster.http.throughput' [[
-  return cluster('proxy.cluster.http.throughput')
-]]
-
 float 'proxy.node.client_throughput_out' [[
   return mbits(proxy.node.http.throughput)
 ]]
 
-float 'proxy.cluster.client_throughput_out' [[
-  return cluster('proxy.node.client_throughput_out')
-]]
-
 -- StatAggregation::Ag_cacheHits()
 float 'proxy.node.http.cache_hit_fresh_avg_10s' [[
   local self = ...
@@ -639,18 +492,10 @@ float 'proxy.node.cache_total_hits_avg_10s' [[
     proxy.node.http.cache_hit_stale_served_avg_10s
 ]]
 
-float 'proxy.cluster.cache_total_hits_avg_10s' [[
-  return cluster('proxy.node.cache_total_hits_avg_10s')
-]]
-
 float 'proxy.node.cache_total_hits_mem_avg_10s' [[
   return proxy.node.http.cache_hit_mem_fresh_avg_10s
 ]]
 
-float 'proxy.cluster.cache_total_hits_mem_avg_10s' [[
-  return cluster('proxy.node.cache_total_hits_mem_avg_10s')
-]]
-
 float 'proxy.node.cache_total_misses_avg_10s' [[
   return
     proxy.node.http.cache_miss_cold_avg_10s            +
@@ -660,10 +505,6 @@ float 'proxy.node.cache_total_misses_avg_10s' [[
     proxy.node.http.cache_read_error_avg_10s
 ]]
 
-float 'proxy.cluster.cache_total_misses_avg_10s' [[
-  return cluster('proxy.node.cache_total_misses_avg_10s')
-]]
-
 float 'proxy.node.cache_hit_ratio_avg_10s' [[
   return
     proxy.node.cache_total_hits_avg_10s   /
@@ -673,15 +514,6 @@ float 'proxy.node.cache_hit_ratio_avg_10s' [[
     )
 ]]
 
-float 'proxy.cluster.cache_hit_ratio_avg_10s' [[
-  return
-    cluster('proxy.node.cache_total_hits_avg_10s')   /
-    (
-    cluster('proxy.node.cache_total_hits_avg_10s')   +
-    cluster('proxy.node.cache_total_misses_avg_10s')
-    )
-]]
-
 float 'proxy.node.cache_hit_mem_ratio_avg_10s' [[
   return
     proxy.node.cache_total_hits_mem_avg_10s   /
@@ -691,15 +523,6 @@ float 'proxy.node.cache_hit_mem_ratio_avg_10s' [[
     )
 ]]
 
-float 'proxy.cluster.cache_hit_mem_ratio_avg_10s' [[
-  return
-    cluster('proxy.node.cache_total_hits_mem_avg_10s')   /
-    (
-    cluster('proxy.node.cache_total_hits_avg_10s')   +
-    cluster('proxy.node.cache_total_misses_avg_10s')
-    )
-]]
-
 counter 'proxy.node.cache_total_hits' [[
   return proxy.process.http.cache_hit_fresh +
     proxy.process.http.cache_hit_revalidated +
@@ -707,18 +530,10 @@ counter 'proxy.node.cache_total_hits' [[
     proxy.process.http.cache_hit_stale_served
 ]]
 
-counter 'proxy.cluster.cache_total_hits' [[
-  return cluster('proxy.node.cache_total_hits')
-]]
-
 counter 'proxy.node.cache_total_hits_mem' [[
   return proxy.process.http.cache_hit_mem_fresh
 ]]
 
-counter 'proxy.cluster.cache_total_hits_mem' [[
-  return cluster('proxy.node.cache_total_hits_mem')
-]]
-
 counter 'proxy.node.cache_total_misses' [[
   return
     proxy.process.http.cache_miss_cold            +
@@ -728,15 +543,6 @@ counter 'proxy.node.cache_total_misses' [[
     proxy.process.http.cache_read_error
 ]]
 
-counter 'proxy.cluster.cache_total_misses' [[
-  return
-    cluster('proxy.node.http.cache_miss_cold')            +
-    cluster('proxy.node.http.cache_miss_changed')         +
-    cluster('proxy.node.http.cache_miss_client_no_cache') +
-    cluster('proxy.node.http.cache_miss_ims')             +
-    cluster('proxy.node.http.cache_read_error')
-]]
-
 float 'proxy.node.cache_hit_ratio' [[
   return
     proxy.node.cache_total_hits   /
@@ -746,15 +552,6 @@ float 'proxy.node.cache_hit_ratio' [[
     )
 ]]
 
-float 'proxy.cluster.cache_hit_ratio' [[
-  return
-    cluster('proxy.node.cache_total_hits')   /
-    (
-      cluster('proxy.node.cache_total_hits')   +
-      cluster('proxy.node.cache_total_misses')
-    )
-]]
-
 float 'proxy.node.cache_hit_mem_ratio' [[
   return
     proxy.node.cache_total_hits_mem   /
@@ -764,15 +561,6 @@ float 'proxy.node.cache_hit_mem_ratio' [[
     )
 ]]
 
-float 'proxy.cluster.cache_hit_mem_ratio' [[
-  return
-    cluster('proxy.node.cache_total_hits_mem')   /
-    (
-    cluster('proxy.node.cache_total_hits')   +
-    cluster('proxy.node.cache_total_misses')
-    )
-]]
-
 -- StatAggregation::Ag_cachePercent().
 integer 'proxy.node.cache.bytes_free' [[
   return
@@ -786,12 +574,6 @@ float 'proxy.node.cache.percent_free' [[
     proxy.process.cache.bytes_total
 ]]
 
-float 'proxy.cluster.cache.percent_free' [[
-  return
-    cluster('proxy.node.cache.bytes_free') /
-    cluster('proxy.node.cache.bytes_total')
-]]
-
 -- StatAggregation::Ag_TransactionPercentsAndMeanTimes()
 
 integer 'proxy.node.http.transaction_counts_avg_10s.hit_fresh' [[
@@ -1351,42 +1133,22 @@ integer 'proxy.node.current_client_connections' [[
   return proxy.node.http.user_agent_current_connections_count
 ]]
 
-integer 'proxy.cluster.current_client_connections' [[
-  return cluster('proxy.node.current_client_connections')
-]]
-
 integer 'proxy.node.current_server_connections' [[
   return
     proxy.node.http.origin_server_current_connections_count +
     proxy.node.http.current_parent_proxy_connections
 ]]
 
-integer 'proxy.cluster.current_server_connections' [[
-  return cluster('proxy.node.current_server_connections')
-]]
-
 integer 'proxy.node.current_cache_connections' [[
   return
     proxy.node.http.cache_current_connections_count
 ]]
 
-integer 'proxy.cluster.current_cache_connections' [[
-  return cluster('proxy.node.current_cache_connections')
-]]
-
 integer 'proxy.node.client_throughput_out_kbit' [[
   -- Convert Mbit/sec to Kbit/sec.
   return proxy.node.client_throughput_out * 1000
 ]]
 
-integer 'proxy.cluster.client_throughput_out_kbit' [[
-  return cluster('proxy.node.client_throughput_out_kbit')
-]]
-
-float 'proxy.cluster.hostdb.hit_ratio' [[
-  return cluster('proxy.node.hostdb.hit_ratio')
-]]
-
 integer 'proxy.node.cache.bytes_total_mb' [[
   return mbytes(proxy.process.cache.bytes_total)
 ]]
@@ -1395,171 +1157,83 @@ integer 'proxy.node.cache.bytes_free_mb' [[
   return mbytes(proxy.node.cache.bytes_free)
 ]]
 
-integer 'proxy.cluster.cache.bytes_free' [[
-  return cluster('proxy.cluster.cache.bytes_free')
-]]
-
-integer 'proxy.cluster.cache.bytes_free_mb' [[
-  return mbytes(proxy.cluster.cache.bytes_free)
-]]
-
 integer 'proxy.node.http.current_parent_proxy_connections' [[
   return proxy.process.http.current_parent_proxy_connections
 ]]
 
-integer 'proxy.cluster.http.current_parent_proxy_connections' [[
-  return cluster('proxy.node.http.current_parent_proxy_connections')
-]]
-
-counter 'proxy.cluster.http.parent_proxy_total_request_bytes' [[
-  return cluster('proxy.node.http.parent_proxy_total_request_bytes')
-]]
-
-counter 'proxy.cluster.http.parent_proxy_total_response_bytes' [[
-  return cluster('proxy.node.http.parent_proxy_total_response_bytes')
-]]
-
 -- Logging.
 counter 'proxy.node.log.event_log_access_ok' [[
   return proxy.process.log.event_log_access_ok
 ]]
 
-counter 'proxy.cluster.log.event_log_access_ok' [[
-  return cluster('proxy.node.log.event_log_access_ok')
-]]
-
 counter 'proxy.node.log.event_log_access_skip' [[
   return proxy.process.log.event_log_access_skip
 ]]
 
-counter 'proxy.cluster.log.event_log_access_skip' [[
-  return cluster('proxy.node.log.event_log_access_skip')
-]]
-
 counter 'proxy.node.log.event_log_access_aggr' [[
   return proxy.process.log.event_log_access_aggr
 ]]
 
-counter 'proxy.cluster.log.event_log_access_aggr' [[
-  return cluster('proxy.node.log.event_log_access_aggr')
-]]
-
 counter 'proxy.node.log.event_log_access_full' [[
   return proxy.process.log.event_log_access_full
 ]]
 
-counter 'proxy.cluster.log.event_log_access_full' [[
-  return cluster('proxy.node.log.event_log_access_full')
-]]
-
 counter 'proxy.node.log.event_log_access_fail' [[
   return proxy.process.log.event_log_access_fail
 ]]
 
-counter 'proxy.cluster.log.event_log_access_fail' [[
-  return cluster('proxy.node.log.event_log_access_fail')
-]]
-
 counter 'proxy.node.log.num_lost_before_sent_to_network' [[
   return proxy.process.log.num_lost_before_sent_to_network
 ]]
 
-counter 'proxy.cluster.log.num_lost_before_sent_to_network' [[
-  return cluster('proxy.node.log.num_lost_before_sent_to_network')
-]]
-
 counter 'proxy.node.log.num_sent_to_network' [[
   return proxy.process.log.num_sent_to_network
 ]]
 
-counter 'proxy.cluster.log.num_sent_to_network' [[
-  return cluster('proxy.node.log.num_sent_to_network')
-]]
-
 counter 'proxy.node.log.bytes_lost_before_sent_to_network' [[
   return proxy.process.log.bytes_lost_before_sent_to_network
 ]]
 
-counter 'proxy.cluster.log.bytes_lost_before_sent_to_network' [[
-  return cluster('proxy.node.log.bytes_lost_before_sent_to_network')
-]]
-
 counter 'proxy.node.log.bytes_sent_to_network' [[
   return proxy.process.log.bytes_sent_to_network
 ]]
 
-counter 'proxy.cluster.log.bytes_sent_to_network' [[
-  return cluster('proxy.node.log.bytes_sent_to_network')
-]]
-
 counter 'proxy.node.log.num_received_from_network' [[
   return proxy.process.log.num_received_from_network
 ]]
 
-counter 'proxy.cluster.log.num_received_from_network' [[
-  return cluster('proxy.node.log.num_received_from_network')
-]]
-
 counter 'proxy.node.log.bytes_received_from_network' [[
   return proxy.process.log.bytes_received_from_network
 ]]
 
-counter 'proxy.cluster.log.bytes_received_from_network' [[
-  return cluster('proxy.node.log.bytes_received_from_network')
-]]
-
 counter 'proxy.node.log.bytes_lost_before_preproc' [[
   return proxy.process.log.bytes_lost_before_preproc
 ]]
 
-counter 'proxy.cluster.log.bytes_lost_before_preproc' [[
-  return cluster('proxy.node.log.bytes_lost_before_preproc')
-]]
-
 counter 'proxy.node.log.num_lost_before_flush_to_disk' [[
   return proxy.process.log.num_lost_before_flush_to_disk
 ]]
 
-counter 'proxy.cluster.log.num_lost_before_flush_to_disk' [[
-  return cluster('proxy.node.log.bytes_lost_before_preproc')
-]]
-
 counter 'proxy.node.log.bytes_lost_before_flush_to_disk' [[
   return proxy.process.log.bytes_lost_before_flush_to_disk
 ]]
 
-counter 'proxy.cluster.log.bytes_lost_before_flush_to_disk' [[
-  return cluster('proxy.node.log.bytes_lost_before_preproc')
-]]
-
 counter 'proxy.node.log.bytes_lost_before_written_to_disk' [[
   return proxy.process.log.bytes_lost_before_written_to_disk
 ]]
 
-counter 'proxy.cluster.log.bytes_lost_before_written_to_disk' [[
-  return cluster('proxy.node.log.bytes_lost_before_written_to_disk')
-]]
-
 integer 'proxy.node.log.bytes_sent_to_network_avg_10s' [[
   return interval_delta_of_10s(..., function()
     return proxy.process.log.bytes_sent_to_network
   end)
 ]]
 
-integer 'proxy.cluster.log.bytes_sent_to_network_avg_10s' [[
-  return cluster('proxy.node.log.bytes_sent_to_network_avg_10s')
-]]
-
 integer 'proxy.node.log.bytes_received_from_network_avg_10s' [[
   return interval_delta_of_10s(..., function()
     return proxy.process.log.bytes_received_from_network
   end)
 ]]
 
-integer 'proxy.cluster.log.bytes_received_from_network_avg_10s' [[
-  return cluster('proxy.node.log.bytes_received_from_network_avg_10s')
-]]
-
 counter 'proxy.process.ssl.total_success_handshake_count' [[
   return proxy.process.ssl.total_success_handshake_count_in
 ]]
diff --git a/proxy/config/vaddrs.config.default b/proxy/config/vaddrs.config.default
deleted file mode 100644
index 01233a8..0000000
--- a/proxy/config/vaddrs.config.default
+++ /dev/null
@@ -1,22 +0,0 @@
-# Virtual IP Address Configuration
-#
-# The purpose of this file is to specify virtual IP addresses
-# for Traffic Server. This DOES NOT actually bind to these
-# addresses; ATS either listens to all or the address specified
-# through proxy.local.incoming_ip_to_bind.
-#
-# The vips specified here will be verified and broadcast across
-# the cluster. Any conflicts will be logged as errors.
-#
-# In order to enable these checks you must also set:
-#     CONFIG proxy.config.vmap.enabled INT 1
-# In records.conf
-#
-# UNIX
-#   Format:
-#     <virtual IP address> <interface> <sub-interface>
-#
-#   Example:
-#     209.1.33.10 hme0 10
-#     209.1.33.11 hme0 11
-#
diff --git a/proxy/http/HttpTransact.h b/proxy/http/HttpTransact.h
index 5f457bd..809348c 100644
--- a/proxy/http/HttpTransact.h
+++ b/proxy/http/HttpTransact.h
@@ -198,7 +198,6 @@ enum ViaString_t {
   // cache type
   VIA_DETAIL_CACHE_DESCRIPTOR_STRING = 'c',
   VIA_DETAIL_CACHE                   = 'C',
-  VIA_DETAIL_CLUSTER                 = 'L',
   VIA_DETAIL_ICP                     = 'I',
   VIA_DETAIL_PARENT                  = 'P',
   VIA_DETAIL_SERVER                  = 'S',
diff --git a/proxy/http/README.via b/proxy/http/README.via
index 48860aa..ec635b4 100644
--- a/proxy/http/README.via
+++ b/proxy/http/README.via
@@ -61,7 +61,6 @@
 
       cache type
          C    cache
-         L    cluster (not used)
          I    icp
 
       cache lookup result
diff --git a/proxy/http/TestHttpTransact.cc b/proxy/http/TestHttpTransact.cc
deleted file mode 100644
index 10216ec..0000000
--- a/proxy/http/TestHttpTransact.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-/** @file
-
-  A brief file description
-
-  @section license License
-
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
- */
-
-#include "HttpNet.h"
-#include <iostream.h>
-#include "ts/ink_assert.h"
-#include "DebugStream.h"
-#include "IOBuffer.h"
-#include "Main.h"
-#include "Event.h"
-#include "ProtectedQueue.h"
-#include "Cluster.h"
-#include "HttpConfig.h"
-#include "HttpTransact.h"
-
-HttpNetProcessor httpNetProcessor;
-HttpConfigParams httpConfigParams;
-DebugStream debug_out("debug.txt", 1, 1, "DebugStreamLevels.txt", "http.stops");
-
-typedef struct {
-  char *accept;
-  char *field;
-} AcceptPair;
-
-void
-test()
-{
-  float q;
-
-  ///// Accept /////
-
-  static AcceptPair a1[] = {{"*", "text/html"}, {"image/gif, *; q=.9, text/*; q=.2", "text/html"}, {NULL, NULL}};
-
-  fprintf(stderr, "\n*** Testing Accept matching ***\n");
-  for (int i = 0; a1[i].accept; i++) {
-    q = HttpTransact::CalcQualityOfAcceptMatch(a1[i].accept, a1[i].field);
-    fprintf(stderr, "Accept(\"%s\",\"%s\") ==> %g\n", a1[i].accept, a1[i].field, q);
-  }
-
-  ///// Accept-Charset /////
-
-  static AcceptPair a2[] = {{"*", "us-ascii"}, {NULL, NULL}};
-
-  fprintf(stderr, "\n*** Testing Accept-Charset matching ***\n");
-  for (int i = 0; a2[i].accept; i++) {
-    q = HttpTransact::CalcQualityOfAcceptCharsetMatch(a2[i].accept, a2[i].field);
-    fprintf(stderr, "Accept-Charset(\"%s\",\"%s\") ==> %g\n", a2[i].accept, a2[i].field, q);
-  }
-
-  ///// Accept-Encoding /////
-
-  static AcceptPair a3[] = {{"*", "gzip"}, {NULL, NULL}};
-
-  fprintf(stderr, "\n*** Testing Accept-Encoding matching ***\n");
-  for (int i = 0; a3[i].accept; i++) {
-    q = HttpTransact::CalcQualityOfAcceptEncodingMatch(a3[i].accept, a3[i].field);
-    fprintf(stderr, "Accept-Encoding(\"%s\",\"%s\") ==> %g\n", a3[i].accept, a3[i].field, q);
-  }
-
-  ///// Accept-Language /////
-
-  static AcceptPair a4[] = {{"*", "en"},
-                            {"*", ""},
-                            {"fr, en", "en-ebonics"},
-                            {"fr, en-ebonics", "en-ebonics"},
-                            {"fr, *;q=.314, en-ebonics", "en-boston"},
-                            {"fr, *;q=.314, en-ebonics", "en-ebonics-oakland"},
-                            {NULL, NULL}};
-
-  fprintf(stderr, "\n*** Testing Accept-Language matching ***\n");
-  for (int i = 0; a4[i].accept; i++) {
-    q = HttpTransact::CalcQualityOfAcceptLanguageMatch(a4[i].accept, a4[i].field);
-    fprintf(stderr, "Accept-Language(\"%s\",\"%s\") ==> %g\n", a4[i].accept, a4[i].field, q);
-  }
-}
diff --git a/proxy/logging/Log.cc b/proxy/logging/Log.cc
index c8e83f3..0f8c26b 100644
--- a/proxy/logging/Log.cc
+++ b/proxy/logging/Log.cc
@@ -1386,7 +1386,7 @@ Log::collate_thread_main(void * /* args ATS_UNUSED */)
     // host to account for a reconfiguration.
     //
     Debug("log-sock", "collation thread starting, creating LogSock");
-    sock = new LogSock(LogSock::LS_CONST_CLUSTER_MAX_MACHINES);
+    sock = new LogSock(LogSock::LS_CONST_MAX_CONNS);
     ink_assert(sock != nullptr);
 
     if (sock->listen(Log::config->collation_port) != 0) {
diff --git a/proxy/logging/LogSock.cc b/proxy/logging/LogSock.cc
index 27e574a..790c03f 100644
--- a/proxy/logging/LogSock.cc
+++ b/proxy/logging/LogSock.cc
@@ -288,10 +288,10 @@ bool
 LogSock::pending_data(int *cid, int timeout_msec, bool include_connects)
 {
   int start_index, ret, n_poll_fds, i;
-  static struct pollfd fds[LS_CONST_CLUSTER_MAX_MACHINES];
-  int fd_to_cid[LS_CONST_CLUSTER_MAX_MACHINES];
+  static struct pollfd fds[LS_CONST_MAX_CONNS];
+  int fd_to_cid[LS_CONST_MAX_CONNS];
 
-  ink_assert(m_max_connections <= (LS_CONST_CLUSTER_MAX_MACHINES + 1));
+  ink_assert(m_max_connections <= (LS_CONST_MAX_CONNS + 1));
   ink_assert(cid != nullptr);
   ink_assert(timeout_msec >= 0);
 
diff --git a/proxy/logging/LogSock.h b/proxy/logging/LogSock.h
index e92d1b6..6f1a76c 100644
--- a/proxy/logging/LogSock.h
+++ b/proxy/logging/LogSock.h
@@ -37,8 +37,8 @@ class LogSock
 {
 public:
   enum Constant {
-    LS_CONST_PACKETSIZE           = 1024,
-    LS_CONST_CLUSTER_MAX_MACHINES = 256,
+    LS_CONST_PACKETSIZE = 1024,
+    LS_CONST_MAX_CONNS  = 256,
   };
 
   enum Err {
diff --git a/tests/getting_started.md b/tests/getting_started.md
index 3d36a9d..386268e 100644
--- a/tests/getting_started.md
+++ b/tests/getting_started.md
@@ -96,7 +96,6 @@ A number of file object are define to help with adding values to a given configu
  * splitdns.config
  * ssl_multicert.config
  * storage.config
- * vaddrs.config
  * volume.config
 
 #### Examples
diff --git a/tests/gold_tests/autest-site/trafficserver.test.ext b/tests/gold_tests/autest-site/trafficserver.test.ext
index 495f164..1f5a05d 100644
--- a/tests/gold_tests/autest-site/trafficserver.test.ext
+++ b/tests/gold_tests/autest-site/trafficserver.test.ext
@@ -229,10 +229,6 @@ def MakeATSProcess(obj, name, command='traffic_server', select_ports=True):
     tmpname = os.path.join(config_dir, fname)
     p.Disk.File(tmpname, id=make_id(fname), typename="ats:config")
 
-    fname = "vaddrs.config"
-    tmpname = os.path.join(config_dir, fname)
-    p.Disk.File(tmpname, id=make_id(fname), typename="ats:config")
-
     fname = "volume.config"
     tmpname = os.path.join(config_dir, fname)
     p.Disk.File(tmpname, id=make_id(fname), typename="ats:config")
diff --git a/tools/traffic_shell.pl b/tools/traffic_shell.pl
index 5054d27..1c31357 100755
--- a/tools/traffic_shell.pl
+++ b/tools/traffic_shell.pl
@@ -218,21 +218,6 @@ __EOL
 }
 
 
-# Command: show:cluster
-#
-sub show_cluster {
-  my $cluster = get_int("proxy.config.cluster.cluster_port");
-  my $cluster_rs = get_int("proxy.config.cluster.rsport");
-  my $cluster_mc = get_int("proxy.config.cluster.mcport");
-
-  print <<__EOF
-Cluster Port ----------- $cluster
-Cluster RS Port -------- $cluster_rs
-Cluster MC Port -------- $cluster_mc
-__EOF
-}
-
-
 # Command: show:dns-resolver
 #
 sub show_dns_resolver {
@@ -661,7 +646,6 @@ Usage: traffic_shell <command> [argument]
 
    show:cache [rules | storage]
    show:cache-stats
-   show:cluster
    show:dns-resolver
    show:dns-stats
    show:hostdb
@@ -693,7 +677,6 @@ __EOF
 my %COMMANDS = ( "show:alarms", \&show_alarms,
                  "show:cache", \&show_cache,
                 "show:cache-stats", \&show_cache_stats,
-                "show:cluster",  \&show_cluster,
                 "show:dns-resolver", \&show_dns_resolver,
                 "show:dns-stats", \&show_dns_stats,
                 "show:hostdb", \&show_hostdb,

-- 
To stop receiving notification emails like this one, please contact
['"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>'].