rpc: add subscription id to events (#6386)

Addresses  #3931
This commit is contained in:
Sam Kleinman
2021-06-15 17:33:47 +00:00
committed by GitHub
parent 8d0c38257e
commit 886519e3ca
12 changed files with 221 additions and 70 deletions
+10 -6
View File
@@ -86,13 +86,17 @@ func (env *Environment) Subscribe(ctx *rpctypes.Context, query string) (*ctypes.
// Unsubscribe from events via WebSocket.
// More: https://docs.tendermint.com/master/rpc/#/Websocket/unsubscribe
func (env *Environment) Unsubscribe(ctx *rpctypes.Context, query string) (*ctypes.ResultUnsubscribe, error) {
addr := ctx.RemoteAddr()
env.Logger.Info("Unsubscribe from query", "remote", addr, "query", query)
q, err := tmquery.New(query)
args := tmpubsub.UnsubscribeArgs{Subscriber: ctx.RemoteAddr()}
env.Logger.Info("Unsubscribe from query", "remote", args.Subscriber, "subscription", query)
var err error
args.Query, err = tmquery.New(query)
if err != nil {
return nil, fmt.Errorf("failed to parse query: %w", err)
args.ID = query
}
err = env.EventBus.Unsubscribe(context.Background(), addr, q)
err = env.EventBus.Unsubscribe(ctx.Context(), args)
if err != nil {
return nil, err
}
@@ -104,7 +108,7 @@ func (env *Environment) Unsubscribe(ctx *rpctypes.Context, query string) (*ctype
func (env *Environment) UnsubscribeAll(ctx *rpctypes.Context) (*ctypes.ResultUnsubscribe, error) {
addr := ctx.RemoteAddr()
env.Logger.Info("Unsubscribe from all", "remote", addr)
err := env.EventBus.UnsubscribeAll(context.Background(), addr)
err := env.EventBus.UnsubscribeAll(ctx.Context(), addr)
if err != nil {
return nil, err
}
+3 -1
View File
@@ -8,6 +8,7 @@ import (
abci "github.com/tendermint/tendermint/abci/types"
mempl "github.com/tendermint/tendermint/internal/mempool"
tmpubsub "github.com/tendermint/tendermint/libs/pubsub"
ctypes "github.com/tendermint/tendermint/rpc/core/types"
rpctypes "github.com/tendermint/tendermint/rpc/jsonrpc/types"
"github.com/tendermint/tendermint/types"
@@ -77,7 +78,8 @@ func (env *Environment) BroadcastTxCommit(ctx *rpctypes.Context, tx types.Tx) (*
return nil, err
}
defer func() {
if err := env.EventBus.Unsubscribe(context.Background(), subscriber, q); err != nil {
args := tmpubsub.UnsubscribeArgs{Subscriber: subscriber, Query: q}
if err := env.EventBus.Unsubscribe(context.Background(), args); err != nil {
env.Logger.Error("Error unsubscribing from eventBus", "err", err)
}
}()
+4 -3
View File
@@ -258,7 +258,8 @@ type (
// Event data from a subscription
type ResultEvent struct {
Query string `json:"query"`
Data types.TMEventData `json:"data"`
Events map[string][]string `json:"events"`
SubscriptionID string `json:"subscription_id"`
Query string `json:"query"`
Data types.TMEventData `json:"data"`
Events map[string][]string `json:"events"`
}