@@ -25,6 +25,8 @@ use crate::cache::CacheManagerRef;
2525use crate :: error:: { CleanDirSnafu , DeleteIndexSnafu , DeleteSstSnafu , OpenDalSnafu , Result } ;
2626use crate :: read:: Source ;
2727use crate :: sst:: file:: { FileHandle , FileId , FileMeta } ;
28+ use crate :: sst:: index:: intermediate:: IntermediateManager ;
29+ use crate :: sst:: index:: IndexerBuilder ;
2830use crate :: sst:: location;
2931use crate :: sst:: parquet:: reader:: ParquetReaderBuilder ;
3032use crate :: sst:: parquet:: writer:: ParquetWriter ;
@@ -37,6 +39,8 @@ pub struct AccessLayer {
3739 region_dir : String ,
3840 /// Target object store.
3941 object_store : ObjectStore ,
42+ /// Intermediate manager for inverted index.
43+ intermediate_manager : IntermediateManager ,
4044}
4145
4246impl std:: fmt:: Debug for AccessLayer {
@@ -49,10 +53,15 @@ impl std::fmt::Debug for AccessLayer {
4953
5054impl AccessLayer {
5155 /// Returns a new [AccessLayer] for specific `region_dir`.
52- pub fn new ( region_dir : impl Into < String > , object_store : ObjectStore ) -> AccessLayer {
56+ pub fn new (
57+ region_dir : impl Into < String > ,
58+ object_store : ObjectStore ,
59+ intermediate_manager : IntermediateManager ,
60+ ) -> AccessLayer {
5361 AccessLayer {
5462 region_dir : region_dir. into ( ) ,
5563 object_store,
64+ intermediate_manager,
5665 }
5766 }
5867
@@ -105,16 +114,15 @@ impl AccessLayer {
105114 let file_path = location:: sst_file_path ( & self . region_dir , request. file_id ) ;
106115 let index_file_path = location:: index_file_path ( & self . region_dir , request. file_id ) ;
107116 let region_id = request. metadata . region_id ;
117+ let file_id = request. file_id ;
118+ let cache_manager = request. cache_manager . clone ( ) ;
108119
109- let sst_info = if let Some ( write_cache) = request . cache_manager . write_cache ( ) {
120+ let sst_info = if let Some ( write_cache) = cache_manager. write_cache ( ) {
110121 // Write to the write cache.
111122 write_cache
112123 . write_and_upload_sst (
124+ request,
113125 SstUploadRequest {
114- file_id : request. file_id ,
115- metadata : request. metadata ,
116- source : request. source ,
117- storage : request. storage ,
118126 upload_path : file_path,
119127 index_upload_path : index_file_path,
120128 remote_store : self . object_store . clone ( ) ,
@@ -124,19 +132,30 @@ impl AccessLayer {
124132 . await ?
125133 } else {
126134 // Write cache is disabled.
127- let mut writer =
128- ParquetWriter :: new ( file_path, request. metadata , self . object_store . clone ( ) ) ;
135+ let indexer = IndexerBuilder {
136+ create_inverted_index : request. create_inverted_index ,
137+ mem_threshold_index_create : request. mem_threshold_index_create ,
138+ file_id,
139+ file_path : index_file_path,
140+ metadata : & request. metadata ,
141+ row_group_size : write_opts. row_group_size ,
142+ object_store : self . object_store . clone ( ) ,
143+ intermediate_manager : self . intermediate_manager . clone ( ) ,
144+ }
145+ . build ( ) ;
146+ let mut writer = ParquetWriter :: new (
147+ file_path,
148+ request. metadata ,
149+ self . object_store . clone ( ) ,
150+ indexer,
151+ ) ;
129152 writer. write_all ( request. source , write_opts) . await ?
130153 } ;
131154
132155 // Put parquet metadata to cache manager.
133156 if let Some ( sst_info) = & sst_info {
134157 if let Some ( parquet_metadata) = & sst_info. file_metadata {
135- request. cache_manager . put_parquet_meta_data (
136- region_id,
137- request. file_id ,
138- parquet_metadata. clone ( ) ,
139- )
158+ cache_manager. put_parquet_meta_data ( region_id, file_id, parquet_metadata. clone ( ) )
140159 }
141160 }
142161
@@ -150,7 +169,12 @@ pub(crate) struct SstWriteRequest {
150169 pub ( crate ) metadata : RegionMetadataRef ,
151170 pub ( crate ) source : Source ,
152171 pub ( crate ) cache_manager : CacheManagerRef ,
172+ #[ allow( dead_code) ]
153173 pub ( crate ) storage : Option < String > ,
174+ /// Whether to create inverted index.
175+ pub ( crate ) create_inverted_index : bool ,
176+ /// The threshold of memory size to create inverted index.
177+ pub ( crate ) mem_threshold_index_create : Option < usize > ,
154178}
155179
156180/// Creates a fs object store with atomic write dir.
0 commit comments