refactor(tvix/store): use Box<dyn DirectoryService>
Once we support configuring services at runtime, we don't know what DirectoryService we're using at compile time. This also means, we can't explicitly use the is_closed method from GRPCPutter, without making it part of the DirectoryPutter itself. Change-Id: Icd2a1ec4fc5649a6cd15c9cc7db4c2b473630431 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8727 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
This commit is contained in:
parent
6f85dbfc06
commit
7725eb53ad
18 changed files with 144 additions and 126 deletions
|
|
@ -1,27 +1,26 @@
|
|||
use crate::proto;
|
||||
use crate::{directoryservice::DirectoryService, B3Digest};
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
use tokio::{sync::mpsc::channel, task};
|
||||
use tokio_stream::wrappers::ReceiverStream;
|
||||
use tonic::{async_trait, Request, Response, Status, Streaming};
|
||||
use tracing::{debug, instrument, warn};
|
||||
|
||||
pub struct GRPCDirectoryServiceWrapper<C: DirectoryService> {
|
||||
directory_service: C,
|
||||
pub struct GRPCDirectoryServiceWrapper {
|
||||
directory_service: Arc<Box<dyn DirectoryService>>,
|
||||
}
|
||||
|
||||
impl<DS: DirectoryService> From<DS> for GRPCDirectoryServiceWrapper<DS> {
|
||||
fn from(value: DS) -> Self {
|
||||
impl From<Box<dyn DirectoryService>> for GRPCDirectoryServiceWrapper {
|
||||
fn from(value: Box<dyn DirectoryService>) -> Self {
|
||||
Self {
|
||||
directory_service: value,
|
||||
directory_service: Arc::new(value),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl<DS: DirectoryService + Send + Sync + Clone + 'static>
|
||||
proto::directory_service_server::DirectoryService for GRPCDirectoryServiceWrapper<DS>
|
||||
{
|
||||
impl proto::directory_service_server::DirectoryService for GRPCDirectoryServiceWrapper {
|
||||
type GetStream = ReceiverStream<tonic::Result<proto::Directory, Status>>;
|
||||
|
||||
#[instrument(skip(self))]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
use crate::directoryservice::DirectoryService;
|
||||
use crate::proto::directory_service_server::DirectoryService as GRPCDirectoryService;
|
||||
use crate::proto::get_directory_request::ByWhat;
|
||||
use crate::proto::{Directory, DirectoryNode, SymlinkNode};
|
||||
|
|
@ -8,8 +7,7 @@ use crate::tests::utils::gen_directory_service;
|
|||
use tokio_stream::StreamExt;
|
||||
use tonic::Status;
|
||||
|
||||
fn gen_grpc_service(
|
||||
) -> GRPCDirectoryServiceWrapper<impl DirectoryService + Send + Sync + Clone + 'static> {
|
||||
fn gen_grpc_service() -> GRPCDirectoryServiceWrapper {
|
||||
let directory_service = gen_directory_service();
|
||||
GRPCDirectoryServiceWrapper::from(directory_service)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue