diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/TransformMetadata.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/TransformMetadata.java index 86651fe241b3d..f76e14c66a57c 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/TransformMetadata.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/transform/TransformMetadata.java @@ -12,7 +12,9 @@ import org.elasticsearch.cluster.ClusterState; import org.elasticsearch.cluster.Diff; import org.elasticsearch.cluster.NamedDiff; +import org.elasticsearch.cluster.ProjectState; import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.ProjectId; import org.elasticsearch.common.Strings; import org.elasticsearch.common.collect.Iterators; import org.elasticsearch.common.io.stream.StreamInput; @@ -209,6 +211,9 @@ public TransformMetadata build() { } } + /** + * @deprecated use {@link #transformMetadata(ClusterState, ProjectId)} + */ @Deprecated(forRemoval = true) public static TransformMetadata getTransformMetadata(ClusterState state) { TransformMetadata TransformMetadata = (state == null) ? null : state.metadata().getSingleProjectCustom(TYPE); @@ -218,6 +223,24 @@ public static TransformMetadata getTransformMetadata(ClusterState state) { return TransformMetadata; } + public static TransformMetadata transformMetadata(@Nullable ClusterState state, @Nullable ProjectId projectId) { + if (state == null || projectId == null) { + return EMPTY_METADATA; + } + return transformMetadata(state.projectState(projectId)); + } + + public static TransformMetadata transformMetadata(@Nullable ProjectState projectState) { + if (projectState == null) { + return EMPTY_METADATA; + } + TransformMetadata transformMetadata = projectState.metadata().custom(TYPE); + if (transformMetadata == null) { + return EMPTY_METADATA; + } + return transformMetadata; + } + public static boolean upgradeMode(ClusterState state) { return getTransformMetadata(state).upgradeMode(); } diff --git a/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/TransformMetadataTests.java b/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/TransformMetadataTests.java index 108bbab85935e..8f2008dab55db 100644 --- a/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/TransformMetadataTests.java +++ b/x-pack/plugin/transform/src/test/java/org/elasticsearch/xpack/transform/TransformMetadataTests.java @@ -7,11 +7,17 @@ package org.elasticsearch.xpack.transform; +import org.elasticsearch.cluster.ClusterName; +import org.elasticsearch.cluster.ClusterState; +import org.elasticsearch.cluster.metadata.Metadata; +import org.elasticsearch.cluster.metadata.ProjectMetadata; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.test.AbstractChunkedSerializingTestCase; import org.elasticsearch.xcontent.XContentParser; import org.elasticsearch.xpack.core.transform.TransformMetadata; +import static org.hamcrest.Matchers.equalTo; + public class TransformMetadataTests extends AbstractChunkedSerializingTestCase { @Override @@ -35,4 +41,39 @@ protected TransformMetadata mutateInstance(TransformMetadata instance) { .upgradeMode(instance.upgradeMode() == false) .build(); } + + public void testTransformMetadataFromClusterState() { + var expectedTransformMetadata = new TransformMetadata.Builder().resetMode(true).upgradeMode(true).build(); + var projectId = randomUniqueProjectId(); + var clusterState = ClusterState.builder(new ClusterName("_name")) + .metadata( + Metadata.builder().put(ProjectMetadata.builder(projectId).putCustom(TransformMetadata.TYPE, expectedTransformMetadata)) + ) + .build(); + + assertThat(TransformMetadata.transformMetadata(clusterState, projectId), equalTo(expectedTransformMetadata)); + assertThat(TransformMetadata.getTransformMetadata(clusterState), equalTo(expectedTransformMetadata)); + } + + public void testTransformMetadataFromMissingClusterState() { + assertThat(TransformMetadata.transformMetadata(null, randomUniqueProjectId()), equalTo(TransformMetadata.EMPTY_METADATA)); + assertThat(TransformMetadata.getTransformMetadata(null), equalTo(TransformMetadata.EMPTY_METADATA)); + } + + public void testTransformMetadataFromMissingProjectId() { + assertThat( + TransformMetadata.transformMetadata(ClusterState.builder(new ClusterName("_name")).build(), null), + equalTo(TransformMetadata.EMPTY_METADATA) + ); + } + + public void testTransformMetadataWhenAbsentFromClusterState() { + var projectId = randomUniqueProjectId(); + var clusterState = ClusterState.builder(new ClusterName("_name")) + .metadata(Metadata.builder().put(ProjectMetadata.builder(projectId))) + .build(); + + assertThat(TransformMetadata.transformMetadata(clusterState, projectId), equalTo(TransformMetadata.EMPTY_METADATA)); + assertThat(TransformMetadata.getTransformMetadata(clusterState), equalTo(TransformMetadata.EMPTY_METADATA)); + } }