Skip to content

Commit 3ec9e76

Browse files
authored
[Feature] [GT-432] Agency Poll System (#1332)
1 parent d9ea028 commit 3ec9e76

File tree

10 files changed

+74
-24
lines changed

10 files changed

+74
-24
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- (Feature) Agency Cache Poll EE Extension
66
- (Feature) Metrics Counter
77
- (Feature) Requests Bytes Counter
8+
- (Feature) Agency Poll System
89

910
## [1.2.29](https://github.com/arangodb/kube-arangodb/tree/1.2.29) (2023-06-08)
1011
- (Maintenance) Add govulncheck to pipeline, update golangci-linter

pkg/deployment/agency/cache.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/rs/zerolog"
2929

3030
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
31+
agencyCache "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
3132
"github.com/arangodb/kube-arangodb/pkg/deployment/agency/state"
3233
"github.com/arangodb/kube-arangodb/pkg/generated/metric_descriptions"
3334
"github.com/arangodb/kube-arangodb/pkg/logging"
@@ -211,7 +212,7 @@ type cache struct {
211212

212213
lock sync.RWMutex
213214

214-
loader StateLoader[state.Root]
215+
loader agencyCache.StateLoader[state.Root]
215216

216217
health Health
217218

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
//
2+
// DISCLAIMER
3+
//
4+
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
5+
//
6+
// Licensed under the Apache License, Version 2.0 (the "License");
7+
// you may not use this file except in compliance with the License.
8+
// You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing, software
13+
// distributed under the License is distributed on an "AS IS" BASIS,
14+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
// See the License for the specific language governing permissions and
16+
// limitations under the License.
17+
//
18+
// Copyright holder is ArangoDB GmbH, Cologne, Germany
19+
//
20+
21+
package cache
22+
23+
import (
24+
"context"
25+
"time"
26+
27+
"github.com/arangodb/kube-arangodb/pkg/util/arangod/conn"
28+
)
29+
30+
type LeaderDiscovery interface {
31+
Discover(ctx context.Context) (conn.Connection, error)
32+
}
33+
34+
type StateLoader[T interface{}] interface {
35+
State() (*T, uint64, bool)
36+
37+
Invalidate()
38+
Valid() bool
39+
40+
UpdateTime() time.Time
41+
42+
Refresh(ctx context.Context, discovery LeaderDiscovery) error
43+
}

pkg/deployment/agency/leader.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,11 @@ package agency
2323
import (
2424
"context"
2525

26+
agencyCache "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
2627
"github.com/arangodb/kube-arangodb/pkg/util/arangod/conn"
2728
)
2829

29-
type LeaderDiscovery interface {
30-
Discover(ctx context.Context) (conn.Connection, error)
31-
}
32-
33-
func StaticLeaderDiscovery(in conn.Connection) LeaderDiscovery {
30+
func StaticLeaderDiscovery(in conn.Connection) agencyCache.LeaderDiscovery {
3431
return staticLeaderDiscovery{conn: in}
3532
}
3633

pkg/deployment/agency/loader.community.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
package agency
2525

26-
func getLoaderBase[T interface{}]() StateLoader[T] {
26+
import agencyCache "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
27+
28+
func getLoaderBase[T interface{}]() agencyCache.StateLoader[T] {
2729
return NewSimpleStateLoader[T]()
2830
}

pkg/deployment/agency/loader.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@ import (
2525
"sync"
2626
"time"
2727

28-
agencyCecheConfig "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
28+
agencyCache "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
2929
)
3030

31-
func getLoader[T interface{}]() StateLoader[T] {
31+
func getLoader[T interface{}]() agencyCache.StateLoader[T] {
3232
loader := getLoaderBase[T]()
3333

3434
loader = InvalidateOnErrorLoader[T](loader)
3535

36-
loader = DelayLoader[T](loader, agencyCecheConfig.GlobalConfig().RefreshDelay)
37-
loader = RefreshLoader[T](loader, agencyCecheConfig.GlobalConfig().RefreshInterval)
36+
loader = DelayLoader[T](loader, agencyCache.GlobalConfig().RefreshDelay)
37+
loader = RefreshLoader[T](loader, agencyCache.GlobalConfig().RefreshInterval)
3838

3939
return loader
4040
}
@@ -47,10 +47,10 @@ type StateLoader[T interface{}] interface {
4747

4848
UpdateTime() time.Time
4949

50-
Refresh(ctx context.Context, discovery LeaderDiscovery) error
50+
Refresh(ctx context.Context, discovery agencyCache.LeaderDiscovery) error
5151
}
5252

53-
func NewSimpleStateLoader[T interface{}]() StateLoader[T] {
53+
func NewSimpleStateLoader[T interface{}]() agencyCache.StateLoader[T] {
5454
return &simpleStateLoader[T]{}
5555
}
5656

@@ -96,7 +96,7 @@ func (s *simpleStateLoader[T]) Invalidate() {
9696
s.valid = false
9797
}
9898

99-
func (s *simpleStateLoader[T]) Refresh(ctx context.Context, discovery LeaderDiscovery) error {
99+
func (s *simpleStateLoader[T]) Refresh(ctx context.Context, discovery agencyCache.LeaderDiscovery) error {
100100
s.lock.Lock()
101101
defer s.lock.Unlock()
102102

pkg/deployment/agency/loader_delayer.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ import (
2424
"context"
2525
"sync"
2626
"time"
27+
28+
agencyCache "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
2729
)
2830

29-
func DelayLoader[T interface{}](loader StateLoader[T], delay time.Duration) StateLoader[T] {
31+
func DelayLoader[T interface{}](loader agencyCache.StateLoader[T], delay time.Duration) agencyCache.StateLoader[T] {
3032
if delay <= 0 {
3133
return loader
3234
}
@@ -43,7 +45,7 @@ type delayerLoader[T interface{}] struct {
4345
last time.Time
4446
delay time.Duration
4547

46-
parent StateLoader[T]
48+
parent agencyCache.StateLoader[T]
4749
}
4850

4951
func (i *delayerLoader[T]) UpdateTime() time.Time {
@@ -74,7 +76,7 @@ func (i *delayerLoader[T]) Invalidate() {
7476
i.parent.Invalidate()
7577
}
7678

77-
func (i *delayerLoader[T]) Refresh(ctx context.Context, discovery LeaderDiscovery) error {
79+
func (i *delayerLoader[T]) Refresh(ctx context.Context, discovery agencyCache.LeaderDiscovery) error {
7880
i.lock.Lock()
7981
defer i.lock.Unlock()
8082

pkg/deployment/agency/loader_invalidate.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ import (
2424
"context"
2525
"sync"
2626
"time"
27+
28+
agencyCache "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
2729
)
2830

29-
func InvalidateOnErrorLoader[T interface{}](loader StateLoader[T]) StateLoader[T] {
31+
func InvalidateOnErrorLoader[T interface{}](loader agencyCache.StateLoader[T]) agencyCache.StateLoader[T] {
3032
return &invalidateOnErrorLoader[T]{
3133
parent: loader,
3234
}
@@ -35,7 +37,7 @@ func InvalidateOnErrorLoader[T interface{}](loader StateLoader[T]) StateLoader[T
3537
type invalidateOnErrorLoader[T interface{}] struct {
3638
lock sync.Mutex
3739

38-
parent StateLoader[T]
40+
parent agencyCache.StateLoader[T]
3941
}
4042

4143
func (i *invalidateOnErrorLoader[T]) UpdateTime() time.Time {
@@ -66,7 +68,7 @@ func (i *invalidateOnErrorLoader[T]) Invalidate() {
6668
i.parent.Invalidate()
6769
}
6870

69-
func (i *invalidateOnErrorLoader[T]) Refresh(ctx context.Context, discovery LeaderDiscovery) (err error) {
71+
func (i *invalidateOnErrorLoader[T]) Refresh(ctx context.Context, discovery agencyCache.LeaderDiscovery) (err error) {
7072
i.lock.Lock()
7173
defer i.lock.Unlock()
7274

pkg/deployment/agency/loader_refresher.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ import (
2424
"context"
2525
"sync"
2626
"time"
27+
28+
agencyCache "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
2729
)
2830

29-
func RefreshLoader[T interface{}](loader StateLoader[T], delay time.Duration) StateLoader[T] {
31+
func RefreshLoader[T interface{}](loader agencyCache.StateLoader[T], delay time.Duration) agencyCache.StateLoader[T] {
3032
if delay <= 0 {
3133
return loader
3234
}
@@ -43,7 +45,7 @@ type refresherLoader[T interface{}] struct {
4345
last time.Time
4446
delay time.Duration
4547

46-
parent StateLoader[T]
48+
parent agencyCache.StateLoader[T]
4749
}
4850

4951
func (i *refresherLoader[T]) UpdateTime() time.Time {
@@ -74,7 +76,7 @@ func (i *refresherLoader[T]) Invalidate() {
7476
i.parent.Invalidate()
7577
}
7678

77-
func (i *refresherLoader[T]) Refresh(ctx context.Context, discovery LeaderDiscovery) error {
79+
func (i *refresherLoader[T]) Refresh(ctx context.Context, discovery agencyCache.LeaderDiscovery) error {
7880
i.lock.Lock()
7981
defer i.lock.Unlock()
8082

pkg/deployment/features/agency.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ var agencyPoll = &feature{
3030
version: "3.5.0",
3131
enterpriseRequired: false,
3232
operatorEnterpriseRequired: true,
33-
enabledByDefault: false,
33+
enabledByDefault: true,
3434
}
3535

3636
func AgencyPoll() Feature {

0 commit comments

Comments
 (0)