From 27ff98000b0cdf0ed30eb8837c7d44cd3e79d32f Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Thu, 25 May 2023 17:52:08 +0300 Subject: feat(tvix/store): eliminate generics in BlobStore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To construct various stores at runtime, we need to eliminate associated types from the BlobService trait, and return Box instead of specific types. This also means we can't consume self in the close() method, so everything we write to is put in an Option<>, and during the first close we take from there. Change-Id: Ia523b6ab2f2a5276f51cb5d17e81a5925bce69b6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8647 Autosubmit: flokli Tested-by: BuildkiteCI Reviewed-by: tazjin --- tvix/store/src/proto/grpc_blobservice_wrapper.rs | 16 ++++++---------- tvix/store/src/proto/tests/grpc_blobservice.rs | 4 +--- 2 files changed, 7 insertions(+), 13 deletions(-) (limited to 'tvix/store/src/proto') diff --git a/tvix/store/src/proto/grpc_blobservice_wrapper.rs b/tvix/store/src/proto/grpc_blobservice_wrapper.rs index 3ec1d68872c7..066790daf370 100644 --- a/tvix/store/src/proto/grpc_blobservice_wrapper.rs +++ b/tvix/store/src/proto/grpc_blobservice_wrapper.rs @@ -1,7 +1,5 @@ use crate::{ - blobservice::{BlobService, BlobWriter}, - proto::sync_read_into_async_read::SyncReadIntoAsyncRead, - B3Digest, + blobservice::BlobService, proto::sync_read_into_async_read::SyncReadIntoAsyncRead, B3Digest, }; use std::{collections::VecDeque, io, pin::Pin}; use tokio::task; @@ -10,12 +8,12 @@ use tokio_util::io::ReaderStream; use tonic::{async_trait, Request, Response, Status, Streaming}; use tracing::{instrument, warn}; -pub struct GRPCBlobServiceWrapper { - blob_service: BS, +pub struct GRPCBlobServiceWrapper { + blob_service: Box, } -impl From for GRPCBlobServiceWrapper { - fn from(value: BS) -> Self { +impl From> for GRPCBlobServiceWrapper { + fn from(value: Box) -> Self { Self { blob_service: value, } @@ -23,9 +21,7 @@ impl From for GRPCBlobServiceWrapper { } #[async_trait] -impl super::blob_service_server::BlobService - for GRPCBlobServiceWrapper -{ +impl super::blob_service_server::BlobService for GRPCBlobServiceWrapper { // https://github.com/tokio-rs/tokio/issues/2723#issuecomment-1534723933 type ReadStream = Pin> + Send + 'static>>; diff --git a/tvix/store/src/proto/tests/grpc_blobservice.rs b/tvix/store/src/proto/tests/grpc_blobservice.rs index 02e04e7d723f..2f18ea4abb99 100644 --- a/tvix/store/src/proto/tests/grpc_blobservice.rs +++ b/tvix/store/src/proto/tests/grpc_blobservice.rs @@ -1,12 +1,10 @@ -use crate::blobservice::BlobService; use crate::proto::blob_service_server::BlobService as GRPCBlobService; use crate::proto::{BlobChunk, GRPCBlobServiceWrapper, ReadBlobRequest, StatBlobRequest}; use crate::tests::fixtures::{BLOB_A, BLOB_A_DIGEST}; use crate::tests::utils::gen_blob_service; use tokio_stream::StreamExt; -fn gen_grpc_blob_service( -) -> GRPCBlobServiceWrapper { +fn gen_grpc_blob_service() -> GRPCBlobServiceWrapper { let blob_service = gen_blob_service(); GRPCBlobServiceWrapper::from(blob_service) } -- cgit 1.4.1