From 53c9c228dcc21e4d03bc83c510255085d609dff5 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 3 Aug 2021 12:04:24 -0400 Subject: [PATCH 1/4] Fix error message --- controller/handler_edge_ctrl/common_tunnel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/handler_edge_ctrl/common_tunnel.go b/controller/handler_edge_ctrl/common_tunnel.go index 48a9497ac..252996ca1 100644 --- a/controller/handler_edge_ctrl/common_tunnel.go +++ b/controller/handler_edge_ctrl/common_tunnel.go @@ -85,7 +85,7 @@ func (self *baseTunnelRequestContext) ensureApiSession(configTypes []string) boo self.apiSession = apiSession if _, err := self.handler.getAppEnv().GetHandlers().ApiSession.MarkActivityByTokens(self.apiSession.Token); err != nil { - logger.WithError(err).Error("unexepcted error while marking api session activity") + logger.WithError(err).Error("unexpected error while marking api session activity") } return false } From 4205482e586c2fddd4ae24aeb5f7634151a1daca Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 3 Aug 2021 13:16:34 -0400 Subject: [PATCH 2/4] If we create a new session but don't have a chance to return it, delete it before sending error --- controller/handler_edge_ctrl/common.go | 15 +++++++++++++++ controller/handler_edge_ctrl/common_tunnel.go | 2 ++ 2 files changed, 17 insertions(+) diff --git a/controller/handler_edge_ctrl/common.go b/controller/handler_edge_ctrl/common.go index 1ae53793b..36f081588 100644 --- a/controller/handler_edge_ctrl/common.go +++ b/controller/handler_edge_ctrl/common.go @@ -57,6 +57,7 @@ func (self *baseRequestHandler) getChannel() channel2.Channel { } func (self *baseRequestHandler) returnError(ctx requestContext, err controllerError) { + ctx.CleanupOnError() responseMsg := channel2.NewMessage(int32(edge_ctrl_pb.ContentType_ErrorType), []byte(err.Error())) responseMsg.PutUint32Header(edge.ErrorCodeHeader, err.ErrorCode()) responseMsg.ReplyTo(ctx.GetMessage()) @@ -96,6 +97,7 @@ func (self *baseRequestHandler) logResult(ctx requestContext, err error) { type requestContext interface { GetHandler() requestHandler GetMessage() *channel2.Message + CleanupOnError() } type sessionRequestContext interface { @@ -110,6 +112,19 @@ type baseSessionRequestContext struct { sourceRouter *network.Router session *model.Session service *model.Service + newSession bool +} + +func (self *baseSessionRequestContext) CleanupOnError() { + if self.newSession && self.session != nil { + logger := logrus. + WithField("operation", self.handler.Label()). + WithField("router", self.sourceRouter.Name) + + if err := self.handler.getAppEnv().Handlers.Session.Delete(self.session.Id); err != nil { + logger.WithError(err).Error("unable to delete session created before error encountered") + } + } } func (self *baseSessionRequestContext) GetMessage() *channel2.Message { diff --git a/controller/handler_edge_ctrl/common_tunnel.go b/controller/handler_edge_ctrl/common_tunnel.go index 252996ca1..8d76861f9 100644 --- a/controller/handler_edge_ctrl/common_tunnel.go +++ b/controller/handler_edge_ctrl/common_tunnel.go @@ -180,7 +180,9 @@ func (self *baseTunnelRequestContext) ensureSessionForService(sessionId, session self.session, err = self.handler.getAppEnv().Handlers.Session.Read(id) if err != nil { err = internalError(err) + return } + self.newSession = true } } From 8a44f37344c1c47167a50f9f83a27f2a50100a59 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 3 Aug 2021 14:32:47 -0400 Subject: [PATCH 3/4] Simplify poll logic --- controller/handler_edge_ctrl/list_tunnel_services.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/controller/handler_edge_ctrl/list_tunnel_services.go b/controller/handler_edge_ctrl/list_tunnel_services.go index 3d01d10f5..81ae01ee9 100644 --- a/controller/handler_edge_ctrl/list_tunnel_services.go +++ b/controller/handler_edge_ctrl/list_tunnel_services.go @@ -79,11 +79,11 @@ func (self *listTunnelServicesHandler) listServices(ctx *listTunnelServicesReque var lastUpdate time.Time if val, found := self.appEnv.IdentityRefreshMap.Get(ctx.identity.Id); found { lastUpdate = val.(time.Time) - } else if lastUpdate.Before(self.appEnv.StartupTime) { + } else { lastUpdate = self.appEnv.StartupTime } - if !ctx.lastUpdate.IsZero() && !ctx.lastUpdate.Before(lastUpdate) { + if lastUpdate.Before(ctx.lastUpdate) { logger.Debug("service list requested, but no update available") return } From 5baee1a3f25324fc87a9eb0cac85d0b2bbdd9e99 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Tue, 3 Aug 2021 16:02:36 -0400 Subject: [PATCH 4/4] Remove unused api session fields --- router/xgress_edge_tunnel/fabric.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/router/xgress_edge_tunnel/fabric.go b/router/xgress_edge_tunnel/fabric.go index 630032940..129d4b596 100644 --- a/router/xgress_edge_tunnel/fabric.go +++ b/router/xgress_edge_tunnel/fabric.go @@ -53,9 +53,7 @@ type fabricProvider struct { tunneler *tunneler apiSessionLock sync.Mutex - apiSessionId string apiSessionToken string - refreshInterval time.Duration currentIdentity *edge.CurrentIdentity dialSessions cmap.ConcurrentMap @@ -84,9 +82,7 @@ func (self *fabricProvider) updateApiSession(resp *edge_ctrl_pb.CreateApiSession self.tunneler.stateManager.RemoveConnectedApiSession(self.apiSessionToken) - self.apiSessionId = resp.SessionId self.apiSessionToken = resp.Token - self.refreshInterval = time.Duration(resp.RefreshIntervalSeconds) * time.Second self.currentIdentity = &edge.CurrentIdentity{ Id: resp.IdentityId, Name: resp.IdentityName,