skip reporting all-zero stats#21907
Conversation
cd0a639 to
e94bebf
Compare
e94bebf to
010529d
Compare
Codecov Report
@@ Coverage Diff @@
## master #21907 +/- ##
=======================================
Coverage 81.2% 81.2%
=======================================
Files 516 516
Lines 144284 144334 +50
=======================================
+ Hits 117256 117340 +84
+ Misses 27028 26994 -34 |
| } | ||
|
|
||
| fn report(&self, report_interval_ms: u64) { | ||
| // skip repoting metrics if stats is empty |
There was a problem hiding this comment.
nit: repoting -> reporting
There was a problem hiding this comment.
fixed...thanks. (I need find a plugin for vim to spell-check for me)
There was a problem hiding this comment.
fixed...thanks. (I need find a plugin for vim to spell-check for me)
It's built in! :set spell
| 0 == self.process_packets_count.load(Ordering::Relaxed) as u64 | ||
| + self.new_tx_count.load(Ordering::Relaxed) as u64 | ||
| + self.dropped_packet_batches_count.load(Ordering::Relaxed) as u64 | ||
| + self.dropped_packets_count.load(Ordering::Relaxed) as u64 | ||
| + self | ||
| .dropped_duplicated_packets_count | ||
| .load(Ordering::Relaxed) as u64 | ||
| + self.newly_buffered_packets_count.load(Ordering::Relaxed) as u64 | ||
| + self.current_buffered_packets_count.load(Ordering::Relaxed) as u64 | ||
| + self | ||
| .current_buffered_packet_batches_count | ||
| .load(Ordering::Relaxed) as u64 | ||
| + self.rebuffered_packets_count.load(Ordering::Relaxed) as u64 | ||
| + self.consumed_buffered_packets_count.load(Ordering::Relaxed) as u64 | ||
| + self | ||
| .consume_buffered_packets_elapsed | ||
| .load(Ordering::Relaxed) | ||
| + self.process_packets_elapsed.load(Ordering::Relaxed) | ||
| + self | ||
| .handle_retryable_packets_elapsed | ||
| .load(Ordering::Relaxed) | ||
| + self.filter_pending_packets_elapsed.load(Ordering::Relaxed) | ||
| + self.packet_duplicate_check_elapsed.load(Ordering::Relaxed) | ||
| + self.packet_conversion_elapsed.load(Ordering::Relaxed) | ||
| + self | ||
| .unprocessed_packet_conversion_elapsed | ||
| .load(Ordering::Relaxed) | ||
| + self.transaction_processing_elapsed.load(Ordering::Relaxed) | ||
| } |
There was a problem hiding this comment.
I think this may be a bit clunky to maintain every time we add a field.
What if we moved all the fields excluding last_report and id into a separate BankingStageStatsInner which derives default, and then this is_empty() check can be self == BankingStageStatsInner::default()
There was a problem hiding this comment.
brilliant, would work great if those counter are not atomic type. self.inner == BankingStageStatsInner::default() would invoke == on AtomicU64, which I need to implemented counter by counter, would end to be the same effect. Maybe I missed some neat Rust feature.
Problem
Noticed a ton of all-zero banking_stage_loop_states were reported. Random sample: within 10min, there were 15,368 not-all-zero stats reporting, but 2,440,420 all-zero. Probably we should not reporting those all-zeros to save cpu time and influx DB size.
Summary of Changes
Fixes #