Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add more aspects to ReservedStateVersion test #110469

Merged
merged 7 commits into from
Jul 11, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
More tidying of ReservedClusterStateServiceTests
  • Loading branch information
thecoop committed Jul 4, 2024
commit cde7e8c539e89b661d740e3d4e42ca4b15ce73c5
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,65 @@ private static <T extends ClusterStateTaskListener> MasterServiceTaskQueue<T> mo
return (MasterServiceTaskQueue<T>) mock(MasterServiceTaskQueue.class);
}

private static class TestTaskContext<T extends ClusterStateTaskListener> implements ClusterStateTaskExecutor.TaskContext<T> {
private final T task;

private TestTaskContext(T task) {
this.task = task;
}

@Override
public T getTask() {
return task;
}

@Override
public void success(Runnable onPublicationSuccess) {
onPublicationSuccess.run();
}

@Override
public void success(Consumer<ClusterState> publishedStateConsumer) {}

@Override
public void success(Runnable onPublicationSuccess, ClusterStateAckListener clusterStateAckListener) {}

@Override
public void success(Consumer<ClusterState> publishedStateConsumer, ClusterStateAckListener clusterStateAckListener) {}

@Override
public void onFailure(Exception failure) {}

@Override
public Releasable captureResponseHeaders() {
return null;
}
}

private static class TestStateHandler implements ReservedClusterStateHandler<Map<String, Object>> {
private final String name;

private TestStateHandler(String name) {
this.name = name;
}

@Override
public String name() {
return name;
}

@Override
public TransformState transform(Object source, TransformState prevState) throws Exception {
ClusterState newState = new ClusterState.Builder(prevState.state()).build();
return new TransformState(newState, prevState.keys());
}

@Override
public Map<String, Object> fromXContent(XContentParser parser) throws IOException {
return parser.map();
}
}

