github.com/hashicorp/vault/sdk@v0.13.0/helper/consts/replication.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package consts 5 6 const ( 7 // N.B. This needs to be excluded from replication despite the name; it's 8 // merely saying that this is cluster information for the replicated 9 // cluster. 10 CoreReplicatedClusterPrefix = "core/cluster/replicated/" 11 CoreReplicatedClusterPrefixDR = "core/cluster/replicated-dr/" 12 13 CoreReplicatedClusterInfoPath = CoreReplicatedClusterPrefix + "info" 14 CoreReplicatedClusterSecondariesPrefix = CoreReplicatedClusterPrefix + "secondaries/" 15 CoreReplicatedClusterInfoPathDR = CoreReplicatedClusterPrefixDR + "info" 16 CoreReplicatedClusterSecondariesPrefixDR = CoreReplicatedClusterPrefixDR + "secondaries/" 17 18 // This is an identifier for the current secondary in the replicated paths 19 // manager. It should contain a character that is not allowed in secondary 20 // ids to ensure it doesn't collide. 21 CurrentReplicatedSecondaryIdentifier = ".current" 22 CoreFeatureFlagPath = "core/cluster/feature-flags" 23 ) 24 25 type ReplicationState uint32 26 27 const ( 28 _ ReplicationState = iota 29 OldReplicationPrimary 30 OldReplicationSecondary 31 OldReplicationBootstrapping 32 // Don't add anything here. Adding anything to this Old block would cause 33 // the rest of the values to change below. This was done originally to 34 // ensure no overlap between old and new values. 35 36 ReplicationUnknown ReplicationState = 0 37 ReplicationPerformancePrimary ReplicationState = 1 << iota // Note -- iota is 5 here! 38 ReplicationPerformanceSecondary 39 OldSplitReplicationBootstrapping 40 ReplicationDRPrimary 41 ReplicationDRSecondary 42 ReplicationPerformanceBootstrapping 43 ReplicationDRBootstrapping 44 ReplicationPerformanceDisabled 45 ReplicationDRDisabled 46 ReplicationPerformanceStandby 47 ) 48 49 // We verify no change to the above values are made 50 func init() { 51 if OldReplicationBootstrapping != 3 { 52 panic("Replication Constants have changed") 53 } 54 55 if ReplicationPerformancePrimary != 1<<5 { 56 panic("Replication Constants have changed") 57 } 58 } 59 60 func (r ReplicationState) string() string { 61 switch r { 62 case ReplicationPerformanceSecondary: 63 return "secondary" 64 case ReplicationPerformancePrimary: 65 return "primary" 66 case ReplicationPerformanceBootstrapping: 67 return "bootstrapping" 68 case ReplicationPerformanceDisabled: 69 return "disabled" 70 case ReplicationDRPrimary: 71 return "primary" 72 case ReplicationDRSecondary: 73 return "secondary" 74 case ReplicationDRBootstrapping: 75 return "bootstrapping" 76 case ReplicationDRDisabled: 77 return "disabled" 78 } 79 80 return "unknown" 81 } 82 83 func (r ReplicationState) StateStrings() []string { 84 var ret []string 85 if r.HasState(ReplicationPerformanceSecondary) { 86 ret = append(ret, "perf-secondary") 87 } 88 if r.HasState(ReplicationPerformancePrimary) { 89 ret = append(ret, "perf-primary") 90 } 91 if r.HasState(ReplicationPerformanceBootstrapping) { 92 ret = append(ret, "perf-bootstrapping") 93 } 94 if r.HasState(ReplicationPerformanceDisabled) { 95 ret = append(ret, "perf-disabled") 96 } 97 if r.HasState(ReplicationDRPrimary) { 98 ret = append(ret, "dr-primary") 99 } 100 if r.HasState(ReplicationDRSecondary) { 101 ret = append(ret, "dr-secondary") 102 } 103 if r.HasState(ReplicationDRBootstrapping) { 104 ret = append(ret, "dr-bootstrapping") 105 } 106 if r.HasState(ReplicationDRDisabled) { 107 ret = append(ret, "dr-disabled") 108 } 109 if r.HasState(ReplicationPerformanceStandby) { 110 ret = append(ret, "perfstandby") 111 } 112 113 return ret 114 } 115 116 func (r ReplicationState) GetDRString() string { 117 switch { 118 case r.HasState(ReplicationDRBootstrapping): 119 return ReplicationDRBootstrapping.string() 120 case r.HasState(ReplicationDRPrimary): 121 return ReplicationDRPrimary.string() 122 case r.HasState(ReplicationDRSecondary): 123 return ReplicationDRSecondary.string() 124 case r.HasState(ReplicationDRDisabled): 125 return ReplicationDRDisabled.string() 126 default: 127 return "unknown" 128 } 129 } 130 131 func (r ReplicationState) GetPerformanceString() string { 132 switch { 133 case r.HasState(ReplicationPerformanceBootstrapping): 134 return ReplicationPerformanceBootstrapping.string() 135 case r.HasState(ReplicationPerformancePrimary): 136 return ReplicationPerformancePrimary.string() 137 case r.HasState(ReplicationPerformanceSecondary): 138 return ReplicationPerformanceSecondary.string() 139 case r.HasState(ReplicationPerformanceDisabled): 140 return ReplicationPerformanceDisabled.string() 141 default: 142 return "unknown" 143 } 144 } 145 146 func (r ReplicationState) IsPrimaryState() bool { 147 return r.HasState(ReplicationPerformancePrimary | ReplicationDRPrimary) 148 } 149 150 func (r ReplicationState) HasState(flag ReplicationState) bool { return r&flag != 0 } 151 func (r *ReplicationState) AddState(flag ReplicationState) { *r |= flag } 152 func (r *ReplicationState) ClearState(flag ReplicationState) { *r &= ^flag } 153 func (r *ReplicationState) ToggleState(flag ReplicationState) { *r ^= flag } 154 155 type HAState uint32 156 157 const ( 158 _ HAState = iota 159 Standby 160 PerfStandby 161 Active 162 )