()
| 608 | } |
| 609 | |
| 610 | func (r *Ring) countTokensByAz() (map[string]map[string]uint32, map[string]int64) { |
| 611 | numTokens := map[string]map[string]uint32{} |
| 612 | owned := map[string]int64{} |
| 613 | |
| 614 | for zone, zonalTokens := range r.ringDesc.getTokensByZone() { |
| 615 | numTokens[zone] = map[string]uint32{} |
| 616 | for i := 1; i <= len(zonalTokens); i++ { |
| 617 | index := i % len(zonalTokens) |
| 618 | diff := tokenDistance(zonalTokens[i-1], zonalTokens[index]) |
| 619 | info := r.ringInstanceByToken[zonalTokens[index]] |
| 620 | owned[info.InstanceID] = owned[info.InstanceID] + diff |
| 621 | numTokens[zone][info.InstanceID] = numTokens[zone][info.InstanceID] + 1 |
| 622 | } |
| 623 | } |
| 624 | |
| 625 | // Set to 0 the number of owned tokens by instances which don't have tokens yet. |
| 626 | for id, info := range r.ringDesc.Ingesters { |
| 627 | if _, ok := owned[id]; !ok { |
| 628 | owned[id] = 0 |
| 629 | numTokens[info.Zone][id] = 0 |
| 630 | } |
| 631 | } |
| 632 | |
| 633 | return numTokens, owned |
| 634 | } |
| 635 | |
| 636 | // countTokens returns the number of tokens and tokens within the range for each instance. |
| 637 | // The ring read lock must be already taken when calling this function. |
no test coverage detected