3030import org .elasticsearch .cluster .metadata .IndexMetaData ;
3131import org .elasticsearch .cluster .metadata .Manifest ;
3232import org .elasticsearch .cluster .metadata .MetaData ;
33+ import org .elasticsearch .cluster .metadata .MetaDataIndexStateService ;
3334import org .elasticsearch .cluster .node .DiscoveryNode ;
3435import org .elasticsearch .cluster .node .DiscoveryNodeRole ;
3536import org .elasticsearch .cluster .node .DiscoveryNodes ;
7374
7475public class IncrementalClusterStateWriterTests extends ESAllocationTestCase {
7576
76- private ClusterState noIndexClusterState (boolean masterEligible ) {
77- MetaData metaData = MetaData .builder ().build ();
78- RoutingTable routingTable = RoutingTable .builder ().build ();
79-
80- return ClusterState .builder (org .elasticsearch .cluster .ClusterName .CLUSTER_NAME_SETTING .getDefault (Settings .EMPTY ))
81- .metaData (metaData )
82- .routingTable (routingTable )
83- .nodes (generateDiscoveryNodes (masterEligible ))
84- .build ();
85- }
86-
8777 private ClusterState clusterStateWithUnassignedIndex (IndexMetaData indexMetaData , boolean masterEligible ) {
8878 MetaData metaData = MetaData .builder ()
8979 .put (indexMetaData , false )
@@ -119,7 +109,7 @@ private ClusterState clusterStateWithAssignedIndex(IndexMetaData indexMetaData,
119109 .metaData (metaDataNewClusterState ).version (oldClusterState .getVersion () + 1 ).build ();
120110 }
121111
122- private ClusterState clusterStateWithClosedIndex (IndexMetaData indexMetaData , boolean masterEligible ) {
112+ private ClusterState clusterStateWithNonReplicatedClosedIndex (IndexMetaData indexMetaData , boolean masterEligible ) {
123113 ClusterState oldClusterState = clusterStateWithAssignedIndex (indexMetaData , masterEligible );
124114
125115 MetaData metaDataNewClusterState = MetaData .builder ()
@@ -128,23 +118,41 @@ private ClusterState clusterStateWithClosedIndex(IndexMetaData indexMetaData, bo
128118 .version (oldClusterState .metaData ().version () + 1 )
129119 .build ();
130120 RoutingTable routingTable = RoutingTable .builder ()
131- .addAsNew (metaDataNewClusterState .index ("test" ))
121+ .addAsRecovery (metaDataNewClusterState .index ("test" ))
132122 .build ();
133123
134124 return ClusterState .builder (oldClusterState ).routingTable (routingTable )
135125 .metaData (metaDataNewClusterState ).version (oldClusterState .getVersion () + 1 ).build ();
136126 }
137127
138- private ClusterState clusterStateWithJustOpenedIndex (IndexMetaData indexMetaData , boolean masterEligible ) {
139- ClusterState oldClusterState = clusterStateWithClosedIndex (indexMetaData , masterEligible );
128+ private ClusterState clusterStateWithReplicatedClosedIndex (IndexMetaData indexMetaData , boolean masterEligible , boolean assigned ) {
129+ ClusterState oldClusterState = clusterStateWithAssignedIndex (indexMetaData , masterEligible );
140130
141131 MetaData metaDataNewClusterState = MetaData .builder ()
142- .put (IndexMetaData .builder ("test" ).settings (settings (Version .CURRENT )).state (IndexMetaData .State .OPEN )
132+ .put (IndexMetaData .builder ("test" ).settings (settings (Version .CURRENT )
133+ .put (MetaDataIndexStateService .VERIFIED_BEFORE_CLOSE_SETTING .getKey (), true ))
134+ .state (IndexMetaData .State .CLOSE )
143135 .numberOfShards (5 ).numberOfReplicas (2 ))
144136 .version (oldClusterState .metaData ().version () + 1 )
145137 .build ();
138+ RoutingTable routingTable = RoutingTable .builder ()
139+ .addAsRecovery (metaDataNewClusterState .index ("test" ))
140+ .build ();
141+
142+ oldClusterState = ClusterState .builder (oldClusterState ).routingTable (routingTable )
143+ .metaData (metaDataNewClusterState ).build ();
144+ if (assigned ) {
145+ AllocationService strategy = createAllocationService (Settings .builder ()
146+ .put ("cluster.routing.allocation.node_concurrent_recoveries" , 100 )
147+ .put (ClusterRebalanceAllocationDecider .CLUSTER_ROUTING_ALLOCATION_ALLOW_REBALANCE_SETTING .getKey (), "always" )
148+ .put ("cluster.routing.allocation.cluster_concurrent_rebalance" , 100 )
149+ .put ("cluster.routing.allocation.node_initial_primaries_recoveries" , 100 )
150+ .build ());
151+
152+ routingTable = strategy .reroute (oldClusterState , "reroute" ).routingTable ();
153+ }
146154
147- return ClusterState .builder (oldClusterState )
155+ return ClusterState .builder (oldClusterState ). routingTable ( routingTable )
148156 .metaData (metaDataNewClusterState ).version (oldClusterState .getVersion () + 1 ).build ();
149157 }
150158
@@ -154,14 +162,6 @@ private DiscoveryNodes.Builder generateDiscoveryNodes(boolean masterEligible) {
154162 .add (newNode ("master_node" , MASTER_DATA_ROLES )).localNodeId ("node1" ).masterNodeId (masterEligible ? "node1" : "master_node" );
155163 }
156164
157- private Set <Index > randomPrevWrittenIndices (IndexMetaData indexMetaData ) {
158- if (randomBoolean ()) {
159- return Collections .singleton (indexMetaData .getIndex ());
160- } else {
161- return Collections .emptySet ();
162- }
163- }
164-
165165 private IndexMetaData createIndexMetaData (String name ) {
166166 return IndexMetaData .builder (name ).
167167 settings (settings (Version .CURRENT )).
@@ -172,56 +172,41 @@ private IndexMetaData createIndexMetaData(String name) {
172172
173173 public void testGetRelevantIndicesWithUnassignedShardsOnMasterEligibleNode () {
174174 IndexMetaData indexMetaData = createIndexMetaData ("test" );
175- Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (
176- clusterStateWithUnassignedIndex (indexMetaData , true ),
177- noIndexClusterState (true ),
178- randomPrevWrittenIndices (indexMetaData ));
175+ Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (clusterStateWithUnassignedIndex (indexMetaData , true ));
179176 assertThat (indices .size (), equalTo (1 ));
180177 }
181178
182179 public void testGetRelevantIndicesWithUnassignedShardsOnDataOnlyNode () {
183180 IndexMetaData indexMetaData = createIndexMetaData ("test" );
184- Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (
185- clusterStateWithUnassignedIndex (indexMetaData , false ),
186- noIndexClusterState (false ),
187- randomPrevWrittenIndices (indexMetaData ));
181+ Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (clusterStateWithUnassignedIndex (indexMetaData , false ));
188182 assertThat (indices .size (), equalTo (0 ));
189183 }
190184
191185 public void testGetRelevantIndicesWithAssignedShards () {
192186 IndexMetaData indexMetaData = createIndexMetaData ("test" );
193187 boolean masterEligible = randomBoolean ();
194- Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (
195- clusterStateWithAssignedIndex (indexMetaData , masterEligible ),
196- clusterStateWithUnassignedIndex (indexMetaData , masterEligible ),
197- randomPrevWrittenIndices (indexMetaData ));
188+ Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (clusterStateWithAssignedIndex (indexMetaData , masterEligible ));
198189 assertThat (indices .size (), equalTo (1 ));
199190 }
200191
201- public void testGetRelevantIndicesForClosedPrevWrittenIndexOnDataOnlyNode () {
192+ public void testGetRelevantIndicesForNonReplicatedClosedIndexOnDataOnlyNode () {
202193 IndexMetaData indexMetaData = createIndexMetaData ("test" );
203194 Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (
204- clusterStateWithClosedIndex (indexMetaData , false ),
205- clusterStateWithAssignedIndex (indexMetaData , false ),
206- Collections .singleton (indexMetaData .getIndex ()));
207- assertThat (indices .size (), equalTo (1 ));
195+ clusterStateWithNonReplicatedClosedIndex (indexMetaData , false ));
196+ assertThat (indices .size (), equalTo (0 ));
208197 }
209198
210- public void testGetRelevantIndicesForClosedPrevNotWrittenIndexOnDataOnlyNode () {
199+ public void testGetRelevantIndicesForReplicatedClosedButUnassignedIndexOnDataOnlyNode () {
211200 IndexMetaData indexMetaData = createIndexMetaData ("test" );
212201 Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (
213- clusterStateWithJustOpenedIndex (indexMetaData , false ),
214- clusterStateWithClosedIndex (indexMetaData , false ),
215- Collections .emptySet ());
202+ clusterStateWithReplicatedClosedIndex (indexMetaData , false , false ));
216203 assertThat (indices .size (), equalTo (0 ));
217204 }
218205
219- public void testGetRelevantIndicesForWasClosedPrevWrittenIndexOnDataOnlyNode () {
206+ public void testGetRelevantIndicesForReplicatedClosedAndAssignedIndexOnDataOnlyNode () {
220207 IndexMetaData indexMetaData = createIndexMetaData ("test" );
221208 Set <Index > indices = IncrementalClusterStateWriter .getRelevantIndices (
222- clusterStateWithJustOpenedIndex (indexMetaData , false ),
223- clusterStateWithClosedIndex (indexMetaData , false ),
224- Collections .singleton (indexMetaData .getIndex ()));
209+ clusterStateWithReplicatedClosedIndex (indexMetaData , false , true ));
225210 assertThat (indices .size (), equalTo (1 ));
226211 }
227212
0 commit comments