@@ -26,30 +26,29 @@ import (
2626 "time"
2727
2828 agencyCecheConfig "github.com/arangodb/kube-arangodb/pkg/deployment/agency/cache"
29- "github.com/arangodb/kube-arangodb/pkg/deployment/agency/state"
3029)
3130
32- func getLoader () StateLoader {
33- loader := getLoaderBase ()
31+ func getLoader [ T interface {}] () StateLoader [ T ] {
32+ loader := getLoaderBase [ T ] ()
3433
35- loader = InvalidateOnErrorLoader (loader )
34+ loader = InvalidateOnErrorLoader [ T ] (loader )
3635
37- loader = DelayLoader (loader , agencyCecheConfig .GlobalConfig ().RefreshDelay )
38- loader = RefreshLoader (loader , agencyCecheConfig .GlobalConfig ().RefreshInterval )
36+ loader = DelayLoader [ T ] (loader , agencyCecheConfig .GlobalConfig ().RefreshDelay )
37+ loader = RefreshLoader [ T ] (loader , agencyCecheConfig .GlobalConfig ().RefreshInterval )
3938
4039 return loader
4140}
4241
43- func getLoaderBase () StateLoader {
42+ func getLoaderBase [ T interface {}] () StateLoader [ T ] {
4443 if agencyCecheConfig .GlobalConfig ().PollEnabled {
45- return NewSimpleStateLoader ()
44+ return NewSimpleStateLoader [ T ] ()
4645 } else {
47- return NewSimpleStateLoader ()
46+ return NewSimpleStateLoader [ T ] ()
4847 }
4948}
5049
51- type StateLoader interface {
52- State () (* state. Root , uint64 , bool )
50+ type StateLoader [ T interface {}] interface {
51+ State () (* T , uint64 , bool )
5352
5453 Invalidate ()
5554 Valid () bool
@@ -59,35 +58,35 @@ type StateLoader interface {
5958 Refresh (ctx context.Context , discovery LeaderDiscovery ) error
6059}
6160
62- func NewSimpleStateLoader () StateLoader {
63- return & simpleStateLoader {}
61+ func NewSimpleStateLoader [ T interface {}] () StateLoader [ T ] {
62+ return & simpleStateLoader [ T ] {}
6463}
6564
66- type simpleStateLoader struct {
65+ type simpleStateLoader [ T interface {}] struct {
6766 lock sync.Mutex
6867
69- state * state. Root
68+ state * T
7069 index uint64
7170 valid bool
7271
7372 updateTime time.Time
7473}
7574
76- func (s * simpleStateLoader ) UpdateTime () time.Time {
75+ func (s * simpleStateLoader [ T ] ) UpdateTime () time.Time {
7776 s .lock .Lock ()
7877 defer s .lock .Unlock ()
7978
8079 return s .updateTime
8180}
8281
83- func (s * simpleStateLoader ) Valid () bool {
82+ func (s * simpleStateLoader [ T ] ) Valid () bool {
8483 s .lock .Lock ()
8584 defer s .lock .Unlock ()
8685
8786 return s .valid
8887}
8988
90- func (s * simpleStateLoader ) State () (* state. Root , uint64 , bool ) {
89+ func (s * simpleStateLoader [ T ] ) State () (* T , uint64 , bool ) {
9190 s .lock .Lock ()
9291 defer s .lock .Unlock ()
9392
@@ -98,14 +97,14 @@ func (s *simpleStateLoader) State() (*state.Root, uint64, bool) {
9897 return s .state , s .index , true
9998}
10099
101- func (s * simpleStateLoader ) Invalidate () {
100+ func (s * simpleStateLoader [ T ] ) Invalidate () {
102101 s .lock .Lock ()
103102 defer s .lock .Unlock ()
104103
105104 s .valid = false
106105}
107106
108- func (s * simpleStateLoader ) Refresh (ctx context.Context , discovery LeaderDiscovery ) error {
107+ func (s * simpleStateLoader [ T ] ) Refresh (ctx context.Context , discovery LeaderDiscovery ) error {
109108 s .lock .Lock ()
110109 defer s .lock .Unlock ()
111110
@@ -121,7 +120,7 @@ func (s *simpleStateLoader) Refresh(ctx context.Context, discovery LeaderDiscove
121120
122121 if s .index != cfg .CommitIndex {
123122 // Full reload
124- state , err := GetAgencyState (ctx , conn )
123+ state , err := GetAgencyState [ T ] (ctx , conn )
125124 if err != nil {
126125 return err
127126 }
0 commit comments