From 09e3affca0a4a200d8885da716935ef446502869 Mon Sep 17 00:00:00 2001 From: Andrew M Date: Thu, 20 Aug 2020 14:24:58 -0400 Subject: [PATCH 1/3] adds session remove handler for openziti/edge#285 --- controller/db/db.go | 7 +++++++ controller/network/handler.go | 4 ++++ controller/network/network.go | 9 ++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/controller/db/db.go b/controller/db/db.go index e2603c0dc..fbb613618 100644 --- a/controller/db/db.go +++ b/controller/db/db.go @@ -59,6 +59,13 @@ func (db *Db) Batch(fn func(tx *bbolt.Tx) error) error { func (db *Db) View(fn func(tx *bbolt.Tx) error) error { return db.db.View(fn) } +func (db *Db) Batch(fn func(*bbolt.Tx) error) error { + return db.db.Batch(fn) +} + +func (db *Db) Stats() bbolt.Stats { + return db.db.Stats() +} func (db *Db) RootBucket(tx *bbolt.Tx) (*bbolt.Bucket, error) { ziti := tx.Bucket([]byte("ziti")) diff --git a/controller/network/handler.go b/controller/network/handler.go index 075e07af3..b139d1fa3 100644 --- a/controller/network/handler.go +++ b/controller/network/handler.go @@ -20,3 +20,7 @@ type RouterPresenceHandler interface { RouterConnected(r *Router) RouterDisconnected(r *Router) } + +type SessionRemovedHandler interface { + SessionRemoved(sessionId string, clientId string) +} diff --git a/controller/network/network.go b/controller/network/network.go index 9daa4d58d..3d56e6212 100644 --- a/controller/network/network.go +++ b/controller/network/network.go @@ -56,6 +56,7 @@ type Network struct { eventDispatcher event.Dispatcher traceController trace.Controller routerPresenceHandlers []RouterPresenceHandler + sessionRemoveHandlers []SessionRemovedHandler capabilities []string shutdownChan chan struct{} isShutdown concurrenz.AtomicBoolean @@ -463,7 +464,9 @@ func (network *Network) RemoveSession(sessionId *identity.TokenId, now bool) err } log.Debugf("removed session [s/%s]", ss.Id.Token) - + for _, h := range network.sessionRemoveHandlers { + h.SessionRemoved(ss.Id.Token, ss.ClientId.Token) + } return nil } return InvalidSessionError{sessionId: sessionId.Token} @@ -544,8 +547,8 @@ func (network *Network) AddRouterPresenceHandler(h RouterPresenceHandler) { network.routerPresenceHandlers = append(network.routerPresenceHandlers, h) } -func (network *Network) Debug() string { - return "oh, wow" +func (network *Network) AddSessionRemovedHandler(h SessionRemovedHandler) { + network.sessionRemoveHandlers = append(network.sessionRemoveHandlers, h) } func (network *Network) Run() { From 804ef1b84b920e15ab7adc26549d2ac2be56dbc9 Mon Sep 17 00:00:00 2001 From: Andrew Martinez Date: Mon, 24 Aug 2020 08:18:09 -0400 Subject: [PATCH 2/3] remove duplicate batch def --- controller/db/db.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/controller/db/db.go b/controller/db/db.go index fbb613618..8c626930d 100644 --- a/controller/db/db.go +++ b/controller/db/db.go @@ -59,9 +59,6 @@ func (db *Db) Batch(fn func(tx *bbolt.Tx) error) error { func (db *Db) View(fn func(tx *bbolt.Tx) error) error { return db.db.View(fn) } -func (db *Db) Batch(fn func(*bbolt.Tx) error) error { - return db.db.Batch(fn) -} func (db *Db) Stats() bbolt.Stats { return db.db.Stats() From 53542cb2adc0fe2fc9a7e17d89a892591a4fcab7 Mon Sep 17 00:00:00 2001 From: Andrew Martinez Date: Tue, 25 Aug 2020 12:25:44 -0400 Subject: [PATCH 3/3] use event framework for session lifecycle for edge integration - add clientId (edge session id) to delete events --- controller/handler_mgmt/stream_sessions.go | 3 ++- controller/network/handler.go | 6 +----- controller/network/network.go | 11 ++--------- controller/network/session_lifecycle.go | 8 +++++--- 4 files changed, 10 insertions(+), 18 deletions(-) diff --git a/controller/handler_mgmt/stream_sessions.go b/controller/handler_mgmt/stream_sessions.go index 648d30dc9..f41a5b84e 100644 --- a/controller/handler_mgmt/stream_sessions.go +++ b/controller/handler_mgmt/stream_sessions.go @@ -73,10 +73,11 @@ func (handler *SessionsStreamHandler) SessionCreated(sessionId *identity.TokenId handler.sendEvent(event) } -func (handler *SessionsStreamHandler) SessionDeleted(sessionId *identity.TokenId) { +func (handler *SessionsStreamHandler) SessionDeleted(sessionId *identity.TokenId, clientId *identity.TokenId) { event := &mgmt_pb.StreamSessionsEvent{ EventType: mgmt_pb.StreamSessionEventType_SessionDeleted, SessionId: sessionId.Token, + ClientId: clientId.Token, } handler.sendEvent(event) } diff --git a/controller/network/handler.go b/controller/network/handler.go index b139d1fa3..a608a32f9 100644 --- a/controller/network/handler.go +++ b/controller/network/handler.go @@ -19,8 +19,4 @@ package network type RouterPresenceHandler interface { RouterConnected(r *Router) RouterDisconnected(r *Router) -} - -type SessionRemovedHandler interface { - SessionRemoved(sessionId string, clientId string) -} +} \ No newline at end of file diff --git a/controller/network/network.go b/controller/network/network.go index 3d56e6212..56f400dc9 100644 --- a/controller/network/network.go +++ b/controller/network/network.go @@ -56,7 +56,6 @@ type Network struct { eventDispatcher event.Dispatcher traceController trace.Controller routerPresenceHandlers []RouterPresenceHandler - sessionRemoveHandlers []SessionRemovedHandler capabilities []string shutdownChan chan struct{} isShutdown concurrenz.AtomicBoolean @@ -455,7 +454,7 @@ func (network *Network) RemoveSession(sessionId *identity.TokenId, now bool) err } } network.sessionController.remove(ss) - network.SessionDeleted(sessionId) + network.SessionDeleted(ss.Id, ss.ClientId) if strategy, err := network.strategyRegistry.GetStrategy(ss.Service.TerminatorStrategy); strategy != nil { strategy.NotifyEvent(xt.NewSessionEnded(ss.Terminator)) @@ -464,9 +463,7 @@ func (network *Network) RemoveSession(sessionId *identity.TokenId, now bool) err } log.Debugf("removed session [s/%s]", ss.Id.Token) - for _, h := range network.sessionRemoveHandlers { - h.SessionRemoved(ss.Id.Token, ss.ClientId.Token) - } + return nil } return InvalidSessionError{sessionId: sessionId.Token} @@ -547,10 +544,6 @@ func (network *Network) AddRouterPresenceHandler(h RouterPresenceHandler) { network.routerPresenceHandlers = append(network.routerPresenceHandlers, h) } -func (network *Network) AddSessionRemovedHandler(h SessionRemovedHandler) { - network.sessionRemoveHandlers = append(network.sessionRemoveHandlers, h) -} - func (network *Network) Run() { log := pfxlog.Logger() defer log.Error("exited") diff --git a/controller/network/session_lifecycle.go b/controller/network/session_lifecycle.go index 38a12f245..257ea5979 100644 --- a/controller/network/session_lifecycle.go +++ b/controller/network/session_lifecycle.go @@ -29,7 +29,7 @@ func getSessionEventHandlers() []SessionEventHandler { type SessionEventHandler interface { SessionCreated(sessionId *identity.TokenId, clientId *identity.TokenId, serviceId string, circuit *Circuit) - SessionDeleted(sessionId *identity.TokenId) + SessionDeleted(sessionId *identity.TokenId, clientId *identity.TokenId) CircuitUpdated(sessionId *identity.TokenId, circuit *Circuit) } @@ -43,9 +43,10 @@ func (network *Network) SessionCreated(sessionId *identity.TokenId, clientId *id network.eventDispatcher.Dispatch(event) } -func (network *Network) SessionDeleted(sessionId *identity.TokenId) { +func (network *Network) SessionDeleted(sessionId *identity.TokenId, clientId *identity.TokenId) { event := &sessionDeletedEvent{ sessionId: sessionId, + clientId: clientId, } network.eventDispatcher.Dispatch(event) } @@ -74,12 +75,13 @@ func (event *sessionCreatedEvent) Handle() { type sessionDeletedEvent struct { sessionId *identity.TokenId + clientId *identity.TokenId } func (event *sessionDeletedEvent) Handle() { handlers := getSessionEventHandlers() for _, handler := range handlers { - go handler.SessionDeleted(event.sessionId) + go handler.SessionDeleted(event.sessionId, event.clientId) } }