Skip to content

Commit 02bd962

Browse files
committed
docs.
1 parent 98d256a commit 02bd962

2 files changed

Lines changed: 36 additions & 21 deletions

File tree

hcloud/util.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import (
3030
corev1 "k8s.io/api/core/v1"
3131
)
3232

33+
// robotServerListForceRefreshClient is implemented by Robot clients that can
34+
// bypass their cache timeout and reload the server list immediately.
3335
type robotServerListForceRefreshClient interface {
3436
ServerGetListForceRefresh() ([]models.Server, error)
3537
}
@@ -81,6 +83,7 @@ func getRobotServerByName(c robotclient.Client, node *corev1.Node) (server *mode
8183
}
8284
}
8385

86+
// Only the cached Robot client can bypass its timeout and reload immediately.
8487
forceRefreshClient, ok := c.(robotServerListForceRefreshClient)
8588
if !ok {
8689
return nil, nil

internal/robot/client/cache/client.go

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,22 @@ func NewCachedRobotClient(rootDir string, httpClient *http.Client, baseURL strin
9090

9191
func (c *cacheRobotClient) ServerGet(id int) (*models.Server, error) {
9292
if c.shouldSync() {
93-
if _, err := c.ServerGetListForceRefresh(); err != nil {
93+
list, err := c.robotClient.ServerGetList()
94+
if err != nil {
9495
return nil, err
9596
}
97+
98+
// populate list
99+
c.l = list
100+
101+
// remove all entries from map and populate it freshly
102+
c.m = make(map[int]*models.Server)
103+
for i, server := range list {
104+
c.m[server.ServerNumber] = &list[i]
105+
}
106+
107+
// set time of last update
108+
c.lastUpdate = time.Now()
96109
}
97110

98111
server, found := c.m[id]
@@ -106,34 +119,33 @@ func (c *cacheRobotClient) ServerGet(id int) (*models.Server, error) {
106119

107120
func (c *cacheRobotClient) ServerGetList() ([]models.Server, error) {
108121
if c.shouldSync() {
109-
return c.ServerGetListForceRefresh()
110-
}
111-
112-
return c.l, nil
113-
}
122+
list, err := c.robotClient.ServerGetList()
123+
if err != nil {
124+
return list, err
125+
}
114126

115-
// ServerGetListForceRefresh bypasses the timeout check and reloads the cache from Robot.
116-
func (c *cacheRobotClient) ServerGetListForceRefresh() ([]models.Server, error) {
117-
list, err := c.robotClient.ServerGetList()
118-
if err != nil {
119-
return list, err
120-
}
127+
// populate list
128+
c.l = list
121129

122-
// populate list
123-
c.l = list
130+
// remove all entries from map and populate it freshly
131+
c.m = make(map[int]*models.Server)
132+
for i, server := range list {
133+
c.m[server.ServerNumber] = &list[i]
134+
}
124135

125-
// remove all entries from map and repopulate it from the current list
126-
c.m = make(map[int]*models.Server)
127-
for i, server := range list {
128-
c.m[server.ServerNumber] = &list[i]
136+
// set time of last update
137+
c.lastUpdate = time.Now()
129138
}
130139

131-
// set time of last update
132-
c.lastUpdate = time.Now()
133-
134140
return c.l, nil
135141
}
136142

143+
// ServerGetListForceRefresh invalidates the current cache and reloads the list from Robot.
144+
func (c *cacheRobotClient) ServerGetListForceRefresh() ([]models.Server, error) {
145+
c.m = nil
146+
return c.ServerGetList()
147+
}
148+
137149
func (c *cacheRobotClient) shouldSync() bool {
138150
// map is nil means we have no cached value yet
139151
if c.m == nil {

0 commit comments

Comments
 (0)