Skip to content

tag aggregation smp tests#1252

Closed
rayz wants to merge 6 commits intoraymond/tag-agg-correctnessfrom
raymond/tag-agg-smp
Closed

tag aggregation smp tests#1252
rayz wants to merge 6 commits intoraymond/tag-agg-correctnessfrom
raymond/tag-agg-smp

Conversation

@rayz
Copy link
Copy Markdown
Contributor

@rayz rayz commented Mar 20, 2026

Summary

Change Type

  • Bug fix
  • New feature
  • Non-functional (chore, refactoring, docs)
  • Performance

How did you test this PR?

References

Copilot AI review requested due to automatic review settings March 20, 2026 15:10
@dd-octo-sts dd-octo-sts bot added area/components Sources, transforms, and destinations. area/test All things testing: unit/integration, correctness, SMP regression, etc. labels Mar 20, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds new SMP regression experiments for ADP to exercise tag-filterlist/tag-aggregation scenarios at scale, and adds transform-level telemetry for tag filtering outcomes.

Changes:

  • Add tagfilter_* SMP experiments (0 tags, 100 metrics, 500 metrics, and a 500-metrics no-traffic variant) and supporting shared filterlist fixtures.
  • Update experiment generation merge behavior to allow explicitly overriding lading generators with an empty list.
  • Add telemetry counters to the tag_filterlist transform and a unit test validating counter behavior.

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
test/smp/regression/adp/shared/tagfilter_500metrics.yaml Adds a large shared metric_tag_filterlist fixture for 500-metric scenarios.
test/smp/regression/adp/shared/tagfilter_100metrics.yaml Adds a shared metric_tag_filterlist fixture for 100-metric scenarios.
test/smp/regression/adp/generate_experiments.py Allows an explicit empty overlay generator list to replace generators (no-traffic experiments).
test/smp/regression/adp/experiments.yaml Introduces tagfilter_base template and new tagfilter_* experiments wiring shared fixtures.
test/smp/regression/adp/config.yaml Updates lading version pin.
test/smp/regression/adp/cases/tagfilter_*/** Adds generated case directories for the new tagfilter experiments.
lib/saluki-components/src/transforms/tag_filterlist/telemetry.rs Adds a telemetry helper to record hit/miss/noop/modified outcomes and removed-tag counts.
lib/saluki-components/src/transforms/tag_filterlist/mod.rs Wires telemetry into the transform, returns filter outcomes, and adds a unit test for telemetry.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

ComponentContext,
},
data_model::event::{metric::Metric, EventType},
observability::ComponentMetricsExt,
Copy link

Copilot AI Mar 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saluki-components has #![deny(warnings)], and ComponentMetricsExt is imported here but not used anywhere in the module. This will fail the build due to an unused import warning. Remove the import, or use the extension trait explicitly if it’s required for metrics wiring.

Suggested change
observability::ComponentMetricsExt,

Copilot uses AI. Check for mistakes.
@pr-commenter
Copy link
Copy Markdown

pr-commenter bot commented Mar 20, 2026

Binary Size Analysis (Agent Data Plane)

Target: 1d50af4 (baseline) vs 46578c9 (comparison) diff
Analysis Type: Stripped binaries (debug symbols excluded)
Baseline Size: 26.19 MiB
Comparison Size: 26.28 MiB
Size Change: +90.61 KiB (+0.34%)
Pass/Fail Threshold: +5%
Result: PASSED ✅

Changes by Module

Module File Size Symbols
core +29.55 KiB 72
saluki_components::transforms::tag_filterlist +27.56 KiB 18
serde_core +8.78 KiB 8
agent_data_plane::cli::run +6.86 KiB 2
[sections] +6.08 KiB 6
hashbrown +5.59 KiB 9
saluki_config::dynamic::watcher -2.34 KiB 1
saluki_context::hash::hash_context +2.15 KiB 1
tokio +1.81 KiB 2
[Unmapped] +1.52 KiB 1
saluki_core::topology::blueprint +1.19 KiB 1
saluki_context::context::Context +887 B 1
smallvec +753 B 1
saluki_context::resolver::TagsResolver -574 B 1
saluki_components::encoders::datadog +379 B 2
serde_json +281 B 1
unicode_segmentation +104 B 1
saluki_config::secrets::resolver -88 B 1
figment +76 B 17
saluki_components::destinations::prometheus +59 B 1

Detailed Symbol Changes

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  +2.8% +43.7Ki  +2.9% +32.5Ki    [523 Others]
  [NEW] +12.8Ki  [NEW] +12.6Ki    _<saluki_components::transforms::tag_filterlist::TagFilterlist as saluki_core::components::transforms::Transform>::run::_{{closure}}::h963c4e73613d8740
  [NEW] +12.6Ki  [NEW] +12.4Ki    _<core::marker::PhantomData<T> as serde_core::de::DeserializeSeed>::deserialize::h823409a611a5cfb1
  [NEW] +10.7Ki  [NEW] +10.6Ki    <saluki_core::data_model::event::Event as core::clone::Clone>::clone.10049
  +6.0% +6.86Ki  +6.0% +6.86Ki    agent_data_plane::cli::run::create_topology::_{{closure}}::h4a1b0b37b7e2d03e
  [NEW] +5.66Ki  [NEW] +5.49Ki    serde_core::de::impls::_<impl serde_core::de::Deserialize for alloc::vec::Vec<T>>::deserialize::h34dcebfa9500250f
  [NEW] +5.52Ki  [NEW] +5.38Ki    <hickory_proto::rr::record_data::RData as core::clone::Clone>::clone.8502
  [NEW] +5.13Ki  [NEW] +5.00Ki    <hickory_proto::rr::record_data::RData as core::clone::Clone>::clone.11186
  [NEW] +4.76Ki  [NEW] +4.61Ki    _<core::marker::PhantomData<T> as serde_core::de::DeserializeSeed>::deserialize::h4e9adec8ddd65cfa
  [NEW] +4.71Ki  [NEW] +4.59Ki    <rustls::error::Error as core::clone::Clone>::clone.10025
  [NEW] +4.71Ki  [NEW] +4.59Ki    <rustls::error::Error as core::clone::Clone>::clone.11201
  [NEW] +4.26Ki  [NEW] +4.15Ki    saluki_components::transforms::tag_filterlist::compile_filters::hd808d986c0d7a078
  [NEW] +3.83Ki  [NEW] +3.71Ki    <webpki::error::Error as core::fmt::Debug>::fmt.11379
  [NEW] +3.66Ki  [NEW] +3.54Ki    <rustls::error::Error as core::fmt::Debug>::fmt.9647
  [DEL] -3.66Ki  [DEL] -3.54Ki    <rustls::error::Error as core::fmt::Debug>::fmt.9641
  [DEL] -3.83Ki  [DEL] -3.71Ki    <webpki::error::Error as core::fmt::Debug>::fmt.11359
  [DEL] -4.71Ki  [DEL] -4.59Ki    <rustls::error::Error as core::clone::Clone>::clone.11181
  [DEL] -4.71Ki  [DEL] -4.59Ki    <rustls::error::Error as core::clone::Clone>::clone.10017
  [DEL] -5.13Ki  [DEL] -5.00Ki    <hickory_proto::rr::record_data::RData as core::clone::Clone>::clone.11166
  [DEL] -5.52Ki  [DEL] -5.38Ki    <hickory_proto::rr::record_data::RData as core::clone::Clone>::clone.8496
  [DEL] -10.7Ki  [DEL] -10.6Ki    <saluki_core::data_model::event::Event as core::clone::Clone>::clone.10041
  +0.3% +90.6Ki  +0.3% +78.6Ki    TOTAL

@pr-commenter
Copy link
Copy Markdown

pr-commenter bot commented Mar 20, 2026

Regression Detector (Agent Data Plane)

This comment was omitted because it was over 65,536 characters.Please check the Gitlab Job logs to see its output.

Copy link
Copy Markdown
Contributor

@webern webern left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caveat: I'm new here!

Mostly questions due to lack of exposure to the codebase. I ran out of time to try to run anything, so this was just a visual review.


use super::FilterMetricTagsOutcome;

#[derive(Clone)]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know binary size is a big thing for us. Do we not derive Debug by default for that reason?

use super::FilterMetricTagsOutcome;

#[derive(Clone)]
pub struct Telemetry {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think structures like this should have doc comments, especially when pub. Or... to kind of say something similar but differently, Telemetry is a fairly overloaded name in a repository like this. Is there a pattern of having many Telemetry structs in the codebase for different purposes?

Perhaps TagFilterTelemetry?

Edit: ok I answered the question with Claude. Yes there is a pattern of telemetry.rs files and structs named telemetry.

My next question is whether it needs to be pub...

DD_PROFILING_INLINED_FUNCTIONS: "true"
checks:
- name: memory_usage
description: Memory usage quality gate. This puts a bound on the total ADP memory usage.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this intended to describe the entire experiment, or just the check? Without looking at other experiment.yaml files (yet), it feels like what is missing is a story about why the experiment was added. For example we have these large metric names that are the same until the Nth character position and these are being added to verify the performance of a new tag filtering mechanism. Do we want some of that context and thinking to be added to either the lading.yaml or experiment.yaml files?

@@ -1,5 +1,5 @@
lading:
version: 0.31.2
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suspicious, but I don't know what this is doing as of yet.

Copy link
Copy Markdown
Contributor Author

@rayz rayz Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're using a specific version of lading (the load generator for benchmarking the tag filtering behavior) that hasn't been released yet. edit: hmm this doesn't seem to be working 🤔

Copilot AI review requested due to automatic review settings March 24, 2026 21:04
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 23 out of 23 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI review requested due to automatic review settings March 25, 2026 15:25
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 23 out of 23 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@rayz
Copy link
Copy Markdown
Contributor Author

rayz commented Apr 1, 2026

moved to 1296

@rayz rayz closed this Apr 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/components Sources, transforms, and destinations. area/test All things testing: unit/integration, correctness, SMP regression, etc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants