1212import org .apache .logging .log4j .LogManager ;
1313import org .apache .logging .log4j .Logger ;
1414import org .elasticsearch .Version ;
15- import org .elasticsearch .cluster .metadata .IndexGraveyard ;
1615import org .elasticsearch .cluster .metadata .IndexMetadata ;
1716import org .elasticsearch .cluster .metadata .Manifest ;
1817import org .elasticsearch .cluster .metadata .Metadata ;
1918import org .elasticsearch .core .Nullable ;
20- import org .elasticsearch .core .Tuple ;
21- import org .elasticsearch .core .UpdateForV9 ;
2219import org .elasticsearch .env .NodeEnvironment ;
2320import org .elasticsearch .index .Index ;
2421import org .elasticsearch .xcontent .NamedXContentRegistry ;
2522
2623import java .io .IOException ;
2724import java .util .ArrayList ;
28- import java .util .HashMap ;
2925import java .util .List ;
30- import java .util .Map ;
3126import java .util .function .Predicate ;
3227
3328/**
@@ -45,118 +40,6 @@ public MetaStateService(NodeEnvironment nodeEnv, NamedXContentRegistry namedXCon
4540 this .namedXContentRegistry = namedXContentRegistry ;
4641 }
4742
48- /**
49- * Loads the full state, which includes both the global state and all the indices meta data. <br>
50- * When loading, manifest file is consulted (represented by {@link Manifest} class), to load proper generations. <br>
51- * If there is no manifest file on disk, this method fallbacks to BWC mode, where latest generation of global and indices
52- * metadata is loaded. Please note that currently there is no way to distinguish between manifest file being removed and manifest
53- * file was not yet created. It means that this method always fallbacks to BWC mode, if there is no manifest file.
54- *
55- * @return tuple of {@link Manifest} and {@link Metadata} with global metadata and indices metadata. If there is no state on disk,
56- * meta state with globalGeneration -1 and empty meta data is returned.
57- * @throws IOException if some IOException when loading files occurs or there is no metadata referenced by manifest file.
58- */
59- @ UpdateForV9 (owner = UpdateForV9 .Owner .DISTRIBUTED_COORDINATION )
60- public Tuple <Manifest , Metadata > loadFullState () throws IOException {
61- final Manifest manifest = Manifest .FORMAT .loadLatestState (logger , namedXContentRegistry , nodeEnv .nodeDataPaths ());
62- if (manifest == null ) {
63- return loadFullStateBWC ();
64- }
65-
66- final Metadata .Builder metadataBuilder ;
67- if (manifest .isGlobalGenerationMissing ()) {
68- metadataBuilder = Metadata .builder ();
69- } else {
70- final Metadata globalMetadata = Metadata .FORMAT .loadGeneration (
71- logger ,
72- namedXContentRegistry ,
73- manifest .globalGeneration (),
74- nodeEnv .nodeDataPaths ()
75- );
76- if (globalMetadata != null ) {
77- metadataBuilder = Metadata .builder (globalMetadata );
78- } else {
79- throw new IOException ("failed to find global metadata [generation: " + manifest .globalGeneration () + "]" );
80- }
81- }
82-
83- for (Map .Entry <Index , Long > entry : manifest .indexGenerations ().entrySet ()) {
84- final Index index = entry .getKey ();
85- final long generation = entry .getValue ();
86- final String indexFolderName = index .getUUID ();
87- final IndexMetadata indexMetadata = IndexMetadata .FORMAT .loadGeneration (
88- logger ,
89- namedXContentRegistry ,
90- generation ,
91- nodeEnv .resolveIndexFolder (indexFolderName )
92- );
93- if (indexMetadata != null ) {
94- metadataBuilder .put (indexMetadata , false );
95- } else {
96- throw new IOException (
97- "failed to find metadata for existing index "
98- + index .getName ()
99- + " [location: "
100- + indexFolderName
101- + ", generation: "
102- + generation
103- + "]"
104- );
105- }
106- }
107-
108- return new Tuple <>(manifest , metadataBuilder .build ());
109- }
110-
111- /**
112- * "Manifest-less" BWC version of loading metadata from disk. See also {@link #loadFullState()}
113- */
114- private Tuple <Manifest , Metadata > loadFullStateBWC () throws IOException {
115- Map <Index , Long > indices = new HashMap <>();
116- Metadata .Builder metadataBuilder ;
117-
118- Tuple <Metadata , Long > metadataAndGeneration = Metadata .FORMAT .loadLatestStateWithGeneration (
119- logger ,
120- namedXContentRegistry ,
121- nodeEnv .nodeDataPaths ()
122- );
123- Metadata globalMetadata = metadataAndGeneration .v1 ();
124- long globalStateGeneration = metadataAndGeneration .v2 ();
125-
126- final IndexGraveyard indexGraveyard ;
127- if (globalMetadata != null ) {
128- metadataBuilder = Metadata .builder (globalMetadata );
129- indexGraveyard = globalMetadata .custom (IndexGraveyard .TYPE );
130- } else {
131- metadataBuilder = Metadata .builder ();
132- indexGraveyard = IndexGraveyard .builder ().build ();
133- }
134-
135- for (String indexFolderName : nodeEnv .availableIndexFolders ()) {
136- Tuple <IndexMetadata , Long > indexMetadataAndGeneration = IndexMetadata .FORMAT .loadLatestStateWithGeneration (
137- logger ,
138- namedXContentRegistry ,
139- nodeEnv .resolveIndexFolder (indexFolderName )
140- );
141- IndexMetadata indexMetadata = indexMetadataAndGeneration .v1 ();
142- long generation = indexMetadataAndGeneration .v2 ();
143- if (indexMetadata != null ) {
144- if (indexGraveyard .containsIndex (indexMetadata .getIndex ())) {
145- logger .debug ("[{}] found metadata for deleted index [{}]" , indexFolderName , indexMetadata .getIndex ());
146- // this index folder is cleared up when state is recovered
147- } else {
148- indices .put (indexMetadata .getIndex (), generation );
149- metadataBuilder .put (indexMetadata , false );
150- }
151- } else {
152- logger .debug ("[{}] failed to find metadata for existing index location" , indexFolderName );
153- }
154- }
155-
156- Manifest manifest = Manifest .unknownCurrentTermAndVersion (globalStateGeneration , indices );
157- return new Tuple <>(manifest , metadataBuilder .build ());
158- }
159-
16043 /**
16144 * Loads the index state for the provided index name, returning null if doesn't exists.
16245 */
@@ -193,7 +76,7 @@ List<IndexMetadata> loadIndicesStates(Predicate<String> excludeIndexPathIdsPredi
19376 }
19477
19578 /**
196- * Loads the global state, *without* index state, see {@link #loadFullState()} for that.
79+ * Loads the global state, *without* index state
19780 */
19881 Metadata loadGlobalState () throws IOException {
19982 return Metadata .FORMAT .loadLatestState (logger , namedXContentRegistry , nodeEnv .nodeDataPaths ());
0 commit comments