16ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray/* Copyright 2016 The TensorFlow Authors. All Rights Reserved. 26ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 36ba4995be6372d1ca5e01eae649c1d8750b65857Derek MurrayLicensed under the Apache License, Version 2.0 (the "License"); 46ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murrayyou may not use this file except in compliance with the License. 56ba4995be6372d1ca5e01eae649c1d8750b65857Derek MurrayYou may obtain a copy of the License at 66ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 76ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray http://www.apache.org/licenses/LICENSE-2.0 86ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 96ba4995be6372d1ca5e01eae649c1d8750b65857Derek MurrayUnless required by applicable law or agreed to in writing, software 106ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murraydistributed under the License is distributed on an "AS IS" BASIS, 116ba4995be6372d1ca5e01eae649c1d8750b65857Derek MurrayWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126ba4995be6372d1ca5e01eae649c1d8750b65857Derek MurraySee the License for the specific language governing permissions and 136ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murraylimitations under the License. 146ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray==============================================================================*/ 156ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 16f8347ceebbad0e06552633fcdf8e63f52246ba62Sanjoy Das#ifndef TENSORFLOW_CORE_DISTRIBUTED_RUNTIME_RPC_GRPC_MASTER_SERVICE_IMPL_H_ 17f8347ceebbad0e06552633fcdf8e63f52246ba62Sanjoy Das#define TENSORFLOW_CORE_DISTRIBUTED_RUNTIME_RPC_GRPC_MASTER_SERVICE_IMPL_H_ 186ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 196ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "grpc++/impl/codegen/async_stream.h" 206ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "grpc++/impl/codegen/async_unary_call.h" 216ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "grpc++/impl/codegen/proto_utils.h" 226ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "grpc++/impl/codegen/rpc_method.h" 236ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "grpc++/impl/codegen/service_type.h" 246ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "grpc++/impl/codegen/status.h" 256ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "grpc++/impl/codegen/stub_options.h" 266ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "grpc++/impl/codegen/sync_stream.h" 276ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 289ced748d0b305a101574a23bf85394a53b8a1815Derek Murray#include "tensorflow/core/distributed_runtime/rpc/grpc_serialization_traits.h" 296ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray#include "tensorflow/core/protobuf/master.pb.h" 306ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 319ced748d0b305a101574a23bf85394a53b8a1815Derek Murray// Contains potentially large GraphDef. 329ced748d0b305a101574a23bf85394a53b8a1815Derek MurrayTF_GRPC_ALLOW_UNLIMITED_MESSAGE_SIZE(tensorflow::CreateSessionRequest); 339ced748d0b305a101574a23bf85394a53b8a1815Derek Murray// Contains potentially large GraphDef. 349ced748d0b305a101574a23bf85394a53b8a1815Derek MurrayTF_GRPC_ALLOW_UNLIMITED_MESSAGE_SIZE(tensorflow::ExtendSessionRequest); 359ced748d0b305a101574a23bf85394a53b8a1815Derek Murray// Contains potentially large TensorProto. 369ced748d0b305a101574a23bf85394a53b8a1815Derek MurrayTF_GRPC_ALLOW_UNLIMITED_MESSAGE_SIZE(tensorflow::RunStepRequest); 379ced748d0b305a101574a23bf85394a53b8a1815Derek Murray// Contains potentially large StepStats, TensorProto. 389ced748d0b305a101574a23bf85394a53b8a1815Derek MurrayTF_GRPC_ALLOW_UNLIMITED_MESSAGE_SIZE(tensorflow::RunStepResponse); 399ced748d0b305a101574a23bf85394a53b8a1815Derek Murray 406ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murraynamespace grpc { 416ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murrayclass CompletionQueue; 426ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murrayclass Channel; 436ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murrayclass RpcService; 446ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murrayclass ServerCompletionQueue; 456ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murrayclass ServerContext; 466ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray} // namespace grpc 476ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 486ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murraynamespace tensorflow { 496ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 506ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murraynamespace grpc { 516ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 526ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray// Implementation of `tensorflow.MasterService`, based on the 536ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray// definition in "//tensorflow/core/protobuf/master_service.proto", 546ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray// and the gRPC generated stub and service classes. 556ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray// See that file for the definition of methods and messages. 56a1fba7f5ac3de39b106af36c3737ea854f09e9acVijay Vasudevanclass MasterService final { 576ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray public: 586ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray class StubInterface { 596ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray public: 606ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray virtual ~StubInterface() {} 616ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray virtual ::grpc::Status CreateSession(::grpc::ClientContext* context, 626ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const CreateSessionRequest& request, 636ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray CreateSessionResponse* response) = 0; 646ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray virtual ::grpc::Status ExtendSession(::grpc::ClientContext* context, 656ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const ExtendSessionRequest& request, 666ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ExtendSessionResponse* response) = 0; 67a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar virtual ::grpc::Status PartialRunSetup( 68a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::ClientContext* context, const PartialRunSetupRequest& request, 69a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar PartialRunSetupResponse* response) = 0; 706ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray virtual ::grpc::Status RunStep(::grpc::ClientContext* context, 716ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const RunStepRequest& request, 726ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray RunStepResponse* response) = 0; 736ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray virtual ::grpc::Status CloseSession(::grpc::ClientContext* context, 746ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const CloseSessionRequest& request, 756ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray CloseSessionResponse* response) = 0; 766ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray virtual ::grpc::Status ListDevices(::grpc::ClientContext* context, 776ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const ListDevicesRequest& request, 786ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ListDevicesResponse* response) = 0; 796ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray virtual ::grpc::Status Reset(::grpc::ClientContext* context, 806ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const ResetRequest& request, 816ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ResetResponse* response) = 0; 826ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray }; 83a1fba7f5ac3de39b106af36c3737ea854f09e9acVijay Vasudevan class Stub final : public StubInterface { 846ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray public: 856ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel); 866ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::Status CreateSession(::grpc::ClientContext* context, 876ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const CreateSessionRequest& request, 88a1fba7f5ac3de39b106af36c3737ea854f09e9acVijay Vasudevan CreateSessionResponse* response) override; 896ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::Status ExtendSession(::grpc::ClientContext* context, 906ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const ExtendSessionRequest& request, 91a1fba7f5ac3de39b106af36c3737ea854f09e9acVijay Vasudevan ExtendSessionResponse* response) override; 927149a2e2e2f549035f23e21224ee41afe8df3876A. Unique TensorFlower ::grpc::Status PartialRunSetup(::grpc::ClientContext* context, 937149a2e2e2f549035f23e21224ee41afe8df3876A. Unique TensorFlower const PartialRunSetupRequest& request, 947149a2e2e2f549035f23e21224ee41afe8df3876A. Unique TensorFlower PartialRunSetupResponse* response) override; 956ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::Status RunStep(::grpc::ClientContext* context, 966ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const RunStepRequest& request, 97a1fba7f5ac3de39b106af36c3737ea854f09e9acVijay Vasudevan RunStepResponse* response) override; 986ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::Status CloseSession(::grpc::ClientContext* context, 996ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const CloseSessionRequest& request, 100a1fba7f5ac3de39b106af36c3737ea854f09e9acVijay Vasudevan CloseSessionResponse* response) override; 1016ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::Status ListDevices(::grpc::ClientContext* context, 1026ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const ListDevicesRequest& request, 103a1fba7f5ac3de39b106af36c3737ea854f09e9acVijay Vasudevan ListDevicesResponse* response) override; 1046ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::Status Reset(::grpc::ClientContext* context, 1056ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const ResetRequest& request, 106a1fba7f5ac3de39b106af36c3737ea854f09e9acVijay Vasudevan ResetResponse* response) override; 1076ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 1086ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray private: 1096ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray std::shared_ptr< ::grpc::ChannelInterface> channel_; 110061c3597b84d45a9878b8adf831e39a5573859ecA. Unique TensorFlower const ::grpc::internal::RpcMethod rpcmethod_CreateSession_; 111061c3597b84d45a9878b8adf831e39a5573859ecA. Unique TensorFlower const ::grpc::internal::RpcMethod rpcmethod_ExtendSession_; 112061c3597b84d45a9878b8adf831e39a5573859ecA. Unique TensorFlower const ::grpc::internal::RpcMethod rpcmethod_PartialRunSetup_; 113061c3597b84d45a9878b8adf831e39a5573859ecA. Unique TensorFlower const ::grpc::internal::RpcMethod rpcmethod_RunStep_; 114061c3597b84d45a9878b8adf831e39a5573859ecA. Unique TensorFlower const ::grpc::internal::RpcMethod rpcmethod_CloseSession_; 115061c3597b84d45a9878b8adf831e39a5573859ecA. Unique TensorFlower const ::grpc::internal::RpcMethod rpcmethod_ListDevices_; 116061c3597b84d45a9878b8adf831e39a5573859ecA. Unique TensorFlower const ::grpc::internal::RpcMethod rpcmethod_Reset_; 1176ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray }; 1186ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray static std::unique_ptr<Stub> NewStub( 1196ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const std::shared_ptr< ::grpc::ChannelInterface>& channel, 1206ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray const ::grpc::StubOptions& options = ::grpc::StubOptions()); 1216ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 1226ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray class AsyncService : public ::grpc::Service { 1236ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray public: 1246ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray AsyncService(); 1256ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray virtual ~AsyncService(); 1266ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray void RequestCreateSession( 1276ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerContext* context, CreateSessionRequest* request, 1286ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerAsyncResponseWriter<CreateSessionResponse>* response, 1296ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::CompletionQueue* new_call_cq, 1306ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerCompletionQueue* notification_cq, void* tag) { 1316ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::Service::RequestAsyncUnary(0, context, request, response, 1326ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray new_call_cq, notification_cq, tag); 1336ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray } 1346ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray void RequestExtendSession( 1356ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerContext* context, ExtendSessionRequest* request, 1366ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerAsyncResponseWriter<ExtendSessionResponse>* response, 1376ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::CompletionQueue* new_call_cq, 1386ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerCompletionQueue* notification_cq, void* tag) { 1396ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::Service::RequestAsyncUnary(1, context, request, response, 1406ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray new_call_cq, notification_cq, tag); 1416ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray } 142a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar void RequestPartialRunSetup( 143a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::ServerContext* context, PartialRunSetupRequest* request, 144a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::ServerAsyncResponseWriter<PartialRunSetupResponse>* response, 145a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::CompletionQueue* new_call_cq, 146a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::ServerCompletionQueue* notification_cq, void* tag) { 147a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::Service::RequestAsyncUnary(2, context, request, response, 148a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar new_call_cq, notification_cq, tag); 149a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar } 1506ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray void RequestRunStep( 1516ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerContext* context, RunStepRequest* request, 1526ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerAsyncResponseWriter<RunStepResponse>* response, 1536ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::CompletionQueue* new_call_cq, 1546ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerCompletionQueue* notification_cq, void* tag) { 155a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::Service::RequestAsyncUnary(3, context, request, response, 1566ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray new_call_cq, notification_cq, tag); 1576ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray } 1586ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray void RequestCloseSession( 1596ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerContext* context, CloseSessionRequest* request, 1606ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerAsyncResponseWriter<CloseSessionResponse>* response, 1616ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::CompletionQueue* new_call_cq, 1626ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerCompletionQueue* notification_cq, void* tag) { 163a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::Service::RequestAsyncUnary(4, context, request, response, 1646ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray new_call_cq, notification_cq, tag); 1656ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray } 1666ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray void RequestListDevices( 1676ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerContext* context, ListDevicesRequest* request, 1686ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerAsyncResponseWriter<ListDevicesResponse>* response, 1696ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::CompletionQueue* new_call_cq, 1706ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerCompletionQueue* notification_cq, void* tag) { 171a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::Service::RequestAsyncUnary(5, context, request, response, 1726ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray new_call_cq, notification_cq, tag); 1736ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray } 1746ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray void RequestReset( 1756ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerContext* context, ResetRequest* request, 1766ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerAsyncResponseWriter<ResetResponse>* response, 1776ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::CompletionQueue* new_call_cq, 1786ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray ::grpc::ServerCompletionQueue* notification_cq, void* tag) { 179a02510a26013e398c10d42c85ff466b92c7b59b6Suharsh Sivakumar ::grpc::Service::RequestAsyncUnary(6, context, request, response, 1806ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray new_call_cq, notification_cq, tag); 1816ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray } 1826ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray }; 1836ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray}; 1846ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 1856ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray} // namespace grpc 1866ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 1876ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray} // namespace tensorflow 1886ba4995be6372d1ca5e01eae649c1d8750b65857Derek Murray 189f8347ceebbad0e06552633fcdf8e63f52246ba62Sanjoy Das#endif // TENSORFLOW_CORE_DISTRIBUTED_RUNTIME_RPC_GRPC_MASTER_SERVICE_IMPL_H_ 190