Skip to content

Commit a7d6a7a

Browse files
authored
Merge pull request #2035 from chrischdi/pr-1-5-cp-1949
[release-1.5] 🐛 Don't call session logout for keepAliveHandler
2 parents 69677ff + e4382d3 commit a7d6a7a

File tree

1 file changed

+11
-23
lines changed

1 file changed

+11
-23
lines changed

pkg/session/session.go

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,14 @@ func GetOrCreate(ctx context.Context, params *Params) (*Session, error) {
132132
logger.V(2).Info("found active cached vSphere client session")
133133
return s, nil
134134
}
135-
}
136135

137-
clearCache(logger, sessionKey)
136+
logger.V(2).Info("logout the session because it is inactive")
137+
if err := s.Client.Logout(ctx); err != nil {
138+
logger.Error(err, "unable to logout session")
139+
} else {
140+
logger.Info("logout session succeed")
141+
}
142+
}
138143

139144
// soap.ParseURL expects a valid URL. In the case of a bare, unbracketed
140145
// IPv6 address (e.g fd00::1) ParseURL will fail. Surround unbracketed IPv6
@@ -206,16 +211,11 @@ func newClient(ctx context.Context, logger logr.Logger, sessionKey string, url *
206211
}
207212

208213
vimClient.RoundTripper = session.KeepAliveHandler(vimClient.RoundTripper, feature.KeepAliveDuration, func(tripper soap.RoundTripper) error {
209-
// we tried implementing
210-
// c.Login here but the client once logged out
211-
// keeps errong in invalid username or password
212-
// we tried with cached username and password in session still the error persisted
213-
// hence we just clear the cache and expect the client to
214-
// be recreated in next GetOrCreate call
215214
_, err := methods.GetCurrentTime(ctx, tripper)
216215
if err != nil {
217216
logger.Error(err, "failed to keep alive govmomi client")
218-
clearCache(logger, sessionKey)
217+
logger.Info("clearing the session", "key", sessionKey)
218+
sessionCache.Delete(sessionKey)
219219
}
220220
return err
221221
})
@@ -227,18 +227,6 @@ func newClient(ctx context.Context, logger logr.Logger, sessionKey string, url *
227227
return c, nil
228228
}
229229

230-
func clearCache(logger logr.Logger, sessionKey string) {
231-
if cachedSession, ok := sessionCache.Load(sessionKey); ok {
232-
s := cachedSession.(*Session)
233-
234-
logger.Info("performing session log out and clearing session", "key", sessionKey)
235-
if err := s.Logout(context.Background()); err != nil {
236-
logger.Error(err, "unable to logout session")
237-
}
238-
}
239-
sessionCache.Delete(sessionKey)
240-
}
241-
242230
// newManager creates a Manager that encompasses the REST Client for the VSphere tagging API.
243231
func newManager(ctx context.Context, logger logr.Logger, sessionKey string, client *vim25.Client, user *url.Userinfo, feature Feature) (*tags.Manager, error) {
244232
rc := rest.NewClient(client)
@@ -251,8 +239,8 @@ func newManager(ctx context.Context, logger logr.Logger, sessionKey string, clie
251239
return nil
252240
}
253241

254-
logger.Info("rest client session expired, clearing cache")
255-
clearCache(logger, sessionKey)
242+
logger.Info("rest client session expired, clearing session", "key", sessionKey)
243+
sessionCache.Delete(sessionKey)
256244
return errors.New("rest client session expired")
257245
})
258246
if err := rc.Login(ctx, user); err != nil {

0 commit comments

Comments
 (0)