2929import org .apache .lucene .tests .util .TestUtil ;
3030import org .apache .lucene .util .BytesRef ;
3131import org .elasticsearch .cluster .metadata .DataStream ;
32+ import org .elasticsearch .core .SuppressForbidden ;
3233import org .elasticsearch .test .ESTestCase ;
3334
3435import java .io .IOException ;
36+ import java .lang .reflect .Field ;
3537import java .util .Arrays ;
3638import java .util .Locale ;
3739import java .util .Map ;
@@ -210,21 +212,6 @@ void testMixedIndex(Codec oldCodec, Codec newCodec) throws IOException, NoSuchFi
210212 }
211213 }
212214
213- // A hacky way to figure out whether doc values format is written in what version. Need to use reflection, because
214- // PerFieldDocValuesFormat hides the doc values formats it wraps.
215- private static void assertDocValuesFormatVersion (DirectoryReader reader , int expectedVersion ) throws NoSuchFieldException ,
216- IllegalAccessException {
217- for (var leafReaderContext : reader .leaves ()) {
218- var leaf = (SegmentReader ) leafReaderContext .reader ();
219- var dvReader = leaf .getDocValuesReader ();
220- var f = dvReader .getClass ().getDeclaredField ("formats" );
221- f .setAccessible (true );
222- Map <?, ?> formats = (Map <?, ?>) f .get (dvReader );
223- var tsdbDvReader = (ES87TSDBDocValuesProducer ) formats .get ("ES87TSDB_0" );
224- assertEquals (expectedVersion , tsdbDvReader .version );
225- }
226- }
227-
228215 private IndexWriterConfig getTimeSeriesIndexWriterConfig (String hostnameField , String timestampField , Codec codec ) {
229216 var config = new IndexWriterConfig ();
230217 config .setIndexSort (
@@ -241,4 +228,25 @@ private IndexWriterConfig getTimeSeriesIndexWriterConfig(String hostnameField, S
241228 return config ;
242229 }
243230
231+ // A hacky way to figure out whether doc values format is written in what version. Need to use reflection, because
232+ // PerFieldDocValuesFormat hides the doc values formats it wraps.
233+ private static void assertDocValuesFormatVersion (DirectoryReader reader , int expectedVersion ) throws NoSuchFieldException ,
234+ IllegalAccessException {
235+ for (var leafReaderContext : reader .leaves ()) {
236+ var leaf = (SegmentReader ) leafReaderContext .reader ();
237+ var dvReader = leaf .getDocValuesReader ();
238+ var field = getFormatsFieldFromPerFieldFieldsReader (dvReader .getClass ());
239+ Map <?, ?> formats = (Map <?, ?>) field .get (dvReader );
240+ var tsdbDvReader = (ES87TSDBDocValuesProducer ) formats .get ("ES87TSDB_0" );
241+ assertEquals (expectedVersion , tsdbDvReader .version );
242+ }
243+ }
244+
245+ @ SuppressForbidden (reason = "access violation required in order to read private field for this test" )
246+ private static Field getFormatsFieldFromPerFieldFieldsReader (Class <?> c ) throws NoSuchFieldException {
247+ var field = c .getDeclaredField ("formats" );
248+ field .setAccessible (true );
249+ return field ;
250+ }
251+
244252}
0 commit comments