feat(tvix/nar-bridge): treat HEAD requests explicitly
We don't need to access castore for HEAD requests. Change-Id: I9365d9520d5a9e52ed92897d3c4972ec5b6e11fb Reviewed-on: https://cl.tvl.fyi/c/depot/+/12547 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI
This commit is contained in:
parent
2e4a373a04
commit
752f1f82a6
2 changed files with 13 additions and 4 deletions
|
@ -58,7 +58,8 @@ pub fn gen_router(priority: u64) -> Router<AppState> {
|
|||
.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("/nar/tvix-castore/:root_node_enc", get(nar::get_head))
|
||||
.route("/nar/tvix-castore/:root_node_enc", head(nar::get_head))
|
||||
.route("/:narinfo_str", get(narinfo::get))
|
||||
.route("/:narinfo_str", head(narinfo::head))
|
||||
.route("/:narinfo_str", put(narinfo::put))
|
||||
|
|
|
@ -23,7 +23,8 @@ pub(crate) struct GetNARParams {
|
|||
}
|
||||
|
||||
#[instrument(skip(blob_service, directory_service))]
|
||||
pub async fn get(
|
||||
pub async fn get_head(
|
||||
method: axum::http::Method,
|
||||
ranges: Option<TypedHeader<Range>>,
|
||||
axum::extract::Path(root_node_enc): axum::extract::Path<String>,
|
||||
axum::extract::Query(GetNARParams { nar_size }): Query<GetNARParams>,
|
||||
|
@ -71,8 +72,15 @@ pub async fn get(
|
|||
("cache-control", "max-age=31536000, immutable"),
|
||||
("content-type", nix_http::MIME_TYPE_NAR),
|
||||
],
|
||||
// If this is a range request, construct a seekable NAR reader
|
||||
if let Some(TypedHeader(ranges)) = ranges {
|
||||
if method == axum::http::Method::HEAD {
|
||||
// If this is a HEAD request, construct a response returning back the
|
||||
// user-provided content-length, but don't actually talk to castore.
|
||||
Response::builder()
|
||||
.header("content-length", nar_size)
|
||||
.body(Body::empty())
|
||||
.unwrap()
|
||||
} else if let Some(TypedHeader(ranges)) = ranges {
|
||||
// If this is a range request, construct a seekable NAR reader.
|
||||
let r =
|
||||
tvix_store::nar::seekable::Reader::new(root_node, blob_service, directory_service)
|
||||
.await
|
||||
|
|
Loading…
Reference in a new issue