From 3755b35c7822a94152e9dbb723bad166647a18a8 Mon Sep 17 00:00:00 2001 From: Debendra Oli Date: Tue, 11 Jun 2024 09:29:58 +0545 Subject: [PATCH] fix: use provider route lock instead of global lock --- relayer/chains/evm/provider.go | 5 ++--- relayer/chains/evm/route.go | 6 +++--- relayer/chains/wasm/config.go | 12 +++++++----- relayer/chains/wasm/provider.go | 7 +++---- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/relayer/chains/evm/provider.go b/relayer/chains/evm/provider.go index 020f0f1a..e1130284 100644 --- a/relayer/chains/evm/provider.go +++ b/relayer/chains/evm/provider.go @@ -39,9 +39,6 @@ var ( // Xcall contract MethodExecuteCall = "executeCall" - - // Lock for opts - globalRouteLock = &sync.Mutex{} ) type Config struct { @@ -64,6 +61,7 @@ type Provider struct { contracts map[string]providerTypes.EventMap NonceTracker types.NonceTrackerI LastSavedHeightFunc func() uint64 + routerMutex *sync.Mutex } func (p *Config) NewProvider(ctx context.Context, log *zap.Logger, homepath string, debug bool, chainName string) (provider.ChainProvider, error) { @@ -97,6 +95,7 @@ func (p *Config) NewProvider(ctx context.Context, log *zap.Logger, homepath stri blockReq: p.GetMonitorEventFilters(), contracts: p.eventMap(), NonceTracker: types.NewNonceTracker(client.PendingNonceAt), + routerMutex: new(sync.Mutex), }, nil } diff --git a/relayer/chains/evm/route.go b/relayer/chains/evm/route.go index a6897691..a84ead14 100644 --- a/relayer/chains/evm/route.go +++ b/relayer/chains/evm/route.go @@ -24,20 +24,20 @@ const ( // this will be executed in go route func (p *Provider) Route(ctx context.Context, message *providerTypes.Message, callback providerTypes.TxResponseFunc) error { // lock here to prevent transcation replacement - globalRouteLock.Lock() + p.routerMutex.Lock() p.log.Info("starting to route message", zap.Any("message", message)) opts, err := p.GetTransationOpts(ctx) if err != nil { - globalRouteLock.Unlock() + p.routerMutex.Unlock() return fmt.Errorf("routing failed: %w", err) } messageKey := message.MessageKey() tx, err := p.SendTransaction(ctx, opts, message) - globalRouteLock.Unlock() + p.routerMutex.Unlock() if err != nil { return fmt.Errorf("routing failed: %w", err) } diff --git a/relayer/chains/wasm/config.go b/relayer/chains/wasm/config.go index f0baa297..78b2af2f 100644 --- a/relayer/chains/wasm/config.go +++ b/relayer/chains/wasm/config.go @@ -7,6 +7,7 @@ import ( "os" "path/filepath" "strings" + "sync" "time" "github.com/cometbft/cometbft/rpc/client/http" @@ -66,11 +67,12 @@ func (pc *Config) NewProvider(ctx context.Context, log *zap.Logger, homePath str ws := newClient(clientContext) return &Provider{ - logger: log.With(zap.Stringp("nid", &pc.NID), zap.Stringp("name", &pc.ChainName)), - cfg: pc, - client: ws, - contracts: contracts, - eventList: pc.GetMonitorEventFilters(contracts), + logger: log.With(zap.Stringp("nid", &pc.NID), zap.Stringp("name", &pc.ChainName)), + cfg: pc, + client: ws, + contracts: contracts, + eventList: pc.GetMonitorEventFilters(contracts), + routerMutex: new(sync.Mutex), }, nil } diff --git a/relayer/chains/wasm/provider.go b/relayer/chains/wasm/provider.go index d4bb9ce0..226a3774 100644 --- a/relayer/chains/wasm/provider.go +++ b/relayer/chains/wasm/provider.go @@ -24,8 +24,6 @@ import ( var _ provider.ChainProvider = (*Provider)(nil) -var globalRouteLock = &sync.Mutex{} - type Provider struct { logger *zap.Logger cfg *Config @@ -35,6 +33,7 @@ type Provider struct { contracts map[string]relayTypes.EventMap eventList []sdkTypes.Event LastSavedHeightFunc func() uint64 + routerMutex *sync.Mutex } func (p *Provider) QueryLatestHeight(ctx context.Context) (uint64, error) { @@ -206,8 +205,8 @@ func (p *Provider) call(ctx context.Context, message *relayTypes.Message) (*sdkT } func (p *Provider) sendMessage(ctx context.Context, msgs ...sdkTypes.Msg) (*sdkTypes.TxResponse, error) { - globalRouteLock.Lock() - defer globalRouteLock.Unlock() + p.routerMutex.Lock() + defer p.routerMutex.Unlock() return p.prepareAndPushTxToMemPool(ctx, p.wallet.GetAccountNumber(), p.wallet.GetSequence(), msgs...) }