genericsmr

package
v0.0.0-...-5782b8f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 4, 2022 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const CHAN_BUFFER_SIZE = 200000
View Source
const FALSE = uint8(0)
View Source
const TRUE = uint8(1)

Variables

This section is empty.

Functions

This section is empty.

Types

type Beacon

type Beacon struct {
	Rid       int32
	Timestamp int64
}

type LatencyOracle

type LatencyOracle interface {
	GetLatency(rId int32) time.Duration
	GetPeerOrderLatency() []int32 // ascending - you will always be index 0
	GetAlive() []bool
	GetPeerLatencies() []time.Duration
}

type Propose

type Propose struct {
	*genericsmrproto.Propose
	Reply *bufio.Writer
	Mutex *sync.Mutex
}

type RPCPair

type RPCPair struct {
	Obj  fastrpc.Serializable
	Chan chan fastrpc.Serializable
}

type Replica

type Replica struct {
	N              int        // total number of replicas
	Id             int32      // the ID of the current replica
	PeerAddrList   []string   // array with the IP:port address of every replica
	Peers          []net.Conn // cache of connections to all other replicas
	PeerReaders    []*bufio.Reader
	PeerWriters    []*bufio.Writer
	Alive          []bool // connection status
	Listener       net.Listener
	Clients        []net.Conn
	ClientsReaders []*bufio.Reader
	ClientsWriters []*bufio.Writer

	State *state.State

	ProposeChan chan *Propose // channel for client proposals
	BeaconChan  chan *Beacon  // channel for beacons from peer replicas

	Shutdown bool

	Thrifty bool // send only as many messages as strictly required?
	Exec    bool // execute commands?
	LRead   bool // execute local reads?
	Dreply  bool // reply to client after command has been executed?
	Beacon  bool // send beacons to detect how fast are the other replicas?

	F int

	Durable bool // log to a stable store?

	StableStorage *os.File // file support for the persistent log

	PreferredPeerOrder []int32 // replicas in the preferred order of communication

	Ewma                    []float64
	ReplicasLatenciesOrders []int32

	Mutex sync.Mutex

	Stats *genericsmrproto.Stats
	// contains filtered or unexported fields
}

func NewReplica

func NewReplica(id int, peerAddrList []string, thrifty bool, exec bool, lread bool, dreply bool, failures int, storageParentDir string, deadTime int32, batchFlush bool, batchWait time.Duration) *Replica

func (*Replica) BeTheLeader

func (*Replica) CalculateAlive

func (r *Replica) CalculateAlive()

func (*Replica) ClientFlushFBuffer

func (r *Replica) ClientFlushFBuffer(cli int32)

func (*Replica) ConnectToPeers

func (r *Replica) ConnectToPeers()

func (*Replica) ConnectToPeersNoListeners

func (r *Replica) ConnectToPeersNoListeners()

func (*Replica) CopyEWMA

func (r *Replica) CopyEWMA() []float64

func (*Replica) Crash

func (r *Replica) Crash()

func (*Replica) FastQuorumSize

func (r *Replica) FastQuorumSize() int

Utils

func (*Replica) FromCandidatesSelectBestLatency

func (r *Replica) FromCandidatesSelectBestLatency(candidates [][]int32) []int32

func (*Replica) FromCandidatesSelectRandom

func (r *Replica) FromCandidatesSelectRandom(candidates [][]int32) []int32

func (*Replica) GetAlive

func (r *Replica) GetAlive() []bool

func (*Replica) GetAliveRandomPeerOrder

func (r *Replica) GetAliveRandomPeerOrder() []int32

func (*Replica) GetLatency

func (r *Replica) GetLatency(rId int32) time.Duration

func (*Replica) GetPeerLatencies

func (r *Replica) GetPeerLatencies() []time.Duration

func (*Replica) GetPeerOrderLatency

func (r *Replica) GetPeerOrderLatency() []int32

returns all alive acceptors ordered by latency (including self)

func (*Replica) GetRandomPeerOrder

func (r *Replica) GetRandomPeerOrder() []int32

returns all alive acceptors ordered by random (including self)

func (*Replica) PeerFlushBuffer

func (r *Replica) PeerFlushBuffer(to int32)

func (*Replica) Ping

func (*Replica) RandomisePeerOrder

func (r *Replica) RandomisePeerOrder()

func (*Replica) ReadQuorumSize

func (r *Replica) ReadQuorumSize() int

func (*Replica) RegisterRPC

func (r *Replica) RegisterRPC(msgObj fastrpc.Serializable, notify chan fastrpc.Serializable) uint8

func (*Replica) ReplyBeacon

func (r *Replica) ReplyBeacon(beacon *Beacon)

func (*Replica) ReplyProposeTS

func (r *Replica) ReplyProposeTS(reply *genericsmrproto.ProposeReplyTS, w *bufio.Writer, lock *sync.Mutex)

func (*Replica) SendBeacon

func (r *Replica) SendBeacon(peerId int32)

func (*Replica) SendMsg

func (r *Replica) SendMsg(peerId int32, code uint8, msg fastrpc.Serializable)

func (*Replica) SendMsgNoFlush

func (r *Replica) SendMsgNoFlush(peerId int32, code uint8, msg fastrpc.Serializable)

func (*Replica) SendMsgNoFlushUNSAFE

func (r *Replica) SendMsgNoFlushUNSAFE(peerId int32, code uint8, msg fastrpc.Serializable)

func (*Replica) SendMsgUNSAFE

func (r *Replica) SendMsgUNSAFE(peerId int32, code uint8, msg fastrpc.Serializable)

func (*Replica) SendToGroup

func (r *Replica) SendToGroup(group []int32, code uint8, msg fastrpc.Serializable)

func (*Replica) SlowQuorumSize

func (r *Replica) SlowQuorumSize() int

func (*Replica) WaitForClientConnections

func (r *Replica) WaitForClientConnections()

Client connections dispatcher

func (*Replica) WriteQuorumSize

func (r *Replica) WriteQuorumSize() int

Flexible Paxos

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL