1package consts
2
3type ReplicationState uint32
4
5const (
6	_ ReplicationState = iota
7	OldReplicationPrimary
8	OldReplicationSecondary
9	OldReplicationBootstrapping
10	// Don't add anything here. Adding anything to this Old block would cause
11	// the rest of the values to change below. This was done originally to
12	// ensure no overlap between old and new values.
13
14	ReplicationUnknown            ReplicationState = 0
15	ReplicationPerformancePrimary ReplicationState = 1 << iota
16	ReplicationPerformanceSecondary
17	OldSplitReplicationBootstrapping
18	ReplicationDRPrimary
19	ReplicationDRSecondary
20	ReplicationPerformanceBootstrapping
21	ReplicationDRBootstrapping
22	ReplicationPerformanceDisabled
23	ReplicationDRDisabled
24)
25
26func (r ReplicationState) string() string {
27	switch r {
28	case ReplicationPerformanceSecondary:
29		return "secondary"
30	case ReplicationPerformancePrimary:
31		return "primary"
32	case ReplicationPerformanceBootstrapping:
33		return "bootstrapping"
34	case ReplicationPerformanceDisabled:
35		return "disabled"
36	case ReplicationDRPrimary:
37		return "primary"
38	case ReplicationDRSecondary:
39		return "secondary"
40	case ReplicationDRBootstrapping:
41		return "bootstrapping"
42	case ReplicationDRDisabled:
43		return "disabled"
44	}
45
46	return "unknown"
47}
48
49func (r ReplicationState) GetDRString() string {
50	switch {
51	case r.HasState(ReplicationDRBootstrapping):
52		return ReplicationDRBootstrapping.string()
53	case r.HasState(ReplicationDRPrimary):
54		return ReplicationDRPrimary.string()
55	case r.HasState(ReplicationDRSecondary):
56		return ReplicationDRSecondary.string()
57	case r.HasState(ReplicationDRDisabled):
58		return ReplicationDRDisabled.string()
59	default:
60		return "unknown"
61	}
62}
63
64func (r ReplicationState) GetPerformanceString() string {
65	switch {
66	case r.HasState(ReplicationPerformanceBootstrapping):
67		return ReplicationPerformanceBootstrapping.string()
68	case r.HasState(ReplicationPerformancePrimary):
69		return ReplicationPerformancePrimary.string()
70	case r.HasState(ReplicationPerformanceSecondary):
71		return ReplicationPerformanceSecondary.string()
72	case r.HasState(ReplicationPerformanceDisabled):
73		return ReplicationPerformanceDisabled.string()
74	default:
75		return "unknown"
76	}
77}
78
79func (r ReplicationState) HasState(flag ReplicationState) bool { return r&flag != 0 }
80func (r *ReplicationState) AddState(flag ReplicationState)     { *r |= flag }
81func (r *ReplicationState) ClearState(flag ReplicationState)   { *r &= ^flag }
82func (r *ReplicationState) ToggleState(flag ReplicationState)  { *r ^= flag }
83