Skip to content

Commit 27ac3c4

Browse files
committed
Update ttlcache library to v3, disable TTL extension on hit
Fixes #336 Signed-off-by: Hans Rakers <[email protected]>
1 parent 7fd4146 commit 27ac3c4

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ module sigs.k8s.io/cluster-api-provider-cloudstack
33
go 1.19
44

55
require (
6-
github.com/ReneKroon/ttlcache v1.7.0
76
github.com/apache/cloudstack-go/v2 v2.15.0
87
github.com/go-logr/logr v1.2.4
98
github.com/golang/mock v1.6.0
109
github.com/hashicorp/go-multierror v1.1.1
10+
github.com/jellydator/ttlcache/v3 v3.1.1
1111
github.com/onsi/ginkgo/v2 v2.11.0
1212
github.com/onsi/gomega v1.27.8
1313
github.com/pkg/errors v0.9.1
@@ -72,6 +72,7 @@ require (
7272
go.uber.org/atomic v1.10.0 // indirect
7373
golang.org/x/net v0.17.0 // indirect
7474
golang.org/x/oauth2 v0.6.0 // indirect
75+
golang.org/x/sync v0.2.0 // indirect
7576
golang.org/x/sys v0.13.0 // indirect
7677
golang.org/x/term v0.13.0 // indirect
7778
golang.org/x/time v0.3.0 // indirect

go.sum

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJ
1818
github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g=
1919
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
2020
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
21-
github.com/ReneKroon/ttlcache v1.7.0 h1:8BkjFfrzVFXyrqnMtezAaJ6AHPSsVV10m6w28N/Fgkk=
22-
github.com/ReneKroon/ttlcache v1.7.0/go.mod h1:8BGGzdumrIjWxdRx8zpK6L3oGMWvIXdvB2GD1cfvd+I=
2321
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
2422
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
2523
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
@@ -208,6 +206,8 @@ github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK
208206
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
209207
github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
210208
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
209+
github.com/jellydator/ttlcache/v3 v3.1.1 h1:RCgYJqo3jgvhl+fEWvjNW8thxGWsgxi+TPhRir1Y9y8=
210+
github.com/jellydator/ttlcache/v3 v3.1.1/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
211211
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
212212
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
213213
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -337,8 +337,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
337337
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
338338
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
339339
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
340-
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
341340
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
341+
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
342342
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
343343
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
344344
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@@ -355,8 +355,7 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe
355355
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
356356
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
357357
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
358-
go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI=
359-
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
358+
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
360359
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
361360
go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
362361
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
@@ -426,6 +425,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
426425
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
427426
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
428427
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
428+
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
429+
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
429430
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
430431
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
431432
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=

pkg/cloud/client.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ import (
2929
"gopkg.in/yaml.v3"
3030
"sigs.k8s.io/cluster-api-provider-cloudstack/pkg/metrics"
3131

32-
"github.com/ReneKroon/ttlcache"
3332
"github.com/apache/cloudstack-go/v2/cloudstack"
33+
ttlcache "github.com/jellydator/ttlcache/v3"
3434
"github.com/pkg/errors"
3535
)
3636

@@ -71,7 +71,7 @@ type SecretConfig struct {
7171
StringData Config `yaml:"stringData"`
7272
}
7373

74-
var clientCache *ttlcache.Cache
74+
var clientCache *ttlcache.Cache[string, *client]
7575
var cacheMutex sync.Mutex
7676

7777
var NewAsyncClient = cloudstack.NewAsyncClient
@@ -159,7 +159,8 @@ func NewClientFromConf(conf Config, clientConfig *corev1.ConfigMap) (Client, err
159159
}
160160

161161
clientCacheKey := generateClientCacheKey(conf)
162-
if client, exists := clientCache.Get(clientCacheKey); exists {
162+
if item := clientCache.Get(clientCacheKey); item != nil {
163+
var client interface{} = item.Value()
163164
return client.(Client), nil
164165
}
165166

@@ -197,7 +198,7 @@ func NewClientFromConf(conf Config, clientConfig *corev1.ConfigMap) (Client, err
197198
"could not find sufficient user (with API keys) in domain/account %s/%s", userResponse.Users[0].Domain, userResponse.Users[0].Account)
198199
}
199200
c.user = user
200-
clientCache.Set(clientCacheKey, c)
201+
clientCache.Set(clientCacheKey, c, ttlcache.DefaultTTL)
201202

202203
return c, nil
203204
}
@@ -251,11 +252,15 @@ func generateClientCacheKey(conf Config) string {
251252
}
252253

253254
// newClientCache returns a new instance of client cache
254-
func newClientCache(clientConfig *corev1.ConfigMap) *ttlcache.Cache {
255-
clientCache := ttlcache.NewCache()
256-
clientCache.SetTTL(GetClientCacheTTL(clientConfig))
257-
clientCache.SkipTtlExtensionOnHit(false)
258-
return clientCache
255+
func newClientCache(clientConfig *corev1.ConfigMap) *ttlcache.Cache[string, *client] {
256+
cache := ttlcache.New[string, *client](
257+
ttlcache.WithTTL[string, *client](GetClientCacheTTL(clientConfig)),
258+
ttlcache.WithDisableTouchOnHit[string, *client](),
259+
)
260+
261+
go cache.Start() // starts automatic expired item deletion
262+
263+
return cache
259264
}
260265

261266
// GetClientCacheTTL returns a client cache TTL duration from the passed config map

0 commit comments

Comments
 (0)