Skip to content

Commit b5cd865

Browse files
committed
fix: don't hard-crash on owner lookup failure
1 parent 2f7e448 commit b5cd865

3 files changed

Lines changed: 26 additions & 11 deletions

File tree

.rustfmt.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
edition = "2021"
1+
edition = "2024"
22
array_width = 100
33
blank_lines_upper_bound = 2
44
chain_width = 80

sk-store/src/manager.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::sync::Arc;
22

33
use sk_core::k8s::DynamicApiSet;
4+
use sk_core::prelude::*;
45
use tokio::sync::{
56
Mutex,
67
mpsc,
@@ -77,13 +78,23 @@ pub(crate) async fn handle_messages(
7778
TraceAction::ObjectDeleted => store.delete_obj(&request.obj, request.ts),
7879
};
7980
if let Err(err) = res {
80-
error!("could not send dynamic object update for {request:?}: {err}");
81+
error!(
82+
"could not send dynamic object update for ({:?}, {}, {}): {err}",
83+
request.action,
84+
request.obj.namespaced_name(),
85+
request.ts,
86+
);
8187
}
8288
},
8389
Some(request) = pod_rx.recv() => {
8490
let mut store = m_store.lock().await;
85-
if let Err(err) = store.record_pod_lifecycle(&request.ns_name, &request.maybe_pod, &request.lifecycle_data).await {
86-
error!("could not send dynamic object update for {request:?}: {err}");
91+
if let Err(err) = store.record_pod_lifecycle(
92+
&request.ns_name,
93+
&request.maybe_pod,
94+
&request.lifecycle_data,
95+
).await {
96+
error!("could not send pod object update for ({}, {:?}, {:?}): {err}",
97+
request.ns_name, request.maybe_pod.map(|p| p.namespaced_name()), request.lifecycle_data);
8798
}
8899
},
89100
else => break,

sk-store/src/store.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,15 +208,14 @@ impl TraceStore {
208208
// because those _can_ change).
209209
if self.pod_owners.has_pod(ns_name) {
210210
self.pod_owners.update_pod_lifecycle(ns_name, lifecycle_data)?;
211-
} else if let Some(pod) = maybe_pod {
212-
// Otherwise, we need to check if any of the pod's owners are tracked by us
213-
let gvk = corev1::Pod::gvk();
214-
let owners = self
211+
} else if let Some(pod) = maybe_pod
212+
&& let Ok(owners) = self
215213
.owners_cache
216214
.lock()
217215
.await
218-
.lookup_by_name_or_obj(&gvk, ns_name, maybe_pod.as_ref())
219-
.await?;
216+
.lookup_by_name_or_obj(&corev1::Pod::gvk(), ns_name, maybe_pod.as_ref())
217+
.await
218+
{
220219
for owner in owners {
221220
// Pods are guaranteed to have namespaces, so the unwrap is fine
222221
let owner_ns_name = format!("{}/{}", pod.namespace().unwrap(), owner.name);
@@ -268,7 +267,12 @@ impl TraceStore {
268267
.lock()
269268
.await
270269
.lookup_by_name_or_obj(gvk, ns_name, Some(obj))
271-
.await?;
270+
.await
271+
.unwrap_or_else(|err| {
272+
error!("could not determine owners for {}, disregarding: {err}", format_gvk_name(gvk, ns_name));
273+
vec![]
274+
});
275+
272276
for owner in owners {
273277
// TODO right now we only look up _namespaced_ owners, not cluster-scoped; in
274278
// principle, it's possible to get the cluster-scoped owners, since the owner

0 commit comments

Comments
 (0)