Skip to content

ExpandWildcards option is not correctly serialized on Delete indices request #7823

Closed
@gribunin

Description

@gribunin

Elastic.Clients.Elasticsearch version: 8.1.2

Elasticsearch version: 8.8.2

.NET runtime version: .NET 6

Operating system version: Windows 10 Enterprise

Description of the problem including expected versus actual behavior:
When trying to delete indices with the wildcard with the following code:

            var response = _EsClient.Indices.Delete("rules*", configureRequest =>
            {
                configureRequest.ExpandWildcards(new ExpandWildcard[] { ExpandWildcard.All });
            });

The server returns unsuccesful response:

Invalid Elasticsearch response built from a unsuccessful (400) low level call on DELETE: /rules%2A?pretty=true&error_trace=true&expand_wildcards=Elastic.Clients.Elasticsearch.ExpandWildcard%5B%5D

obviously because the library generates incorrect query string parameter "expand_wildcards", which has to be a comma-separated string of any of "all,open,close,hidden,none" values, but instead the "Elastic.Clients.Elasticsearch.ExpandWildcard" string is added to this parameter.

Steps to reproduce:

  1. Write the code above.
  2. Run.

Expected behavior
Succesful return code (and the query string with the correct "expand_wildcards" parameter).

Provide DebugInformation (if relevant):

Invalid Elasticsearch response built from a unsuccessful (400) low level call on DELETE: /rules%2A?pretty=true&error_trace=true&expand_wildcards=Elastic.Clients.Elasticsearch.ExpandWildcard%5B%5D
 Exception: Request failed to execute. Call: Status code 400 from: DELETE /rules%2A?pretty=true&error_trace=true&expand_wildcards=Elastic.Clients.Elasticsearch.ExpandWildcard%5B%5D. ServerError: Type: illegal_argument_exception Reason: "No valid expand wildcard value [Elastic.Clients.Elasticsearch.ExpandWildcard[]]"

# Audit trail of this API call:
 - [1] PingSuccess: Node: http://elkdev02:9200/ Took: 00:00:00.2743429
 - [2] BadResponse: Node: http://elkdev02:9200/ Took: 00:00:00.0503984
