Documentation
¶
Index ¶
- Constants
- func BoolP(b bool) *bool
- func Uint16P(u uint16) *uint16
- func Uint32P(u uint32) *uint32
- type ArchiveRecoverySettings
- type Cluster
- type ClusterData
- type ClusterInitMode
- type ClusterPhase
- type ClusterRole
- type ClusterSpec
- type ClusterStatus
- type DB
- type DBInitMode
- type DBSpec
- type DBStatus
- type DBs
- type Duration
- type ExistingConfig
- type FollowConfig
- type FollowType
- type Keeper
- type KeeperInfo
- type KeeperSpec
- type KeeperStatus
- type Keepers
- type KeepersInfo
- type PGParameters
- type PITRConfig
- type PostgresState
- type PostgresTimelineHistory
- type PostgresTimelinesHistory
- type ProxiesInfo
- type Proxy
- type ProxyInfo
- type ProxySpec
- type ProxyStatus
- type RecoveryTargetSettings
- type SentinelInfo
- type SentinelsInfo
- type StandbySettings
Constants ¶
const ( DefaultProxyCheckInterval = 5 * time.Second DefaultSleepInterval = 5 * time.Second DefaultRequestTimeout = 10 * time.Second DefaultConvergenceTimeout = 30 * time.Second DefaultInitTimeout = 5 * time.Minute DefaultSyncTimeout = 30 * time.Minute DefaultFailInterval = 20 * time.Second DefaultDeadKeeperRemovalInterval = 48 * time.Hour DefaultMaxStandbys uint16 = 20 DefaultMaxStandbysPerSender uint16 = 3 DefaultMaxStandbyLag = 1024 * 1204 DefaultSynchronousReplication = false DefaultMaxSynchronousStandbys uint16 = 1 DefaultMinSynchronousStandbys uint16 = 1 DefaultUsePgrewind = false DefaultMergePGParameter = true DefaultRole ClusterRole = ClusterRoleMaster )
const ( NoGeneration int64 = 0 InitialGeneration int64 = 1 )
const (
CurrentCDFormatVersion uint64 = 1
)
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ArchiveRecoverySettings ¶ added in v0.5.0
type ArchiveRecoverySettings struct {
// value for restore_command
RestoreCommand string `json:"restoreCommand,omitempty"`
}
ArchiveRecoverySettings defines the archive recovery settings in the recovery.conf file (https://www.postgresql.org/docs/9.6/static/archive-recovery-settings.html )
type Cluster ¶ added in v0.5.0
type Cluster struct {
UID string `json:"uid,omitempty"`
Generation int64 `json:"generation,omitempty"`
ChangeTime time.Time `json:"changeTime,omitempty"`
Spec *ClusterSpec `json:"spec,omitempty"`
Status ClusterStatus `json:"status,omitempty"`
}
func NewCluster ¶ added in v0.5.0
func NewCluster(uid string, cs *ClusterSpec) *Cluster
func (*Cluster) DefSpec ¶ added in v0.5.0
func (c *Cluster) DefSpec() *ClusterSpec
DefSpec returns a new ClusterSpec with unspecified values populated with their defaults
func (*Cluster) UpdateSpec ¶ added in v0.5.0
func (c *Cluster) UpdateSpec(ns *ClusterSpec) error
type ClusterData ¶
type ClusterData struct {
// ClusterData format version. Used to detect incompatible
// version and do upgrade. Needs to be bumped when a non
// backward compatible change is done to the other struct
// members.
FormatVersion uint64
Cluster *Cluster
Keepers Keepers
DBs DBs
Proxy *Proxy
}
for simplicity keep all the changes to the various components atomic (using an unique key)
func NewClusterData ¶ added in v0.5.0
func NewClusterData(c *Cluster) *ClusterData
func (*ClusterData) DeepCopy ¶ added in v0.5.0
func (c *ClusterData) DeepCopy() *ClusterData
func (*ClusterData) FindDB ¶ added in v0.5.0
func (cd *ClusterData) FindDB(keeper *Keeper) *DB
type ClusterInitMode ¶ added in v0.5.0
type ClusterInitMode string
const ( // Initialize a cluster starting from a freshly initialized database cluster. Valid only when cluster role is master. ClusterInitModeNew ClusterInitMode = "new" // Initialize a cluster doing a point in time recovery on a keeper. ClusterInitModePITR ClusterInitMode = "pitr" // Initialize a cluster with an user specified already populated db cluster. ClusterInitModeExisting ClusterInitMode = "existing" )
func ClusterInitModeP ¶ added in v0.5.0
func ClusterInitModeP(s ClusterInitMode) *ClusterInitMode
type ClusterPhase ¶ added in v0.5.0
type ClusterPhase string
const ( ClusterPhaseInitializing ClusterPhase = "initializing" ClusterPhaseNormal ClusterPhase = "normal" )
type ClusterRole ¶ added in v0.5.0
type ClusterRole string
const ( ClusterRoleMaster ClusterRole = "master" ClusterRoleStandby ClusterRole = "standby" )
func ClusterRoleP ¶ added in v0.6.0
func ClusterRoleP(s ClusterRole) *ClusterRole
type ClusterSpec ¶ added in v0.5.0
type ClusterSpec struct {
// Interval to wait before next check
SleepInterval *Duration `json:"sleepInterval,omitempty"`
// Time after which any request (keepers checks from sentinel etc...) will fail.
RequestTimeout *Duration `json:"requestTimeout,omitempty"`
// Interval to wait for a db to be converged to the required state when
// no long operation are expected.
ConvergenceTimeout *Duration `json:"convergenceTimeout,omitempty"`
// Interval to wait for a db to be initialized (doing a initdb)
InitTimeout *Duration `json:"initTimeout,omitempty"`
// Interval to wait for a db to be synced with a master
SyncTimeout *Duration `json:"syncTimeout,omitempty"`
// Interval after the first fail to declare a keeper or a db as not healthy.
FailInterval *Duration `json:"failInterval,omitempty"`
// Interval after which a dead keeper will be removed from the cluster data
DeadKeeperRemovalInterval *Duration `json:"deadKeeperRemovalInterval,omitempty"`
// Max number of standbys. This needs to be greater enough to cover both
// standby managed by stolon and additional standbys configured by the
// user. Its value affect different postgres parameters like
// max_replication_slots and max_wal_senders. Setting this to a number
// lower than the sum of stolon managed standbys and user managed
// standbys will have unpredicatable effects due to problems creating
// replication slots or replication problems due to exhausted wal
// senders.
MaxStandbys *uint16 `json:"maxStandbys,omitempty"`
// Max number of standbys for every sender. A sender can be a master or
// another standby (if/when implementing cascading replication).
MaxStandbysPerSender *uint16 `json:"maxStandbysPerSender,omitempty"`
// Max lag in bytes that an asynchronous standy can have to be elected in
// place of a failed master
MaxStandbyLag *uint32 `json:"maxStandbyLage,omitempty"`
// Use Synchronous replication between master and its standbys
SynchronousReplication *bool `json:"synchronousReplication,omitempty"`
// MinSynchronousStandbys is the mininum number if synchronous standbys
// to be configured when SynchronousReplication is true
MinSynchronousStandbys *uint16 `json:"minSynchronousStandbys,omitempty"`
// MaxSynchronousStandbys is the maximum number if synchronous standbys
// to be configured when SynchronousReplication is true
MaxSynchronousStandbys *uint16 `json:"maxSynchronousStandbys,omitempty"`
// Whether to use pg_rewind
UsePgrewind *bool `json:"usePgrewind,omitempty"`
// InitMode defines the cluster initialization mode. Current modes are: new, existing, pitr
InitMode *ClusterInitMode `json:"initMode,omitempty"`
// Whether to merge pgParameters of the initialized db cluster, useful
// the retain initdb generated parameters when InitMode is new, retain
// current parameters when initMode is existing or pitr.
MergePgParameters *bool `json:"mergePgParameters,omitempty"`
// Role defines the cluster operating role (master or standby of an external database)
Role *ClusterRole `json:"role,omitempty"`
// Point in time recovery init configuration used when InitMode is "pitr"
PITRConfig *PITRConfig `json:"pitrConfig,omitempty"`
// Existing init configuration used when InitMode is "existing"
ExistingConfig *ExistingConfig `json:"existingConfig,omitempty"`
// Standby setting when role is standby
StandbySettings *StandbySettings `json:"standbySettings,omitempty"`
// Map of postgres parameters
PGParameters PGParameters `json:"pgParameters,omitempty"`
}
func (*ClusterSpec) DeepCopy ¶ added in v0.5.0
func (c *ClusterSpec) DeepCopy() *ClusterSpec
func (*ClusterSpec) Validate ¶ added in v0.5.0
func (os *ClusterSpec) Validate() error
Validate validates a cluster spec.
func (*ClusterSpec) WithDefaults ¶ added in v0.5.0
func (os *ClusterSpec) WithDefaults() *ClusterSpec
WithDefaults returns a new ClusterSpec with unspecified values populated with their defaults
type ClusterStatus ¶ added in v0.5.0
type ClusterStatus struct {
CurrentGeneration int64 `json:"currentGeneration,omitempty"`
Phase ClusterPhase `json:"phase,omitempty"`
// Master DB UID
Master string `json:"master,omitempty"`
}
type DBInitMode ¶ added in v0.5.0
type DBInitMode string
const ( DBInitModeNone DBInitMode = "none" // Use existing db cluster data DBInitModeExisting DBInitMode = "existing" // Initialize a db starting from a freshly initialized database cluster DBInitModeNew DBInitMode = "new" // Initialize a db doing a point in time recovery DBInitModePITR DBInitMode = "pitr" // Initialize a db doing a resync to a target database cluster DBInitModeResync DBInitMode = "resync" )
type DBSpec ¶ added in v0.5.0
type DBSpec struct {
// The KeeperUID this db is assigned to
KeeperUID string `json:"keeperUID,omitempty"`
// Time after which any request (keepers checks from sentinel etc...) will fail.
RequestTimeout Duration `json:"requestTimeout,omitempty"`
// See ClusterSpec MaxStandbys description
MaxStandbys uint16 `json:"maxStandbys,omitempty"`
// Use Synchronous replication between master and its standbys
SynchronousReplication bool `json:"synchronousReplication,omitempty"`
// Whether to use pg_rewind
UsePgrewind bool `json:"usePgrewind,omitempty"`
// InitMode defines the db initialization mode. Current modes are: none, new
InitMode DBInitMode `json:"initMode,omitempty"`
// Point in time recovery init configuration used when InitMode is "pitr"
PITRConfig *PITRConfig `json:"pitrConfig,omitempty"`
// Map of postgres parameters
PGParameters PGParameters `json:"pgParameters,omitempty"`
// DB Role (master or standby)
Role common.Role `json:"role,omitempty"`
// FollowConfig when Role is "standby"
FollowConfig *FollowConfig `json:"followConfig,omitempty"`
// Followers DB UIDs
Followers []string `json:"followers"`
// Whether to include previous postgresql.conf
IncludeConfig bool `json:"includePreviousConfig,omitempty"`
// SynchronousStandbys are the standbys to be configured as synchronous
SynchronousStandbys []string `json:"synchronousStandbys"`
}
type DBStatus ¶ added in v0.5.0
type DBStatus struct {
Healthy bool `json:"healthy,omitempty"`
CurrentGeneration int64 `json:"currentGeneration,omitempty"`
ListenAddress string `json:"listenAddress,omitempty"`
Port string `json:"port,omitempty"`
SystemID string `json:"systemdID,omitempty"`
TimelineID uint64 `json:"timelineID,omitempty"`
XLogPos uint64 `json:"xLogPos,omitempty"`
TimelinesHistory PostgresTimelinesHistory `json:"timelinesHistory,omitempty"`
PGParameters PGParameters `json:"pgParameters,omitempty"`
SynchronousStandbys []string `json:"synchronousStandbys"`
}
type Duration ¶
Duration is needed to be able to marshal/unmarshal json strings with time unit (eg. 3s, 100ms) instead of ugly times in nanoseconds.
func (Duration) MarshalJSON ¶
func (*Duration) UnmarshalJSON ¶
type ExistingConfig ¶ added in v0.5.0
type ExistingConfig struct {
KeeperUID string `json:"keeperUID,omitempty"`
}
type FollowConfig ¶ added in v0.5.0
type FollowConfig struct {
Type FollowType `json:"type,omitempty"`
// Keeper ID to follow when Type is "internal"
DBUID string `json:"dbuid,omitempty"`
// Standby settings when Type is "external"
StandbySettings *StandbySettings `json:"standbySettings,omitempty"`
}
type FollowType ¶ added in v0.5.0
type FollowType string
const ( // Follow an db managed by a keeper in our cluster FollowTypeInternal FollowType = "internal" // Follow an external db FollowTypeExternal FollowType = "external" )
type Keeper ¶
type Keeper struct {
// Keeper ID
UID string `json:"uid,omitempty"`
Generation int64 `json:"generation,omitempty"`
ChangeTime time.Time `json:"changeTime,omitempty"`
Spec *KeeperSpec `json:"spec,omitempty"`
Status KeeperStatus `json:"status,omitempty"`
}
func NewKeeperFromKeeperInfo ¶ added in v0.5.0
func NewKeeperFromKeeperInfo(ki *KeeperInfo) *Keeper
type KeeperInfo ¶
type KeeperInfo struct {
// An unique id for this info, used to know when this the keeper info
// has been updated
InfoUID string `json:"infoUID,omitempty"`
UID string `json:"uid,omitempty"`
ClusterUID string `json:"clusterUID,omitempty"`
BootUUID string `json:"bootUUID,omitempty"`
PostgresState *PostgresState `json:"postgresState,omitempty"`
}
func (*KeeperInfo) DeepCopy ¶ added in v0.5.0
func (k *KeeperInfo) DeepCopy() *KeeperInfo
type KeeperSpec ¶ added in v0.5.0
type KeeperSpec struct{}
type KeeperStatus ¶ added in v0.5.0
type Keepers ¶ added in v0.5.0
func (Keepers) SortedKeys ¶ added in v0.5.0
type KeepersInfo ¶
type KeepersInfo map[string]*KeeperInfo
func (KeepersInfo) DeepCopy ¶ added in v0.5.0
func (k KeepersInfo) DeepCopy() KeepersInfo
type PGParameters ¶ added in v0.5.0
type PITRConfig ¶ added in v0.5.0
type PITRConfig struct {
// DataRestoreCommand defines the command to execute for restoring the db
// cluster data). %d is replaced with the full path to the db cluster
// datadir. Use %% to embed an actual % character.
DataRestoreCommand string `json:"dataRestoreCommand,omitempty"`
ArchiveRecoverySettings *ArchiveRecoverySettings `json:"archiveRecoverySettings,omitempty"`
RecoveryTargetSettings *RecoveryTargetSettings `json:"recoveryTargetSettings,omitempty"`
}
type PostgresState ¶
type PostgresState struct {
UID string `json:"uid,omitempty"`
Generation int64 `json:"generation,omitempty"`
ListenAddress string `json:"listenAddress,omitempty"`
Port string `json:"port,omitempty"`
Healthy bool `json:"healthy,omitempty"`
SystemID string `json:"systemID,omitempty"`
TimelineID uint64 `json:"timelineID,omitempty"`
XLogPos uint64 `json:"xLogPos,omitempty"`
TimelinesHistory PostgresTimelinesHistory `json:"timelinesHistory,omitempty"`
PGParameters common.Parameters `json:"pgParameters,omitempty"`
SynchronousStandbys []string `json:"synchronousStandbys"`
}
func (*PostgresState) DeepCopy ¶ added in v0.5.0
func (p *PostgresState) DeepCopy() *PostgresState
type PostgresTimelineHistory ¶ added in v0.4.0
type PostgresTimelinesHistory ¶ added in v0.4.0
type PostgresTimelinesHistory []*PostgresTimelineHistory
func (PostgresTimelinesHistory) GetTimelineHistory ¶ added in v0.4.0
func (tlsh PostgresTimelinesHistory) GetTimelineHistory(id uint64) *PostgresTimelineHistory
type ProxiesInfo ¶
type ProxiesInfo []*ProxyInfo
func (ProxiesInfo) Len ¶
func (p ProxiesInfo) Len() int
func (ProxiesInfo) Less ¶
func (p ProxiesInfo) Less(i, j int) bool
func (ProxiesInfo) Swap ¶
func (p ProxiesInfo) Swap(i, j int)
type ProxySpec ¶ added in v0.5.0
type ProxySpec struct {
MasterDBUID string `json:"masterDbUid,omitempty"`
}
type ProxyStatus ¶ added in v0.5.0
type ProxyStatus struct {
}
type RecoveryTargetSettings ¶ added in v0.5.0
type RecoveryTargetSettings struct {
}
RecoveryTargetSettings defines the recovery target settings in the recovery.conf file (https://www.postgresql.org/docs/9.6/static/recovery-target-settings.html )
type SentinelInfo ¶
type SentinelInfo struct {
UID string
}
type SentinelsInfo ¶
type SentinelsInfo []*SentinelInfo
func (SentinelsInfo) Len ¶
func (s SentinelsInfo) Len() int
func (SentinelsInfo) Less ¶
func (s SentinelsInfo) Less(i, j int) bool
func (SentinelsInfo) Swap ¶
func (s SentinelsInfo) Swap(i, j int)
type StandbySettings ¶ added in v0.5.0
type StandbySettings struct {
PrimaryConninfo string `json:"primaryConninfo,omitempty"`
PrimarySlotName string `json:"primarySlotName,omitempty"`
RecoveryMinApplyDelay string `json:"recoveryMinApplyDelay,omitempty"`
}
StandbySettings defines the standby settings in the recovery.conf file (https://www.postgresql.org/docs/9.6/static/standby-settings.html )