2323import org .apache .lucene .index .IndexCommit ;
2424import org .apache .lucene .index .IndexWriter ;
2525import org .apache .lucene .index .LeafReader ;
26+ import org .apache .lucene .index .LeafReaderContext ;
27+ import org .apache .lucene .index .SegmentReader ;
2628import org .apache .lucene .store .Directory ;
29+ import org .elasticsearch .common .lucene .Lucene ;
2730
2831import java .io .IOException ;
32+ import java .io .UncheckedIOException ;
2933import java .util .List ;
3034import java .util .function .Function ;
3135
3640 */
3741public final class NoOpEngine extends ReadOnlyEngine {
3842
43+ private final SegmentsStats stats ;
44+
3945 public NoOpEngine (EngineConfig config ) {
4046 super (config , null , null , true , Function .identity ());
47+ this .stats = new SegmentsStats ();
48+ Directory directory = store .directory ();
49+ try (DirectoryReader reader = DirectoryReader .open (directory )) {
50+ for (LeafReaderContext ctx : reader .getContext ().leaves ()) {
51+ SegmentReader segmentReader = Lucene .segmentReader (ctx .reader ());
52+ fillSegmentStats (segmentReader , true , stats );
53+ }
54+ } catch (IOException e ) {
55+ throw new UncheckedIOException (e );
56+ }
4157 }
4258
4359 @ Override
@@ -47,17 +63,17 @@ protected DirectoryReader open(final IndexCommit commit) throws IOException {
4763 final IndexCommit indexCommit = indexCommits .get (indexCommits .size () - 1 );
4864 return new DirectoryReader (directory , new LeafReader [0 ]) {
4965 @ Override
50- protected DirectoryReader doOpenIfChanged () throws IOException {
66+ protected DirectoryReader doOpenIfChanged () {
5167 return null ;
5268 }
5369
5470 @ Override
55- protected DirectoryReader doOpenIfChanged (IndexCommit commit ) throws IOException {
71+ protected DirectoryReader doOpenIfChanged (IndexCommit commit ) {
5672 return null ;
5773 }
5874
5975 @ Override
60- protected DirectoryReader doOpenIfChanged (IndexWriter writer , boolean applyAllDeletes ) throws IOException {
76+ protected DirectoryReader doOpenIfChanged (IndexWriter writer , boolean applyAllDeletes ) {
6177 return null ;
6278 }
6379
@@ -67,17 +83,17 @@ public long getVersion() {
6783 }
6884
6985 @ Override
70- public boolean isCurrent () throws IOException {
86+ public boolean isCurrent () {
7187 return true ;
7288 }
7389
7490 @ Override
75- public IndexCommit getIndexCommit () throws IOException {
91+ public IndexCommit getIndexCommit () {
7692 return indexCommit ;
7793 }
7894
7995 @ Override
80- protected void doClose () throws IOException {
96+ protected void doClose () {
8197 }
8298
8399 @ Override
@@ -86,4 +102,18 @@ public CacheHelper getReaderCacheHelper() {
86102 }
87103 };
88104 }
105+
106+ @ Override
107+ public SegmentsStats segmentsStats (boolean includeSegmentFileSizes , boolean includeUnloadedSegments ) {
108+ if (includeUnloadedSegments ) {
109+ final SegmentsStats stats = new SegmentsStats ();
110+ stats .add (this .stats );
111+ if (includeSegmentFileSizes == false ) {
112+ stats .clearFileSizes ();
113+ }
114+ return stats ;
115+ } else {
116+ return super .segmentsStats (includeSegmentFileSizes , includeUnloadedSegments );
117+ }
118+ }
89119}
0 commit comments