@@ -80,16 +80,20 @@ public void start(Settings settings, TransportService transportService, ClusterS
8080
8181 if (DiscoveryNode .isMasterNode (settings ) || DiscoveryNode .isDataNode (settings )) {
8282 try {
83- LucenePersistedStateFactory .OnDiskState onDiskState = lucenePersistedStateFactory .loadBestOnDiskState ();
83+ final LucenePersistedStateFactory .OnDiskState onDiskState = lucenePersistedStateFactory .loadBestOnDiskState ();
8484
85- if (onDiskState == LucenePersistedStateFactory .NO_ON_DISK_STATE ) {
85+ MetaData metaData = onDiskState .metaData ;
86+ long lastAcceptedVersion = onDiskState .lastAcceptedVersion ;
87+ long currentTerm = onDiskState .currentTerm ;
88+
89+ if (onDiskState .empty () == false ) {
8690 assert Version .CURRENT .major <= Version .V_7_0_0 .major + 1 :
8791 "legacy metadata loader is not needed anymore from v9 onwards" ;
8892 final Tuple <Manifest , MetaData > legacyState = metaStateService .loadFullState ();
8993 if (legacyState .v1 ().isEmpty () == false ) {
90- onDiskState = new LucenePersistedStateFactory . OnDiskState ( lucenePersistedStateFactory . getNodeId (),
91- null , legacyState .v1 ().getCurrentTerm (),
92- legacyState .v1 ().getClusterStateVersion (), legacyState . v2 () );
94+ metaData = legacyState . v2 ();
95+ lastAcceptedVersion = legacyState .v1 ().getClusterStateVersion ();
96+ currentTerm = legacyState .v1 ().getCurrentTerm ( );
9397 }
9498 }
9599
@@ -99,19 +103,19 @@ public void start(Settings settings, TransportService transportService, ClusterS
99103 try {
100104 final ClusterState clusterState = prepareInitialClusterState (transportService , clusterService ,
101105 ClusterState .builder (ClusterName .CLUSTER_NAME_SETTING .get (settings ))
102- .version (onDiskState . lastAcceptedVersion )
103- .metaData (upgradeMetaDataForNode (onDiskState . metaData , metaDataIndexUpgradeService , metaDataUpgrader ))
106+ .version (lastAcceptedVersion )
107+ .metaData (upgradeMetaDataForNode (metaData , metaDataIndexUpgradeService , metaDataUpgrader ))
104108 .build ());
105109 lucenePersistedState = new LucenePersistedStateFactory .LucenePersistedState (
106- persistenceWriter , onDiskState . currentTerm , clusterState );
110+ persistenceWriter , currentTerm , clusterState );
107111 // Write the whole state out to be sure it's fresh and using the latest format. Called during initialisation, so that
108112 // (1) throwing an IOException is enough to halt the node, and
109113 // (2) the index is currently empty since it was opened with IndexWriterConfig.OpenMode.CREATE
110114
111115 // In the common case it's actually sufficient to commit() the existing state and not do any indexing. For instance,
112116 // this is true if there's only one data path on this master node, and the commit we just loaded was already written out
113117 // by this version of Elasticsearch. TODO TBD should we avoid indexing when possible?
114- persistenceWriter .writeFullStateAndCommit (onDiskState . currentTerm , clusterState );
118+ persistenceWriter .writeFullStateAndCommit (currentTerm , clusterState );
115119 metaStateService .deleteAll (); // delete legacy files
116120 success = true ;
117121 } finally {
0 commit comments