Skip to content

Commit 30bd026

Browse files
committed
Refactoring of Gateway*** classes (#26706)
- Removes mutual dependency between GatewayMetaState and TransportNodesListGatewayMetaState - Deguices MetaDataIndexUpgradeService - Deguices GatewayMetaState - Makes Gateway the master-level component that is only responsible for coordinating the state recovery
1 parent 5db7682 commit 30bd026

File tree

9 files changed

+21
-40
lines changed

9 files changed

+21
-40
lines changed

core/src/main/java/org/elasticsearch/cluster/metadata/MetaDataIndexUpgradeService.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@
1818
*/
1919
package org.elasticsearch.cluster.metadata;
2020

21-
import com.carrotsearch.hppc.cursors.ObjectCursor;
2221
import org.apache.logging.log4j.message.ParameterizedMessage;
2322
import org.apache.logging.log4j.util.Supplier;
2423
import org.apache.lucene.analysis.Analyzer;
2524
import org.elasticsearch.Version;
2625
import org.elasticsearch.common.component.AbstractComponent;
27-
import org.elasticsearch.common.inject.Inject;
2826
import org.elasticsearch.common.settings.IndexScopedSettings;
2927
import org.elasticsearch.common.settings.Settings;
3028
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
@@ -35,7 +33,6 @@
3533
import org.elasticsearch.index.mapper.MapperService;
3634
import org.elasticsearch.index.similarity.SimilarityService;
3735
import org.elasticsearch.indices.mapper.MapperRegistry;
38-
import org.elasticsearch.plugins.Plugin;
3936

4037
import java.util.AbstractMap;
4138
import java.util.Collection;
@@ -59,7 +56,6 @@ public class MetaDataIndexUpgradeService extends AbstractComponent {
5956
private final IndexScopedSettings indexScopedSettings;
6057
private final UnaryOperator<IndexMetaData> upgraders;
6158

62-
@Inject
6359
public MetaDataIndexUpgradeService(Settings settings, NamedXContentRegistry xContentRegistry, MapperRegistry mapperRegistry,
6460
IndexScopedSettings indexScopedSettings,
6561
Collection<UnaryOperator<IndexMetaData>> indexMetaDataUpgraders) {

core/src/main/java/org/elasticsearch/gateway/Gateway.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@
2323
import com.carrotsearch.hppc.cursors.ObjectCursor;
2424
import org.apache.logging.log4j.message.ParameterizedMessage;
2525
import org.elasticsearch.action.FailedNodeException;
26-
import org.elasticsearch.cluster.ClusterChangedEvent;
2726
import org.elasticsearch.cluster.ClusterState;
28-
import org.elasticsearch.cluster.ClusterStateApplier;
2927
import org.elasticsearch.cluster.metadata.IndexMetaData;
3028
import org.elasticsearch.cluster.metadata.MetaData;
3129
import org.elasticsearch.cluster.service.ClusterService;
@@ -39,27 +37,23 @@
3937
import java.util.Arrays;
4038
import java.util.Map;
4139

42-
public class Gateway extends AbstractComponent implements ClusterStateApplier {
40+
public class Gateway extends AbstractComponent {
4341

4442
private final ClusterService clusterService;
4543

46-
private final GatewayMetaState metaState;
47-
4844
private final TransportNodesListGatewayMetaState listGatewayMetaState;
4945

5046
private final int minimumMasterNodes;
5147
private final IndicesService indicesService;
5248

53-
public Gateway(Settings settings, ClusterService clusterService, GatewayMetaState metaState,
49+
public Gateway(Settings settings, ClusterService clusterService,
5450
TransportNodesListGatewayMetaState listGatewayMetaState,
5551
IndicesService indicesService) {
5652
super(settings);
5753
this.indicesService = indicesService;
5854
this.clusterService = clusterService;
59-
this.metaState = metaState;
6055
this.listGatewayMetaState = listGatewayMetaState;
6156
this.minimumMasterNodes = ElectMasterService.DISCOVERY_ZEN_MINIMUM_MASTER_NODES_SETTING.get(settings);
62-
clusterService.addLowPriorityApplier(this);
6357
}
6458

6559
public void performStateRecovery(final GatewayStateRecoveredListener listener) throws GatewayException {
@@ -174,13 +168,6 @@ private void logInvalidSetting(String settingType, Map.Entry<String, String> e,
174168
ex);
175169
}
176170

177-
@Override
178-
public void applyClusterState(final ClusterChangedEvent event) {
179-
// order is important, first metaState, and then shardsState
180-
// so dangling indices will be recorded
181-
metaState.applyClusterState(event);
182-
}
183-
184171
public interface GatewayStateRecoveredListener {
185172
void onSuccess(ClusterState build);
186173

core/src/main/java/org/elasticsearch/gateway/GatewayMetaState.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.elasticsearch.common.Nullable;
3434
import org.elasticsearch.common.collect.ImmutableOpenMap;
3535
import org.elasticsearch.common.component.AbstractComponent;
36-
import org.elasticsearch.common.inject.Inject;
3736
import org.elasticsearch.common.settings.Settings;
3837
import org.elasticsearch.common.unit.TimeValue;
3938
import org.elasticsearch.common.util.IndexFolderUpgrader;
@@ -69,15 +68,11 @@ public class GatewayMetaState extends AbstractComponent implements ClusterStateA
6968

7069
private volatile Set<Index> previouslyWrittenIndices = emptySet();
7170

72-
@Inject
7371
public GatewayMetaState(Settings settings, NodeEnvironment nodeEnv, MetaStateService metaStateService,
74-
TransportNodesListGatewayMetaState nodesListGatewayMetaState,
75-
MetaDataIndexUpgradeService metaDataIndexUpgradeService, MetaDataUpgrader metaDataUpgrader)
76-
throws Exception {
72+
MetaDataIndexUpgradeService metaDataIndexUpgradeService, MetaDataUpgrader metaDataUpgrader) throws IOException {
7773
super(settings);
7874
this.nodeEnv = nodeEnv;
7975
this.metaStateService = metaStateService;
80-
nodesListGatewayMetaState.init(this);
8176

8277
if (DiscoveryNode.isDataNode(settings)) {
8378
ensureNoPre019ShardState(nodeEnv);
@@ -210,7 +205,7 @@ protected static boolean isDataOnlyNode(ClusterState state) {
210205
/**
211206
* Throws an IAE if a pre 0.19 state is detected
212207
*/
213-
private void ensureNoPre019State() throws Exception {
208+
private void ensureNoPre019State() throws IOException {
214209
for (Path dataLocation : nodeEnv.nodeDataPaths()) {
215210
final Path stateLocation = dataLocation.resolve(MetaDataStateFormat.STATE_DIR_NAME);
216211
if (!Files.exists(stateLocation)) {
@@ -242,7 +237,7 @@ private void ensureNoPre019State() throws Exception {
242237
*/
243238
static MetaData upgradeMetaData(MetaData metaData,
244239
MetaDataIndexUpgradeService metaDataIndexUpgradeService,
245-
MetaDataUpgrader metaDataUpgrader) throws Exception {
240+
MetaDataUpgrader metaDataUpgrader) throws IOException {
246241
// upgrade index meta data
247242
boolean changed = false;
248243
final MetaData.Builder upgradedMetaData = MetaData.builder(metaData);
@@ -288,7 +283,7 @@ private static <Data> boolean applyPluginUpgraders(ImmutableOpenMap<String, Data
288283
}
289284

290285
// shard state BWC
291-
private void ensureNoPre019ShardState(NodeEnvironment nodeEnv) throws Exception {
286+
private void ensureNoPre019ShardState(NodeEnvironment nodeEnv) throws IOException {
292287
for (Path dataLocation : nodeEnv.nodeDataPaths()) {
293288
final Path stateLocation = dataLocation.resolve(MetaDataStateFormat.STATE_DIR_NAME);
294289
if (Files.exists(stateLocation)) {

core/src/main/java/org/elasticsearch/gateway/GatewayModule.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ protected void configure() {
3030
bind(DanglingIndicesState.class).asEagerSingleton();
3131
bind(GatewayService.class).asEagerSingleton();
3232
bind(TransportNodesListGatewayMetaState.class).asEagerSingleton();
33-
bind(GatewayMetaState.class).asEagerSingleton();
3433
bind(TransportNodesListGatewayStartedShards.class).asEagerSingleton();
3534
bind(LocalAllocateDangledIndices.class).asEagerSingleton();
3635
}

core/src/main/java/org/elasticsearch/gateway/GatewayService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public GatewayService(Settings settings, AllocationService allocationService, Cl
9595
TransportNodesListGatewayMetaState listGatewayMetaState,
9696
IndicesService indicesService) {
9797
super(settings);
98-
this.gateway = new Gateway(settings, clusterService, metaState, listGatewayMetaState,
98+
this.gateway = new Gateway(settings, clusterService, listGatewayMetaState,
9999
indicesService);
100100
this.allocationService = allocationService;
101101
this.clusterService = clusterService;
@@ -121,6 +121,8 @@ public GatewayService(Settings settings, AllocationService allocationService, Cl
121121
// TODO: change me once the minimum_master_nodes is changed too
122122
recoverAfterMasterNodes = settings.getAsInt("discovery.zen.minimum_master_nodes", -1);
123123
}
124+
125+
clusterService.addLowPriorityApplier(metaState);
124126
}
125127

126128
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public void writeIndex(String reason, IndexMetaData indexMetaData) throws IOExce
133133
/**
134134
* Writes the global state, *without* the indices states.
135135
*/
136-
void writeGlobalState(String reason, MetaData metaData) throws Exception {
136+
void writeGlobalState(String reason, MetaData metaData) throws IOException {
137137
logger.trace("[_global] writing state, reason [{}]", reason);
138138
try {
139139
MetaData.FORMAT.write(metaData, nodeEnv.nodeDataPaths());

core/src/main/java/org/elasticsearch/gateway/TransportNodesListGatewayMetaState.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,16 @@ public class TransportNodesListGatewayMetaState extends TransportNodesAction<Tra
5252

5353
public static final String ACTION_NAME = "internal:gateway/local/meta_state";
5454

55-
private GatewayMetaState metaState;
55+
private final GatewayMetaState metaState;
5656

5757
@Inject
5858
public TransportNodesListGatewayMetaState(Settings settings, ThreadPool threadPool,
5959
ClusterService clusterService, TransportService transportService,
60-
ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver) {
60+
ActionFilters actionFilters, IndexNameExpressionResolver indexNameExpressionResolver,
61+
GatewayMetaState metaState) {
6162
super(settings, ACTION_NAME, threadPool, clusterService, transportService, actionFilters,
6263
indexNameExpressionResolver, Request::new, NodeRequest::new, ThreadPool.Names.GENERIC, NodeGatewayMetaState.class);
63-
}
64-
65-
TransportNodesListGatewayMetaState init(GatewayMetaState metaState) {
6664
this.metaState = metaState;
67-
return this;
6865
}
6966

7067
public ActionFuture<NodesGatewayMetaState> list(String[] nodesIds, @Nullable TimeValue timeout) {

core/src/main/java/org/elasticsearch/node/Node.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
import org.elasticsearch.indices.breaker.HierarchyCircuitBreakerService;
101101
import org.elasticsearch.indices.breaker.NoneCircuitBreakerService;
102102
import org.elasticsearch.indices.cluster.IndicesClusterStateService;
103+
import org.elasticsearch.indices.mapper.MapperRegistry;
103104
import org.elasticsearch.indices.recovery.PeerRecoverySourceService;
104105
import org.elasticsearch.indices.recovery.PeerRecoveryTargetService;
105106
import org.elasticsearch.indices.recovery.RecoverySettings;
@@ -416,6 +417,10 @@ protected Node(final Environment environment, Collection<Class<? extends Plugin>
416417
Collection<UnaryOperator<IndexMetaData>> indexMetaDataUpgraders = pluginsService.filterPlugins(Plugin.class).stream()
417418
.map(Plugin::getIndexMetaDataUpgrader).collect(Collectors.toList());
418419
final MetaDataUpgrader metaDataUpgrader = new MetaDataUpgrader(customMetaDataUpgraders, indexTemplateMetaDataUpgraders);
420+
final MetaDataIndexUpgradeService metaDataIndexUpgradeService = new MetaDataIndexUpgradeService(settings, xContentRegistry,
421+
indicesModule.getMapperRegistry(), settingsModule.getIndexScopedSettings(), indexMetaDataUpgraders);
422+
final GatewayMetaState gatewayMetaState = new GatewayMetaState(settings, nodeEnvironment, metaStateService,
423+
metaDataIndexUpgradeService, metaDataUpgrader);
419424
new TemplateUpgradeService(settings, client, clusterService, threadPool, indexTemplateMetaDataUpgraders);
420425
final Transport transport = networkModule.getTransportSupplier().get();
421426
final TransportService transportService = newTransportService(settings, transport, threadPool,
@@ -475,9 +480,9 @@ protected Node(final Environment environment, Collection<Class<? extends Plugin>
475480
b.bind(TransportService.class).toInstance(transportService);
476481
b.bind(NetworkService.class).toInstance(networkService);
477482
b.bind(UpdateHelper.class).toInstance(new UpdateHelper(settings, scriptModule.getScriptService()));
478-
b.bind(MetaDataIndexUpgradeService.class).toInstance(new MetaDataIndexUpgradeService(settings, xContentRegistry,
479-
indicesModule.getMapperRegistry(), settingsModule.getIndexScopedSettings(), indexMetaDataUpgraders));
483+
b.bind(MetaDataIndexUpgradeService.class).toInstance(metaDataIndexUpgradeService);
480484
b.bind(ClusterInfoService.class).toInstance(clusterInfoService);
485+
b.bind(GatewayMetaState.class).toInstance(gatewayMetaState);
481486
b.bind(Discovery.class).toInstance(discoveryModule.getDiscovery());
482487
{
483488
RecoverySettings recoverySettings = new RecoverySettings(settings, settingsModule.getClusterSettings());

core/src/test/java/org/elasticsearch/bwcompat/RecoveryWithUnsupportedIndicesIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void testUpgradeStartClusterOn_0_20_6() throws Exception {
9191
internalCluster().startNode(nodeSettings);
9292
fail();
9393
} catch (Exception ex) {
94-
assertThat(ex.getMessage(), containsString(" was created before v2.0.0.beta1 and wasn't upgraded"));
94+
assertThat(ex.getCause().getCause().getMessage(), containsString(" was created before v2.0.0.beta1 and wasn't upgraded"));
9595
}
9696
}
9797
}

0 commit comments

Comments
 (0)