X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0413abf93d7ee0cfd10222bf04aa88c4e7460303..4620478d694697eff07e501187d784c6c98ccfa9:/services/ws/session_v0.go diff --git a/services/ws/session_v0.go b/services/ws/session_v0.go index 4fbfc489cf..7bd1498158 100644 --- a/services/ws/session_v0.go +++ b/services/ws/session_v0.go @@ -8,12 +8,13 @@ import ( "database/sql" "encoding/json" "errors" + "reflect" "sync" "sync/atomic" "time" "git.curoverse.com/arvados.git/sdk/go/arvados" - "github.com/Sirupsen/logrus" + "github.com/sirupsen/logrus" ) var ( @@ -86,6 +87,24 @@ func (sess *v0session) Receive(buf []byte) error { sess.mtx.Unlock() sub.sendOldEvents(sess) return nil + } else if sub.Method == "unsubscribe" { + sess.mtx.Lock() + found := false + for i, s := range sess.subscriptions { + if !reflect.DeepEqual(s.Filters, sub.Filters) { + continue + } + copy(sess.subscriptions[i:], sess.subscriptions[i+1:]) + sess.subscriptions = sess.subscriptions[:len(sess.subscriptions)-1] + found = true + break + } + sess.mtx.Unlock() + sess.log.WithField("sub", sub).WithField("found", found).Debug("unsubscribe") + if found { + sess.sendq <- v0subscribeOK + return nil + } } else { sess.log.WithField("Method", sub.Method).Info("unknown method") }