Documentation
¶
Index ¶
- Constants
- Variables
- func ConfigEqual(a, b *Config) bool
- func DropNode(nodename string)
- func InitData()
- func InstanceString(p naming.Path, nodename string) string
- func ResourceFlagsString(rid string, states States, rstatus resource.Status) string
- type ActorConfig
- type Config
- type Data
- func (c *Data[T]) DropNode(nodename string)
- func (c *Data[T]) GetAll() []DataElement[T]
- func (c *Data[T]) GetByNode(nodename string) map[naming.Path]*T
- func (c *Data[T]) GetByPath(p naming.Path) map[string]*T
- func (c *Data[T]) GetByPathAndNode(p naming.Path, nodename string) *T
- func (c *Data[T]) Set(p naming.Path, nodename string, v *T)
- func (c *Data[T]) Unset(p naming.Path, nodename string)
- type DataElement
- type Dataer
- type EncapMap
- type EncapStatus
- type FlexConfig
- type Instance
- type Monitor
- type MonitorAction
- type MonitorGlobalExpect
- type MonitorGlobalExpectOptionsPlacedAt
- type MonitorGlobalExpectOptionsResized
- type MonitorGlobalExpectOptionsRestarted
- type MonitorLocalExpect
- type MonitorState
- type MonitorUpdate
- type Node
- type ResourceConfig
- type ResourceConfigs
- type ResourceMonitor
- type ResourceMonitorRestart
- type ResourceMonitors
- type ResourceOrder
- type ResourceStatuses
- type States
- type StatesList
- type Status
- type SubsetConfig
- type SubsetConfigs
- type VolConfig
Constants ¶
const MaxResizeStages = 3
MaxResizeStages is how many stages a resize orchestration grows a chain in. A chain crossing more replicated resources than that is grown by hand, one stage at a time.
Variables ¶
var ( ErrInvalidGlobalExpect = errors.New("invalid instance monitor global expect") ErrInvalidLocalExpect = errors.New("invalid instance monitor local expect") ErrInvalidState = errors.New("invalid instance monitor state") ErrSameGlobalExpect = errors.New("instance monitor global expect is already set to the same value") )
var ( MonitorGlobalExpectStrings map[MonitorGlobalExpect]string MonitorGlobalExpectValues map[string]MonitorGlobalExpect )
var ( MonitorStateToString map[MonitorState]string StringToMonitorState map[string]MonitorState MonitorStatesFailure = []MonitorState{ MonitorStateDeleteFailure, MonitorStateFreezeFailure, MonitorStateProvisionFailure, MonitorStateResizeFailure, MonitorStateShutdownFailure, MonitorStateStartFailure, MonitorStateStopFailure, MonitorStateUnfreezeFailure, MonitorStateUnprovisionFailure, } )
Functions ¶
func ConfigEqual ¶
ConfigEqual returns a boolean reporting whether a == b
Nodename and Path are not compared
func ResourceFlagsString ¶
ResourceFlagsString formats resource flags as a vector of characters.
R Running M Monitored D Disabled O Optional E Encap P Provisioned S Standby <n> Restart remaining, + More than 9 remaining, X UserStopped
Types ¶
type ActorConfig ¶
type ActorConfig struct {
App string `json:"app,omitempty"`
Children naming.Relations `json:"children,omitempty"`
DRP bool `json:"drp,omitempty"`
Env string `json:"env,omitempty"`
MonitorAction []MonitorAction `json:"monitor_action,omitempty"`
PreMonitorAction string `json:"pre_monitor_action,omitempty"`
Orchestrate string `json:"orchestrate"`
Parents naming.Relations `json:"parents,omitempty"`
PlacementPolicy placement.Policy `json:"placement_policy"`
Resources ResourceConfigs `json:"resources"`
Schedules []schedule.Config `json:"schedules"`
Stonith bool `json:"stonith"`
Subsets SubsetConfigs `json:"subsets"`
Topology topology.T `json:"topology,omitempty"`
Flex *FlexConfig `json:"flex,omitempty"`
// IsDisabled is true when DEFAULT.disable is true
IsDisabled bool `json:"is_disabled"`
}
func (*ActorConfig) DeepCopy ¶
func (cfg *ActorConfig) DeepCopy() *ActorConfig
type Config ¶
type Config struct {
Path naming.Path `json:"-"`
Checksum string `json:"csum"`
Priority priority.T `json:"priority"`
Scope []string `json:"scope"`
UpdatedAt time.Time `json:"updated_at"`
Labels label.M `json:"labels,omitempty"`
*ActorConfig
*VolConfig
}
Config describes a configuration file content checksum, timestamp of last change and the nodes it should be installed on.
func (Config) Unstructured ¶
type Data ¶
Data defines a shared holder for all instances Dataer
func (*Data[T]) DropNode ¶
func (c *Data[T]) DropNode(nodename string)
DropNode removes node instances
func (*Data[T]) GetAll ¶
func (c *Data[T]) GetAll() []DataElement[T]
GetAll returns all instance data as a list of DataElements
func (*Data[T]) GetByPath ¶
GetByPath returns a map (indexed by nodename) of instance data for path p
func (*Data[T]) GetByPathAndNode ¶
GetByPathAndNode returns an instance data or nil if data is not found
type EncapMap ¶
type EncapMap map[string]EncapStatus
type EncapStatus ¶
func (EncapStatus) DeepCopy ¶
func (t EncapStatus) DeepCopy() *EncapStatus
func (EncapStatus) Unstructured ¶
func (t EncapStatus) Unstructured() map[string]any
type FlexConfig ¶
type Instance ¶
type Instance struct {
Config *Config `json:"config"`
Monitor *Monitor `json:"monitor"`
Status *Status `json:"status"`
}
type Monitor ¶
type Monitor struct {
GlobalExpect MonitorGlobalExpect `json:"global_expect"`
GlobalExpectUpdatedAt time.Time `json:"global_expect_updated_at"`
GlobalExpectOptions any `json:"global_expect_options"`
// IsLeader flags the instance as the one where to provision as leader.
// The provisioning leader is responsible for preparing the shared resources.
// There can be only one leader, whatever the topology.
IsLeader bool `json:"is_leader"`
// IsHALeader flags the instances to start automatically if orchestrate=ha
// or when the admin posted a start orchestration.
// There can be one leader on a failover object, or many leaders with a flex topology.
IsHALeader bool `json:"is_ha_leader"`
LocalExpect MonitorLocalExpect `json:"local_expect"`
LocalExpectUpdatedAt time.Time `json:"local_expect_updated_at"`
// OrchestrationID is the accepted orchestration id that will be unset
// when orchestration is reached on local node
OrchestrationID uuid.UUID `json:"orchestration_id"`
// OrchestrationIsDone is set by the orchestration when it decides the instance state has reached its target.
// It is used to clear orchestration and orchestration id up when all instance monitors have
// OrchestrationIsDone set.
OrchestrationIsDone bool `json:"orchestration_is_done"`
SessionID xsession.ID `json:"session_id"`
State MonitorState `json:"state"`
StateUpdatedAt time.Time `json:"state_updated_at"`
MonitorActionExecutedAt time.Time `json:"monitor_action_executed_at"`
IsPreserved bool `json:"preserved"`
Resources ResourceMonitors `json:"resources,omitempty"`
UpdatedAt time.Time `json:"updated_at"`
Parents map[string]status.T `json:"parents,omitempty"`
Children map[string]status.T `json:"children,omitempty"`
}
Monitor describes the in-daemon states of an instance
func (*Monitor) UnmarshalJSON ¶
func (Monitor) Unstructured ¶
type MonitorAction ¶
type MonitorAction string
var ( // MonitorActionNone: represents the no-operation monitor action MonitorActionNone MonitorAction = "none" // MonitorActionCrash represents the monitor action that will try system crash/panic MonitorActionCrash MonitorAction = "crash" // MonitorActionFreezeStop represents the monitor action that will try freeze and subsequently stop // the monitored instance. MonitorActionFreezeStop MonitorAction = "freezestop" // MonitorActionReboot represents the monitor action that will reboot the system. MonitorActionReboot MonitorAction = "reboot" // MonitorActionSwitch represents the monitor action that will stop instance stop to allow // any other cluster nodes to takeover instance. MonitorActionSwitch MonitorAction = "switch" )
type MonitorGlobalExpect ¶
type MonitorGlobalExpect int
const ( MonitorGlobalExpectInit MonitorGlobalExpect = iota MonitorGlobalExpectAborted MonitorGlobalExpectDeleted MonitorGlobalExpectFrozen MonitorGlobalExpectNone MonitorGlobalExpectPlaced MonitorGlobalExpectPlacedAt MonitorGlobalExpectProvisioned MonitorGlobalExpectPurged MonitorGlobalExpectResized MonitorGlobalExpectRestarted MonitorGlobalExpectStarted MonitorGlobalExpectStopped MonitorGlobalExpectUnfrozen MonitorGlobalExpectUnprovisioned )
func (MonitorGlobalExpect) MarshalText ¶
func (t MonitorGlobalExpect) MarshalText() ([]byte, error)
func (MonitorGlobalExpect) String ¶
func (t MonitorGlobalExpect) String() string
func (*MonitorGlobalExpect) UnmarshalText ¶
func (t *MonitorGlobalExpect) UnmarshalText(b []byte) error
type MonitorGlobalExpectOptionsResized ¶
type MonitorGlobalExpectOptionsResized struct {
ConfigUpdatedAt time.Time `json:"config_updated_at"`
}
MonitorGlobalExpectOptionsResized carries the configuration a resize is for, so a node does not grow to the size it held before the request.
type MonitorGlobalExpectOptionsRestarted ¶
type MonitorGlobalExpectOptionsRestarted struct {
Force bool `json:"force"`
}
type MonitorLocalExpect ¶
type MonitorLocalExpect int
const ( MonitorLocalExpectInit MonitorLocalExpect = iota MonitorLocalExpectNone MonitorLocalExpectStarted MonitorLocalExpectShutdown MonitorLocalExpectEvicted )
func (MonitorLocalExpect) MarshalText ¶
func (t MonitorLocalExpect) MarshalText() ([]byte, error)
func (MonitorLocalExpect) String ¶
func (t MonitorLocalExpect) String() string
func (*MonitorLocalExpect) UnmarshalText ¶
func (t *MonitorLocalExpect) UnmarshalText(b []byte) error
type MonitorState ¶
type MonitorState int
const ( // General States MonitorStateInit MonitorState = iota MonitorStateIdle MonitorStateBootSuccess MonitorStateBootFailed MonitorStateBootProgress MonitorStateShutdownProgress MonitorStateShutdownFailure MonitorStateShutdownSuccess MonitorStateStartProgress MonitorStateStartFailure MonitorStateStartSuccess MonitorStateStopProgress MonitorStateStopFailure MonitorStateStopSuccess MonitorStateFreezeProgress MonitorStateFreezeFailure MonitorStateFreezeSuccess MonitorStateUnfreezeProgress MonitorStateUnfreezeFailure MonitorStateUnfreezeSuccess MonitorStateProvisionProgress MonitorStateProvisionFailure MonitorStateProvisionSuccess MonitorStateUnprovisionProgress MonitorStateUnprovisionFailure MonitorStateUnprovisionSuccess MonitorStateDeleteProgress MonitorStateDeleteFailure MonitorStateDeleteSuccess MonitorStateResizeProgress MonitorStateResizeFailure MonitorStateResizeSuccess // MonitorStateResizeStage0 and its siblings are the states an instance // takes between the stages of a resize. A chain is grown in at most // MaxResizeStages stages, so they are named rather than counted. MonitorStateResizeStage0 MonitorStateResizeStage1 MonitorStateResizeStage2 // wait states MonitorStateWaitChildren MonitorStateWaitParents MonitorStateWaitPriors MonitorStateWaitLeader MonitorStateWaitNonLeader // Miscellaneous MonitorStateRunning MonitorStateSyncing MonitorStatePurgeFailed MonitorStateReady MonitorStateRestarted )
func NewMonitorStateResizeStage ¶
func NewMonitorStateResizeStage(stage int) (MonitorState, bool)
NewMonitorStateResizeStage is the state of an instance that finished a stage of a resize, and whether there is one to name.
func (MonitorState) IsDoing ¶
func (t MonitorState) IsDoing() bool
func (MonitorState) IsOneOf ¶
func (t MonitorState) IsOneOf(states ...MonitorState) bool
func (MonitorState) MarshalText ¶
func (t MonitorState) MarshalText() ([]byte, error)
func (MonitorState) ResizeStage ¶
func (t MonitorState) ResizeStage() (int, bool)
ResizeStage is the stage an instance finished, and whether it is between stages at all.
func (MonitorState) String ¶
func (t MonitorState) String() string
func (*MonitorState) UnmarshalText ¶
func (t *MonitorState) UnmarshalText(b []byte) error
type MonitorUpdate ¶
type MonitorUpdate struct {
GlobalExpect *MonitorGlobalExpect `json:"global_expect"`
GlobalExpectOptions any `json:"global_expect_options"`
LocalExpect *MonitorLocalExpect `json:"local_expect"`
State *MonitorState `json:"state"`
// CandidateOrchestrationID is a candidate orchestration id for a new imon orchestration.
CandidateOrchestrationID uuid.UUID `json:"orchestration_id"`
}
MonitorUpdate is embedded in the SetInstanceMonitor message to change some Monitor values. A nil value does not change the current value.
func (MonitorUpdate) String ¶
func (t MonitorUpdate) String() string
type ResourceConfig ¶
type ResourceConfig struct {
IsDisabled bool `json:"is_disabled"`
IsMonitored bool `json:"is_monitored"`
IsStandby bool `json:"is_standby"`
Restart int `json:"restart,omitempty"`
RestartDelay *time.Duration `json:"restart_delay,omitempty"`
}
func (ResourceConfig) Unstructured ¶
func (t ResourceConfig) Unstructured() map[string]any
type ResourceConfigs ¶
type ResourceConfigs map[string]ResourceConfig
func (ResourceConfigs) DeepCopy ¶
func (m ResourceConfigs) DeepCopy() ResourceConfigs
func (ResourceConfigs) Get ¶
func (rcfgs ResourceConfigs) Get(rid string) *ResourceConfig
func (ResourceConfigs) Unstructured ¶
func (t ResourceConfigs) Unstructured() map[string]map[string]any
type ResourceMonitor ¶
type ResourceMonitor struct {
Restart *ResourceMonitorRestart `json:"restart,omitempty"`
}
ResourceMonitor describes the restart states maintained by the daemon for an object instance.
func (*ResourceMonitor) DecRestartRemaining ¶
func (m *ResourceMonitor) DecRestartRemaining()
func (*ResourceMonitor) Unstructured ¶
func (t *ResourceMonitor) Unstructured() map[string]any
type ResourceMonitorRestart ¶
type ResourceMonitorRestart struct {
Remaining int `json:"remaining,omitempty"`
LastAt time.Time `json:"last_at,omitempty"`
}
func (*ResourceMonitorRestart) DeepCopy ¶
func (t *ResourceMonitorRestart) DeepCopy() *ResourceMonitorRestart
func (*ResourceMonitorRestart) Unstructured ¶
func (t *ResourceMonitorRestart) Unstructured() map[string]any
type ResourceMonitors ¶
type ResourceMonitors map[string]ResourceMonitor
func (ResourceMonitors) DeepCopy ¶
func (m ResourceMonitors) DeepCopy() ResourceMonitors
func (ResourceMonitors) Get ¶
func (m ResourceMonitors) Get(rid string) *ResourceMonitor
func (ResourceMonitors) Set ¶
func (m ResourceMonitors) Set(rid string, rmon ResourceMonitor)
func (ResourceMonitors) Unstructured ¶
func (t ResourceMonitors) Unstructured() map[string]map[string]any
type ResourceOrder ¶
ResourceOrder is a sortable list representation of the instance status resources map.
func (ResourceOrder) Len ¶
func (a ResourceOrder) Len() int
func (ResourceOrder) Less ¶
func (a ResourceOrder) Less(i, j int) bool
func (ResourceOrder) Swap ¶
func (a ResourceOrder) Swap(i, j int)
type ResourceStatuses ¶
func (ResourceStatuses) DeepCopy ¶
func (m ResourceStatuses) DeepCopy() ResourceStatuses
func (ResourceStatuses) Unstructured ¶
func (t ResourceStatuses) Unstructured() map[string]map[string]any
type States ¶
type States struct {
Path naming.Path `json:"path"`
Node Node `json:"node,omitempty"`
Config Config `json:"config,omitempty"`
Status Status `json:"status,omitempty"`
Monitor Monitor `json:"monitor,omitempty"`
}
States groups config and status of the object instance as seen by the daemon.
func (States) LoadTreeNode ¶
LoadTreeNode add the tree nodes representing the type instance into another tree, at the specified node.
func (States) LoadTreeNodeFolded ¶
LoadTreeNodeFolded add the tree nodes representing the type instance into another tree, at the specified node. TODO: probable bug, LoadTreeNodeFolded duplicate code of LoadTreeNode
type StatesList ¶
type StatesList []States
func (StatesList) ByNode ¶
func (t StatesList) ByNode() map[string]States
type Status ¶
type Status struct {
Avail status.T `json:"avail"`
Encap EncapMap `json:"encap,omitempty"`
FrozenAt time.Time `json:"frozen_at,omitempty"`
LastStartedAt time.Time `json:"last_started_at"`
Optional status.T `json:"optional,omitempty"`
Overall status.T `json:"overall"`
Provisioned provisioned.T `json:"provisioned"`
Resources ResourceStatuses `json:"resources,omitempty"`
Running resource.RunningInfoList `json:"running,omitempty"`
UpdatedAt time.Time `json:"updated_at"`
}
Status describes the instance status.
func (Status) IsUnfrozen ¶
func (*Status) SortedResources ¶
SortedResources returns a list of resource identifiers sorted by: 1/ driver group 2/ subset 3/ resource name
func (Status) Unstructured ¶
type SubsetConfig ¶
type SubsetConfig struct {
Parallel bool `json:"parallel,omitempty"`
}
func (SubsetConfig) Unstructured ¶
func (t SubsetConfig) Unstructured() map[string]any
type SubsetConfigs ¶
type SubsetConfigs map[string]SubsetConfig
func (SubsetConfigs) DeepCopy ¶
func (m SubsetConfigs) DeepCopy() SubsetConfigs
func (SubsetConfigs) Unstructured ¶
func (t SubsetConfigs) Unstructured() map[string]map[string]any
type VolConfig ¶
type VolConfig struct {
Pool string `json:"pool"`
Size int64 `json:"size"`
// Charges is what the volume takes of pools other than the one that
// served it, by pool name.
//
// A volume is counted against the claim its namespace holds on the
// pool it was served by, which is what it was asked of that pool.
// A volume whose resources take their storage elsewhere costs those
// pools too, and nothing else says so: a volume served by a virtual
// pool is a copy of a template, and what that template builds is
// only known by reading what it built.
Charges map[string]int64 `json:"charges,omitempty"`
}