You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ig...@apache.org on 2011/12/04 22:44:52 UTC

svn commit: r1210237 - in /trafficserver/traffic/branches/3.0.x: ./ CHANGES STATUS proxy/hdrs/HdrToken.cc proxy/hdrs/MIME.cc

Author: igalic
Date: Sun Dec  4 21:44:52 2011
New Revision: 1210237

URL: http://svn.apache.org/viewvc?rev=1210237&view=rev
Log:
promote

Modified:
    trafficserver/traffic/branches/3.0.x/   (props changed)
    trafficserver/traffic/branches/3.0.x/CHANGES
    trafficserver/traffic/branches/3.0.x/STATUS
    trafficserver/traffic/branches/3.0.x/proxy/hdrs/HdrToken.cc
    trafficserver/traffic/branches/3.0.x/proxy/hdrs/MIME.cc

Propchange: trafficserver/traffic/branches/3.0.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Dec  4 21:44:52 2011
@@ -1,4 +1,4 @@
 /incubator/trafficserver/traffic/branches/dev:891823-915885
 /trafficserver/traffic/branches/ts-291:965529-991993
 /trafficserver/traffic/branches/wccp:1021790-1040544
-/trafficserver/traffic/trunk:1129268,1131080,1131473,1133066,1133071,1133639,1135769-1135770,1136958,1137111,1137775,1137844,1137846,1142523,1143116,1144094,1144096,1144746,1146414,1152536,1153236,1154744,1155125,1171365,1175914,1196822,1196922
+/trafficserver/traffic/trunk:1129268,1131080,1131473,1133066,1133071,1133639,1135769-1135770,1136958,1137111,1137775,1137844,1137846,1142523,1143116,1144094,1144096,1144746,1146414,1152536,1153236,1154744,1155125,1171365,1175914,1196822,1196922,1209291

Modified: trafficserver/traffic/branches/3.0.x/CHANGES
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/CHANGES?rev=1210237&r1=1210236&r2=1210237&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/CHANGES (original)
+++ trafficserver/traffic/branches/3.0.x/CHANGES Sun Dec  4 21:44:52 2011
@@ -1,8 +1,14 @@
                                                          -*- coding: utf-8 -*-
-
 Changes with Apache Traffic Server 3.0.2
+  *) [TS-1030] Improve hashing mechanism on WKS.
+
   *) [TS-1011]: SSL doesn't work on Solaris.
 
+  *) [TS-1028] Avoid triggering assert when running debug build and enabling
+   per-thread connection pols
+
+  *) [TS-1021] Remove extra newline from binary logs.
+
   *) [TS-1013]: Allow ssl_multicert.config to support CA chains per host
 
   *) [TS-944]: ssl.server.cert.path & ssl.server.private_key.path do not work as expected

Modified: trafficserver/traffic/branches/3.0.x/STATUS
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/STATUS?rev=1210237&r1=1210236&r2=1210237&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/STATUS (original)
+++ trafficserver/traffic/branches/3.0.x/STATUS Sun Dec  4 21:44:52 2011
@@ -39,6 +39,10 @@ A list of all bugs open for the next v3.
 
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
 
+  *) HTTP: Poor hashing on WKS's (well-known-string's)
+   Trunk patch: http://svn.apache.org/viewvc?view=rev&rev=1209291
+   Jira: https://issues.apache.org/jira/browse/TS-1030
+   +1: zwoop, igalic, zym
 
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
   [ New proposals should be added at the end of the list ]
@@ -53,11 +57,6 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK:
      this patch to be merge later and leave some time for us to find out how to
      fix it. we are now testing the fix.
 
-  *) HTTP: Poor hashing on WKS's (well-known-string's)
-   Trunk patch: http://svn.apache.org/viewvc?view=rev&rev=1209291
-   Jira: https://issues.apache.org/jira/browse/TS-1030
-   +1: zwoop, igalic, zym
-
 RELEASE PROCESS
 
 The Traffic Server release process is documented at

Modified: trafficserver/traffic/branches/3.0.x/proxy/hdrs/HdrToken.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/proxy/hdrs/HdrToken.cc?rev=1210237&r1=1210236&r2=1210237&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/proxy/hdrs/HdrToken.cc (original)
+++ trafficserver/traffic/branches/3.0.x/proxy/hdrs/HdrToken.cc Sun Dec  4 21:44:52 2011
@@ -336,27 +336,36 @@ DFA *hdrtoken_strs_dfa = NULL;
 struct HdrTokenHashBucket
 {
   const char *wks;
+  uint32_t hash;
 };
 
 HdrTokenHashBucket hdrtoken_hash_table[HDRTOKEN_HASH_TABLE_SIZE];
 
-#define TINY_MASK(x) (((u_int32_t)1<<(x))-1)
-
 /**
   basic FNV hash
 **/
