(t *testing.T)
| 3268 | } |
| 3269 | |
| 3270 | func TestUpdateMetricsWithRemoval(t *testing.T) { |
| 3271 | cfg := Config{ |
| 3272 | KVStore: kv.Config{}, |
| 3273 | HeartbeatTimeout: 0, // get healthy stats |
| 3274 | ReplicationFactor: 3, |
| 3275 | ZoneAwarenessEnabled: true, |
| 3276 | DetailedMetricsEnabled: true, |
| 3277 | } |
| 3278 | |
| 3279 | registry := prometheus.NewRegistry() |
| 3280 | |
| 3281 | // create the ring to set up metrics, but do not start |
| 3282 | ring, err := NewWithStoreClientAndStrategy(cfg, testRingName, testRingKey, &MockClient{}, NewDefaultReplicationStrategy(), registry, log.NewNopLogger()) |
| 3283 | require.NoError(t, err) |
| 3284 | |
| 3285 | ringDesc := Desc{ |
| 3286 | Ingesters: map[string]InstanceDesc{ |
| 3287 | "A": {Addr: "127.0.0.1", Timestamp: 22, Tokens: []uint32{math.MaxUint32 / 4, (math.MaxUint32 / 4) * 3}}, |
| 3288 | "B": {Addr: "127.0.0.2", Timestamp: 11, Tokens: []uint32{(math.MaxUint32 / 4) * 2, math.MaxUint32}}, |
| 3289 | }, |
| 3290 | } |
| 3291 | ring.updateRingState(&ringDesc) |
| 3292 | |
| 3293 | err = testutil.GatherAndCompare(registry, bytes.NewBufferString(` |
| 3294 | # HELP ring_member_ownership_percent The percent ownership of the ring by member |
| 3295 | # TYPE ring_member_ownership_percent gauge |
| 3296 | ring_member_ownership_percent{member="A",name="test"} 0.49999999976716936 |
| 3297 | ring_member_ownership_percent{member="B",name="test"} 0.5000000002328306 |
| 3298 | # HELP ring_members Number of members in the ring |
| 3299 | # TYPE ring_members gauge |
| 3300 | ring_members{name="test",state="ACTIVE",zone=""} 2 |
| 3301 | ring_members{name="test",state="JOINING",zone=""} 0 |
| 3302 | ring_members{name="test",state="LEAVING",zone=""} 0 |
| 3303 | ring_members{name="test",state="PENDING",zone=""} 0 |
| 3304 | ring_members{name="test",state="READONLY",zone=""} 0 |
| 3305 | ring_members{name="test",state="Unhealthy",zone=""} 0 |
| 3306 | # HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring. |
| 3307 | # TYPE ring_oldest_member_timestamp gauge |
| 3308 | ring_oldest_member_timestamp{name="test",state="ACTIVE"} 11 |
| 3309 | ring_oldest_member_timestamp{name="test",state="JOINING"} 0 |
| 3310 | ring_oldest_member_timestamp{name="test",state="LEAVING"} 0 |
| 3311 | ring_oldest_member_timestamp{name="test",state="PENDING"} 0 |
| 3312 | ring_oldest_member_timestamp{name="test",state="READONLY"} 0 |
| 3313 | ring_oldest_member_timestamp{name="test",state="Unhealthy"} 0 |
| 3314 | # HELP ring_tokens_owned The number of tokens in the ring owned by the member |
| 3315 | # TYPE ring_tokens_owned gauge |
| 3316 | ring_tokens_owned{member="A",name="test"} 2 |
| 3317 | ring_tokens_owned{member="B",name="test"} 2 |
| 3318 | # HELP ring_tokens_total Number of tokens in the ring |
| 3319 | # TYPE ring_tokens_total gauge |
| 3320 | ring_tokens_total{name="test"} 4 |
| 3321 | `)) |
| 3322 | require.NoError(t, err) |
| 3323 | |
| 3324 | ringDescNew := Desc{ |
| 3325 | Ingesters: map[string]InstanceDesc{ |
| 3326 | "A": {Addr: "127.0.0.1", Timestamp: 22, Tokens: []uint32{math.MaxUint32 / 4, (math.MaxUint32 / 4) * 3}}, |
| 3327 | }, |
nothing calls this directly
no test coverage detected