LLVM  4.0.0
Public Types | Public Member Functions | List of all members
llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT > Class Template Reference

#include <RPCUtils.h>

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

Public Types

using LaunchPolicy = typename BaseClass::LaunchPolicy
 The LaunchPolicy type allows a launch policy to be specified when adding a function handler. More...
 
template<typename Func >
using NonBlockingCallResult = typename detail::ResultTraits< typename Func::ReturnType >::ReturnFutureType
 Return type for non-blocking call primitives. More...
 

Public Member Functions

 MultiThreadedRPCEndpoint (ChannelT &C, bool LazyAutoNegotiation)
 
template<typename Func , typename HandlerT >
void addHandler (HandlerT Handler, LaunchPolicy Launch=LaunchPolicy())
 Add a handler for the given RPC function. More...
 
template<typename Func , typename ClassT , typename RetT , typename... ArgTs>
void addHandler (ClassT &Object, RetT(ClassT::*Method)(ArgTs...), LaunchPolicy Launch=LaunchPolicy())
 Add a class-method as a handler. More...
 
template<typename Func >
Error negotiateFunction (bool Retry=false)
 Negotiate a function id for Func with the other end of the channel. More...
 
template<typename Func , typename... ArgTs>
Expected
< NonBlockingCallResult< Func > > 
appendCallNB (const ArgTs &...Args)
 Call Func on Channel C. More...
 
template<typename Func , typename... ArgTs>
Expected
< NonBlockingCallResult< Func > > 
callNB (const ArgTs &...Args)
 The same as appendCallNBWithSeq, except that it calls C.send() to flush the channel after serializing the call. More...
 
template<typename Func , typename... ArgTs, typename AltRetT = typename Func::ReturnType>
detail::ResultTraits< AltRetT >
::ErrorReturnType 
callB (const ArgTs &...Args)
 Call Func on Channel C. More...
 
Error handlerLoop ()
 Handle incoming RPC calls. More...
 
- Public Member Functions inherited from llvm::orc::rpc::detail::RPCEndpointBase< MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >
 RPCEndpointBase (ChannelT &C, bool LazyAutoNegotiation)
 Construct an RPC instance on a channel. More...
 
Error appendCallAsync (HandlerT Handler, const ArgTs &...Args)
 Append a call Func, does not call send on the channel. More...
 
Error sendAppendedCalls ()
 
Error callAsync (HandlerT Handler, const ArgTs &...Args)
 
Error handleOne ()
 Handle one incoming call. More...
 
void abandonPendingResponses ()
 Abandon all outstanding result handlers. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from llvm::orc::rpc::detail::RPCEndpointBase< MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >
**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 inherited from llvm::orc::rpc::detail::RPCEndpointBase< MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >
using LaunchPolicy = std::function< Error(std::function< Error()>)>
 
using WrappedHandlerFn = std::function< Error(ChannelT &, SequenceNumberT)>
 
- Protected Member Functions inherited from llvm::orc::rpc::detail::RPCEndpointBase< MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >
FunctionIdT getInvalidFunctionId () const
 
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)
 
Expected< FunctionIdT > getRemoteFunctionId ()
 
WrappedHandlerFn wrapHandler (HandlerT Handler, LaunchPolicy Launch)
 
- Protected Attributes inherited from llvm::orc::rpc::detail::RPCEndpointBase< MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >
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 ChannelT, typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
class llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >

Definition at line 1057 of file RPCUtils.h.

Member Typedef Documentation

template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
using llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::LaunchPolicy = typename BaseClass::LaunchPolicy

The LaunchPolicy type allows a launch policy to be specified when adding a function handler.

See addHandler.

Definition at line 1073 of file RPCUtils.h.

template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
template<typename Func >
using llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::NonBlockingCallResult = typename detail::ResultTraits< typename Func::ReturnType>::ReturnFutureType

Return type for non-blocking call primitives.

Definition at line 1136 of file RPCUtils.h.

Constructor & Destructor Documentation

template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::MultiThreadedRPCEndpoint ( ChannelT &  C,
bool  LazyAutoNegotiation 
)
inline

Definition at line 1068 of file RPCUtils.h.

Member Function Documentation

template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
template<typename Func , typename HandlerT >
void llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::addHandler ( HandlerT  Handler,
LaunchPolicy  Launch = LaunchPolicy() 
)
inline

Add a handler for the given RPC function.

This installs the given handler functor for the given RPC Function, and makes the RPC function available for negotiation/calling from the remote.

The optional LaunchPolicy argument can be used to control how the handler is run when called:

  • If no LaunchPolicy is given, the handler code will be run on the RPC handler thread that is reading from the channel. This handler cannot make blocking RPC calls (since it would be blocking the thread used to get the result), but can make non-blocking calls.
  • If a LaunchPolicy is given, the user's handler will be wrapped in a call to serialize and send the result, and the resulting functor (with type 'Error()' will be passed to the LaunchPolicy. The user can then choose to add the wrapped handler to a work queue, spawn a new thread, or anything else.

Definition at line 1093 of file RPCUtils.h.

template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
template<typename Func , typename ClassT , typename RetT , typename... ArgTs>
void llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::addHandler ( ClassT &  Object,
RetT(ClassT::*)(ArgTs...)  Method,
LaunchPolicy  Launch = LaunchPolicy() 
)
inline

Add a class-method as a handler.

Definition at line 1100 of file RPCUtils.h.

template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
template<typename Func , typename... ArgTs>
Expected<NonBlockingCallResult<Func> > llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::appendCallNB ( const ArgTs &...  Args)
inline

Call Func on Channel C.

Does not block, does not call send. Returns a pair of a future result and the sequence number assigned to the result.

This utility function is primarily used for single-threaded mode support, where the sequence number can be used to wait for the corresponding result. In multi-threaded mode the appendCallNB method, which does not return the sequence numeber, should be preferred.

Definition at line 1146 of file RPCUtils.h.

References llvm::orc::rpc::detail::RPCEndpointBase< MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >::abandonPendingResponses(), and llvm::Error::success().

template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
template<typename Func , typename... ArgTs, typename AltRetT = typename Func::ReturnType>
detail::ResultTraits<AltRetT>::ErrorReturnType llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::callB ( const ArgTs &...  Args)
inline

Call Func on Channel C.

Blocks waiting for a result. Returns an Error for void functions or an Expected<T> for functions returning a T.

This function is for use in threaded code where another thread is handling responses and incoming calls.

Definition at line 1193 of file RPCUtils.h.

References llvm::orc::rpc::detail::RPCEndpointBase< MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >, ChannelT, FunctionIdT, SequenceNumberT >::abandonPendingResponses(), and llvm::orc::rpc::detail::ResultTraits< RetT >::consumeAbandoned().

template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
template<typename Func , typename... ArgTs>
Expected<NonBlockingCallResult<Func> > llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::callNB ( const ArgTs &...  Args)
inline
template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
Error llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::handlerLoop ( )
inline
template<typename ChannelT , typename FunctionIdT = uint32_t, typename SequenceNumberT = uint32_t>
template<typename Func >
Error llvm::orc::rpc::MultiThreadedRPCEndpoint< ChannelT, FunctionIdT, SequenceNumberT >::negotiateFunction ( bool  Retry = false)
inline

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