OXYGENHUB

flow rootfs push: the manifest request waits up to an hour for the hub's check (refs oxygenhub#341) 8a4f5174526a

Author
Andy McCall @andymccall <[email protected]>
via
agent agent:claude@andymccall <[email protected]> · keyless, under your grant for changes,refs,seal · key 09ca3bafc341
When
· 2026-10-26 21:27 UTC
Signature
◈ sealed by agent:claude@andymccall
Hash
8a4f5174526a58cc31b020871e52b8ff84f7fc3f5a2b544ff7b65db27c997a89
Depends on
4cf0c99a1486 c3db750ed96e c8917cf1f931
Depended on by
77c8c24066ef
In bookmarks
main
In tags
v0.5.0 v0.5.1 v0.5.2 v0.5.3
Edits
3 atoms, 0 tree operations, 2 files

Browse the tree at this change

modified CHANGELOG.md +1 −0
…
3 unchanged lines
4 4
5 5
## Unreleased
6 6
7 +
- **`flow rootfs push` waits for the hub to check a big image (oxygenhub#341).** The hub reads the whole image before it accepts the manifest; the manifest request now waits up to an hour, not the 120 s every other request gets.
7 8
- **The Android image (#19).** `images/android`: OpenJDK 17, the Android SDK (command-line tools 23.0, platform 37.0, build-tools 36.0.0, NDK 30.0), Gradle 9.6.0, Rust with the Android targets and cargo-ndk, and the OxygenHub app's crates and Gradle dependencies, so the app builds and tests offline. Each download is checked against its published hash.
8 9
- **`flow runner bench` says when load is not measured (#83):** a Windows runner printed `load 0.00`; it now says `load not measured here`. Its kernel line reads `Windows 10.0.26300` (checked with 0.4.0 in the Windows VM).
9 10
## 0.4.0 (2026-10-26)
…
108 unchanged lines
modified crates/flow/src/images.rs +8 −1
…
148 unchanged lines
149 149
            return Err(e);
150 150
        }
151 151
        let url = format!("{}/flow/images/{hash}", self.base);
152 -
        self.agent.put(&url).set("Authorization", &self.auth()).send_json(&m).map_err(|e| Self::fail(&url, e))?;
152 +
        // The hub reads the whole image before it answers, which on a busy
153 +
        // disk takes far longer than the agent's 120 s (oxygenhub#341).
154 +
        self.agent
155 +
            .put(&url)
156 +
            .timeout(Duration::from_secs(3600))
157 +
            .set("Authorization", &self.auth())
158 +
            .send_json(&m)
159 +
            .map_err(|e| Self::fail(&url, e))?;
153 160
        let bytes = *bytes.lock().unwrap();
154 161
        Ok(Moved { chunks: count, bytes, peer_bytes: 0, elapsed: start.elapsed() })
155 162
    }
…
111 unchanged lines