models

package
v0.0.0-...-73a9268 Latest Latest
Warning

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

Go to latest
Published: May 24, 2023 License: AGPL-3.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrMasterNodeIsNotSuperior = errors.New("the specified master node is not my superior")
View Source
var ErrModelInvalid = errors.New("slave not invalid")

ErrModelInvalid 表示删除出错。 TODO: 此为暂定名。

View Source
var ErrNodeDatabaseError = errors.New("node database error") // TODO: 具体错误信息待完善。
View Source
var ErrNodeIsNotEqualBecauseOfDifferentID = errors.New("the two are not equal because of their different ID")
View Source
var ErrNodeIsNotEqualBecauseOfLevelAndTurn = errors.New("the two are not equal because of their different level and turn")
View Source
var ErrNodeIsNotEqualBecauseOfNil = errors.New("at least one of the two is empty")
View Source
var ErrNodeIsNotEqualBecauseOfSocket = errors.New("the two are not equal because of their different socket")
View Source
var ErrNodeSuperiorNotExist = errors.New("superior node not exist")
View Source
var ErrSlaveNodeIsNotSubordinate = errors.New("the specified slave node is not my subordinate")

Functions

This section is empty.

Types

type NodeInfo

type NodeInfo struct {
	ID          uint64                 `gorm:"column:id;primaryKey;autoIncrement;<-:false" json:"id"`
	Name        string                 `gorm:"column:name;default:''" json:"name"`
	NodeVersion string                 `gorm:"column:node_version;default:'';<-:create" json:"node_version"`
	Host        string                 `gorm:"column:host;<-:create" json:"Host"`
	Port        uint16                 `gorm:"column:port;<-:create" json:"Port"`
	Level       uint8                  `gorm:"column:level" json:"Level"`
	SuperiorID  uint64                 `gorm:"column:superior_id" json:"superior_id"`
	Turn        uint32                 `gorm:"column:turn" json:"turn"`
	CreatedAt   time.Time              `gorm:"column:created_at;autoCreateTime:milli" json:"created_at"`
	UpdatedAt   time.Time              `gorm:"column:updated_at;autoUpdateTime:milli" json:"updated_at"`
	Version     optimisticlock.Version `gorm:"column:version;default:0" json:"version"`
}

func GetNodeInfo

func GetNodeInfo(id uint64) (*NodeInfo, error)

GetNodeInfo 根据指定ID获取NodeInfo记录。若指定ID的记录不存在,则报 gorm.ErrRecordNotFound。

func NewNodeInfo

func NewNodeInfo(name string, nodeVersion string, port uint16, level uint8) *NodeInfo

NewNodeInfo creates a new NodeInfo instance.

func (*NodeInfo) AddSlaveNode

func (m *NodeInfo) AddSlaveNode(n *NodeInfo) (bool, error)

AddSlaveNode 添加从节点信息到数据库。 从节点的上级节点为当前节点。 从节点的 Level 为当前节点 + 1。 从节点的 Turn 为当前所有节点最大 Turn + 1。如果没有从节点,则默认为 1。

func (*NodeInfo) AfterDelete

func (m *NodeInfo) AfterDelete(tx *gorm.DB) (err error)

AfterDelete NodeInfo 删除后将最后一刻数据移入 models.NodeInfoLegacy 中。 TODO: 1. 插入操作出错是否报错。若报错,则会阻断删除。若不报错,则会掩盖 models.NodeInfoLegacy 异常。

func (*NodeInfo) CommitSelfAsMasterNode

func (m *NodeInfo) CommitSelfAsMasterNode() (bool, error)

func (*NodeInfo) GetAllSlaveNodes

func (m *NodeInfo) GetAllSlaveNodes() (*[]NodeInfo, error)

GetAllSlaveNodes 获取当前节点的所有从节点。

func (*NodeInfo) GetLogActiveLatest

func (m *NodeInfo) GetLogActiveLatest() (*NodeLog.NodeLog, error)

func (*NodeInfo) GetLogMasterReportSlaveInactive

func (m *NodeInfo) GetLogMasterReportSlaveInactive(targetID uint64) (*NodeLog.NodeLog, error)

func (*NodeInfo) GetLogSlaveReportMasterInactive

func (m *NodeInfo) GetLogSlaveReportMasterInactive(targetID uint64) (*NodeLog.NodeLog, error)

func (*NodeInfo) GetNodeBySocket

func (m *NodeInfo) GetNodeBySocket() (*NodeInfo, error)

func (*NodeInfo) GetSuperiorNode

func (m *NodeInfo) GetSuperiorNode(specifySuperior bool) (*NodeInfo, error)

GetSuperiorNode 获得当前级别的上级节点。如果要指定上级,则 specifySuperior = true。 如果为发现上级阶段,则不指定上级。如果为检查上级,则需要指定。 如果已经是最高级,则报 ErrNodeLevelAlreadyHighest。 如果查询数据库不存在上级节点,则报 ErrNodeSuperiorNotExist。其它数据库错误则报 ErrNodeDatabaseError。

func (*NodeInfo) HandoverMasterNode

func (m *NodeInfo) HandoverMasterNode(candidate *NodeInfo) error

HandoverMasterNode 主节点主动通知候选节点接替自己。

此方法涉及到一系列数据库操作,需要在事务中进行。其中某次数据库操作报错,所有之前的操作都将会滚。

步骤如下:

1. 查询 candidate 对应的 ID、Host、Port、Level 是否与数据表内一致。如果不一致,则报 gorm.ErrRecordNotFound。如果不是自己的直接下属,则报 ErrSlaveNodeIsNotSubordinate。