# OriginalException: Elastic.Transport.TransportException: Request failed to execute. Call: Status code 400 from: DELETE /rules%2A?pretty=true&error_trace=true&expand_wildcards=Elastic.Clients.Elasticsearch.ExpandWildcard%5B%5D. ServerError: Type: illegal_argument_exception Reason: "No valid expand wildcard value [Elastic.Clients.Elasticsearch.ExpandWildcard[]]"
# Request:
<Request stream not captured or already read to completion by serializer. Set DisableDirectStreaming() on TransportConfiguration to force it to be set on the response.>
# Response:
{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "No valid expand wildcard value [Elastic.Clients.Elasticsearch.ExpandWildcard[]]",
        "stack_trace" : "org.elasticsearch.ElasticsearchException$1: No valid expand wildcard value [Elastic.Clients.Elasticsearch.ExpandWildcard[]]\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.ElasticsearchException.guessRootCauses(ElasticsearchException.java:669)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.ElasticsearchException.generateFailureXContent(ElasticsearchException.java:597)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestResponse.build(RestResponse.java:176)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestResponse.<init>(RestResponse.java:124)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestResponse.<init>(RestResponse.java:103)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:412)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestController.tryAllHandlers(RestController.java:539)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:311)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.http.AbstractHttpServerTransport.dispatchRequest(AbstractHttpServerTransport.java:381)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.http.AbstractHttpServerTransport.handleIncomingRequest(AbstractHttpServerTransport.java:477)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.http.AbstractHttpServerTransport.incomingRequest(AbstractHttpServerTransport.java:354)\n\tat org.elasticsearch.transport.netty4@8.8.2/org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.handlePipelinedRequest(Netty4HttpPipeliningHandler.java:128)\n\tat org.elasticsearch.transport.netty4@8.8.2/org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.channelRead(Netty4HttpPipeliningHandler.java:118)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:689)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:652)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)\n\tat io.netty.common@4.1.89.Final/io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)\n\tat io.netty.common@4.1.89.Final/io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat java.base/java.lang.Thread.run(Thread.java:1623)\nCaused by: java.lang.IllegalArgumentException: No valid expand wildcard value [Elastic.Clients.Elasticsearch.ExpandWildcard[]]\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.action.support.IndicesOptions$WildcardStates.updateSetForValue(IndicesOptions.java:83)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.action.support.IndicesOptions$WildcardStates.parseParameter(IndicesOptions.java:56)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.action.support.IndicesOptions.fromParameters(IndicesOptions.java:420)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.action.support.IndicesOptions.fromRequest(IndicesOptions.java:375)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.action.admin.indices.RestDeleteIndexAction.prepareRequest(RestDeleteIndexAction.java:44)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:80)\n\tat org.elasticsearch.security@8.8.2/org.elasticsearch.xpack.security.rest.SecurityRestFilter.doHandleRequest(SecurityRestFilter.java:98)\n\tat org.elasticsearch.security@8.8.2/org.elasticsearch.xpack.security.rest.SecurityRestFilter.handleRequest(SecurityRestFilter.java:74)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:410)\n\t... 44 more\n"
      }
    ],
    "type" : "illegal_argument_exception",
    "reason" : "No valid expand wildcard value [Elastic.Clients.Elasticsearch.ExpandWildcard[]]",
    "stack_trace" : "java.lang.IllegalArgumentException: No valid expand wildcard value [Elastic.Clients.Elasticsearch.ExpandWildcard[]]\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.action.support.IndicesOptions$WildcardStates.updateSetForValue(IndicesOptions.java:83)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.action.support.IndicesOptions$WildcardStates.parseParameter(IndicesOptions.java:56)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.action.support.IndicesOptions.fromParameters(IndicesOptions.java:420)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.action.support.IndicesOptions.fromRequest(IndicesOptions.java:375)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.action.admin.indices.RestDeleteIndexAction.prepareRequest(RestDeleteIndexAction.java:44)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.BaseRestHandler.handleRequest(BaseRestHandler.java:80)\n\tat org.elasticsearch.security@8.8.2/org.elasticsearch.xpack.security.rest.SecurityRestFilter.doHandleRequest(SecurityRestFilter.java:98)\n\tat org.elasticsearch.security@8.8.2/org.elasticsearch.xpack.security.rest.SecurityRestFilter.handleRequest(SecurityRestFilter.java:74)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:410)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestController.tryAllHandlers(RestController.java:539)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.rest.RestController.dispatchRequest(RestController.java:311)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.http.AbstractHttpServerTransport.dispatchRequest(AbstractHttpServerTransport.java:381)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.http.AbstractHttpServerTransport.handleIncomingRequest(AbstractHttpServerTransport.java:477)\n\tat org.elasticsearch.server@8.8.2/org.elasticsearch.http.AbstractHttpServerTransport.incomingRequest(AbstractHttpServerTransport.java:354)\n\tat org.elasticsearch.transport.netty4@8.8.2/org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.handlePipelinedRequest(Netty4HttpPipeliningHandler.java:128)\n\tat org.elasticsearch.transport.netty4@8.8.2/org.elasticsearch.http.netty4.Netty4HttpPipeliningHandler.channelRead(Netty4HttpPipeliningHandler.java:118)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.codec@4.1.89.Final/io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:689)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:652)\n\tat io.netty.transport@4.1.89.Final/io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)\n\tat io.netty.common@4.1.89.Final/io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)\n\tat io.netty.common@4.1.89.Final/io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)\n\tat java.base/java.lang.Thread.run(Thread.java:1623)\n"
  },
  "status" : 400
}

# TCP states:
  TimeWait: 37
  Established: 97
  CloseWait: 2

# ThreadPool statistics:
  Worker: 
    Busy: 0
    Free: 32767
    Min: 4
    Max: 32767
  IOCP: 
    Busy: 0
    Free: 1000
    Min: 4
    Max: 1000

Metadata

Metadata

Assignees

No one assigned

    Labels

    8.xRelates to a 8.x client version

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions