Skip to content

Commit 083c8b8

Browse files
authored
Making DLX's resource readiness timeout configurable (#30)
1 parent cf43b55 commit 083c8b8

File tree

5 files changed

+22
-12
lines changed

5 files changed

+22
-12
lines changed

cmd/dlx/app/dlx.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package app
22

33
import (
44
"os"
5+
"time"
56

67
"github.com/v3io/scaler/pkg/dlx"
78
"github.com/v3io/scaler/pkg/pluginloader"
@@ -16,7 +17,8 @@ func Run(kubeconfigPath string,
1617
targetNameHeader string,
1718
targetPathHeader string,
1819
targetPort int,
19-
listenAddress string) error {
20+
listenAddress string,
21+
resourceReadinessTimeout string) error {
2022
pluginLoader, err := pluginloader.New()
2123
if err != nil {
2224
return errors.Wrap(err, "Failed to initialize plugin loader")
@@ -27,12 +29,18 @@ func Run(kubeconfigPath string,
2729
return errors.Wrap(err, "Failed to load plugin")
2830
}
2931

32+
resourceReadinessTimeoutDuration, err := time.ParseDuration(resourceReadinessTimeout)
33+
if err != nil {
34+
return errors.Wrap(err, "Failed to parse resource readiness timeout")
35+
}
36+
3037
dlxOptions := scaler_types.DLXOptions{
31-
TargetNameHeader: targetNameHeader,
32-
TargetPathHeader: targetPathHeader,
33-
TargetPort: targetPort,
34-
ListenAddress: listenAddress,
35-
Namespace: namespace,
38+
TargetNameHeader: targetNameHeader,
39+
TargetPathHeader: targetPathHeader,
40+
TargetPort: targetPort,
41+
ListenAddress: listenAddress,
42+
Namespace: namespace,
43+
ResourceReadinessTimeout: resourceReadinessTimeoutDuration,
3644
}
3745

3846
// see if resource scaler wants to override the arguments

cmd/dlx/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ func main() {
1717
targetPathHeader := flag.String("target-path-header", "", "Name of the header that holds information on target path")
1818
targetPort := flag.Int("target-port", 0, "Name of the header that holds information on target port")
1919
listenAddress := flag.String("listen-address", ":8090", "Address to listen upon for http proxy")
20+
resourceReadinessTimeout := flag.String("resource-readiness-timeout", "5m", "maximum wait time for the resource to be ready")
2021
flag.Parse()
2122

2223
*namespace = common.GetNamespace(*namespace)
2324

24-
if err := app.Run(*kubeconfigPath, *namespace, *targetNameHeader, *targetPathHeader, *targetPort, *listenAddress); err != nil {
25+
if err := app.Run(*kubeconfigPath, *namespace, *targetNameHeader, *targetPathHeader, *targetPort, *listenAddress, *resourceReadinessTimeout); err != nil {
2526
errors.PrintErrorStack(os.Stderr, err, 5)
2627

2728
os.Exit(1)

pkg/autoscaler/autoscaler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,9 @@ func (as *Autoscaler) checkResourcesToScale() error {
185185

186186
scaleEventDebounceDuration := as.getMaxScaleResourceWindowSize(resource)
187187

188-
// if the resource was scaled from zero or started, and the debounce period from then has not passed yet do not scale
188+
// if the resource was scaled from zero or updated, and the debounce period from then has not passed yet do not scale
189189
if ((resource.LastScaleEvent != nil) &&
190-
(*resource.LastScaleEvent == scaler_types.ResourceStartedScaleEvent ||
190+
(*resource.LastScaleEvent == scaler_types.ResourceUpdatedScaleEvent ||
191191
*resource.LastScaleEvent == scaler_types.ScaleFromZeroStartedScaleEvent ||
192192
*resource.LastScaleEvent == scaler_types.ScaleFromZeroCompletedScaleEvent)) &&
193193
resource.LastScaleEventTime.After(now.Add(-1*scaleEventDebounceDuration)) {

pkg/dlx/dlx.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type DLX struct {
1717
func NewDLX(logger logger.Logger,
1818
resourceScaler scaler_types.ResourceScaler,
1919
options scaler_types.DLXOptions) (*DLX, error) {
20-
resourceStarter, err := NewResourceStarter(logger, resourceScaler, options.Namespace)
20+
resourceStarter, err := NewResourceStarter(logger, resourceScaler, options.Namespace, options.ResourceReadinessTimeout)
2121
if err != nil {
2222
return nil, errors.Wrap(err, "Failed to create function starter")
2323
}

pkg/dlx/resourcestarter.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ type ResourceStatusResult struct {
3030

3131
func NewResourceStarter(parentLogger logger.Logger,
3232
scaler scaler_types.ResourceScaler,
33-
namespace string) (*ResourceStarter, error) {
33+
namespace string,
34+
resourceReadinessTimeout time.Duration) (*ResourceStarter, error) {
3435
fs := &ResourceStarter{
3536
logger: parentLogger.GetChild("resource-starter"),
3637
resourceSinksMap: make(resourceSinksMap),
3738
namespace: namespace,
38-
resourceReadinessTimeout: time.Minute,
39+
resourceReadinessTimeout: resourceReadinessTimeout,
3940
scaler: scaler,
4041
}
4142
return fs, nil

0 commit comments

Comments
 (0)