From 52fd11bb6cf3914206a2e1c112b3dccffa375b1f Mon Sep 17 00:00:00 2001 From: Tom Guinther <tguinther@gfxlabs.io> Date: Thu, 29 Aug 2024 12:48:29 -0400 Subject: [PATCH] if measure lag is null or 0 fallback to query latency rename things, add query_threshold --- .../pool/critics/replication/critic.go | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/gat/handlers/pool/critics/replication/critic.go b/lib/gat/handlers/pool/critics/replication/critic.go index 4b6fd58e..3484cec1 100644 --- a/lib/gat/handlers/pool/critics/replication/critic.go +++ b/lib/gat/handlers/pool/critics/replication/critic.go @@ -13,9 +13,20 @@ func init() { caddy.RegisterModule((*Critic)(nil)) } +// Critic describes a replication critic which measures replication lag, +// with a fallback to query latency when there is no *measurable* lag type Critic struct { - Threshold caddy.Duration `json:"threshold"` - Validity caddy.Duration `json:"validity"` + QueryThreshold caddy.Duration `json:"query_threshold"` + ReplicationThreshold caddy.Duration `json:"replication_threshold"` + Validity caddy.Duration `json:"validity"` +} + +func NewCritic() *Critic { + return &Critic{ + QueryThreshold: caddy.Duration(time.Millisecond * 300), + ReplicationThreshold: caddy.Duration(time.Second * 3), + Validity: caddy.Duration(time.Minute * 5), + } } func (T *Critic) CaddyModule() caddy.ModuleInfo { @@ -44,11 +55,11 @@ func (T *Critic) Taste(ctx context.Context, conn *fed.Conn) (int, time.Duration, penalty := 0 - if result.Lag != nil { - penalty = int(*result.Lag / time.Duration(T.Threshold).Seconds()) + if (result.Lag != nil) && (*result.Lag > 0) { + penalty = int(*result.Lag / time.Duration(T.ReplicationThreshold).Seconds()) } else { dur := time.Since(start) - penalty = int(dur / time.Duration(T.Threshold)) + penalty = int(dur / time.Duration(T.QueryThreshold)) } return penalty, time.Duration(T.Validity), nil -- GitLab