You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2019/07/22 14:38:53 UTC

[trafficserver] 01/07: Removes the balancer plugin. See #5395

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

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

commit 28c4840ec2cea5f59f85187043a98b3743357309
Author: Leif Hedstrom <zw...@apache.org>
AuthorDate: Fri Jul 19 13:28:16 2019 -0600

    Removes the balancer plugin. See #5395
---
 doc/admin-guide/plugins/balancer.en.rst            |  87 --------
 doc/admin-guide/plugins/index.en.rst               |   4 -
 .../ja/LC_MESSAGES/admin-guide/introduction.en.po  |   9 -
 .../LC_MESSAGES/admin-guide/plugins/balancer.en.po | 134 ------------
 .../ja/LC_MESSAGES/admin-guide/plugins/index.en.po |   4 -
 plugins/Makefile.am                                |   1 -
 plugins/experimental/balancer/Makefile.inc         |  23 ---
 plugins/experimental/balancer/balancer.cc          | 196 ------------------
 plugins/experimental/balancer/balancer.h           |  50 -----
 plugins/experimental/balancer/hash.cc              | 230 ---------------------
 plugins/experimental/balancer/roundrobin.cc        |  72 -------
 .../gold_tests/pluginTest/url_sig/url_sig.test.py  |  26 +--
 12 files changed, 13 insertions(+), 823 deletions(-)

diff --git a/doc/admin-guide/plugins/balancer.en.rst b/doc/admin-guide/plugins/balancer.en.rst
deleted file mode 100644
index 8283c38..0000000
--- a/doc/admin-guide/plugins/balancer.en.rst
+++ /dev/null
@@ -1,87 +0,0 @@
-.. _admin-plugins-balancer:
-
-Balancer Plugin
-***************
-
-.. 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.
-
-.. note::
-
-  All of the the features in this plugin (and more) are found in
-  :file:`parent.config`. As a result, this plugin is likely to be deprecated.
-
-The ``balancer`` balances requests across multiple origin servers.
-To use this plugin, configure it in a :file:`remap.config` rule, specifying
-a balancing policy and a set of origin servers. For example::
-
-   map http://foo.com http://foo.com \
-      @plugin=balancer.so @pparam=--policy=hash,url @pparam=one.bar.com @pparam=two.bar.com
-
-The ``replacement`` URL in the mapping rule is not used. The argument
-to the ``--policy`` option is a comma-separated list of keywords.
-The first keyword is the name of a balancing policy. The subsequent
-keywords are used to refine the requested policy.
-
-The remaining plugin arguments are balancer targets. Typically,
-these will be the host names of origin servers that requests should
-be balanced across. The target name may contain a colon-separated
-port number.
-
-Hash Balancing Policy
----------------------
-
-The ``hash`` balancing policy performs a consistent hash across the
-set of origins. This minimizes the number of hash entries that must
-be moved when the set of origin servers changes. An optional list
-of hash fields follows the ``hash`` keyword. Each specified hash
-field is hashed to select an outbound origin server.
-
-The following fields can be supplied to the hash:
-
-key
-  The request cache key. Note that the cache key will only be
-  set if you have already chained a plugin that sets a custom
-  cache key.
-
-url
-  The request URL. This is the default hash field that is used if
-  no other fields are specified.
-
-srcaddr
-  The source IP address of the request.
-
-dstaddr
-  The destination IP address of the request.
-
-Round Robin Balancing Policy
-----------------------------
-
-The ``roundrobin`` balancing policy simply allocates requests to
-origin servers in order. Over time, the number of requests received
-by each origin should be approximately the same.
-
-Health Checking
----------------
-
-The ``balancer`` plugin does not check the health of the origin
-servers, however the plugin is fully reloadable so health checking
-is usually simple to implement. Most production environments already
-have mechanisms to check service health. It is recommended that you
-write a simple script to monitor this information and rewrite
-:file:`remap.config` when appropriate. Running :option:`traffic_ctl config reload`
-will reload the ``balancer`` plugin with the new set of origin servers.
diff --git a/doc/admin-guide/plugins/index.en.rst b/doc/admin-guide/plugins/index.en.rst
index 3d422dc..ff078b4 100644
--- a/doc/admin-guide/plugins/index.en.rst
+++ b/doc/admin-guide/plugins/index.en.rst
@@ -144,7 +144,6 @@ directory of the |TS| source tree. Experimental plugins can be compiled by passi
    :hidden:
 
    Access Control <access_control.en>
