@@ -7,7 +7,8 @@ use std::{
77} ;
88
99use iroh:: { discovery:: IntoDiscovery , dns:: DnsResolver , NodeId , RelayMode , SecretKey } ;
10- use iroh_docs:: protocol:: Docs ;
10+ use iroh_blobs:: store:: fs:: options:: { GcConfig , Options } ;
11+ use iroh_docs:: { engine:: ProtectCallbackHandler , protocol:: Docs } ;
1112use iroh_gossip:: net:: Gossip ;
1213
1314/// Default bind address for the node.
@@ -74,7 +75,11 @@ pub struct Builder {
7475
7576impl Builder {
7677 /// Spawns the node
77- async fn spawn0 ( self , blobs : iroh_blobs:: api:: Store ) -> anyhow:: Result < Node > {
78+ async fn spawn0 (
79+ self ,
80+ blobs : iroh_blobs:: api:: Store ,
81+ protect_cb : Option < ProtectCallbackHandler > ,
82+ ) -> anyhow:: Result < Node > {
7883 let mut addr_v4 = DEFAULT_BIND_ADDR_V4 ;
7984 let mut addr_v6 = DEFAULT_BIND_ADDR_V6 ;
8085 if self . bind_random_port {
@@ -88,12 +93,14 @@ impl Builder {
8893 builder = builder. discovery_n0 ( ) ;
8994 let endpoint = builder. bind ( ) . await ?;
9095 let mut router = iroh:: protocol:: Router :: builder ( endpoint. clone ( ) ) ;
91- // let blobs = Blobs::builder(store.clone()).build(&endpoint);
9296 let gossip = Gossip :: builder ( ) . spawn ( endpoint. clone ( ) ) ;
93- let docs_builder = match self . path {
97+ let mut docs_builder = match self . path {
9498 Some ( ref path) => Docs :: persistent ( path. to_path_buf ( ) ) ,
9599 None => Docs :: memory ( ) ,
96100 } ;
101+ if let Some ( protect_cb) = protect_cb {
102+ docs_builder = docs_builder. protect_handler ( protect_cb) ;
103+ }
97104 let docs = match docs_builder
98105 . spawn ( endpoint. clone ( ) , blobs. clone ( ) , gossip. clone ( ) )
99106 . await
@@ -114,44 +121,6 @@ impl Builder {
114121 // Build the router
115122 let router = router. spawn ( ) ;
116123
117- // Setup RPC
118- // let (internal_rpc, controller) =
119- // quic_rpc::transport::flume::channel::<Request, Response>(1);
120- // let controller = controller.boxed();
121- // let internal_rpc = internal_rpc.boxed();
122- // let internal_rpc = quic_rpc::RpcServer::<Service>::new(internal_rpc);
123-
124- // let docs2 = docs.clone();
125- // let blobs2 = blobs.clone();
126- // let rpc_task: tokio::task::JoinHandle<()> = tokio::task::spawn(async move {
127- // loop {
128- // let request = internal_rpc.accept().await;
129- // match request {
130- // Ok(accepting) => {
131- // let blobs = blobs2.clone();
132- // let docs = docs2.clone();
133- // tokio::task::spawn(async move {
134- // let (msg, chan) = accepting.read_first().await?;
135- // match msg {
136- // Request::BlobsOrTags(msg) => {
137- // blobs.handle_rpc_request(msg, chan.map().boxed()).await?;
138- // }
139- // Request::Docs(msg) => {
140- // docs.handle_rpc_request(msg, chan.map().boxed()).await?;
141- // }
142- // }
143- // anyhow::Ok(())
144- // });
145- // }
146- // Err(err) => {
147- // tracing::warn!("rpc error: {:?}", err);
148- // }
149- // }
150- // }
151- // });
152-
153- // let client = quic_rpc::RpcClient::new(controller);
154-
155124 // TODO: Make this work again.
156125 // if let Some(period) = self.gc_interval {
157126 // blobs.add_protected(docs.protect_cb())?;
@@ -241,17 +210,29 @@ impl Node {
241210impl Builder {
242211 /// Spawns the node
243212 pub async fn spawn ( self ) -> anyhow:: Result < Node > {
244- let store = match self . path {
213+ let ( store, protect_handler ) = match self . path {
245214 None => {
246215 let store = iroh_blobs:: store:: mem:: MemStore :: new ( ) ;
247- ( & * store) . clone ( )
216+ ( ( * store) . clone ( ) , None )
248217 }
249218 Some ( ref path) => {
250- let store = iroh_blobs:: store:: fs:: FsStore :: load ( path. clone ( ) ) . await ?;
251- ( & * store) . clone ( )
219+ let db_path = path. join ( "blobs.db" ) ;
220+ let mut opts = Options :: new ( path) ;
221+ let protect_handler = if let Some ( interval) = self . gc_interval {
222+ let ( handler, cb) = ProtectCallbackHandler :: new ( ) ;
223+ opts. gc = Some ( GcConfig {
224+ interval,
225+ add_protected : Some ( cb) ,
226+ } ) ;
227+ Some ( handler)
228+ } else {
229+ None
230+ } ;
231+ let store = iroh_blobs:: store:: fs:: FsStore :: load_with_opts ( db_path, opts) . await ?;
232+ ( ( * store) . clone ( ) , protect_handler)
252233 }
253234 } ;
254- self . spawn0 ( store) . await
235+ self . spawn0 ( store, protect_handler ) . await
255236 }
256237}
257238
0 commit comments