Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrNoSuchCluster = errors.New("controller: no such cluster") ErrNoClusterAvailable = errors.New("controller: no cluster available") ErrInvalidChooseAlg = errors.New("controller: invalid cluster chosen algorithm") )
errors
Functions ¶
This section is empty.
Types ¶
type AlgChoose ¶
type AlgChoose uint32
AlgChoose algorithm of choose cluster
const ( // AlgAvailable available capacity and some random alloc AlgAvailable AlgChoose // AlgRoundRobin alloc cluster round robin AlgRoundRobin // AlgRandom completely random alloc AlgRandom )
type ClusterConfig ¶
type ClusterConfig struct { IDC string `json:"-"` // passing by stream config. Region string `json:"region"` RegionMagic string `json:"region_magic"` ClusterReloadSecs int `json:"cluster_reload_secs"` ServiceReloadSecs int `json:"service_reload_secs"` CMClientConfig cmapi.Config `json:"clustermgr_client_config"` ServicePunishThreshold uint32 `json:"service_punish_threshold"` ServicePunishValidIntervalS int `json:"service_punish_valid_interval_s"` ConsulAgentAddr string `json:"consul_agent_addr"` Clusters []Cluster `json:"clusters"` }
ClusterConfig cluster config
Region and RegionMagic are paired, magic cannot change if one region was deployed.
type ClusterController ¶
type ClusterController interface { // Region returns region in configuration Region() string // All returns all cluster info in this region All() []*cmapi.ClusterInfo // ChooseOne returns a available cluster to upload ChooseOne() (*cmapi.ClusterInfo, error) // GetServiceController return ServiceController in specified cluster GetServiceController(clusterID proto.ClusterID) (ServiceController, error) // GetVolumeGetter return VolumeGetter in specified cluster GetVolumeGetter(clusterID proto.ClusterID) (VolumeGetter, error) // GetConfig get specified config of key from cluster manager GetConfig(ctx context.Context, key string) (string, error) // ChangeChooseAlg change alloc algorithm ChangeChooseAlg(alg AlgChoose) error }
ClusterController controller of clusters in one region
func NewClusterController ¶
func NewClusterController(cfg *ClusterConfig, proxy proxy.Cacher, stopCh <-chan struct{}) (ClusterController, error)
NewClusterController returns a cluster controller
type ServiceConfig ¶
type ServiceConfig struct { ClusterID proto.ClusterID IDC string ReloadSec int LoadDiskInterval int ServicePunishThreshold uint32 ServicePunishValidIntervalS int }
ServiceConfig service config
type ServiceController ¶
type ServiceController interface { // GetServiceHost return an available service host GetServiceHost(ctx context.Context, name string) (host string, err error) // GetServiceHosts return all available service random sorted hosts GetServiceHosts(ctx context.Context, name string) (hosts []string, err error) // GetDiskHost return an disk's related data node host GetDiskHost(ctx context.Context, diskID proto.DiskID) (hostIDC *HostIDC, err error) // PunishService will punish an service host for an punishTimeSec interval PunishService(ctx context.Context, service, host string, punishTimeSec int) // PunishServiceWithThreshold will punish an service host for // an punishTimeSec interval if service failed times satisfied with threshold during some interval time PunishServiceWithThreshold(ctx context.Context, service, host string, punishTimeSec int) // PunishDisk will punish a disk host for an punishTimeSec interval PunishDisk(ctx context.Context, diskID proto.DiskID, punishTimeSec int) // PunishDiskWithThreshold will punish a disk host for // an punishTimeSec interval if disk host failed times satisfied with threshold PunishDiskWithThreshold(ctx context.Context, diskID proto.DiskID, punishTimeSec int) }
ServiceController support for both data node discovery and normal service discovery
func NewServiceController ¶
func NewServiceController(cfg ServiceConfig, cmCli clustermgr.APIAccess, proxy proxy.Cacher, stopCh <-chan struct{}) (ServiceController, error)
NewServiceController returns a service controller
type VolumeGetter ¶
type VolumeGetter interface { // Get returns volume physical location of vid Get(ctx context.Context, vid proto.Vid, isCache bool) *VolumePhy // Punish punish vid with interval seconds Punish(ctx context.Context, vid proto.Vid, punishIntervalS int) }
VolumeGetter getter of volume physical location
ctx: context with trace or something
isCache: is false means reading from proxy cluster then updating memcache
otherwise reading from memcache -> proxy -> cluster
func NewVolumeGetter ¶
func NewVolumeGetter(clusterID proto.ClusterID, service ServiceController, proxy proxy.Cacher, memExpiration time.Duration) (VolumeGetter, error)
NewVolumeGetter new a volume getter
memExpiration expiration of memcache, 0 means no expiration
type VolumePhy ¶
type VolumePhy struct { Vid proto.Vid CodeMode codemode.CodeMode IsPunish bool Version uint32 Timestamp int64 Units []Unit }
VolumePhy volume physical info
Vid, CodeMode and Units are from cluster IsPunish is cached in memory Version is versioned in proxy Timestamp is cached in proxy to clear outdate volume