From cf70d74c255e08378259c1edc1c8b975d99bcc1e Mon Sep 17 00:00:00 2001 From: l1b0k Date: Tue, 19 Dec 2023 19:06:05 +0800 Subject: [PATCH] pool: fix min size cal --- daemon/config.go | 4 +++ daemon/config_test.go | 67 ++++++++++++++++++++++++++++++++++++++++++ pkg/aliyun/instance.go | 4 +++ 3 files changed, 75 insertions(+) create mode 100644 daemon/config_test.go diff --git a/daemon/config.go b/daemon/config.go index 42c7bbf5..75762111 100644 --- a/daemon/config.go +++ b/daemon/config.go @@ -56,6 +56,8 @@ func getPoolConfig(cfg *daemon.Config, daemonMode string, limit *aliyun.Limits) poolConfig.MaxPoolSize = cfg.MaxPoolSize } + poolConfig.MinPoolSize = cfg.MinPoolSize + if cfg.MinENI > 0 { poolConfig.MinPoolSize = cfg.MinENI } @@ -92,6 +94,8 @@ func getPoolConfig(cfg *daemon.Config, daemonMode string, limit *aliyun.Limits) poolConfig.MaxPoolSize = cfg.MaxPoolSize } + poolConfig.MinPoolSize = cfg.MinPoolSize + if cfg.MinENI > 0 { poolConfig.MinPoolSize = cfg.MinENI * ipPerENI } diff --git a/daemon/config_test.go b/daemon/config_test.go new file mode 100644 index 00000000..125ac7a9 --- /dev/null +++ b/daemon/config_test.go @@ -0,0 +1,67 @@ +package daemon + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/AliyunContainerService/terway/pkg/aliyun" + "github.com/AliyunContainerService/terway/types/daemon" +) + +func init() { + aliyun.Test = true +} + +func TestGetPoolConfigWithVPCMode(t *testing.T) { + cfg := &daemon.Config{ + MaxPoolSize: 5, + MinPoolSize: 1, + EniCapRatio: 1, + RegionID: "foo", + } + limit := &aliyun.Limits{ + Adapters: 10, + MemberAdapterLimit: 5, + } + poolConfig, err := getPoolConfig(cfg, "VPC", limit) + assert.NoError(t, err) + assert.Equal(t, 5, poolConfig.MaxPoolSize) + assert.Equal(t, 1, poolConfig.MinPoolSize) +} + +func TestGetPoolConfigWithENIOnlyMode(t *testing.T) { + cfg := &daemon.Config{ + MaxPoolSize: 5, + MinPoolSize: 1, + EniCapRatio: 1, + RegionID: "foo", + } + limit := &aliyun.Limits{ + Adapters: 10, + MemberAdapterLimit: 5, + } + poolConfig, err := getPoolConfig(cfg, "ENIOnly", limit) + assert.NoError(t, err) + assert.Equal(t, 5, poolConfig.MaxPoolSize) + assert.Equal(t, 1, poolConfig.MinPoolSize) +} + +func TestGetPoolConfigWithENIMultiIPMode(t *testing.T) { + cfg := &daemon.Config{ + MaxPoolSize: 5, + MinPoolSize: 1, + EniCapRatio: 1, + RegionID: "foo", + } + limit := &aliyun.Limits{ + Adapters: 10, + IPv4PerAdapter: 5, + MemberAdapterLimit: 5, + } + poolConfig, err := getPoolConfig(cfg, "ENIMultiIP", limit) + assert.NoError(t, err) + assert.Equal(t, 5, poolConfig.MaxPoolSize) + assert.Equal(t, 1, poolConfig.MinPoolSize) + assert.Equal(t, 5, poolConfig.MaxIPPerENI) +} diff --git a/pkg/aliyun/instance.go b/pkg/aliyun/instance.go index bc4a5f1a..122c5c3d 100644 --- a/pkg/aliyun/instance.go +++ b/pkg/aliyun/instance.go @@ -14,6 +14,7 @@ import ( var defaultIns *Instance var once sync.Once var logIns = logger.DefaultLogger +var Test = false type Instance struct { RegionID string @@ -27,6 +28,9 @@ type Instance struct { } func GetInstanceMeta() *Instance { + if Test { + return &Instance{} + } once.Do(func() { regionID, err := metadata.GetLocalRegion() if err != nil || regionID == "" {