fix(crashtracking): guard sigchld and sigpipe during crashtracker signal handler execution#1771
fix(crashtracking): guard sigchld and sigpipe during crashtracker signal handler execution#1771
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
📚 Documentation Check Results📦
|
Clippy Allow Annotation ReportComparing clippy allow annotations between branches:
Summary by Rule
Annotation Counts by File
Annotation Stats by Crate
About This ReportThis report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality. |
🔒 Cargo Deny Results📦
|
| let _ = fs::remove_file(&detector_log_path); | ||
|
|
||
| let config = CrashTestConfig::new( | ||
| BuildProfile::Debug, |
There was a problem hiding this comment.
The reason I do this
SIGCHLD -> SIG_IGN -> kernel auto-reaps collector child -> waitpid returns ECHILD -> reap_child_non_blocking returns unexpected result -> debug_assert_eq! at process_handle.rs:33 fails -> format! allocates to build the panic message -> preload detector catches malloc.
We should be running this test in release mode anyways
afaa9e2 to
007d923
Compare
|
✅ Tests 🎉 All green!❄️ No new flaky tests detected 🎯 Code Coverage (details) 🔗 Commit SHA: 47de874 | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or give us feedback! |
007d923 to
7b3be99
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #1771 +/- ##
==========================================
+ Coverage 71.27% 71.29% +0.01%
==========================================
Files 432 433 +1
Lines 64889 64971 +82
==========================================
+ Hits 46247 46318 +71
- Misses 18642 18653 +11
🚀 New features to boost your workflow:
|
BenchmarksComparisonBenchmark execution time: 2026-03-20 18:46:04 Comparing candidate commit 47de874 in PR branch Found 4 performance improvements and 0 performance regressions! Performance is the same for 55 metrics, 2 unstable metrics.
|
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | 144.517µs | 146.380µs ± 1.903µs | 146.090µs ± 0.555µs | 146.711µs | 147.965µs | 152.671µs | 166.051µs | 13.66% | 6.776 | 60.910 | 1.30% | 0.135µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | [146.116µs; 146.644µs] or [-0.180%; +0.180%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | execution_time | 495.253µs | 497.570µs ± 2.481µs | 496.270µs ± 0.486µs | 499.683µs | 503.463µs | 504.281µs | 507.821µs | 2.33% | 1.552 | 1.966 | 0.50% | 0.175µs | 1 | 200 |
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | throughput | 1969199.747op/s | 2009818.423op/s ± 9945.120op/s | 2015033.832op/s ± 1972.170op/s | 2016428.007op/s | 2017610.851op/s | 2018211.486op/s | 2019169.547op/s | 0.21% | -1.529 | 1.852 | 0.49% | 703.226op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | execution_time | 369.677µs | 370.294µs ± 0.342µs | 370.255µs ± 0.211µs | 370.484µs | 370.768µs | 370.957µs | 372.960µs | 0.73% | 2.474 | 16.907 | 0.09% | 0.024µs | 1 | 200 |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | throughput | 2681250.806op/s | 2700562.214op/s ± 2487.292op/s | 2700838.775op/s ± 1540.564op/s | 2702322.917op/s | 2703614.132op/s | 2704814.394op/s | 2705063.832op/s | 0.16% | -2.439 | 16.560 | 0.09% | 175.878op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | execution_time | 168.648µs | 169.030µs ± 0.269µs | 168.956µs ± 0.132µs | 169.148µs | 169.441µs | 170.045µs | 170.435µs | 0.88% | 1.939 | 5.754 | 0.16% | 0.019µs | 1 | 200 |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | throughput | 5867356.268op/s | 5916112.430op/s ± 9375.510op/s | 5918700.727op/s ± 4633.421op/s | 5922335.593op/s | 5926388.807op/s | 5928461.195op/s | 5929506.715op/s | 0.18% | -1.920 | 5.647 | 0.16% | 662.949op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/[empty string] | execution_time | 36.910µs | 37.061µs ± 0.116µs | 37.037µs ± 0.093µs | 37.167µs | 37.252µs | 37.307µs | 37.375µs | 0.91% | 0.438 | -1.130 | 0.31% | 0.008µs | 1 | 200 |
| normalization/normalize_service/normalize_service/[empty string] | throughput | 26755719.156op/s | 26982444.380op/s ± 84653.311op/s | 27000248.923op/s ± 68085.740op/s | 27060571.871op/s | 27083004.450op/s | 27089690.660op/s | 27093282.498op/s | 0.34% | -0.431 | -1.141 | 0.31% | 5985.893op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/test_ASCII | execution_time | 46.201µs | 46.293µs ± 0.049µs | 46.284µs ± 0.030µs | 46.317µs | 46.377µs | 46.460µs | 46.555µs | 0.59% | 1.438 | 4.222 | 0.11% | 0.003µs | 1 | 200 |
| normalization/normalize_service/normalize_service/test_ASCII | throughput | 21479959.898op/s | 21601528.582op/s ± 23026.116op/s | 21605809.521op/s ± 13787.491op/s | 21616075.359op/s | 21629652.302op/s | 21638333.293op/s | 21644532.779op/s | 0.18% | -1.425 | 4.151 | 0.11% | 1628.192op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | execution_time | [497.226µs; 497.913µs] or [-0.069%; +0.069%] | None | None | None |
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | throughput | [2008440.125op/s; 2011196.721op/s] or [-0.069%; +0.069%] | None | None | None |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | execution_time | [370.246µs; 370.341µs] or [-0.013%; +0.013%] | None | None | None |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | throughput | [2700217.499op/s; 2700906.928op/s] or [-0.013%; +0.013%] | None | None | None |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | execution_time | [168.993µs; 169.068µs] or [-0.022%; +0.022%] | None | None | None |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | throughput | [5914813.074op/s; 5917411.785op/s] or [-0.022%; +0.022%] | None | None | None |
| normalization/normalize_service/normalize_service/[empty string] | execution_time | [37.045µs; 37.078µs] or [-0.044%; +0.044%] | None | None | None |
| normalization/normalize_service/normalize_service/[empty string] | throughput | [26970712.246op/s; 26994176.515op/s] or [-0.043%; +0.043%] | None | None | None |
| normalization/normalize_service/normalize_service/test_ASCII | execution_time | [46.286µs; 46.300µs] or [-0.015%; +0.015%] | None | None | None |
| normalization/normalize_service/normalize_service/test_ASCII | throughput | [21598337.384op/s; 21604719.780op/s] or [-0.015%; +0.015%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| write only interface | execution_time | 1.197µs | 3.228µs ± 1.433µs | 3.001µs ± 0.025µs | 3.027µs | 3.673µs | 14.177µs | 14.777µs | 392.41% | 7.293 | 54.514 | 44.27% | 0.101µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| write only interface | execution_time | [3.029µs; 3.427µs] or [-6.151%; +6.151%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching deserializing traces from msgpack to their internal representation | execution_time | 48.766ms | 49.112ms ± 0.699ms | 48.995ms ± 0.080ms | 49.087ms | 49.238ms | 52.124ms | 55.534ms | 13.35% | 7.295 | 57.741 | 1.42% | 0.049ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching deserializing traces from msgpack to their internal representation | execution_time | [49.015ms; 49.209ms] or [-0.197%; +0.197%] | None | None | None |
Group 5
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching serializing traces from their internal representation to msgpack | execution_time | 13.941ms | 13.993ms ± 0.027ms | 13.991ms ± 0.012ms | 14.002ms | 14.024ms | 14.094ms | 14.200ms | 1.50% | 3.240 | 18.439 | 0.20% | 0.002ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching serializing traces from their internal representation to msgpack | execution_time | [13.989ms; 13.997ms] or [-0.027%; +0.027%] | None | None | None |
Group 6
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching string interning on wordpress profile | execution_time | 162.161µs | 163.144µs ± 0.277µs | 163.099µs ± 0.134µs | 163.256µs | 163.618µs | 164.042µs | 164.936µs | 1.13% | 1.825 | 9.337 | 0.17% | 0.020µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching string interning on wordpress profile | execution_time | [163.106µs; 163.182µs] or [-0.024%; +0.024%] | None | None | None |
Group 7
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sql/obfuscate_sql_string | execution_time | 86.164µs | 86.382µs ± 0.238µs | 86.360µs ± 0.055µs | 86.417µs | 86.504µs | 86.635µs | 89.510µs | 3.65% | 11.436 | 147.664 | 0.27% | 0.017µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sql/obfuscate_sql_string | execution_time | [86.349µs; 86.415µs] or [-0.038%; +0.038%] | None | None | None |
Group 8
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| profile_add_sample_frames_x1000 | execution_time | 4.255ms | 4.259ms ± 0.003ms | 4.259ms ± 0.002ms | 4.261ms | 4.263ms | 4.265ms | 4.293ms | 0.80% | 5.251 | 49.165 | 0.08% | 0.000ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| profile_add_sample_frames_x1000 | execution_time | [4.259ms; 4.260ms] or [-0.011%; +0.011%] | None | None | None |
Group 9
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| two way interface | execution_time | 17.589µs | 25.461µs ± 9.429µs | 17.989µs ± 0.277µs | 33.835µs | 43.150µs | 43.961µs | 57.527µs | 219.78% | 0.738 | -0.645 | 36.94% | 0.667µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| two way interface | execution_time | [24.154µs; 26.767µs] or [-5.133%; +5.133%] | None | None | None |
Group 10
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ip_address/quantize_peer_ip_address_benchmark | execution_time | 4.957µs | 5.023µs ± 0.036µs | 5.020µs ± 0.036µs | 5.058µs | 5.081µs | 5.085µs | 5.088µs | 1.35% | 0.204 | -1.163 | 0.71% | 0.003µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| ip_address/quantize_peer_ip_address_benchmark | execution_time | [5.018µs; 5.028µs] or [-0.099%; +0.099%] | None | None | None |
Group 11
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| tags/replace_trace_tags | execution_time | 2.277µs | 2.355µs ± 0.022µs | 2.351µs ± 0.008µs | 2.364µs | 2.401µs | 2.407µs | 2.409µs | 2.48% | -0.109 | 1.796 | 0.94% | 0.002µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| tags/replace_trace_tags | execution_time | [2.351µs; 2.358µs] or [-0.130%; +0.130%] | None | None | None |
Group 12
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| credit_card/is_card_number/ | execution_time | 3.895µs | 3.915µs ± 0.003µs | 3.915µs ± 0.001µs | 3.916µs | 3.919µs | 3.921µs | 3.921µs | 0.16% | -2.160 | 17.753 | 0.07% | 0.000µs | 1 | 200 |
| credit_card/is_card_number/ | throughput | 255042606.589op/s | 255440965.710op/s ± 167364.297op/s | 255440124.844op/s ± 90628.287op/s | 255527648.092op/s | 255659696.552op/s | 255773661.448op/s | 256758450.192op/s | 0.52% | 2.190 | 18.021 | 0.07% | 11834.443op/s | 1 | 200 |
| credit_card/is_card_number/ 3782-8224-6310-005 | execution_time | 79.148µs | 79.839µs ± 0.363µs | 79.804µs ± 0.288µs | 80.122µs | 80.385µs | 80.833µs | 81.124µs | 1.65% | 0.600 | 0.087 | 0.45% | 0.026µs | 1 | 200 |
| credit_card/is_card_number/ 3782-8224-6310-005 | throughput | 12326815.579op/s | 12525440.977op/s ± 56873.873op/s | 12530709.653op/s ± 45345.270op/s | 12573974.089op/s | 12600408.318op/s | 12612676.211op/s | 12634564.378op/s | 0.83% | -0.577 | 0.028 | 0.45% | 4021.590op/s | 1 | 200 |
| credit_card/is_card_number/ 378282246310005 | execution_time | 82.941µs | 83.867µs ± 0.476µs | 83.862µs ± 0.330µs | 84.137µs | 84.747µs | 85.050µs | 85.496µs | 1.95% | 0.481 | 0.062 | 0.57% | 0.034µs | 1 | 200 |
| credit_card/is_card_number/ 378282246310005 | throughput | 11696479.857op/s | 11923963.461op/s ± 67563.084op/s | 11924324.154op/s ± 46894.388op/s | 11975361.311op/s | 12020025.797op/s | 12045154.157op/s | 12056788.680op/s | 1.11% | -0.450 | 0.005 | 0.57% | 4777.431op/s | 1 | 200 |
| credit_card/is_card_number/37828224631 | execution_time | 3.896µs | 3.915µs ± 0.003µs | 3.915µs ± 0.002µs | 3.917µs | 3.920µs | 3.921µs | 3.921µs | 0.15% | -1.563 | 10.591 | 0.07% | 0.000µs | 1 | 200 |
| credit_card/is_card_number/37828224631 | throughput | 255028503.303op/s | 255403959.894op/s ± 176961.758op/s | 255404657.441op/s ± 106712.815op/s | 255502203.710op/s | 255641988.744op/s | 255749362.572op/s | 256646516.985op/s | 0.49% | 1.584 | 10.762 | 0.07% | 12513.086op/s | 1 | 200 |
| credit_card/is_card_number/378282246310005 | execution_time | 69.813µs | 70.374µs ± 0.386µs | 70.317µs ± 0.235µs | 70.565µs | 71.017µs | 71.589µs | 72.246µs | 2.74% | 1.455 | 3.254 | 0.55% | 0.027µs | 1 | 200 |
| credit_card/is_card_number/378282246310005 | throughput | 13841592.747op/s | 14210212.507op/s ± 77404.601op/s | 14221371.459op/s ± 47348.735op/s | 14266161.735op/s | 14307578.012op/s | 14316943.444op/s | 14324068.733op/s | 0.72% | -1.405 | 3.017 | 0.54% | 5473.332op/s | 1 | 200 |
| credit_card/is_card_number/37828224631000521389798 | execution_time | 53.042µs | 53.136µs ± 0.035µs | 53.135µs ± 0.020µs | 53.153µs | 53.201µs | 53.240µs | 53.275µs | 0.26% | 0.802 | 2.138 | 0.07% | 0.002µs | 1 | 200 |
| credit_card/is_card_number/37828224631000521389798 | throughput | 18770539.588op/s | 18819652.809op/s ± 12309.567op/s | 18820048.669op/s ± 7222.523op/s | 18828043.923op/s | 18835946.395op/s | 18844310.747op/s | 18853151.803op/s | 0.18% | -0.795 | 2.119 | 0.07% | 870.418op/s | 1 | 200 |
| credit_card/is_card_number/x371413321323331 | execution_time | 6.430µs | 6.438µs ± 0.004µs | 6.438µs ± 0.003µs | 6.440µs | 6.446µs | 6.450µs | 6.454µs | 0.26% | 0.914 | 0.909 | 0.07% | 0.000µs | 1 | 200 |
| credit_card/is_card_number/x371413321323331 | throughput | 154941265.396op/s | 155323895.714op/s ± 102346.079op/s | 155339704.902op/s ± 64429.765op/s | 155399133.650op/s | 155465005.360op/s | 155486062.314op/s | 155515625.868op/s | 0.11% | -0.909 | 0.898 | 0.07% | 7236.961op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ | execution_time | 3.895µs | 3.915µs ± 0.003µs | 3.915µs ± 0.001µs | 3.916µs | 3.921µs | 3.923µs | 3.928µs | 0.33% | -0.483 | 10.271 | 0.08% | 0.000µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ | throughput | 254601891.827op/s | 255409719.441op/s ± 200154.910op/s | 255430178.162op/s ± 89031.263op/s | 255514308.818op/s | 255636396.079op/s | 255745372.098op/s | 256739693.283op/s | 0.51% | 0.511 | 10.420 | 0.08% | 14153.089op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | execution_time | 64.944µs | 65.189µs ± 0.146µs | 65.164µs ± 0.097µs | 65.274µs | 65.450µs | 65.654µs | 65.685µs | 0.80% | 0.911 | 0.814 | 0.22% | 0.010µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | throughput | 15224145.891op/s | 15339984.796op/s ± 34169.436op/s | 15345942.383op/s ± 22955.254op/s | 15366909.282op/s | 15382998.710op/s | 15393663.635op/s | 15397918.201op/s | 0.34% | -0.897 | 0.775 | 0.22% | 2416.144op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 378282246310005 | execution_time | 58.596µs | 59.020µs ± 0.241µs | 58.971µs ± 0.163µs | 59.167µs | 59.441µs | 59.650µs | 59.892µs | 1.56% | 0.822 | 0.314 | 0.41% | 0.017µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 378282246310005 | throughput | 16696620.732op/s | 16943558.799op/s ± 69084.668op/s | 16957603.448op/s ± 46736.602op/s | 16998678.780op/s | 17027559.968op/s | 17041548.031op/s | 17066131.259op/s | 0.64% | -0.802 | 0.259 | 0.41% | 4885.024op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631 | execution_time | 3.901µs | 3.916µs ± 0.003µs | 3.916µs ± 0.001µs | 3.917µs | 3.919µs | 3.921µs | 3.932µs | 0.39% | 0.006 | 12.277 | 0.06% | 0.000µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631 | throughput | 254353234.698op/s | 255356445.506op/s ± 164698.575op/s | 255353895.854op/s ± 85308.122op/s | 255442831.392op/s | 255594750.420op/s | 255641943.899op/s | 256369769.929op/s | 0.40% | 0.022 | 12.280 | 0.06% | 11645.948op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/378282246310005 | execution_time | 55.441µs | 55.691µs ± 0.189µs | 55.627µs ± 0.102µs | 55.776µs | 56.065µs | 56.264µs | 56.545µs | 1.65% | 1.485 | 2.735 | 0.34% | 0.013µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/378282246310005 | throughput | 17684888.881op/s | 17956507.259op/s ± 60793.352op/s | 17976855.752op/s ± 32964.506op/s | 18001775.425op/s | 18019667.476op/s | 18027311.420op/s | 18037324.636op/s | 0.34% | -1.459 | 2.609 | 0.34% | 4298.739op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | execution_time | 53.053µs | 53.129µs ± 0.032µs | 53.126µs ± 0.021µs | 53.149µs | 53.177µs | 53.200µs | 53.290µs | 0.31% | 0.623 | 2.237 | 0.06% | 0.002µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | throughput | 18765375.321op/s | 18822148.662op/s ± 11371.112op/s | 18823326.005op/s ± 7404.104op/s | 18829780.922op/s | 18838365.861op/s | 18847365.885op/s | 18849109.290op/s | 0.14% | -0.616 | 2.208 | 0.06% | 804.059op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/x371413321323331 | execution_time | 6.431µs | 6.438µs ± 0.004µs | 6.437µs ± 0.002µs | 6.440µs | 6.444µs | 6.447µs | 6.460µs | 0.35% | 1.212 | 4.017 | 0.06% | 0.000µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/x371413321323331 | throughput | 154804235.898op/s | 155335392.002op/s ± 94566.432op/s | 155344759.404op/s ± 59731.789op/s | 155404164.834op/s | 155466626.003op/s | 155484185.066op/s | 155502336.087op/s | 0.10% | -1.204 | 3.967 | 0.06% | 6686.857op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| credit_card/is_card_number/ | execution_time | [3.914µs; 3.915µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/ | throughput | [255417770.628op/s; 255464160.792op/s] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/ 3782-8224-6310-005 | execution_time | [79.789µs; 79.890µs] or [-0.063%; +0.063%] | None | None | None |
| credit_card/is_card_number/ 3782-8224-6310-005 | throughput | [12517558.806op/s; 12533323.149op/s] or [-0.063%; +0.063%] | None | None | None |
| credit_card/is_card_number/ 378282246310005 | execution_time | [83.801µs; 83.933µs] or [-0.079%; +0.079%] | None | None | None |
| credit_card/is_card_number/ 378282246310005 | throughput | [11914599.867op/s; 11933327.054op/s] or [-0.079%; +0.079%] | None | None | None |
| credit_card/is_card_number/37828224631 | execution_time | [3.915µs; 3.916µs] or [-0.010%; +0.010%] | None | None | None |
| credit_card/is_card_number/37828224631 | throughput | [255379434.697op/s; 255428485.092op/s] or [-0.010%; +0.010%] | None | None | None |
| credit_card/is_card_number/378282246310005 | execution_time | [70.320µs; 70.428µs] or [-0.076%; +0.076%] | None | None | None |
| credit_card/is_card_number/378282246310005 | throughput | [14199484.974op/s; 14220940.041op/s] or [-0.075%; +0.075%] | None | None | None |
| credit_card/is_card_number/37828224631000521389798 | execution_time | [53.131µs; 53.141µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/37828224631000521389798 | throughput | [18817946.821op/s; 18821358.796op/s] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/x371413321323331 | execution_time | [6.438µs; 6.439µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/x371413321323331 | throughput | [155309711.532op/s; 155338079.896op/s] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number_no_luhn/ | execution_time | [3.915µs; 3.916µs] or [-0.011%; +0.011%] | None | None | None |
| credit_card/is_card_number_no_luhn/ | throughput | [255381979.895op/s; 255437458.986op/s] or [-0.011%; +0.011%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | execution_time | [65.169µs; 65.210µs] or [-0.031%; +0.031%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | throughput | [15335249.241op/s; 15344720.352op/s] or [-0.031%; +0.031%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 378282246310005 | execution_time | [58.987µs; 59.054µs] or [-0.057%; +0.057%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 378282246310005 | throughput | [16933984.328op/s; 16953133.269op/s] or [-0.057%; +0.057%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631 | execution_time | [3.916µs; 3.916µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631 | throughput | [255333619.867op/s; 255379271.144op/s] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number_no_luhn/378282246310005 | execution_time | [55.664µs; 55.717µs] or [-0.047%; +0.047%] | None | None | None |
| credit_card/is_card_number_no_luhn/378282246310005 | throughput | [17948081.885op/s; 17964932.632op/s] or [-0.047%; +0.047%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | execution_time | [53.124µs; 53.133µs] or [-0.008%; +0.008%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | throughput | [18820572.736op/s; 18823724.589op/s] or [-0.008%; +0.008%] | None | None | None |
| credit_card/is_card_number_no_luhn/x371413321323331 | execution_time | [6.437µs; 6.438µs] or [-0.008%; +0.008%] | None | None | None |
| credit_card/is_card_number_no_luhn/x371413321323331 | throughput | [155322286.004op/s; 155348498.000op/s] or [-0.008%; +0.008%] | None | None | None |
Group 13
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| redis/obfuscate_redis_string | execution_time | 34.291µs | 34.906µs ± 1.087µs | 34.403µs ± 0.067µs | 34.543µs | 37.232µs | 37.287µs | 38.365µs | 11.52% | 1.706 | 1.033 | 3.11% | 0.077µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| redis/obfuscate_redis_string | execution_time | [34.755µs; 35.056µs] or [-0.432%; +0.432%] | None | None | None |
Group 14
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| profile_add_sample_timestamped_x1000 | execution_time | 4.205ms | 4.210ms ± 0.009ms | 4.209ms ± 0.002ms | 4.211ms | 4.215ms | 4.216ms | 4.325ms | 2.77% | 11.861 | 154.429 | 0.21% | 0.001ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| profile_add_sample_timestamped_x1000 | execution_time | [4.209ms; 4.211ms] or [-0.029%; +0.029%] | None | None | None |
Group 15
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| concentrator/add_spans_to_concentrator | execution_time | 13.018ms | 13.042ms ± 0.014ms | 13.039ms ± 0.008ms | 13.049ms | 13.069ms | 13.079ms | 13.091ms | 0.40% | 0.906 | 0.649 | 0.11% | 0.001ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| concentrator/add_spans_to_concentrator | execution_time | [13.040ms; 13.044ms] or [-0.015%; +0.015%] | None | None | None |
Group 16
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | 190.833ns | 193.339ns ± 2.281ns | 193.120ns ± 1.285ns | 194.325ns | 196.531ns | 200.144ns | 212.970ns | 10.28% | 3.662 | 26.699 | 1.18% | 0.161ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | [193.023ns; 193.655ns] or [-0.164%; +0.164%] | None | None | None |
Group 17
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| receiver_entry_point/report/2598 | execution_time | 3.568ms | 3.609ms ± 0.023ms | 3.602ms ± 0.013ms | 3.620ms | 3.658ms | 3.670ms | 3.700ms | 2.72% | 1.116 | 1.150 | 0.63% | 0.002ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| receiver_entry_point/report/2598 | execution_time | [3.606ms; 3.612ms] or [-0.088%; +0.088%] | None | None | None |
Group 18
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_trace/test_trace | execution_time | 238.250ns | 249.928ns ± 14.924ns | 244.236ns ± 4.150ns | 250.576ns | 286.267ns | 297.331ns | 304.633ns | 24.73% | 1.925 | 2.687 | 5.96% | 1.055ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_trace/test_trace | execution_time | [247.859ns; 251.996ns] or [-0.828%; +0.828%] | None | None | None |
Group 19
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| profile_add_sample2_frames_x1000 | execution_time | 729.586µs | 730.983µs ± 0.585µs | 730.977µs ± 0.384µs | 731.379µs | 731.960µs | 732.229µs | 732.418µs | 0.20% | 0.038 | -0.470 | 0.08% | 0.041µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| profile_add_sample2_frames_x1000 | execution_time | [730.902µs; 731.064µs] or [-0.011%; +0.011%] | None | None | None |
Group 20
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 47de874 | 1774031304 | gyuheon0h/PROF-14080-saguard-ct |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | execution_time | 185.768µs | 186.157µs ± 0.202µs | 186.161µs ± 0.142µs | 186.296µs | 186.514µs | 186.611µs | 186.754µs | 0.32% | 0.263 | -0.408 | 0.11% | 0.014µs | 1 | 200 |
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | throughput | 5354634.068op/s | 5371809.844op/s ± 5832.796op/s | 5371692.951op/s ± 4084.575op/s | 5376427.370op/s | 5380263.037op/s | 5382485.307op/s | 5383072.927op/s | 0.21% | -0.258 | -0.414 | 0.11% | 412.441op/s | 1 | 200 |
| normalization/normalize_name/normalize_name/bad-name | execution_time | 17.827µs | 17.925µs ± 0.036µs | 17.922µs ± 0.021µs | 17.945µs | 17.987µs | 18.008µs | 18.078µs | 0.87% | 0.663 | 1.476 | 0.20% | 0.003µs | 1 | 200 |
| normalization/normalize_name/normalize_name/bad-name | throughput | 55315107.857op/s | 55786813.132op/s ± 111439.018op/s | 55796794.638op/s ± 64904.938op/s | 55857137.160op/s | 55948435.299op/s | 55993095.668op/s | 56095137.353op/s | 0.53% | -0.645 | 1.430 | 0.20% | 7879.929op/s | 1 | 200 |
| normalization/normalize_name/normalize_name/good | execution_time | 10.162µs | 10.328µs ± 0.070µs | 10.328µs ± 0.041µs | 10.369µs | 10.443µs | 10.492µs | 10.541µs | 2.06% | 0.195 | 0.295 | 0.67% | 0.005µs | 1 | 200 |
| normalization/normalize_name/normalize_name/good | throughput | 94870182.374op/s | 96830033.968op/s ± 653396.633op/s | 96820332.300op/s ± 387083.873op/s | 97244987.657op/s | 97874735.402op/s | 98318324.644op/s | 98403771.548op/s | 1.64% | -0.150 | 0.259 | 0.67% | 46202.119op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | execution_time | [186.129µs; 186.185µs] or [-0.015%; +0.015%] | None | None | None |
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | throughput | [5371001.474op/s; 5372618.213op/s] or [-0.015%; +0.015%] | None | None | None |
| normalization/normalize_name/normalize_name/bad-name | execution_time | [17.920µs; 17.930µs] or [-0.028%; +0.028%] | None | None | None |
| normalization/normalize_name/normalize_name/bad-name | throughput | [55771368.756op/s; 55802257.508op/s] or [-0.028%; +0.028%] | None | None | None |
| normalization/normalize_name/normalize_name/good | execution_time | [10.318µs; 10.338µs] or [-0.094%; +0.094%] | None | None | None |
| normalization/normalize_name/normalize_name/good | throughput | [96739479.479op/s; 96920588.457op/s] or [-0.094%; +0.094%] | None | None | None |
Baseline
Omitted due to size.
| signal::kill(Pid::this(), Signal::SIGUSR1).unwrap(); | ||
|
|
||
| // If we get here, signal was successfully ignored | ||
| drop(guard); |
There was a problem hiding this comment.
why do we need an explicit drop
| nix::sys::signal::Signal::SIGCHLD, | ||
| nix::sys::signal::Signal::SIGPIPE, |
There was a problem hiding this comment.
are we sure those are the only signals to suppress?
There was a problem hiding this comment.
I believe so, because those are the only two signals the crash handler itself can cause:
SIGCHLD: handle_posix_signal_impl calls alt_fork() to spawn the collector child process and the receiver. When those children exit, the kernel delivers SIGCHLD to the parent.
SIGPIPE: The collector communicates over Unix socket pipes. If the receiver side closes early, writing to the pipe generates SIGPIPE.
The SaGuard's purpose isn't to block all signals but to prevent the crash handler from re-entering the application's signal handlers due to side effects of its own work
WDYT?
There was a problem hiding this comment.
For papertrail and context:
Suppressing SIGPIPE AND SIGCHLD was the previous behavior before this guard was accidentally removed.
I will investigate chaining SIGCHLD
Artifact Size Benchmark Reportaarch64-alpine-linux-musl
aarch64-unknown-linux-gnu
libdatadog-x64-windows
libdatadog-x86-windows
x86_64-alpine-linux-musl
x86_64-unknown-linux-gnu
|

What does this PR do?
Guards SIGCHLD and SIGPIPE during crashtracker signal handler execution
Motivation
During execution of the signal handler, it cannot be guaranteed that the signal is handled without SA_NODEFER, thus it also cannot be guaranteed that signals like SIGCHLD and SIGPIPE will not be emitted during this handler as a result of the handler itself. At the same time, it isn't known whether it is safe to merely block all signals, as the user's own handler will be given the chance to execute after ours. Thus, we need to prevent the emission of signals we might create (and cannot be created during a signal handler except by our own execution) and defer any other signals. To put it another way, it is conceivable that the crash handling code will emit SIGCHLD or SIGPIPE, and instead of risking responding to those signals, it needs to suppress them. On the other hand, it can't just "block" (
sigprocmask()) those signals because this will only defer them to the next handler.Additional Notes
This was originally implemented in: Crashtracker receiver is spawned on crash
but subsequently removed.
How to test the change?
Unit tests for saguard.rs. Integration test will be in a following PR