From 9cd5f3b19ca920b2c6addee929dab1864a1c612d Mon Sep 17 00:00:00 2001 From: Jeff Kaufman Date: Mon, 17 Dec 2012 10:57:18 -0500 Subject: [PATCH] request context: deal with changes in pagespeed's api The pagespeed api for handling logs has changed, we need to change with it in order to build against the latest pagespeed optimization libraries. Separately, a new test was added to the generic system test that depends on the property cache (insert_dns_prefetch). We've not ported the property cache yet, so this test will fail, and I've added it to the list of failing tests. --- src/ngx_base_fetch.cc | 7 ++++--- src/ngx_base_fetch.h | 3 ++- src/ngx_pagespeed.cc | 14 ++++++++++---- test/nginx_system_test.sh | 1 + 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/ngx_base_fetch.cc b/src/ngx_base_fetch.cc index e02b1aa70..b70dd003e 100644 --- a/src/ngx_base_fetch.cc +++ b/src/ngx_base_fetch.cc @@ -24,9 +24,10 @@ namespace net_instaweb { -NgxBaseFetch::NgxBaseFetch(ngx_http_request_t* r, int pipe_fd) - : request_(r), done_called_(false), last_buf_sent_(false), - pipe_fd_(pipe_fd) { +NgxBaseFetch::NgxBaseFetch(ngx_http_request_t* r, int pipe_fd, + const RequestContextPtr& request_ctx) + : AsyncFetch(request_ctx), request_(r), done_called_(false), + last_buf_sent_(false), pipe_fd_(pipe_fd) { if (pthread_mutex_init(&mutex_, NULL)) CHECK(0); PopulateRequestHeaders(); } diff --git a/src/ngx_base_fetch.h b/src/ngx_base_fetch.h index 992bad7c8..53091c456 100644 --- a/src/ngx_base_fetch.h +++ b/src/ngx_base_fetch.h @@ -45,7 +45,8 @@ namespace net_instaweb { class NgxBaseFetch : public AsyncFetch { public: - NgxBaseFetch(ngx_http_request_t* r, int pipe_fd); + NgxBaseFetch(ngx_http_request_t* r, int pipe_fd, + const RequestContextPtr& request_ctx); virtual ~NgxBaseFetch(); // Copies the request headers out of request_->headers_in->headers. diff --git a/src/ngx_pagespeed.cc b/src/ngx_pagespeed.cc index 44a62aeaf..1a7081c33 100644 --- a/src/ngx_pagespeed.cc +++ b/src/ngx_pagespeed.cc @@ -39,6 +39,7 @@ extern "C" { #include "ngx_base_fetch.h" #include "net/instaweb/automatic/public/proxy_fetch.h" +#include "net/instaweb/http/public/request_context.h" #include "net/instaweb/rewriter/public/furious_matcher.h" #include "net/instaweb/rewriter/public/process_context.h" #include "net/instaweb/rewriter/public/rewrite_driver.h" @@ -1054,7 +1055,10 @@ ps_create_request_context(ngx_http_request_t* r, bool is_resource_fetch) { // Deletes itself when HandleDone is called, which happens when we call Done() // on the proxy fetch below. - ctx->base_fetch = new net_instaweb::NgxBaseFetch(r, file_descriptors[1]); + ctx->base_fetch = new net_instaweb::NgxBaseFetch( + r, file_descriptors[1], + net_instaweb::RequestContextPtr(new net_instaweb::RequestContext( + cfg_s->server_context->thread_system()->NewMutex()))); // If null, that means use global options. net_instaweb::RewriteOptions* custom_options; @@ -1094,13 +1098,15 @@ ps_create_request_context(ngx_http_request_t* r, bool is_resource_fetch) { // rewrite drivers and so is faster because there's no wait to construct // them. Otherwise we have to build a new one every time. net_instaweb::RewriteDriver* driver; + if (custom_options == NULL) { - driver = cfg_s->server_context->NewRewriteDriver(); + driver = cfg_s->server_context->NewRewriteDriver( + ctx->base_fetch->request_context()); } else { // NewCustomRewriteDriver takes ownership of custom_options. - driver = cfg_s->server_context->NewCustomRewriteDriver(custom_options); + driver = cfg_s->server_context->NewCustomRewriteDriver( + custom_options, ctx->base_fetch->request_context()); } - driver->set_log_record(ctx->base_fetch->log_record()); // TODO(jefftk): FlushEarlyFlow would go here. diff --git a/test/nginx_system_test.sh b/test/nginx_system_test.sh index 452366ab8..ce2a5d092 100755 --- a/test/nginx_system_test.sh +++ b/test/nginx_system_test.sh @@ -48,6 +48,7 @@ PAGESPEED_EXPECTED_FAILURES=" ~compression is enabled for rewritten JS.~ ~convert_meta_tags~ ~regression test with same filtered input twice in combination~ + ~insert_dns_prefetch~ " source $SYSTEM_TEST_FILE