@@ -858,72 +858,86 @@ Status Compaction::construct_output_rowset_writer(RowsetWriterContext& ctx, bool
858
858
return false ;
859
859
}
860
860
for (auto i = 0 ; i < rowset->num_segments (); i++) {
861
- auto segment_file = rowset->segment_file_path (i);
862
- io::Path segment_path (segment_file);
863
- auto inverted_index_file_reader =
864
- std::make_unique<InvertedIndexFileReader>(
865
- fs, segment_path.parent_path (),
866
- segment_path.filename (),
867
- _cur_tablet_schema
868
- ->get_inverted_index_storage_format ());
869
- bool open_idx_file_cache = false ;
870
- auto st = inverted_index_file_reader->init (
871
- config::inverted_index_read_buffer_size,
872
- open_idx_file_cache);
873
- if (!st.ok ()) {
874
- LOG (WARNING) << " init index "
875
- << inverted_index_file_reader->get_index_file_path (
876
- index_meta)
877
- << " error:" << st;
878
- return false ;
879
- }
880
-
881
- bool exists = false ;
882
- if (!inverted_index_file_reader
883
- ->index_file_exist (index_meta, &exists)
884
- .ok ()) {
885
- LOG (ERROR) << inverted_index_file_reader->get_index_file_path (
886
- index_meta)
887
- << " fs->exists error" ;
888
- return false ;
889
- }
890
-
891
- if (!exists) {
861
+ std::string index_file_path;
862
+ try {
863
+ auto segment_file = rowset->segment_file_path (i);
864
+ io::Path segment_path (segment_file);
865
+ auto inverted_index_file_reader =
866
+ std::make_unique<InvertedIndexFileReader>(
867
+ fs, segment_path.parent_path (),
868
+ segment_path.filename (),
869
+ _cur_tablet_schema
870
+ ->get_inverted_index_storage_format ());
871
+ bool open_idx_file_cache = false ;
872
+ auto st = inverted_index_file_reader->init (
873
+ config::inverted_index_read_buffer_size,
874
+ open_idx_file_cache);
875
+ index_file_path =
876
+ inverted_index_file_reader->get_index_file_path (
877
+ index_meta);
878
+ if (!st.ok ()) {
879
+ LOG (WARNING) << " init index " << index_file_path
880
+ << " error:" << st;
881
+ return false ;
882
+ }
883
+
884
+ bool exists = false ;
885
+ if (!inverted_index_file_reader
886
+ ->index_file_exist (index_meta, &exists)
887
+ .ok ()) {
888
+ LOG (ERROR) << index_file_path << " fs->exists error" ;
889
+ return false ;
890
+ }
891
+
892
+ if (!exists) {
893
+ LOG (WARNING)
894
+ << " tablet[" << _tablet->tablet_id ()
895
+ << " ] column_unique_id[" << col_unique_id << " ],"
896
+ << index_file_path
897
+ << " is not exists, will skip index compaction" ;
898
+ return false ;
899
+ }
900
+
901
+ // check index meta
902
+ auto result = inverted_index_file_reader->open (index_meta);
903
+ if (!result.has_value ()) {
904
+ LOG (WARNING) << " open index " << index_file_path
905
+ << " error:" << result.error ();
906
+ return false ;
907
+ }
908
+ auto reader = std::move (result.value ());
909
+ std::vector<std::string> files;
910
+ reader->list (&files);
911
+ reader->close ();
912
+
913
+ DBUG_EXECUTE_IF (
914
+ " Compaction::construct_skip_inverted_index_index_"
915
+ " reader_"
916
+ " close_error" ,
917
+ {
918
+ _CLTHROWA (CL_ERR_IO,
919
+ " debug point: reader close error" );
920
+ })
921
+
922
+ // why is 3?
923
+ // slice type index file at least has 3 files: null_bitmap, segments_N, segments.gen
924
+ if (files.size () < 3 ) {
925
+ LOG (WARNING) << " tablet[" << _tablet->tablet_id ()
926
+ << " ] column_unique_id[" << col_unique_id
927
+ << " ]," << index_file_path
928
+ << " is corrupted, will skip index compaction" ;
929
+ return false ;
930
+ }
931
+ } catch (CLuceneError& err) {
892
932
LOG (WARNING) << " tablet[" << _tablet->tablet_id ()
893
- << " ] column_unique_id[" << col_unique_id << " ],"
894
- << inverted_index_file_reader->get_index_file_path (
895
- index_meta)
896
- << " is not exists, will skip index compaction" ;
897
- return false ;
898
- }
899
-
900
- // check index meta
901
- auto result = inverted_index_file_reader->open (index_meta);
902
- if (!result.has_value ()) {
903
- LOG (WARNING) << " open index "
904
- << inverted_index_file_reader->get_index_file_path (
905
- index_meta)
906
- << " error:" << result.error ();
907
- return false ;
908
- }
909
- auto reader = std::move (result.value ());
910
- std::vector<std::string> files;
911
- reader->list (&files);
912
- reader->close ();
913
-
914
- // why is 3?
915
- // slice type index file at least has 3 files: null_bitmap, segments_N, segments.gen
916
- if (files.size () < 3 ) {
917
- LOG (WARNING) << " tablet[" << _tablet->tablet_id ()
918
- << " ] column_unique_id[" << col_unique_id << " ],"
919
- << inverted_index_file_reader->get_index_file_path (
920
- index_meta)
921
- << " is corrupted, will skip index compaction" ;
933
+ << " ] column_unique_id[" << col_unique_id
934
+ << " ] open index[" << index_file_path
935
+ << " ], will skip index compaction, error:"
936
+ << err.what ();
922
937
return false ;
923
938
}
924
939
}
925
940
return true ;
926
- return true ;
927
941
});
928
942
if (all_have_inverted_index) {
929
943
ctx.columns_to_do_index_compaction .insert (col_unique_id);
0 commit comments