quicmemberlist

package
v0.0.0-...-2b29d23 Latest Latest
Warning

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

Go to latest
Published: Apr 3, 2024 License: GPL-3.0 Imports: 29 Imported by: 0

Documentation

Overview

Package quicmemberlist is transport layer of memberlist, based on quic stream.

Index

Constants

This section is empty.

Variables

View Source
var CallbackBroadcastMessageHeaderHint = hint.MustNewHint("callback-broadcast-message-header-v0.0.1")
View Source
var ConnInfoBroadcastMessageHint = hint.MustNewHint("conninfo-broadcast-message-v0.0.1")
View Source
var EnsureBroadcastMessageHeaderHint = hint.MustNewHint("ensure-broadcast-message-header-v0.0.1")
View Source
var MemberHint = hint.MustNewHint("memberlist-member-v0.0.1")

Functions

func BasicMemberlistConfig

func BasicMemberlistConfig() *memberlist.Config

func DefaultMemberlistConfig

func DefaultMemberlistConfig(name string, bind, advertise *net.UDPAddr) *memberlist.Config

func FetchCallbackBroadcastMessageFunc

func FetchCallbackBroadcastMessageFunc(
	handlerPrefix quicstream.HandlerPrefix,
	dialf quicstreamheader.DialFunc,
) func(context.Context, ConnInfoBroadcastMessage) (
	[]byte, encoder.Encoder, error,
)

func PongEnsureBroadcastMessageFunc

func PongEnsureBroadcastMessageFunc(
	handlerPrefix quicstream.HandlerPrefix,
	node base.Address,
	signer base.Privatekey,
	networkID base.NetworkID,
	dialf quicstreamheader.DialFunc,
) func(context.Context, ConnInfoBroadcastMessage) error

Types

type AliveDelegate

type AliveDelegate struct {
	*logging.Logging
	// contains filtered or unexported fields
}

func NewAliveDelegate

func NewAliveDelegate(
	jsonencoder encoder.Encoder,
	laddr *net.UDPAddr,
	challengef DelegateNodeFunc,
	allowf DelegateNodeFunc,
) *AliveDelegate

func (*AliveDelegate) NotifyAlive

func (d *AliveDelegate) NotifyAlive(peer *memberlist.Node) error

type BaseMember

type BaseMember struct {
	hint.BaseHinter
	// contains filtered or unexported fields
}

func NewMember

func NewMember(
	name string,
	addr *net.UDPAddr,
	address base.Address,
	publickey base.Publickey,
	publish string,
	tlsinsecure bool,
) (BaseMember, error)

func (BaseMember) Addr

func (n BaseMember) Addr() *net.UDPAddr

func (BaseMember) Address

func (n BaseMember) Address() base.Address

func (BaseMember) ConnInfo

func (n BaseMember) ConnInfo() quicstream.ConnInfo

func (*BaseMember) DecodeJSON

func (n *BaseMember) DecodeJSON(b []byte, enc encoder.Encoder) error

func (BaseMember) HashBytes

func (n BaseMember) HashBytes() []byte

func (BaseMember) IsValid

func (n BaseMember) IsValid([]byte) error

func (BaseMember) JoinedAt

func (n BaseMember) JoinedAt() time.Time

func (BaseMember) MarshalJSON

func (n BaseMember) MarshalJSON() ([]byte, error)

func (BaseMember) MetaBytes

func (n BaseMember) MetaBytes() []byte

func (BaseMember) Name

func (n BaseMember) Name() string

func (BaseMember) Publickey

func (n BaseMember) Publickey() base.Publickey

func (BaseMember) Publish

func (n BaseMember) Publish() NamedConnInfo

func (BaseMember) String

func (n BaseMember) String() string

func (BaseMember) TLSInsecure

func (n BaseMember) TLSInsecure() bool

type Broadcast

type Broadcast struct {
	// contains filtered or unexported fields
}

func NewBroadcast

func NewBroadcast(b []byte, id string, notifych chan struct{}) *Broadcast

func (*Broadcast) Finished

func (b *Broadcast) Finished()

func (*Broadcast) Invalidates

func (b *Broadcast) Invalidates(o memberlist.Broadcast) bool

func (*Broadcast) MarshalZerologObject

func (b *Broadcast) MarshalZerologObject(e *zerolog.Event)

func (*Broadcast) Message

func (b *Broadcast) Message() []byte

func (*Broadcast) UniqueBroadcast

