@Override protected void handleCommitRequest( PublishClusterStateAction.CommitClusterStateRequest request, TransportChannel channel) { if (errorOnCommit.get()) { throw new ElasticsearchException("forced error on incoming commit"); } if (timeoutOnCommit.get()) { return; } super.handleCommitRequest(request, channel); }
public void testOutOfOrderCommitMessages() throws Throwable { MockNode node = createMockNode("node").setAsMaster(); final CapturingTransportChannel channel = new CapturingTransportChannel(); List<ClusterState> states = new ArrayList<>(); final int numOfStates = scaledRandomIntBetween(3, 25); for (int i = 1; i <= numOfStates; i++) { states.add( ClusterState.builder(node.clusterState) .version(i) .stateUUID(ClusterState.UNKNOWN_UUID) .build()); } final ClusterState finalState = states.get(numOfStates - 1); logger.info("--> publishing states"); for (ClusterState state : states) { node.action.handleIncomingClusterStateRequest( new BytesTransportRequest( PublishClusterStateAction.serializeFullClusterState(state, Version.CURRENT), Version.CURRENT), channel); assertThat( channel.response.get(), equalTo((TransportResponse) TransportResponse.Empty.INSTANCE)); assertThat(channel.error.get(), nullValue()); channel.clear(); } logger.info("--> committing states"); long largestVersionSeen = Long.MIN_VALUE; Randomness.shuffle(states); for (ClusterState state : states) { node.action.handleCommitRequest( new PublishClusterStateAction.CommitClusterStateRequest(state.stateUUID()), channel); if (largestVersionSeen < state.getVersion()) { assertThat( channel.response.get(), equalTo((TransportResponse) TransportResponse.Empty.INSTANCE)); if (channel.error.get() != null) { throw channel.error.get(); } largestVersionSeen = state.getVersion(); } else { // older cluster states will be rejected assertNotNull(channel.error.get()); assertThat(channel.error.get(), instanceOf(IllegalStateException.class)); } channel.clear(); } // now check the last state held assertSameState(node.clusterState, finalState); }
@Override protected void handleIncomingClusterStateRequest( BytesTransportRequest request, TransportChannel channel) throws IOException { if (errorOnSend.get()) { throw new ElasticsearchException("forced error on incoming cluster state"); } if (timeoutOnSend.get()) { return; } super.handleIncomingClusterStateRequest(request, channel); }
public AssertingAckListener publishState( PublishClusterStateAction action, ClusterState state, ClusterState previousState, int minMasterNodes) throws InterruptedException { AssertingAckListener assertingAckListener = new AssertingAckListener(state.nodes().getSize() - 1); ClusterChangedEvent changedEvent = new ClusterChangedEvent("test update", state, previousState); action.publish(changedEvent, minMasterNodes, assertingAckListener); return assertingAckListener; }