Repository: trafficserver Updated Branches: refs/heads/5.1.x 0bfee488f -> afa93fa92
ats_speed: upgrade from 1.7.30.4 to 1.8.31.4 Upgrade to the latest & greatest PSOL version Fixes TS-2993 Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/afa93fa9 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/afa93fa9 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/afa93fa9 Branch: refs/heads/5.1.x Commit: afa93fa9277f0cab6446b46b782971c88bfdb8ef Parents: 0bfee48 Author: Otto van der Schaaf <[email protected]> Authored: Tue Aug 12 05:09:45 2014 +0200 Committer: Alan M. Carroll <[email protected]> Committed: Thu Aug 21 09:48:41 2014 -0500 ---------------------------------------------------------------------- plugins/experimental/ats_speed/Makefile | 13 +-- .../ats_speed/ats_beacon_intercept.cc | 2 + .../experimental/ats_speed/ats_demo_filter.cc | 90 -------------------- .../experimental/ats_speed/ats_demo_filter.h | 65 -------------- .../ats_speed/ats_process_context.cc | 6 +- .../ats_speed/ats_process_context.h | 3 +- .../ats_speed/ats_resource_intercept.cc | 35 ++------ .../ats_speed/ats_rewrite_driver_factory.cc | 16 +++- .../ats_speed/ats_rewrite_driver_factory.h | 5 +- .../ats_speed/ats_rewrite_options.cc | 1 - plugins/experimental/ats_speed/ats_speed.cc | 14 ++- 11 files changed, 45 insertions(+), 205 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/Makefile ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/Makefile b/plugins/experimental/ats_speed/Makefile index f76c334..7498b2b 100644 --- a/plugins/experimental/ats_speed/Makefile +++ b/plugins/experimental/ats_speed/Makefile @@ -52,19 +52,20 @@ INC =-I$(MOD_PAGESPEED_DIR)\ -I$(MOD_PAGESPEED_DIR)out/$(BUILDTYPE)/obj/gen\ -I$(MOD_PAGESPEED_DIR)out/$(BUILDTYPE)/obj/gen/protoc_out/instaweb -PSOL_LIBS = $(PAGESPEED_OUT)pagespeed_automatic.a $(PAGESPEED_OUT)libserf.a $(PAGESPEED_OUT)libaprutil.a $(PAGESPEED_OUT)libapr.a +PSOL_LIBS = $(PAGESPEED_OUT)pagespeed_automatic.a +#PSOL_LIBS = $(PAGESPEED_OUT)pagespeed_automatic.a $(PAGESPEED_OUT)libserf.a $(PAGESPEED_OUT)libaprutil.a $(PAGESPEED_OUT)libapr.a %.so: psol %.cc # https://github.com/pagespeed/ngx_pagespeed/issues/433: it would be nice to have -Wall -Werror, only suppressing when needed. - g++ $(INC) -shared -o ats_speed.so -g -pipe -O3 -fpic $(MOD_PAGESPEED_DIR)/out/$(BUILDTYPE)/obj/gen/data2c_out/instaweb/net/instaweb/apache/install/mod_pagespeed_example/*.cc $(MOD_PAGESPEED_DIR)/net/instaweb/system/*.cc *.cc -lstdc++ -lstdc++ -lpthread $(PSOL_LIBS) -lrt + g++ $(INC) -shared -o ats_speed.so -g -pipe -O3 -fpic *.cc -lstdc++ -lstdc++ -lpthread $(PSOL_LIBS) -lrt all: psol gzip/gzip.so ats_speed.so -1.7.30.4.tar.gz: - wget --no-check-certificate https://dl.google.com/dl/page-speed/psol/1.7.30.4.tar.gz +1.8.31.4.tar.gz: + wget --no-check-certificate https://dl.google.com/dl/page-speed/psol/1.8.31.4.tar.gz -psol/: 1.7.30.4.tar.gz - tar -xzvf 1.7.30.4.tar.gz +psol/: 1.8.31.4.tar.gz + tar -xzvf 1.8.31.4.tar.gz gzip/gzip.so: cd gzip && make http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_beacon_intercept.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_beacon_intercept.cc b/plugins/experimental/ats_speed/ats_beacon_intercept.cc index fc96933..9b14244 100644 --- a/plugins/experimental/ats_speed/ats_beacon_intercept.cc +++ b/plugins/experimental/ats_speed/ats_beacon_intercept.cc @@ -249,6 +249,8 @@ processRequest(InterceptCtx *cont_data) { SystemRequestContext* system_request_context = new SystemRequestContext(server_context->thread_system()->NewMutex(), server_context->timer(), + // TODO(oschaaf): determine these for real. + "www.foo.com", 80, "127.0.0.1"); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_demo_filter.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_demo_filter.cc b/plugins/experimental/ats_speed/ats_demo_filter.cc deleted file mode 100644 index 2fc3c32..0000000 --- a/plugins/experimental/ats_speed/ats_demo_filter.cc +++ /dev/null @@ -1,90 +0,0 @@ -/** @file - - A brief file description - - @section license License - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "net/instaweb/rewriter/public/add_head_filter.h" -#include "net/instaweb/htmlparse/public/html_parse.h" -#include "net/instaweb/htmlparse/public/html_element.h" -#include <string> - -#include <ts/ts.h> -#include "ats_demo_filter.h" - -namespace net_instaweb { - const char* AtsDemoFilter::kPoweredByHtml = - "<div id=\"weamp_poweredby\" style=\"bottom:0; height:30px; left:0; width:100%;\">" - "<div style=\"line-height:30px; margin:0 auto; width:100%; text-align:center; \">" - "<a target=\"_blank\" title=\"Google PageSpeed optimization demo brought to you by We-Amp\" href=\"http://www.we-amp.com/\">Google PageSpeed optimization demo by We-Amp</a>" - "</div>" - "</div>"; - - - -AtsDemoFilter::AtsDemoFilter(HtmlParse* parser, bool banner) : - parser_(parser), - banner_(banner) -{ -} - -void AtsDemoFilter::StartElement(HtmlElement* element) { - if (banner_ && element->keyword() == HtmlName::kBody) { - HtmlNode* el = parser_->NewCharactersNode(NULL, AtsDemoFilter::kPoweredByHtml); - parser_->InsertNodeBeforeCurrent(el); - } - - if (element->keyword() == HtmlName::kA || element->keyword() == HtmlName::kBase - || element->keyword() == HtmlName::kForm|| element->keyword() == HtmlName::kImg - || element->keyword() == HtmlName::kLink || element->keyword() == HtmlName::kScript) { - HtmlElement::AttributeList* attributes = element->mutable_attributes(); - for (HtmlElement::AttributeIterator i(attributes->begin()); - i != attributes->end(); ++i) { - - HtmlElement::Attribute& attribute = *i; - if (attribute.keyword() == HtmlName::kAction || attribute.keyword() == HtmlName::kHref - || attribute.keyword() == HtmlName::kSrc) { - const char * attribute_value = NULL; - if ( attribute.DecodedValueOrNull() != NULL ) { - attribute_value = attribute.DecodedValueOrNull(); - } else { - attribute_value = attribute.escaped_value(); - } - - if ( attribute_value != NULL) { - GoogleUrl url( attribute_value ); - if (url.IsWebValid()) { - if (url.Host() == from_domain_) { - StringPiece scheme = url.Scheme(); - StringPiece host = to_domain_.c_str(); - StringPiece pathAndQuery = url.PathAndLeaf(); - GoogleString rewritten = StrCat(scheme,"://", host, pathAndQuery); - attribute.SetValue(rewritten.c_str()); - break; - } - } - } - } - } - } -} - - -} // namespace net_instaweb http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_demo_filter.h ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_demo_filter.h b/plugins/experimental/ats_speed/ats_demo_filter.h deleted file mode 100644 index 2b813b2..0000000 --- a/plugins/experimental/ats_speed/ats_demo_filter.h +++ /dev/null @@ -1,65 +0,0 @@ -/** @file - - A brief file description - - @section license License - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#ifndef ATS_DEMO_FILTER_H_ -#define ATS_DEMO_FILTER_H_ - -#include "base/basictypes.h" -#include "base/string_piece.h" -#include "net/instaweb/htmlparse/public/empty_html_filter.h" -#include "net/instaweb/util/public/atom.h" -#include "net/instaweb/htmlparse/public/html_parse.h" -#include "net/instaweb/htmlparse/public/html_element.h" -#include <string> - -using base::StringPiece; - -namespace net_instaweb { - - - - class AtsDemoFilter : public EmptyHtmlFilter { - public: - static const char* kPoweredByHtml; - - explicit AtsDemoFilter(HtmlParse* parser, bool banner); - virtual void StartElement(HtmlElement* element); - virtual const char* Name() const { return "AtsDemo"; } - // TODO: move to constructor - void set_domains(const StringPiece& to_domain, const StringPiece& from_domain) - { - to_domain.CopyToString(&to_domain_); - from_domain.CopyToString(&from_domain_); - } - - private: - std::string to_domain_; - std::string from_domain_; - HtmlParse* parser_; - bool banner_; - DISALLOW_COPY_AND_ASSIGN(AtsDemoFilter); - }; - -} // namespace net_instaweb - -#endif // ATS_DEMO_FILTER_H_ http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_process_context.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_process_context.cc b/plugins/experimental/ats_speed/ats_process_context.cc index 9a131dc..f3ca481 100644 --- a/plugins/experimental/ats_speed/ats_process_context.cc +++ b/plugins/experimental/ats_speed/ats_process_context.cc @@ -35,10 +35,12 @@ namespace net_instaweb { -AtsProcessContext::AtsProcessContext() { + AtsProcessContext::AtsProcessContext() : ProcessContext() { AtsThreadSystem* ts = new AtsThreadSystem(); message_handler_.reset(new AtsMessageHandler(ts->NewMutex())); - driver_factory_.reset(new AtsRewriteDriverFactory(ts)); + driver_factory_.reset( + new AtsRewriteDriverFactory( + *this, ts, ""/*hostname, not used*/, -1/*port, not used*/)); server_context_ = driver_factory()->MakeAtsServerContext(); AtsRewriteOptions* root_options_ = (AtsRewriteOptions*)driver_factory_->default_options(); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_process_context.h ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_process_context.h b/plugins/experimental/ats_speed/ats_process_context.h index 95dfbff..aa344b2 100644 --- a/plugins/experimental/ats_speed/ats_process_context.h +++ b/plugins/experimental/ats_speed/ats_process_context.h @@ -27,6 +27,7 @@ #include "net/instaweb/util/public/google_message_handler.h" #include "net/instaweb/util/public/message_handler.h" #include "net/instaweb/util/public/scoped_ptr.h" +#include "net/instaweb/rewriter/public/process_context.h" namespace net_instaweb { @@ -34,7 +35,7 @@ class AtsRewriteDriverFactory; class ProxyFetchFactory; class AtsServerContext; -class AtsProcessContext { +class AtsProcessContext : ProcessContext { public: explicit AtsProcessContext(); virtual ~AtsProcessContext(); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_resource_intercept.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_resource_intercept.cc b/plugins/experimental/ats_speed/ats_resource_intercept.cc index 5d96867..0afeae5 100644 --- a/plugins/experimental/ats_speed/ats_resource_intercept.cc +++ b/plugins/experimental/ats_speed/ats_resource_intercept.cc @@ -40,7 +40,7 @@ #include "net/instaweb/system/public/system_request_context.h" #include "net/instaweb/util/public/string_writer.h" -#include "net/instaweb/system/public/handlers.h" + using namespace net_instaweb; @@ -145,6 +145,7 @@ resource_intercept(TSCont cont, TSEvent event, void *edata) SystemRequestContext* system_request_context = new SystemRequestContext(server_context->thread_system()->NewMutex(), server_context->timer(), + "www.foo.com",// TODO(oschaaf): compute these 80, "127.0.0.1"); @@ -278,36 +279,14 @@ read_cache_header_callback(TSCont cont, TSEvent event, void *edata) const char* error_message = NULL; StringPiece request_uri_path = ctx->gurl->PathAndLeaf(); - if (ctx->gurl->PathSansQuery() == "/robots.txt") { + if (false && ctx->gurl->PathSansQuery() == "/robots.txt") { content_type = kContentTypeText; writer.Write("User-agent: *\n", server_context->message_handler()); writer.Write("Disallow: /\n", server_context->message_handler()); - } else if (ctx->gurl->PathSansQuery() == "/pagespeed_message") { - // TODO(oschaaf)... let's wait for a bit with this one. - } else if (ctx->gurl->PathSansQuery() == "/pagespeed_statistics" || ctx->gurl->PathSansQuery() == "/pagespeed_global_statistics") { - error_message = StatisticsHandler( - factory, - server_context, - NULL, // No SPDY-specific config in ats_pagespeed. - !factory->use_per_vhost_statistics() || StringCaseStartsWith( - request_uri_path, "/pagespeed_global_statistics"), - StringPiece(ctx->gurl->Query().as_string().c_str()), - &content_type, - &writer, - server_context->message_handler()); - } else if (ctx->gurl->PathSansLeaf() == "/ats_speed_static/") { - StringPiece file_contents; - if (server_context->static_asset_manager()->GetAsset( - request_uri_path.substr( - strlen("/ats_speed_static/")), - &file_contents, &content_type, &cache_control)) { - file_contents.CopyToString(&output); - } else { - error_message = "Static asset not found"; - } - } else if (ctx->gurl->PathSansQuery() == "/pagespeed_console") { - ConsoleHandler(server_context, server_context->config(), &writer, server_context->message_handler()); - } else { + } + + // TODO(oschaaf): /pagespeed_admin handling + else { // Optimized resource are highly cacheable (1 year expiry) // TODO(oschaaf): configuration TSHttpTxnRespCacheableSet(txn, 1); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_rewrite_driver_factory.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_rewrite_driver_factory.cc b/plugins/experimental/ats_speed/ats_rewrite_driver_factory.cc index 1c8ffb1..cf73ed3 100644 --- a/plugins/experimental/ats_speed/ats_rewrite_driver_factory.cc +++ b/plugins/experimental/ats_speed/ats_rewrite_driver_factory.cc @@ -60,9 +60,13 @@ namespace net_instaweb { - AtsRewriteDriverFactory::AtsRewriteDriverFactory(AtsThreadSystem* thread_system) - // TODO(oschaaf): fix hostname/port (?) - : SystemRewriteDriverFactory(thread_system, new PthreadSharedMem(), StringPiece("foohost"), 8080) + AtsRewriteDriverFactory::AtsRewriteDriverFactory( + const ProcessContext& process_context, + AtsThreadSystem* thread_system, + StringPiece hostname, int port) + : SystemRewriteDriverFactory(process_context, + thread_system, NULL /*default shared mem runtime*/, + "" /*hostname, not used*/, -1/*port, not used*/) , ats_message_handler_(new AtsMessageHandler(thread_system->NewMutex())) , ats_html_parse_message_handler_(new AtsMessageHandler(thread_system->NewMutex())) , use_per_vhost_statistics_(false) @@ -145,6 +149,12 @@ namespace net_instaweb { return options; } + ServerContext* AtsRewriteDriverFactory::NewDecodingServerContext() { + ServerContext* sc = new AtsServerContext(this); + InitStubDecodingServerContext(sc); + return sc; + } + void AtsRewriteDriverFactory::InitStats(Statistics* statistics) { // Init standard PSOL stats. SystemRewriteDriverFactory::InitStats(statistics); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_rewrite_driver_factory.h ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_rewrite_driver_factory.h b/plugins/experimental/ats_speed/ats_rewrite_driver_factory.h index 9aa5405..de18a28 100644 --- a/plugins/experimental/ats_speed/ats_rewrite_driver_factory.h +++ b/plugins/experimental/ats_speed/ats_rewrite_driver_factory.h @@ -52,7 +52,9 @@ namespace net_instaweb { class AtsRewriteDriverFactory : public SystemRewriteDriverFactory { public: - explicit AtsRewriteDriverFactory(AtsThreadSystem* thread_system); + explicit AtsRewriteDriverFactory(const ProcessContext& process_context, + AtsThreadSystem* thread_system, + StringPiece hostname, int port); virtual ~AtsRewriteDriverFactory(); virtual Hasher* NewHasher(); @@ -62,6 +64,7 @@ class AtsRewriteDriverFactory : public SystemRewriteDriverFactory { virtual Timer* DefaultTimer(); virtual NamedLockManager* DefaultLockManager(); virtual RewriteOptions* NewRewriteOptions(); + virtual ServerContext* NewDecodingServerContext(); virtual bool UseBeaconResultsInFilters() const { return true; http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_rewrite_options.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_rewrite_options.cc b/plugins/experimental/ats_speed/ats_rewrite_options.cc index 97a72ab..172db83 100644 --- a/plugins/experimental/ats_speed/ats_rewrite_options.cc +++ b/plugins/experimental/ats_speed/ats_rewrite_options.cc @@ -52,7 +52,6 @@ void AtsRewriteOptions::Init() { DCHECK(ats_properties_ != NULL) << "Call AtsRewriteOptions::Initialize() before construction"; InitializeOptions(ats_properties_); - statistics_handler_path_.set_default("/pagespeed_global_statistics"); } void AtsRewriteOptions::AddProperties() { http://git-wip-us.apache.org/repos/asf/trafficserver/blob/afa93fa9/plugins/experimental/ats_speed/ats_speed.cc ---------------------------------------------------------------------- diff --git a/plugins/experimental/ats_speed/ats_speed.cc b/plugins/experimental/ats_speed/ats_speed.cc index fd47dcf..7bde30c 100644 --- a/plugins/experimental/ats_speed/ats_speed.cc +++ b/plugins/experimental/ats_speed/ats_speed.cc @@ -42,7 +42,6 @@ #include "ats_speed.h" #include "ats_config.h" -#include "ats_demo_filter.h" #include "ats_header_utils.h" #include "ats_rewrite_options.h" #include "ats_log_message_handler.h" @@ -70,8 +69,8 @@ #include "net/instaweb/rewriter/public/process_context.h" #include "net/instaweb/rewriter/public/resource_fetch.h" #include "net/instaweb/rewriter/public/rewrite_driver.h" +#include "net/instaweb/rewriter/public/rewrite_query.h" #include "net/instaweb/rewriter/public/static_asset_manager.h" -#include "net/instaweb/system/public/handlers.h" #include "net/instaweb/public/global_constants.h" #include "net/instaweb/public/version.h" #include "net/instaweb/util/public/google_message_handler.h" @@ -196,11 +195,9 @@ RewriteOptions* ps_determine_request_options( // make cache key consistent for both lookup and storing in cache. // // Sets option from request headers and url. - ServerContext::OptionsBoolPair query_options_success = - server_context->GetQueryOptions(url, request_headers, - response_headers); - bool get_query_options_success = query_options_success.second; - if (!get_query_options_success) { + RewriteQuery rewrite_query; + if (!server_context->GetQueryOptions(url, request_headers, + response_headers, &rewrite_query)) { // Failed to parse query params or request headers. Treat this as if there // were no query params given. TSError("ps_route rerquest: parsing headers or query params failed."); @@ -209,7 +206,7 @@ RewriteOptions* ps_determine_request_options( // Will be NULL if there aren't any options set with query params or in // headers. - return query_options_success.first; + return rewrite_query.ReleaseOptions(); } bool ps_determine_options(ServerContext* server_context, @@ -456,6 +453,7 @@ ats_transform_init(TSCont contp, TransformCtx * ctx) SystemRequestContext* system_request_context = new SystemRequestContext(server_context->thread_system()->NewMutex(), server_context->timer(), + "www.foo.com", 80, "127.0.0.1");
