chore: Add missing changes for the release (#806)

This commit is contained in:
Jorge Turrado Ferrero 2023-10-05 08:47:42 +02:00 committed by GitHub
parent 8ea0896621
commit d374cbecbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 184 additions and 18 deletions

View File

@ -64,11 +64,10 @@ body:
label: Kubernetes Version label: Kubernetes Version
description: What version of Kubernetes that are you running? description: What version of Kubernetes that are you running?
options: options:
- "1.28"
- "1.27"
- "1.26" - "1.26"
- "1.25" - "< 1.26"
- "1.24"
- "1.23"
- "< 1.23"
- "Other" - "Other"
validations: validations:
required: false required: false

View File

@ -16,7 +16,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
kubernetesVersion: [v1.28, v1.27, v1.26, v1.25] kubernetesVersion: [v1.28, v1.27, v1.26]
include: include:
- kubernetesVersion: v1.28 - kubernetesVersion: v1.28
kindImage: kindest/node:v1.28.0@sha256:b7a4cad12c197af3ba43202d3efe03246b3f0793f162afb40a33c923952d5b31 kindImage: kindest/node:v1.28.0@sha256:b7a4cad12c197af3ba43202d3efe03246b3f0793f162afb40a33c923952d5b31
@ -24,8 +24,6 @@ jobs:
kindImage: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 kindImage: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72
- kubernetesVersion: v1.26 - kubernetesVersion: v1.26
kindImage: kindest/node:v1.26.6@sha256:6e2d8b28a5b601defe327b98bd1c2d1930b49e5d8c512e1895099e4504007adb kindImage: kindest/node:v1.26.6@sha256:6e2d8b28a5b601defe327b98bd1c2d1930b49e5d8c512e1895099e4504007adb
- kubernetesVersion: v1.25
kindImage: kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
steps: steps:
- name: Install prerequisites - name: Install prerequisites
run: | run: |
@ -91,7 +89,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
kubernetesVersion: [v1.28, v1.27, v1.26, v1.25] kubernetesVersion: [v1.28, v1.27, v1.26]
include: include:
- kubernetesVersion: v1.28 - kubernetesVersion: v1.28
kindImage: kindest/node:v1.28.0@sha256:b7a4cad12c197af3ba43202d3efe03246b3f0793f162afb40a33c923952d5b31 kindImage: kindest/node:v1.28.0@sha256:b7a4cad12c197af3ba43202d3efe03246b3f0793f162afb40a33c923952d5b31
@ -99,8 +97,6 @@ jobs:
kindImage: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72 kindImage: kindest/node:v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72
- kubernetesVersion: v1.26 - kubernetesVersion: v1.26
kindImage: kindest/node:v1.26.6@sha256:6e2d8b28a5b601defe327b98bd1c2d1930b49e5d8c512e1895099e4504007adb kindImage: kindest/node:v1.26.6@sha256:6e2d8b28a5b601defe327b98bd1c2d1930b49e5d8c512e1895099e4504007adb
- kubernetesVersion: v1.25
kindImage: kindest/node:v1.25.11@sha256:227fa11ce74ea76a0474eeefb84cb75d8dad1b08638371ecf0e86259b35be0c8
steps: steps:
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4 - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4

View File

@ -24,8 +24,7 @@ This changelog keeps track of work items that have been completed and are ready
### Improvements ### Improvements
- **General**: TODO ([#TODO](https://github.com/kedacore/http-add-on/issues/TODO)) - **Scaler**: Decrease memory usage by allowing increasing stream interval configuration ([#745](https://github.com/kedacore/http-add-on/pull/745))
- **Scaler**: Decrease memory usage by increasing stream interval from 5ms to 200ms.
### Fixes ### Fixes

View File

@ -24,8 +24,6 @@ spec:
- name: interceptor - name: interceptor
image: ghcr.io/kedacore/http-add-on-interceptor image: ghcr.io/kedacore/http-add-on-interceptor
env: env:
- name: KEDA_HTTP_ROUTING_TABLE_UPDATE_DURATION_MS
value: "500"
- name: KEDA_HTTP_CURRENT_NAMESPACE - name: KEDA_HTTP_CURRENT_NAMESPACE
value: "keda" value: "keda"
- name: KEDA_HTTP_PROXY_PORT - name: KEDA_HTTP_PROXY_PORT

View File

@ -33,7 +33,7 @@ spec:
value: "keda-http-add-on-interceptor-admin" value: "keda-http-add-on-interceptor-admin"
- name: KEDA_HTTP_SCALER_TARGET_ADMIN_PORT - name: KEDA_HTTP_SCALER_TARGET_ADMIN_PORT
value: "9090" value: "9090"
- name: KEDA_HTTP_SCALER_TARGET_PENDING_REQUESTS_INTERCEPTOR - name: KEDA_HTTP_SCALER_STREAM_INTERVAL_MS
value: "200" value: "200"
ports: ports:
- name: grpc - name: grpc

View File

@ -75,7 +75,7 @@ $ helm upgrade kedahttp ./charts/keda-add-ons-http \
| HTTP Add-On version | KEDA version | Kubernetes version | | HTTP Add-On version | KEDA version | Kubernetes version |
|---------------------|--------------|--------------------| |---------------------|--------------|--------------------|
| 0.6.0 | v2.12 | v1.25 - v1.28 | | 0.6.0 | v2.12 | v1.26 - v1.28 |
| 0.5.1 | v2.10 | v1.24 - v1.26 | | 0.5.1 | v2.10 | v1.24 - v1.26 |
| 0.5.0 | v2.9 | v1.23 - v1.25 | | 0.5.0 | v2.9 | v1.23 - v1.25 |

54
pkg/util/env_resolver.go Normal file
View File

@ -0,0 +1,54 @@
/*
Copyright 2023 The KEDA Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package util
import (
"os"
"strconv"
"time"
)
func ResolveOsEnvBool(envName string, defaultValue bool) (bool, error) {
valueStr, found := os.LookupEnv(envName)
if found && valueStr != "" {
return strconv.ParseBool(valueStr)
}
return defaultValue, nil
}
func ResolveOsEnvInt(envName string, defaultValue int) (int, error) {
valueStr, found := os.LookupEnv(envName)
if found && valueStr != "" {
return strconv.Atoi(valueStr)
}
return defaultValue, nil
}
func ResolveOsEnvDuration(envName string) (*time.Duration, error) {
valueStr, found := os.LookupEnv(envName)
if found && valueStr != "" {
value, err := time.ParseDuration(valueStr)
return &value, err
}
return nil, nil
}

View File

@ -0,0 +1,108 @@
package util
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestResolveMissingOsEnvBool(t *testing.T) {
actual, err := ResolveOsEnvBool("missing_bool", true)
assert.True(t, actual)
assert.Nil(t, err)
t.Setenv("empty_bool", "")
actual, err = ResolveOsEnvBool("empty_bool", true)
assert.True(t, actual)
assert.Nil(t, err)
}
func TestResolveInvalidOsEnvBool(t *testing.T) {
t.Setenv("blank_bool", " ")
actual, err := ResolveOsEnvBool("blank_bool", true)
assert.False(t, actual)
assert.NotNil(t, err)
t.Setenv("invalid_bool", "deux heures")
actual, err = ResolveOsEnvBool("invalid_bool", true)
assert.False(t, actual)
assert.NotNil(t, err)
}
func TestResolveValidOsEnvBool(t *testing.T) {
t.Setenv("valid_bool", "true")
actual, err := ResolveOsEnvBool("valid_bool", false)
assert.True(t, actual)
assert.Nil(t, err)
t.Setenv("valid_bool", "false")
actual, err = ResolveOsEnvBool("valid_bool", true)
assert.False(t, actual)
assert.Nil(t, err)
}
func TestResolveMissingOsEnvInt(t *testing.T) {
actual, err := ResolveOsEnvInt("missing_int", 1)
assert.Equal(t, 1, actual)
assert.Nil(t, err)
t.Setenv("empty_int", "")
actual, err = ResolveOsEnvInt("empty_int", 1)
assert.Equal(t, 1, actual)
assert.Nil(t, err)
}
func TestResolveInvalidOsEnvInt(t *testing.T) {
t.Setenv("blank_int", " ")
actual, err := ResolveOsEnvInt("blank_int", 1)
assert.Equal(t, 0, actual)
assert.NotNil(t, err)
t.Setenv("invalid_int", "deux heures")
actual, err = ResolveOsEnvInt("invalid_int", 1)
assert.Equal(t, 0, actual)
assert.NotNil(t, err)
}
func TestResolveValidOsEnvInt(t *testing.T) {
t.Setenv("valid_int", "2")
actual, err := ResolveOsEnvInt("valid_int", 1)
assert.Equal(t, 2, actual)
assert.Nil(t, err)
}
func TestResolveMissingOsEnvDuration(t *testing.T) {
actual, err := ResolveOsEnvDuration("missing_duration")
assert.Nil(t, actual)
assert.Nil(t, err)
t.Setenv("empty_duration", "")
actual, err = ResolveOsEnvDuration("empty_duration")
assert.Nil(t, actual)
assert.Nil(t, err)
}
func TestResolveInvalidOsEnvDuration(t *testing.T) {
t.Setenv("blank_duration", " ")
actual, err := ResolveOsEnvDuration("blank_duration")
assert.Equal(t, time.Duration(0), *actual)
assert.NotNil(t, err)
t.Setenv("invalid_duration", "deux heures")
actual, err = ResolveOsEnvDuration("invalid_duration")
assert.Equal(t, time.Duration(0), *actual)
assert.NotNil(t, err)
}
func TestResolveValidOsEnvDuration(t *testing.T) {
t.Setenv("valid_duration_seconds", "8s")
actual, err := ResolveOsEnvDuration("valid_duration_seconds")
assert.Equal(t, time.Duration(8)*time.Second, *actual)
assert.Nil(t, err)
t.Setenv("valid_duration_minutes", "30m")
actual, err = ResolveOsEnvDuration("valid_duration_minutes")
assert.Equal(t, time.Duration(30)*time.Minute, *actual)
assert.Nil(t, err)
}

View File

@ -17,12 +17,24 @@ import (
informershttpv1alpha1 "github.com/kedacore/http-add-on/operator/generated/informers/externalversions/http/v1alpha1" informershttpv1alpha1 "github.com/kedacore/http-add-on/operator/generated/informers/externalversions/http/v1alpha1"
"github.com/kedacore/http-add-on/pkg/k8s" "github.com/kedacore/http-add-on/pkg/k8s"
"github.com/kedacore/http-add-on/pkg/util"
) )
const ( const (
keyInterceptorTargetPendingRequests = "interceptorTargetPendingRequests" keyInterceptorTargetPendingRequests = "interceptorTargetPendingRequests"
) )
var streamInterval time.Duration
func init() {
defaultMS := 200
timeoutMS, err := util.ResolveOsEnvInt("KEDA_HTTP_SCALER_STREAM_INTERVAL_MS", defaultMS)
if err != nil {
timeoutMS = defaultMS
}
streamInterval = time.Duration(timeoutMS) * time.Millisecond
}
type impl struct { type impl struct {
lggr logr.Logger lggr logr.Logger
pinger *queuePinger pinger *queuePinger
@ -82,9 +94,9 @@ func (e *impl) StreamIsActive(
server externalscaler.ExternalScaler_StreamIsActiveServer, server externalscaler.ExternalScaler_StreamIsActiveServer,
) error { ) error {
// this function communicates with KEDA via the 'server' parameter. // this function communicates with KEDA via the 'server' parameter.
// we call server.Send (below) every 200ms, which tells it to immediately // we call server.Send (below) every streamInterval, which tells it to immediately
// ping our IsActive RPC // ping our IsActive RPC
ticker := time.NewTicker(200 * time.Millisecond) ticker := time.NewTicker(streamInterval)
defer ticker.Stop() defer ticker.Stop()
for { for {
select { select {