func (*Broadcast) UniqueBroadcast()

type CallbackBroadcastMessageHeader

type CallbackBroadcastMessageHeader struct {
	quicstreamheader.BaseRequestHeader
	// contains filtered or unexported fields
}

func NewCallbackBroadcastMessageHeader

func NewCallbackBroadcastMessageHeader(id string, prefix quicstream.HandlerPrefix) CallbackBroadcastMessageHeader

func (CallbackBroadcastMessageHeader) ID

func (CallbackBroadcastMessageHeader) IsValid

func (CallbackBroadcastMessageHeader) MarshalJSON

func (h CallbackBroadcastMessageHeader) MarshalJSON() ([]byte, error)

func (*CallbackBroadcastMessageHeader) UnmarshalJSON

func (h *CallbackBroadcastMessageHeader) UnmarshalJSON(b []byte) error

type ConnInfoBroadcastMessage

type ConnInfoBroadcastMessage struct {
	hint.BaseHinter
	// contains filtered or unexported fields
}

func NewConnInfoBroadcastMessage

func NewConnInfoBroadcastMessage(id string, ci quicstream.ConnInfo) ConnInfoBroadcastMessage

func (ConnInfoBroadcastMessage) ConnInfo

func (ConnInfoBroadcastMessage) ID

func (ConnInfoBroadcastMessage) IsValid

func (m ConnInfoBroadcastMessage) IsValid([]byte) error

func (ConnInfoBroadcastMessage) MarshalJSON

func (m ConnInfoBroadcastMessage) MarshalJSON() ([]byte, error)

func (*ConnInfoBroadcastMessage) UnmarshalJSON

func (m *ConnInfoBroadcastMessage) UnmarshalJSON(b []byte) error

type Delegate

type Delegate struct {
	*logging.Logging
	// contains filtered or unexported fields
}

func NewDelegate

func NewDelegate(
	local Member,
	numNodes func() int,
	notifyMsgFunc func(b []byte),
) *Delegate

func (*Delegate) GetBroadcasts

func (d *Delegate) GetBroadcasts(overhead, limit int) [][]byte

func (*Delegate) LocalState

func (*Delegate) LocalState(bool) []byte

func (*Delegate) MergeRemoteState

func (*Delegate) MergeRemoteState([]byte, bool)

func (*Delegate) NodeMeta

func (d *Delegate) NodeMeta(int) []byte

func (*Delegate) NotifyMsg

func (d *Delegate) NotifyMsg(b []byte)

func (*Delegate) QueueBroadcast

func (d *Delegate) QueueBroadcast(b memberlist.Broadcast)

type DelegateJoinedFunc

type DelegateJoinedFunc func(Member)

type DelegateLeftFunc

type DelegateLeftFunc func(Member)

type DelegateNodeFunc

type DelegateNodeFunc func(Member) error

type DelegateStoreConnInfo

type DelegateStoreConnInfo func(quicstream.ConnInfo)

type EnsureBroadcastMessageHeader

type EnsureBroadcastMessageHeader struct {
	base.BaseNodeSign
	quicstreamheader.BaseRequestHeader
	// contains filtered or unexported fields
}

func NewEnsureBroadcastMessageHeader

func NewEnsureBroadcastMessageHeader(
	id string,
	prefix quicstream.HandlerPrefix,
	node base.Address,
	signer base.Privatekey,
	networkID base.NetworkID,
) (EnsureBroadcastMessageHeader, error)

func (*EnsureBroadcastMessageHeader) DecodeJSON

func (h *EnsureBroadcastMessageHeader) DecodeJSON(b []byte, enc encoder.Encoder) error

func (EnsureBroadcastMessageHeader) ID

func (EnsureBroadcastMessageHeader) IsValid

func (EnsureBroadcastMessageHeader) MarshalJSON

func (h EnsureBroadcastMessageHeader) MarshalJSON() ([]byte, error)

type EventsDelegate

type EventsDelegate struct {
	*logging.Logging
	// contains filtered or unexported fields
}

func NewEventsDelegate

func NewEventsDelegate(
	jsonencoder encoder.Encoder,
	joinedf DelegateJoinedFunc,
	leftf DelegateLeftFunc,
) *EventsDelegate

func (*EventsDelegate) NotifyJoin

func (d *EventsDelegate) NotifyJoin(peer *memberlist.Node)

func (*EventsDelegate) NotifyLeave

func (d *EventsDelegate) NotifyLeave(peer *memberlist.Node)

