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  )