@@ -12,6 +12,7 @@ use re_arrow_util::RecordBatchExt as _;
1212use re_chunk_store:: { Chunk , ChunkStore , ChunkStoreHandle } ;
1313use re_log_encoding:: ToTransport as _;
1414use re_log_types:: { EntityPath , EntryId , StoreId , StoreKind } ;
15+ use re_protos:: cloud:: v1alpha1:: ext:: LanceTable ;
1516use re_protos:: cloud:: v1alpha1:: ext:: {
1617 self , CreateDatasetEntryRequest , CreateDatasetEntryResponse , CreateTableEntryRequest ,
1718 CreateTableEntryResponse , DataSource , DatasetDetails , EntryDetailsUpdate , ProviderDetails ,
@@ -38,17 +39,39 @@ use tonic::{Code, Request, Response, Status};
3839use crate :: chunk_index:: DatasetChunkIndexes ;
3940use crate :: entrypoint:: NamedPath ;
4041use crate :: store:: { ChunkKey , Dataset , InMemoryStore , Table } ;
42+ use re_tuid:: Tuid ;
4143
42- #[ derive( Debug , Default ) ]
43- pub struct RerunCloudHandlerSettings { }
44+ #[ derive( Debug ) ]
45+ pub struct RerunCloudHandlerSettings {
46+ storage_dir : tempfile:: TempDir ,
47+ }
48+
49+ impl Default for RerunCloudHandlerSettings {
50+ fn default ( ) -> Self {
51+ Self {
52+ storage_dir : create_data_dir ( ) . expect ( "Failed to create data directory" ) ,
53+ }
54+ }
55+ }
56+
57+ fn create_data_dir ( ) -> Result < tempfile:: TempDir , crate :: store:: Error > {
58+ Ok ( tempfile:: Builder :: new ( ) . prefix ( "rerun-data-" ) . tempdir ( ) ?)
59+ }
4460
45- #[ derive( Default ) ]
4661pub struct RerunCloudHandlerBuilder {
4762 settings : RerunCloudHandlerSettings ,
48-
4963 store : InMemoryStore ,
5064}
5165
66+ impl Default for RerunCloudHandlerBuilder {
67+ fn default ( ) -> Self {
68+ Self {
69+ settings : Default :: default ( ) ,
70+ store : InMemoryStore :: default ( ) ,
71+ }
72+ }
73+ }
74+
5275impl RerunCloudHandlerBuilder {
5376 pub fn new ( ) -> Self {
5477 Self :: default ( )
@@ -90,7 +113,6 @@ impl RerunCloudHandlerBuilder {
90113const DUMMY_TASK_ID : & str = "task_00000000DEADBEEF" ;
91114
92115pub struct RerunCloudHandler {
93- #[ expect( dead_code) ]
94116 settings : RerunCloudHandlerSettings ,
95117
96118 store : tokio:: sync:: RwLock < InMemoryStore > ,
@@ -1478,7 +1500,28 @@ impl RerunCloudService for RerunCloudHandler {
14781500
14791501 let schema = Arc :: new ( request. schema ) ;
14801502
1481- let table = match & request. provider_details {
1503+ let details = match request. provider_details {
1504+ Some ( details) => details,
1505+ None => {
1506+ // Create a directory in the storage directory. We use a tuid to avoid collisions
1507+ // and avoid any sanitization issue with the provided table name.
1508+ let table_path = self
1509+ . settings
1510+ . storage_dir
1511+ . path ( )
1512+ . join ( format ! ( "lance-{}" , Tuid :: new( ) . to_string( ) ) ) ;
1513+ ProviderDetails :: LanceTable ( LanceTable {
1514+ table_url : url:: Url :: from_directory_path ( table_path) . map_err ( |_| {
1515+ Status :: internal ( format ! (
1516+ "Failed to create table directory in {:?}" ,
1517+ self . settings. storage_dir. path( )
1518+ ) )
1519+ } ) ?,
1520+ } )
1521+ }
1522+ } ;
1523+
1524+ let table = match details {
14821525 ProviderDetails :: LanceTable ( table) => {
14831526 store
14841527 . create_table_entry ( table_name, & table. table_url , schema)
0 commit comments