-inline unsigned int
+#define TINY_MASK(x) (((u_int32_t)1<<(x))-1)
+
+inline uint32_t
+hash_to_slot(uint32_t hash)
+{
+  return ((hash>>15) ^ hash) & TINY_MASK(15);
+}
+
+inline uint32_t
 hdrtoken_hash(const unsigned char *string, unsigned int length)
 {
-  const uint32_t InitialFNV = 2166136261U;
-  const int32_t FNVMultiple = 16777619;
+  static const uint32_t InitialFNV = 2166136261U;
+  static const int32_t FNVMultiple = 16777619;
 
   uint32_t hash = InitialFNV;
-  for(size_t i = 0; i < length; i++)  {
+
+  for (size_t i = 0; i < length; i++)  {
       hash = hash ^ (toupper(string[i])); 
       hash = hash * FNVMultiple;          
   }
-  return (((hash>>15) ^ hash) & TINY_MASK(15));
+
+  return hash;
 }
 
 /*-------------------------------------------------------------------------
@@ -498,7 +507,6 @@ const char *_hdrtoken_commonly_tokenized
   // Header extensions
   "X-Forwarded-For",
   "TE",
-  
 };
 
 /*-------------------------------------------------------------------------
@@ -507,14 +515,12 @@ const char *_hdrtoken_commonly_tokenized
 void
 hdrtoken_hash_init()
 {
-  unsigned int i;
+  uint32_t i;
   int num_collisions;
 
-  for (i = 0; i < HDRTOKEN_HASH_TABLE_SIZE; i++) {
-    hdrtoken_hash_table[i].wks = NULL;
-  }
-
+  memset(hdrtoken_hash_table, 0, sizeof(hdrtoken_hash_table));
   num_collisions = 0;
+
   for (i = 0; i < (int) SIZEOF(_hdrtoken_commonly_tokenized_strs); i++) {
     // convert the common string to the well-known token
     unsigned const char *wks;
@@ -523,14 +529,18 @@ hdrtoken_hash_init()
                                         (const char **) &wks);
     ink_release_assert(wks_idx >= 0);
 
-    unsigned int slot = hdrtoken_hash(wks, hdrtoken_str_lengths[wks_idx]);
+    uint32_t hash = hdrtoken_hash(wks, hdrtoken_str_lengths[wks_idx]);
+    uint32_t slot = hash_to_slot(hash);
+
     if (hdrtoken_hash_table[slot].wks) {
       printf("ERROR: hdrtoken_hash_table[%u] collision: '%s' replacing '%s'\n",
              slot, (const char*)wks, hdrtoken_hash_table[slot].wks);
       ++num_collisions;
     }
-    hdrtoken_hash_table[slot].wks = (const char *) wks;
+    hdrtoken_hash_table[slot].wks = (const char *)wks;
+    hdrtoken_hash_table[slot].hash = hash;
   }
+
   if (num_collisions > 0)
     abort();
 }
@@ -548,7 +558,7 @@ hdrtoken_hash_init()
 static inline unsigned int
 snap_up_to_multiple(unsigned int n, unsigned int unit)
 {
-  return (((n + (unit - 1)) / unit) * unit);
+  return ((n + (unit - 1)) / unit) * unit;
 }
 
 /*-------------------------------------------------------------------------
@@ -672,7 +682,7 @@ hdrtoken_tokenize_dfa(const char *string
   }
   //printf("hdrtoken_tokenize_dfa(%d,*s) - return %d\n",string_len,string,wks_idx);
 
-  return (wks_idx);
+  return wks_idx;
 }
 
 /*-------------------------------------------------------------------------
@@ -690,19 +700,23 @@ hdrtoken_tokenize(const char *string, in
     wks_idx = hdrtoken_wks_to_index(string);
     if (wks_string_out)
       *wks_string_out = string;
-    return (wks_idx);
+    return wks_idx;
   }
 
-  unsigned int slot = hdrtoken_hash((const unsigned char *) string, (unsigned int) string_len);
+  uint32_t hash = hdrtoken_hash((const unsigned char *) string, (unsigned int) string_len);
+  uint32_t slot = hash_to_slot(hash);
+
   bucket = &(hdrtoken_hash_table[slot]);
   if ((bucket->wks != NULL) &&
+      (bucket->hash == hash) &&
       (hdrtoken_wks_to_length(bucket->wks) == string_len)) {
     wks_idx = hdrtoken_wks_to_index(bucket->wks);
     if (wks_string_out)
       *wks_string_out = bucket->wks;
-    return (wks_idx);
+    return wks_idx;
   }
 
+  Debug("hdr_token", "Did not find a WKS for '%.*s'", string_len, string);
   return -1;
 }
 
@@ -714,7 +728,7 @@ hdrtoken_string_to_wks(const char *strin
 {
   const char *wks = NULL;
   hdrtoken_tokenize(string, (int) strlen(string), &wks);
-  return (wks);
+  return wks;
 }
 
 /*-------------------------------------------------------------------------
@@ -725,5 +739,5 @@ hdrtoken_string_to_wks(const char *strin
 {
   const char *wks = NULL;
   hdrtoken_tokenize(string, length, &wks);
-  return (wks);
+  return wks;
 }

Modified: trafficserver/traffic/branches/3.0.x/proxy/hdrs/MIME.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/branches/3.0.x/proxy/hdrs/MIME.cc?rev=1210237&r1=1210236&r2=1210237&view=diff
==============================================================================
--- trafficserver/traffic/branches/3.0.x/proxy/hdrs/MIME.cc (original)
+++ trafficserver/traffic/branches/3.0.x/proxy/hdrs/MIME.cc Sun Dec  4 21:44:52 2011
@@ -572,8 +572,8 @@ mime_hdr_sanity_check(MIMEHdrImpl * mh)
           const char *wks = hdrtoken_index_to_wks(field->m_wks_idx);
           int len = hdrtoken_index_to_length(field->m_wks_idx);
 
-          ink_release_assert(field->m_len_name == len);
-          ink_release_assert(strncasecmp(field->m_ptr_name, wks, field->m_len_name) == 0);
+          if (field->m_len_name != len || strncasecmp(field->m_ptr_name, wks, field->m_len_name) != 0)
+            Warning("Encountered WKS hash collision on '%.*s'", field->m_len_name, field->m_ptr_name);
 
           uint64_t mask = mime_field_presence_mask(field->m_wks_idx);
           masksum |= mask;