@@ -47,6 +47,11 @@ public class MetaStateService {
4747 private final NodeEnvironment nodeEnv ;
4848 private final NamedXContentRegistry namedXContentRegistry ;
4949
50+ // we allow subclasses in tests to redefine formats, e.g. to inject failures
51+ protected MetaDataStateFormat <MetaData > META_DATA_FORMAT = MetaData .FORMAT ;
52+ protected MetaDataStateFormat <IndexMetaData > INDEX_META_DATA_FORMAT = IndexMetaData .FORMAT ;
53+ protected MetaDataStateFormat <Manifest > MANIFEST_FORMAT = Manifest .FORMAT ;
54+
5055 public MetaStateService (NodeEnvironment nodeEnv , NamedXContentRegistry namedXContentRegistry ) {
5156 this .nodeEnv = nodeEnv ;
5257 this .namedXContentRegistry = namedXContentRegistry ;
@@ -73,7 +78,7 @@ Tuple<Manifest, MetaData> loadFullState() throws IOException {
7378 if (manifest .isGlobalGenerationMissing ()) {
7479 metaDataBuilder = MetaData .builder ();
7580 } else {
76- final MetaData globalMetaData = MetaData . FORMAT .loadGeneration (logger , namedXContentRegistry , manifest .getGlobalGeneration (),
81+ final MetaData globalMetaData = META_DATA_FORMAT .loadGeneration (logger , namedXContentRegistry , manifest .getGlobalGeneration (),
7782 nodeEnv .nodeDataPaths ());
7883 if (globalMetaData != null ) {
7984 metaDataBuilder = MetaData .builder (globalMetaData );
@@ -86,7 +91,7 @@ Tuple<Manifest, MetaData> loadFullState() throws IOException {
8691 Index index = entry .getKey ();
8792 long generation = entry .getValue ();
8893 final String indexFolderName = index .getUUID ();
89- final IndexMetaData indexMetaData = IndexMetaData . FORMAT .loadGeneration (logger , namedXContentRegistry , generation ,
94+ final IndexMetaData indexMetaData = INDEX_META_DATA_FORMAT .loadGeneration (logger , namedXContentRegistry , generation ,
9095 nodeEnv .resolveIndexFolder (indexFolderName ));
9196 if (indexMetaData != null ) {
9297 metaDataBuilder .put (indexMetaData , false );
@@ -107,7 +112,7 @@ private Tuple<Manifest, MetaData> loadFullStateBWC() throws IOException {
107112 MetaData .Builder metaDataBuilder ;
108113
109114 Tuple <MetaData , Long > metaDataAndGeneration =
110- MetaData . FORMAT .loadLatestStateWithGeneration (logger , namedXContentRegistry , nodeEnv .nodeDataPaths ());
115+ META_DATA_FORMAT .loadLatestStateWithGeneration (logger , namedXContentRegistry , nodeEnv .nodeDataPaths ());
111116 MetaData globalMetaData = metaDataAndGeneration .v1 ();
112117 long globalStateGeneration = metaDataAndGeneration .v2 ();
113118
@@ -120,7 +125,7 @@ private Tuple<Manifest, MetaData> loadFullStateBWC() throws IOException {
120125
121126 for (String indexFolderName : nodeEnv .availableIndexFolders ()) {
122127 Tuple <IndexMetaData , Long > indexMetaDataAndGeneration =
123- IndexMetaData . FORMAT .loadLatestStateWithGeneration (logger , namedXContentRegistry ,
128+ INDEX_META_DATA_FORMAT .loadLatestStateWithGeneration (logger , namedXContentRegistry ,
124129 nodeEnv .resolveIndexFolder (indexFolderName ));
125130 assert Version .CURRENT .major < 8 : "failed to find manifest file, which is mandatory staring with Elasticsearch version 8.0" ;
126131 IndexMetaData indexMetaData = indexMetaDataAndGeneration .v1 ();
@@ -142,7 +147,7 @@ private Tuple<Manifest, MetaData> loadFullStateBWC() throws IOException {
142147 */
143148 @ Nullable
144149 public IndexMetaData loadIndexState (Index index ) throws IOException {
145- return IndexMetaData . FORMAT .loadLatestState (logger , namedXContentRegistry , nodeEnv .indexPaths (index ));
150+ return INDEX_META_DATA_FORMAT .loadLatestState (logger , namedXContentRegistry , nodeEnv .indexPaths (index ));
146151 }
147152
148153 /**
@@ -153,7 +158,7 @@ List<IndexMetaData> loadIndicesStates(Predicate<String> excludeIndexPathIdsPredi
153158 for (String indexFolderName : nodeEnv .availableIndexFolders (excludeIndexPathIdsPredicate )) {
154159 assert excludeIndexPathIdsPredicate .test (indexFolderName ) == false :
155160 "unexpected folder " + indexFolderName + " which should have been excluded" ;
156- IndexMetaData indexMetaData = IndexMetaData . FORMAT .loadLatestState (logger , namedXContentRegistry ,
161+ IndexMetaData indexMetaData = INDEX_META_DATA_FORMAT .loadLatestState (logger , namedXContentRegistry ,
157162 nodeEnv .resolveIndexFolder (indexFolderName ));
158163 if (indexMetaData != null ) {
159164 final String indexPathId = indexMetaData .getIndex ().getUUID ();
@@ -173,7 +178,7 @@ List<IndexMetaData> loadIndicesStates(Predicate<String> excludeIndexPathIdsPredi
173178 * Loads Manifest file from disk, returns <code>Manifest.empty()</code> if there is no manifest file.
174179 */
175180 public Manifest loadManifestOrEmpty () throws IOException {
176- Manifest manifest = Manifest . FORMAT .loadLatestState (logger , namedXContentRegistry , nodeEnv .nodeDataPaths ());
181+ Manifest manifest = MANIFEST_FORMAT .loadLatestState (logger , namedXContentRegistry , nodeEnv .nodeDataPaths ());
177182 if (manifest == null ) {
178183 manifest = Manifest .empty ();
179184 }
@@ -184,7 +189,7 @@ public Manifest loadManifestOrEmpty() throws IOException {
184189 * Loads the global state, *without* index state, see {@link #loadFullState()} for that.
185190 */
186191 MetaData loadGlobalState () throws IOException {
187- return MetaData . FORMAT .loadLatestState (logger , namedXContentRegistry , nodeEnv .nodeDataPaths ());
192+ return META_DATA_FORMAT .loadLatestState (logger , namedXContentRegistry , nodeEnv .nodeDataPaths ());
188193 }
189194
190195 /**
@@ -195,7 +200,7 @@ MetaData loadGlobalState() throws IOException {
195200 public long writeManifest (String reason , Manifest manifest ) throws WriteStateException {
196201 logger .trace ("[_meta] writing state, reason [{}]" , reason );
197202 try {
198- long generation = Manifest . FORMAT .write (manifest , nodeEnv .nodeDataPaths ());
203+ long generation = MANIFEST_FORMAT .write (manifest , nodeEnv .nodeDataPaths ());
199204 logger .trace ("[_meta] state written (generation: {})" , generation );
200205 return generation ;
201206 } catch (WriteStateException ex ) {
@@ -215,7 +220,7 @@ public long writeIndex(String reason, IndexMetaData indexMetaData) throws WriteS
215220 final Index index = indexMetaData .getIndex ();
216221 logger .trace ("[{}] writing state, reason [{}]" , index , reason );
217222 try {
218- long generation = IndexMetaData . FORMAT .write (indexMetaData ,
223+ long generation = INDEX_META_DATA_FORMAT .write (indexMetaData ,
219224 nodeEnv .indexPaths (indexMetaData .getIndex ()));
220225 logger .trace ("[{}] state written" , index );
221226 return generation ;
@@ -233,7 +238,7 @@ public long writeIndex(String reason, IndexMetaData indexMetaData) throws WriteS
233238 long writeGlobalState (String reason , MetaData metaData ) throws WriteStateException {
234239 logger .trace ("[_global] writing state, reason [{}]" , reason );
235240 try {
236- long generation = MetaData . FORMAT .write (metaData , nodeEnv .nodeDataPaths ());
241+ long generation = META_DATA_FORMAT .write (metaData , nodeEnv .nodeDataPaths ());
237242 logger .trace ("[_global] state written" );
238243 return generation ;
239244 } catch (WriteStateException ex ) {
@@ -247,7 +252,7 @@ long writeGlobalState(String reason, MetaData metaData) throws WriteStateExcepti
247252 * @param currentGeneration current state generation to keep in the directory.
248253 */
249254 void cleanupGlobalState (long currentGeneration ) {
250- MetaData . FORMAT .cleanupOldFiles (currentGeneration , nodeEnv .nodeDataPaths ());
255+ META_DATA_FORMAT .cleanupOldFiles (currentGeneration , nodeEnv .nodeDataPaths ());
251256 }
252257
253258 /**
@@ -257,7 +262,7 @@ void cleanupGlobalState(long currentGeneration) {
257262 * @param currentGeneration current state generation to keep in the index directory.
258263 */
259264 public void cleanupIndex (Index index , long currentGeneration ) {
260- IndexMetaData . FORMAT .cleanupOldFiles (currentGeneration , nodeEnv .indexPaths (index ));
265+ INDEX_META_DATA_FORMAT .cleanupOldFiles (currentGeneration , nodeEnv .indexPaths (index ));
261266 }
262267
263268 /**
@@ -266,7 +271,7 @@ public void cleanupIndex(Index index, long currentGeneration) {
266271 * @param currentGeneration current state generation to keep in the directory.
267272 */
268273 public void cleanupManifest (long currentGeneration ) {
269- Manifest . FORMAT .cleanupOldFiles (currentGeneration , nodeEnv .nodeDataPaths ());
274+ MANIFEST_FORMAT .cleanupOldFiles (currentGeneration , nodeEnv .nodeDataPaths ());
270275 }
271276
272277 /**
0 commit comments