Skip to content

Commit 3f0bf09

Browse files
committed
Colin's wip
1 parent 79cc6b4 commit 3f0bf09

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

lib/src/spec.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,9 @@ pub struct BootEntry {
176176
pub incompatible: bool,
177177
/// Whether this entry will be subject to garbage collection
178178
pub pinned: bool,
179+
/// This is true if (relative to the booted system) this is a possible target for a soft reboot
180+
#[serde(default)]
181+
pub soft_reboot_capable: bool,
179182
/// The container storage backend
180183
#[serde(default)]
181184
pub store: Option<Store>,
@@ -517,6 +520,7 @@ mod tests {
517520
image: None,
518521
cached_update: None,
519522
incompatible: false,
523+
soft_reboot_capable: false,
520524
pinned: false,
521525
store: None,
522526
ostree: None,

lib/src/status.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ pub(crate) fn labels_of_config(
114114
fn boot_entry_from_deployment(
115115
sysroot: &Storage,
116116
deployment: &ostree::Deployment,
117+
booted_kernel_checksum: Option<&str>,
117118
) -> Result<BootEntry> {
118119
let (
119120
store,
@@ -144,10 +145,14 @@ fn boot_entry_from_deployment(
144145
(None, CachedImageStatus::default(), false)
145146
};
146147

148+
let bootcsum = deployment.bootcsum();
149+
let soft_reboot_capable = booted_kernel_checksum == Some(bootcsum.as_ref());
150+
147151
let r = BootEntry {
148152
image,
149153
cached_update,
150154
incompatible,
155+
soft_reboot_capable,
151156
store,
152157
pinned: deployment.is_pinned(),
153158
ostree: Some(crate::spec::BootEntryOstree {
@@ -228,27 +233,29 @@ pub(crate) fn get_status(
228233
other,
229234
};
230235

236+
let booted_kernel_checksum = booted_deployment.as_ref().map(|d| d.bootcsum());
237+
let booted_kernel_checksum = booted_kernel_checksum.as_deref();
238+
let booted = booted_deployment
239+
.as_ref()
240+
.map(|d| boot_entry_from_deployment(sysroot, d, None))
241+
.transpose()
242+
.context("Booted deployment")?;
231243
let staged = deployments
232244
.staged
233245
.as_ref()
234-
.map(|d| boot_entry_from_deployment(sysroot, d))
246+
.map(|d| boot_entry_from_deployment(sysroot, d, booted_kernel_checksum))
235247
.transpose()
236248
.context("Staged deployment")?;
237-
let booted = booted_deployment
238-
.as_ref()
239-
.map(|d| boot_entry_from_deployment(sysroot, d))
240-
.transpose()
241-
.context("Booted deployment")?;
242249
let rollback = deployments
243250
.rollback
244251
.as_ref()
245-
.map(|d| boot_entry_from_deployment(sysroot, d))
252+
.map(|d| boot_entry_from_deployment(sysroot, d, booted_kernel_checksum))
246253
.transpose()
247254
.context("Rollback deployment")?;
248255
let other_deployments = deployments
249256
.other
250257
.iter()
251-
.map(|d| boot_entry_from_deployment(sysroot, d))
258+
.map(|d| boot_entry_from_deployment(sysroot, d, booted_kernel_checksum))
252259
.collect::<Result<Vec<_>>>()
253260
.context("Other deployments")?;
254261
let spec = staged

0 commit comments

Comments
 (0)