|
|
@ -11,6 +11,17 @@ import ( |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
const ( |
|
|
|
const ( |
|
|
|
|
|
|
|
// UnspecifiedRingID is the zero value of RingID and not considered
|
|
|
|
|
|
|
|
// valid.
|
|
|
|
|
|
|
|
UnspecifiedRingID RingID = iota |
|
|
|
|
|
|
|
RingZeroID // RingZeroID is the RingID for RingZero (backbone)
|
|
|
|
|
|
|
|
RingOneID // RingOneID is the RingID for RingOne (local zone)
|
|
|
|
|
|
|
|
RingTwoID // RingTwoID is the RingID for RingTwo (region services)
|
|
|
|
|
|
|
|
RingThreeID // RingThreeID is the RingID for RingThree (region cluster pods)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// RingMax indicates the highest [Ring] identifier
|
|
|
|
|
|
|
|
RingMax = RingThreeID |
|
|
|
|
|
|
|
|
|
|
|
// RegionMax indicates the highest number that can be used for a [RegionID].
|
|
|
|
// RegionMax indicates the highest number that can be used for a [RegionID].
|
|
|
|
RegionMax = (1 << 4) - 1 |
|
|
|
RegionMax = (1 << 4) - 1 |
|
|
|
// ZoneMax indicates the highest number that can be used for a [ZoneID].
|
|
|
|
// ZoneMax indicates the highest number that can be used for a [ZoneID].
|
|
|
@ -33,6 +44,21 @@ const ( |
|
|
|
RingThreeBits = 12 |
|
|
|
RingThreeBits = 12 |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// RingID identifies a Ring
|
|
|
|
|
|
|
|
type RingID int |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Valid tells a [RingID] is within the valid range.
|
|
|
|
|
|
|
|
func (n RingID) Valid() bool { return n > 0 && n <= RingMax } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (n RingID) String() string { |
|
|
|
|
|
|
|
return idString(n) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// A Ring identifies what ring an address belongs to
|
|
|
|
|
|
|
|
type Ring interface { |
|
|
|
|
|
|
|
ID() RingID |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// RegionID is the identifier of a region, valid between 1 and [RegionMax].
|
|
|
|
// RegionID is the identifier of a region, valid between 1 and [RegionMax].
|
|
|
|
type RegionID int |
|
|
|
type RegionID int |
|
|
|
|
|
|
|
|
|
|
|