@@ -90,9 +90,22 @@ func NewCachedRobotClient(rootDir string, httpClient *http.Client, baseURL strin
9090
9191func (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
107120func (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+
137149func (c * cacheRobotClient ) shouldSync () bool {
138150 // map is nil means we have no cached value yet
139151 if c .m == nil {
0 commit comments