Skip to content

Commit a6dddc8

Browse files
author
Andrey Ershov
committed
Allow subclasses to override formats used in MetaStateService
1 parent bbab85a commit a6dddc8

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

server/src/main/java/org/elasticsearch/gateway/MetaStateService.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)