Author: zwoop
Date: Thu Mar 11 18:05:33 2010
New Revision: 921965

URL: http://svn.apache.org/viewvc?rev=921965&view=rev
Log:
TS-237: catch-all remap rule ("map / ....") stopped working after lookup 
optimizations
        Author: Manjesh Nilange
        Review: Leif

Modified:
    
incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.cc
    
incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.h
    incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlRewrite.cc

Modified: 
incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.cc
URL: 
http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.cc?rev=921965&r1=921964&r2=921965&view=diff
==============================================================================
--- 
incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.cc 
(original)
+++ 
incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.cc 
Thu Mar 11 18:05:33 2010
@@ -26,18 +26,19 @@
 bool
 UrlMappingPathIndex::Insert(url_mapping *mapping)
 {
-  URLType url_type;
+  int scheme_idx;
   int port = (mapping->fromURL).port_get();
   UrlMappingTrie *trie;
   int from_path_len;
   const char *from_path;
 
-  trie = _GetTrie(&(mapping->fromURL), url_type, port);
+  trie = _GetTrie(&(mapping->fromURL), scheme_idx, port);
   
   if (!trie) {
     trie = new UrlMappingTrie();
-    m_tries.insert(UrlMappingGroup::value_type(UrlMappingTrieKey(url_type, 
port), trie));
-    Debug("UrlMappingPathIndex::Insert", "Created new trie for url type, port 
combo <%d, %d>", url_type, port);
+    m_tries.insert(UrlMappingGroup::value_type(UrlMappingTrieKey(scheme_idx, 
port), trie));
+    Debug("UrlMappingPathIndex::Insert", "Created new trie for scheme index, 
port combo <%d, %d>",
+          scheme_idx, port);
   }
   
   from_path = mapping->fromURL.path_get(&from_path_len);
@@ -50,19 +51,19 @@ UrlMappingPathIndex::Insert(url_mapping 
 }
 
 url_mapping *
-UrlMappingPathIndex::Search(URL *request_url, int request_port) const
+UrlMappingPathIndex::Search(URL *request_url, int request_port, bool 
normal_search /* = true */) const
 {
   url_mapping **retval = 0;
-  URLType url_type;
+  int scheme_idx;
   UrlMappingTrie *trie;
   int path_len;
   const char *path;
 
-  trie = _GetTrie(request_url, url_type, request_port);
+  trie = _GetTrie(request_url, scheme_idx, request_port, normal_search);
   
   if (!trie) {
-    Debug("UrlMappingPathIndex::Search", "No mappings exist for url type, port 
combo <%d, %d>",
-          url_type, request_port);
+    Debug("UrlMappingPathIndex::Search", "No mappings exist for scheme index, 
port combo <%d, %d>",
+          scheme_idx, request_port);
     goto lFail;
   }
 

Modified: 
incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.h
URL: 
http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.h?rev=921965&r1=921964&r2=921965&view=diff
==============================================================================
--- 
incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.h 
(original)
+++ 
incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlMappingPathIndex.h 
Thu Mar 11 18:05:33 2010
@@ -38,7 +38,7 @@ public:
 
   bool Insert(url_mapping *mapping);
 
-  url_mapping *Search(URL *request_url, int request_port) const;
+  url_mapping *Search(URL *request_url, int request_port, bool normal_search = 
true) const;
 
   typedef std::list<url_mapping *> MappingList;
   
@@ -56,15 +56,15 @@ private:
   typedef Trie<url_mapping *> UrlMappingTrie;
   struct UrlMappingTrieKey 
   {
-    URLType url_type;
+    int scheme_wks_idx;
     int port;
-    UrlMappingTrieKey(URLType type, int p) : url_type(type), port(p) { };
+    UrlMappingTrieKey(int idx, int p) : scheme_wks_idx(idx), port(p) { };
     bool operator <(const UrlMappingTrieKey &rhs) const 
     {
-      if (url_type == rhs.url_type) {
+      if (scheme_wks_idx == rhs.scheme_wks_idx) {
         return (port < rhs.port);
       }
-      return (url_type < rhs.url_type);
+      return (scheme_wks_idx < rhs.scheme_wks_idx);
     };
   };
   
@@ -76,10 +76,16 @@ private:
   UrlMappingPathIndex(const UrlMappingPathIndex &rhs) { };
   UrlMappingPathIndex &operator =(const UrlMappingPathIndex &rhs) { return 
*this; }
 
-  inline UrlMappingTrie *_GetTrie(URL *url, URLType &url_type, int port) const
+  inline UrlMappingTrie *_GetTrie(URL *url, int &idx, int port, bool search = 
true) const
   {
-    url_type = static_cast<URLType>(url->type_get());
-    UrlMappingGroup::const_iterator group_iter = 
m_tries.find(UrlMappingTrieKey(url_type, port));
+    idx = url->scheme_get_wksidx();
+    UrlMappingGroup::const_iterator group_iter;
+    if (search) { // normal search
+      group_iter = m_tries.find(UrlMappingTrieKey(idx, port));
+    } else { // return the first trie arbitrarily
+      Debug("UrlMappingPathIndex::_GetTrie", "Not performing search; will 
return first available trie");
+      group_iter = m_tries.begin();
+    }
     if (group_iter != m_tries.end()) {
       return group_iter->second;
     }

Modified: incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlRewrite.cc
URL: 
http://svn.apache.org/viewvc/incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlRewrite.cc?rev=921965&r1=921964&r2=921965&view=diff
==============================================================================
--- incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlRewrite.cc 
(original)
+++ incubator/trafficserver/traffic/trunk/proxy/http2/remap/UrlRewrite.cc Thu 
Mar 11 18:05:33 2010
@@ -743,7 +743,8 @@ UrlRewrite::_tableLookup(InkHashTable * 
   ht_result = ink_hash_table_lookup(h_table, request_host, (void **) 
&ht_entry);
 
   if (likely(ht_result && ht_entry)) {
-    um = ht_entry->Search(request_url, request_port);
+    // for empty host don't do a normal search, get a mapping arbitrarily
+    um = ht_entry->Search(request_url, request_port, request_host_len ? true : 
false);
   }
   return um;
 }


Reply via email to