-   Balancer <balancer.en>
    Buffer Upload <buffer_upload.en>
    Certifier <certifier.en>
    Cert Reporting Tool <cert_reporting_tool.en>
@@ -173,9 +172,6 @@ directory of the |TS| source tree. Experimental plugins can be compiled by passi
 :doc:`Access Control <access_control.en>`
    Access control plugin that handles various access control use-cases.
 
-:doc:`Balancer <balancer.en>`
-   Balances requests across multiple origin servers.
-
 :doc:`Buffer Upload <buffer_upload.en>`
    Buffers POST data before connecting to the Origin server.
 
diff --git a/doc/locale/ja/LC_MESSAGES/admin-guide/introduction.en.po b/doc/locale/ja/LC_MESSAGES/admin-guide/introduction.en.po
index 78e2928..6a0a120 100644
--- a/doc/locale/ja/LC_MESSAGES/admin-guide/introduction.en.po
+++ b/doc/locale/ja/LC_MESSAGES/admin-guide/introduction.en.po
@@ -200,15 +200,6 @@ msgstr ""
 "場合 Traffic Server の内部的な API やアーキテクチャ的な制限が実装を難しくし"
 "ていることもあります。"
 
-#: ../../../admin-guide/introduction.en.rst:106
-#, fuzzy
-msgid ""
-"Load Balancing - note that there is an experimental plugin for this, :ref:"
-"`admin-plugins-balancer`."
-msgstr ""
-"ロードバランシング - このための実験的なプラクインがあることに注意してくださ"
-"い。 :ref:`balancer-plugin`"
-
 #: ../../../admin-guide/introduction.en.rst:112
 msgid "Traffic Server Components"
 msgstr "Traffic Server Components"
diff --git a/doc/locale/ja/LC_MESSAGES/admin-guide/plugins/balancer.en.po b/doc/locale/ja/LC_MESSAGES/admin-guide/plugins/balancer.en.po
deleted file mode 100644
index d20a8f6..0000000
--- a/doc/locale/ja/LC_MESSAGES/admin-guide/plugins/balancer.en.po
+++ /dev/null
@@ -1,134 +0,0 @@
-# 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.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: Apache Traffic Server 6.2\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-30 14:07+0900\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EM...@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL...@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.2.0\n"
-
-#: ../../../admin-guide/plugins/balancer.en.rst:4
-msgid "Balancer Plugin"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:24
-msgid ""
-"The ``balancer`` balances requests across multiple origin servers. To use "
-"this plugin, configure it in a :file:`remap.config` rule, specifying a "
-"balancing policy and a set of origin servers. For example::"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:31
-msgid ""
-"The ``replacement`` URL in the mapping rule is not used. The argument to "
-"the ``--policy`` option is a comma-separated list of keywords. The first "
-"keyword is the name of a balancing policy. The subsequent keywords are used "
-"to refine the requested policy."
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:36
-msgid ""
-"The remaining plugin arguments are balancer targets. Typically, these will "
-"be the host names of origin servers that requests should be balanced "
-"across. The target name may contain a colon-separated port number."
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:42
-msgid "Hash Balancing Policy"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:44
-msgid ""
-"The ``hash`` balancing policy performs a consistent hash across the set of "
-"origins. This minimizes the number of hash entries that must be moved when "
-"the set of origin servers changes. An optional list of hash fields follows "
-"the ``hash`` keyword. Each specified hash field is hashed to select an "
-"outbound origin server."
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:50
-msgid "The following fields can be supplied to the hash:"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:55
-msgid "key"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:53
-msgid ""
-"The request cache key. Note that the cache key will only be set if you have "
-"already chained a plugin that sets a custom cache key."
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:59
-msgid "url"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:58
-msgid ""
-"The request URL. This is the default hash field that is used if no other "
-"fields are specified."
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:62
-msgid "srcaddr"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:62
-msgid "The source IP address of the request."
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:65
-msgid "dstaddr"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:65
-msgid "The destination IP address of the request."
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:68
-msgid "Round Robin Balancing Policy"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:70
-msgid ""
-"The ``roundrobin`` balancing policy simply allocates requests to origin "
-"servers in order. Over time, the number of requests received by each origin "
-"should be approximately the same."
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:75
-msgid "Health Checking"
-msgstr ""
-
-#: ../../../admin-guide/plugins/balancer.en.rst:77
-msgid ""
-"The ``balancer`` plugin does not check the health of the origin servers, "
-"however the plugin is fully reloadable so health checking is usually simple "
-"to implement. Most production environments already have mechanisms to check "
-"service health. It is recommended that you write a simple script to monitor "
-"this information and rewrite :file:`remap.config` when appropriate. "
-"Running :option:`traffic_ctl config reload` will reload the ``balancer`` "
-"plugin with the new set of origin servers."
-msgstr ""
diff --git a/doc/locale/ja/LC_MESSAGES/admin-guide/plugins/index.en.po b/doc/locale/ja/LC_MESSAGES/admin-guide/plugins/index.en.po
index ac06ffd..2eb3788 100644
--- a/doc/locale/ja/LC_MESSAGES/admin-guide/plugins/index.en.po
+++ b/doc/locale/ja/LC_MESSAGES/admin-guide/plugins/index.en.po
@@ -179,10 +179,6 @@ msgid ""
 msgstr ""
 
 #: ../../../admin-guide/plugins/index.en.rst:135
