X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/e4a35f3914481226a2a4ff57618bc486839aa2ea..a68b0ba89ab00dddbc1e59872ed81c08a6113295:/services/ws/session_v0.go diff --git a/services/ws/session_v0.go b/services/ws/session_v0.go index 4fbfc489cf..b57abb5cac 100644 --- a/services/ws/session_v0.go +++ b/services/ws/session_v0.go @@ -8,6 +8,7 @@ import ( "database/sql" "encoding/json" "errors" + "reflect" "sync" "sync/atomic" "time" @@ -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") }