Skip to content

Commit c27e6ef

Browse files
committed
Lowercaseify all Nexus request headers
1 parent 1807534 commit c27e6ef

2 files changed

Lines changed: 24 additions & 2 deletions

File tree

core/src/worker/nexus.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ use tokio::{
4242
use tokio_stream::wrappers::UnboundedReceiverStream;
4343
use tokio_util::sync::CancellationToken;
4444

45-
static REQUEST_TIMEOUT_HEADER: &str = "Request-Timeout";
45+
static REQUEST_TIMEOUT_HEADER: &str = "request-timeout";
4646

4747
/// Centralizes all state related to received nexus tasks
4848
pub(super) struct NexusManager {
@@ -245,11 +245,23 @@ where
245245
.filter_map(move |t| {
246246
let res = match t {
247247
TaskStreamInput::Poll(t) => match *t {
248-
Ok(t) => {
248+
Ok(mut t) => {
249249
if let Some(dur) = t.resp.sched_to_start() {
250250
self.metrics.nexus_task_sched_to_start_latency(dur);
251251
};
252252

253+
// Lowercase-ify headers. All headers should be lowercase as per http2
254+
// standard, but, not all of them were initially and this papers over
255+
// that for lang.
256+
if let Some(ref mut req) = t.resp.request {
257+
let existing_headers = std::mem::take(&mut req.header);
258+
let mut new_headers = HashMap::new();
259+
for (header_key, val) in existing_headers.into_iter() {
260+
new_headers.insert(header_key.to_lowercase(), val);
261+
};
262+
req.header = new_headers;
263+
}
264+
253265
let tt = TaskToken(t.resp.task_token.clone());
254266
let mut timeout_task = None;
255267
if let Some(timeout_str) = t

tests/integ_tests/workflow_tests/nexus.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,16 @@ async fn nexus_async(
258258
let client = starter.get_client().await.get_client().clone();
259259
let nexus_task_handle = async {
260260
let mut nt = core_worker.poll_nexus_task().await.unwrap().unwrap_task();
261+
// Verify request header key for timeout exists and is lowercase
262+
if outcome == Outcome::Timeout {
263+
assert!(
264+
nt.request
265+
.as_ref()
266+
.unwrap()
267+
.header
268+
.contains_key("request-timeout")
269+
);
270+
}
261271
let start_req = assert_matches!(
262272
nt.request.unwrap().variant.unwrap(),
263273
request::Variant::StartOperation(sr) => sr

0 commit comments

Comments
 (0)