Skip to content

Commit c0fc4ef

Browse files
committed
Adding caching to target group health lookups, a common query
1 parent 93e3fbe commit c0fc4ef

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

pkg/aws/albelbv2/elbv2.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@ import (
77
"strconv"
88
"time"
99

10-
"github.com/aws/aws-sdk-go/aws/request"
11-
12-
"github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/aws/albrgt"
10+
"github.com/karlseguin/ccache"
11+
"github.com/prometheus/client_golang/prometheus"
1312

1413
"github.com/aws/aws-sdk-go/aws"
1514
"github.com/aws/aws-sdk-go/aws/awserr"
15+
"github.com/aws/aws-sdk-go/aws/request"
1616
"github.com/aws/aws-sdk-go/aws/session"
1717
"github.com/aws/aws-sdk-go/service/elbv2"
1818
"github.com/aws/aws-sdk-go/service/elbv2/elbv2iface"
1919

20+
"github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/aws/albrgt"
21+
albprom "github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/prometheus"
2022
util "github.com/kubernetes-sigs/aws-alb-ingress-controller/pkg/util/types"
2123
)
2224

@@ -77,12 +79,14 @@ func (a *TargetGroupAttributes) Set(k, v string) {
7779
// ELBV2 is our extension to AWS's elbv2.ELBV2
7880
type ELBV2 struct {
7981
elbv2iface.ELBV2API
82+
cache *ccache.Cache
8083
}
8184

8285
// NewELBV2 returns an ELBV2 based off of the provided AWS session
8386
func NewELBV2(awsSession *session.Session) {
8487
ELBV2svc = &ELBV2{
8588
elbv2.New(awsSession),
89+
ccache.New(ccache.Configure()),
8690
}
8791
return
8892
}
@@ -205,6 +209,18 @@ func (e *ELBV2) DescribeListenersForLoadBalancer(loadBalancerArn *string) ([]*el
205209

206210
// DescribeTargetGroupTargetsForArn looks up target group targets by an ARN.
207211
func (e *ELBV2) DescribeTargetGroupTargetsForArn(arn *string, targets ...[]*elbv2.TargetDescription) (result util.AWSStringSlice, err error) {
212+
cache := "ELBV2-DescribeTargetGroupTargetsForArn"
213+
key := cache + "." + *arn
214+
item := e.cache.Get(key)
215+
216+
if item != nil {
217+
v := item.Value().(util.AWSStringSlice)
218+
albprom.AWSCache.With(prometheus.Labels{"cache": cache, "action": "hit"}).Add(float64(1))
219+
return v, nil
220+
}
221+
222+
albprom.AWSCache.With(prometheus.Labels{"cache": cache, "action": "miss"}).Add(float64(1))
223+
208224
var targetHealth *elbv2.DescribeTargetHealthOutput
209225
opts := &elbv2.DescribeTargetHealthInput{
210226
TargetGroupArn: arn,
@@ -225,6 +241,8 @@ func (e *ELBV2) DescribeTargetGroupTargetsForArn(arn *string, targets ...[]*elbv
225241
}
226242
}
227243
sort.Sort(result)
244+
245+
e.cache.Set(key, result, time.Minute*5)
228246
return
229247
}
230248

0 commit comments

Comments
 (0)