topology

package
v0.0.0-...-9931aa1 Latest Latest
Warning

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

Go to latest
Published: Jan 5, 2018 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AllocateVolume

func AllocateVolume(dn *DataNode, vid storage.VolumeId, option *VolumeGrowOption) error

func ReplicatedDelete

func ReplicatedDelete(masterNode string, store *storage.Store,
	volumeId storage.VolumeId, n *storage.Needle,
	r *http.Request) (uint32, error)

func ReplicatedWrite

func ReplicatedWrite(masterNode string, s *storage.Store,
	volumeId storage.VolumeId, needle *storage.Needle,
	r *http.Request) (size uint32, errorStatus string)

Types

type AllocateVolumeResult

type AllocateVolumeResult struct {
	Error string
}

type Collection

type Collection struct {
	Name string
	// contains filtered or unexported fields
}

func NewCollection

func NewCollection(name string, volumeSizeLimit uint64) *Collection

func (*Collection) GetOrCreateVolumeLayout

func (c *Collection) GetOrCreateVolumeLayout(rp *storage.ReplicaPlacement, ttl *storage.TTL) *VolumeLayout

func (*Collection) ListVolumeServers

func (c *Collection) ListVolumeServers() (nodes []*DataNode)

func (*Collection) Lookup

func (c *Collection) Lookup(vid storage.VolumeId) []*DataNode

func (*Collection) String

func (c *Collection) String() string

type Configuration

type Configuration struct {
	XMLName xml.Name `xml:"Configuration"`
	Topo    topology `xml:"Topology"`
	// contains filtered or unexported fields
}

func (*Configuration) Locate

func (c *Configuration) Locate(ip string, dcName string, rackName string) (dc string, rack string)

func (*Configuration) String

func (c *Configuration) String() string

type DataCenter

type DataCenter struct {
	NodeImpl
}

func NewDataCenter

func NewDataCenter(id string) *DataCenter

func (*DataCenter) GetOrCreateRack

func (dc *DataCenter) GetOrCreateRack(rackName string) *Rack

func (*DataCenter) ToMap

func (dc *DataCenter) ToMap() interface{}

type DataNode

type DataNode struct {
	NodeImpl

	Ip        string
	Port      int
	PublicUrl string
	LastSeen  int64 // unix time in seconds
	// contains filtered or unexported fields
}

func NewDataNode

func NewDataNode(id string) *DataNode

func (*DataNode) AddOrUpdateVolume

func (dn *DataNode) AddOrUpdateVolume(v storage.VolumeInfo)

func (*DataNode) GetDataCenter

func (dn *DataNode) GetDataCenter() *DataCenter

func (*DataNode) GetRack

func (dn *DataNode) GetRack() *Rack

func (*DataNode) GetTopology

func (dn *DataNode) GetTopology() *Topology

func (*DataNode) GetVolumes

func (dn *DataNode) GetVolumes() (ret []storage.VolumeInfo)

func (*DataNode) GetVolumesById

func (dn *DataNode) GetVolumesById(id storage.VolumeId) (storage.VolumeInfo, error)

func (*DataNode) MatchLocation

func (dn *DataNode) MatchLocation(ip string, port int) bool

func (*DataNode) String

func (dn *DataNode) String() string

func (*DataNode) ToMap

func (dn *DataNode) ToMap() interface{}

func (*DataNode) UpdateVolumes

func (dn *DataNode) UpdateVolumes(actualVolumes []storage.VolumeInfo) (deletedVolumes []storage.VolumeInfo)

func (*DataNode) Url

func (dn *DataNode) Url() string

type DistributedOperationResult

type DistributedOperationResult map[string]error

func (DistributedOperationResult) Error

func (dr DistributedOperationResult) Error() error

type MaxVolumeIdCommand

type MaxVolumeIdCommand struct {
	MaxVolumeId storage.VolumeId `json:"maxVolumeId"`
}

func NewMaxVolumeIdCommand

func NewMaxVolumeIdCommand(value storage.VolumeId) *MaxVolumeIdCommand

func (*MaxVolumeIdCommand) Apply

func (c *MaxVolumeIdCommand) Apply(server raft.Server) (interface{}, error)

func (*MaxVolumeIdCommand) CommandName

func (c *MaxVolumeIdCommand) CommandName() string

type Node

type Node interface {
	Id() NodeId
	String() string
	FreeSpace() int
	ReserveOneVolume(r int) (*DataNode, error)
	UpAdjustMaxVolumeCountDelta(maxVolumeCountDelta int)
	UpAdjustVolumeCountDelta(volumeCountDelta int)
	UpAdjustActiveVolumeCountDelta(activeVolumeCountDelta int)
	UpAdjustMaxVolumeId(vid storage.VolumeId)

	GetVolumeCount() int
	GetActiveVolumeCount() int
	GetMaxVolumeCount() int
	GetMaxVolumeId() storage.VolumeId
	SetParent(Node)
	LinkChildNode(node Node)
	UnlinkChildNode(nodeId NodeId)
	CollectDeadNodeAndFullVolumes(freshThreshHold int64, volumeSizeLimit uint64)

	IsDataNode() bool
	IsRack() bool
	IsDataCenter() bool
	Children() []Node
	Parent() Node

	GetValue() interface{} //get reference to the topology,dc,rack,datanode
}

