@@ -141,11 +141,12 @@ impl BlockExecutor {
141
141
let payload = msg. payload ( ) ;
142
142
let msg_payload = MsgPayload :: decode_json ( & payload) ?. arc ( ) ;
143
143
let packets = Self :: build_packets ( & msg_payload) ;
144
- let cli = self . cli . as_ref ( ) . cloned ( ) ;
144
+ let cli = self . cli . clone ( ) ;
145
145
join_set. spawn ( {
146
146
let semaphore = semaphore. clone ( ) ;
147
147
let packets = packets. clone ( ) ;
148
148
let msg_payload = msg_payload. clone ( ) ;
149
+ let cli = cli. clone ( ) ;
149
150
async move {
150
151
let _permit = semaphore. acquire ( ) . await ?;
151
152
let result =
@@ -160,10 +161,16 @@ impl BlockExecutor {
160
161
let packets = packets. clone ( ) ;
161
162
let msg_payload = msg_payload. clone ( ) ;
162
163
let fuel_streams = fuel_streams. clone ( ) ;
164
+ let cli = cli. clone ( ) ;
163
165
async move {
164
166
let _permit = semaphore. acquire_owned ( ) . await ?;
165
- let result =
166
- handle_streams ( & fuel_streams, & packets, & msg_payload) . await ;
167
+ let result = handle_streams (
168
+ cli. as_ref ( ) ,
169
+ & fuel_streams,
170
+ & packets,
171
+ & msg_payload,
172
+ )
173
+ . await ;
167
174
Ok ( ProcessResult :: Stream ( result) )
168
175
}
169
176
} ) ;
@@ -324,14 +331,32 @@ async fn handle_stores(
324
331
}
325
332
326
333
async fn handle_streams (
334
+ cli : Option < & Arc < Cli > > ,
327
335
fuel_streams : & Arc < FuelStreams > ,
328
336
packets : & Arc < Vec < RecordPacket > > ,
329
337
msg_payload : & Arc < MsgPayload > ,
330
338
) -> Result < BlockStats , ConsumerError > {
331
339
let block_height = msg_payload. block_height ( ) ;
332
340
let stats = BlockStats :: new ( block_height. to_owned ( ) , ActionType :: Stream ) ;
333
341
let now = BlockTimestamp :: now ( ) ;
334
- let publish_futures = packets. iter ( ) . map ( |packet| {
342
+
343
+ // Filter packets based on store_only_entity if specified
344
+ let filtered_packets = packets. iter ( ) . filter ( |packet| {
345
+ let subject_id = packet. subject_id ( ) ;
346
+ if let Ok ( entity) = RecordEntity :: from_subject_id ( & subject_id) {
347
+ // Skip if store_only_entity is set and doesn't match current entity
348
+ if let Some ( cli_ref) = cli {
349
+ if let Some ( store_only) = & cli_ref. store_only_entity {
350
+ return entity. as_str ( ) == store_only;
351
+ }
352
+ }
353
+ true
354
+ } else {
355
+ false
356
+ }
357
+ } ) ;
358
+
359
+ let publish_futures = filtered_packets. map ( |packet| {
335
360
let packet = packet. to_owned ( ) ;
336
361
let packet = packet. with_start_time ( now) ;
337
362
fuel_streams. publish_by_entity ( packet. arc ( ) )
0 commit comments