Skip to content
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

Add DSM support to SQS v1 #6259

Merged
merged 16 commits into from
Dec 20, 2023
Merged

Add DSM support to SQS v1 #6259

merged 16 commits into from
Dec 20, 2023

Conversation

vandonr
Copy link
Contributor

@vandonr vandonr commented Nov 22, 2023

What Does This Do

Add the pathway context injection necessary for DSM support to SQS when used with the v1 java sdk.

DSM is only going to be available for producers in v >= 1.11.106 because that's the first version to introduce a handler context with AmazonWebServiceRequest, and this is very helpful to pass the span from beforeMarshalling to beforeRequest. Not being able to use that increases the complexity a lot, and this version is old enough that it shouldn't be a big ask from customers.
Consequently, I added a new instrumentation for DSM support specifically, that's going to overlap with the existing APM instrumentation for all V1.X versions of the client.

Motivation

DSM support had already been added to the SQS v2 client, adding support to v1 will allow more clients to benefit from it.

Additional Notes

Jira ticket: AIT-8676

@vandonr vandonr changed the title add DSM support to SQS v1 Add DSM support to SQS v1 Nov 22, 2023
@pr-commenter
Copy link

pr-commenter bot commented Nov 22, 2023

Benchmarks

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master vandonr/dsm
git_commit_date 1702975952 1702982053
git_commit_sha ad2dbbf c62a112
release_version 1.26.0-SNAPSHOT~ad2dbbf866 1.27.0-SNAPSHOT~c62a1128b2
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1702984856 1702984856
ci_job_id 392792224 392792224
ci_pipeline_id 25325111 25325111
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
module Agent Agent
parent None None
variant iast iast

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 48 metrics, 6 unstable metrics.

Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.27.0-SNAPSHOT~c62a1128b2, baseline=1.26.0-SNAPSHOT~ad2dbbf866

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.05 s) : 0, 1049514
Total [baseline] (9.325 s) : 0, 9324835
Agent [candidate] (1.048 s) : 0, 1048197
Total [candidate] (9.375 s) : 0, 9375162
section appsec
Agent [baseline] (1.145 s) : 0, 1145450
Total [baseline] (9.443 s) : 0, 9442777
Agent [candidate] (1.144 s) : 0, 1144342
Total [candidate] (9.433 s) : 0, 9432557
section iast
Agent [baseline] (1.171 s) : 0, 1171449
Total [baseline] (9.565 s) : 0, 9565266
Agent [candidate] (1.167 s) : 0, 1167183
Total [candidate] (9.562 s) : 0, 9561646
section profiling
Agent [baseline] (1.247 s) : 0, 1246741
Total [baseline] (9.614 s) : 0, 9614204
Agent [candidate] (1.247 s) : 0, 1246553
Total [candidate] (9.641 s) : 0, 9640906
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.05 s -
Agent appsec 1.145 s 95.936 ms (9.1%)
Agent iast 1.171 s 121.935 ms (11.6%)
Agent profiling 1.247 s 197.227 ms (18.8%)
Total tracing 9.325 s -
Total appsec 9.443 s 117.942 ms (1.3%)
Total iast 9.565 s 240.432 ms (2.6%)
Total profiling 9.614 s 289.369 ms (3.1%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.048 s -
Agent appsec 1.144 s 96.144 ms (9.2%)
Agent iast 1.167 s 118.985 ms (11.4%)
Agent profiling 1.247 s 198.356 ms (18.9%)
Total tracing 9.375 s -
Total appsec 9.433 s 57.395 ms (0.6%)
Total iast 9.562 s 186.484 ms (2.0%)
Total profiling 9.641 s 265.744 ms (2.8%)
gantt
    title petclinic - break down per module: candidate=1.27.0-SNAPSHOT~c62a1128b2, baseline=1.26.0-SNAPSHOT~ad2dbbf866

    dateFormat X
    axisFormat %s
section tracing
BytebuddyAgent [baseline] (648.811 ms) : 0, 648811
BytebuddyAgent [candidate] (649.297 ms) : 0, 649297
GlobalTracer [baseline] (306.883 ms) : 0, 306883
GlobalTracer [candidate] (306.139 ms) : 0, 306139
AppSec [baseline] (51.551 ms) : 0, 51551
AppSec [candidate] (50.63 ms) : 0, 50630
Remote Config [baseline] (681.638 µs) : 0, 682
Remote Config [candidate] (680.382 µs) : 0, 680
Telemetry [baseline] (7.166 ms) : 0, 7166
Telemetry [candidate] (7.283 ms) : 0, 7283
section appsec
BytebuddyAgent [baseline] (648.31 ms) : 0, 648310
BytebuddyAgent [candidate] (648.072 ms) : 0, 648072
GlobalTracer [baseline] (306.129 ms) : 0, 306129
GlobalTracer [candidate] (305.641 ms) : 0, 305641
AppSec [baseline] (149.171 ms) : 0, 149171
AppSec [candidate] (148.864 ms) : 0, 148864
Remote Config [baseline] (644.079 µs) : 0, 644
Remote Config [candidate] (643.768 µs) : 0, 644
Telemetry [baseline] (6.848 ms) : 0, 6848
Telemetry [candidate] (6.866 ms) : 0, 6866
section iast
BytebuddyAgent [baseline] (773.667 ms) : 0, 773667
BytebuddyAgent [candidate] (769.618 ms) : 0, 769618
GlobalTracer [baseline] (286.374 ms) : 0, 286374
GlobalTracer [candidate] (285.628 ms) : 0, 285628
AppSec [baseline] (49.054 ms) : 0, 49054
AppSec [candidate] (49.371 ms) : 0, 49371
Remote Config [baseline] (628.101 µs) : 0, 628
Remote Config [candidate] (616.38 µs) : 0, 616
Telemetry [baseline] (6.552 ms) : 0, 6552
Telemetry [candidate] (7.245 ms) : 0, 7245
IAST [baseline] (20.652 ms) : 0, 20652
IAST [candidate] (20.42 ms) : 0, 20420
section profiling
BytebuddyAgent [baseline] (659.894 ms) : 0, 659894
BytebuddyAgent [candidate] (658.943 ms) : 0, 658943
GlobalTracer [baseline] (378.163 ms) : 0, 378163
GlobalTracer [candidate] (378.325 ms) : 0, 378325
AppSec [baseline] (51.512 ms) : 0, 51512
AppSec [candidate] (51.055 ms) : 0, 51055
Remote Config [baseline] (683.072 µs) : 0, 683
Remote Config [candidate] (666.294 µs) : 0, 666
Telemetry [baseline] (7.441 ms) : 0, 7441
Telemetry [candidate] (7.44 ms) : 0, 7440
ProfilingAgent [baseline] (94.854 ms) : 0, 94854
ProfilingAgent [candidate] (95.805 ms) : 0, 95805
Profiling [baseline] (94.879 ms) : 0, 94879
Profiling [candidate] (95.831 ms) : 0, 95831
Loading
Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.27.0-SNAPSHOT~c62a1128b2, baseline=1.26.0-SNAPSHOT~ad2dbbf866

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.044 s) : 0, 1043957
Total [baseline] (8.704 s) : 0, 8704049
Agent [candidate] (1.063 s) : 0, 1062718
Total [candidate] (8.766 s) : 0, 8765991
section iast
Agent [baseline] (1.162 s) : 0, 1161528
Total [baseline] (9.278 s) : 0, 9278466
Agent [candidate] (1.174 s) : 0, 1174421
Total [candidate] (9.271 s) : 0, 9271204
section iast_TELEMETRY_OFF
Agent [baseline] (1.172 s) : 0, 1171859
Total [baseline] (9.299 s) : 0, 9299443
Agent [candidate] (1.159 s) : 0, 1159165
Total [candidate] (9.276 s) : 0, 9275973
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.044 s -
Agent iast 1.162 s 117.571 ms (11.3%)
Agent iast_TELEMETRY_OFF 1.172 s 127.902 ms (12.3%)
Total tracing 8.704 s -
Total iast 9.278 s 574.417 ms (6.6%)
Total iast_TELEMETRY_OFF 9.299 s 595.394 ms (6.8%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.063 s -
Agent iast 1.174 s 111.703 ms (10.5%)
Agent iast_TELEMETRY_OFF 1.159 s 96.447 ms (9.1%)
Total tracing 8.766 s -
Total iast 9.271 s 505.213 ms (5.8%)
Total iast_TELEMETRY_OFF 9.276 s 509.982 ms (5.8%)
gantt
    title insecure-bank - break down per module: candidate=1.27.0-SNAPSHOT~c62a1128b2, baseline=1.26.0-SNAPSHOT~ad2dbbf866

    dateFormat X
    axisFormat %s
section tracing
BytebuddyAgent [baseline] (645.824 ms) : 0, 645824
BytebuddyAgent [candidate] (658.119 ms) : 0, 658119
GlobalTracer [baseline] (305.288 ms) : 0, 305288
GlobalTracer [candidate] (310.235 ms) : 0, 310235
AppSec [baseline] (50.911 ms) : 0, 50911
AppSec [candidate] (51.64 ms) : 0, 51640
Remote Config [baseline] (670.126 µs) : 0, 670
Remote Config [candidate] (690.815 µs) : 0, 691
Telemetry [baseline] (7.111 ms) : 0, 7111
Telemetry [candidate] (7.369 ms) : 0, 7369
section iast
BytebuddyAgent [baseline] (766.56 ms) : 0, 766560
BytebuddyAgent [candidate] (775.069 ms) : 0, 775069
GlobalTracer [baseline] (283.941 ms) : 0, 283941
GlobalTracer [candidate] (286.795 ms) : 0, 286795
AppSec [baseline] (48.464 ms) : 0, 48464
AppSec [candidate] (49.524 ms) : 0, 49524
Remote Config [baseline] (633.142 µs) : 0, 633
Remote Config [candidate] (610.747 µs) : 0, 611
Telemetry [baseline] (7.983 ms) : 0, 7983
Telemetry [candidate] (6.513 ms) : 0, 6513
IAST [baseline] (19.626 ms) : 0, 19626
IAST [candidate] (21.383 ms) : 0, 21383
section iast_TELEMETRY_OFF
BytebuddyAgent [baseline] (769.283 ms) : 0, 769283
BytebuddyAgent [candidate] (761.535 ms) : 0, 761535
GlobalTracer [baseline] (290.384 ms) : 0, 290384
GlobalTracer [candidate] (285.396 ms) : 0, 285396
AppSec [baseline] (50.018 ms) : 0, 50018
AppSec [candidate] (49.51 ms) : 0, 49510
Remote Config [baseline] (632.144 µs) : 0, 632
Remote Config [candidate] (631.283 µs) : 0, 631
Telemetry [baseline] (7.524 ms) : 0, 7524
Telemetry [candidate] (7.535 ms) : 0, 7535
IAST [baseline] (19.425 ms) : 0, 19425
IAST [candidate] (20.251 ms) : 0, 20251
Loading

Load

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
end_time 2023-12-19T11:00:09 2023-12-19T11:16:43
git_branch master vandonr/dsm
git_commit_date 1702975952 1702982053
git_commit_sha ad2dbbf c62a112
release_version 1.26.0-SNAPSHOT~ad2dbbf866 1.27.0-SNAPSHOT~c62a1128b2
start_time 2023-12-19T10:59:56 2023-12-19T11:16:30
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1702984856 1702984856
ci_job_id 392792224 392792224
ci_pipeline_id 25325111 25325111
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
variant iast iast

Summary

Found 1 performance improvements and 0 performance regressions! Performance is the same for 7 metrics, 14 unstable metrics.

scenario Δ mean http_req_duration Δ mean throughput candidate mean http_req_duration candidate mean throughput baseline mean http_req_duration baseline mean throughput
scenario:load:petclinic:profiling better
[-95.896µs; -40.048µs] or [-6.092%; -2.544%]
unstable
[-440.279op/s; +668.200op/s] or [-14.859%; +22.552%]
1.506ms 3076.923op/s 1.574ms 2962.963op/s
Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.27.0-SNAPSHOT~c62a1128b2, baseline=1.26.0-SNAPSHOT~ad2dbbf866
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.375 ms) : 1355, 1394
.   : milestone, 1375,
appsec (1.736 ms) : 1711, 1761
.   : milestone, 1736,
iast (1.494 ms) : 1470, 1518
.   : milestone, 1494,
profiling (1.574 ms) : 1548, 1600
.   : milestone, 1574,
tracing (1.473 ms) : 1448, 1497
.   : milestone, 1473,
section candidate
no_agent (1.353 ms) : 1334, 1372
.   : milestone, 1353,
appsec (1.753 ms) : 1727, 1779
.   : milestone, 1753,
iast (1.5 ms) : 1476, 1525
.   : milestone, 1500,
profiling (1.506 ms) : 1481, 1532
.   : milestone, 1506,
tracing (1.503 ms) : 1478, 1527
.   : milestone, 1503,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.375 ms [1.355 ms, 1.394 ms] -
appsec 1.736 ms [1.711 ms, 1.761 ms] 360.899 µs (26.3%)
iast 1.494 ms [1.47 ms, 1.518 ms] 119.033 µs (8.7%)
profiling 1.574 ms [1.548 ms, 1.6 ms] 199.268 µs (14.5%)
tracing 1.473 ms [1.448 ms, 1.497 ms] 97.975 µs (7.1%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.353 ms [1.334 ms, 1.372 ms] -
appsec 1.753 ms [1.727 ms, 1.779 ms] 400.171 µs (29.6%)
iast 1.5 ms [1.476 ms, 1.525 ms] 147.701 µs (10.9%)
profiling 1.506 ms [1.481 ms, 1.532 ms] 153.342 µs (11.3%)
tracing 1.503 ms [1.478 ms, 1.527 ms] 150.03 µs (11.1%)
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.27.0-SNAPSHOT~c62a1128b2, baseline=1.26.0-SNAPSHOT~ad2dbbf866
    dateFormat X
    axisFormat %s
section baseline
no_agent (361.614 µs) : 341, 382
.   : milestone, 362,
iast (478.651 µs) : 458, 499
.   : milestone, 479,
iast_FULL (539.805 µs) : 519, 560
.   : milestone, 540,
iast_INACTIVE (435.269 µs) : 415, 456
.   : milestone, 435,
iast_TELEMETRY_OFF (464.078 µs) : 444, 485
.   : milestone, 464,
tracing (437.337 µs) : 417, 458
.   : milestone, 437,
section candidate
no_agent (363.725 µs) : 344, 384
.   : milestone, 364,
iast (474.983 µs) : 454, 496
.   : milestone, 475,
iast_FULL (534.147 µs) : 514, 555
.   : milestone, 534,
iast_INACTIVE (445.371 µs) : 425, 466
.   : milestone, 445,
iast_TELEMETRY_OFF (464.369 µs) : 443, 485
.   : milestone, 464,
tracing (442.981 µs) : 422, 464
.   : milestone, 443,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 361.614 µs [341.0 µs, 382.227 µs] -
iast 478.651 µs [458.009 µs, 499.293 µs] 117.038 µs (32.4%)
iast_FULL 539.805 µs [519.339 µs, 560.271 µs] 178.191 µs (49.3%)
iast_INACTIVE 435.269 µs [414.788 µs, 455.75 µs] 73.655 µs (20.4%)
iast_TELEMETRY_OFF 464.078 µs [443.537 µs, 484.618 µs] 102.464 µs (28.3%)
tracing 437.337 µs [416.561 µs, 458.113 µs] 75.723 µs (20.9%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 363.725 µs [343.583 µs, 383.867 µs] -
iast 474.983 µs [454.065 µs, 495.9 µs] 111.257 µs (30.6%)
iast_FULL 534.147 µs [513.777 µs, 554.517 µs] 170.422 µs (46.9%)
iast_INACTIVE 445.371 µs [424.518 µs, 466.223 µs] 81.646 µs (22.4%)
iast_TELEMETRY_OFF 464.369 µs [443.386 µs, 485.352 µs] 100.644 µs (27.7%)
tracing 442.981 µs [421.724 µs, 464.239 µs] 79.256 µs (21.8%)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I wrote this by mixing the V2 instrumentation and what was done in the aws sdk v1 instrumentation

@vandonr vandonr marked this pull request as ready for review November 22, 2023 14:02
@vandonr vandonr requested a review from a team as a code owner November 22, 2023 14:02
assert messages[0].attributes['AWSTraceHeader'] =~
/Root=1-[0-9a-f]{8}-00000000${sendSpan.traceId.toHexStringPadded(16)};Parent=${DDSpanId.toHexStringPadded(sendSpan.spanId)};Sampled=1/

cleanup:
client.shutdown()
}

@IgnoreIf({ instance.isDataStreamsEnabled() })
Copy link
Collaborator

Choose a reason for hiding this comment

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

why?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ah yes, it's a mistake on my part when synchronizing this with the V2 tests, will remove that line.

Copy link
Contributor Author

@vandonr vandonr Nov 23, 2023

Choose a reason for hiding this comment

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

Ah, it was not a mistake from me ! It's disabled in V2 as well !

@IgnoreIf({instance.isDataStreamsEnabled()})
def "trace details propagated via embedded SQS message attribute (string)"() {

I suppose the logic is that whether DSM is enabled or not has no impact on the expecations of the test, so we ignore it to not run the same test twice.
One could also argue that we could run it to make sure we didn't change the behavior with DSM. But in any case, I think it should be coherent between v1 and v2 if tests are ignored or not.

Copy link
Collaborator

@amarziali amarziali left a comment

Choose a reason for hiding this comment

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

I left some comments that should be addressed on this PR. I think that the implementation can be also simplified a bit

String queueUrl = smRequest.getQueueUrl();
if (queueUrl == null) return request;

AgentSpan span = startSpan("aws.sqs.send");
Copy link
Contributor Author

Choose a reason for hiding this comment

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

hardcoded the span name because I don't want to pull dependencies just to access the cache that is normally used to get the name


and since we know what kind of request we're dealing with here, it'd always be the same value anyway.

Copy link
Collaborator

Choose a reason for hiding this comment

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

why a span is started here? For the sdk v2 is not happening andt the reason is that the tracing for the send should already done by the aws sdk instrumentation.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

in the sdk v2 instrumentation, the spans are always started early, in beforeExecution, which is a method that doesn't exist in v1, but takes place even before beforeMarshalling. This allows access to the span in all methods basically.


(it is activated only later)

In the sdk v1 instrumentation, the span is both created and started in the same method, in beforeRequest, which means it's not available in beforeMarshalling, where I need it. I could create the span in the beforeMarshalling method of the sdk instrumentation, but we already discussed here that it'd be better to create it right where I need it, in the SQS instrumentation, which saves one use of the context, and also avoids potential leaking span issues.

@amarziali
Copy link
Collaborator

If it can help an easy implementation can be found in #6281 . It has to be completed for extracting the context on receive side but it will be easy to do

@vandonr
Copy link
Contributor Author

vandonr commented Nov 27, 2023

If it can help an easy implementation can be found in #6281 . It has to be completed for extracting the context on receive side but it will be easy to do

I don't understand, it's more or less what I did initially, but then we discussed the fact that it'd be better to use the handler context that is available from 1.11.106 to store the span in this discussion.

I do note the improvements you added:

  • changing the span operation name to avoid having to add dependencies where we start it (I can use that here)
  • removing it from the context store when you use it to free memory faster

Are you suggesting that after trying it yourself, you think using a context store is a better idea than relying on the post-1.11.106 handler context ?

@amarziali
Copy link
Collaborator

If it can help an easy implementation can be found in #6281 . It has to be completed for extracting the context on receive side but it will be easy to do

I don't understand, it's more or less what I did initially, but then we discussed the fact that it'd be better to use the handler context that is available from 1.11.106 to store the span in this discussion.

I do note the improvements you added:

  • changing the span operation name to avoid having to add dependencies where we start it (I can use that here)
  • removing it from the context store when you use it to free memory faster

Are you suggesting that after trying it yourself, you think using a context store is a better idea than relying on the post-1.11.106 handler context ?

In terms of orchestration there is no big difference since today we are opening the span too late (beforeRequest) and there is no way to modify it like happens in the v2. So at this point using a contextStore or using the request attributes does not make difference since it won't avoid creating the span beforeHand (that seems needed). Probably just use a contextStore that allows supporting more versions?. But it's my own feeling. The important thing I would have care about is to try to duplicate as less as possible the logic around the span decoration and its naming (since there are a lot of cases the can change depending on the naming version). Also try to kick in this advice only if datastream is enabled will be a plus

Comment on lines +135 to +138
if (span == null) {
// also try getting the span from the context store, if the error happened early
span = requestSpanStore.remove(request.getOriginalRequest());
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I added this after a discussion with java folks to try to avoid leaking the spans that are created in beforeMarshalling

Copy link
Collaborator

@amarziali amarziali left a comment

Choose a reason for hiding this comment

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

It looks almost OK to me. I left some final comments to address

@amarziali amarziali self-requested a review December 1, 2023 13:48
Copy link
Collaborator

@amarziali amarziali left a comment

Choose a reason for hiding this comment

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

looks good to me now. You might also ask a double review form the apm java core team (or dsm folks since it's dsm related)

@vandonr
Copy link
Contributor Author

vandonr commented Dec 11, 2023

You might also ask a double review form the apm java core team (or dsm folks since it's dsm related)

@PerfectSlayer or @mcculls could you give this a look ?

I don't think a DSM review is necessary, because I really copied what was done in the V2 implem, so there was no functional question, only technical ones.

public void set(
final Map<String, MessageAttributeValue> carrier, final String key, final String value) {
if (carrier.size() < 10 && !carrier.containsKey(DATADOG_KEY)) {
String jsonPathway = String.format("{\"%s\": \"%s\"}", key, value);
Copy link
Contributor

Choose a reason for hiding this comment

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

Don’t you fear some key or value value might break the JSON? Like some"thing?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

that's a good point, but also this line of code was taken from


so... idk, maybe I can fix both at the same time.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Looking at the dotnet implementation, it's implemented that way as well.
https://github.com/DataDog/dd-trace-dotnet/blob/e8735bc26f63534356e7f40b650c5e91a43b111a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/AWS/SQS/ContextPropagation.cs#L84
I'd say we keep it like this, and it may be worth it to fix it if we get an escalation for it.
Also, AWS is usually pretty restrictive on what it accepts for names, so we have that on our side.

@vandonr vandonr merged commit 60a2f5b into master Dec 20, 2023
73 checks passed
@vandonr vandonr deleted the vandonr/dsm branch December 20, 2023 09:48
@github-actions github-actions bot added this to the 1.27.0 milestone Dec 20, 2023
@bantonsson bantonsson modified the milestones: 1.26.1, previous 1.26.1 Dec 20, 2023
@JeanFred JeanFred mentioned this pull request Feb 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants