(t *testing.T)
| 4274 | } |
| 4275 | |
| 4276 | func TestUpdateMetricsWithRemoval(t *testing.T) { |
| 4277 | cfg := Config{ |
| 4278 | KVStore: kv.Config{}, |
| 4279 | HeartbeatTimeout: time.Hour, // long timeout to get healthy stats |
| 4280 | ReplicationFactor: 3, |
| 4281 | ZoneAwarenessEnabled: true, |
| 4282 | } |
| 4283 | |
| 4284 | registry := prometheus.NewRegistry() |
| 4285 | |
| 4286 | // create the ring to set up metrics, but do not start |
| 4287 | ring, err := NewWithStoreClientAndStrategy(cfg, testRingName, testRingKey, nil, NewDefaultReplicationStrategy(), registry, log.NewNopLogger()) |
| 4288 | require.NoError(t, err) |
| 4289 | |
| 4290 | now := time.Now().Unix() |
| 4291 | ringDesc := Desc{ |
| 4292 | Ingesters: map[string]InstanceDesc{ |
| 4293 | "A": {Addr: "127.0.0.1", Zone: "a", Timestamp: now - 11, Tokens: []uint32{math.MaxUint32 / 4, (math.MaxUint32 / 4) * 3}}, |
| 4294 | "B": {Addr: "127.0.0.2", Zone: "b", Timestamp: now - 22, Tokens: []uint32{(math.MaxUint32 / 4) * 2, math.MaxUint32}}, |
| 4295 | }, |
| 4296 | } |
| 4297 | ring.updateRingState(&ringDesc) |
| 4298 | |
| 4299 | err = testutil.GatherAndCompare(registry, bytes.NewBufferString(fmt.Sprintf(` |
| 4300 | # HELP ring_members Number of members in the ring |
| 4301 | # TYPE ring_members gauge |
| 4302 | ring_members{name="test",state="ACTIVE"} 2 |
| 4303 | ring_members{name="test",state="JOINING"} 0 |
| 4304 | ring_members{name="test",state="LEAVING"} 0 |
| 4305 | ring_members{name="test",state="PENDING"} 0 |
| 4306 | ring_members{name="test",state="Unhealthy"} 0 |
| 4307 | # HELP ring_oldest_member_timestamp Timestamp of the oldest member in the ring. |
| 4308 | # TYPE ring_oldest_member_timestamp gauge |
| 4309 | ring_oldest_member_timestamp{name="test",state="ACTIVE"} %d |
| 4310 | ring_oldest_member_timestamp{name="test",state="JOINING"} 0 |
| 4311 | ring_oldest_member_timestamp{name="test",state="LEAVING"} 0 |
| 4312 | ring_oldest_member_timestamp{name="test",state="PENDING"} 0 |
| 4313 | ring_oldest_member_timestamp{name="test",state="Unhealthy"} 0 |
| 4314 | # HELP ring_tokens_total Number of tokens in the ring |
| 4315 | # TYPE ring_tokens_total gauge |
| 4316 | ring_tokens_total{name="test"} 4 |
| 4317 | # HELP ring_zone_members Number of ring members for each zone/state pair |
| 4318 | # TYPE ring_zone_members gauge |
| 4319 | ring_zone_members{name="test",state="ACTIVE",zone="a"} 1 |
| 4320 | ring_zone_members{name="test",state="ACTIVE",zone="b"} 1 |
| 4321 | ring_zone_members{name="test",state="JOINING",zone="a"} 0 |
| 4322 | ring_zone_members{name="test",state="JOINING",zone="b"} 0 |
| 4323 | ring_zone_members{name="test",state="LEAVING",zone="a"} 0 |
| 4324 | ring_zone_members{name="test",state="LEAVING",zone="b"} 0 |
| 4325 | ring_zone_members{name="test",state="PENDING",zone="a"} 0 |
| 4326 | ring_zone_members{name="test",state="PENDING",zone="b"} 0 |
| 4327 | ring_zone_members{name="test",state="Unhealthy",zone="a"} 0 |
| 4328 | ring_zone_members{name="test",state="Unhealthy",zone="b"} 0 |
| 4329 | `, now-22))) |
| 4330 | require.NoError(t, err) |
| 4331 | |
| 4332 | ringDescNew := Desc{ |
| 4333 | Ingesters: map[string]InstanceDesc{ |
nothing calls this directly
no test coverage detected