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