|
14 | 14 | import org.elasticsearch.cluster.ClusterState;
|
15 | 15 | import org.elasticsearch.cluster.metadata.ComposableIndexTemplate.DataStreamTemplate;
|
16 | 16 | import org.elasticsearch.cluster.metadata.MetadataCreateDataStreamService.CreateDataStreamClusterStateUpdateRequest;
|
| 17 | +import org.elasticsearch.common.Strings; |
17 | 18 | import org.elasticsearch.common.settings.Settings;
|
18 | 19 | import org.elasticsearch.core.TimeValue;
|
19 | 20 | import org.elasticsearch.indices.ExecutorNames;
|
@@ -75,13 +76,8 @@ public void testCreateDataStreamWithAliasFromTemplate() throws Exception {
|
75 | 76 | final int aliasCount = randomIntBetween(0, 3);
|
76 | 77 | Map<String, AliasMetadata> aliases = new HashMap<>(aliasCount);
|
77 | 78 | for (int k = 0; k < aliasCount; k++) {
|
78 |
| - final String aliasName = randomAlphaOfLength(6); |
79 |
| - var builder = AliasMetadata.newAliasMetadataBuilder(aliasName); |
80 |
| - if (randomBoolean()) { |
81 |
| - builder.filter(Map.of("term", Map.of("user", Map.of("value", randomAlphaOfLength(5))))); |
82 |
| - } |
83 |
| - builder.writeIndex(randomBoolean()); |
84 |
| - aliases.put(aliasName, builder.build()); |
| 79 | + final AliasMetadata am = randomAlias(null); |
| 80 | + aliases.put(am.alias(), am); |
85 | 81 | }
|
86 | 82 | ComposableIndexTemplate template = new ComposableIndexTemplate.Builder()
|
87 | 83 | .indexPatterns(List.of(dataStreamName + "*"))
|
@@ -118,6 +114,83 @@ public void testCreateDataStreamWithAliasFromTemplate() throws Exception {
|
118 | 114 | assertThat(newState.metadata().index(DataStream.getDefaultBackingIndexName(dataStreamName, 1)).isSystem(), is(false));
|
119 | 115 | }
|
120 | 116 |
|
| 117 | + public void testCreateDataStreamWithAliasFromComponentTemplate() throws Exception { |
| 118 | + final MetadataCreateIndexService metadataCreateIndexService = getMetadataCreateIndexService(); |
| 119 | + final String dataStreamName = "my-data-stream"; |
| 120 | + final int componentTemplateCount = randomIntBetween(0, 3); |
| 121 | + final int aliasCount = randomIntBetween(0, 3); |
| 122 | + int totalAliasCount = aliasCount; |
| 123 | + Map<String, AliasMetadata> aliases = new HashMap<>(); |
| 124 | + for (int k = 0; k < aliasCount; k++) { |
| 125 | + final AliasMetadata am = randomAlias(null); |
| 126 | + aliases.put(am.alias(), am); |
| 127 | + } |
| 128 | + |
| 129 | + List<String> ctNames = new ArrayList<>(); |
| 130 | + List<Map<String, AliasMetadata>> allAliases = new ArrayList<>(); |
| 131 | + var metadataBuilder = Metadata.builder(); |
| 132 | + final List<ComponentTemplate> componentTemplates = new ArrayList<>(componentTemplateCount); |
| 133 | + for (int k = 0; k < componentTemplateCount; k++) { |
| 134 | + final String ctName = randomAlphaOfLength(5); |
| 135 | + ctNames.add(ctName); |
| 136 | + final int ctAliasCount = randomIntBetween(0, 3); |
| 137 | + totalAliasCount += ctAliasCount; |
| 138 | + final var ctAliasMap = new HashMap<String, AliasMetadata>(ctAliasCount); |
| 139 | + allAliases.add(ctAliasMap); |
| 140 | + for (int m = 0; m < ctAliasCount; m++) { |
| 141 | + final AliasMetadata am = randomAlias(ctName); |
| 142 | + ctAliasMap.put(am.alias(), am); |
| 143 | + } |
| 144 | + metadataBuilder.put(ctName, new ComponentTemplate(new Template(null, null, ctAliasMap), null, null)); |
| 145 | + } |
| 146 | + allAliases.add(aliases); |
| 147 | + |
| 148 | + ComposableIndexTemplate template = new ComposableIndexTemplate.Builder() |
| 149 | + .indexPatterns(List.of(dataStreamName + "*")) |
| 150 | + .dataStreamTemplate(new DataStreamTemplate()) |
| 151 | + .template(new Template(null, null, aliases)) |
| 152 | + .componentTemplates(ctNames) |
| 153 | + .build(); |
| 154 | + |
| 155 | + ClusterState cs = ClusterState.builder(new ClusterName("_name")) |
| 156 | + .metadata(metadataBuilder.put("template", template).build()) |
| 157 | + .build(); |
| 158 | + CreateDataStreamClusterStateUpdateRequest req = |
| 159 | + new CreateDataStreamClusterStateUpdateRequest(dataStreamName, TimeValue.ZERO, TimeValue.ZERO); |
| 160 | + ClusterState newState = MetadataCreateDataStreamService.createDataStream(metadataCreateIndexService, cs, req); |
| 161 | + assertThat(newState.metadata().dataStreams().size(), equalTo(1)); |
| 162 | + assertThat(newState.metadata().dataStreams().get(dataStreamName).getName(), equalTo(dataStreamName)); |
| 163 | + assertThat(newState.metadata().dataStreams().get(dataStreamName).isSystem(), is(false)); |
| 164 | + assertThat(newState.metadata().dataStreams().get(dataStreamName).isHidden(), is(false)); |
| 165 | + assertThat(newState.metadata().dataStreams().get(dataStreamName).isReplicated(), is(false)); |
| 166 | + assertThat(newState.metadata().dataStreamAliases().size(), is(totalAliasCount)); |
| 167 | + for (var aliasMap : allAliases) { |
| 168 | + for (var alias : aliasMap.values()) { |
| 169 | + var actualAlias = newState.metadata().dataStreamAliases().get(alias.alias()); |
| 170 | + assertThat(actualAlias, is(notNullValue())); |
| 171 | + assertThat(actualAlias.getName(), equalTo(alias.alias())); |
| 172 | + assertThat(actualAlias.getFilter(), equalTo(alias.filter())); |
| 173 | + assertThat(actualAlias.getWriteDataStream(), equalTo(alias.writeIndex() ? dataStreamName : null)); |
| 174 | + } |
| 175 | + } |
| 176 | + |
| 177 | + assertThat(newState.metadata().index(DataStream.getDefaultBackingIndexName(dataStreamName, 1)), notNullValue()); |
| 178 | + assertThat(newState.metadata().index(DataStream.getDefaultBackingIndexName(dataStreamName, 1)).getAliases().size(), is(0)); |
| 179 | + assertThat(newState.metadata().index(DataStream.getDefaultBackingIndexName(dataStreamName, 1)).getSettings().get("index.hidden"), |
| 180 | + equalTo("true")); |
| 181 | + assertThat(newState.metadata().index(DataStream.getDefaultBackingIndexName(dataStreamName, 1)).isSystem(), is(false)); |
| 182 | + } |
| 183 | + |
| 184 | + private static AliasMetadata randomAlias(String prefix) { |
| 185 | + final String aliasName = (Strings.isNullOrEmpty(prefix) ? "" : prefix + "-") + randomAlphaOfLength(6); |
| 186 | + var builder = AliasMetadata.newAliasMetadataBuilder(aliasName); |
| 187 | + if (randomBoolean()) { |
| 188 | + builder.filter(Map.of("term", Map.of("user", Map.of("value", randomAlphaOfLength(5))))); |
| 189 | + } |
| 190 | + builder.writeIndex(randomBoolean()); |
| 191 | + return builder.build(); |
| 192 | + } |
| 193 | + |
121 | 194 | public void testCreateSystemDataStream() throws Exception {
|
122 | 195 | final MetadataCreateIndexService metadataCreateIndexService = getMetadataCreateIndexService();
|
123 | 196 | final String dataStreamName = ".system-data-stream";
|
|
0 commit comments