Skip to content

Commit 1a3b559

Browse files
authored
[PLAT-118505] fix receive write metrics (#80)
2 parents 00fc9e6 + 8864c3c commit 1a3b559

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

pkg/receive/handler.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -711,11 +711,11 @@ type remoteWriteParams struct {
711711
alreadyReplicated bool
712712
}
713713

714-
func (h *Handler) gatherWriteStats(localWrites map[endpointReplica]map[string]trackedSeries) tenantRequestStats {
714+
func (h *Handler) gatherWriteStats(remoteWrites map[endpointReplica]map[string]trackedSeries) tenantRequestStats {
715715
var stats tenantRequestStats = make(tenantRequestStats)
716716

717-
for er := range localWrites {
718-
for tenant, series := range localWrites[er] {
717+
for er := range remoteWrites {
718+
for tenant, series := range remoteWrites[er] {
719719
samples := 0
720720

721721
for _, ts := range series.timeSeries {
@@ -743,7 +743,6 @@ func (h *Handler) fanoutForward(ctx context.Context, params remoteWriteParams) (
743743
ctx, cancel := context.WithTimeout(tracing.CopyTraceContext(context.Background(), ctx), h.options.ForwardTimeout)
744744

745745
var writeErrors writeErrors
746-
var stats tenantRequestStats = make(tenantRequestStats)
747746

748747
defer func() {
749748
if writeErrors.ErrOrNil() != nil {
@@ -763,10 +762,11 @@ func (h *Handler) fanoutForward(ctx context.Context, params remoteWriteParams) (
763762
localWrites, remoteWrites, err := h.distributeTimeseriesToReplicas(params.tenant, params.replicas, params.writeRequest.Timeseries)
764763
if err != nil {
765764
level.Error(requestLogger).Log("msg", "failed to distribute timeseries to replicas", "err", err)
766-
return stats, err
765+
return tenantRequestStats{}, err
767766
}
768767

769-
stats = h.gatherWriteStats(localWrites)
768+
// Specific to Databricks setup, we only measure remote writes
769+
stats := h.gatherWriteStats(remoteWrites)
770770

771771
// Prepare a buffered channel to receive the responses from the local and remote writes. Remote writes will all go
772772
// asynchronously and with this capacity we will never block on writing to the channel.

pkg/receive/handler_test.go

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ type dnsResolver struct {
6565
logger log.Logger
6666
target resolver.Target
6767
cc resolver.ClientConn
68-
addrStore map[string][]string
68+
addrStore *dnsResolverBuilder
6969
}
7070

7171
func (r *dnsResolver) start() {
72-
addrStrs := r.addrStore[r.target.Endpoint()]
72+
addrStrs := r.addrStore.get(r.target.Endpoint())
7373
addrs := make([]resolver.Address, len(addrStrs))
7474
for i, s := range addrStrs {
7575
addrs[i] = resolver.Address{Addr: s}
@@ -88,14 +88,28 @@ func (*dnsResolver) Close() {}
8888
type dnsResolverBuilder struct {
8989
logger log.Logger
9090
addrStore map[string][]string
91+
92+
sync.Mutex
93+
}
94+
95+
func (b *dnsResolverBuilder) get(addr string) []string {
96+
b.Lock()
97+
defer b.Unlock()
98+
return b.addrStore[addr]
99+
}
100+
101+
func (b *dnsResolverBuilder) updateStore(addr string, ips []string) {
102+
b.Lock()
103+
defer b.Unlock()
104+
b.addrStore[addr] = ips
91105
}
92106

93107
func (b *dnsResolverBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
94108
r := &dnsResolver{
95109
logger: b.logger,
96110
target: target,
97111
cc: cc,
98-
addrStore: b.addrStore,
112+
addrStore: b,
99113
}
100114
r.start()
101115
return r, nil
@@ -1841,8 +1855,6 @@ func TestHandlerFlippingHashrings(t *testing.T) {
18411855
}
18421856

18431857
func TestIngestorRestart(t *testing.T) {
1844-
// TODO: fix this test. It has a data race.
1845-
t.Skip("Skipping this test case temporarily due to a data race")
18461858
var err error
18471859
logger := log.NewLogfmtLogger(os.Stderr)
18481860
addr1, addr2, addr3 := "localhost:14090", "localhost:14091", "localhost:14092"
@@ -1884,15 +1896,18 @@ func TestIngestorRestart(t *testing.T) {
18841896
},
18851897
}
18861898

1887-
_, err = client.handleRequest(ctx, 0, "test", data)
1899+
stats, err := client.handleRequest(ctx, 0, "test", data)
18881900
require.NoError(t, err)
1901+
require.Equal(t, tenantRequestStats{
1902+
"test": requestStats{timeseries: 2, totalSamples: 2},
1903+
}, stats)
18891904

18901905
// close srv2 to simulate ingestor down
18911906
ing2.Shutdown(err)
18921907
ing3 := startIngestor(logger, addr3, 2*time.Second)
18931908
defer ing3.Shutdown(err)
18941909
// bind the new backend to the same DNS
1895-
dnsBuilder.addrStore[clientAddr] = []string{addr3}
1910+
dnsBuilder.updateStore(clientAddr, []string{addr3})
18961911

18971912
iter, errs := 10, 0
18981913
for i := 0; i < iter; i++ {

0 commit comments

Comments
 (0)