Skip to content
Snippets Groups Projects
Commit d322d4b3 authored by Makarand Dharmapurikar's avatar Makarand Dharmapurikar
Browse files

surface cacheable flag to the call

parent 4e520597
No related branches found
No related tags found
No related merge requests found
...@@ -55,6 +55,7 @@ typedef struct call_data { ...@@ -55,6 +55,7 @@ typedef struct call_data {
grpc_metadata_batch *recv_initial_metadata; grpc_metadata_batch *recv_initial_metadata;
bool *recv_idempotent_request; bool *recv_idempotent_request;
bool *recv_cacheable_request;
/** Closure to call when finished with the hs_on_recv hook */ /** Closure to call when finished with the hs_on_recv hook */
grpc_closure *on_done_recv; grpc_closure *on_done_recv;
/** Closure to call when we retrieve read message from the payload-bin header /** Closure to call when we retrieve read message from the payload-bin header
...@@ -94,9 +95,13 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) { ...@@ -94,9 +95,13 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) {
if (md == GRPC_MDELEM_METHOD_POST) { if (md == GRPC_MDELEM_METHOD_POST) {
calld->seen_method = 1; calld->seen_method = 1;
*calld->recv_idempotent_request = false; *calld->recv_idempotent_request = false;
} else if (md == GRPC_MDELEM_METHOD_PUT || md == GRPC_MDELEM_METHOD_GET) { *calld->recv_cacheable_request = false;
} else if (md == GRPC_MDELEM_METHOD_PUT) {
calld->seen_method = 1; calld->seen_method = 1;
*calld->recv_idempotent_request = true; *calld->recv_idempotent_request = true;
} else if (md == GRPC_MDELEM_METHOD_GET) {
calld->seen_method = 1;
*calld->recv_cacheable_request = true;
} else if (md->key == GRPC_MDSTR_SCHEME) { } else if (md->key == GRPC_MDSTR_SCHEME) {
calld->seen_scheme = 1; calld->seen_scheme = 1;
} else if (md == GRPC_MDELEM_TE_TRAILERS) { } else if (md == GRPC_MDELEM_TE_TRAILERS) {
...@@ -254,8 +259,10 @@ static void hs_mutate_op(grpc_call_element *elem, ...@@ -254,8 +259,10 @@ static void hs_mutate_op(grpc_call_element *elem,
if (op->recv_initial_metadata) { if (op->recv_initial_metadata) {
/* substitute our callback for the higher callback */ /* substitute our callback for the higher callback */
GPR_ASSERT(op->recv_idempotent_request != NULL); GPR_ASSERT(op->recv_idempotent_request != NULL);
GPR_ASSERT(op->recv_cacheable_request != NULL);
calld->recv_initial_metadata = op->recv_initial_metadata; calld->recv_initial_metadata = op->recv_initial_metadata;
calld->recv_idempotent_request = op->recv_idempotent_request; calld->recv_idempotent_request = op->recv_idempotent_request;
calld->recv_cacheable_request = op->recv_cacheable_request;
calld->on_done_recv = op->recv_initial_metadata_ready; calld->on_done_recv = op->recv_initial_metadata_ready;
op->recv_initial_metadata_ready = &calld->hs_on_recv; op->recv_initial_metadata_ready = &calld->hs_on_recv;
} }
......
...@@ -149,6 +149,7 @@ struct call_data { ...@@ -149,6 +149,7 @@ struct call_data {
grpc_metadata_batch *recv_initial_metadata; grpc_metadata_batch *recv_initial_metadata;
bool recv_idempotent_request; bool recv_idempotent_request;
bool recv_cacheable_request;
grpc_metadata_array initial_metadata; grpc_metadata_array initial_metadata;
request_matcher *request_matcher; request_matcher *request_matcher;
...@@ -497,9 +498,12 @@ static void publish_call(grpc_exec_ctx *exec_ctx, grpc_server *server, ...@@ -497,9 +498,12 @@ static void publish_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
&rc->data.batch.details->method_capacity, calld->path); &rc->data.batch.details->method_capacity, calld->path);
rc->data.batch.details->deadline = calld->deadline; rc->data.batch.details->deadline = calld->deadline;
rc->data.batch.details->flags = rc->data.batch.details->flags =
0 | (calld->recv_idempotent_request (calld->recv_idempotent_request
? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST ? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST
: 0); : 0) |
(calld->recv_cacheable_request
? GRPC_INITIAL_METADATA_CACHEABLE_REQUEST
: 0);
break; break;
case REGISTERED_CALL: case REGISTERED_CALL:
*rc->data.registered.deadline = calld->deadline; *rc->data.registered.deadline = calld->deadline;
...@@ -779,6 +783,7 @@ static void server_mutate_op(grpc_call_element *elem, ...@@ -779,6 +783,7 @@ static void server_mutate_op(grpc_call_element *elem,
calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready; calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready;
op->recv_initial_metadata_ready = &calld->server_on_recv_initial_metadata; op->recv_initial_metadata_ready = &calld->server_on_recv_initial_metadata;
op->recv_idempotent_request = &calld->recv_idempotent_request; op->recv_idempotent_request = &calld->recv_idempotent_request;
op->recv_cacheable_request = &calld->recv_cacheable_request;
} }
} }
......
...@@ -124,6 +124,7 @@ typedef struct grpc_transport_stream_op { ...@@ -124,6 +124,7 @@ typedef struct grpc_transport_stream_op {
/** Receive initial metadata from the stream, into provided metadata batch. */ /** Receive initial metadata from the stream, into provided metadata batch. */
grpc_metadata_batch *recv_initial_metadata; grpc_metadata_batch *recv_initial_metadata;
bool *recv_idempotent_request; bool *recv_idempotent_request;
bool *recv_cacheable_request;
/** Should be enqueued when initial metadata is ready to be processed. */ /** Should be enqueued when initial metadata is ready to be processed. */
grpc_closure *recv_initial_metadata_ready; grpc_closure *recv_initial_metadata_ready;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment