MCPcopy
hub / github.com/grafana/dskit / handleGetRequest

Method handleGetRequest

ring/partition_ring_http.go:58–132  ·  view source on GitHub ↗
(w http.ResponseWriter, req *http.Request)

Source from the content-addressed store, hash-verified

56}
57
58func (h *PartitionRingPageHandler) handleGetRequest(w http.ResponseWriter, req *http.Request) {
59 var (
60 ring = h.reader.PartitionRing()
61 ringDesc = ring.desc
62 )
63 ownedTokens := ringDesc.countTokens()
64
65 // Prepare the data to render partitions in the page.
66 partitionsByID := make(map[int32]partitionPageData, len(ringDesc.Partitions))
67 for id, partition := range ringDesc.Partitions {
68 owners := ring.PartitionOwnerIDsCopy(id)
69 slices.Sort(owners)
70
71 partitionsByID[id] = partitionPageData{
72 ID: id,
73 Corrupted: false,
74 State: partition.State,
75 StateTimestamp: partition.GetStateTime(),
76 StateChangeLocked: partition.StateChangeLocked,
77 OwnerIDs: owners,
78 Tokens: partition.Tokens,
79 NumTokens: len(partition.Tokens),
80 Ownership: distancePercentage(ownedTokens[id]),
81 }
82 }
83
84 // Look for owners of non-existing partitions. We want to provide visibility for such case
85 // and we report the partition in corrupted state.
86 for ownerID, owner := range ringDesc.Owners {
87 partition, exists := partitionsByID[owner.OwnedPartition]
88
89 if !exists {
90 partition = partitionPageData{
91 ID: owner.OwnedPartition,
92 Corrupted: true,
93 State: PartitionUnknown,
94 StateTimestamp: time.Time{},
95 OwnerIDs: []string{ownerID},
96 Tokens: partition.Tokens,
97 NumTokens: len(partition.Tokens),
98 Ownership: distancePercentage(ownedTokens[owner.OwnedPartition]),
99 }
100
101 partitionsByID[owner.OwnedPartition] = partition
102 }
103
104 if !slices.Contains(partition.OwnerIDs, ownerID) {
105 partition.OwnerIDs = append(partition.OwnerIDs, ownerID)
106 partitionsByID[owner.OwnedPartition] = partition
107 }
108 }
109
110 // Covert partitions to a list and sort it by ID.
111 partitions := make([]partitionPageData, 0, len(partitionsByID))
112
113 for _, partition := range partitionsByID {
114 partitions = append(partitions, partition)
115 }

Callers 1

ServeHTTPMethod · 0.95

Calls 7

distancePercentageFunction · 0.85
renderHTTPResponseFunction · 0.85
countTokensMethod · 0.80
PartitionOwnerIDsCopyMethod · 0.80
GetStateTimeMethod · 0.80
PartitionRingMethod · 0.65
GetMethod · 0.65

Tested by

no test coverage detected