func (*EventsDelegate) NotifyUpdate

func (d *EventsDelegate) NotifyUpdate(peer *memberlist.Node)

type FilterNotifyMsgFunc

type FilterNotifyMsgFunc func(interface{}) (bool, error)

type Member

type Member interface {
	util.IsValider
	Addr() *net.UDPAddr
	ConnInfo() quicstream.ConnInfo
	Name() string
	Address() base.Address
	Publickey() base.Publickey
	Publish() NamedConnInfo
	JoinedAt() time.Time
	MetaBytes() []byte
	HashBytes() []byte
}

func AliveMembers

func AliveMembers(
	m *Memberlist,
	exclude func(Member) bool,
) []Member

func RandomAliveMembers

func RandomAliveMembers(
	m *Memberlist,
	size int64,
	exclude func(Member) bool,
) ([]Member, error)

type Memberlist

type Memberlist struct {
	*logging.Logging
	*util.ContextDaemon
	// contains filtered or unexported fields
}

func NewMemberlist

func NewMemberlist(local Member, args *MemberlistArgs) (*Memberlist, error)

func (*Memberlist) Broadcast

func (srv *Memberlist) Broadcast(b memberlist.Broadcast)

func (*Memberlist) CallbackBroadcast

func (srv *Memberlist) CallbackBroadcast(b []byte, id string, notifych chan struct{}) error

func (*Memberlist) CallbackBroadcastHandler

func (srv *Memberlist) CallbackBroadcastHandler() quicstreamheader.Handler[CallbackBroadcastMessageHeader]

func (*Memberlist) CanBroadcast

func (srv *Memberlist) CanBroadcast() bool

func (*Memberlist) EnsureBroadcast

func (srv *Memberlist) EnsureBroadcast(
	b []byte,
	id string,
	notifych chan<- error,
	intervalf func(uint64) time.Duration,
	threshold float64,
	maxRetry uint64,
	excludemember func(Member) bool,
) error

func (*Memberlist) EnsureBroadcastHandler

func (srv *Memberlist) EnsureBroadcastHandler(
	networkID base.NetworkID,
	memberf func(base.Address) (base.Publickey, bool, error),
) quicstreamheader.Handler[EnsureBroadcastMessageHeader]

func (*Memberlist) Exists

func (srv *Memberlist) Exists(addr *net.UDPAddr) bool

func (*Memberlist) IsJoined

func (srv *Memberlist) IsJoined() bool

IsJoined indicates whether local is joined in remote network. If no other remote members, IsJoined will be false.

func (*Memberlist) Join

func (srv *Memberlist) Join(cis []quicstream.ConnInfo) error

func (*Memberlist) Leave

func (srv *Memberlist) Leave(timeout time.Duration) error

func (*Memberlist) Members

func (srv *Memberlist) Members(f func(Member) bool)

func (*Memberlist) MembersLen

func (srv *Memberlist) MembersLen() int

MembersLen() returns number of all the joined members.

func (*Memberlist) Remotes

func (srv *Memberlist) Remotes(f func(Member) bool)

func (*Memberlist) RemotesLen

func (srv *Memberlist) RemotesLen() int

RemotesLen() returns number of all the joined members except local.

func (*Memberlist) SetLogging

func (srv *Memberlist) SetLogging(l *logging.Logging) *logging.Logging

func (*Memberlist) SetNotifyMsg

func (srv *Memberlist) SetNotifyMsg(f func([]byte, encoder.Encoder)) *Memberlist

func (*Memberlist) SetWhenLeftFunc

func (srv *Memberlist) SetWhenLeftFunc(f func(Member)) *Memberlist

func (*Memberlist) Start

func (srv *Memberlist) Start(ctx context.Context) error

type MemberlistArgs

type MemberlistArgs struct {
	Encoder                           encoder.Encoder
	Config                            *memberlist.Config
	PatchedConfig                     *memberlist.Config
	FetchCallbackBroadcastMessageFunc func(context.Context, ConnInfoBroadcastMessage) ([]byte, encoder.Encoder, error)
	PongEnsureBroadcastMessageFunc    func(context.Context, ConnInfoBroadcastMessage) error
	WhenLeftFunc                      func(Member)
	// Members, which has same node address will be allowed to join up to
	// ExtraSameMemberLimit + 1. If ExtraSameMemberLimit is 0, only 1 member is
	// allowed to join.
	ExtraSameMemberLimit func() uint64
	// Not-allowed member will be cached for NotAllowedMemberExpire, after
	// NotAllowedMemberExpire, not-allowed member will be checked by allowf of
	// AliveDelegate.
	NotAllowedMemberExpire               time.Duration
	ChallengeExpire                      time.Duration
	CallbackBroadcastMessageExpire       time.Duration
	FetchCallbackBroadcastMessageTimeout time.Duration
	PongEnsureBroadcastMessageTimeout    time.Duration
	PongEnsureBroadcastMessageExpire     time.Duration
}

