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;
}