about summary refs log tree commit diff
path: root/tvix/nar-bridge/src/lib.rs
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2024-07-20T12·01+0200
committerflokli <flokli@flokli.de>2024-07-20T17·38+0000
commit5bd48de4185fb670c5c15cb4c046503b66c430c6 (patch)
treedbfdbaa2649628ea29478464f46786b2b639f41b /tvix/nar-bridge/src/lib.rs
parent5d906054da2cfa68f1de201641b54c41e37524b4 (diff)
feat(tvix/nar-bridge): add 404 handler for GET/HEAD `/nar/…` r/8378
We currently send 405, and that confuses `nix copy`.
Send a 404 for now, and add a futurework, as we can actually at least do
something more meaningful in case we still have that nar hash in our
LRU, which would avoid some unnecessary uploads in some cases.

Change-Id: If625e9bd0fd6506cb73b88962d889aa08315fcea
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11987
Tested-by: BuildkiteCI
Reviewed-by: Brian Olsen <me@griff.name>
Diffstat (limited to 'tvix/nar-bridge/src/lib.rs')
-rw-r--r--tvix/nar-bridge/src/lib.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/tvix/nar-bridge/src/lib.rs b/tvix/nar-bridge/src/lib.rs
index 5f0e8c19d26a..46390e865971 100644
--- a/tvix/nar-bridge/src/lib.rs
+++ b/tvix/nar-bridge/src/lib.rs
@@ -1,3 +1,4 @@
+use axum::http::StatusCode;
 use axum::routing::{head, put};
 use axum::{routing::get, Router};
 use lru::LruCache;
@@ -50,6 +51,10 @@ impl AppState {
 pub fn gen_router(priority: u64) -> Router<AppState> {
     Router::new()
         .route("/", get(root))
+        // FUTUREWORK: respond for NARs that we still have in root_nodes (at least HEAD)
+        // This avoids some unnecessary NAR uploading from multiple concurrent clients, and is cheap.
+        .route("/nar/:nar_str", get(four_o_four))
+        .route("/nar/:nar_str", head(four_o_four))
         .route("/nar/:nar_str", put(nar::put))
         .route("/nar/tvix-castore/:root_node_enc", get(nar::get))
         .route("/:narinfo_str", get(narinfo::get))
@@ -61,6 +66,10 @@ async fn root() -> &'static str {
     "Hello from nar-bridge"
 }
 
+async fn four_o_four() -> Result<(), StatusCode> {
+    Err(StatusCode::NOT_FOUND)
+}
+
 async fn nix_cache_info(priority: u64) -> String {
     format!(
         "StoreDir: /nix/store\nWantMassQuery: 1\nPriority: {}\n",