Skip to content

Commit f2e39e4

Browse files
committed
Auto import dangling indices, closes #2067.
1 parent 0745424 commit f2e39e4

13 files changed

+605
-142
lines changed

src/main/java/org/elasticsearch/cluster/block/ClusterBlocks.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.google.common.collect.ImmutableSet;
2424
import com.google.common.collect.Maps;
2525
import com.google.common.collect.Sets;
26+
import org.elasticsearch.cluster.metadata.IndexMetaData;
27+
import org.elasticsearch.cluster.metadata.MetaDataStateIndexService;
2628
import org.elasticsearch.common.io.stream.StreamInput;
2729
import org.elasticsearch.common.io.stream.StreamOutput;
2830
import org.elasticsearch.rest.RestStatus;
@@ -233,6 +235,25 @@ public Builder blocks(ClusterBlocks blocks) {
233235
return this;
234236
}
235237

238+
public Builder addBlocks(IndexMetaData indexMetaData) {
239+
if (indexMetaData.state() == IndexMetaData.State.CLOSE) {
240+
addIndexBlock(indexMetaData.index(), MetaDataStateIndexService.INDEX_CLOSED_BLOCK);
241+
}
242+
if (indexMetaData.settings().getAsBoolean(IndexMetaData.SETTING_READ_ONLY, false)) {
243+
addIndexBlock(indexMetaData.index(), IndexMetaData.INDEX_READ_ONLY_BLOCK);
244+
}
245+
if (indexMetaData.settings().getAsBoolean(IndexMetaData.SETTING_BLOCKS_READ, false)) {
246+
addIndexBlock(indexMetaData.index(), IndexMetaData.INDEX_READ_BLOCK);
247+
}
248+
if (indexMetaData.settings().getAsBoolean(IndexMetaData.SETTING_BLOCKS_WRITE, false)) {
249+
addIndexBlock(indexMetaData.index(), IndexMetaData.INDEX_WRITE_BLOCK);
250+
}
251+
if (indexMetaData.settings().getAsBoolean(IndexMetaData.SETTING_BLOCKS_METADATA, false)) {
252+
addIndexBlock(indexMetaData.index(), IndexMetaData.INDEX_METADATA_BLOCK);
253+
}
254+
return this;
255+
}
256+
236257
public Builder addGlobalBlock(ClusterBlock block) {
237258
global.add(block);
238259
return this;

src/main/java/org/elasticsearch/cluster/metadata/IndexMetaData.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,11 @@ public String index() {
410410
return index;
411411
}
412412

413+
public Builder index(String name) {
414+
this.index = index;
415+
return this;
416+
}
417+
413418
public Builder numberOfShards(int numberOfShards) {
414419
settings = settingsBuilder().put(settings).put(SETTING_NUMBER_OF_SHARDS, numberOfShards).build();
415420
return this;

src/main/java/org/elasticsearch/cluster/metadata/MetaDataCreateIndexService.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.elasticsearch.cluster.action.index.NodeIndexCreatedAction;
3232
import org.elasticsearch.cluster.block.ClusterBlock;
3333
import org.elasticsearch.cluster.block.ClusterBlocks;
34-
import org.elasticsearch.cluster.routing.IndexRoutingTable;
3534
import org.elasticsearch.cluster.routing.RoutingTable;
3635
import org.elasticsearch.cluster.routing.allocation.AllocationService;
3736
import org.elasticsearch.cluster.routing.allocation.RoutingAllocation;
@@ -319,10 +318,8 @@ public ClusterState execute(ClusterState currentState) {
319318
ClusterState updatedState = newClusterStateBuilder().state(currentState).blocks(blocks).metaData(newMetaData).build();
320319

321320
if (request.state == State.OPEN) {
322-
RoutingTable.Builder routingTableBuilder = RoutingTable.builder().routingTable(updatedState.routingTable());
323-
IndexRoutingTable.Builder indexRoutingBuilder = new IndexRoutingTable.Builder(request.index)
324-
.initializeEmpty(updatedState.metaData().index(request.index), true);
325-
routingTableBuilder.add(indexRoutingBuilder);
321+
RoutingTable.Builder routingTableBuilder = RoutingTable.builder().routingTable(updatedState.routingTable())
322+
.add(updatedState.metaData().index(request.index), true);
326323
RoutingAllocation.Result routingResult = allocationService.reroute(newClusterStateBuilder().state(updatedState).routingTable(routingTableBuilder).build());
327324
updatedState = newClusterStateBuilder().state(updatedState).routingResult(routingResult).build();
328325
}

src/main/java/org/elasticsearch/cluster/metadata/MetaDataStateIndexService.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.elasticsearch.cluster.block.ClusterBlock;
2626
import org.elasticsearch.cluster.block.ClusterBlockLevel;
2727
import org.elasticsearch.cluster.block.ClusterBlocks;
28-
import org.elasticsearch.cluster.routing.IndexRoutingTable;
2928
import org.elasticsearch.cluster.routing.RoutingTable;
3029
import org.elasticsearch.cluster.routing.allocation.AllocationService;
3130
import org.elasticsearch.cluster.routing.allocation.RoutingAllocation;
@@ -127,10 +126,8 @@ public ClusterState execute(ClusterState currentState) {
127126

128127
ClusterState updatedState = ClusterState.builder().state(currentState).metaData(mdBuilder).blocks(blocks).build();
129128

130-
RoutingTable.Builder rtBuilder = RoutingTable.builder().routingTable(updatedState.routingTable());
131-
IndexRoutingTable.Builder indexRoutingBuilder = new IndexRoutingTable.Builder(request.index)
132-
.initializeEmpty(updatedState.metaData().index(request.index), false);
133-
rtBuilder.add(indexRoutingBuilder);
129+
RoutingTable.Builder rtBuilder = RoutingTable.builder().routingTable(updatedState.routingTable())
130+
.add(updatedState.metaData().index(request.index), false);
134131

135132
RoutingAllocation.Result routingResult = allocationService.reroute(newClusterStateBuilder().state(updatedState).routingTable(rtBuilder).build());
136133

src/main/java/org/elasticsearch/cluster/routing/RoutingTable.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import com.google.common.collect.*;
2323
import org.elasticsearch.cluster.ClusterState;
24+
import org.elasticsearch.cluster.metadata.IndexMetaData;
2425
import org.elasticsearch.cluster.metadata.MetaData;
2526
import org.elasticsearch.common.io.stream.StreamInput;
2627
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -340,6 +341,15 @@ public Builder updateNumberOfReplicas(int numberOfReplicas, String... indices) t
340341
return this;
341342
}
342343

344+
public Builder add(IndexMetaData indexMetaData, boolean fromApi) {
345+
if (indexMetaData.state() == IndexMetaData.State.OPEN) {
346+
IndexRoutingTable.Builder indexRoutingBuilder = new IndexRoutingTable.Builder(indexMetaData.index())
347+
.initializeEmpty(indexMetaData, fromApi);
348+
add(indexRoutingBuilder);
349+
}
350+
return this;
351+
}
352+
343353
public Builder add(IndexRoutingTable indexRoutingTable) {
344354
indexRoutingTable.validate();
345355
indicesRouting.put(indexRoutingTable.index(), indexRoutingTable);

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

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@
2626
import org.elasticsearch.cluster.block.ClusterBlocks;
2727
import org.elasticsearch.cluster.metadata.IndexMetaData;
2828
import org.elasticsearch.cluster.metadata.MetaData;
29-
import org.elasticsearch.cluster.metadata.MetaDataStateIndexService;
3029
import org.elasticsearch.cluster.node.DiscoveryNodes;
31-
import org.elasticsearch.cluster.routing.IndexRoutingTable;
3230
import org.elasticsearch.cluster.routing.RoutingTable;
3331
import org.elasticsearch.cluster.routing.allocation.AllocationService;
3432
import org.elasticsearch.cluster.routing.allocation.RoutingAllocation;
@@ -256,21 +254,7 @@ public ClusterState execute(ClusterState currentState) {
256254

257255
for (IndexMetaData indexMetaData : recoveredState.metaData()) {
258256
metaDataBuilder.put(indexMetaData, false);
259-
if (indexMetaData.state() == IndexMetaData.State.CLOSE) {
260-
blocks.addIndexBlock(indexMetaData.index(), MetaDataStateIndexService.INDEX_CLOSED_BLOCK);
261-
}
262-
if (indexMetaData.settings().getAsBoolean(IndexMetaData.SETTING_READ_ONLY, false)) {
263-
blocks.addIndexBlock(indexMetaData.index(), IndexMetaData.INDEX_READ_ONLY_BLOCK);
264-
}
265-
if (indexMetaData.settings().getAsBoolean(IndexMetaData.SETTING_BLOCKS_READ, false)) {
266-
blocks.addIndexBlock(indexMetaData.index(), IndexMetaData.INDEX_READ_BLOCK);
267-
}
268-
if (indexMetaData.settings().getAsBoolean(IndexMetaData.SETTING_BLOCKS_WRITE, false)) {
269-
blocks.addIndexBlock(indexMetaData.index(), IndexMetaData.INDEX_WRITE_BLOCK);
270-
}
271-
if (indexMetaData.settings().getAsBoolean(IndexMetaData.SETTING_BLOCKS_METADATA, false)) {
272-
blocks.addIndexBlock(indexMetaData.index(), IndexMetaData.INDEX_METADATA_BLOCK);
273-
}
257+
blocks.addBlocks(indexMetaData);
274258
}
275259

276260
// update the state to reflect the new metadata and routing
@@ -282,11 +266,7 @@ public ClusterState execute(ClusterState currentState) {
282266
// initialize all index routing tables as empty
283267
RoutingTable.Builder routingTableBuilder = RoutingTable.builder().routingTable(updatedState.routingTable());
284268
for (IndexMetaData indexMetaData : updatedState.metaData().indices().values()) {
285-
if (indexMetaData.state() == IndexMetaData.State.OPEN) {
286-
IndexRoutingTable.Builder indexRoutingBuilder = new IndexRoutingTable.Builder(indexMetaData.index())
287-
.initializeEmpty(updatedState.metaData().index(indexMetaData.index()), false /*not from API*/);
288-
routingTableBuilder.add(indexRoutingBuilder);
289-
}
269+
routingTableBuilder.add(indexMetaData, false /* not from API */);
290270
}
291271
// start with 0 based versions for routing table
292272
routingTableBuilder.version(0);

src/main/java/org/elasticsearch/gateway/local/LocalGatewayModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.elasticsearch.common.inject.Module;
2525
import org.elasticsearch.common.inject.PreProcessModule;
2626
import org.elasticsearch.gateway.Gateway;
27+
import org.elasticsearch.gateway.local.state.meta.LocalAllocateDangledIndices;
2728
import org.elasticsearch.gateway.local.state.meta.LocalGatewayMetaState;
2829
import org.elasticsearch.gateway.local.state.meta.TransportNodesListGatewayMetaState;
2930
import org.elasticsearch.gateway.local.state.shards.LocalGatewayShardsState;
@@ -41,6 +42,7 @@ protected void configure() {
4142
bind(TransportNodesListGatewayMetaState.class).asEagerSingleton();
4243
bind(LocalGatewayMetaState.class).asEagerSingleton();
4344
bind(TransportNodesListGatewayStartedShards.class).asEagerSingleton();
45+
bind(LocalAllocateDangledIndices.class).asEagerSingleton();
4446
}
4547

4648
@Override

0 commit comments

Comments
 (0)