public void testDroppingStatesAtCapacity() { List<ClusterState> states = randomStates(scaledRandomIntBetween(10, 300), "master1", "master2", "master3", "master4"); Collections.shuffle(states, random()); // insert half of the states final int numberOfStateToDrop = states.size() / 2; List<ClusterState> stateToDrop = states.subList(0, numberOfStateToDrop); final int queueSize = states.size() - numberOfStateToDrop; PendingClusterStatesQueue queue = createQueueWithStates(stateToDrop, queueSize); List<ClusterStateContext> committedContexts = randomCommitStates(queue); for (ClusterState state : states.subList(numberOfStateToDrop, states.size())) { queue.addPending(state); } assertThat(queue.pendingClusterStates().length, equalTo(queueSize)); // check all committed states got a failure due to the drop for (ClusterStateContext context : committedContexts) { assertThat(((MockListener) context.listener).failure, notNullValue()); } // all states that should have dropped are indeed dropped. for (ClusterState state : stateToDrop) { assertThat(queue.findState(state.stateUUID()), nullValue()); } }
PendingClusterStatesQueue createQueueWithStates(List<ClusterState> states, int maxQueueSize) { PendingClusterStatesQueue queue; queue = new PendingClusterStatesQueue(logger, maxQueueSize); for (ClusterState state : states) { queue.addPending(state); } return queue; }