-msgid ":doc:`Balancer <balancer.en>`"
-msgstr ""
-
-#: ../../../admin-guide/plugins/index.en.rst:135
 msgid "Balances requests across multiple origin servers."
 msgstr ""
 
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 18a08ac..d868692 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -58,7 +58,6 @@ if BUILD_EXPERIMENTAL_PLUGINS
 
 include experimental/access_control/Makefile.inc
 include experimental/acme/Makefile.inc
-include experimental/balancer/Makefile.inc
 include experimental/buffer_upload/Makefile.inc
 include experimental/cert_reporting_tool/Makefile.inc
 include experimental/collapsed_forwarding/Makefile.inc
diff --git a/plugins/experimental/balancer/Makefile.inc b/plugins/experimental/balancer/Makefile.inc
deleted file mode 100644
index 6c93be5..0000000
--- a/plugins/experimental/balancer/Makefile.inc
+++ /dev/null
@@ -1,23 +0,0 @@
-#  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.
-
-pkglib_LTLIBRARIES += experimental/balancer/balancer.la
-
-experimental_balancer_balancer_la_SOURCES = \
-  experimental/balancer/balancer.cc\
-  experimental/balancer/roundrobin.cc \
-  experimental/balancer/hash.cc \
-  experimental/balancer/balancer.h
diff --git a/plugins/experimental/balancer/balancer.cc b/plugins/experimental/balancer/balancer.cc
deleted file mode 100644
index 4bce592..0000000
--- a/plugins/experimental/balancer/balancer.cc
+++ /dev/null
@@ -1,196 +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 "balancer.h"
-#include <ts/remap.h>
-#include <cstdio>
-#include <getopt.h>
-#include <cstring>
-#include <cstdlib>
-#include <iterator>
-
-// Using ink_inet API is cheating, but I was too lazy to write new IPv6 address parsing routines ;)
-#include "tscore/ink_inet.h"
-
-// The policy type is the first comma-separated token.
-static BalancerInstance *
-MakeBalancerInstance(const char *opt)
-{
-  const char *end = strchr(opt, ',');
-  size_t len      = end ? std::distance(opt, end) : strlen(opt);
-
-  if (len == lengthof("hash") && strncmp(opt, "hash", len) == 0) {
-    return MakeHashBalancer(end ? end + 1 : nullptr);
-  } else if (len == lengthof("roundrobin") && strncmp(opt, "roundrobin", len) == 0) {
-    return MakeRoundRobinBalancer(end ? end + 1 : nullptr);
-  } else {
-    TSError("[balancer] Invalid balancing policy '%.*s'", (int)len, opt);
-    return nullptr;
-  }
-}
-
-static BalancerTarget
-MakeBalancerTarget(const char *strval)
-{
-  BalancerTarget target = BalancerTarget();
-
-  union {
-    struct sockaddr_storage storage;
-    struct sockaddr sa;
-  } address;
-
-  memset(&address, 0, sizeof(address));
-
-  // First, check whether we have an address literal.
-  if (ats_ip_pton(strval, &address.sa) == 0) {
-    char namebuf[INET6_ADDRSTRLEN];
-
-    target.port = ats_ip_port_host_order(&address.sa);
-    target.name = ats_ip_ntop(&address.sa, namebuf, sizeof(namebuf));
-  } else {
-    const char *colon = strrchr(strval, ':');
-
-    if (colon) {
-      size_t len = std::distance(strval, colon);
-
-      target.port = strtol(colon + 1, nullptr, 10);
-      target.name = std::string(strval, len);
-    } else {
-      target.port = 0;
-      target.name = strval;
-    }
-  }
-
-  if (target.port > UINT16_MAX) {
-    TSError("[balancer] Ignoring invalid port number for target '%s'", strval);
-    target.port = 0;
-  }
-
-  return target;
-}
-
-TSReturnCode
-TSRemapInit(TSRemapInterface * /* api */, char * /* errbuf */, int /* bufsz */)
-{
-  return TS_SUCCESS;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// One instance per remap.config invocation.
-//
-TSReturnCode
-TSRemapNewInstance(int argc, char *argv[], void **instance, char *errbuf, int errbuf_size)
-{
-  static const struct option longopt[] = {
-    {const_cast<char *>("policy"), required_argument, nullptr, 'p'},
-    {nullptr, 0, nullptr, 0},
-  };
-
-  BalancerInstance *balancer = nullptr;
-
-  // The first two arguments are the "from" and "to" URL string. We need to
-  // skip them, but we also require that there be an option to masquerade as
-  // argv[0], so we increment the argument indexes by 1 rather than by 2.
-  argc--;
-  argv++;
-
-  for (;;) {
-    int opt;
-
-    opt = getopt_long(argc, (char *const *)argv, "", longopt, nullptr);
-    switch (opt) {
-    case 'p':
-      if (!balancer) {
-        balancer = MakeBalancerInstance(optarg);
-      } else {
-        TSError("[balancer] Duplicate --policy options, ignored %s", optarg);
-      }
-      break;
-    case -1:
-      break;
-    default:
-      snprintf(errbuf, errbuf_size, "invalid balancer option '%d'", opt);
-      delete balancer;
-      return TS_ERROR;
-    }
-
-    if (opt == -1) {
-      break;
-    }
-  }
-
-  if (!balancer) {
-    strncpy(errbuf, "missing balancer policy", errbuf_size);
-    return TS_ERROR;
-  }
-
-  // Pick up the remaining options as balance targets.
-  for (int i = optind; i < argc; ++i) {
-    BalancerTarget target = MakeBalancerTarget(argv[i]);
-
-    balancer->push_target(target);
-    if (target.port) {
-      TSDebug("balancer", "added target -> %s:%u", target.name.c_str(), target.port);
-    } else {
-      TSDebug("balancer", "added target -> %s", target.name.c_str());
-    }
-  }
-
-  *instance = balancer;
-  return TS_SUCCESS;
-}
-
-void
-TSRemapDeleteInstance(void *instance)
-{
-  delete (BalancerInstance *)instance;
-}
-
-TSRemapStatus
-TSRemapDoRemap(void *instance, TSHttpTxn txn, TSRemapRequestInfo *rri)
-{
-  BalancerInstance *balancer   = (BalancerInstance *)instance;
-  const BalancerTarget &target = balancer->balance(txn, rri);
-
-  if (TSIsDebugTagSet("balancer")) {
-    char *url;
-    int len;
-
-    url = TSHttpTxnEffectiveUrlStringGet(txn, &len);
-    if (target.port) {
-      TSDebug("balancer", "%s:%u <- %.*s", target.name.c_str(), target.port, len, url);
-    } else {
-      TSDebug("balancer", "%s <- %.*s", target.name.c_str(), len, url);
-    }
-
-    TSfree(url);
-  }
-
-  TSUrlHostSet(rri->requestBufp, rri->requestUrl, target.name.data(), target.name.size());
-
-  if (target.port) {
-    TSUrlPortSet(rri->requestBufp, rri->requestUrl, target.port);
-  }
-
-  return TSREMAP_DID_REMAP;
-}
diff --git a/plugins/experimental/balancer/balancer.h b/plugins/experimental/balancer/balancer.h
deleted file mode 100644
index 54bedd1..0000000
--- a/plugins/experimental/balancer/balancer.h
+++ /dev/null
@@ -1,50 +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.
- */
-
-#pragma once
-
-#include <ts/ts.h>
-#include <ts/remap.h>
-#include <string>
-
-// Return the length of a string literal.
-template <int N>
-unsigned
-lengthof(const char (&)[N])
-{
-  return N - 1;
-}
-
-struct BalancerTarget {
-  std::string name;
-  unsigned port;
-};
-
-struct BalancerInstance {
-  virtual ~BalancerInstance() {}
-  virtual void push_target(const BalancerTarget &)                       = 0;
-  virtual const BalancerTarget &balance(TSHttpTxn, TSRemapRequestInfo *) = 0;
-};
-
-BalancerInstance *MakeHashBalancer(const char *);
-BalancerInstance *MakeRoundRobinBalancer(const char *);
diff --git a/plugins/experimental/balancer/hash.cc b/plugins/experimental/balancer/hash.cc
deleted file mode 100644
index c6ff0a6..0000000
--- a/plugins/experimental/balancer/hash.cc
+++ /dev/null
@@ -1,230 +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 "balancer.h"
-#include <cstdlib>
-#include <openssl/md5.h>
-#include <netinet/in.h>
-#include <cstring>
-#include <map>
-#include <string>
-#include <vector>
-
-namespace
-{
-size_t
-sockaddrlen(const struct sockaddr *sa)
-{
-  switch (sa->sa_family) {
-  case AF_INET:
-    return sizeof(struct sockaddr_in);
-  case AF_INET6:
-    return sizeof(struct sockaddr_in6);
-  default:
-    TSReleaseAssert(0 && "unsupported socket type");
-  }
-
-  return 0;
-}
-
-struct md5_key {
-  md5_key() {}
-  md5_key(const BalancerTarget &target, unsigned i)
-  {
-    MD5_CTX ctx;
-
-    MD5_Init(&ctx);
-    MD5_Update(&ctx, target.name.data(), target.name.size());
-    MD5_Update(&ctx, &target.port, sizeof(target.port));
-    MD5_Update(&ctx, &i, sizeof(i));
-    MD5_Final(this->key, &ctx);
-  }
-
-  bool
-  operator<(const md5_key &rhs) const
-  {
-    return memcmp(this->key, rhs.key, sizeof(this->key)) < 0;
-  }
-
-  unsigned char key[MD5_DIGEST_LENGTH];
-};
-
-using HashComponent = void (*)(TSHttpTxn, TSRemapRequestInfo *, MD5_CTX *);
-
-// Hash on the source (client) IP address.
-void
-HashTxnSrcaddr(TSHttpTxn txn, TSRemapRequestInfo *, MD5_CTX *ctx)
-{
-  struct sockaddr const *sa;
-
-  sa = TSHttpTxnClientAddrGet(txn);
-  if (sa) {
-    MD5_Update(ctx, sa, sockaddrlen(sa));
-    TSDebug("balancer", "%s(addr[%zu]]", __func__, sockaddrlen(sa));
-  }
-}
-
-// Hash on the destination (server) IP address;
-void
-HashTxnDstaddr(TSHttpTxn txn, TSRemapRequestInfo *, MD5_CTX *ctx)
-{
-  struct sockaddr const *sa;
-
-  sa = TSHttpTxnIncomingAddrGet(txn);
-  if (sa) {
-    MD5_Update(ctx, sa, sockaddrlen(sa));
-    TSDebug("balancer", "%s(addr[%zu]]", __func__, sockaddrlen(sa));
-  }
-}
-
-// Hash on the request URL.
-void
-HashTxnUrl(TSHttpTxn txn, TSRemapRequestInfo *, MD5_CTX *ctx)
-{
-  char *url;
-  int len;
-
-  url = TSHttpTxnEffectiveUrlStringGet(txn, &len);
-  if (url && len) {
-    MD5_Update(ctx, url, len);
-    TSDebug("balancer", "%s(%.*s)", __func__, len, url);
-  }
-
-  TSfree(url);
-}
-
-// Hash on the cache key. This is not typically set at remap time, unless by another plugin.
-void
-HashTxnKey(TSHttpTxn txn, TSRemapRequestInfo *rri, MD5_CTX *ctx)
-{
-  TSMLoc url = TS_NULL_MLOC;
-  char *str  = nullptr;
-  int len;
-
-  if (TSUrlCreate(rri->requestBufp, &url) != TS_SUCCESS) {
-    goto done;
-  }
-
-  if (TSHttpTxnCacheLookupUrlGet(txn, rri->requestBufp, url) != TS_SUCCESS) {
-    TSDebug("balancer", "no cache key");
-    goto done;
-  }
-
-  str = TSUrlStringGet(rri->requestBufp, url, &len);
-  if (str && len) {
-    TSDebug("balancer", "%s(%.*s)", __func__, len, str);
-    MD5_Update(ctx, str, len);
-  }
-
-done:
-  if (url != TS_NULL_MLOC) {
-    TSHandleMLocRelease(rri->requestBufp, TS_NULL_MLOC, url);
-  }
-
-  TSfree(str);
-}
-
-struct HashBalancer : public BalancerInstance {
-  typedef std::map<md5_key, BalancerTarget> hash_ring_type;
-  using hash_part_type = std::vector<HashComponent>;
-
-  enum {
-    iterations = 10,
-  };
-
-  HashBalancer() { this->hash_parts.push_back(HashTxnUrl); }
-  void
-  push_target(const BalancerTarget &target) override
-  {
-    for (unsigned i = 0; i < iterations; ++i) {
-      this->hash_ring.insert(std::make_pair(md5_key(target, i), target));
-    }
-  }
-
-  const BalancerTarget &
-  balance(TSHttpTxn txn, TSRemapRequestInfo *rri) override
-  {
-    md5_key key;
-    MD5_CTX ctx;
-    hash_ring_type::const_iterator loc;
-
-    // We'd better have some hash functions set by now ...
-    TSReleaseAssert(!hash_parts.empty());
-
-    MD5_Init(&ctx);
-
-    for (hash_part_type::const_iterator i = this->hash_parts.begin(); i != this->hash_parts.end(); ++i) {
-      (*i)(txn, rri, &ctx);
-    }
-
-    MD5_Final(key.key, &ctx);
-
-    // OK, now look up this hash in the hash ring. lower_bound() finds the first element that is not less than the
-    // target, so the element we find is the first key that is greater than our target. To visualize this in the
-    // hash ring, that means that each node owns the preceding keyspace (ie. the node is at the end of each keyspace
-    // range). This means that when we wrap, the first node owns the wrapping portion of the keyspace.
-    loc = this->hash_ring.lower_bound(key);
-    if (loc == this->hash_ring.end()) {
-      loc = this->hash_ring.begin();
-    }
-
-    return loc->second;
-  }
-
-  hash_ring_type hash_ring;
-  hash_part_type hash_parts;
-};
-
-} // namespace
-
-BalancerInstance *
-MakeHashBalancer(const char *options)
-{
-  HashBalancer *hash = new HashBalancer();
-  char *opt;
-  char *tmp;
-
-  TSDebug("balancer", "making hash balancer with options '%s'", options);
-
-  if (options) {
-    hash->hash_parts.clear(); // clear the default hash type if we have options
-    options = tmp = strdup(options);
-    while ((opt = strsep(&tmp, ",")) != nullptr) {
-      if (strcmp(opt, "key") == 0) {
-        hash->hash_parts.push_back(HashTxnKey);
-      } else if (strcmp(opt, "url") == 0) {
-        hash->hash_parts.push_back(HashTxnUrl);
-      } else if (strcmp(opt, "srcaddr") == 0) {
-        hash->hash_parts.push_back(HashTxnSrcaddr);
-      } else if (strcmp(opt, "dstaddr") == 0) {
-        hash->hash_parts.push_back(HashTxnDstaddr);
-      } else {
-        TSError("[balancer] Ignoring invalid hash field '%s'", opt);
-      }
-    }
-
-    free((void *)options);
-  }
-
-  return hash;
-}
diff --git a/plugins/experimental/balancer/roundrobin.cc b/plugins/experimental/balancer/roundrobin.cc
deleted file mode 100644
index 6090ab9..0000000
--- a/plugins/experimental/balancer/roundrobin.cc
+++ /dev/null
@@ -1,72 +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 "balancer.h"
-#include <cstdlib>
-#include <cstring>
-#include <map>
-#include <string>
-#include <vector>
-
-namespace
-{
-struct RoundRobinBalancer : public BalancerInstance {
-  RoundRobinBalancer() : targets() {}
-  void
-  push_target(const BalancerTarget &target) override
-  {
-    this->targets.push_back(target);
-  }
-
-  const BalancerTarget &
-  balance(TSHttpTxn, TSRemapRequestInfo *) override
-  {
-    return this->targets[++next % this->targets.size()];
-  }
-
-  std::vector<BalancerTarget> targets;
-  unsigned next = 0;
-};
-
-} // namespace
-
-BalancerInstance *
-MakeRoundRobinBalancer(const char *options)
-{
-  RoundRobinBalancer *hash = new RoundRobinBalancer();
-  char *opt;
-  char *tmp;
-
-  TSDebug("balancer", "making round robin balancer with options '%s'", options);
-
-  if (options) {
-    options = tmp = strdup(options);
-    while ((opt = strsep(&tmp, ",")) != nullptr) {
-      TSError("[balancer] Ignoring invalid round robin field '%s'", opt);
-    }
-
-    free((void *)options);
-  }
-
-  return hash;
-}
diff --git a/tests/gold_tests/pluginTest/url_sig/url_sig.test.py b/tests/gold_tests/pluginTest/url_sig/url_sig.test.py
index 69d8c62..3c96e89 100644
--- a/tests/gold_tests/pluginTest/url_sig/url_sig.test.py
+++ b/tests/gold_tests/pluginTest/url_sig/url_sig.test.py
@@ -28,7 +28,6 @@ Test.ContinueOnFail = True
 
 # Skip if plugins not present.
 Test.SkipUnless(Condition.PluginExists('url_sig.so'))
-Test.SkipUnless(Condition.PluginExists('balancer.so'))
 
 # Set up to check the output after the tests have run.
 #
@@ -89,8 +88,7 @@ ts.Disk.remap_config.AddLine(
 # Use pristine URL, incoming URL changed.
 #
 ts.Disk.remap_config.AddLine(
-    'map http://seven.eight.nine/ http://dummy' +
-    ' @plugin=balancer.so @pparam=--policy=hash,url @pparam=127.0.0.1:{}'.format(server.Variables.Port) +
+    'map http://seven.eight.nine/ http://127.0.0.1:{}'.format(server.Variables.Port) +
     ' @plugin=url_sig.so @pparam={}/url_sig.config @pparam=PristineUrl'.format(Test.TestDirectory)
 )
 
@@ -232,17 +230,19 @@ tr.Processes.Default.Command = (
     LogTee
 )
 
+
 def sign(payload, key):
-  secret=bytes(key,'utf-8')
-  data=bytes(payload, 'utf-8')
-  md=bytes(hmac.new(secret, data, digestmod=hashlib.sha1).digest().hex(), 'utf-8')
-  return md.decode("utf-8")
+    secret = bytes(key, 'utf-8')
+    data = bytes(payload, 'utf-8')
+    md = bytes(hmac.new(secret, data, digestmod=hashlib.sha1).digest().hex(), 'utf-8')
+    return md.decode("utf-8")
+
 
 # No client / SHA1 / P=1 / URL not pristine / URL not altered.
 #
-path="foo/abcde/qrstuvwxyz?E=33046618506&A=1&K=7&P=1&S="
-to_sign="127.0.0.1:{}/".format(server.Variables.Port) + path
-url="http://one.two.three/" + path + sign(to_sign, "dqsgopTSM_doT6iAysasQVUKaPykyb6e")
+path = "foo/abcde/qrstuvwxyz?E=33046618506&A=1&K=7&P=1&S="
+to_sign = "127.0.0.1:{}/".format(server.Variables.Port) + path
+url = "http://one.two.three/" + path + sign(to_sign, "dqsgopTSM_doT6iAysasQVUKaPykyb6e")
 
 tr = Test.AddTestRun()
 tr.Processes.Default.ReturnCode = 0
@@ -252,9 +252,9 @@ tr.Processes.Default.Command = (
 
 # No client / SHA1 / P=1 / URL not pristine / URL not altered -- HTTPS.
 #
-path="foo/abcde/qrstuvwxyz?E=33046618506&A=1&K=7&P=1&S="
-to_sign="127.0.0.1:{}/".format(server.Variables.Port) + path
-url="https://127.0.0.1:{}/".format(ts.Variables.ssl_port) + path + sign(to_sign, "dqsgopTSM_doT6iAysasQVUKaPykyb6e")
+path = "foo/abcde/qrstuvwxyz?E=33046618506&A=1&K=7&P=1&S="
+to_sign = "127.0.0.1:{}/".format(server.Variables.Port) + path
+url = "https://127.0.0.1:{}/".format(ts.Variables.ssl_port) + path + sign(to_sign, "dqsgopTSM_doT6iAysasQVUKaPykyb6e")
 
 tr = Test.AddTestRun()
 tr.Processes.Default.ReturnCode = 0