Extract interface from ActivityQueryTracker and allows passing custom implementation (#10071)

* Extract interface from ActivityQueryTracker and allows passing custom implementation.

Signed-off-by: Peter Štibraný <pstibrany@gmail.com>
This commit is contained in:
Peter Štibraný 2022-01-29 23:55:27 +01:00 committed by GitHub
parent 18d737de3e
commit 6d76f09c58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 2 deletions

View File

@ -208,13 +208,32 @@ func contextErr(err error, env string) error {
} }
} }
// QueryTracker provides access to two features:
//
// 1) Tracking of active query. If PromQL engine crashes while executing any query, such query should be present
// in the tracker on restart, hence logged. After the logging on restart, the tracker gets emptied.
//
// 2) Enforcement of the maximum number of concurrent queries.
type QueryTracker interface {
// GetMaxConcurrent returns maximum number of concurrent queries that are allowed by this tracker.
GetMaxConcurrent() int
// Insert inserts query into query tracker. This call must block if maximum number of queries is already running.
// If Insert doesn't return error then returned integer value should be used in subsequent Delete call.
// Insert should return error if context is finished before query can proceed, and integer value returned in this case should be ignored by caller.
Insert(ctx context.Context, query string) (int, error)
// Delete removes query from activity tracker. InsertIndex is value returned by Insert call.
Delete(insertIndex int)
}
// EngineOpts contains configuration options used when creating a new Engine. // EngineOpts contains configuration options used when creating a new Engine.
type EngineOpts struct { type EngineOpts struct {
Logger log.Logger Logger log.Logger
Reg prometheus.Registerer Reg prometheus.Registerer
MaxSamples int MaxSamples int
Timeout time.Duration Timeout time.Duration
ActiveQueryTracker *ActiveQueryTracker ActiveQueryTracker QueryTracker
// LookbackDelta determines the time since the last sample after which a time // LookbackDelta determines the time since the last sample after which a time
// series is considered stale. // series is considered stale.
LookbackDelta time.Duration LookbackDelta time.Duration
@ -244,7 +263,7 @@ type Engine struct {
metrics *engineMetrics metrics *engineMetrics
timeout time.Duration timeout time.Duration
maxSamplesPerQuery int maxSamplesPerQuery int
activeQueryTracker *ActiveQueryTracker activeQueryTracker QueryTracker
queryLogger QueryLogger queryLogger QueryLogger
queryLoggerLock sync.RWMutex queryLoggerLock sync.RWMutex
lookbackDelta time.Duration lookbackDelta time.Duration