func NewMemberlistArgs

func NewMemberlistArgs(jsonencoder encoder.Encoder, config *memberlist.Config) *MemberlistArgs

type NamedAddr

type NamedAddr struct {
	// contains filtered or unexported fields
}

func (NamedAddr) Network

func (NamedAddr) Network() string

func (NamedAddr) String

func (a NamedAddr) String() string

type NamedConnInfo

type NamedConnInfo struct {
	// contains filtered or unexported fields
}

func NewNamedConnInfo

func NewNamedConnInfo(addr string, tlsinsecure bool) (nci NamedConnInfo, _ error)

func NewNamedConnInfoFromConnInfo

func NewNamedConnInfoFromConnInfo(ci quicstream.ConnInfo) NamedConnInfo

func (NamedConnInfo) Addr

func (c NamedConnInfo) Addr() net.Addr

func (NamedConnInfo) ConnInfo

func (c NamedConnInfo) ConnInfo() quicstream.ConnInfo

func (NamedConnInfo) IsValid

func (c NamedConnInfo) IsValid([]byte) error

func (NamedConnInfo) MarshalText

func (c NamedConnInfo) MarshalText() ([]byte, error)

func (NamedConnInfo) String

func (c NamedConnInfo) String() string

func (NamedConnInfo) TLSInsecure

func (c NamedConnInfo) TLSInsecure() bool

func (*NamedConnInfo) UnmarshalText

func (c *NamedConnInfo) UnmarshalText(b []byte) error

type Transport

type Transport struct {
	*logging.Logging

	sync.RWMutex
	// contains filtered or unexported fields
}

func NewTransport

func NewTransport(
	laddr *net.UDPAddr,
	args *TransportArgs,
) *Transport

func NewTransportWithQuicstream

func NewTransportWithQuicstream(
	laddr *net.UDPAddr,
	handler quicstream.HandlerName,
	dialf quicstream.ConnInfoDialFunc,
	notallowf func(string) bool,
	requestTimeoutf func() time.Duration,
) *Transport

func (*Transport) DialAddressTimeout

func (t *Transport) DialAddressTimeout(addr memberlist.Address, timeout time.Duration) (net.Conn, error)

func (*Transport) DialTimeout

func (t *Transport) DialTimeout(addr string, timeout time.Duration) (net.Conn, error)

func (*Transport) FinalAdvertiseAddr

func (t *Transport) FinalAdvertiseAddr(ip string, port int) (net.IP, int, error)

func (*Transport) PacketCh

func (t *Transport) PacketCh() <-chan *memberlist.Packet

func (*Transport) QuicstreamHandler

func (t *Transport) QuicstreamHandler(
	ctx context.Context, addr net.Addr, r io.Reader, _ io.WriteCloser,
) (context.Context, error)

func (*Transport) Shutdown

func (t *Transport) Shutdown() error

func (*Transport) Start

func (t *Transport) Start(context.Context) error

func (*Transport) StreamCh

func (t *Transport) StreamCh() <-chan net.Conn

func (*Transport) WriteTo

func (t *Transport) WriteTo(b []byte, addr string) (time.Time, error)

func (*Transport) WriteToAddress

func (t *Transport) WriteToAddress(b []byte, addr memberlist.Address) (time.Time, error)

type TransportArgs

type TransportArgs struct {
	DialFunc     TransportDialFunc
	WriteFunc    TransportWriteFunc
	NotAllowFunc func(string) bool
}

func NewTransportArgs

func NewTransportArgs() *TransportArgs

type TransportDialFunc

type TransportDialFunc func(context.Context, quicstream.ConnInfo) error

type TransportGetConnInfo

type TransportGetConnInfo func(*net.UDPAddr) (quicstream.ConnInfo, error)

type TransportWriteFunc

type TransportWriteFunc func(context.Context, quicstream.ConnInfo, []byte) error

Jump to

Keyboard shortcuts

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