Browse Source

Fixed close index when the index is already closed

Closes #3601
Luca Cavanna 12 years ago
parent
commit
38be478c46

+ 6 - 6
src/main/java/org/elasticsearch/cluster/metadata/MetaDataIndexStateService.java

@@ -96,14 +96,14 @@ public class MetaDataIndexStateService extends AbstractComponent {
                     if (indexMetaData == null) {
                         throw new IndexMissingException(new Index(index));
                     }
-                    IndexRoutingTable indexRoutingTable = currentState.routingTable().index(index);
-                    for (IndexShardRoutingTable shard : indexRoutingTable) {
-                        if (!shard.primaryAllocatedPostApi()) {
-                            throw new IndexPrimaryShardNotAllocatedException(new Index(index));
-                        }
-                    }
 
                     if (indexMetaData.state() != IndexMetaData.State.CLOSE) {
+                        IndexRoutingTable indexRoutingTable = currentState.routingTable().index(index);
+                        for (IndexShardRoutingTable shard : indexRoutingTable) {
+                            if (!shard.primaryAllocatedPostApi()) {
+                                throw new IndexPrimaryShardNotAllocatedException(new Index(index));
+                            }
+                        }
                         indicesToClose.add(index);
                     }
                 }

+ 3 - 3
src/test/java/org/elasticsearch/test/integration/indices/state/OpenCloseIndexTests.java

@@ -227,9 +227,9 @@ public class OpenCloseIndexTests extends AbstractSharedClusterTest {
         assertIndexIsClosed("test1");
 
         //no problem if we try to close an index that's already in close state
-        OpenIndexResponse openIndexResponse1 = client.admin().indices().prepareOpen("test1").execute().actionGet();
-        assertThat(openIndexResponse1.isAcknowledged(), equalTo(true));
-        assertIndexIsOpened("test1");
+        closeIndexResponse = client.admin().indices().prepareClose("test1").execute().actionGet();
+        assertThat(closeIndexResponse.isAcknowledged(), equalTo(true));
+        assertIndexIsClosed("test1");
     }
 
     @Test