Skip to content

Commit 11e990e

Browse files
authored
refactor(stack/loadshed): unit test instruments spawned tasks (#3755)
this commit performs a small refactor to one of the unit tests in `linkerd-stack`'s load-shedding middleware. this adds a span to the worker tasks spawned in this test, so that tracing logs can be associated with particular oneshot services. see #3744 for more information on upgrading our tower dependency. this is cherry-picked from investigations on that branch related to breaking changes in 0.5 related to the `Buffer` middleware. after this change, logs now look like this: ``` ; RUST_LOG="trace" cargo test -p linkerd-stack buffer_load_shed -- --nocapture running 1 test [ 0.002770s] TRACE worker{id=oneshot1}: tower::buffer::service: sending request to buffer worker [ 0.002809s] TRACE worker{id=oneshot2}: tower::buffer::service: sending request to buffer worker [ 0.002823s] TRACE worker{id=oneshot3}: tower::buffer::service: sending request to buffer worker [ 0.002843s] DEBUG worker{id=oneshot4}: linkerd_stack::loadshed: Service has become unavailable [ 0.002851s] DEBUG worker{id=oneshot4}: linkerd_stack::loadshed: Service shedding load [ 0.002878s] TRACE tower::buffer::worker: worker polling for next message [ 0.002885s] TRACE tower::buffer::worker: processing new request [ 0.002892s] TRACE worker{id=oneshot1}: tower::buffer::worker: resumed=false worker received request; waiting for service readiness [ 0.002901s] DEBUG worker{id=oneshot1}: tower::buffer::worker: service.ready=true processing request [ 0.002914s] TRACE worker{id=oneshot1}: tower::buffer::worker: returning response future [ 0.002926s] TRACE tower::buffer::worker: worker polling for next message [ 0.002931s] TRACE tower::buffer::worker: processing new request [ 0.002935s] TRACE worker{id=oneshot2}: tower::buffer::worker: resumed=false worker received request; waiting for service readiness [ 0.002946s] TRACE worker{id=oneshot2}: tower::buffer::worker: service.ready=false delay [ 0.002983s] TRACE worker{id=oneshot5}: tower::buffer::service: sending request to buffer worker [ 0.003001s] DEBUG worker{id=oneshot6}: linkerd_stack::loadshed: Service has become unavailable [ 0.003007s] DEBUG worker{id=oneshot6}: linkerd_stack::loadshed: Service shedding load [ 0.003017s] DEBUG worker{id=oneshot7}: linkerd_stack::loadshed: Service has become unavailable [ 0.003024s] DEBUG worker{id=oneshot7}: linkerd_stack::loadshed: Service shedding load [ 0.003035s] TRACE tower::buffer::worker: worker polling for next message [ 0.003041s] TRACE tower::buffer::worker: resuming buffered request [ 0.003045s] TRACE worker{id=oneshot2}: tower::buffer::worker: resumed=true worker received request; waiting for service readiness [ 0.003052s] DEBUG worker{id=oneshot2}: tower::buffer::worker: service.ready=true processing request [ 0.003060s] TRACE worker{id=oneshot2}: tower::buffer::worker: returning response future [ 0.003068s] TRACE tower::buffer::worker: worker polling for next message [ 0.003073s] TRACE tower::buffer::worker: processing new request [ 0.003077s] TRACE worker{id=oneshot3}: tower::buffer::worker: resumed=false worker received request; waiting for service readiness [ 0.003084s] DEBUG worker{id=oneshot3}: tower::buffer::worker: service.ready=true processing request [ 0.003091s] TRACE worker{id=oneshot3}: tower::buffer::worker: returning response future [ 0.003099s] TRACE tower::buffer::worker: worker polling for next message [ 0.003103s] TRACE tower::buffer::worker: processing new request [ 0.003107s] TRACE worker{id=oneshot5}: tower::buffer::worker: resumed=false worker received request; waiting for service readiness [ 0.003114s] DEBUG worker{id=oneshot5}: tower::buffer::worker: service.ready=true processing request [ 0.003121s] TRACE worker{id=oneshot5}: tower::buffer::worker: returning response future [ 0.003129s] TRACE tower::buffer::worker: worker polling for next message test loadshed::tests::buffer_load_shed ... ok ``` Signed-off-by: katelyn martin <kate@buoyant.io>
1 parent 5fa3745 commit 11e990e

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

linkerd/stack/src/loadshed.rs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,20 +138,29 @@ mod tests {
138138

139139
let (service, mut handle) = mock::pair::<(), ()>();
140140
let service = LoadShed::new(Buffer::new(service, 3));
141+
let spawn_svc = |id: &'static str| {
142+
use tracing::{error_span, Instrument};
143+
task::spawn(
144+
service
145+
.clone()
146+
.oneshot(())
147+
.instrument(error_span!("worker", %id)),
148+
)
149+
};
141150

142151
// The inner starts unavailable...
143152
handle.allow(0);
144153
// ...but the buffer will accept requests while it has capacity.
145-
let mut oneshot1 = task::spawn(service.clone().oneshot(()));
154+
let mut oneshot1 = spawn_svc("oneshot1");
146155
assert_pending!(oneshot1.poll());
147-
let mut oneshot2 = task::spawn(service.clone().oneshot(()));
156+
let mut oneshot2 = spawn_svc("oneshot2");
148157
assert_pending!(oneshot2.poll());
149-
let mut oneshot3 = task::spawn(service.clone().oneshot(()));
158+
let mut oneshot3 = spawn_svc("oneshot3");
150159
assert_pending!(oneshot3.poll());
151160

152161
// The buffer is now full, so the loadshed service should fail this
153162
// request.
154-
let mut oneshot4 = task::spawn(service.clone().oneshot(()));
163+
let mut oneshot4 = spawn_svc("oneshot4");
155164
assert_ready_err!(oneshot4.poll());
156165

157166
// Complete one request.
@@ -166,13 +175,13 @@ mod tests {
166175

167176
// Now that there's space in the buffer, the service should no longer be
168177
// shedding load.
169-
let mut oneshot5 = task::spawn(service.clone().oneshot(()));
178+
let mut oneshot5 = spawn_svc("oneshot5");
170179
assert_pending!(oneshot5.poll());
171180

172181
// The buffer is now full, so the loadshed service should fail any
173182
// additional requests.
174-
let mut oneshot6 = task::spawn(service.clone().oneshot(()));
175-
let mut oneshot7 = task::spawn(service.clone().oneshot(()));
183+
let mut oneshot6 = spawn_svc("oneshot6");
184+
let mut oneshot7 = spawn_svc("oneshot7");
176185
assert_ready_err!(oneshot6.poll());
177186
assert_ready_err!(oneshot7.poll());
178187

0 commit comments

Comments
 (0)