Skip to content

Commit e3ccfda

Browse files
authored
fix: handle TiKV metrics fetch errors (#6897) (#6898)
1 parent 53eb0dc commit e3ccfda

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

pkg/tikvapi/v1/client.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,14 @@ func (c *tikvClient) GetLeaderCount() (int, error) {
7070
apiURL := fmt.Sprintf("%s/%s", c.url, metricsPath)
7171
transport := c.httpClient.Transport
7272
mfChan := make(chan *dto.MetricFamily, metricChanSize)
73+
errChan := make(chan error, 1)
7374

74-
var fetchErr error
7575
go func() {
7676
if err := prom2json.FetchMetricFamilies(apiURL, mfChan, transport); err != nil {
77-
fetchErr = fmt.Errorf("fail to fetch metric families from %s, error: %w", apiURL, err)
77+
errChan <- fmt.Errorf("fail to fetch metric families from %s, error: %w", apiURL, err)
78+
return
7879
}
80+
errChan <- nil
7981
}()
8082

8183
fms := []*prom2json.Family{}
@@ -93,7 +95,7 @@ func (c *tikvClient) GetLeaderCount() (int, error) {
9395
}
9496
}
9597

96-
if fetchErr != nil {
98+
if fetchErr := <-errChan; fetchErr != nil {
9799
return 0, fetchErr
98100
}
99101
return 0, fmt.Errorf("metric %s{type=\"%s\"} not found for %s", metricNameRegionCount, metricLabelNameLeaderCount, apiURL)

pkg/tikvapi/v1/client_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,18 @@ tikv_raftstore_region_count{type="region"} 50
4545
require.NoError(t, err)
4646
assert.Equal(t, 20, count)
4747
}
48+
49+
func TestTiKVClient_GetLeaderCountFetchError(t *testing.T) {
50+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
51+
w.WriteHeader(http.StatusInternalServerError)
52+
_, err := w.Write([]byte("boom"))
53+
assert.NoError(t, err)
54+
}))
55+
defer server.Close()
56+
57+
client := NewTiKVClient(server.URL, 5*time.Second, nil, false)
58+
count, err := client.GetLeaderCount()
59+
require.Error(t, err)
60+
assert.Equal(t, 0, count)
61+
assert.Contains(t, err.Error(), "fail to fetch metric families")
62+
}

0 commit comments

Comments
 (0)