Documentation ¶
Overview ¶
Package rwregister is a generated protocol buffer package.
It is generated from these files:
register.proto
It has these top-level messages:
Content Value WriteResponse ReadRequest
Index ¶
- Constants
- Variables
- func Equal(a, b *Configuration) bool
- func ManagerCreationError(err error) error
- func RegisterRegisterServer(s *grpc.Server, srv RegisterServer)
- type ConfigNotFoundError
- type Configuration
- func (c *Configuration) ID() uint32
- func (c *Configuration) NodeIDs() []uint32
- func (c *Configuration) Nodes() []*Node
- func (c *Configuration) Read(ctx context.Context, arg *ReadRequest) (*Value, error)
- func (c *Configuration) Size() int
- func (c *Configuration) String() string
- func (c *Configuration) Write(ctx context.Context, arg *Value) (*WriteResponse, error)
- type Content
- func (*Content) Descriptor() ([]byte, []int)
- func (m *Content) GetTimestamp() int64
- func (m *Content) GetValue() string
- func (m *Content) Marshal() (dAtA []byte, err error)
- func (m *Content) MarshalTo(dAtA []byte) (int, error)
- func (*Content) ProtoMessage()
- func (m *Content) Reset()
- func (m *Content) Size() (n int)
- func (this *Content) String() string
- func (m *Content) Unmarshal(dAtA []byte) error
- type IllegalConfigError
- type Manager
- func (m *Manager) AddNode(addr string) error
- func (m *Manager) Close()
- func (m *Manager) Configuration(id uint32) (config *Configuration, found bool)
- func (m *Manager) ConfigurationIDs() []uint32
- func (m *Manager) Configurations() []*Configuration
- func (m *Manager) NewConfiguration(ids []uint32, qspec QuorumSpec) (*Configuration, error)
- func (m *Manager) Node(id uint32) (node *Node, found bool)
- func (m *Manager) NodeIDs() []uint32
- func (m *Manager) Nodes() []*Node
- func (m *Manager) Size() (nodes, configs int)
- type ManagerOption
- type Monitor
- type MultiSorter
- type Node
- type NodeNotFoundError
- type QuoSpecQ
- type QuorumCallError
- type QuorumSpec
- type ReadRequest
- func (*ReadRequest) Descriptor() ([]byte, []int)
- func (m *ReadRequest) Marshal() (dAtA []byte, err error)
- func (m *ReadRequest) MarshalTo(dAtA []byte) (int, error)
- func (*ReadRequest) ProtoMessage()
- func (m *ReadRequest) Reset()
- func (m *ReadRequest) Size() (n int)
- func (this *ReadRequest) String() string
- func (m *ReadRequest) Unmarshal(dAtA []byte) error
- type RegisterClient
- type RegisterServer
- type RegisterServerBasic
- type RegisterTestServer
- type Value
- func (*Value) Descriptor() ([]byte, []int)
- func (m *Value) GetC() *Content
- func (m *Value) Marshal() (dAtA []byte, err error)
- func (m *Value) MarshalTo(dAtA []byte) (int, error)
- func (*Value) ProtoMessage()
- func (m *Value) Reset()
- func (m *Value) Size() (n int)
- func (this *Value) String() string
- func (m *Value) Unmarshal(dAtA []byte) error
- type WriteResponse
- func (*WriteResponse) Descriptor() ([]byte, []int)
- func (m *WriteResponse) GetAck() bool
- func (m *WriteResponse) Marshal() (dAtA []byte, err error)
- func (m *WriteResponse) MarshalTo(dAtA []byte) (int, error)
- func (*WriteResponse) ProtoMessage()
- func (m *WriteResponse) Reset()
- func (m *WriteResponse) Size() (n int)
- func (this *WriteResponse) String() string
- func (m *WriteResponse) Unmarshal(dAtA []byte) error
Constants ¶
const LevelNotSet = -1
LevelNotSet is the zero value level used to indicate that no level (and thereby no reply) has been set for a correctable quorum call.
Variables ¶
var ( ErrInvalidLengthRegister = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowRegister = fmt.Errorf("proto: integer overflow") )
var Error = func(n1, n2 *Node) bool { if n1.lastErr != nil && n2.lastErr == nil { return false } return true }
Error sorts nodes by their LastErr() status in increasing order. A node with LastErr() != nil is larger than a node with LastErr() == nil.
var ID = func(n1, n2 *Node) bool {
return n1.id < n2.id
}
ID sorts nodes by their identifier in increasing order.
var Latency = func(n1, n2 *Node) bool { if n1.latency < 0 { return false } return n1.latency < n2.latency }
Latency sorts nodes by latency in increasing order. Latencies less then zero (sentinel value) are considered greater than any positive latency.
Functions ¶
func Equal ¶
func Equal(a, b *Configuration) bool
Equal returns a boolean reporting whether a and b represents the same configuration.
func ManagerCreationError ¶
ManagerCreationError returns an error reporting that a Manager could not be created due to err.
func RegisterRegisterServer ¶
func RegisterRegisterServer(s *grpc.Server, srv RegisterServer)
Types ¶
type ConfigNotFoundError ¶
type ConfigNotFoundError uint32
A ConfigNotFoundError reports that a specified configuration could not be found.
func (ConfigNotFoundError) Error ¶
func (e ConfigNotFoundError) Error() string
type Configuration ¶
type Configuration struct {
// contains filtered or unexported fields
}
A Configuration represents a static set of nodes on which quorum remote procedure calls may be invoked.
func (*Configuration) ID ¶
func (c *Configuration) ID() uint32
ID reports the identifier for the configuration.
func (*Configuration) NodeIDs ¶
func (c *Configuration) NodeIDs() []uint32
NodeIDs returns a slice containing the local ids of all the nodes in the configuration. IDs are returned in the same order as they were provided in the creation of the Configuration.
func (*Configuration) Nodes ¶
func (c *Configuration) Nodes() []*Node
Nodes returns a slice of each available node. IDs are returned in the same order as they were provided in the creation of the Configuration.
func (*Configuration) Read ¶
func (c *Configuration) Read(ctx context.Context, arg *ReadRequest) (*Value, error)
Read is invoked as a quorum call on all nodes in configuration c, using the same argument arg, and returns the result.
func (*Configuration) Size ¶
func (c *Configuration) Size() int
Size returns the number of nodes in the configuration.
func (*Configuration) String ¶
func (c *Configuration) String() string
func (*Configuration) Write ¶
func (c *Configuration) Write(ctx context.Context, arg *Value) (*WriteResponse, error)
Write is invoked as a quorum call on all nodes in configuration c, using the same argument arg, and returns the result.
type Content ¶
type Content struct { Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` Timestamp int64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` }
func (*Content) Descriptor ¶
func (*Content) GetTimestamp ¶
func (*Content) ProtoMessage ¶
func (*Content) ProtoMessage()
type IllegalConfigError ¶
type IllegalConfigError string
An IllegalConfigError reports that a specified configuration could not be created.
func (IllegalConfigError) Error ¶
func (e IllegalConfigError) Error() string
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager manages a pool of node configurations on which quorum remote procedure calls can be made.
func NewManager ¶
func NewManager(nodeAddrs []string, opts ...ManagerOption) (*Manager, error)
NewManager attempts to connect to the given set of node addresses and if successful returns a new Manager containing connections to those nodes.
func (*Manager) AddNode ¶
AddNode attempts to dial to the provide node address. The node is added to the Manager's pool of nodes if a connection was established.
func (*Manager) Close ¶
func (m *Manager) Close()
Close closes all node connections and any client streams.
func (*Manager) Configuration ¶
func (m *Manager) Configuration(id uint32) (config *Configuration, found bool)
Configuration returns the configuration with the given global identifier if present.
func (*Manager) ConfigurationIDs ¶
ConfigurationIDs returns the identifier of each available configuration.
func (*Manager) Configurations ¶
func (m *Manager) Configurations() []*Configuration
Configurations returns a slice of each available configuration.
func (*Manager) NewConfiguration ¶
func (m *Manager) NewConfiguration(ids []uint32, qspec QuorumSpec) (*Configuration, error)
NewConfiguration returns a new configuration given quorum specification and a timeout.
func (*Manager) NodeIDs ¶
NodeIDs returns the identifier of each available node. IDs are returned in the same order as they were provided in the creation of the Manager.
type ManagerOption ¶
type ManagerOption func(*managerOptions)
ManagerOption provides a way to set different options on a new Manager.
func WithGrpcDialOptions ¶
func WithGrpcDialOptions(opts ...grpc.DialOption) ManagerOption
WithGrpcDialOptions returns a ManagerOption which sets any gRPC dial options the Manager should use when initially connecting to each node in its pool.
func WithLogger ¶
func WithLogger(logger *log.Logger) ManagerOption
WithLogger returns a ManagerOption which sets an optional error logger for the Manager.
func WithNoConnect ¶
func WithNoConnect() ManagerOption
WithNoConnect returns a ManagerOption which instructs the Manager not to connect to any of its nodes. Mainly used for testing purposes.
func WithTracing ¶
func WithTracing() ManagerOption
WithTracing controls whether to trace qourum calls for this Manager instance using the golang.org/x/net/trace package. Tracing is currently only supported for regular quorum calls.
type Monitor ¶
type MultiSorter ¶
type MultiSorter struct {
// contains filtered or unexported fields
}
MultiSorter implements the Sort interface, sorting the nodes within.
func OrderedBy ¶
func OrderedBy(less ...lessFunc) *MultiSorter
OrderedBy returns a Sorter that sorts using the less functions, in order. Call its Sort method to sort the data.
func (*MultiSorter) Less ¶
func (ms *MultiSorter) Less(i, j int) bool
Less is part of sort.Interface. It is implemented by looping along the less functions until it finds a comparison that is either Less or !Less. Note that it can call the less functions twice per call. We could change the functions to return -1, 0, 1 and reduce the number of calls for greater efficiency: an exercise for the reader.
func (*MultiSorter) Sort ¶
func (ms *MultiSorter) Sort(nodes []*Node)
Sort sorts the argument slice according to the less functions passed to OrderedBy.
type Node ¶
type Node struct { RegisterClient RegisterClient // contains filtered or unexported fields }
Node encapsulates the state of a node on which a remote procedure call can be made.
func (*Node) LastErr ¶
LastErr returns the last error encountered (if any) when invoking a remote procedure call on this node.
type NodeNotFoundError ¶
type NodeNotFoundError uint32
A NodeNotFoundError reports that a specified node could not be found.
func (NodeNotFoundError) Error ¶
func (e NodeNotFoundError) Error() string
type QuoSpecQ ¶
type QuoSpecQ struct {
// contains filtered or unexported fields
}
QuoSpecQ is the quorum specification for the RWRegister quorum algorithm.
func (QuoSpecQ) ReadQF ¶
ReadQF returns nil and false until enough replies have been receive so as to satisfy the quorum condition for a read quorum. Hence, once enough replies have been received, the highest value and true is returned.
func (QuoSpecQ) WriteQF ¶
func (qq QuoSpecQ) WriteQF(replies []*WriteResponse) (*WriteResponse, bool)
WriteQF returns WRITENACK, that is nil and false, until enough replies have been received. When enough replies have been received, we return WRITEACK, that is the first reply and true.
type QuorumCallError ¶
A QuorumCallError is used to report that a quorum call failed.
func (QuorumCallError) Error ¶
func (e QuorumCallError) Error() string
type QuorumSpec ¶
type QuorumSpec interface { // ReadQF is the quorum function for the Read // quorum call method. ReadQF(replies []*Value) (*Value, bool) // WriteQF is the quorum function for the Write // quorum call method. WriteQF(replies []*WriteResponse) (*WriteResponse, bool) }
QuorumSpec is the interface that wraps every quorum function.
func NewQuoSpecQ ¶
func NewQuoSpecQ(rqSize, wqSize int) QuorumSpec
NewQuoSpecQ returns a quorum specification with quorum sizes for read and write quorum functions.
type ReadRequest ¶
type ReadRequest struct { }
func (*ReadRequest) Descriptor ¶
func (*ReadRequest) Descriptor() ([]byte, []int)
func (*ReadRequest) Marshal ¶
func (m *ReadRequest) Marshal() (dAtA []byte, err error)
func (*ReadRequest) ProtoMessage ¶
func (*ReadRequest) ProtoMessage()
func (*ReadRequest) Reset ¶
func (m *ReadRequest) Reset()
func (*ReadRequest) Size ¶
func (m *ReadRequest) Size() (n int)
func (*ReadRequest) String ¶
func (this *ReadRequest) String() string
func (*ReadRequest) Unmarshal ¶
func (m *ReadRequest) Unmarshal(dAtA []byte) error
type RegisterClient ¶
type RegisterClient interface { Read(ctx context.Context, in *ReadRequest, opts ...grpc.CallOption) (*Value, error) Write(ctx context.Context, in *Value, opts ...grpc.CallOption) (*WriteResponse, error) }
func NewRegisterClient ¶
func NewRegisterClient(cc *grpc.ClientConn) RegisterClient
type RegisterServer ¶
type RegisterServer interface { Read(context.Context, *ReadRequest) (*Value, error) Write(context.Context, *Value) (*WriteResponse, error) }
type RegisterServerBasic ¶
RegisterServerBasic represents a single State register.
func NewRegisterBasic ¶
func NewRegisterBasic() *RegisterServerBasic
NewRegisterBasic returns a new basic register server.
func (*RegisterServerBasic) Read ¶
func (r *RegisterServerBasic) Read(ctx context.Context, rq *ReadRequest) (*Value, error)
Read can handle the reed request from the client.
func (*RegisterServerBasic) ReadExecuted ¶
func (r *RegisterServerBasic) ReadExecuted()
ReadExecuted returns when r has has completed a read.
func (*RegisterServerBasic) Write ¶
func (r *RegisterServerBasic) Write(ctx context.Context, s *Value) (*WriteResponse, error)
Write can handle the write request from the client.
func (*RegisterServerBasic) WriteExecuted ¶
func (r *RegisterServerBasic) WriteExecuted()
WriteExecuted returns when r has has completed a write.
type RegisterTestServer ¶
type RegisterTestServer interface { RegisterServer ReadExecuted() WriteExecuted() }
RegisterTestServer is a basic register server that in addition also can signal when a read or write has completed.
type Value ¶
type Value struct {
C *Content `protobuf:"bytes,1,opt,name=c" json:"c,omitempty"`
}
func (*Value) Descriptor ¶
func (*Value) ProtoMessage ¶
func (*Value) ProtoMessage()
type WriteResponse ¶
type WriteResponse struct {
Ack bool `protobuf:"varint,1,opt,name=ack,proto3" json:"ack,omitempty"`
}
[Ack]
func (*WriteResponse) Descriptor ¶
func (*WriteResponse) Descriptor() ([]byte, []int)
func (*WriteResponse) GetAck ¶
func (m *WriteResponse) GetAck() bool
func (*WriteResponse) Marshal ¶
func (m *WriteResponse) Marshal() (dAtA []byte, err error)
func (*WriteResponse) ProtoMessage ¶
func (*WriteResponse) ProtoMessage()
func (*WriteResponse) Reset ¶
func (m *WriteResponse) Reset()
func (*WriteResponse) Size ¶
func (m *WriteResponse) Size() (n int)
func (*WriteResponse) String ¶
func (this *WriteResponse) String() string
func (*WriteResponse) Unmarshal ¶
func (m *WriteResponse) Unmarshal(dAtA []byte) error