diff options
author | Yash Tibrewal <yashkt@google.com> | 2018-10-23 13:56:36 -0700 |
---|---|---|
committer | Yash Tibrewal <yashkt@google.com> | 2018-10-23 13:56:36 -0700 |
commit | 4da91c1156488778d989db1c623876bc211b140e (patch) | |
tree | 1eca8e0cd9fddb750ccbcc9967a9869aeb405214 /include/grpcpp | |
parent | 0c7250c7b40608bc476f3e40eeafa616cb50df03 (diff) |
First test for server interception
Diffstat (limited to 'include/grpcpp')
-rw-r--r-- | include/grpcpp/impl/codegen/call.h | 38 | ||||
-rw-r--r-- | include/grpcpp/impl/codegen/method_handler_impl.h | 3 | ||||
-rw-r--r-- | include/grpcpp/impl/codegen/server_interceptor.h | 2 |
3 files changed, 23 insertions, 20 deletions
diff --git a/include/grpcpp/impl/codegen/call.h b/include/grpcpp/impl/codegen/call.h index 1fc8481bc6..5a12ac539e 100644 --- a/include/grpcpp/impl/codegen/call.h +++ b/include/grpcpp/impl/codegen/call.h @@ -963,12 +963,13 @@ class InterceptorBatchMethodsImpl : public InternalInterceptorBatchMethods { // them is invoked if there were no interceptors registered. bool RunInterceptors() { auto* client_rpc_info = call_->client_rpc_info(); - if (client_rpc_info == nullptr || - client_rpc_info->interceptors_.size() == 0) { - return true; - } else { - RunClientInterceptors(); - return false; + if (client_rpc_info != nullptr) { + if (client_rpc_info->interceptors_.size() == 0) { + return true; + } else { + RunClientInterceptors(); + return false; + } } auto* server_rpc_info = call_->server_rpc_info(); @@ -1070,6 +1071,8 @@ class InterceptorBatchMethodsImpl : public InternalInterceptorBatchMethods { curr_iteration_++; if (curr_iteration_ < static_cast<long>(rpc_info->interceptors_.size())) { return rpc_info->RunInterceptor(this, curr_iteration_); + } else if (ops_) { + return ops_->ContinueFillOpsAfterInterception(); } } else { curr_iteration_--; @@ -1077,12 +1080,10 @@ class InterceptorBatchMethodsImpl : public InternalInterceptorBatchMethods { if (curr_iteration_ >= 0) { // Continue running interceptors return rpc_info->RunInterceptor(this, curr_iteration_); + } else if (ops_) { + return ops_->ContinueFinalizeResultAfterInterception(); } } - // we are done running all the interceptors - if (ops_) { - ops_->ContinueFinalizeResultAfterInterception(); - } GPR_CODEGEN_ASSERT(callback_); callback_(); } @@ -1165,13 +1166,14 @@ class CallOpSet : public CallOpSetInterface, } void FillOps(Call* call) override { - // gpr_log(GPR_ERROR, "filling ops %p", this); + gpr_log(GPR_ERROR, "filling ops %p", this); done_intercepting_ = false; g_core_codegen_interface->grpc_call_ref(call->call()); call_ = *call; // It's fine to create a copy of call since it's just pointers if (RunInterceptors()) { + gpr_log(GPR_ERROR, "no interceptors on send path"); ContinueFillOpsAfterInterception(); } else { // After the interceptors are run, ContinueFillOpsAfterInterception will @@ -1180,12 +1182,12 @@ class CallOpSet : public CallOpSetInterface, } bool FinalizeResult(void** tag, bool* status) override { - // gpr_log(GPR_ERROR, "finalizing result %p", this); + gpr_log(GPR_ERROR, "finalizing result %p", this); if (done_intercepting_) { // We have already finished intercepting and filling in the results. This // round trip from the core needed to be made because interceptors were // run - // gpr_log(GPR_ERROR, "done intercepting"); + gpr_log(GPR_ERROR, "done intercepting"); *tag = return_tag_; g_core_codegen_interface->grpc_call_unref(call_.call()); return true; @@ -1197,15 +1199,15 @@ class CallOpSet : public CallOpSetInterface, this->Op4::FinishOp(status); this->Op5::FinishOp(status); this->Op6::FinishOp(status); - // gpr_log(GPR_ERROR, "done finish ops"); + gpr_log(GPR_ERROR, "done finish ops"); if (RunInterceptorsPostRecv()) { *tag = return_tag_; g_core_codegen_interface->grpc_call_unref(call_.call()); - // gpr_log(GPR_ERROR, "no interceptors"); + gpr_log(GPR_ERROR, "no interceptors"); return true; } - // gpr_log(GPR_ERROR, "running interceptors"); + gpr_log(GPR_ERROR, "running interceptors"); // Interceptors are going to be run, so we can't return the tag just yet. // After the interceptors are run, ContinueFinalizeResultAfterInterception return false; @@ -1243,7 +1245,7 @@ class CallOpSet : public CallOpSetInterface, this->Op4::AddOp(ops, &nops); this->Op5::AddOp(ops, &nops); this->Op6::AddOp(ops, &nops); - // gpr_log(GPR_ERROR, "going to start call batch %p", this); + gpr_log(GPR_ERROR, "going to start call batch %p", this); GPR_CODEGEN_ASSERT(GRPC_CALL_OK == g_core_codegen_interface->grpc_call_start_batch( call_.call(), ops, nops, cq_tag(), nullptr)); @@ -1269,8 +1271,6 @@ class CallOpSet : public CallOpSetInterface, this->Op6::SetInterceptionHookPoint(&interceptor_methods_); interceptor_methods_.SetCallOpSetInterface(this); interceptor_methods_.SetCall(&call_); - // interceptor_methods_.SetFunctions(ContinueFillOpsAfterInterception, - // SetHijackingState, ContinueFinalizeResultAfterInterception); return interceptor_methods_.RunInterceptors(); } // Returns true if no interceptors need to be run diff --git a/include/grpcpp/impl/codegen/method_handler_impl.h b/include/grpcpp/impl/codegen/method_handler_impl.h index 4f02e3e39b..f1f5b43031 100644 --- a/include/grpcpp/impl/codegen/method_handler_impl.h +++ b/include/grpcpp/impl/codegen/method_handler_impl.h @@ -59,6 +59,7 @@ class RpcMethodHandler : public MethodHandler { : func_(func), service_(service) {} void RunHandler(const HandlerParameter& param) final { + gpr_log(GPR_ERROR, "running handler"); ResponseType rsp; Status status = param.status; if (status.ok()) { @@ -83,7 +84,7 @@ class RpcMethodHandler : public MethodHandler { } ops.ServerSendStatus(¶m.server_context->trailing_metadata_, status); param.call->PerformOps(&ops); - param.call->cq()->Pluck(&ops); + GPR_CODEGEN_ASSERT(param.call->cq()->Pluck(&ops)); } void* Deserialize(grpc_byte_buffer* req, Status* status) final { diff --git a/include/grpcpp/impl/codegen/server_interceptor.h b/include/grpcpp/impl/codegen/server_interceptor.h index 3f8cbcca8d..5c38ceaace 100644 --- a/include/grpcpp/impl/codegen/server_interceptor.h +++ b/include/grpcpp/impl/codegen/server_interceptor.h @@ -73,7 +73,9 @@ class ServerRpcInfo { const std::vector< std::unique_ptr<experimental::ServerInterceptorFactoryInterface>>& creators) { + gpr_log(GPR_ERROR, "Registering interceptors"); for (const auto& creator : creators) { + gpr_log(GPR_ERROR, "registering one"); interceptors_.push_back(std::unique_ptr<experimental::Interceptor>( creator->CreateServerInterceptor(this))); } |