public void testOperatorController() throws IOException {
ClusterSettings clusterSettings = new ClusterSettings(Settings.EMPTY, ClusterSettings.BUILT_IN_CLUSTER_SETTINGS);
ClusterService clusterService = mock(ClusterService.class);
Expand Down Expand Up @@ -153,8 +212,7 @@ public void testInitEmptyTask() {

// grab the update task when it gets given to us
when(clusterService.createTaskQueue(ArgumentMatchers.contains("reserved state update"), any(), any())).thenAnswer(i -> {
@SuppressWarnings("unchecked")
MasterServiceTaskQueue<ReservedStateUpdateTask> queue = mock(MasterServiceTaskQueue.class);
MasterServiceTaskQueue<ReservedStateUpdateTask> queue = mockTaskQueue();
doNothing().when(queue).submitTask(any(), updateTask.capture(), any());
return queue;
});
Expand Down Expand Up @@ -187,34 +245,12 @@ public void testUpdateStateTasks() throws Exception {

doReturn(state).when(task).execute(any());

ClusterStateTaskExecutor.TaskContext<ReservedStateUpdateTask> taskContext = new ClusterStateTaskExecutor.TaskContext<>() {
@Override
public ReservedStateUpdateTask getTask() {
return task;
}

ClusterStateTaskExecutor.TaskContext<ReservedStateUpdateTask> taskContext = new TestTaskContext<>(task) {
@Override
public void success(Runnable onPublicationSuccess) {
onPublicationSuccess.run();
super.success(onPublicationSuccess);
successCalled.set(true);
}

@Override
public void success(Consumer<ClusterState> publishedStateConsumer) {}

@Override
public void success(Runnable onPublicationSuccess, ClusterStateAckListener clusterStateAckListener) {}

@Override
public void success(Consumer<ClusterState> publishedStateConsumer, ClusterStateAckListener clusterStateAckListener) {}

@Override
public void onFailure(Exception failure) {}

@Override
public Releasable captureResponseHeaders() {
return null;
}
};

ClusterState newState = taskExecutor.execute(
Expand All @@ -233,8 +269,7 @@ public void testUpdateErrorState() {
ClusterState state = ClusterState.builder(new ClusterName("test")).build();

ArgumentCaptor<ReservedStateErrorTask> updateTask = ArgumentCaptor.captor();
@SuppressWarnings("unchecked")
MasterServiceTaskQueue<ReservedStateErrorTask> errorQueue = mock(MasterServiceTaskQueue.class);
MasterServiceTaskQueue<ReservedStateErrorTask> errorQueue = mockTaskQueue();
doNothing().when(errorQueue).submitTask(any(), updateTask.capture(), any());

// grab the update task when it gets given to us
Expand Down Expand Up @@ -282,40 +317,8 @@ public void testErrorStateTask() throws Exception {
)
);

ReservedStateErrorTaskExecutor.TaskContext<ReservedStateErrorTask> taskContext =
new ReservedStateErrorTaskExecutor.TaskContext<>() {
@Override
public ReservedStateErrorTask getTask() {
return task;
}

@Override
public void success(Runnable onPublicationSuccess) {
onPublicationSuccess.run();
}

@Override
public void success(Consumer<ClusterState> publishedStateConsumer) {}

@Override
public void success(Runnable onPublicationSuccess, ClusterStateAckListener clusterStateAckListener) {}

@Override
public void success(Consumer<ClusterState> publishedStateConsumer, ClusterStateAckListener clusterStateAckListener) {}

@Override
public void onFailure(Exception failure) {}

@Override
public Releasable captureResponseHeaders() {
return null;
}
};

ReservedStateErrorTaskExecutor executor = new ReservedStateErrorTaskExecutor();

ClusterState newState = executor.execute(
new ClusterStateTaskExecutor.BatchExecutionContext<>(state, List.of(taskContext), () -> null)
ClusterState newState = new ReservedStateErrorTaskExecutor().execute(
new ClusterStateTaskExecutor.BatchExecutionContext<>(state, List.of(new TestTaskContext<>(task)), () -> null)
);

verify(task, times(1)).execute(any());
Expand All @@ -330,39 +333,12 @@ public Releasable captureResponseHeaders() {
}

public void testUpdateTaskDuplicateError() {
ReservedClusterStateHandler<Map<String, Object>> newStateMaker = new ReservedClusterStateHandler<>() {
@Override
public String name() {
return "maker";
}

@Override
public TransformState transform(Object source, TransformState prevState) throws Exception {
ClusterState newState = new ClusterState.Builder(prevState.state()).build();
return new TransformState(newState, prevState.keys());
}

@Override
public Map<String, Object> fromXContent(XContentParser parser) throws IOException {
return parser.map();
}
};

ReservedClusterStateHandler<Map<String, Object>> exceptionThrower = new ReservedClusterStateHandler<>() {
@Override
public String name() {
return "one";
}

ReservedClusterStateHandler<Map<String, Object>> newStateMaker = new TestStateHandler("maker");
ReservedClusterStateHandler<Map<String, Object>> exceptionThrower = new TestStateHandler("one") {
@Override
public TransformState transform(Object source, TransformState prevState) throws Exception {
throw new Exception("anything");
}

@Override
public Map<String, Object> fromXContent(XContentParser parser) throws IOException {
return parser.map();
}
};

ReservedStateHandlerMetadata hmOne = new ReservedStateHandlerMetadata("one", Set.of("a", "b"));
Expand Down Expand Up @@ -452,13 +428,8 @@ public void testCheckMetadataVersion() {
);
}

private ReservedClusterStateHandler<Map<String, Object>> makeHandlerHelper(final String name, final List<String> deps) {
return new ReservedClusterStateHandler<>() {
@Override
public String name() {
return name;
}

private ReservedClusterStateHandler<Map<String, Object>> makeHandlerHelper(String name, List<String> deps) {
return new TestStateHandler(name) {
@Override
public TransformState transform(Object source, TransformState prevState) throws Exception {
return null;
Expand All @@ -468,11 +439,6 @@ public TransformState transform(Object source, TransformState prevState) throws
public Collection<String> dependencies() {
return deps;
}

@Override
public Map<String, Object> fromXContent(XContentParser parser) throws IOException {
return parser.map();
}
};
}

Expand Down Expand Up @@ -527,7 +493,12 @@ public void testDuplicateHandlerNames() {
() -> new ReservedClusterStateService(
clusterService,
mock(RerouteService.class),
List.of(new ReservedClusterSettingsAction(clusterSettings), new TestHandler())
List.of(new ReservedClusterSettingsAction(clusterSettings), new TestStateHandler(ReservedClusterSettingsAction.NAME) {
@Override
public TransformState transform(Object source, TransformState prevState) throws Exception {
return prevState;
}
})
)
).getMessage(),
startsWith("Duplicate key cluster_settings")
Expand All @@ -553,30 +524,8 @@ public void testCheckAndReportError() {
}

public void testTrialRunExtractsNonStateActions() {
ReservedClusterStateHandler<Map<String, Object>> newStateMaker = new ReservedClusterStateHandler<>() {
@Override
public String name() {
return "maker";
}

@Override
public TransformState transform(Object source, TransformState prevState) throws Exception {
ClusterState newState = new ClusterState.Builder(prevState.state()).build();
return new TransformState(newState, prevState.keys());
}

@Override
public Map<String, Object> fromXContent(XContentParser parser) throws IOException {
return parser.map();
}
};

ReservedClusterStateHandler<Map<String, Object>> exceptionThrower = new ReservedClusterStateHandler<>() {
@Override
public String name() {
return "non-state";
}

ReservedClusterStateHandler<Map<String, Object>> newStateMaker = new TestStateHandler("maker");
ReservedClusterStateHandler<Map<String, Object>> exceptionThrower = new TestStateHandler("non-state") {
@Override
public TransformState transform(Object source, TransformState prevState) {
return new TransformState(prevState.state(), prevState.keys(), this::internalKeys);
Expand All @@ -585,11 +534,6 @@ public TransformState transform(Object source, TransformState prevState) {
private void internalKeys(ActionListener<NonStateTransformResult> listener) {
listener.onResponse(new NonStateTransformResult(name(), Set.of("key non-state")));
}

@Override
public Map<String, Object> fromXContent(XContentParser parser) throws IOException {
return parser.map();
}
};

ReservedStateHandlerMetadata hmOne = new ReservedStateHandlerMetadata("non-state", Set.of("a", "b"));
Expand Down Expand Up @@ -643,12 +587,7 @@ public void testExecuteNonStateTransformationSteps() {

while (i < count) {
final var key = i++;
var handler = new ReservedClusterStateHandler<>() {
@Override
public String name() {
return "non-state:" + key;
}

var handler = new TestStateHandler("non-state:" + key) {
@Override
public TransformState transform(Object source, TransformState prevState) {
return new TransformState(prevState.state(), prevState.keys(), this::internalKeys);
Expand All @@ -657,11 +596,6 @@ public TransformState transform(Object source, TransformState prevState) {
private void internalKeys(ActionListener<NonStateTransformResult> listener) {
listener.onResponse(new NonStateTransformResult(name(), Set.of("key non-state:" + key)));
}

@Override
public Map<String, Object> fromXContent(XContentParser parser) throws IOException {
return parser.map();
}
};

builder.putHandler(new ReservedStateHandlerMetadata(handler.name(), Set.of("a", "b")));
Expand Down Expand Up @@ -716,22 +650,4 @@ public void onFailure(Exception e) {
}
});
}

static class TestHandler implements ReservedClusterStateHandler<Map<String, Object>> {

@Override
public String name() {
return ReservedClusterSettingsAction.NAME;
}

@Override
public TransformState transform(Object source, TransformState prevState) {
return prevState;
}

@Override
public Map<String, Object> fromXContent(XContentParser parser) throws IOException {
return parser.map();
}
}
}