Skip to content

Commit bf6cf75

Browse files
authored
Add tracing events to signing and event streams (#2057)
* Emit a trace with the string to sign when signing * Add traces to event stream message send/receive * Add a message to dispatch trace
1 parent 3cdf49e commit bf6cf75

File tree

6 files changed

+28
-5
lines changed

6 files changed

+28
-5
lines changed

CHANGELOG.next.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,3 +689,15 @@ message = "Fixed and improved the request `tracing` span hierarchy to improve lo
689689
references = ["smithy-rs#2044", "smithy-rs#371"]
690690
meta = { "breaking" = false, "tada" = true, "bug" = false, "target" = "client"}
691691
author = "jdisanti"
692+
693+
[[aws-sdk-rust]]
694+
message = "Add more `tracing` events to signing and event streams"
695+
references = ["smithy-rs#2057", "smithy-rs#371"]
696+
meta = { "breaking" = false, "tada" = false, "bug" = false }
697+
author = "jdisanti"
698+
699+
[[smithy-rs]]
700+
message = "Add more `tracing` events to signing and event streams"
701+
references = ["smithy-rs#2057", "smithy-rs#371"]
702+
meta = { "breaking" = false, "tada" = false, "bug" = false, "target" = "client"}
703+
author = "jdisanti"

aws/rust-runtime/aws-sigv4/src/event_stream.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ fn sign_payload<'a>(
126126
params,
127127
);
128128
let signature = calculate_signature(signing_key, &string_to_sign);
129+
tracing::trace!(canonical_request = ?message_payload, string_to_sign = ?string_to_sign, "calculated signing parameters");
129130

130131
// Generate the signed wrapper event frame
131132
SigningOutput::new(

aws/rust-runtime/aws-sigv4/src/http_request/sign.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -180,22 +180,23 @@ fn calculate_signing_params<'a>(
180180
params: &'a SigningParams<'a>,
181181
) -> Result<(CalculatedParams, String), SigningError> {
182182
let creq = CanonicalRequest::from(request, params)?;
183-
tracing::trace!(canonical_request = %creq);
184183

185184
let encoded_creq = &sha256_hex_string(creq.to_string().as_bytes());
186-
let sts = StringToSign::new(
185+
let string_to_sign = StringToSign::new(
187186
params.time,
188187
params.region,
189188
params.service_name,
190189
encoded_creq,
191-
);
190+
)
191+
.to_string();
192192
let signing_key = generate_signing_key(
193193
params.secret_key,
194194
params.time,
195195
params.region,
196196
params.service_name,
197197
);
198-
let signature = calculate_signature(signing_key, sts.to_string().as_bytes());
198+
let signature = calculate_signature(signing_key, string_to_sign.as_bytes());
199+
tracing::trace!(canonical_request = %creq, string_to_sign = %string_to_sign, "calculated signing parameters");
199200

200201
let values = creq.values.into_query_params().expect("signing with query");
201202
let mut signing_params = vec![

rust-runtime/aws-smithy-http-tower/src/dispatch.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ where
4444
let (req, property_bag) = req.into_parts();
4545
let mut inner = self.inner.clone();
4646
let future = async move {
47-
trace!(request = ?req);
47+
trace!(request = ?req, "dispatching request");
4848
inner
4949
.call(req)
5050
.await

rust-runtime/aws-smithy-http/src/event_stream/receiver.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use std::error::Error as StdError;
1616
use std::fmt;
1717
use std::marker::PhantomData;
1818
use std::mem;
19+
use tracing::trace;
1920

2021
/// Wrapper around SegmentedBuf that tracks the state of the stream.
2122
#[derive(Debug)]
@@ -198,13 +199,15 @@ impl<T, E> Receiver<T, E> {
198199
)
199200
})?
200201
{
202+
trace!(message = ?message, "received complete event stream message");
201203
return Ok(Some(message));
202204
}
203205
}
204206

205207
self.buffer_next_chunk().await?;
206208
}
207209
if self.buffer.has_data() {
210+
trace!(remaining_data = ?self.buffer, "data left over in the event stream response stream");
208211
return Err(SdkError::response_error(
209212
ReceiverError {
210213
kind: ReceiverErrorKind::UnexpectedEndOfStream,

rust-runtime/aws-smithy-http/src/event_stream/sender.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::fmt::Debug;
1313
use std::marker::PhantomData;
1414
use std::pin::Pin;
1515
use std::task::{Context, Poll};
16+
use tracing::trace;
1617

1718
/// Input type for Event Streams.
1819
pub struct EventStreamSender<T, E> {
@@ -150,14 +151,18 @@ impl<T, E: StdError + Send + Sync + 'static> Stream for MessageStreamAdapter<T,
150151
.marshall(message)
151152
.map_err(SdkError::construction_failure)?,
152153
};
154+
155+
trace!(unsigned_message = ?message, "signing event stream message");
153156
let message = self
154157
.signer
155158
.sign(message)
156159
.map_err(SdkError::construction_failure)?;
160+
157161
let mut buffer = Vec::new();
158162
message
159163
.write_to(&mut buffer)
160164
.map_err(SdkError::construction_failure)?;
165+
trace!(signed_message = ?buffer, "sending signed event stream message");
161166
Poll::Ready(Some(Ok(Bytes::from(buffer))))
162167
} else if !self.end_signal_sent {
163168
self.end_signal_sent = true;
@@ -167,6 +172,7 @@ impl<T, E: StdError + Send + Sync + 'static> Stream for MessageStreamAdapter<T,
167172
sign.map_err(SdkError::construction_failure)?
168173
.write_to(&mut buffer)
169174
.map_err(SdkError::construction_failure)?;
175+
trace!(signed_message = ?buffer, "sending signed empty message to terminate the event stream");
170176
Poll::Ready(Some(Ok(Bytes::from(buffer))))
171177
}
172178
None => Poll::Ready(None),

0 commit comments

Comments
 (0)