 Documentation
      ¶
      Documentation
      ¶
    
    
  
    
  
    Index ¶
- Constants
- func DERtoPEM(der []byte) string
- type ChannelExtractor
- type Client
- type Comm
- func (c *Comm) Configure(channel string, newNodes []RemoteNode)
- func (c *Comm) DispatchStep(ctx context.Context, request *orderer.StepRequest) (*orderer.StepResponse, error)
- func (c *Comm) DispatchSubmit(ctx context.Context, request *orderer.SubmitRequest) (*orderer.SubmitResponse, error)
- func (c *Comm) Remote(channel string, id uint64) (*RemoteContext, error)
- func (c *Comm) Shutdown()
 
- type Communicator
- type ConnByCertMap
- type ConnectionMapper
- type ConnectionStore
- type Dispatcher
- type Handler
- type MemberMapping
- type MembersByChannel
- type PredicateDialer
- type RPC
- type RemoteCommunicator
- type RemoteContext
- type RemoteNode
- type RemoteVerifier
- type SecureDialer
- type Service
- type StringSet
- type Stub
- type SubmitClient
- type SubmitStream
Constants ¶
const ( // DefaultRPCTimeout is the default RPC timeout // that RPCs use DefaultRPCTimeout = time.Second * 5 )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ChannelExtractor ¶
ChannelExtractor extracts the channel of a given message, or returns an empty string if that's not possible
type Client ¶
type Client interface {
	// Submit submits transactions to a cluster member
	Submit(ctx context.Context, opts ...grpc.CallOption) (orderer.Cluster_SubmitClient, error)
	// Step passes an implementation-specific message to another cluster member.
	Step(ctx context.Context, in *orderer.StepRequest, opts ...grpc.CallOption) (*orderer.StepResponse, error)
}
    Client is the definition of operations that the Cluster gRPC service exposes to cluster nodes.
type Comm ¶
type Comm struct {
	Lock         sync.RWMutex
	Logger       *logging.Logger
	ChanExt      ChannelExtractor
	H            Handler
	Connections  *ConnectionStore
	Chan2Members MembersByChannel
	RPCTimeout   time.Duration
	// contains filtered or unexported fields
}
    Comm implements Communicator
func (*Comm) Configure ¶
func (c *Comm) Configure(channel string, newNodes []RemoteNode)
Configure configures the channel with the given RemoteNodes
func (*Comm) DispatchStep ¶
func (c *Comm) DispatchStep(ctx context.Context, request *orderer.StepRequest) (*orderer.StepResponse, error)
DispatchStep identifies the channel and sender of the step request and passes it to the underlying Handler
func (*Comm) DispatchSubmit ¶
func (c *Comm) DispatchSubmit(ctx context.Context, request *orderer.SubmitRequest) (*orderer.SubmitResponse, error)
DispatchSubmit identifies the channel and sender of the submit request and passes it to the underlying Handler
type Communicator ¶
type Communicator interface {
	// Remote returns a RemoteContext for the given RemoteNode ID in the context
	// of the given channel, or error if connection cannot be established, or
	// the channel wasn't configured
	Remote(channel string, id uint64) (*RemoteContext, error)
	// Configure configures the communication to connect to all
	// given members, and disconnect from any members not among the given
	// members.
	Configure(channel string, members []*RemoteNode)
	// Shutdown shuts down the communicator
	Shutdown()
}
    Communicator defines communication for a consenter
type ConnByCertMap ¶
type ConnByCertMap map[string]*grpc.ClientConn
ConnByCertMap maps certificates represented as strings to gRPC connections
func (ConnByCertMap) Lookup ¶
func (cbc ConnByCertMap) Lookup(cert []byte) (*grpc.ClientConn, bool)
Lookup looks up a certificate and returns the connection that was mapped to the certificate, and whether it was found or not
func (ConnByCertMap) Put ¶
func (cbc ConnByCertMap) Put(cert []byte, conn *grpc.ClientConn)
Put associates the given connection to the certificate
func (ConnByCertMap) Remove ¶
func (cbc ConnByCertMap) Remove(cert []byte)
Remove removes the connection that is associated to the given certificate
type ConnectionMapper ¶
type ConnectionMapper interface {
	Lookup(cert []byte) (*grpc.ClientConn, bool)
	Put(cert []byte, conn *grpc.ClientConn)
	Remove(cert []byte)
}
    ConnectionMapper maps certificates to connections
type ConnectionStore ¶
type ConnectionStore struct {
	Connections ConnectionMapper
	// contains filtered or unexported fields
}
    ConnectionStore stores connections to remote nodes
func NewConnectionStore ¶
func NewConnectionStore(dialer SecureDialer) *ConnectionStore
NewConnectionStore creates a new ConnectionStore with the given SecureDialer
func (*ConnectionStore) Connection ¶
func (c *ConnectionStore) Connection(endpoint string, expectedServerCert []byte) (*grpc.ClientConn, error)
Connection obtains a connection to the given endpoint and expects the given server certificate to be presented by the remote node
func (*ConnectionStore) Disconnect ¶
func (c *ConnectionStore) Disconnect(expectedServerCert []byte)
Disconnect closes the gRPC connection that is mapped to the given certificate
type Dispatcher ¶
type Dispatcher interface {
	DispatchSubmit(ctx context.Context, request *orderer.SubmitRequest) (*orderer.SubmitResponse, error)
	DispatchStep(ctx context.Context, request *orderer.StepRequest) (*orderer.StepResponse, error)
}
    Dispatcher dispatches requests
type Handler ¶
type Handler interface {
	OnStep(channel string, sender uint64, req *orderer.StepRequest) (*orderer.StepResponse, error)
	OnSubmit(channel string, sender uint64, req *orderer.SubmitRequest) (*orderer.SubmitResponse, error)
}
    Handler handles Step() and Submit() requests and returns a corresponding response
type MemberMapping ¶
MemberMapping defines NetworkMembers by their ID
func (MemberMapping) ByID ¶
func (mp MemberMapping) ByID(ID uint64) *Stub
ByID retrieves the Stub with the given ID from the MemberMapping
func (MemberMapping) LookupByClientCert ¶
func (mp MemberMapping) LookupByClientCert(cert []byte) *Stub
LookupByClientCert retrieves a Stub with the given client certificate
func (MemberMapping) Put ¶
func (mp MemberMapping) Put(stub *Stub)
Put inserts the given stub to the MemberMapping
func (MemberMapping) ServerCertificates ¶
func (mp MemberMapping) ServerCertificates() StringSet
ServerCertificates returns a set of the server certificates represented as strings
type MembersByChannel ¶
type MembersByChannel map[string]MemberMapping
MembersByChannel is a mapping from channel name to MemberMapping
type PredicateDialer ¶
PredicateDialer creates gRPC connections that are only established if the given predicate is fulfilled
func NewTLSPinningDialer ¶
func NewTLSPinningDialer(config comm.ClientConfig) *PredicateDialer
NewTLSPinningDialer creates a new PredicateDialer
func (*PredicateDialer) Dial ¶
func (dialer *PredicateDialer) Dial(address string, verifyFunc RemoteVerifier) (*grpc.ClientConn, error)
Dial creates a new gRPC connection that can only be established, if the remote node's certificate chain satisfy verifyFunc
func (*PredicateDialer) SetConfig ¶
func (dialer *PredicateDialer) SetConfig(config comm.ClientConfig)
SetConfig sets the configuration of the PredicateDialer
type RPC ¶
type RPC struct {
	Channel string
	Comm    RemoteCommunicator
	// contains filtered or unexported fields
}
    RPC performs remote procedure calls to remote cluster nodes.
func (*RPC) ReceiveSubmitResponse ¶
func (s *RPC) ReceiveSubmitResponse(destination uint64) (*orderer.SubmitResponse, error)
ReceiveSubmitResponse receives a SubmitResponse from the given destination node
func (*RPC) SendSubmit ¶
func (s *RPC) SendSubmit(destination uint64, request *orderer.SubmitRequest) error
SendSubmit sends a SubmitRequest to the given destination node
func (*RPC) Step ¶
func (s *RPC) Step(destination uint64, msg *orderer.StepRequest) (*orderer.StepResponse, error)
Step sends a StepRequest to the given destination node and returns the response
type RemoteCommunicator ¶
type RemoteCommunicator interface {
	// Remote returns a RemoteContext for the given node ID in the context
	// of the given channel, or error if connection cannot be established, or
	// the channel wasn't configured
	Remote(channel string, id uint64) (*RemoteContext, error)
}
    RemoteCommunicator communicates to remote nodes
type RemoteContext ¶
type RemoteContext struct {
	RPCTimeout time.Duration
	Client orderer.ClusterClient
	// contains filtered or unexported fields
}
    RemoteContext interacts with remote cluster nodes. Every call can be aborted via call to Abort()
func (*RemoteContext) Abort ¶
func (rc *RemoteContext) Abort()
Abort aborts the contexts the RemoteContext uses, thus effectively causes all operations on the embedded ClusterClient to end.
func (*RemoteContext) Step ¶
func (rc *RemoteContext) Step(req *orderer.StepRequest) (*orderer.StepResponse, error)
Step passes an implementation-specific message to another cluster member.
func (*RemoteContext) SubmitStream ¶
func (rc *RemoteContext) SubmitStream() (orderer.Cluster_SubmitClient, error)
SubmitStream creates a new Submit stream
type RemoteNode ¶
type RemoteNode struct {
	// ID is unique among all members, and cannot be 0.
	ID uint64
	// Endpoint is the endpoint of the node, denoted in %s:%d format
	Endpoint string
	// ServerTLSCert is the DER encoded TLS server certificate of the node
	ServerTLSCert []byte
	// ClientTLSCert is the DER encoded TLS client certificate of the node
	ClientTLSCert []byte
}
    RemoteNode represents a cluster member
func (RemoteNode) String ¶
func (rm RemoteNode) String() string
String returns a string representation of this RemoteNode
type RemoteVerifier ¶
type RemoteVerifier func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error
RemoteVerifier verifies the connection to the remote host
type SecureDialer ¶
type SecureDialer interface {
	Dial(address string, verifyFunc RemoteVerifier) (*grpc.ClientConn, error)
}
    SecureDialer connects to a remote address
type Service ¶
type Service struct {
	Dispatcher Dispatcher
	Logger     logging.Logger
}
    Service defines the raft Service
func (*Service) Step ¶
func (s *Service) Step(ctx context.Context, request *orderer.StepRequest) (*orderer.StepResponse, error)
Step forwards a message to a raft FSM located in this server
type Stub ¶
type Stub struct {
	RemoteNode
	*RemoteContext
	// contains filtered or unexported fields
}
    Stub holds all information about the remote node, including the RemoteContext for it, and serializes some operations on it.
func (*Stub) Activate ¶
func (stub *Stub) Activate(createRemoteContext func() (*RemoteContext, error)) error
Activate creates a remote context with the given function callback in an atomic manner - if two parallel invocations are invoked on this Stub, only a single invocation of createRemoteStub takes place.
func (*Stub) Deactivate ¶
func (stub *Stub) Deactivate()
Deactivate deactivates the Stub and ceases all communication operations invoked on it.
type SubmitClient ¶
type SubmitClient interface {
	Send(request *orderer.SubmitRequest) error
	Recv() (*orderer.SubmitResponse, error)
	grpc.ClientStream
}
    SubmitClient is the Submit gRPC stream
type SubmitStream ¶
type SubmitStream interface {
	Send(response *orderer.SubmitResponse) error
	Recv() (*orderer.SubmitRequest, error)
	grpc.ServerStream
}
    SubmitStream defines the gRPC stream for sending transactions, and receiving corresponding responses