aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/channel
diff options
context:
space:
mode:
authorGravatar David Garcia Quintas <dgq@google.com>2015-09-08 16:01:09 -0700
committerGravatar David Garcia Quintas <dgq@google.com>2015-09-08 16:01:09 -0700
commit49dd250565d0632d1fdcc9abea8b689955dc8ce6 (patch)
tree4cf08f4aa416da9306b59ff84b84e324cabd60e4 /src/core/channel
parente4f7c2fd13b8e417ec04abcc06c162c607cadfd8 (diff)
parent8df85003f8a6d202c0b0f4506ced9e4f4204f30d (diff)
Merge branch 'master' of github.com:grpc/grpc into compression-accept-encoding
Diffstat (limited to 'src/core/channel')
-rw-r--r--src/core/channel/census_filter.c224
-rw-r--r--src/core/channel/census_filter.h44
-rw-r--r--src/core/channel/compress_filter.h2
-rw-r--r--src/core/channel/http_client_filter.c51
4 files changed, 9 insertions, 312 deletions
diff --git a/src/core/channel/census_filter.c b/src/core/channel/census_filter.c
deleted file mode 100644
index d996c3475e..0000000000
--- a/src/core/channel/census_filter.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include "src/core/channel/census_filter.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#include "src/core/channel/channel_stack.h"
-#include "src/core/channel/noop_filter.h"
-#include "src/core/statistics/census_interface.h"
-#include "src/core/statistics/census_rpc_stats.h"
-#include <grpc/support/alloc.h>
-#include <grpc/support/log.h>
-#include <grpc/support/slice.h>
-#include <grpc/support/time.h>
-
-typedef struct call_data {
- census_op_id op_id;
- census_rpc_stats stats;
- gpr_timespec start_ts;
-
- /* recv callback */
- grpc_stream_op_buffer* recv_ops;
- void (*on_done_recv)(void* user_data, int success);
- void* recv_user_data;
-} call_data;
-
-typedef struct channel_data {
- grpc_mdstr* path_str; /* pointer to meta data str with key == ":path" */
-} channel_data;
-
-static void init_rpc_stats(census_rpc_stats* stats) {
- memset(stats, 0, sizeof(census_rpc_stats));
- stats->cnt = 1;
-}
-
-static void extract_and_annotate_method_tag(grpc_stream_op_buffer* sopb,
- call_data* calld,
- channel_data* chand) {
- grpc_linked_mdelem* m;
- size_t i;
- for (i = 0; i < sopb->nops; i++) {
- grpc_stream_op* op = &sopb->ops[i];
- if (op->type != GRPC_OP_METADATA) continue;
- for (m = op->data.metadata.list.head; m != NULL; m = m->next) {
- if (m->md->key == chand->path_str) {
- gpr_log(GPR_DEBUG, "%s",
- (const char*)GPR_SLICE_START_PTR(m->md->value->slice));
- census_add_method_tag(calld->op_id, (const char*)GPR_SLICE_START_PTR(
- m->md->value->slice));
- }
- }
- }
-}
-
-static void client_mutate_op(grpc_call_element* elem,
- grpc_transport_stream_op* op) {
- call_data* calld = elem->call_data;
- channel_data* chand = elem->channel_data;
- if (op->send_ops) {
- extract_and_annotate_method_tag(op->send_ops, calld, chand);
- }
-}
-
-static void client_start_transport_op(grpc_call_element* elem,
- grpc_transport_stream_op* op) {
- call_data* calld = elem->call_data;
- GPR_ASSERT((calld->op_id.upper != 0) || (calld->op_id.lower != 0));
- client_mutate_op(elem, op);
- grpc_call_next_op(elem, op);
-}
-
-static void server_on_done_recv(void* ptr, int success) {
- grpc_call_element* elem = ptr;
- call_data* calld = elem->call_data;
- channel_data* chand = elem->channel_data;
- if (success) {
- extract_and_annotate_method_tag(calld->recv_ops, calld, chand);
- }
- calld->on_done_recv(calld->recv_user_data, success);
-}
-
-static void server_mutate_op(grpc_call_element* elem,
- grpc_transport_stream_op* op) {
- call_data* calld = elem->call_data;
- if (op->recv_ops) {
- /* substitute our callback for the op callback */
- calld->recv_ops = op->recv_ops;
- calld->on_done_recv = op->on_done_recv;
- calld->recv_user_data = op->recv_user_data;
- op->on_done_recv = server_on_done_recv;
- op->recv_user_data = elem;
- }
-}
-
-static void server_start_transport_op(grpc_call_element* elem,
- grpc_transport_stream_op* op) {
- call_data* calld = elem->call_data;
- GPR_ASSERT((calld->op_id.upper != 0) || (calld->op_id.lower != 0));
- server_mutate_op(elem, op);
- grpc_call_next_op(elem, op);
-}
-
-static void channel_op(grpc_channel_element* elem,
- grpc_channel_element* from_elem, grpc_channel_op* op) {
- switch (op->type) {
- case GRPC_TRANSPORT_CLOSED:
- /* TODO(hongyu): Annotate trace information for all calls of the channel
- */
- break;
- default:
- break;
- }
- grpc_channel_next_op(elem, op);
-}
-
-static void client_init_call_elem(grpc_call_element* elem,
- const void* server_transport_data,
- grpc_transport_stream_op* initial_op) {
- call_data* d = elem->call_data;
- GPR_ASSERT(d != NULL);
- init_rpc_stats(&d->stats);
- d->start_ts = gpr_now(GPR_CLOCK_REALTIME);
- d->op_id = census_tracing_start_op();
- if (initial_op) client_mutate_op(elem, initial_op);
-}
-
-static void client_destroy_call_elem(grpc_call_element* elem) {
- call_data* d = elem->call_data;
- GPR_ASSERT(d != NULL);
- census_record_rpc_client_stats(d->op_id, &d->stats);
- census_tracing_end_op(d->op_id);
-}
-
-static void server_init_call_elem(grpc_call_element* elem,
- const void* server_transport_data,
- grpc_transport_stream_op* initial_op) {
- call_data* d = elem->call_data;
- GPR_ASSERT(d != NULL);
- init_rpc_stats(&d->stats);
- d->start_ts = gpr_now(GPR_CLOCK_REALTIME);
- d->op_id = census_tracing_start_op();
- if (initial_op) server_mutate_op(elem, initial_op);
-}
-
-static void server_destroy_call_elem(grpc_call_element* elem) {
- call_data* d = elem->call_data;
- GPR_ASSERT(d != NULL);
- d->stats.elapsed_time_ms = gpr_timespec_to_micros(
- gpr_time_sub(gpr_now(GPR_CLOCK_REALTIME), d->start_ts));
- census_record_rpc_server_stats(d->op_id, &d->stats);
- census_tracing_end_op(d->op_id);
-}
-
-static void init_channel_elem(grpc_channel_element* elem,
- const grpc_channel_args* args, grpc_mdctx* mdctx,
- int is_first, int is_last) {
- channel_data* chand = elem->channel_data;
- GPR_ASSERT(chand != NULL);
- GPR_ASSERT(!is_first);
- GPR_ASSERT(!is_last);
- chand->path_str = grpc_mdstr_from_string(mdctx, ":path");
-}
-
-static void destroy_channel_elem(grpc_channel_element* elem) {
- channel_data* chand = elem->channel_data;
- GPR_ASSERT(chand != NULL);
- if (chand->path_str != NULL) {
- GRPC_MDSTR_UNREF(chand->path_str);
- }
-}
-
-const grpc_channel_filter grpc_client_census_filter = {
- client_start_transport_op,
- channel_op,
- sizeof(call_data),
- client_init_call_elem,
- client_destroy_call_elem,
- sizeof(channel_data),
- init_channel_elem,
- destroy_channel_elem,
- "census-client"};
-
-const grpc_channel_filter grpc_server_census_filter = {
- server_start_transport_op,
- channel_op,
- sizeof(call_data),
- server_init_call_elem,
- server_destroy_call_elem,
- sizeof(channel_data),
- init_channel_elem,
- destroy_channel_elem,
- "census-server"};
diff --git a/src/core/channel/census_filter.h b/src/core/channel/census_filter.h
deleted file mode 100644
index 1453c05d28..0000000000
--- a/src/core/channel/census_filter.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H
-#define GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H
-
-#include "src/core/channel/channel_stack.h"
-
-/* Census filters: provides tracing and stats collection functionalities. It
- needs to reside right below the surface filter in the channel stack. */
-extern const grpc_channel_filter grpc_client_census_filter;
-extern const grpc_channel_filter grpc_server_census_filter;
-
-#endif /* GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H */
diff --git a/src/core/channel/compress_filter.h b/src/core/channel/compress_filter.h
index 0917e81ca4..415459bca6 100644
--- a/src/core/channel/compress_filter.h
+++ b/src/core/channel/compress_filter.h
@@ -36,7 +36,7 @@
#include "src/core/channel/channel_stack.h"
-#define GRPC_COMPRESS_REQUEST_ALGORITHM_KEY "internal:grpc-encoding-request"
+#define GRPC_COMPRESS_REQUEST_ALGORITHM_KEY "grpc-internal-encoding-request"
/** Compression filter for outgoing data.
*
diff --git a/src/core/channel/http_client_filter.c b/src/core/channel/http_client_filter.c
index 48c623d359..ec832a0367 100644
--- a/src/core/channel/http_client_filter.c
+++ b/src/core/channel/http_client_filter.c
@@ -45,7 +45,6 @@ typedef struct call_data {
grpc_linked_mdelem content_type;
grpc_linked_mdelem user_agent;
int sent_initial_metadata;
- int sent_authority;
int got_initial_metadata;
grpc_stream_op_buffer *recv_ops;
@@ -64,7 +63,6 @@ typedef struct channel_data {
grpc_mdelem *scheme;
grpc_mdelem *content_type;
grpc_mdelem *status;
- grpc_mdelem *default_authority;
/** complete user agent mdelem */
grpc_mdelem *user_agent;
} channel_data;
@@ -87,23 +85,20 @@ static grpc_mdelem *client_filter(void *user_data, grpc_mdelem *md) {
static void hc_on_recv(void *user_data, int success) {
grpc_call_element *elem = user_data;
call_data *calld = elem->call_data;
- if (success) {
- size_t i;
- size_t nops = calld->recv_ops->nops;
- grpc_stream_op *ops = calld->recv_ops->ops;
- for (i = 0; i < nops; i++) {
- grpc_stream_op *op = &ops[i];
- if (op->type != GRPC_OP_METADATA) continue;
- calld->got_initial_metadata = 1;
- grpc_metadata_batch_filter(&op->data.metadata, client_filter, elem);
- }
+ size_t i;
+ size_t nops = calld->recv_ops->nops;
+ grpc_stream_op *ops = calld->recv_ops->ops;
+ for (i = 0; i < nops; i++) {
+ grpc_stream_op *op = &ops[i];
+ if (op->type != GRPC_OP_METADATA) continue;
+ calld->got_initial_metadata = 1;
+ grpc_metadata_batch_filter(&op->data.metadata, client_filter, elem);
}
calld->on_done_recv->cb(calld->on_done_recv->cb_arg, success);
}
static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) {
grpc_call_element *elem = user_data;
- call_data *calld = elem->call_data;
channel_data *channeld = elem->channel_data;
/* eat the things we'd like to set ourselves */
if (md->key == channeld->method->key) return NULL;
@@ -111,10 +106,6 @@ static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) {
if (md->key == channeld->te_trailers->key) return NULL;
if (md->key == channeld->content_type->key) return NULL;
if (md->key == channeld->user_agent->key) return NULL;
- if (channeld->default_authority &&
- channeld->default_authority->key == md->key) {
- calld->sent_authority = 1;
- }
return md;
}
@@ -138,11 +129,6 @@ static void hc_mutate_op(grpc_call_element *elem,
GRPC_MDELEM_REF(channeld->method));
grpc_metadata_batch_add_head(&op->data.metadata, &calld->scheme,
GRPC_MDELEM_REF(channeld->scheme));
- if (channeld->default_authority && !calld->sent_authority) {
- grpc_metadata_batch_add_head(
- &op->data.metadata, &calld->authority,
- GRPC_MDELEM_REF(channeld->default_authority));
- }
grpc_metadata_batch_add_tail(&op->data.metadata, &calld->te_trailers,
GRPC_MDELEM_REF(channeld->te_trailers));
grpc_metadata_batch_add_tail(&op->data.metadata, &calld->content_type,
@@ -175,7 +161,6 @@ static void init_call_elem(grpc_call_element *elem,
call_data *calld = elem->call_data;
calld->sent_initial_metadata = 0;
calld->got_initial_metadata = 0;
- calld->sent_authority = 0;
calld->on_done_recv = NULL;
grpc_iomgr_closure_init(&calld->hc_on_recv, hc_on_recv, elem);
if (initial_op) hc_mutate_op(elem, initial_op);
@@ -257,8 +242,6 @@ static grpc_mdstr *user_agent_from_args(grpc_mdctx *mdctx,
static void init_channel_elem(grpc_channel_element *elem, grpc_channel *master,
const grpc_channel_args *channel_args,
grpc_mdctx *mdctx, int is_first, int is_last) {
- size_t i;
-
/* grab pointers to our data from the channel element */
channel_data *channeld = elem->channel_data;
@@ -267,21 +250,6 @@ static void init_channel_elem(grpc_channel_element *elem, grpc_channel *master,
path */
GPR_ASSERT(!is_last);
- channeld->default_authority = NULL;
- if (channel_args) {
- for (i = 0; i < channel_args->num_args; i++) {
- if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_DEFAULT_AUTHORITY)) {
- if (channel_args->args[i].type != GRPC_ARG_STRING) {
- gpr_log(GPR_ERROR, "%s: must be an string",
- GRPC_ARG_DEFAULT_AUTHORITY);
- } else {
- channeld->default_authority = grpc_mdelem_from_strings(
- mdctx, ":authority", channel_args->args[i].value.string);
- }
- }
- }
- }
-
/* initialize members */
channeld->te_trailers = grpc_mdelem_from_strings(mdctx, "te", "trailers");
channeld->method = grpc_mdelem_from_strings(mdctx, ":method", "POST");
@@ -306,9 +274,6 @@ static void destroy_channel_elem(grpc_channel_element *elem) {
GRPC_MDELEM_UNREF(channeld->content_type);
GRPC_MDELEM_UNREF(channeld->status);
GRPC_MDELEM_UNREF(channeld->user_agent);
- if (channeld->default_authority) {
- GRPC_MDELEM_UNREF(channeld->default_authority);
- }
}
const grpc_channel_filter grpc_http_client_filter = {