Skip to content

Commit 12fc3ce

Browse files
committed
fix #657 fix #662 fix #655 some integration tests we're ignored which caused me to miss that the serializer simplification commits broke quite a few integration tests
1 parent 3ac3893 commit 12fc3ce

File tree

18 files changed

+112
-48
lines changed

18 files changed

+112
-48
lines changed

src/Elasticsearch.Net/Domain/ElasticsearchResponse.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ internal static ElasticsearchResponse<DynamicDictionary> Wrap(ElasticsearchRespo
4040

4141
public static ElasticsearchResponse<TTo> CloneFrom<TTo>(IElasticsearchResponse from, TTo to)
4242
{
43-
return new ElasticsearchResponse<TTo>(from.Settings)
43+
var response = new ElasticsearchResponse<TTo>(from.Settings)
4444
{
4545
OriginalException = from.OriginalException,
4646
HttpStatusCode = from.HttpStatusCode,
@@ -52,8 +52,11 @@ public static ElasticsearchResponse<TTo> CloneFrom<TTo>(IElasticsearchResponse f
5252
Serializer = from.Settings.Serializer,
5353
Settings = from.Settings,
5454
Success = from.Success
55-
5655
};
56+
var tt = to as IResponseWithRequestInformation;
57+
if (tt != null)
58+
tt.RequestInformation = response;
59+
return response;
5760
}
5861

5962
private static ElasticsearchResponse<DynamicDictionary> ToDynamicResponse(ElasticsearchResponse<Dictionary<string, object>> response)

src/Elasticsearch.Net/Domain/FluentRequestParameters.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
34
using System.Linq;
45
using System.Text;
56
using Elasticsearch.Net.Connection;
@@ -36,9 +37,9 @@ public T RequestConfiguration(Func<RequestConfiguration, RequestConfiguration> s
3637
return (T)this;
3738
}
3839

39-
public T DeserializationState(object deserializationState)
40+
public T DeserializationState(object customObjectCreator)
4041
{
41-
_DeserializationState = deserializationState;
42+
_DeserializationState = customObjectCreator;
4243
return (T)this;
4344
}
4445

src/Nest/DSL/DocumentExistsDescriptor.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
namespace Nest
1414
{
1515
[DescriptorFor("Exists")]
16-
public partial class IndexDescriptor<T> : DocumentPathDescriptorBase<IndexDescriptor<T>, T, IndexRequestParameters>
16+
public partial class IndexDescriptor<T> : DocumentOptionalPathDescriptorBase<IndexDescriptor<T>, T, IndexRequestParameters>
1717
, IPathInfo<IndexRequestParameters>
1818
where T : class
1919
{
2020
ElasticsearchPathInfo<IndexRequestParameters> IPathInfo<IndexRequestParameters>.ToPathInfo(IConnectionSettingsValues settings)
2121
{
2222
var pathInfo = base.ToPathInfo(settings, this._QueryString);
23+
pathInfo.Index.ThrowIfNull("index");
24+
pathInfo.Type.ThrowIfNull("type");
2325
pathInfo.HttpMethod = this._Id.IsNullOrEmpty() ? PathInfoHttpMethod.POST : PathInfoHttpMethod.PUT;
2426
return pathInfo;
2527
}

src/Nest/Domain/Paths/ElasticSearchPathInfo.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Elasticsearch.Net;
1+
using System;
2+
using System.IO;
3+
using Elasticsearch.Net;
24

35
namespace Nest
46
{
@@ -27,9 +29,9 @@ public ElasticsearchPathInfo()
2729
this.RequestParameters = new T();
2830
}
2931

30-
public ElasticsearchPathInfo<T> DeserializationState(object deserializationState)
32+
public ElasticsearchPathInfo<T> DeserializationState(object customObjectCreation)
3133
{
32-
this.RequestParameters.DeserializationState(deserializationState);
34+
this.RequestParameters.DeserializationState(customObjectCreation);
3335
return this;
3436
}
3537
}

src/Nest/Domain/Responses/BaseResponse.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Globalization;
33
using System.Linq;
44
using Elasticsearch.Net;
5+
using Elasticsearch.Net.Connection;
56
using Nest.Resolvers;
67

78
namespace Nest
@@ -11,6 +12,8 @@ public interface IResponse : IResponseWithRequestInformation
1112
bool IsValid { get; }
1213
IElasticsearchResponse ConnectionStatus { get; }
1314
ElasticInferrer Infer { get; }
15+
16+
ElasticsearchServerError GetServerException();
1417
}
1518

1619
public class BaseResponse : IResponse
@@ -25,6 +28,21 @@ public BaseResponse()
2528

2629
public IElasticsearchResponse ConnectionStatus { get { return ((IResponseWithRequestInformation)this).RequestInformation; } }
2730

31+
public ElasticsearchServerError GetServerException()
32+
{
33+
if (this.IsValid || this.ConnectionStatus == null || this.ConnectionStatus.OriginalException == null)
34+
return null;
35+
var e = this.ConnectionStatus.OriginalException as ElasticsearchServerException;
36+
if (e == null)
37+
return null;
38+
return new ElasticsearchServerError
39+
{
40+
Status = e.Status,
41+
Error = e.Message,
42+
ExceptionType = e.ExceptionType
43+
};
44+
}
45+
2846
public ElasticInferrer _infer;
2947

3048
protected IConnectionSettingsValues Settings

src/Nest/Domain/Responses/MultiSearchResponse.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,17 @@ public MultiSearchResponse()
2121

2222
public IEnumerable<SearchResponse<T>> GetResponses<T>() where T : class
2323
{
24+
foreach (var r in this._Responses.Values.OfType<IResponseWithRequestInformation>())
25+
r.RequestInformation = this.ConnectionStatus;
2426
return this._Responses.Values.OfType<SearchResponse<T>>();
2527
}
2628
public SearchResponse<T> GetResponse<T>(string name) where T : class
2729
{
2830
object response = null;
2931
this._Responses.TryGetValue(name, out response);
32+
var r = response as IResponseWithRequestInformation;
33+
if (r != null)
34+
r.RequestInformation = this.ConnectionStatus;
3035
return response as SearchResponse<T>;
3136
}
3237
}

src/Nest/ElasticClient-MultiGet.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
34
using System.Linq;
45
using System.Threading.Tasks;
56
using Elasticsearch.Net;
@@ -8,6 +9,8 @@
89

910
namespace Nest
1011
{
12+
using MultiGetConverter = Func<IElasticsearchResponse, Stream, MultiGetResponse>;
13+
1114
public partial class ElasticClient
1215
{
1316
/// <inheritdoc />
@@ -16,9 +19,10 @@ public IMultiGetResponse MultiGet(Func<MultiGetDescriptor, MultiGetDescriptor> m
1619
multiGetSelector.ThrowIfNull("multiGetSelector");
1720
var descriptor = multiGetSelector(new MultiGetDescriptor(_connectionSettings));
1821
var converter = CreateCovariantMultiGetConverter(descriptor);
22+
var customCreator = new MultiGetConverter((r, s) => this.DeserializeMultiGetResponse(r, s, converter));
1923
return this.Dispatch<MultiGetDescriptor, MultiGetRequestParameters, MultiGetResponse>(
2024
descriptor,
21-
(p, d) => this.RawDispatch.MgetDispatch<MultiGetResponse>(p.DeserializationState(converter), d)
25+
(p, d) => this.RawDispatch.MgetDispatch<MultiGetResponse>(p.DeserializationState(customCreator), d)
2226
);
2327
}
2428

@@ -28,12 +32,16 @@ public Task<IMultiGetResponse> MultiGetAsync(Func<MultiGetDescriptor, MultiGetDe
2832
multiGetSelector.ThrowIfNull("multiGetSelector");
2933
var descriptor = multiGetSelector(new MultiGetDescriptor(_connectionSettings));
3034
var converter = CreateCovariantMultiGetConverter(descriptor);
35+
var customCreator = new MultiGetConverter((r, s) => this.DeserializeMultiGetResponse(r, s, converter));
3136
return this.DispatchAsync<MultiGetDescriptor, MultiGetRequestParameters, MultiGetResponse, IMultiGetResponse>(
3237
descriptor,
33-
(p, d) => this.RawDispatch.MgetDispatchAsync<MultiGetResponse>(p.DeserializationState(converter), d)
38+
(p, d) => this.RawDispatch.MgetDispatchAsync<MultiGetResponse>(p.DeserializationState(customCreator), d)
3439
);
3540
}
36-
41+
private MultiGetResponse DeserializeMultiGetResponse(IElasticsearchResponse response, Stream stream, JsonConverter converter)
42+
{
43+
return this.Serializer.DeserializeInternal<MultiGetResponse>(stream, converter);
44+
}
3745
private JsonConverter CreateCovariantMultiGetConverter(MultiGetDescriptor descriptor)
3846
{
3947
var multiGetHitConverter = new MultiGetHitConverter(descriptor);

src/Nest/ElasticClient-MultiSearch.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
34
using System.Linq;
45
using System.Text;
56
using System.Threading.Tasks;
@@ -9,6 +10,8 @@
910

1011
namespace Nest
1112
{
13+
using MultiSearchCreator = Func<IElasticsearchResponse, Stream, MultiSearchResponse>;
14+
1215
public partial class ElasticClient
1316
{
1417
/// <inheritdoc />
@@ -18,9 +21,10 @@ public IMultiSearchResponse MultiSearch(Func<MultiSearchDescriptor, MultiSearchD
1821
multiSearchSelector,
1922
(p, d) =>
2023
{
21-
string json = Serializer.SerializeMultiSearch(d);
22-
JsonConverter converter = CreateMultiSearchConverter(d);
23-
return this.RawDispatch.MsearchDispatch<MultiSearchResponse>(p.DeserializationState(converter), json);
24+
var json = Serializer.SerializeMultiSearch(d);
25+
var converter = CreateMultiSearchConverter(d);
26+
var creator = new MultiSearchCreator((r, s) => this.DeserializeMultiSearchHit(r, s, converter));
27+
return this.RawDispatch.MsearchDispatch<MultiSearchResponse>(p.DeserializationState(creator), json);
2428
}
2529
);
2630
}
@@ -33,13 +37,17 @@ public Task<IMultiSearchResponse> MultiSearchAsync(
3337
multiSearchSelector,
3438
(p, d) =>
3539
{
36-
string json = Serializer.SerializeMultiSearch(d);
37-
JsonConverter converter = CreateMultiSearchConverter(d);
38-
return this.RawDispatch.MsearchDispatchAsync<MultiSearchResponse>(p.DeserializationState(converter), json);
40+
var json = Serializer.SerializeMultiSearch(d);
41+
var converter = CreateMultiSearchConverter(d);
42+
var creator = new MultiSearchCreator((r, s) => this.DeserializeMultiSearchHit(r, s, converter));
43+
return this.RawDispatch.MsearchDispatchAsync<MultiSearchResponse>(p.DeserializationState(creator), json);
3944
}
4045
);
4146
}
42-
47+
private MultiSearchResponse DeserializeMultiSearchHit(IElasticsearchResponse response, Stream stream, JsonConverter converter)
48+
{
49+
return this.Serializer.DeserializeInternal<MultiSearchResponse>(stream, converter);
50+
}
4351
private JsonConverter CreateMultiSearchConverter(MultiSearchDescriptor descriptor)
4452
{
4553
var multiSearchConverter = new MultiSearchConverter(_connectionSettings, descriptor);

src/Nest/ElasticClient.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ D descriptor
9595
{
9696
var config = descriptor.RequestConfiguration as IRequestConfiguration;
9797
var statusCodeAllowed = config != null && config.AllowedStatusCodes.HasAny(i => i == c.HttpStatusCode);
98-
98+
9999
if (c.Success || statusCodeAllowed)
100100
{
101101
c.Response.IsValid = true;
@@ -106,6 +106,13 @@ D descriptor
106106
}
107107

108108

109+
private static R CreateValidInstance<R>(IElasticsearchResponse response) where R : BaseResponse
110+
{
111+
var r = (R)typeof(R).CreateInstance();
112+
((IResponseWithRequestInformation)r).RequestInformation = response;
113+
r.IsValid = true;
114+
return r;
115+
}
109116
private static R CreateInvalidInstance<R>(IElasticsearchResponse response) where R : BaseResponse
110117
{
111118
var r = (R)typeof(R).CreateInstance();

src/Nest/Resolvers/Converters/MultiSearchConverter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
7878
if (realConverter == null)
7979
return new MultiSearchResponse { IsValid = false };
8080

81-
return realConverter.ReadJson(reader, objectType, existingValue, serializer);
81+
var mr = realConverter.ReadJson(reader, objectType, existingValue, serializer) as MultiSearchResponse;
82+
return mr;
8283
}
8384

8485

@@ -139,9 +140,8 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
139140
}
140141
}
141142
generic.Invoke(null, new object[] { m, serializer, response._Responses, this._settings });
142-
143143
}
144-
144+
145145
return response;
146146
}
147147

0 commit comments

Comments
 (0)