-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Closed
Description
NEST/Elasticsearch.Net version: 6.5.0 and master
Elasticsearch version: 6.2.3 (I believe server version is irrelevant for this issue)
Description of the problem including expected versus actual behavior:
When using SniffingConnectionPool
in ElasticLowLevelClient
basically every its method fails with Elasticsearch.Net.PipelineException : Failed sniffing cluster state.
Steps to reproduce:
- Add nunit test project to Elasticsearch.sln:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="nunit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.11.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Elasticsearch.Net\Elasticsearch.Net.csproj" />
</ItemGroup>
</Project>
- Add test case:
[Test]
public void SniffResponseParsingFailure()
{
var sniffingConnectionPool = new SniffingConnectionPool(new []{new Uri("http://localhost:9200")});
var elasticClient = new ElasticLowLevelClient(new ConnectionConfiguration(sniffingConnectionPool));
var response = elasticClient.ClusterHealth<DynamicResponse>();
Console.Out.WriteLine(response);
}
Stacktrace obtained on master (SHA-1: 682a8f7):
Elasticsearch.Net.PipelineException : Failed sniffing cluster state.
----> System.ArgumentException : Incorrect number of arguments supplied for call to method 'Void set_Item(System.String, Elasticsearch.Net.NodeInfo)'
at Elasticsearch.Net.RequestPipeline.Sniff() in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Transport\Pipeline\RequestPipeline.cs:line 451
at Elasticsearch.Net.RequestPipeline.FirstPoolUsage(SemaphoreSlim semaphore) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Transport\Pipeline\RequestPipeline.cs:line 279
at Elasticsearch.Net.Transport`1.Request[TResponse](HttpMethod method, String path, PostData data, IRequestParameters requestParameters) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Transport\Transport.cs:line 58
at Elasticsearch.Net.ElasticLowLevelClient.DoRequest[TResponse](HttpMethod method, String path, PostData data, IRequestParameters requestParameters) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\ElasticLowLevelClient.cs:line 45
at Elasticsearch.Net.ElasticLowLevelClient.ClusterHealth[TResponse](ClusterHealthRequestParameters requestParameters) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\ElasticLowLevelClient.Generated.cs:line 402
at Tests.Tests.SniffResponseParsingFailure() in C:\projects\open-source\elasticsearch-net\src\NUnitTestProject1\UnitTest1.cs:line 14
--ArgumentException
at System.Linq.Expressions.Expression.ValidateArgumentCount(MethodBase method, ExpressionType nodeKind, Int32 count, ParameterInfo[] pis)
at System.Linq.Expressions.Expression.ValidateArgumentTypes(MethodBase method, ExpressionType nodeKind, ReadOnlyCollection`1& arguments)
at System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, IEnumerable`1 arguments)
at Elasticsearch.Net.ReflectionUtils.GetSetMethodByExpression(PropertyInfo propertyInfo) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 1924
at Elasticsearch.Net.ReflectionUtils.GetSetMethod(PropertyInfo propertyInfo) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 1891
at Elasticsearch.Net.PocoJsonSerializerStrategy.SetterValueFactory(Type type) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 1273
at Elasticsearch.Net.ReflectionUtils.ThreadSafeDictionary`2.AddValue(TKey key) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 1983
at Elasticsearch.Net.ReflectionUtils.ThreadSafeDictionary`2.Get(TKey key) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 1977
at Elasticsearch.Net.ReflectionUtils.ThreadSafeDictionary`2.get_Item(TKey key) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 2037
at Elasticsearch.Net.PocoJsonSerializerStrategy.DeserializeObject(Object value, Type type) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 1380
at Elasticsearch.Net.ElasticsearchNetJsonStrategy.DeserializeObject(Object value, Type type) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\ElasticsearchNetJsonStrategy.cs:line 123
at Elasticsearch.Net.PocoJsonSerializerStrategy.DeserializeObject(Object value, Type type) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 1386
at Elasticsearch.Net.ElasticsearchNetJsonStrategy.DeserializeObject(Object value, Type type) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\ElasticsearchNetJsonStrategy.cs:line 123
at Elasticsearch.Net.SimpleJson.DeserializeObject(String json, Type type, IJsonSerializerStrategy jsonSerializerStrategy) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 562
at Elasticsearch.Net.LowLevelRequestResponseSerializer.Deserialize(Type type, Stream stream) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\LowLevelRequestResponseSerializer.cs:line 26
at Elasticsearch.Net.LowLevelRequestResponseSerializer.Deserialize[T](Stream stream) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Serialization\LowLevelRequestResponseSerializer.cs:line 30
at Elasticsearch.Net.ResponseBuilder.SetBody[TResponse](ApiCallDetails details, RequestData requestData, Stream responseStream, String mimeType) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Transport\Pipeline\ResponseBuilder.cs:line 103
at Elasticsearch.Net.ResponseBuilder.ToResponse[TResponse](RequestData requestData, Exception ex, Nullable`1 statusCode, IEnumerable`1 warnings, Stream responseStream, String mimeType) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Transport\Pipeline\ResponseBuilder.cs:line 31
at Elasticsearch.Net.HttpConnection.Request[TResponse](RequestData requestData) in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Connection\HttpConnection.cs:line 76
at Elasticsearch.Net.RequestPipeline.Sniff() in C:\projects\open-source\elasticsearch-net\src\Elasticsearch.Net\Transport\Pipeline\RequestPipeline.cs:line 429
Some analysis:
- The problem does not appear in Elasticsearch.Net v6.4.0.
- I believe it was introduced with PR #3071 where
#if NETFX_CORE || DOTNETCORE
directive was removed for#define SIMPLE_JSON_TYPEINFO
inSimpleJson.cs
. At least when I commented out this#define SIMPLE_JSON_TYPEINFO
directive my test has passed.
Metadata
Metadata
Assignees
Labels
No labels