type NodeId

type NodeId string

type NodeImpl

type NodeImpl struct {
	sync.RWMutex // lock children
	// contains filtered or unexported fields
}

func (*NodeImpl) Children

func (n *NodeImpl) Children() (ret []Node)

func (*NodeImpl) CollectDeadNodeAndFullVolumes

func (n *NodeImpl) CollectDeadNodeAndFullVolumes(freshThreshHold int64, volumeSizeLimit uint64)

func (*NodeImpl) FreeSpace

func (n *NodeImpl) FreeSpace() int

func (*NodeImpl) GetActiveVolumeCount

func (n *NodeImpl) GetActiveVolumeCount() int

func (*NodeImpl) GetMaxVolumeCount

func (n *NodeImpl) GetMaxVolumeCount() int

func (*NodeImpl) GetMaxVolumeId

func (n *NodeImpl) GetMaxVolumeId() storage.VolumeId

func (*NodeImpl) GetTopology

func (n *NodeImpl) GetTopology() *Topology

func (*NodeImpl) GetValue

func (n *NodeImpl) GetValue() interface{}

func (*NodeImpl) GetVolumeCount

func (n *NodeImpl) GetVolumeCount() int

func (*NodeImpl) Id

func (n *NodeImpl) Id() NodeId

func (*NodeImpl) IsDataCenter

func (n *NodeImpl) IsDataCenter() bool

func (*NodeImpl) IsDataNode

func (n *NodeImpl) IsDataNode() bool

func (*NodeImpl) IsRack

func (n *NodeImpl) IsRack() bool

func (*NodeImpl) LinkChildNode

func (n *NodeImpl) LinkChildNode(node Node)

func (*NodeImpl) Parent

func (n *NodeImpl) Parent() Node

func (*NodeImpl) RandomlyPickNodes

func (n *NodeImpl) RandomlyPickNodes(numberOfNodes int, filterFirstNodeFn func(dn Node) error) (firstNode Node, restNodes []Node, err error)

the first node must satisfy filterFirstNodeFn(), the rest nodes must have one free slot

func (*NodeImpl) ReserveOneVolume

func (n *NodeImpl) ReserveOneVolume(r int) (assignedNode *DataNode, err error)

func (*NodeImpl) SetParent

func (n *NodeImpl) SetParent(node Node)

func (*NodeImpl) String

func (n *NodeImpl) String() string

func (*NodeImpl) UnlinkChildNode

func (n *NodeImpl) UnlinkChildNode(nodeId NodeId)

func (*NodeImpl) UpAdjustActiveVolumeCountDelta

func (n *NodeImpl) UpAdjustActiveVolumeCountDelta(activeVolumeCountDelta int)

func (*NodeImpl) UpAdjustMaxVolumeCountDelta

func (n *NodeImpl) UpAdjustMaxVolumeCountDelta(maxVolumeCountDelta int)

func (*NodeImpl) UpAdjustMaxVolumeId

func (n *NodeImpl) UpAdjustMaxVolumeId(vid storage.VolumeId)

func (*NodeImpl) UpAdjustVolumeCountDelta

func (n *NodeImpl) UpAdjustVolumeCountDelta(volumeCountDelta int)

type Rack

type Rack struct {
	NodeImpl
}

func NewRack

func NewRack(id string) *Rack

func (*Rack) FindDataNode

func (r *Rack) FindDataNode(ip string, port int) *DataNode

func (*Rack) GetOrCreateDataNode

func (r *Rack) GetOrCreateDataNode(ip string, port int, publicUrl string, maxVolumeCount int) *DataNode

func (*Rack) ToMap

func (r *Rack) ToMap() interface{}

type RemoteResult

type RemoteResult struct {
	Host  string
	Error error
}

type Topology

type Topology struct {
	NodeImpl

	Sequence sequence.Sequencer

	Configuration *Configuration

	RaftServer raft.Server
	// contains filtered or unexported fields
}

func NewTopology

func NewTopology(id string, seq sequence.Sequencer, volumeSizeLimit uint64, pulse int) *Topology

func (*Topology) DeleteCollection

func (t *Topology) DeleteCollection(collectionName string)

func (*Topology) FindCollection

func (t *Topology) FindCollection(collectionName string) (*Collection, bool)

func (*Topology) GetOrCreateDataCenter

func (t *Topology) GetOrCreateDataCenter(dcName string) *DataCenter

func (*Topology) GetVolumeLayout

func (t *Topology) GetVolumeLayout(collectionName string, rp *storage.ReplicaPlacement, ttl *storage.TTL) *VolumeLayout

func (*Topology) HasWritableVolume

func (t *Topology) HasWritableVolume(option *VolumeGrowOption) bool

func (*Topology) IsLeader

func (t *Topology) IsLeader() bool

func (*Topology) Leader

