simulator

package
v0.0.0-...-76dc560 Latest Latest
Warning

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

Go to latest
Published: Sep 26, 2024 License: Apache-2.0 Imports: 34 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (

	// PDHTTPClient is a client for PD HTTP API.
	PDHTTPClient pdHttp.Client
	// SD is a service discovery for PD.
	SD pd.ServiceDiscovery
)

Functions

func Bootstrap

func Bootstrap(ctx context.Context, pdAddrs string, store *metapb.Store, region *metapb.Region) (
	leaderURL string, pdCli pdpb.PDClient, err error)

Bootstrap bootstraps the cluster and using the given PD address firstly. because before bootstrapping the cluster, PDServiceDiscovery can not been started.

func ChooseToHaltPDSchedule

func ChooseToHaltPDSchedule(halt bool)

ChooseToHaltPDSchedule is used to choose whether to halt the PD schedule

func PutPDConfig

func PutPDConfig(config *sc.PDConfig) error

PDHTTPClient is a client for PD HTTP API, these are the functions that are used in the simulator

Types

type AddNode

type AddNode struct{}

AddNode adds nodes.

func (*AddNode) Run

func (*AddNode) Run(raft *RaftEngine, _ int64) bool

Run implements the event interface.

type Client

type Client interface {
	PutStore(context.Context, *metapb.Store) error
	StoreHeartbeat(context.Context, *pdpb.StoreStats) error
	RegionHeartbeat(context.Context, *core.RegionInfo) error

	Close()
	// contains filtered or unexported methods
}

Client is a PD (Placement Driver) client. It should not be used after calling Close().

func NewClient

func NewClient(tag string) (Client, <-chan *pdpb.RegionHeartbeatResponse, error)

NewClient creates a PD client.

type Connection

type Connection struct {
	Nodes map[uint64]*Node
}

Connection records the information of connection among nodes.

func NewConnection

func NewConnection(simCase *cases.Case, storeConfig *config.SimConfig) (*Connection, error)

NewConnection creates nodes according to the configuration and returns the connection among nodes.

type DownNode

type DownNode struct {
	ID int
}

DownNode deletes nodes.

func (*DownNode) Run

func (e *DownNode) Run(raft *RaftEngine, _ int64) bool

Run implements the event interface.

type Driver

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

Driver promotes the cluster status change.

func NewDriver

func NewDriver(pdAddr, statusAddress, caseName string, simConfig *config.SimConfig) (*Driver, error)

NewDriver returns a driver.

func (*Driver) Check

func (d *Driver) Check() bool

Check checks if the simulation is completed.

func (*Driver) GetBootstrapInfo

func (d *Driver) GetBootstrapInfo(r *RaftEngine) (*metapb.Store, *metapb.Region, error)

GetBootstrapInfo returns a valid bootstrap store and region.

func (*Driver) Prepare

func (d *Driver) Prepare() error

Prepare initializes cluster information, bootstraps cluster and starts nodes.

func (*Driver) RegionsHeartbeat

func (d *Driver) RegionsHeartbeat(ctx context.Context)

RegionsHeartbeat sends heartbeat to all regions.

func (*Driver) Start

func (d *Driver) Start() error

Start starts all nodes.

func (*Driver) StepRegions

func (d *Driver) StepRegions(ctx context.Context)

StepRegions steps regions.

func (*Driver) Stop

func (d *Driver) Stop()

Stop stops all nodes.

func (*Driver) StoresHeartbeat

func (d *Driver) StoresHeartbeat(ctx context.Context)

StoresHeartbeat sends heartbeat to all stores.

func (*Driver) Tick

func (d *Driver) Tick()

Tick invokes nodes' Tick.

func (*Driver) TickCount

func (d *Driver) TickCount() int64

TickCount returns the simulation's tick count.

type Event

type Event interface {
	Run(raft *RaftEngine, tickCount int64) bool
}

Event affects the status of the cluster.

type EventRunner

type EventRunner struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

EventRunner includes all events.

