package common import ( "sync" "github.com/VictoriaMetrics/VictoriaMetrics/lib/prompbmarshal" "github.com/VictoriaMetrics/VictoriaMetrics/lib/promrelabel" ) // PushCtx is a context used for populating WriteRequest. type PushCtx struct { // WriteRequest contains the WriteRequest, which must be pushed later to remote storage. // // The actual labels and samples for the time series are stored in Labels and Samples fields. WriteRequest prompbmarshal.WriteRequest // Labels contains flat list of all the labels used in WriteRequest. Labels []prompbmarshal.Label // Samples contains flat list of all the samples used in WriteRequest. Samples []prompbmarshal.Sample } // Reset resets ctx. func (ctx *PushCtx) Reset() { ctx.WriteRequest.Reset() promrelabel.CleanLabels(ctx.Labels) ctx.Labels = ctx.Labels[:0] ctx.Samples = ctx.Samples[:0] } // GetPushCtx returns PushCtx from pool. // // Call PutPushCtx when the ctx is no longer needed. func GetPushCtx() *PushCtx { if v := pushCtxPool.Get(); v != nil { return v.(*PushCtx) } return &PushCtx{} } // PutPushCtx returns ctx to the pool. // // ctx mustn't be used after returning to the pool. func PutPushCtx(ctx *PushCtx) { ctx.Reset() pushCtxPool.Put(ctx) } var pushCtxPool sync.Pool