@@ -19,19 +19,19 @@ import (
1919const (
2020 cachePromDataFor = 30 * time .Second
2121 queueObservationPeriod = 2 * time .Minute
22- queueLengthScaledown = 10000 // consider scaling down if queue smaller than this
23- queueLengthAcceptable = 100000 // we don't mind queues smaller than this
24- queueLengthMax = 1000000 // always scale up if queue bigger than this
22+ targetScaledown = 0.1 // consider scaling down if queue smaller than this times target
23+ targetMax = 10 // always scale up if queue bigger than this times target
2524 errorFractionScaledown = 0.1
2625 scaledown = 0.9
2726 scaleup = 1.2
2827)
2928
3029type metricsData struct {
31- promAPI promV1.API
32- lastUpdated time.Time
33- queueLengths []float64
34- errorRates map [string ]float64
30+ queueLengthTarget int64
31+ promAPI promV1.API
32+ lastUpdated time.Time
33+ queueLengths []float64
34+ errorRates map [string ]float64
3535}
3636
3737func (d dynamoTableClient ) metricsAutoScale (ctx context.Context , current , expected * chunk.TableDesc ) error {
@@ -49,14 +49,14 @@ func (d dynamoTableClient) metricsAutoScale(ctx context.Context, current, expect
4949
5050 switch {
5151 case errorRate < errorFractionScaledown * float64 (current .ProvisionedWrite ) &&
52- m .queueLengths [2 ] < queueLengthScaledown :
52+ m .queueLengths [2 ] < float64 ( m . queueLengthTarget ) * targetScaledown :
5353 // No big queue, low errors -> scale down
5454 scaleDownWrite (current , expected , int64 (float64 (current .ProvisionedWrite )* scaledown ), "metrics scale-down" )
55- case errorRate > 0 && m .queueLengths [2 ] > queueLengthMax :
55+ case errorRate > 0 && m .queueLengths [2 ] > float64 ( m . queueLengthTarget ) * targetMax :
5656 // Too big queue, some errors -> scale up
5757 scaleUpWrite (current , expected , int64 (float64 (current .ProvisionedWrite )* scaleup ), "metrics max queue scale-up" )
5858 case errorRate > 0 &&
59- m .queueLengths [2 ] > queueLengthAcceptable &&
59+ m .queueLengths [2 ] > float64 ( m . queueLengthTarget ) &&
6060 m .queueLengths [2 ] > m .queueLengths [1 ] && m .queueLengths [1 ] > m .queueLengths [0 ]:
6161 // Growing queue, some errors -> scale up
6262 scaleUpWrite (current , expected , int64 (float64 (current .ProvisionedWrite )* scaleup ), "metrics queue growing scale-up" )
@@ -93,7 +93,10 @@ func newMetrics(cfg DynamoDBConfig) (*metricsData, error) {
9393 }
9494 promAPI = promV1 .NewAPI (client )
9595 }
96- return & metricsData {promAPI : promAPI }, nil
96+ return & metricsData {
97+ promAPI : promAPI ,
98+ queueLengthTarget : cfg .MetricsTargetQueueLen ,
99+ }, nil
97100}
98101
99102func (m * metricsData ) update (ctx context.Context ) error {
0 commit comments