open-vault/sdk/helper/consts/replication.go

160 lines
4.7 KiB
Go
Raw Normal View History

2017-02-16 18:37:21 +00:00
package consts
2019-03-04 18:35:22 +00:00
const (
// N.B. This needs to be excluded from replication despite the name; it's
// merely saying that this is cluster information for the replicated
// cluster.
2019-03-04 18:35:22 +00:00
CoreReplicatedClusterPrefix = "core/cluster/replicated/"
CoreReplicatedClusterPrefixDR = "core/cluster/replicated-dr/"
CoreReplicatedClusterInfoPath = CoreReplicatedClusterPrefix + "info"
CoreReplicatedClusterSecondariesPrefix = CoreReplicatedClusterPrefix + "secondaries/"
CoreReplicatedClusterInfoPathDR = CoreReplicatedClusterPrefixDR + "info"
CoreReplicatedClusterSecondariesPrefixDR = CoreReplicatedClusterPrefixDR + "secondaries/"
// This is an identifier for the current secondary in the replicated paths
// manager. It should contain a character that is not allowed in secondary
// ids to ensure it doesn't collide.
CurrentReplicatedSecondaryIdentifier = ".current"
CoreFeatureFlagPath = "core/cluster/feature-flags"
2019-03-04 18:35:22 +00:00
)
2017-02-16 18:37:21 +00:00
type ReplicationState uint32
const (
_ ReplicationState = iota
OldReplicationPrimary
OldReplicationSecondary
OldReplicationBootstrapping
2018-02-23 02:38:52 +00:00
// Don't add anything here. Adding anything to this Old block would cause
// the rest of the values to change below. This was done originally to
// ensure no overlap between old and new values.
2018-01-23 02:44:38 +00:00
ReplicationUnknown ReplicationState = 0
ReplicationPerformancePrimary ReplicationState = 1 << iota // Note -- iota is 5 here!
ReplicationPerformanceSecondary
2018-01-23 02:44:38 +00:00
OldSplitReplicationBootstrapping
ReplicationDRPrimary
ReplicationDRSecondary
2018-01-23 02:44:38 +00:00
ReplicationPerformanceBootstrapping
ReplicationDRBootstrapping
ReplicationPerformanceDisabled
ReplicationDRDisabled
2018-08-24 16:09:03 +00:00
ReplicationPerformanceStandby
2017-02-16 18:37:21 +00:00
)
2019-03-04 18:35:22 +00:00
// We verify no change to the above values are made
func init() {
if OldReplicationBootstrapping != 3 {
panic("Replication Constants have changed")
}
if ReplicationPerformancePrimary != 1<<5 {
panic("Replication Constants have changed")
}
}
2018-01-23 02:44:38 +00:00
func (r ReplicationState) string() string {
2017-02-16 18:37:21 +00:00
switch r {
case ReplicationPerformanceSecondary:
2018-01-23 02:44:38 +00:00
return "secondary"
case ReplicationPerformancePrimary:
2018-01-23 02:44:38 +00:00
return "primary"
case ReplicationPerformanceBootstrapping:
return "bootstrapping"
2018-01-23 02:44:38 +00:00
case ReplicationPerformanceDisabled:
return "disabled"
case ReplicationDRPrimary:
2018-01-23 02:44:38 +00:00
return "primary"
case ReplicationDRSecondary:
2018-01-23 02:44:38 +00:00
return "secondary"
case ReplicationDRBootstrapping:
return "bootstrapping"
case ReplicationDRDisabled:
return "disabled"
2017-02-16 18:37:21 +00:00
}
2018-01-23 02:44:38 +00:00
return "unknown"
2017-02-16 18:37:21 +00:00
}
func (r ReplicationState) StateStrings() []string {
var ret []string
if r.HasState(ReplicationPerformanceSecondary) {
ret = append(ret, "perf-secondary")
}
if r.HasState(ReplicationPerformancePrimary) {
ret = append(ret, "perf-primary")
}
if r.HasState(ReplicationPerformanceBootstrapping) {
ret = append(ret, "perf-bootstrapping")
}
if r.HasState(ReplicationPerformanceDisabled) {
ret = append(ret, "perf-disabled")
}
if r.HasState(ReplicationDRPrimary) {
ret = append(ret, "dr-primary")
}
if r.HasState(ReplicationDRSecondary) {
ret = append(ret, "dr-secondary")
}
if r.HasState(ReplicationDRBootstrapping) {
ret = append(ret, "dr-bootstrapping")
}
if r.HasState(ReplicationDRDisabled) {
ret = append(ret, "dr-disabled")
}
if r.HasState(ReplicationPerformanceStandby) {
ret = append(ret, "perfstandby")
}
return ret
}
2017-10-23 20:42:56 +00:00
func (r ReplicationState) GetDRString() string {
switch {
2018-01-23 02:44:38 +00:00
case r.HasState(ReplicationDRBootstrapping):
return ReplicationDRBootstrapping.string()
2017-10-23 20:42:56 +00:00
case r.HasState(ReplicationDRPrimary):
2018-01-23 02:44:38 +00:00
return ReplicationDRPrimary.string()
2017-10-23 20:42:56 +00:00
case r.HasState(ReplicationDRSecondary):
2018-01-23 02:44:38 +00:00
return ReplicationDRSecondary.string()
case r.HasState(ReplicationDRDisabled):
return ReplicationDRDisabled.string()
2017-10-23 20:42:56 +00:00
default:
2018-01-23 02:44:38 +00:00
return "unknown"
2017-10-23 20:42:56 +00:00
}
}
func (r ReplicationState) GetPerformanceString() string {
switch {
2018-01-23 02:44:38 +00:00
case r.HasState(ReplicationPerformanceBootstrapping):
return ReplicationPerformanceBootstrapping.string()
2017-10-23 20:42:56 +00:00
case r.HasState(ReplicationPerformancePrimary):
2018-01-23 02:44:38 +00:00
return ReplicationPerformancePrimary.string()
2017-10-23 20:42:56 +00:00
case r.HasState(ReplicationPerformanceSecondary):
2018-01-23 02:44:38 +00:00
return ReplicationPerformanceSecondary.string()
case r.HasState(ReplicationPerformanceDisabled):
return ReplicationPerformanceDisabled.string()
2017-10-23 20:42:56 +00:00
default:
2018-01-23 02:44:38 +00:00
return "unknown"
2017-10-23 20:42:56 +00:00
}
}
2020-02-15 00:39:13 +00:00
func (r ReplicationState) IsPrimaryState() bool {
return r.HasState(ReplicationPerformancePrimary | ReplicationDRPrimary)
}
func (r ReplicationState) HasState(flag ReplicationState) bool { return r&flag != 0 }
func (r *ReplicationState) AddState(flag ReplicationState) { *r |= flag }
func (r *ReplicationState) ClearState(flag ReplicationState) { *r &= ^flag }
func (r *ReplicationState) ToggleState(flag ReplicationState) { *r ^= flag }
type HAState uint32
const (
_ HAState = iota
Standby
PerfStandby
Active
)