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

Delete index API to work only against concrete indices #25268

Merged

Conversation

Projects
None yet
5 participants
@javanna
Copy link
Member

commented Jun 16, 2017

With #23997 we have introduced a new internal index option that allows to resolve index expressions only against concrete indices while ignoring aliases. Such index option was applied to IndicesAliasesRequest, so that the index part of alias actions would only be resolved against concrete indices.

Same is done in this commit with delete index request. Deleting aliases has always been confusing as some users expect it to only remove the alias from the index (which has its own specific API). Even worse, in case of filtered aliases, deleting an alias may leave users with the expectation that only the documents that match the filter are deleted, which was never the case. To address all this confusion, delete index api works now only against concrete indices. Wildcard expressions will be only resolved against concrete indices, as if aliases didn't exist. If one tries to delete against an alias, an IndexNotFoundException will be thrown regardless of whether the alias exists or not, as a concrete index with such a name doesn't exist.

Closes #2318

Delete index API to work only against concrete indices
With #23997 we have introduced a new internal index option that allows to resolve index expressions only against concrete indices while ignoring aliases. Such index option was applied to IndicesAliasesRequest, so that the index part of alias actions would only be resolved against concrete indices.

Same is done in this commit with delete index request. Deleting aliases has always been confusing as some users expect it to only remove the alias from the index (which has its own specific API). Even worse, in case of filtered aliases, deleting an alias may leave users with the expectation that only the documents that match the filter are deleted, which was never the case. To address all this confusion, delete index api works now only against concrete indices. WIldcard expressions will be only resolved against concrete index, as if aliases didn't exist. If one tries to delete against an alias, an IndexNotFoundException will be thrown regardless of whether the alias exists or not, as a concrete index with such a name doesn't exist.

Closes #2318
@clintongormley
Copy link
Member

left a comment

Thanks @javanna LGTM but you need a Java review

@javanna javanna requested a review from martijnvg Jun 16, 2017

@martijnvg
Copy link
Member

left a comment

LGTM

@javanna javanna merged commit b5cea69 into elastic:master Jun 16, 2017

2 checks passed

CLA Commit author is a member of Elasticsearch
Details
elasticsearch-ci Build finished.
Details
@jasontedor

This comment has been minimized.

Copy link
Member

commented Jun 16, 2017

This is really good change @javanna!

@olcbean

This comment has been minimized.

Copy link
Contributor

commented Jun 17, 2017

@javanna

This comment has been minimized.

Copy link
Member Author

commented Jun 19, 2017

good point @olcbean will do. I am sorry that you were working on this too. I didn't see any PR from you so I went ahead and created one, as we needed to get this change in.

javanna added a commit to javanna/elasticsearch that referenced this pull request Jul 11, 2017

Log deprecation warning when using delete index specifying an alias
Support for providing/matching aliases when using the delete index API will be removed in 6.0. This commit adds a deprecation warning for any delete index request that specifies aliases, or wildcard expressions that match aliases, on their index side.

Relates to elastic#25268

javanna added a commit to javanna/elasticsearch that referenced this pull request Jul 17, 2017

Improve error message when aliases are not supported
With elastic#23997 and elastic#25268 we have changed put alias, delete alias, update aliases and delete index to not accept aliases. Instead concrete indices should be provided as their index parameter.

This commit improves the error message in case aliases are provided, from an IndexNotFoundException (404 status code) with "no such index" message, to an IllegalArgumentException (400 status code) with "The provided expression [alias] matches an alias, specify the corresponding concrete indices instead." message.

Note that there is no specific error message for the case where wildcard expressions match one or more aliases. In fact, aliases are simply ignored when expanding wildcards for such APIs. An error is thrown only when the expression ends up matching no indices at all, and allow_no_indices is set to false. In that case the error is still the generic "404 - no such index".

javanna added a commit that referenced this pull request Jul 18, 2017

Improve error message when aliases are not supported (#25728)
With #23997 and #25268 we have changed put alias, delete alias, update aliases and delete index to not accept aliases. Instead concrete indices should be provided as their index parameter.

This commit improves the error message in case aliases are provided, from an IndexNotFoundException (404 status code) with "no such index" message, to an IllegalArgumentException (400 status code) with "The provided expression [alias] matches an alias, specify the corresponding concrete indices instead." message.

Note that there is no specific error message for the case where wildcard expressions match one or more aliases. In fact, aliases are simply ignored when expanding wildcards for such APIs. An error is thrown only when the expression ends up matching no indices at all, and allow_no_indices is set to false. In that case the error is still the generic "404 - no such index".

@clintongormley clintongormley added v6.0.0-beta1 and removed v6.0.0 labels Jul 25, 2017

ruflin added a commit to ruflin/Elastica that referenced this pull request Aug 17, 2017

Delete indices only by concrete name #1348
It has been introduced a BC into ES 6 which force to delete an index *only* with [**concrete Index name**](elastic/elasticsearch#25268). I've update a test, and created a new one to test the exception in case of index deletion by alias.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.