From 034dae84641cbd48901fef569a90881c352b8b27 Mon Sep 17 00:00:00 2001 From: Yuchen Wang Date: Thu, 5 Feb 2026 17:05:14 -0800 Subject: [PATCH] ingestor only mode fast path --- pkg/receive/handler.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pkg/receive/handler.go b/pkg/receive/handler.go index 4a1655edee..3816d4bfaa 100644 --- a/pkg/receive/handler.go +++ b/pkg/receive/handler.go @@ -1248,6 +1248,28 @@ func (h *Handler) RemoteWrite(ctx context.Context, r *storepb.WriteRequest) (*st span, ctx := tracing.StartSpan(ctx, "receive_grpc") defer span.Finish() + // Fast path for IngestorOnly mode: write directly to local TSDB. + // This skips distributeTimeseriesToReplicas and sendLocalWrite since + // the Router already determined this data belongs to this node. + if h.receiverMode == IngestorOnly { + err := h.writer.Write(ctx, r.Tenant, r.Timeseries) + if err != nil { + level.Debug(h.logger).Log("msg", "failed to write to local TSDB", "err", err) + } + switch cause := errors.Cause(err); cause { + case nil: + return &storepb.WriteResponse{}, nil + default: + if isNotReady(cause) { + return nil, status.Error(codes.Unavailable, err.Error()) + } + if isConflict(cause) { + return nil, status.Error(codes.AlreadyExists, err.Error()) + } + return nil, status.Error(codes.Internal, err.Error()) + } + } + _, err := h.handleRequest(ctx, uint64(r.Replica), r.Tenant, &prompb.WriteRequest{Timeseries: r.Timeseries}) if err != nil { level.Debug(h.logger).Log("msg", "failed to handle request", "err", err)