From 86e904555149831d09b04748c2e235701893d070 Mon Sep 17 00:00:00 2001 From: Malte Bauch <malte.bauch@h-da.de> Date: Thu, 6 Jun 2024 13:58:39 +0000 Subject: [PATCH] Add method which allows to remove a receiver See merge request danet/quant!142 --- goKMS/kms/akms/server/receiver.go | 18 +++++++++++++++++- goKMS/kms/akms/server/server.go | 3 +++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/goKMS/kms/akms/server/receiver.go b/goKMS/kms/akms/server/receiver.go index c5680ebb..893b627b 100644 --- a/goKMS/kms/akms/server/receiver.go +++ b/goKMS/kms/akms/server/receiver.go @@ -5,6 +5,7 @@ import ( "sync" "github.com/google/uuid" + "github.com/sirupsen/logrus" ) type Receiver struct { @@ -22,12 +23,27 @@ func (r *Receiver) RequestReceiverChannel(pathId uuid.UUID) (<-chan struct{}, er return newSubChan, nil } +func (r *Receiver) RemoveReceiver(pathId uuid.UUID) error { + r.mu.Lock() + defer r.mu.Unlock() + + if channel, ok := r.receivers[pathId]; ok { + close(channel) + delete(r.receivers, pathId) + } else { + return fmt.Errorf("There are no active subscribers for pathId: %s", pathId) + } + + logrus.Debugf("Current active receivers after removing receiver for pathId: %s; Receivers: %v", pathId, r.receivers) + return nil +} + func (r *Receiver) InformReceiver(pathId uuid.UUID) error { r.mu.RLock() defer r.mu.RUnlock() if receiver, ok := r.receivers[pathId]; ok { - receiver <- struct{}{} + go func() { receiver <- struct{}{} }() } else { return fmt.Errorf("There are no active subscribers for pathId: %s", pathId) } diff --git a/goKMS/kms/akms/server/server.go b/goKMS/kms/akms/server/server.go index 87eea666..b3cb5dfa 100644 --- a/goKMS/kms/akms/server/server.go +++ b/goKMS/kms/akms/server/server.go @@ -87,6 +87,9 @@ func ksaReqHandler(eventBus *event.EventBus, receiver *Receiver, generateAndSend select { case <-receiverChan: case <-time.After(20 * time.Second): + if err := receiver.RemoveReceiver(pathId); err != nil { + logrus.Errorf("Failed removing receiver for pathId: %s ; err: %v", pathId, err) + } http.Error(w, fmt.Sprintf("Platform Key exchange failed for RequestID: %s", kmsKeyRequest.RequestID), http.StatusInternalServerError) logrus.Errorf("Platform Key exchange failed for RequestID: %s", kmsKeyRequest.RequestID) return -- GitLab