mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-29 01:44:36 -04:00
Improve error message when rolling over DS alias (#106708)
Currently a null pointer exception is thrown when trying to execute a rollover on a data stream alias. This commit checks before trying to execute if we're attempting to rollover a data stream alias or not. Fixes #106137 --------- Co-authored-by: James Baiera <james.baiera@gmail.com>
This commit is contained in:
parent
c1467e02c8
commit
61982c461f
3 changed files with 57 additions and 0 deletions
6
docs/changelog/106708.yaml
Normal file
6
docs/changelog/106708.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
pr: 106708
|
||||
summary: Improve error message when rolling over DS alias
|
||||
area: Data streams
|
||||
type: bug
|
||||
issues:
|
||||
- 106137
|
|
@ -215,6 +215,16 @@ public class TransportRolloverAction extends TransportMasterNodeAction<RolloverR
|
|||
}
|
||||
}
|
||||
|
||||
final IndexAbstraction rolloverTargetAbstraction = clusterState.metadata()
|
||||
.getIndicesLookup()
|
||||
.get(rolloverRequest.getRolloverTarget());
|
||||
if (rolloverTargetAbstraction.getType() == IndexAbstraction.Type.ALIAS && rolloverTargetAbstraction.isDataStreamRelated()) {
|
||||
listener.onFailure(
|
||||
new IllegalStateException("Aliases to data streams cannot be rolled over. Please rollover the data stream itself.")
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
IndicesStatsRequest statsRequest = new IndicesStatsRequest().indices(rolloverRequest.getRolloverTarget())
|
||||
.clear()
|
||||
.indicesOptions(IndicesOptions.fromOptions(true, false, true, true))
|
||||
|
|
|
@ -552,6 +552,47 @@ public class TransportRolloverActionTests extends ESTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
public void testRolloverAliasToDataStreamFails() throws Exception {
|
||||
final IndexMetadata backingIndexMetadata = IndexMetadata.builder(".ds-logs-ds-000001")
|
||||
.settings(settings(IndexVersion.current()))
|
||||
.numberOfShards(1)
|
||||
.numberOfReplicas(1)
|
||||
.build();
|
||||
final DataStream dataStream = new DataStream(
|
||||
"logs-ds",
|
||||
List.of(backingIndexMetadata.getIndex()),
|
||||
1,
|
||||
Map.of(),
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
IndexMode.STANDARD
|
||||
);
|
||||
Metadata.Builder metadataBuilder = Metadata.builder().put(backingIndexMetadata, false).put(dataStream);
|
||||
metadataBuilder.put("ds-alias", dataStream.getName(), true, null);
|
||||
final ClusterState stateBefore = ClusterState.builder(ClusterName.DEFAULT).metadata(metadataBuilder).build();
|
||||
|
||||
final TransportRolloverAction transportRolloverAction = new TransportRolloverAction(
|
||||
mock(TransportService.class),
|
||||
mockClusterService,
|
||||
mockThreadPool,
|
||||
mockActionFilters,
|
||||
mockIndexNameExpressionResolver,
|
||||
rolloverService,
|
||||
mockClient,
|
||||
mockAllocationService,
|
||||
mockMetadataDataStreamService,
|
||||
dataStreamAutoShardingService
|
||||
);
|
||||
|
||||
final PlainActionFuture<RolloverResponse> future = new PlainActionFuture<>();
|
||||
RolloverRequest rolloverRequest = new RolloverRequest("ds-alias", null);
|
||||
transportRolloverAction.masterOperation(mock(CancellableTask.class), rolloverRequest, stateBefore, future);
|
||||
IllegalStateException illegalStateException = expectThrows(IllegalStateException.class, future::actionGet);
|
||||
assertThat(illegalStateException.getMessage(), containsString("Aliases to data streams cannot be rolled over."));
|
||||
}
|
||||
|
||||
private IndicesStatsResponse createIndicesStatResponse(String indexName, long totalDocs, long primariesDocs) {
|
||||
final CommonStats primaryStats = mock(CommonStats.class);
|
||||
when(primaryStats.getDocs()).thenReturn(new DocsStats(primariesDocs, 0, between(1, 10000)));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue