LLVM  4.0.0
Classes | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT > Class Template Reference

Contains primitive utilities for defining, calling and handling calls to remote procedures. More...

#include <RPCUtils.h>

Inheritance diagram for llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >:
[legend]
Collaboration diagram for llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >:
[legend]

Classes

class  CanDeserializeCheck
 
class  CanSerializeCheck
 
class  OrcRPCInvalid
 
class  OrcRPCNegotiate
 
class  OrcRPCResponse
 

Public Member Functions

 RPCEndpointBase (ChannelT &C, bool LazyAutoNegotiation)
 Construct an RPC instance on a channel. More...
 
template<typename Func , typename HandlerT , typename... ArgTs>
Error appendCallAsync (HandlerT Handler, const ArgTs &...Args)
 Append a call Func, does not call send on the channel. More...
 
Error sendAppendedCalls ()
 
template<typename Func , typename HandlerT , typename... ArgTs>
Error callAsync (HandlerT Handler, const ArgTs &...Args)
 
Error handleOne ()
 Handle one incoming call. More...
 
void abandonPendingResponses ()
 Abandon all outstanding result handlers. More...
 

Static Public Member Functions

template<typename... ArgTs>
**static detail::ReadArgs
< ArgTs...> 
readArgs (ArgTs &...Args)
 Helper for handling setter procedures - this method returns a functor that sets the variables referred to by Args... More...
 

Protected Types

using LaunchPolicy = std::function< Error(std::function< Error()>)>
 
using WrappedHandlerFn = std::function< Error(ChannelT &, SequenceNumberT)>
 

Protected Member Functions

FunctionIdT getInvalidFunctionId () const
 
template<typename Func , typename HandlerT >
void addHandlerImpl (HandlerT Handler, LaunchPolicy Launch)
 Add the given handler to the handler map and make it available for autonegotiation and execution. More...
 
Error handleResponse (SequenceNumberT SeqNo)
 
FunctionIdT handleNegotiate (const std::string &Name)
 
template<typename Func >
Expected< FunctionIdT > getRemoteFunctionId ()
 
template<typename Func , typename HandlerT >
WrappedHandlerFn wrapHandler (HandlerT Handler, LaunchPolicy Launch)
 

Protected Attributes

ChannelT & C
 
bool LazyAutoNegotiation
 
RPCFunctionIdAllocator
< FunctionIdT > 
FnIdAllocator
 
FunctionIdT ResponseId
 
std::map< std::string,
FunctionIdT > 
LocalFunctionIds
 
std::map< const char
*, FunctionIdT > 
RemoteFunctionIds
 
std::map< FunctionIdT,
WrappedHandlerFn
Handlers
 
std::mutex ResponsesMutex
 
detail::SequenceNumberManager
< SequenceNumberT > 
SequenceNumberMgr
 
std::map< SequenceNumberT,
std::unique_ptr
< detail::ResponseHandler
< ChannelT > > > 
PendingResponses
 

Detailed Description

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
class llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >

Contains primitive utilities for defining, calling and handling calls to remote procedures.

ChannelT is a bidirectional stream conforming to the RPCChannel interface (see RPCChannel.h), FunctionIdT is a procedure identifier type that must be serializable on ChannelT, and SequenceNumberT is an integral type that will be used to number in-flight function calls.

These utilities support the construction of very primitive RPC utilities. Their intent is to ensure correct serialization and deserialization of procedure arguments, and to keep the client and server's view of the API in sync.

Definition at line 705 of file RPCUtils.h.

Member Typedef Documentation

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
using llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::LaunchPolicy = std::function<Error(std::function<Error()>)>
protected

Definition at line 893 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
using llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::WrappedHandlerFn = std::function<Error(ChannelT &, SequenceNumberT)>
protected

Definition at line 991 of file RPCUtils.h.

Constructor & Destructor Documentation

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::RPCEndpointBase ( ChannelT &  C,
bool  LazyAutoNegotiation 
)
inline

Construct an RPC instance on a channel.

Definition at line 750 of file RPCUtils.h.

Member Function Documentation

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
void llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::abandonPendingResponses ( )
inline

Abandon all outstanding result handlers.

This will call all currently registered result handlers to receive an "abandoned" error as their argument. This is used internally by the RPC in error situations, but can also be called directly by clients who are disconnecting from the remote and don't or can't expect responses to their outstanding calls. (Especially for outstanding blocking calls, calling this function may be necessary to avoid dead threads).

Definition at line 880 of file RPCUtils.h.

Referenced by llvm::orc::rpc::detail::RPCEndpointBase< SingleThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >::appendCallAsync(), and llvm::orc::rpc::detail::RPCEndpointBase< SingleThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >::handleResponse().

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
template<typename Func , typename HandlerT >
void llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::addHandlerImpl ( HandlerT  Handler,
LaunchPolicy  Launch 
)
inlineprotected

Add the given handler to the handler map and make it available for autonegotiation and execution.

Definition at line 902 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
template<typename Func , typename HandlerT , typename... ArgTs>
Error llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::appendCallAsync ( HandlerT  Handler,
const ArgTs &...  Args 
)
inline

Append a call Func, does not call send on the channel.

The first argument specifies a user-defined handler to be run when the function returns. The handler should take an Expected<Func::ReturnType>, or an Error (if Func::ReturnType is void). The handler will be called with an error if the return value is abandoned due to a channel error.

Definition at line 771 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
template<typename Func , typename HandlerT , typename... ArgTs>
Error llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::callAsync ( HandlerT  Handler,
const ArgTs &...  Args 
)
inline

Definition at line 832 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
FunctionIdT llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::getInvalidFunctionId ( ) const
inlineprotected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
template<typename Func >
Expected<FunctionIdT> llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::getRemoteFunctionId ( )
inlineprotected

Definition at line 956 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
FunctionIdT llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::handleNegotiate ( const std::string &  Name)
inlineprotected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
Error llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::handleOne ( )
inline

Handle one incoming call.

Definition at line 839 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
Error llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::handleResponse ( SequenceNumberT  SeqNo)
inlineprotected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
template<typename... ArgTs>
* * static detail::ReadArgs<ArgTs...> llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::readArgs ( ArgTs &...  Args)
inlinestatic

Helper for handling setter procedures - this method returns a functor that sets the variables referred to by Args...

to values deserialized from the channel. E.g.

typedef Function<0, bool, int> Func1;

... bool B; int I; if (auto Err = expect<Func1>(Channel, readArgs(B, I))) /* Handle Args

Definition at line 868 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
Error llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::sendAppendedCalls ( )
inline

Definition at line 829 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
template<typename Func , typename HandlerT >
WrappedHandlerFn llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::wrapHandler ( HandlerT  Handler,
LaunchPolicy  Launch 
)
inlineprotected

Definition at line 996 of file RPCUtils.h.

Member Data Documentation

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
ChannelT& llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::C
protected

Definition at line 1035 of file RPCUtils.h.

template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
RPCFunctionIdAllocator<FunctionIdT> llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::FnIdAllocator
protected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
std::map<FunctionIdT, WrappedHandlerFn> llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::Handlers
protected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
bool llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::LazyAutoNegotiation
protected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
std::map<std::string, FunctionIdT> llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::LocalFunctionIds
protected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
std::map<SequenceNumberT, std::unique_ptr<detail::ResponseHandler<ChannelT> > > llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::PendingResponses
protected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
std::map<const char *, FunctionIdT> llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::RemoteFunctionIds
protected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
FunctionIdT llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::ResponseId
protected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
std::mutex llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::ResponsesMutex
protected
template<typename ImplT, typename ChannelT, typename FunctionIdT, typename SequenceNumberT>
detail::SequenceNumberManager<SequenceNumberT> llvm::orc::rpc::detail::RPCEndpointBase< ImplT, ChannelT, FunctionIdT, SequenceNumberT >::SequenceNumberMgr
protected

The documentation for this class was generated from the following file: