edge

package
v0.3.16 Latest Latest
Warning

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

Go to latest
Published: Feb 1, 2021 License: BSD-3-Clause Imports: 25 Imported by: 4

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrClusterNotSet            = errors.New("cluster is not set")
	ErrGatewayNotSet            = errors.New("gateway is not set")
	ErrTunnelNotSet             = errors.New("tunnel is not set")
	ErrUnexpectedTunnelResponse = errors.New("unexpected tunnel response")
	ErrEmptyMemberList          = errors.New("member list is empty")
	ErrMemberNotFound           = errors.New("member not found")
	ErrNoTunnelAddrs            = errors.New("tunnel address does not found")
)

Functions

This section is empty.

Types

type Conn added in v0.1.8

type Conn interface {
	ConnID() uint64
	ClientIP() string
	SendBinary(streamID int64, data []byte) error
	Persistent() bool
	Get(key string) interface{}
	Set(key string, val interface{})
}

Conn defines the Connection interface

type ContextKind added in v0.1.4

type ContextKind byte
const (
	GatewayMessage ContextKind
	ReplicaMessage
	TunnelMessage
)

func (ContextKind) String added in v0.1.9

func (c ContextKind) String() string

type DispatchCtx

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

DispatchCtx

func (*DispatchCtx) BufferPop added in v0.1.9

func (ctx *DispatchCtx) BufferPop() *rony.MessageEnvelope

func (*DispatchCtx) BufferPush added in v0.1.9

func (ctx *DispatchCtx) BufferPush(m *rony.MessageEnvelope)

func (*DispatchCtx) BufferSize added in v0.1.9

func (ctx *DispatchCtx) BufferSize() int32

func (*DispatchCtx) Conn

func (ctx *DispatchCtx) Conn() Conn

func (*DispatchCtx) Debug

func (ctx *DispatchCtx) Debug()

func (*DispatchCtx) FillEnvelope

func (ctx *DispatchCtx) FillEnvelope(requestID uint64, constructor int64, payload []byte, auth []byte, kv ...*rony.KeyValue)

func (*DispatchCtx) Get

func (ctx *DispatchCtx) Get(key string) interface{}

func (*DispatchCtx) GetBool

func (ctx *DispatchCtx) GetBool(key string) bool

func (*DispatchCtx) GetBytes

func (ctx *DispatchCtx) GetBytes(key string, defaultValue []byte) []byte

func (*DispatchCtx) GetInt64

func (ctx *DispatchCtx) GetInt64(key string, defaultValue int64) int64

func (*DispatchCtx) GetString

func (ctx *DispatchCtx) GetString(key string, defaultValue string) string

func (*DispatchCtx) Kind added in v0.1.4

func (ctx *DispatchCtx) Kind() ContextKind

func (*DispatchCtx) ServerID added in v0.1.9

func (ctx *DispatchCtx) ServerID() string

func (*DispatchCtx) Set

func (ctx *DispatchCtx) Set(key string, v interface{})

func (*DispatchCtx) StreamID

func (ctx *DispatchCtx) StreamID() int64

func (*DispatchCtx) UnmarshalEnvelope

func (ctx *DispatchCtx) UnmarshalEnvelope(data []byte) error

type Dispatcher

type Dispatcher interface {
	// All the input arguments are valid in the function context, if you need to pass 'envelope' to other
	// async functions, make sure to hard copy (clone) it before sending it.
	OnMessage(ctx *DispatchCtx, envelope *rony.MessageEnvelope)
	// All the input arguments are valid in the function context, if you need to pass 'data' or 'envelope' to other
	// async functions, make sure to hard copy (clone) it before sending it. If 'err' is not nil then envelope will be
	// discarded, it is the user's responsibility to send back appropriate message using 'conn'
	// Note that conn IS NOT nil in any circumstances.
	Interceptor(ctx *DispatchCtx, data []byte) (err error)
	// This will be called when the context has been finished, this lets cleaning up, or in case you need to flush the
	// messages and updates in one go.
	Done(ctx *DispatchCtx)
	// This will be called when a new connection has been opened
	OnOpen(conn rony.Conn, kvs ...*rony.KeyValue)
	// This will be called when a connection is closed
	OnClose(conn rony.Conn)
}

Dispatcher

type DummyGatewayConfig added in v0.1.8

type DummyGatewayConfig dummyGateway.Config

type GossipClusterConfig added in v0.1.8

type GossipClusterConfig gossipCluster.Config

type Handler

type Handler func(ctx *RequestCtx, in *rony.MessageEnvelope)

type HandlerOptions added in v0.3.12

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

func NewHandlerOptions added in v0.3.12

func NewHandlerOptions() *HandlerOptions

func (*HandlerOptions) ApplyTo added in v0.3.12

func (ho *HandlerOptions) ApplyTo(h ...Handler) []Handler

func (*HandlerOptions) SetPostHandlers added in v0.3.12

func (ho *HandlerOptions) SetPostHandlers(h ...Handler) *HandlerOptions

func (*HandlerOptions) SetPreHandlers added in v0.3.12

func (ho *HandlerOptions) SetPreHandlers(h ...Handler) *HandlerOptions

type Option

type Option func(edge *Server)

Option

func WithDispatcher added in v0.1.9

func WithDispatcher(d Dispatcher) Option

WithDispatcher enables custom dispatcher to write your specific event handlers.

func WithGossipCluster added in v0.1.5

func WithGossipCluster(cfg GossipClusterConfig) Option

WithGossipCluster enables the cluster in gossip mode. This mod is eventually consistent mode but there is no need to a central key-value store or any other 3rd party service to run the cluster

func WithTcpGateway

func WithTcpGateway(config TcpGatewayConfig) Option

WithTcpGateway set the gateway to tcp which can support http and/or websocket Only one gateway could be set and if you set another gateway it panics on runtime.

func WithTestGateway

func WithTestGateway(config DummyGatewayConfig) Option

WithTestGateway set the gateway to a dummy gateway which is useful for writing tests. Only one gateway could be set and if you set another gateway it panics on runtime.

func WithUdpTunnel added in v0.1.8

func WithUdpTunnel(config UdpTunnelConfig) Option

WithUdpTunnel set the tunnel to a udp based tunnel which provides communication channel between edge servers.

type RequestCtx

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

RequestCtx

func (*RequestCtx) Cluster added in v0.2.10

func (ctx *RequestCtx) Cluster() cluster.Cluster

func (*RequestCtx) Conn

func (ctx *RequestCtx) Conn() Conn

func (*RequestCtx) ConnID

func (ctx *RequestCtx) ConnID() uint64

func (*RequestCtx) ExecuteRemote added in v0.1.9

func (ctx *RequestCtx) ExecuteRemote(replicaSet uint64, onlyLeader bool, req, res *rony.MessageEnvelope) error

func (*RequestCtx) Get

func (ctx *RequestCtx) Get(key string) interface{}

func (*RequestCtx) GetBool

func (ctx *RequestCtx) GetBool(key string) bool

func (*RequestCtx) GetBytes

func (ctx *RequestCtx) GetBytes(key string, defaultValue []byte) []byte

func (*RequestCtx) GetInt64

func (ctx *RequestCtx) GetInt64(key string, defaultValue int64) int64

func (*RequestCtx) GetString

func (ctx *RequestCtx) GetString(key string, defaultValue string) string

func (*RequestCtx) Kind added in v0.1.4

func (ctx *RequestCtx) Kind() ContextKind

func (*RequestCtx) PushCustomError

func (ctx *RequestCtx) PushCustomError(code, item string, enTxt string, enItems []string, localTxt string, localItems []string)

func (*RequestCtx) PushCustomMessage

func (ctx *RequestCtx) PushCustomMessage(requestID uint64, constructor int64, proto proto.Message, kvs ...*rony.KeyValue)

func (*RequestCtx) PushError

func (ctx *RequestCtx) PushError(code, item string)

func (*RequestCtx) PushMessage

func (ctx *RequestCtx) PushMessage(constructor int64, proto proto.Message)

func (*RequestCtx) PushRedirectLeader

func (ctx *RequestCtx) PushRedirectLeader()

func (*RequestCtx) PushRedirectRequest added in v0.2.10

func (ctx *RequestCtx) PushRedirectRequest(replicaSet uint64)

func (*RequestCtx) PushRedirectSession added in v0.2.10

func (ctx *RequestCtx) PushRedirectSession(replicaSet uint64, wait time.Duration)

func (*RequestCtx) ReqID

func (ctx *RequestCtx) ReqID() uint64

func (*RequestCtx) Return

func (ctx *RequestCtx) Return()

func (*RequestCtx) ServerID added in v0.1.4

func (ctx *RequestCtx) ServerID() string

func (*RequestCtx) Set

func (ctx *RequestCtx) Set(key string, v interface{})

func (*RequestCtx) StopExecution

func (ctx *RequestCtx) StopExecution()

func (*RequestCtx) Stopped

func (ctx *RequestCtx) Stopped() bool

type Server

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

Server

func NewServer

func NewServer(serverID string, opts ...Option) *Server

func (*Server) AppendHandlers

func (edge *Server) AppendHandlers(constructor int64, handlers ...Handler)