func (t *Topology) Leader() (string, error)

func (*Topology) Lookup

func (t *Topology) Lookup(collection string, vid storage.VolumeId) []*DataNode

func (*Topology) NextVolumeId

func (t *Topology) NextVolumeId() storage.VolumeId

func (*Topology) PickForWrite

func (t *Topology) PickForWrite(count uint64, option *VolumeGrowOption) (string, uint64, *DataNode, error)

func (*Topology) RegisterVolumeLayout

func (t *Topology) RegisterVolumeLayout(v storage.VolumeInfo, dn *DataNode)

func (*Topology) SetVolumeCapacityFull

func (t *Topology) SetVolumeCapacityFull(volumeInfo storage.VolumeInfo) bool

func (*Topology) StartRefreshWritableVolumes

func (t *Topology) StartRefreshWritableVolumes(garbageThreshold string, preallocate int64)

func (*Topology) ToMap

func (t *Topology) ToMap() interface{}

func (*Topology) ToVolumeMap

func (t *Topology) ToVolumeMap() interface{}

func (*Topology) UnRegisterDataNode

func (t *Topology) UnRegisterDataNode(dn *DataNode)

func (*Topology) UnRegisterVolumeLayout

func (t *Topology) UnRegisterVolumeLayout(v storage.VolumeInfo, dn *DataNode)

func (*Topology) Vacuum

func (t *Topology) Vacuum(garbageThreshold string, preallocate int64) int

type VacuumVolumeResult

type VacuumVolumeResult struct {
	Result bool
	Error  string
}

type VolumeGrowOption

type VolumeGrowOption struct {
	Collection       string
	ReplicaPlacement *storage.ReplicaPlacement
	Ttl              *storage.TTL
	Prealloacte      int64
	DataCenter       string
	Rack             string
	DataNode         string
}

func (*VolumeGrowOption) String

func (o *VolumeGrowOption) String() string

type VolumeGrowth

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

func NewDefaultVolumeGrowth

func NewDefaultVolumeGrowth() *VolumeGrowth

func (*VolumeGrowth) AutomaticGrowByType

func (vg *VolumeGrowth) AutomaticGrowByType(option *VolumeGrowOption, topo *Topology) (count int, err error)

func (*VolumeGrowth) GrowByCountAndType

func (vg *VolumeGrowth) GrowByCountAndType(targetCount int, option *VolumeGrowOption, topo *Topology) (counter int, err error)

type VolumeLayout

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

mapping from volume to its locations, inverted from server to volume

func NewVolumeLayout

func NewVolumeLayout(rp *storage.ReplicaPlacement, ttl *storage.TTL, volumeSizeLimit uint64) *VolumeLayout

func (*VolumeLayout) GetActiveVolumeCount

func (vl *VolumeLayout) GetActiveVolumeCount(option *VolumeGrowOption) int

func (*VolumeLayout) ListVolumeServers

func (vl *VolumeLayout) ListVolumeServers() (nodes []*DataNode)

func (*VolumeLayout) Lookup

func (vl *VolumeLayout) Lookup(vid storage.VolumeId) []*DataNode

func (*VolumeLayout) PickForWrite

func (vl *VolumeLayout) PickForWrite(count uint64, option *VolumeGrowOption) (*storage.VolumeId, uint64, *VolumeLocationList, error)

func (*VolumeLayout) RegisterVolume

func (vl *VolumeLayout) RegisterVolume(v *storage.VolumeInfo, dn *DataNode)

func (*VolumeLayout) SetVolumeAvailable

func (vl *VolumeLayout) SetVolumeAvailable(dn *DataNode, vid storage.VolumeId) bool

func (*VolumeLayout) SetVolumeCapacityFull

func (vl *VolumeLayout) SetVolumeCapacityFull(vid storage.VolumeId) bool

func (*VolumeLayout) SetVolumeUnavailable

func (vl *VolumeLayout) SetVolumeUnavailable(dn *DataNode, vid storage.VolumeId) bool

func (*VolumeLayout) String

func (vl *VolumeLayout) String() string

func (*VolumeLayout) ToMap

func (vl *VolumeLayout) ToMap() map[string]interface{}

func (*VolumeLayout) UnRegisterVolume

func (vl *VolumeLayout) UnRegisterVolume(v *storage.VolumeInfo, dn *DataNode)

type VolumeLocationList

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

func NewVolumeLocationList

func NewVolumeLocationList() *VolumeLocationList

func (*VolumeLocationList) Head

func (dnll *VolumeLocationList) Head() *DataNode

func (*VolumeLocationList) Length

func (dnll *VolumeLocationList) Length() int

func (*VolumeLocationList) Refresh

func (dnll *VolumeLocationList) Refresh(freshThreshHold int64)

func (*VolumeLocationList) Remove

func (dnll *VolumeLocationList) Remove(loc *DataNode) bool

func (*VolumeLocationList) Set

func (dnll *VolumeLocationList) Set(loc *DataNode)

func (*VolumeLocationList) String

func (dnll *VolumeLocationList) String() string

Jump to

Keyboard shortcuts

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