2. 删除 master 记录。如果查询记录已不存在,则不会报错。

3. 修改 candidate 的记录:level -=1,candidate.SuperiorID = master.SuperiorID,candidate.Turn = master.Turn。

4. 修改其它节点的 SuperiorID 为自己。

func (*NodeInfo) IsEqual

func (m *NodeInfo) IsEqual(target *NodeInfo) error

func (*NodeInfo) IsEqualToRegistered

func (m *NodeInfo) IsEqualToRegistered(target *models.RegisteredNodeInfo) error

func (*NodeInfo) IsSocketEqual

func (m *NodeInfo) IsSocketEqual(target *NodeInfo) bool

IsSocketEqual determine whether the sockets of two nodes are equal.

func (*NodeInfo) IsSocketEqualToRegistered

func (m *NodeInfo) IsSocketEqualToRegistered(target *models.RegisteredNodeInfo) bool

func (*NodeInfo) IsSubordinate

func (m *NodeInfo) IsSubordinate(slave *NodeInfo) bool

func (*NodeInfo) IsSuperior

func (m *NodeInfo) IsSuperior(master *NodeInfo) bool

func (*NodeInfo) Log

func (m *NodeInfo) Log() string

func (*NodeInfo) LogActiveLatest

func (m *NodeInfo) LogActiveLatest() func(db *gorm.DB) *gorm.DB

LogActiveLatest 附加当前节点报告活跃日志,按最后更新时间倒序排序。

func (*NodeInfo) LogMasterReportSlaveInactiveLatest

func (m *NodeInfo) LogMasterReportSlaveInactiveLatest(targetID uint64) func(db *gorm.DB) *gorm.DB

func (*NodeInfo) LogReportActive

func (m *NodeInfo) LogReportActive() (int64, error)

func (*NodeInfo) LogReportExistedMasterWithdrawn

func (m *NodeInfo) LogReportExistedMasterWithdrawn() (int64, error)

func (*NodeInfo) LogReportExistedNodeMasterDetectedSlaveInactive

func (m *NodeInfo) LogReportExistedNodeMasterDetectedSlaveInactive(id uint64, retry uint8) (int64, error)

func (*NodeInfo) LogReportExistedNodeMasterReportSlaveInactive

func (m *NodeInfo) LogReportExistedNodeMasterReportSlaveInactive(slave *NodeInfo) (int64, error)

func (*NodeInfo) LogReportExistedNodeSlaveReportMasterInactive

func (m *NodeInfo) LogReportExistedNodeSlaveReportMasterInactive(master *NodeInfo) (int64, error)

func (*NodeInfo) LogReportExistedSlaveWithdrawn

func (m *NodeInfo) LogReportExistedSlaveWithdrawn(existed *NodeInfo) (int64, error)

func (*NodeInfo) LogReportFreshMasterJoined

func (m *NodeInfo) LogReportFreshMasterJoined() (int64, error)

func (*NodeInfo) LogReportFreshSlaveJoined

func (m *NodeInfo) LogReportFreshSlaveJoined(fresh *NodeInfo) (int64, error)

func (*NodeInfo) LogSlaveReportMasterInactiveLatest

func (m *NodeInfo) LogSlaveReportMasterInactiveLatest(targetID uint64) func(db *gorm.DB) *gorm.DB

func (*NodeInfo) NewNodeLog

func (m *NodeInfo) NewNodeLog(logType uint8, target uint64) *NodeLog.NodeLog

func (*NodeInfo) Refresh

func (m *NodeInfo) Refresh() error

func (*NodeInfo) RemoveSelf

func (m *NodeInfo) RemoveSelf() (bool, error)

RemoveSelf 删除自己。

需要先判断数据库中是否存在,以避免重复删除问题。

func (*NodeInfo) RemoveSlaveNode

func (m *NodeInfo) RemoveSlaveNode(slave *NodeInfo) (bool, error)

func (*NodeInfo) ScopeSocket

func (m *NodeInfo) ScopeSocket() func(db *gorm.DB) *gorm.DB

func (*NodeInfo) Socket

func (m *NodeInfo) Socket() string

func (*NodeInfo) Subordinate

func (m *NodeInfo) Subordinate() func(db *gorm.DB) *gorm.DB

Subordinate 附加当前节点的下级条件。

func (*NodeInfo) Superior

func (m *NodeInfo) Superior() func(db *gorm.DB) *gorm.DB

Superior 附加当前节点的上级条件。

func (*NodeInfo) SupersedeMasterNode

func (m *NodeInfo) SupersedeMasterNode(master *NodeInfo) error

SupersedeMasterNode 主节点异常时从节点尝试接替。

此方法涉及到一系列数据库操作,需要在事务中进行。其中某次数据库操作报错,所有之前的操作都将会滚。

步骤如下:

1. 查询 master 对应的 ID、Host、Port、Level 是否与数据表内一致。如果不一致,则报错。

2. 记录 master 的ID、SuperiorID和turn,然后删除 master 记录

3. 修改自己的记录:level -=1,m.SuperiorID = master.SuperiorID,m.Turn = master.Turn。

4. 修改其它节点的 SuperiorID 为自己。

func (*NodeInfo) TableName

func (m *NodeInfo) TableName() string

TableName 数据表名。

func (*NodeInfo) ToFreshNodeInfo

func (m *NodeInfo) ToFreshNodeInfo() *models.FreshNodeInfo

func (*NodeInfo) ToRegisteredNodeInfo

func (m *NodeInfo) ToRegisteredNodeInfo() *models.RegisteredNodeInfo

Jump to

Keyboard shortcuts

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