AppendHandlers appends the handlers for the constructor in order. So handlers[n] will be called before handlers[n+1].

func (*Server) BulkAppendHandlers added in v0.3.8

func (edge *Server) BulkAppendHandlers(handlers []Handler, constructors ...int64)

BulkAppendHandlers appends the handlers for all the constructors. This method is useful when you a fixed set of pre-handlers for many of your rpc.it appends the handlers for the constructor in order. So handlers[n] will be called before handlers[n+1]

func (*Server) BulkPrependHandlers added in v0.3.8

func (edge *Server) BulkPrependHandlers(handlers []Handler, constructors ...int64)

BulkPrependHandlers prepends the handlers for all the constructors. This method is useful when you a fixed set of post-handlers for many of your rpc.it appends the handlers for the constructor in order.

func (*Server) Cluster added in v0.3.16

func (edge *Server) Cluster() cluster.Cluster

Cluster returns a reference to the underlying cluster of the Edge server

func (*Server) GetGatewayConn added in v0.0.6

func (edge *Server) GetGatewayConn(connID uint64) rony.Conn

GetGatewayConn return the gateway connection identified by connID or returns nil if not found.

func (*Server) GetServerID

func (edge *Server) GetServerID() string

GetServerID return this server id, which MUST be unique in the cluster otherwise the behaviour is unknown.

func (*Server) JoinCluster

func (edge *Server) JoinCluster(addr ...string) (int, error)

JoinCluster is used to take an existing Cluster and attempt to join a cluster by contacting all the given hosts and performing a state sync. This returns the number of hosts successfully contacted and an error if none could be reached. If an error is returned, the node did not successfully join the cluster.

func (*Server) PrependHandlers

func (edge *Server) PrependHandlers(constructor int64, handlers ...Handler)

PrependHandlers prepends the handlers for the constructor in order.

func (*Server) SetGlobalPostHandlers added in v0.3.8

func (edge *Server) SetGlobalPostHandlers(handlers ...Handler)

SetGlobalPostHandlers set the handler which will be called after executing any request. These pre handlers are like middlewares which will be automatically triggered for each request. If you want to set post handler for specific request the your must use SetHandlers, PrependHandlers or AppendHandlers

func (*Server) SetGlobalPreHandlers added in v0.3.8

func (edge *Server) SetGlobalPreHandlers(handlers ...Handler)

SetGlobalPreHandlers set the handler which will be called before executing any request. These pre handlers are like middlewares which will be automatically triggered for each request. If you want to set pre handler for specific request the your must use SetHandlers, PrependHandlers or AppendHandlers

func (*Server) SetHandlers

func (edge *Server) SetHandlers(constructor int64, leaderOnly bool, handlers ...Handler)

SetHandlers set the handlers for the constructor. 'leaderOnly' is applicable ONLY if the cluster is run with Raft support. If cluster is a Raft enabled cluster, then by setting 'leaderOnly' to TRUE, requests sent to a follower server will return redirect error to the client. For standalone servers 'leaderOnly' does not affect.

func (*Server) Shutdown

func (edge *Server) Shutdown()

Shutdown gracefully shutdown the services

func (*Server) ShutdownWithSignal

func (edge *Server) ShutdownWithSignal(signals ...os.Signal)

Shutdown blocks until any of the signals has been called

func (*Server) Start added in v0.1.9

func (edge *Server) Start()

Start is a helper function which tries to start all three parts of the edge server This function does not return any error, if you need to make sure all the parts are started with no error, then you must start each section separately.

func (*Server) StartCluster

func (edge *Server) StartCluster() (err error)

StartCluster is non-blocking function which runs the gossip and raft if it is set

func (*Server) StartGateway

func (edge *Server) StartGateway() error

StartGateway is non-blocking function runs the gateway in background so we can accept clients requests

func (*Server) StartTunnel added in v0.1.9

func (edge *Server) StartTunnel() error

StartTunnel is non-blocking function runs the gateway in background so we can accept other servers requests

func (*Server) Stats

func (edge *Server) Stats() *Stats

Stats exports some internal metrics data packed in 'Stats' struct

type Stats

type Stats struct {
	Address         string
	RaftMembers     int
	RaftState       string
	ReplicaSet      uint64
	Members         int
	MembershipScore int
	TunnelAddr      []string
	GatewayProtocol gateway.Protocol
	GatewayAddr     []string
}

Stats exports some internal metrics data

type TcpGatewayConfig added in v0.1.8

type TcpGatewayConfig tcpGateway.Config

type UdpTunnelConfig added in v0.1.8

type UdpTunnelConfig udpTunnel.Config

Jump to

Keyboard shortcuts

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