chore(tvix/store): Use BoxStream type alias

The BoxStream type alias is a more concise and easier to read than
the full `Pin<Box<dyn Stream<Item = ...> + Send + ...>>` type.

Change-Id: I5b7bccfd066ded5557e01f7895f4cf5c4a33bd44
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10677
Reviewed-by: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
Autosubmit: Connor Brewster <cbrewster@hey.com>
This commit is contained in:
Connor Brewster 2024-01-20 16:25:39 -06:00 committed by clbot
parent 56ba7a72d8
commit 4e341fb5d9
15 changed files with 44 additions and 67 deletions

View file

@ -1,12 +1,10 @@
use crate::nar::RenderError;
use crate::pathinfoservice::PathInfoService;
use crate::proto;
use futures::StreamExt;
use futures::{stream::BoxStream, TryStreamExt};
use std::ops::Deref;
use tokio::task;
use tokio_stream::wrappers::ReceiverStream;
use tonic::{async_trait, Request, Response, Result, Status};
use tracing::{debug, instrument, warn};
use tracing::{instrument, warn};
use tvix_castore::proto as castorepb;
pub struct GRPCPathInfoServiceWrapper<PS> {
@ -27,7 +25,7 @@ impl<PS> proto::path_info_service_server::PathInfoService for GRPCPathInfoServic
where
PS: Deref<Target = dyn PathInfoService> + Send + Sync + 'static,
{
type ListStream = ReceiverStream<tonic::Result<proto::PathInfo, Status>>;
type ListStream = BoxStream<'static, tonic::Result<proto::PathInfo, Status>>;
#[instrument(skip(self))]
async fn get(
@ -95,22 +93,13 @@ where
&self,
_request: Request<proto::ListPathInfoRequest>,
) -> Result<Response<Self::ListStream>, Status> {
let (tx, rx) = tokio::sync::mpsc::channel(5);
let stream = Box::pin(
self.inner
.list()
.map_err(|e| Status::internal(e.to_string())),
);
let mut stream = self.inner.list();
let _task = task::spawn(async move {
while let Some(e) = stream.next().await {
let res = e.map_err(|e| Status::internal(e.to_string()));
if tx.send(res).await.is_err() {
debug!("receiver dropped");
break;
}
}
});
let receiver_stream = ReceiverStream::new(rx);
Ok(Response::new(receiver_stream))
Ok(Response::new(Box::pin(stream)))
}
}

View file

@ -7,8 +7,8 @@ use crate::tests::fixtures::DUMMY_OUTPUT_HASH;
use crate::tests::utils::gen_blob_service;
use crate::tests::utils::gen_directory_service;
use crate::tests::utils::gen_pathinfo_service;
use futures::stream::BoxStream;
use std::sync::Arc;
use tokio_stream::wrappers::ReceiverStream;
use tonic::Request;
use tvix_castore::proto as castorepb;
@ -18,7 +18,8 @@ use tvix_castore::proto as castorepb;
/// It uses the NonCachingNARCalculationService NARCalculationService to
/// calculate NARs.
fn gen_grpc_service(
) -> Arc<dyn GRPCPathInfoService<ListStream = ReceiverStream<Result<PathInfo, tonic::Status>>>> {
) -> Arc<dyn GRPCPathInfoService<ListStream = BoxStream<'static, Result<PathInfo, tonic::Status>>>>
{
let blob_service = gen_blob_service();
let directory_service = gen_directory_service();
Arc::new(GRPCPathInfoServiceWrapper::new(gen_pathinfo_service(