Skip to content

Commit 781dee8

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

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
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
@@ -75,14 +75,14 @@ require (
7575
github.com/prometheus/procfs v0.10.1 // indirect
7676
github.com/rogpeppe/go-internal v1.9.0 // indirect
7777
github.com/shopspring/decimal v1.3.1 // indirect
78-
github.com/stretchr/testify v1.8.1 // indirect
7978
go.uber.org/atomic v1.10.0 // indirect
8079
go.uber.org/multierr v1.8.0 // indirect
8180
go.uber.org/zap v1.23.0 // indirect
8281
go4.org/intern v0.0.0-20220617035311-6925f38cc365 // indirect
8382
golang.org/x/crypto v0.17.0 // indirect
8483
golang.org/x/net v0.17.0 // indirect
8584
golang.org/x/oauth2 v0.5.0 // indirect
85+
golang.org/x/sync v0.2.0 // indirect
8686
golang.org/x/sys v0.15.0 // indirect
8787
golang.org/x/term v0.15.0 // indirect
8888
golang.org/x/time v0.2.0 // indirect

go.sum

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,6 @@ github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJ
7979
github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g=
8080
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
8181
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
82-
github.com/ReneKroon/ttlcache v1.7.0 h1:8BkjFfrzVFXyrqnMtezAaJ6AHPSsVV10m6w28N/Fgkk=
83-
github.com/ReneKroon/ttlcache v1.7.0/go.mod h1:8BGGzdumrIjWxdRx8zpK6L3oGMWvIXdvB2GD1cfvd+I=
8482
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
8583
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
8684
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
@@ -323,6 +321,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:
323321
github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
324322
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
325323
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
324+
github.com/jellydator/ttlcache/v3 v3.1.1 h1:RCgYJqo3jgvhl+fEWvjNW8thxGWsgxi+TPhRir1Y9y8=
325+
github.com/jellydator/ttlcache/v3 v3.1.1/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
326326
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
327327
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
328328
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -445,7 +445,6 @@ github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag
445445
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
446446
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
447447
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
448-
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
449448
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
450449
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
451450
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -454,8 +453,7 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
454453
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
455454
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
456455
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
457-
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
458-
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
456+
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
459457
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
460458
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
461459
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@@ -480,8 +478,7 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
480478
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
481479
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
482480
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
483-
go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI=
484-
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
481+
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
485482
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
486483
go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
487484
go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
@@ -625,6 +622,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
625622
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
626623
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
627624
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
625+
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
626+
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
628627
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
629628
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
630629
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)