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 2014/02/05 01:33:09 UTC
[15/26] git commit: TS-1919 Backing this change out,
since it's been -1'd.
TS-1919 Backing this change out, since it's been -1'd.
git revert did not handle this nicely, since the trees have
diverged so much. Instead, I simply made 5.0.x identical to
current "master".
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/db67432f
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/db67432f
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/db67432f
Branch: refs/heads/master
Commit: db67432fce4bc324856c17038269f327a9128efa
Parents: a44a12a
Author: Leif Hedstrom <zw...@apache.org>
Authored: Fri Jan 3 10:34:36 2014 -0700
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Fri Jan 3 10:34:36 2014 -0700
----------------------------------------------------------------------
CHANGES | 7 +-
iocore/cache/Cache.cc | 8 +-
iocore/cache/CacheRead.cc | 11 ++-
iocore/cache/I_Cache.h | 15 ++--
iocore/cache/P_CacheInternal.h | 46 +++++++-----
iocore/cache/P_CacheTest.h | 1 +
iocore/cluster/ClusterCache.cc | 26 ++++---
iocore/cluster/P_ClusterCacheInternal.h | 15 ++--
iocore/cluster/P_ClusterInline.h | 15 +++-
proxy/ICP.cc | 3 +-
proxy/Prefetch.cc | 19 +++--
proxy/Prefetch.h | 2 +-
proxy/http/HttpCacheSM.cc | 8 +-
proxy/http/HttpCacheSM.h | 9 ++-
proxy/http/HttpSM.cc | 16 +++-
proxy/http/HttpTransact.h | 2 +
proxy/http/HttpTransactCache.cc | 107 +++++++++++++++++++++++++--
proxy/http/HttpTransactCache.h | 61 +++++++++++++--
18 files changed, 278 insertions(+), 93 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 75890e1..2a0771c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,8 +1,5 @@
-*- coding: utf-8 -*-
-Changes with Apache Traffic Server 5.0.0
-
- *) [TS-1919] Eliminate CacheLookupHttpConfig. This breaks cluster
- compatibility, so all cluster nodes should be upgraded simultaneously.
+Changes with Apache Traffic Server 4.2.0
*) [TS-2467] traffic_shell doesn't work with tcl 8.6.
Author: Ben Aitchison <be...@meh.net.nz>
@@ -63,8 +60,6 @@ Changes with Apache Traffic Server 5.0.0
*) [TS-2432] Fix a race in aio_err_callblk.
-Changes with Apache Traffic Server 4.2.0
-
*) [TS-2251] Simplify LogBuffer reference counting.
*) [TS-2190] Remove cache.log from the cachurl plugin.
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/iocore/cache/Cache.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/Cache.cc b/iocore/cache/Cache.cc
index e3cf044..711b7c9 100644
--- a/iocore/cache/Cache.cc
+++ b/iocore/cache/Cache.cc
@@ -3413,15 +3413,15 @@ ink_cache_init(ModuleVersion v)
//----------------------------------------------------------------------------
Action *
CacheProcessor::open_read(Continuation *cont, URL *url, bool cluster_cache_local, CacheHTTPHdr *request,
- void *context, time_t pin_in_cache, CacheFragType type)
+ CacheLookupHttpConfig *params, time_t pin_in_cache, CacheFragType type)
{
#ifdef CLUSTER_CACHE
if (cache_clustering_enabled > 0 && !cluster_cache_local) {
- return open_read_internal(CACHE_OPEN_READ_LONG, cont, (MIOBuffer *) 0, url, request, context,
- (CacheKey *) 0, pin_in_cache, type, (char *) 0, 0);
+ return open_read_internal(CACHE_OPEN_READ_LONG, cont, (MIOBuffer *) 0,
+ url, request, params, (CacheKey *) 0, pin_in_cache, type, (char *) 0, 0);
}
#endif
- return caches[type]->open_read(cont, url, request, context, type);
+ return caches[type]->open_read(cont, url, request, params, type);
}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/iocore/cache/CacheRead.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/CacheRead.cc b/iocore/cache/CacheRead.cc
index e155304..5e8c6ac 100644
--- a/iocore/cache/CacheRead.cc
+++ b/iocore/cache/CacheRead.cc
@@ -90,7 +90,7 @@ Lcallreturn:
#ifdef HTTP_CACHE
Action *
Cache::open_read(Continuation * cont, CacheKey * key, CacheHTTPHdr * request,
- void * context, CacheFragType type, char *hostname, int host_len)
+ CacheLookupHttpConfig * params, CacheFragType type, char *hostname, int host_len)
{
if (!CacheProcessor::IsCacheReady(type)) {
@@ -116,7 +116,7 @@ Cache::open_read(Continuation * cont, CacheKey * key, CacheHTTPHdr * request,
CACHE_INCREMENT_DYN_STAT(c->base_stat + CACHE_STAT_ACTIVE);
c->request.copy_shallow(request);
c->frag_type = CACHE_FRAG_TYPE_HTTP;
- c->context = context;
+ c->params = params;
c->od = od;
}
if (!lock) {
@@ -242,7 +242,7 @@ CacheVC::openReadChooseWriter(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSE
return -ECACHE_NO_DOC;
}
if (cache_config_select_alternate) {
- alternate_index = HttpTransactCache::SelectFromAlternates(&vector, &request, static_cast<HttpConfigParams*>(context));
+ alternate_index = HttpTransactCache::SelectFromAlternates(&vector, &request, params);
if (alternate_index < 0)
return -ECACHE_ALT_MISS;
} else
@@ -967,8 +967,7 @@ CacheVC::openReadVecWrite(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSED */
dir_overwrite(&first_key, vol, &dir, &od->first_dir);
if (od->move_resident_alt)
dir_insert(&od->single_doc_key, vol, &od->single_doc_dir);
-
- int alt_ndx = HttpTransactCache::SelectFromAlternates(write_vector, &request, static_cast<HttpConfigParams*>(context));
+ int alt_ndx = HttpTransactCache::SelectFromAlternates(write_vector, &request, params);
vol->close_write(this);
if (alt_ndx >= 0) {
vector.clear();
@@ -1074,7 +1073,7 @@ CacheVC::openReadStartHead(int event, Event * e)
goto Ldone;
}
if (cache_config_select_alternate) {
- alternate_index = HttpTransactCache::SelectFromAlternates(&vector, &request, static_cast<HttpConfigParams*>(context));
+ alternate_index = HttpTransactCache::SelectFromAlternates(&vector, &request, params);
if (alternate_index < 0) {
err = ECACHE_ALT_MISS;
goto Ldone;
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/iocore/cache/I_Cache.h
----------------------------------------------------------------------
diff --git a/iocore/cache/I_Cache.h b/iocore/cache/I_Cache.h
index 63707e1..b89357f 100644
--- a/iocore/cache/I_Cache.h
+++ b/iocore/cache/I_Cache.h
@@ -53,6 +53,7 @@
struct CacheVC;
#ifdef HTTP_CACHE
+class CacheLookupHttpConfig;
class URL;
class HTTPHdr;
class HTTPInfo;
@@ -106,10 +107,14 @@ struct CacheProcessor:public Processor
#ifdef HTTP_CACHE
Action *lookup(Continuation *cont, URL *url, bool cluster_cache_local, bool local_only = false,
CacheFragType frag_type = CACHE_FRAG_TYPE_HTTP);
- inkcoreapi Action *open_read(Continuation *cont, URL *url, bool cluster_cache_local, CacheHTTPHdr *request,
- void *context, time_t pin_in_cache = (time_t) 0, CacheFragType frag_type = CACHE_FRAG_TYPE_HTTP);
- Action *open_read_buffer(Continuation *cont, MIOBuffer *buf, URL *url, CacheHTTPHdr *request,
- void *context, CacheFragType frag_type = CACHE_FRAG_TYPE_HTTP);
+ inkcoreapi Action *open_read(Continuation *cont, URL *url,
+ bool cluster_cache_local,
+ CacheHTTPHdr *request,
+ CacheLookupHttpConfig *params,
+ time_t pin_in_cache = (time_t) 0, CacheFragType frag_type = CACHE_FRAG_TYPE_HTTP);
+ Action *open_read_buffer(Continuation *cont, MIOBuffer *buf, URL *url,
+ CacheHTTPHdr *request,
+ CacheLookupHttpConfig *params, CacheFragType frag_type = CACHE_FRAG_TYPE_HTTP);
Action *open_write(Continuation *cont, int expected_size, URL *url, bool cluster_cache_local,
CacheHTTPHdr *request, CacheHTTPInfo *old_info,
time_t pin_in_cache = (time_t) 0, CacheFragType frag_type = CACHE_FRAG_TYPE_HTTP);
@@ -119,7 +124,7 @@ struct CacheProcessor:public Processor
Action *remove(Continuation *cont, URL *url, bool cluster_cache_local, CacheFragType frag_type = CACHE_FRAG_TYPE_HTTP);
Action *open_read_internal(int, Continuation *, MIOBuffer *, CacheURL *,
- CacheHTTPHdr *, void *,
+ CacheHTTPHdr *, CacheLookupHttpConfig *,
CacheKey *, time_t, CacheFragType type, char *hostname, int host_len);
#endif
Action *link(Continuation *cont, CacheKey *from, CacheKey *to, bool cluster_cache_local,
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/iocore/cache/P_CacheInternal.h
----------------------------------------------------------------------
diff --git a/iocore/cache/P_CacheInternal.h b/iocore/cache/P_CacheInternal.h
index 06bfdf4..f9a5845 100644
--- a/iocore/cache/P_CacheInternal.h
+++ b/iocore/cache/P_CacheInternal.h
@@ -424,7 +424,7 @@ struct CacheVC: public CacheVConnection
CacheHTTPInfo *info;
CacheHTTPInfoVector *write_vector;
#ifdef HTTP_CACHE
- void *context;
+ CacheLookupHttpConfig *params;
#endif
int header_len; // for communicating with agg_copy
int frag_len; // for communicating with agg_copy
@@ -1035,9 +1035,9 @@ struct Cache
Action *lookup(Continuation *cont, URL *url, CacheFragType type);
inkcoreapi Action *open_read(Continuation *cont, CacheKey *key,
CacheHTTPHdr *request,
- void *context, CacheFragType type, char *hostname, int host_len);
+ CacheLookupHttpConfig *params, CacheFragType type, char *hostname, int host_len);
Action *open_read(Continuation *cont, URL *url, CacheHTTPHdr *request,
- void *context, CacheFragType type);
+ CacheLookupHttpConfig *params, CacheFragType type);
Action *open_write(Continuation *cont, CacheKey *key,
CacheHTTPInfo *old_info, time_t pin_in_cache = (time_t) 0,
CacheKey *key1 = NULL,
@@ -1069,13 +1069,14 @@ inkcoreapi extern Cache *caches[NUM_CACHE_FRAG_TYPES];
#ifdef HTTP_CACHE
TS_INLINE Action *
-Cache::open_read(Continuation *cont, CacheURL *url, CacheHTTPHdr *request, void *context, CacheFragType type)
+Cache::open_read(Continuation *cont, CacheURL *url, CacheHTTPHdr *request,
+ CacheLookupHttpConfig *params, CacheFragType type)
{
INK_MD5 md5;
int len;
url->MD5_get(&md5);
const char *hostname = url->host_get(&len);
- return open_read(cont, &md5, request, context, type, (char *) hostname, len);
+ return open_read(cont, &md5, request, params, type, (char *) hostname, len);
}
TS_INLINE void
@@ -1178,8 +1179,9 @@ CacheProcessor::open_read(Continuation *cont, CacheKey *key, bool cluster_cache_
{
#ifdef CLUSTER_CACHE
if (cache_clustering_enabled > 0 && !cluster_cache_local) {
- return open_read_internal(CACHE_OPEN_READ, cont, (MIOBuffer *) 0, (CacheURL *) 0, (CacheHTTPHdr *) 0,
- (void *) 0, key, 0, frag_type, hostname, host_len);
+ return open_read_internal(CACHE_OPEN_READ, cont, (MIOBuffer *) 0,
+ (CacheURL *) 0, (CacheHTTPHdr *) 0,
+ (CacheLookupHttpConfig *) 0, key, 0, frag_type, hostname, host_len);
}
#endif
return caches[frag_type]->open_read(cont, key, frag_type, hostname, host_len);
@@ -1191,8 +1193,9 @@ CacheProcessor::open_read_buffer(Continuation *cont, MIOBuffer *buf ATS_UNUSED,
{
#ifdef CLUSTER_CACHE
if (cache_clustering_enabled > 0) {
- return open_read_internal(CACHE_OPEN_READ_BUFFER, cont, buf, (CacheURL *) 0, (CacheHTTPHdr *) 0,
- (void*) 0, key, 0, frag_type, hostname, host_len);
+ return open_read_internal(CACHE_OPEN_READ_BUFFER, cont, buf,
+ (CacheURL *) 0, (CacheHTTPHdr *) 0,
+ (CacheLookupHttpConfig *) 0, key, 0, frag_type, hostname, host_len);
}
#endif
return caches[frag_type]->open_read(cont, key, frag_type, hostname, host_len);
@@ -1273,17 +1276,17 @@ CacheProcessor::lookup(Continuation *cont, URL *url, bool cluster_cache_local, b
}
TS_INLINE Action *
-CacheProcessor::open_read_buffer(Continuation *cont, MIOBuffer *buf, URL *url, CacheHTTPHdr *request,
- void *context, CacheFragType type)
+CacheProcessor::open_read_buffer(Continuation *cont, MIOBuffer *buf,
+ URL *url, CacheHTTPHdr *request, CacheLookupHttpConfig *params, CacheFragType type)
{
(void) buf;
#ifdef CLUSTER_CACHE
if (cache_clustering_enabled > 0) {
- return open_read_internal(CACHE_OPEN_READ_BUFFER_LONG, cont, buf, url, request, context, (CacheKey *) 0,
- 0, type, (char *) 0, 0);
+ return open_read_internal(CACHE_OPEN_READ_BUFFER_LONG, cont, buf, url,
+ request, params, (CacheKey *) 0, 0, type, (char *) 0, 0);
}
#endif
- return caches[type]->open_read(cont, url, request, context, type);
+ return caches[type]->open_read(cont, url, request, params, type);
}
TS_INLINE Action *
@@ -1305,9 +1308,13 @@ CacheProcessor::open_write_buffer(Continuation * cont, MIOBuffer * buf, URL * ur
#ifdef CLUSTER_CACHE
TS_INLINE Action *
-CacheProcessor::open_read_internal(int opcode, Continuation *cont, MIOBuffer *buf, CacheURL *url, CacheHTTPHdr *request,
- void *context, CacheKey *key, time_t pin_in_cache, CacheFragType frag_type, char *hostname,
- int host_len)
+CacheProcessor::open_read_internal(int opcode,
+ Continuation *cont, MIOBuffer *buf,
+ CacheURL *url,
+ CacheHTTPHdr *request,
+ CacheLookupHttpConfig *params,
+ CacheKey *key,
+ time_t pin_in_cache, CacheFragType frag_type, char *hostname, int host_len)
{
INK_MD5 url_md5;
if ((opcode == CACHE_OPEN_READ_LONG) || (opcode == CACHE_OPEN_READ_BUFFER_LONG)) {
@@ -1318,11 +1325,12 @@ CacheProcessor::open_read_internal(int opcode, Continuation *cont, MIOBuffer *bu
ClusterMachine *m = cluster_machine_at_depth(cache_hash(url_md5));
if (m) {
- return Cluster_read(m, opcode, cont, buf, url, request, key, pin_in_cache, frag_type, hostname, host_len);
+ return Cluster_read(m, opcode, cont, buf, url,
+ request, params, key, pin_in_cache, frag_type, hostname, host_len);
} else {
if ((opcode == CACHE_OPEN_READ_LONG)
|| (opcode == CACHE_OPEN_READ_BUFFER_LONG)) {
- return caches[frag_type]->open_read(cont, &url_md5, request, context, frag_type, hostname, host_len);
+ return caches[frag_type]->open_read(cont, &url_md5, request, params, frag_type, hostname, host_len);
} else {
return caches[frag_type]->open_read(cont, key, frag_type, hostname, host_len);
}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/iocore/cache/P_CacheTest.h
----------------------------------------------------------------------
diff --git a/iocore/cache/P_CacheTest.h b/iocore/cache/P_CacheTest.h
index 2959ea3..8ef83ca 100644
--- a/iocore/cache/P_CacheTest.h
+++ b/iocore/cache/P_CacheTest.h
@@ -76,6 +76,7 @@ struct CacheTestSM : public RegressionSM {
MIOBuffer *buffer;
IOBufferReader *buffer_reader;
#ifdef HTTP_CACHE
+ CacheLookupHttpConfig params;
CacheHTTPInfo info;
char urlstr[1024];
#endif
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/iocore/cluster/ClusterCache.cc
----------------------------------------------------------------------
diff --git a/iocore/cluster/ClusterCache.cc b/iocore/cluster/ClusterCache.cc
index fc80ef5..8d4b6e5 100644
--- a/iocore/cluster/ClusterCache.cc
+++ b/iocore/cluster/ClusterCache.cc
@@ -1212,6 +1212,14 @@ cache_op_ClusterFunction(ClusterHandler * ch, void *data, int len)
moi_len -= res;
p += res;
ink_assert(moi_len > 0);
+ // Unmarshal CacheLookupHttpConfig
+ c->ic_params = new(CacheLookupHttpConfigAllocator.alloc())
+ CacheLookupHttpConfig();
+ res = c->ic_params->unmarshal(&c->ic_arena, (const char *) p, moi_len);
+ ink_assert(res > 0);
+
+ moi_len -= res;
+ p += res;
CacheKey key(msg->url_md5);
@@ -1231,10 +1239,9 @@ cache_op_ClusterFunction(ClusterHandler * ch, void *data, int len)
memcpy(c->ic_hostname->data(), hostname, host_len);
}
- c->http_config_params = HttpConfig::acquire();
Cache *call_cache = caches[c->frag_type];
Action *a = call_cache->open_read(c, &key, &c->ic_request,
- c->http_config_params,
+ c->ic_params,
c->frag_type, hostname, host_len);
// Get rid of purify warnings since 'c' can be freed by open_read.
if (a != ACTION_RESULT_DONE) {
@@ -1873,21 +1880,22 @@ struct retryDisposeOfDataBuffer:public Continuation
{
CacheContinuation *c;
- int handleRetryEvent(int event, Event * e) {
+ int handleRetryEvent(int event, Event * e)
+ {
if (CacheContinuation::handleDisposeEvent(event, c) == EVENT_DONE) {
delete this;
- return EVENT_DONE;
- } else {
+ return EVENT_DONE;
+ } else
+ {
e->schedule_in(HRTIME_MSECONDS(10));
return EVENT_CONT;
}
}
-
retryDisposeOfDataBuffer(CacheContinuation * cont)
- : Continuation(new_ProxyMutex()), c(cont) {
- SET_HANDLER((rtryDisOfDBufHandler) &retryDisposeOfDataBuffer::handleRetryEvent);
+: Continuation(new_ProxyMutex()), c(cont) {
+ SET_HANDLER((rtryDisOfDBufHandler)
+ & retryDisposeOfDataBuffer::handleRetryEvent);
}
-
};
//////////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/iocore/cluster/P_ClusterCacheInternal.h
----------------------------------------------------------------------
diff --git a/iocore/cluster/P_ClusterCacheInternal.h b/iocore/cluster/P_ClusterCacheInternal.h
index 907d6f5..8b62d44 100644
--- a/iocore/cluster/P_ClusterCacheInternal.h
+++ b/iocore/cluster/P_ClusterCacheInternal.h
@@ -30,7 +30,6 @@
#define __P_CLUSTERCACHEINTERNAL_H__
#include "P_ClusterCache.h"
#include "I_OneWayTunnel.h"
-#include "HttpConfig.h"
//
// Compilation Options
@@ -165,10 +164,10 @@ struct CacheContinuation:public Continuation
Arena ic_arena;
CacheHTTPHdr ic_request;
CacheHTTPHdr ic_response;
- HttpConfigParams *http_config_params;
+ CacheLookupHttpConfig *ic_params;
CacheHTTPInfo ic_old_info;
CacheHTTPInfo ic_new_info;
- Ptr<IOBufferData> ic_hostname;
+ Ptr<IOBufferData> ic_hostname;
int ic_hostname_len;
// debugging
@@ -247,11 +246,11 @@ struct CacheContinuation:public Continuation
if (cache_vc_info.valid()) {
cache_vc_info.destroy();
}
- if (http_config_params) {
- HttpConfig::release(http_config_params);
- http_config_params = 0;
+ // Deallocate unmarshaled data
+ if (ic_params) {
+ delete ic_params;
+ ic_params = 0;
}
-
if (ic_request.valid()) {
ic_request.clear();
}
@@ -312,7 +311,7 @@ CacheContinuation():
lookup_open_write_vc_event(0),
ic_arena(),
ic_request(),
- ic_response(), http_config_params(0), ic_old_info(), ic_new_info(), ic_hostname_len(0), cache_op_ClusterFunction(0) {
+ ic_response(), ic_params(0), ic_old_info(), ic_new_info(), ic_hostname_len(0), cache_op_ClusterFunction(0) {
token.clear();
SET_HANDLER((CacheContHandler) & CacheContinuation::remoteOpEvent);
}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/iocore/cluster/P_ClusterInline.h
----------------------------------------------------------------------
diff --git a/iocore/cluster/P_ClusterInline.h b/iocore/cluster/P_ClusterInline.h
index 75fa571..c653956 100644
--- a/iocore/cluster/P_ClusterInline.h
+++ b/iocore/cluster/P_ClusterInline.h
@@ -59,10 +59,13 @@ Cluster_lookup(Continuation * cont, CacheKey * key, CacheFragType frag_type, cha
}
inline Action *
-Cluster_read(ClusterMachine * owner_machine, int opcode, Continuation * cont, MIOBuffer * buf, CacheURL * url,
- CacheHTTPHdr * request, CacheKey * key, time_t pin_in_cache, CacheFragType frag_type, char *hostname,
- int host_len)
+Cluster_read(ClusterMachine * owner_machine, int opcode,
+ Continuation * cont, MIOBuffer * buf,
+ CacheURL * url, CacheHTTPHdr * request,
+ CacheLookupHttpConfig * params, CacheKey * key,
+ time_t pin_in_cache, CacheFragType frag_type, char *hostname, int host_len)
{
+ (void) params;
if (clusterProcessor.disable_remote_cluster_ops(owner_machine)) {
Action a;
a = cont;
@@ -90,6 +93,7 @@ Cluster_read(ClusterMachine * owner_machine, int opcode, Continuation * cont, MI
url_hostname = url->host_get(&url_hlen);
len += request->m_heap->marshal_length();
+ len += params->marshal_length();
len += url_hlen;
if ((flen + len) > DEFAULT_MAX_BUFFER_SIZE) // Bound marshalled data
@@ -106,7 +110,10 @@ Cluster_read(ClusterMachine * owner_machine, int opcode, Continuation * cont, MI
}
data += res;
cur_len -= res;
-
+ if ((res = params->marshal(data, cur_len)) < 0)
+ goto err_exit;
+ data += res;
+ cur_len -= res;
memcpy(data, url_hostname, url_hlen);
CacheOpArgs_General readArgs;
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/ICP.cc
----------------------------------------------------------------------
diff --git a/proxy/ICP.cc b/proxy/ICP.cc
index 9450ec4..8124a44 100644
--- a/proxy/ICP.cc
+++ b/proxy/ICP.cc
@@ -43,6 +43,7 @@
#include "BaseManager.h"
#include "HdrUtils.h"
+extern CacheLookupHttpConfig global_cache_lookup_config;
HTTPHdr gclient_request;
//****************************************************************************
@@ -480,7 +481,7 @@ ICPPeerReadCont::ICPPeerQueryCont(int /* event ATS_UNUSED */, Event * /* e ATS_U
// cache clustering is not used with stale lookup.
//////////////////////////////////////////////////////////////
a = cacheProcessor.open_read(this, &_state->_cachelookupURL, false,
- &gclient_request, NULL, (time_t) 0);
+ &gclient_request, &global_cache_lookup_config, (time_t) 0);
} else {
a = cacheProcessor.lookup(this, &_state->_cachelookupURL, false, _state->_cache_lookup_local);
}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/Prefetch.cc
----------------------------------------------------------------------
diff --git a/proxy/Prefetch.cc b/proxy/Prefetch.cc
index b402504..182e4c3 100644
--- a/proxy/Prefetch.cc
+++ b/proxy/Prefetch.cc
@@ -1131,11 +1131,6 @@ PrefetchBlaster::free()
delete request;
}
- if (http_config_params) {
- HttpConfig::release(http_config_params);
- http_config_params = 0;
- }
-
mutex.clear();
prefetchBlasterAllocator.free(this);
}
@@ -1489,7 +1484,7 @@ PrefetchBlaster::handleEvent(int event, void *data)
//if (cache_lookup_necessary) do:
initCacheLookupConfig();
- cacheProcessor.open_read(this, request->url_get(), false, request, http_config_params, 0);
+ cacheProcessor.open_read(this, request->url_get(), false, request, &cache_lookup_config, 0);
break;
}
@@ -1867,7 +1862,17 @@ PrefetchBlaster::invokeBlaster()
void
PrefetchBlaster::initCacheLookupConfig()
{
- this->http_config_params = HttpConfig::acquire();
+ //The look up parameters are intialized in the same as it is done
+ //in HttpSM::init(). Any changes there should come in here.
+ HttpConfigParams *http_config_params = HttpConfig::acquire();
+ cache_lookup_config.cache_global_user_agent_header = http_config_params->global_user_agent_header ? true : false;
+ cache_lookup_config.cache_enable_default_vary_headers =
+ http_config_params->cache_enable_default_vary_headers ? true : false;
+ cache_lookup_config.cache_vary_default_text = http_config_params->cache_vary_default_text;
+ cache_lookup_config.cache_vary_default_images = http_config_params->cache_vary_default_images;
+ cache_lookup_config.cache_vary_default_other = http_config_params->cache_vary_default_other;
+
+ HttpConfig::release(http_config_params);
}
static int
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/Prefetch.h
----------------------------------------------------------------------
diff --git a/proxy/Prefetch.h b/proxy/Prefetch.h
index ec8a9ec..34289fa 100644
--- a/proxy/Prefetch.h
+++ b/proxy/Prefetch.h
@@ -328,7 +328,7 @@ public:
PrefetchBlastData data_blast;
- HttpConfigParams *http_config_params;
+ CacheLookupHttpConfig cache_lookup_config;
//udp related:
uint32_t n_pkts_sent;
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/http/HttpCacheSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpCacheSM.cc b/proxy/http/HttpCacheSM.cc
index f5f05e7..7f82dd5 100644
--- a/proxy/http/HttpCacheSM.cc
+++ b/proxy/http/HttpCacheSM.cc
@@ -212,8 +212,8 @@ HttpCacheSM::do_cache_open_read()
}
//Initialising read-while-write-inprogress flag
this->readwhilewrite_inprogress = false;
- Action *action_handle = cacheProcessor.open_read(this, this->lookup_url, master_sm->t_state.cache_control.cluster_cache_local,
- this->read_request_hdr, this->read_config, this->read_pin_in_cache);
+ Action *action_handle = cacheProcessor.open_read(this, this->lookup_url, master_sm->t_state.cache_control.cluster_cache_local, this->read_request_hdr, this->read_config,
+ this->read_pin_in_cache);
if (action_handle != ACTION_RESULT_DONE) {
pending_action = action_handle;
@@ -231,13 +231,13 @@ HttpCacheSM::do_cache_open_read()
}
Action *
-HttpCacheSM::open_read(URL * url, HTTPHdr * hdr, HttpConfigParams *http_config_params, time_t pin_in_cache)
+HttpCacheSM::open_read(URL * url, HTTPHdr * hdr, CacheLookupHttpConfig * params, time_t pin_in_cache)
{
Action *act_return;
lookup_url = url;
read_request_hdr = hdr;
- read_config = http_config_params;
+ read_config = params;
read_pin_in_cache = pin_in_cache;
ink_assert(pending_action == NULL);
SET_HANDLER(&HttpCacheSM::state_cache_open_read);
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/http/HttpCacheSM.h
----------------------------------------------------------------------
diff --git a/proxy/http/HttpCacheSM.h b/proxy/http/HttpCacheSM.h
index e2af016..a6b40a9 100644
--- a/proxy/http/HttpCacheSM.h
+++ b/proxy/http/HttpCacheSM.h
@@ -42,6 +42,7 @@
class HttpSM;
class HttpCacheSM;
+class CacheLookupHttpConfig;
struct HttpCacheAction:public Action
{
@@ -66,10 +67,10 @@ public:
captive_action.init(this);
}
- Action *open_read(URL * url, HTTPHdr * hdr, HttpConfigParams * http_config_params, time_t pin_in_cache);
+ Action *open_read(URL * url, HTTPHdr * hdr, CacheLookupHttpConfig * params, time_t pin_in_cache);
- Action *open_write(URL * url, HTTPHdr * request, CacheHTTPInfo * old_info, time_t pin_in_cache, bool retry,
- bool allow_multiple);
+ Action *open_write(URL * url,
+ HTTPHdr * request, CacheHTTPInfo * old_info, time_t pin_in_cache, bool retry, bool allow_multiple);
CacheVConnection *cache_read_vc;
CacheVConnection *cache_write_vc;
@@ -157,7 +158,7 @@ private:
// Open read parameters
int open_read_tries;
HTTPHdr *read_request_hdr;
- HttpConfigParams *read_config;
+ CacheLookupHttpConfig *read_config;
time_t read_pin_in_cache;
// Open write parameters
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/http/HttpSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index fbf9dd4..df9dac5 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -405,6 +405,20 @@ HttpSM::init()
// Simply point to the global config for the time being, no need to copy this
// entire struct if nothing is going to change it.
t_state.txn_conf = &t_state.http_config_param->oride;
+
+ // update the cache info config structure so that
+ // selection from alternates happens correctly.
+ t_state.cache_info.config.cache_global_user_agent_header = t_state.http_config_param->global_user_agent_header ? true : false;
+ t_state.cache_info.config.ignore_accept_mismatch = t_state.http_config_param->ignore_accept_mismatch;
+ t_state.cache_info.config.ignore_accept_language_mismatch = t_state.http_config_param->ignore_accept_language_mismatch ;
+ t_state.cache_info.config.ignore_accept_encoding_mismatch = t_state.http_config_param->ignore_accept_encoding_mismatch;
+ t_state.cache_info.config.ignore_accept_charset_mismatch = t_state.http_config_param->ignore_accept_charset_mismatch;
+ t_state.cache_info.config.cache_enable_default_vary_headers = t_state.http_config_param->cache_enable_default_vary_headers ? true : false;
+
+ t_state.cache_info.config.cache_vary_default_text = t_state.http_config_param->cache_vary_default_text;
+ t_state.cache_info.config.cache_vary_default_images = t_state.http_config_param->cache_vary_default_images;
+ t_state.cache_info.config.cache_vary_default_other = t_state.http_config_param->cache_vary_default_other;
+
t_state.init();
t_state.srv_lookup = hostdb_srv_enabled;
@@ -4278,7 +4292,7 @@ HttpSM::do_cache_lookup_and_read()
DebugSM("http_seq", "[HttpSM::do_cache_lookup_and_read] [%" PRId64 "] Issuing cache lookup for URL %s", sm_id, c_url->string_get(&t_state.arena));
Action *cache_action_handle = cache_sm.open_read(c_url,
&t_state.hdr_info.client_request,
- t_state.http_config_param,
+ &(t_state.cache_info.config),
(time_t) ((t_state.cache_control.pin_in_cache_for < 0) ?
0 : t_state.cache_control.pin_in_cache_for));
//
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/http/HttpTransact.h
----------------------------------------------------------------------
diff --git a/proxy/http/HttpTransact.h b/proxy/http/HttpTransact.h
index 1232aca..ad3152b 100644
--- a/proxy/http/HttpTransact.h
+++ b/proxy/http/HttpTransact.h
@@ -636,6 +636,7 @@ public:
HTTPInfo *second_object_read;
HTTPInfo object_store;
HTTPInfo transform_store;
+ CacheLookupHttpConfig config;
CacheDirectives directives;
int open_read_retries;
int open_write_retries;
@@ -655,6 +656,7 @@ public:
second_object_read(NULL),
object_store(),
transform_store(),
+ config(),
directives(),
open_read_retries(0),
open_write_retries(0),
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/http/HttpTransactCache.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpTransactCache.cc b/proxy/http/HttpTransactCache.cc
index ebde9cc..1b0fc04 100644
--- a/proxy/http/HttpTransactCache.cc
+++ b/proxy/http/HttpTransactCache.cc
@@ -32,6 +32,10 @@
#include "Error.h"
#include "InkErrno.h"
+ClassAllocator<CacheLookupHttpConfig> CacheLookupHttpConfigAllocator("CacheLookupHttpConfigAllocator");
+
+CacheLookupHttpConfig global_cache_lookup_config;
+
/**
Find the pointer and length of an etag, after stripping off any leading
"W/" prefix, and surrounding double quotes.
@@ -161,22 +165,21 @@ is_empty(char *s)
*/
int
-HttpTransactCache::SelectFromAlternates(CacheHTTPInfoVector * cache_vector, HTTPHdr * client_request,
- HttpConfigParams * http_config_params)
+HttpTransactCache::SelectFromAlternates(CacheHTTPInfoVector * cache_vector,
+ HTTPHdr * client_request, CacheLookupHttpConfig * http_config_params)
{
time_t current_age, best_age = NUM_SECONDS_IN_ONE_YEAR;
time_t t_now = 0;
int best_index = -1;
float best_Q = -1.0;
float unacceptable_Q = 0.0;
- int alt_count = cache_vector->count();
- // TODO: for ICP we also want to exit here with a return 0, it's what the
- // old code implied.
+ int alt_count = cache_vector->count();
if (alt_count == 0) {
return -1;
}
+
Debug("http_match", "[SelectFromAlternates] # alternates = %d", alt_count);
Debug("http_seq", "[SelectFromAlternates] %d alternates for this cached doc", alt_count);
if (diags->on("http_alts")) {
@@ -184,6 +187,9 @@ HttpTransactCache::SelectFromAlternates(CacheHTTPInfoVector * cache_vector, HTTP
fprintf(stderr, "[alts] There are %d alternates for this request header.\n", alt_count);
RELEASE_PRINT_LOCK()
}
+ // used by ICP to bypass this function
+ if (http_config_params == &global_cache_lookup_config)
+ return 0;
if (!client_request->valid()) {
return 0;
@@ -290,7 +296,7 @@ HttpTransactCache::SelectFromAlternates(CacheHTTPInfoVector * cache_vector, HTTP
*/
float
-HttpTransactCache::calculate_quality_of_match(HttpConfigParams * http_config_param,
+HttpTransactCache::calculate_quality_of_match(CacheLookupHttpConfig * http_config_param,
HTTPHdr * client_request,
HTTPHdr * obj_client_request,
HTTPHdr * obj_origin_server_response)
@@ -1153,7 +1159,7 @@ language_wildcard:
*/
Variability_t
-HttpTransactCache::CalcVariability(HttpConfigParams * http_config_params, HTTPHdr * client_request,
+HttpTransactCache::CalcVariability(CacheLookupHttpConfig * http_config_params, HTTPHdr * client_request,
HTTPHdr * obj_client_request, HTTPHdr * obj_origin_server_response)
{
ink_assert(http_config_params != NULL);
@@ -1235,7 +1241,7 @@ HttpTransactCache::CalcVariability(HttpConfigParams * http_config_params, HTTPHd
// we should ignore Vary: User-Agent even if 'proxy.config.cache.vary_on_user_agent' //
// is 1. Actually the 'proxy.config.cache.vary_on_user_agent' is useless in such case //
///////////////////////////////////////////////////////////////////////////////////////
- if (http_config_params->global_user_agent_header &&
+ if (http_config_params->cache_global_user_agent_header &&
!strcasecmp((char *) field->str, "User-Agent"))
continue;
@@ -1477,3 +1483,88 @@ L1:
return response->status_get();
}
+
+
+/*---------------------------------------------------
+ * class CacheLookupHttpConfig
+ *---------------------------------------------------*/
+int
+CacheLookupHttpConfig::marshal_length()
+{
+ int len = (int) sizeof(int32_t);
+ len += (cache_vary_default_text ? strlen(cache_vary_default_text) + 1 : 1);
+ len += (cache_vary_default_images ? strlen(cache_vary_default_images) + 1 : 1);
+ len += (cache_vary_default_other ? strlen(cache_vary_default_other) + 1 : 1);
+ return len;
+}
+
+int
+CacheLookupHttpConfig::marshal(char *buf, int length)
+{
+ int32_t i32_tmp;
+ char *p = buf;
+ int len;
+
+ if ((length -= sizeof(int32_t)) < 0)
+ return -1;
+
+ i32_tmp = (int32_t) cache_enable_default_vary_headers;
+ memcpy(p, &i32_tmp, sizeof(int32_t));
+ p += sizeof(int32_t);
+
+ len = (cache_vary_default_text ? strlen(cache_vary_default_text) + 1 : 1);
+ if ((length -= len) < 0)
+ return -1;
+ ink_strlcpy(p, (cache_vary_default_text ? cache_vary_default_text : ""), length);
+ p += len;
+
+ len = (cache_vary_default_images ? strlen(cache_vary_default_images) + 1 : 1);
+ if ((length -= len) < 0)
+ return -1;
+ ink_strlcpy(p, (cache_vary_default_images ? cache_vary_default_images : ""), length);
+ p += len;
+
+ len = (cache_vary_default_other ? strlen(cache_vary_default_other) + 1 : 1);
+ if ((length -= len) < 0)
+ return -1;
+ ink_strlcpy(p, (cache_vary_default_other ? cache_vary_default_other : ""), length);
+ p += len;
+
+ return (p - buf);
+}
+
+int
+CacheLookupHttpConfig::unmarshal(Arena * arena, const char *buf, int buflen)
+{
+ const char *p = buf;
+ int length = buflen;
+ int len;
+ int32_t i32_tmp;
+
+ if ((length -= sizeof(int32_t)) < 0)
+ return -1;
+
+ memcpy(&i32_tmp, p, sizeof(int32_t));
+ cache_enable_default_vary_headers = (bool) i32_tmp;
+ p += sizeof(int32_t);
+
+ len = strlen(p) + 1;
+ if ((length -= len) < 0)
+ return -1;
+ cache_vary_default_text = arena->str_store(((len == 2) ? "" : p), len - 1);
+ p += len;
+
+ len = strlen(p) + 1;
+ if ((length -= len) < 0)
+ return -1;
+ cache_vary_default_images = arena->str_store(((len == 2) ? "" : p), len - 1);
+ p += len;
+
+ len = strlen(p) + 1;
+ if ((length -= len) < 0)
+ return -1;
+ cache_vary_default_other = arena->str_store(((len == 2) ? "" : p), len - 1);
+ p += len;
+
+ return (p - buf);
+}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/db67432f/proxy/http/HttpTransactCache.h
----------------------------------------------------------------------
diff --git a/proxy/http/HttpTransactCache.h b/proxy/http/HttpTransactCache.h
index 90c5614..bd6e9bd 100644
--- a/proxy/http/HttpTransactCache.h
+++ b/proxy/http/HttpTransactCache.h
@@ -35,6 +35,54 @@
struct CacheHTTPInfoVector;
+class CacheLookupHttpConfig
+{
+public:
+ bool cache_global_user_agent_header; // 'global' user agent flag (don't need to marshal/unmarshal)
+ bool cache_enable_default_vary_headers;
+ unsigned ignore_accept_mismatch;
+ unsigned ignore_accept_language_mismatch;
+ unsigned ignore_accept_encoding_mismatch;
+ unsigned ignore_accept_charset_mismatch;
+ char *cache_vary_default_text;
+ char *cache_vary_default_images;
+ char *cache_vary_default_other;
+
+ inkcoreapi int marshal_length();
+ inkcoreapi int marshal(char *buf, int length);
+ int unmarshal(Arena * arena, const char *buf, int length);
+
+ CacheLookupHttpConfig():
+ cache_global_user_agent_header(false),
+ cache_enable_default_vary_headers(false),
+ ignore_accept_mismatch(0),
+ ignore_accept_language_mismatch(0),
+ ignore_accept_encoding_mismatch(0),
+ ignore_accept_charset_mismatch(0),
+ cache_vary_default_text(NULL), cache_vary_default_images(NULL), cache_vary_default_other(NULL)
+ { }
+
+ void *operator new(size_t size, void *mem);
+ void operator delete(void *mem);
+};
+
+extern ClassAllocator<CacheLookupHttpConfig> CacheLookupHttpConfigAllocator;
+// this is a global CacheLookupHttpConfig used to bypass SelectFromAlternates
+extern CacheLookupHttpConfig global_cache_lookup_config;
+
+inline void *
+CacheLookupHttpConfig::operator new(size_t size, void *mem)
+{
+ (void) size;
+ return mem;
+}
+
+inline void
+CacheLookupHttpConfig::operator delete(void *mem)
+{
+ CacheLookupHttpConfigAllocator.free((CacheLookupHttpConfig *) mem);
+}
+
enum Variability_t
{
VARIABILITY_NONE = 0,
@@ -49,8 +97,6 @@ enum ContentEncoding
};
-struct HttpConfigParams;
-
class HttpTransactCache
{
public:
@@ -59,9 +105,10 @@ public:
// content negotiation support //
/////////////////////////////////
- static int SelectFromAlternates(CacheHTTPInfoVector * cache_vector_data, HTTPHdr * client_request, HttpConfigParams* http_config_params);
+ static int SelectFromAlternates(CacheHTTPInfoVector * cache_vector_data,
+ HTTPHdr * client_request, CacheLookupHttpConfig * cache_lookup_http_config_params);
- static float calculate_quality_of_match(HttpConfigParams * http_config_params, HTTPHdr * client_request, // in
+ static float calculate_quality_of_match(CacheLookupHttpConfig * http_config_params, HTTPHdr * client_request, // in
HTTPHdr * obj_client_request, // in
HTTPHdr * obj_origin_server_response); // in
@@ -84,8 +131,10 @@ public:
// variability & server negotiation routines //
///////////////////////////////////////////////
- static Variability_t CalcVariability(HttpConfigParams * http_config_params, HTTPHdr * client_request,
- HTTPHdr * obj_client_request, HTTPHdr * obj_origin_server_response );
+ static Variability_t CalcVariability(CacheLookupHttpConfig * http_config_params, HTTPHdr * client_request, // in
+ HTTPHdr * obj_client_request, // in
+ HTTPHdr * obj_origin_server_response // in
+ );
static HTTPStatus match_response_to_request_conditionals(HTTPHdr * ua_request, HTTPHdr * c_response);