-
Notifications
You must be signed in to change notification settings - Fork 121
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[CT-1326] send price updates after block is finalized #2611
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -197,7 +197,7 @@ func (sm *FullNodeStreamingManagerImpl) Subscribe( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
err error, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Perform some basic validation on the request. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if len(clobPairIds) == 0 && len(subaccountIds) == 0 { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if len(clobPairIds) == 0 && len(subaccountIds) == 0 && len(marketIds) == 0 { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return types.ErrInvalidStreamingRequest | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -493,6 +493,33 @@ func (sm *FullNodeStreamingManagerImpl) SendSubaccountUpdate( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// SendPriceUpdates sends price updates to the subscribers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (sm *FullNodeStreamingManagerImpl) SendPriceUpdate( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ctx sdk.Context, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
priceUpdate pricestypes.StreamPriceUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if !lib.IsDeliverTxMode(ctx) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// If not `DeliverTx`, return since there is no optimistic price updates. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
metrics.IncrCounter( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
metrics.GrpcSendSubaccountUpdateCount, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Update metric name |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Incorrect metrics counter used in In the Apply this diff to fix the metrics counter: metrics.IncrCounter(
- metrics.GrpcSendSubaccountUpdateCount,
+ metrics.GrpcSendPriceUpdateCount,
1,
) 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// If `DeliverTx`, updates should be staged to be streamed after consensus finalizes on a block. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
stagedEvent := clobtypes.StagedFinalizeBlockEvent{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Event: &clobtypes.StagedFinalizeBlockEvent_PriceUpdate{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PriceUpdate: &priceUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.finalizeBlockStager.StageFinalizeBlockEvent( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ctx, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
&stagedEvent, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Retrieve all events staged during `FinalizeBlock`. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (sm *FullNodeStreamingManagerImpl) GetStagedFinalizeBlockEvents( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ctx sdk.Context, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -545,6 +572,14 @@ func (sm *FullNodeStreamingManagerImpl) TracksSubaccountId(subaccountId satypes. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return exists | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// TracksMarketId checks if a market id is being tracked by the streaming manager. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (sm *FullNodeStreamingManagerImpl) TracksMarketId(marketId uint32) bool { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
defer sm.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_, exists := sm.marketIdToSubscriptionIdMapping[marketId] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return exists | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func getStreamUpdatesFromOffchainUpdates( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
v1updates []ocutypes.OffChainUpdateV1, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
blockHeight uint32, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -773,6 +808,31 @@ func getStreamUpdatesForSubaccountUpdates( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return streamUpdates, subaccountIds | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func getStreamUpdatesForPriceUpdates( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
priceUpdates []pricestypes.StreamPriceUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
blockHeight uint32, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
execMode sdk.ExecMode, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
streamUpdates []clobtypes.StreamUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
marketIds []uint32, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Group subaccount updates by subaccount id. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
streamUpdates = make([]clobtypes.StreamUpdate, 0) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
marketIds = make([]uint32, 0) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for _, priceUpdate := range priceUpdates { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
streamUpdate := clobtypes.StreamUpdate{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
UpdateMessage: &clobtypes.StreamUpdate_PriceUpdate{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PriceUpdate: &priceUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BlockHeight: blockHeight, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ExecMode: uint32(execMode), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
streamUpdates = append(streamUpdates, streamUpdate) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
marketIds = append(marketIds, priceUpdate.MarketId) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return streamUpdates, marketIds | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// AddOrderUpdatesToCache adds a series of updates to the full node streaming cache. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Clob pair ids are the clob pair id each update is relevant to. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (sm *FullNodeStreamingManagerImpl) AddOrderUpdatesToCache( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -976,6 +1036,23 @@ func (sm *FullNodeStreamingManagerImpl) cacheStreamUpdatesBySubaccountWithLock( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// cacheStreamUpdatesByMarketIdWithLock adds stream updates to cache, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// and store corresponding market ids. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// This method requires the lock and assumes that the lock has already been | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// acquired by the caller. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (sm *FullNodeStreamingManagerImpl) cacheStreamUpdatesByMarketIdWithLock( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
streamUpdates []clobtypes.StreamUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
marketIds []uint32, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.streamUpdateCache = append(sm.streamUpdateCache, streamUpdates...) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for _, marketId := range marketIds { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.streamUpdateSubscriptionCache = append( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.streamUpdateSubscriptionCache, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.marketIdToSubscriptionIdMapping[marketId], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Potential misalignment between stream updates and subscription IDs In To ensure correct mapping, each update should correspond to its related market ID: func (sm *FullNodeStreamingManagerImpl) cacheStreamUpdatesByMarketIdWithLock(
streamUpdates []clobtypes.StreamUpdate,
marketIds []uint32,
) {
+ if len(streamUpdates) != len(marketIds) {
+ sm.logger.Error("Mismatch between stream updates and market IDs lengths")
+ return
+ }
for i, update := range streamUpdates {
sm.streamUpdateCache = append(sm.streamUpdateCache, update)
marketId := marketIds[i]
sm.streamUpdateSubscriptionCache = append(
sm.streamUpdateSubscriptionCache,
sm.marketIdToSubscriptionIdMapping[marketId],
)
}
} This ensures that each update is matched with the correct market ID and its associated subscriptions. 📝 Committable suggestion
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This seems helpful as a sanity check? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @teddyding, yes, adding this check is helpful as a sanity check to ensure that the lengths of func (sm *FullNodeStreamingManagerImpl) cacheStreamUpdatesByMarketIdWithLock(
streamUpdates []clobtypes.StreamUpdate,
marketIds []uint32,
) {
if len(streamUpdates) != len(marketIds) {
sm.logger.Error("Mismatch between stream updates and market IDs lengths")
return
}
for i, update := range streamUpdates {
sm.streamUpdateCache = append(sm.streamUpdateCache, update)
marketId := marketIds[i]
sm.streamUpdateSubscriptionCache = append(
sm.streamUpdateSubscriptionCache,
sm.marketIdToSubscriptionIdMapping[marketId],
)
}
} This ensures that each update is correctly associated with its corresponding market ID and subscriptions. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Grpc Streaming logic after consensus agrees on a block. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// - Stream all events staged during `FinalizeBlock`. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// - Stream orderbook updates to sync fills in local ops queue. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -989,7 +1066,8 @@ func (sm *FullNodeStreamingManagerImpl) StreamBatchUpdatesAfterFinalizeBlock( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedFills, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedSubaccountUpdates, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedOrderbookUpdates := sm.getStagedEventsFromFinalizeBlock(ctx) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedOrderbookUpdates, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedPriceUpdates := sm.getStagedEventsFromFinalizeBlock(ctx) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.Lock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
defer sm.Unlock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -1032,6 +1110,14 @@ func (sm *FullNodeStreamingManagerImpl) StreamBatchUpdatesAfterFinalizeBlock( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.cacheStreamUpdatesBySubaccountWithLock(subaccountStreamUpdates, subaccountIds) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Finally, cache updates for finalized subaccount updates | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
priceStreamUpdates, marketIds := getStreamUpdatesForPriceUpdates( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedPriceUpdates, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
lib.MustConvertIntegerToUint32(ctx.BlockHeight()), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ctx.ExecMode(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.cacheStreamUpdatesByMarketIdWithLock(priceStreamUpdates, marketIds) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Emit all stream updates in a single batch. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Note we still have the lock, which is released right before function returns. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sm.FlushStreamUpdatesWithLock() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -1045,6 +1131,7 @@ func (sm *FullNodeStreamingManagerImpl) getStagedEventsFromFinalizeBlock( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedFills []clobtypes.StreamOrderbookFill, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedSubaccountUpdates []satypes.StreamSubaccountUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedOrderbookUpdates []clobtypes.StreamOrderbookUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedPriceUpdates []pricestypes.StreamPriceUpdate, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Get onchain stream events stored in transient store. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
stagedEvents := sm.GetStagedFinalizeBlockEvents(ctx) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -1062,6 +1149,8 @@ func (sm *FullNodeStreamingManagerImpl) getStagedEventsFromFinalizeBlock( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedSubaccountUpdates = append(finalizedSubaccountUpdates, *event.SubaccountUpdate) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case *clobtypes.StagedFinalizeBlockEvent_OrderbookUpdate: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedOrderbookUpdates = append(finalizedOrderbookUpdates, *event.OrderbookUpdate) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case *clobtypes.StagedFinalizeBlockEvent_PriceUpdate: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizedPriceUpdates = append(finalizedPriceUpdates, *event.PriceUpdate) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
default: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
panic(fmt.Sprintf("Unhandled staged event type: %v\n", stagedEvent.Event)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -1076,7 +1165,7 @@ func (sm *FullNodeStreamingManagerImpl) getStagedEventsFromFinalizeBlock( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
float32(len(finalizedFills)), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return finalizedFills, finalizedSubaccountUpdates, finalizedOrderbookUpdates | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return finalizedFills, finalizedSubaccountUpdates, finalizedOrderbookUpdates, finalizedPriceUpdates | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (sm *FullNodeStreamingManagerImpl) InitializeNewStreams( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -96,6 +96,20 @@ func (k Keeper) UpdateMarketPrices( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pricefeedmetrics.GetLabelForMarketId(marketPrice.Id), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// If GRPC streaming is on, emit a price update to stream. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if k.GetFullNodeStreamingManager().Enabled() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if k.GetFullNodeStreamingManager().TracksMarketId(marketPrice.Id) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
k.GetFullNodeStreamingManager().SendPriceUpdate( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ctx, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
types.StreamPriceUpdate{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MarketId: marketPrice.Id, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Price: marketPrice, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Snapshot: false, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+100
to
+112
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling for SendPriceUpdate The Consider applying this change: - k.GetFullNodeStreamingManager().SendPriceUpdate(
- ctx,
- types.StreamPriceUpdate{
- MarketId: marketPrice.Id,
- Price: marketPrice,
- Snapshot: false,
- },
- )
+ if err := k.GetFullNodeStreamingManager().SendPriceUpdate(
+ ctx,
+ types.StreamPriceUpdate{
+ MarketId: marketPrice.Id,
+ Price: marketPrice,
+ Snapshot: false,
+ },
+ ); err != nil {
+ k.Logger(ctx).Error(
+ "failed to send price update stream",
+ "market_id", marketPrice.Id,
+ "error", err,
+ )
+ } 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Generate indexer events. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
The metric is not being incremented when sending price updates
The
GrpcSendPriceUpdateCount
metric is defined but not being used in the codebase. TheSendPriceUpdate
method inFullNodeStreamingManagerImpl
should increment this metric similar to howGrpcSendSubaccountUpdateCount
is incremented in other streaming operations.protocol/streaming/full_node_streaming_manager.go
: Add metric increment inSendPriceUpdate
method🔗 Analysis chain
LGTM! The metric key follows established guidelines.
The new metric constant
GrpcSendPriceUpdateCount
is well-placed in the gRPC metrics section and follows the naming conventions. Its purpose aligns with the PR's objective of sending price updates after block finalization.Let's verify the metric's usage in the codebase:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 199
Script:
Length of output: 116379
Script:
Length of output: 9331
Script:
Length of output: 17108