You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2014/12/16 01:58:19 UTC

trafficserver git commit: TS-3240: fix IP address hash policy for the balancer plugin

Repository: trafficserver
Updated Branches:
  refs/heads/master 566719961 -> 1f073588a


TS-3240: fix IP address hash policy for the balancer plugin

Fix the srcaddr hash policy and add the dstaddr hash policy.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/1f073588
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/1f073588
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/1f073588

Branch: refs/heads/master
Commit: 1f073588a1275860d99c5a95c7e1c3e571a1d554
Parents: 5667199
Author: James Peach <jp...@apache.org>
Authored: Wed Dec 10 13:02:39 2014 -0800
Committer: James Peach <jp...@apache.org>
Committed: Mon Dec 15 16:56:46 2014 -0800

----------------------------------------------------------------------
 CHANGES                               |  2 ++
 doc/reference/plugins/balancer.en.rst |  3 +++
 plugins/experimental/balancer/hash.cc | 17 ++++++++++++++++-
 3 files changed, 21 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f073588/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 4c8c891..cd2adb9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 5.3.0
 
+  *) [TS-3240] Add the `dstaddr` hash key to the balancer plugin.
+
   *) [TS-3239] Add a new `generator` plugin.
 
   *) [TS-3238] Stop referencing the global _res symbol.

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f073588/doc/reference/plugins/balancer.en.rst
----------------------------------------------------------------------
diff --git a/doc/reference/plugins/balancer.en.rst b/doc/reference/plugins/balancer.en.rst
index 239d1b2..6d443a5 100644
--- a/doc/reference/plugins/balancer.en.rst
+++ b/doc/reference/plugins/balancer.en.rst
@@ -61,6 +61,9 @@ url
 srcaddr
   The source IP address of the request.
 
+dstaddr
+  The destination IP address of the request.
+
 Round Robin Balancing Policy
 ----------------------------
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f073588/plugins/experimental/balancer/hash.cc
----------------------------------------------------------------------
diff --git a/plugins/experimental/balancer/hash.cc b/plugins/experimental/balancer/hash.cc
index d90a02c..17c9c63 100644
--- a/plugins/experimental/balancer/hash.cc
+++ b/plugins/experimental/balancer/hash.cc
@@ -65,12 +65,25 @@ struct md5_key {
 
 typedef void (*HashComponent)(TSHttpTxn txn, TSRemapRequestInfo *, MD5_CTX *);
 
-// Hash on the source IP address;
+// Hash on the source (client) IP address.
 void
 HashTxnSrcaddr(TSHttpTxn txn, TSRemapRequestInfo *, MD5_CTX * ctx)
 {
   struct sockaddr const * sa;
 
+  sa = TSHttpTxnClientAddrGet(txn);
+  if (txn) {
+    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 (txn) {
     MD5_Update(ctx, sa, sockaddrlen(sa));
@@ -195,6 +208,8 @@ MakeHashBalancer(const char * options)
         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);
       }