func NewEventRunner

func NewEventRunner(events []cases.EventDescriptor, raftEngine *RaftEngine) *EventRunner

NewEventRunner creates an event runner.

func (*EventRunner) Tick

func (er *EventRunner) Tick(tickCount int64)

Tick ticks the event run

type Node

type Node struct {
	*metapb.Store
	syncutil.RWMutex
	// contains filtered or unexported fields
}

Node simulates a TiKV.

func NewNode

func NewNode(s *cases.Store, config *sc.SimConfig) (*Node, error)

NewNode returns a Node.

func (*Node) AddTask

func (n *Node) AddTask(task *Task)

AddTask adds task in this node.

func (*Node) GetState

func (n *Node) GetState() metapb.StoreState

GetState returns current node state.

func (*Node) Start

func (n *Node) Start() error

Start starts the node.

func (*Node) Stop

func (n *Node) Stop()

Stop stops this node.

func (*Node) Tick

func (n *Node) Tick(wg *sync.WaitGroup)

Tick steps node status change.

type RaftEngine

type RaftEngine struct {
	syncutil.RWMutex
	// contains filtered or unexported fields
}

RaftEngine records all raft information.

func NewRaftEngine

func NewRaftEngine(conf *cases.Case, conn *Connection, storeConfig *config.SimConfig) *RaftEngine

NewRaftEngine creates the initialized raft with the configuration.

func (*RaftEngine) BootstrapRegion

func (r *RaftEngine) BootstrapRegion() *core.RegionInfo

BootstrapRegion gets a region to construct bootstrap info.

func (*RaftEngine) GetRegion

func (r *RaftEngine) GetRegion(regionID uint64) *core.RegionInfo

GetRegion returns the RegionInfo with regionID.

func (*RaftEngine) GetRegionByKey

func (r *RaftEngine) GetRegionByKey(regionKey []byte) *core.RegionInfo

GetRegionByKey searches the RegionInfo from regionTree

func (*RaftEngine) GetRegionChange

func (r *RaftEngine) GetRegionChange(storeID uint64) []uint64

GetRegionChange returns a list of RegionID for a given store.

func (*RaftEngine) GetRegions

func (r *RaftEngine) GetRegions() []*core.RegionInfo

GetRegions gets all RegionInfo from regionMap

func (*RaftEngine) NeedSplit

func (r *RaftEngine) NeedSplit(size, rows int64) bool

NeedSplit checks whether the region needs to split according its size and number of keys.

func (*RaftEngine) ResetRegionChange

func (r *RaftEngine) ResetRegionChange(storeID uint64, regionID uint64)

ResetRegionChange resets RegionInfo on a specific store with a given Region ID

func (*RaftEngine) SetRegion

func (r *RaftEngine) SetRegion(region *core.RegionInfo) []*core.RegionInfo

SetRegion sets the RegionInfo with regionID

type ReadFlowOnRegion

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

ReadFlowOnRegion reads bytes in some region

func (*ReadFlowOnRegion) Run

func (e *ReadFlowOnRegion) Run(raft *RaftEngine, tickCount int64) bool

Run implements the event interface.

type Task

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

Task running in node.

func (*Task) Desc

func (t *Task) Desc() string

Desc returns the description of the Task.

func (*Task) RegionID

func (t *Task) RegionID() uint64

RegionID returns the region-id of the Task.

func (*Task) Step

func (t *Task) Step(engine *RaftEngine) (isFinished bool)

Step execute once on the Task.

type WriteFlowOnRegion

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

WriteFlowOnRegion writes bytes in some region.

func (*WriteFlowOnRegion) Run

func (e *WriteFlowOnRegion) Run(raft *RaftEngine, tickCount int64) bool

Run implements the event interface.

type WriteFlowOnSpot

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

WriteFlowOnSpot writes bytes in some range.

func (*WriteFlowOnSpot) Run

func (e *WriteFlowOnSpot) Run(raft *RaftEngine, tickCount int64) bool

Run implements the event interface.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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