Skip to content

Commit 74e2cbd

Browse files
authored
Merge pull request #1559 from dwertent/fix-duplicate-metrics-call
Refactor `maybePersistBlockchainEvent` to Return a Boolean Indicating Event Creation Status
2 parents a983877 + a6ae64c commit 74e2cbd

File tree

6 files changed

+26
-14
lines changed

6 files changed

+26
-14
lines changed

internal/events/blockchain_event.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,21 @@ func (em *eventManager) getChainListenerByProtocolIDCached(ctx context.Context,
7171
return l, nil
7272
}
7373

74-
func (em *eventManager) maybePersistBlockchainEvent(ctx context.Context, chainEvent *core.BlockchainEvent, listener *core.ContractListener) error {
74+
// handleBlockchainBatchPinEvent handles a blockchain event, returning true if the event was created, false if it was a duplicate along with an error if any failures occur
75+
func (em *eventManager) maybePersistBlockchainEvent(ctx context.Context, chainEvent *core.BlockchainEvent, listener *core.ContractListener) (bool, error) {
7576
existing, err := em.txHelper.InsertOrGetBlockchainEvent(ctx, chainEvent)
7677
if err != nil {
77-
return err
78+
return false, err
7879
}
7980
if existing != nil {
8081
log.L(ctx).Debugf("Ignoring duplicate blockchain event %s", chainEvent.ProtocolID)
8182
// Return the ID of the existing event
8283
chainEvent.ID = existing.ID
83-
return nil
84+
return false, nil
8485
}
8586
topic := em.getTopicForChainListener(listener)
8687
ffEvent := core.NewEvent(core.EventTypeBlockchainEventReceived, chainEvent.Namespace, chainEvent.ID, chainEvent.TX.ID, topic)
87-
return em.database.InsertEvent(ctx, ffEvent)
88+
return true, em.database.InsertEvent(ctx, ffEvent)
8889
}
8990

9091
func (em *eventManager) getChainListenerCached(cacheKey string, getter func() (*core.ContractListener, error)) (*core.ContractListener, error) {

internal/events/blockchain_event_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ func TestContractEventWrongNS(t *testing.T) {
151151

152152
}
153153

154+
// TODO: Add test case for event not existing
154155
func TestPersistBlockchainEventDuplicate(t *testing.T) {
155156
em := newTestEventManager(t)
156157
defer em.cleanup(t)
@@ -173,9 +174,10 @@ func TestPersistBlockchainEventDuplicate(t *testing.T) {
173174
em.mth.On("InsertOrGetBlockchainEvent", mock.Anything, ev).
174175
Return(&core.BlockchainEvent{ID: existingID}, nil)
175176

176-
err := em.maybePersistBlockchainEvent(em.ctx, ev, nil)
177+
created, err := em.maybePersistBlockchainEvent(em.ctx, ev, nil)
177178
assert.NoError(t, err)
178179
assert.Equal(t, existingID, ev.ID)
180+
assert.False(t, created)
179181

180182
}
181183

internal/events/event_manager_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ func TestEventFilterOnSubscriptionMatchesEventType(t *testing.T) {
681681
filteredEvents, _ = em.FilterHistoricalEventsOnSubscription(context.Background(), events, subscription)
682682
assert.NotNil(t, filteredEvents)
683683
assert.Equal(t, 1, len(filteredEvents))
684-
684+
685685
listenerUuid := fftypes.NewUUID()
686686

687687
events[0].Event.Topic = ""

internal/events/token_pool_created.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,13 @@ func (em *eventManager) confirmPool(ctx context.Context, pool *core.TokenPool, e
6262
Type: pool.TX.Type,
6363
BlockchainID: blockchainID,
6464
})
65-
if err := em.maybePersistBlockchainEvent(ctx, chainEvent, nil); err != nil {
65+
created, err := em.maybePersistBlockchainEvent(ctx, chainEvent, nil)
66+
if err != nil {
6667
return err
6768
}
68-
em.emitBlockchainEventMetric(ev)
69+
if created {
70+
em.emitBlockchainEventMetric(ev)
71+
}
6972
}
7073
if _, err := em.txHelper.PersistTransaction(ctx, pool.TX.ID, pool.TX.Type, blockchainID); err != nil {
7174
return err

internal/events/tokens_approved.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright © 2023 Kaleido, Inc.
1+
// Copyright © 2024 Kaleido, Inc.
22
//
33
// SPDX-License-Identifier: Apache-2.0
44
//
@@ -97,10 +97,13 @@ func (em *eventManager) persistTokenApproval(ctx context.Context, approval *toke
9797
Type: approval.TX.Type,
9898
BlockchainID: approval.Event.BlockchainTXID,
9999
})
100-
if err := em.maybePersistBlockchainEvent(ctx, chainEvent, nil); err != nil {
100+
created, err := em.maybePersistBlockchainEvent(ctx, chainEvent, nil)
101+
if err != nil {
101102
return false, err
102103
}
103-
em.emitBlockchainEventMetric(approval.Event)
104+
if created {
105+
em.emitBlockchainEventMetric(approval.Event)
106+
}
104107
approval.BlockchainEvent = chainEvent.ID
105108

106109
fb := database.TokenApprovalQueryFactory.NewFilter(ctx)

internal/events/tokens_transferred.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright © 2023 Kaleido, Inc.
1+
// Copyright © 2024 Kaleido, Inc.
22
//
33
// SPDX-License-Identifier: Apache-2.0
44
//
@@ -89,10 +89,13 @@ func (em *eventManager) persistTokenTransfer(ctx context.Context, transfer *toke
8989
Type: transfer.TX.Type,
9090
BlockchainID: transfer.Event.BlockchainTXID,
9191
})
92-
if err := em.maybePersistBlockchainEvent(ctx, chainEvent, nil); err != nil {
92+
created, err := em.maybePersistBlockchainEvent(ctx, chainEvent, nil)
93+
if err != nil {
9394
return false, err
9495
}
95-
em.emitBlockchainEventMetric(transfer.Event)
96+
if created {
97+
em.emitBlockchainEventMetric(transfer.Event)
98+
}
9699
transfer.BlockchainEvent = chainEvent.ID
97100

98101
// This is a no-op if we've already persisted this token transfer

0 commit comments

Comments
 (0)