Skip to content

Commit 9ae56fd

Browse files
committed
Merge pull request #1461 from elastic/fix/upgrade-status-response
Add custom converter for UpgradeStatusResponse
2 parents 08b27b7 + 9bf2e5e commit 9ae56fd

File tree

5 files changed

+96
-23
lines changed

5 files changed

+96
-23
lines changed

Diff for: src/Nest/Domain/Responses/UpgradeStatusResponse.cs

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,29 @@
1-
using Newtonsoft.Json;
1+
using Nest.Resolvers.Converters;
2+
using Newtonsoft.Json;
23
using System;
34
using System.Collections.Generic;
45
using System.Linq;
56
using System.Text;
67

78
namespace Nest
89
{
10+
[JsonObject(MemberSerialization.OptIn)]
11+
[JsonConverter(typeof(UpgradeStatusResponseConverter))]
912
public interface IUpgradeStatusResponse : IResponse
1013
{
14+
long SizeInBytes { get; set; }
15+
string SizeToUpgradeInBytes { get; set; }
16+
string SizeToUpgradeAncientInBytes { get; set; }
1117
Dictionary<string, UpgradeStatus> Upgrades { get; set; }
18+
1219
}
1320

1421
public class UpgradeStatusResponse : BaseResponse, IUpgradeStatusResponse
1522
{
1623
[JsonConverter(typeof(DictionaryKeysAreNotPropertyNamesJsonConverter))]
1724
public Dictionary<string, UpgradeStatus> Upgrades { get; set; }
25+
public long SizeInBytes { get; set; }
26+
public string SizeToUpgradeInBytes { get; set; }
27+
public string SizeToUpgradeAncientInBytes { get; set; }
1828
}
1929
}

Diff for: src/Nest/Domain/Status/UpgradeStatus.cs

+3
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,8 @@ public class UpgradeStatus
1919

2020
[JsonProperty("size_to_upgrade_in_bytes")]
2121
public string SizeToUpgradeInBytes { get; set; }
22+
23+
[JsonProperty("size_to_upgrade_ancient_in_bytes")]
24+
public string SizeToUpgradeAncientInBytes { get; set; }
2225
}
2326
}

Diff for: src/Nest/ElasticClient-Upgrade.cs

+4-22
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
namespace Nest
1010
{
11-
using UpgradeStatusResponseConverter = Func<IElasticsearchResponse, Stream, UpgradeStatusResponse>;
12-
1311
public partial class ElasticClient
1412
{
1513
public IUpgradeResponse Upgrade(IUpgradeRequest upgradeRequest)
@@ -50,9 +48,7 @@ public IUpgradeStatusResponse UpgradeStatus(IUpgradeStatusRequest upgradeStatusR
5048
{
5149
return this.Dispatcher.Dispatch<IUpgradeStatusRequest, UpgradeStatusRequestParameters, UpgradeStatusResponse>(
5250
upgradeStatusRequest,
53-
(p, d) => this.RawDispatch.IndicesGetUpgradeDispatch<UpgradeStatusResponse>(
54-
p.DeserializationState(new UpgradeStatusResponseConverter((r, s) => DeserializeUpgradeStatusResponse(r, s)))
55-
)
51+
(p, d) => this.RawDispatch.IndicesGetUpgradeDispatch<UpgradeStatusResponse>(p)
5652
);
5753
}
5854

@@ -61,19 +57,15 @@ public IUpgradeStatusResponse UpgradeStatus(Func<UpgradeStatusDescriptor, Upgrad
6157
upgradeStatusDescriptor = upgradeStatusDescriptor ?? (s => s);
6258
return this.Dispatcher.Dispatch<UpgradeStatusDescriptor, UpgradeStatusRequestParameters, UpgradeStatusResponse>(
6359
upgradeStatusDescriptor,
64-
(p, d) => this.RawDispatch.IndicesGetUpgradeDispatch<UpgradeStatusResponse>(
65-
p.DeserializationState(new UpgradeStatusResponseConverter((r, s) => DeserializeUpgradeStatusResponse(r, s)))
66-
)
60+
(p, d) => this.RawDispatch.IndicesGetUpgradeDispatch<UpgradeStatusResponse>(p)
6761
);
6862
}
6963

7064
public Task<IUpgradeStatusResponse> UpgradeStatusAsync(IUpgradeStatusRequest upgradeStatusRequest)
7165
{
7266
return this.Dispatcher.DispatchAsync<IUpgradeStatusRequest, UpgradeStatusRequestParameters, UpgradeStatusResponse, IUpgradeStatusResponse>(
7367
upgradeStatusRequest,
74-
(p, d) => this.RawDispatch.IndicesGetUpgradeDispatchAsync<UpgradeStatusResponse>(
75-
p.DeserializationState(new UpgradeStatusResponseConverter((r, s) => DeserializeUpgradeStatusResponse(r, s)))
76-
)
68+
(p, d) => this.RawDispatch.IndicesGetUpgradeDispatchAsync<UpgradeStatusResponse>(p)
7769
);
7870
}
7971

@@ -82,18 +74,8 @@ public Task<IUpgradeStatusResponse> UpgradeStatusAsync(Func<UpgradeStatusDescrip
8274
upgradeStatusDescriptor = upgradeStatusDescriptor ?? (s => s);
8375
return this.Dispatcher.DispatchAsync<UpgradeStatusDescriptor, UpgradeStatusRequestParameters, UpgradeStatusResponse, IUpgradeStatusResponse>(
8476
upgradeStatusDescriptor,
85-
(p, d) => this.RawDispatch.IndicesGetUpgradeDispatchAsync<UpgradeStatusResponse>(
86-
p.DeserializationState(new UpgradeStatusResponseConverter((r, s) => DeserializeUpgradeStatusResponse(r, s)))
87-
)
77+
(p, d) => this.RawDispatch.IndicesGetUpgradeDispatchAsync<UpgradeStatusResponse>(p)
8878
);
8979
}
90-
91-
private UpgradeStatusResponse DeserializeUpgradeStatusResponse(IElasticsearchResponse response, Stream stream)
92-
{
93-
return new UpgradeStatusResponse
94-
{
95-
Upgrades = this.Serializer.Deserialize<Dictionary<string, UpgradeStatus>>(stream)
96-
};
97-
}
9880
}
9981
}

Diff for: src/Nest/Nest.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,7 @@
10051005
<Compile Include="Resolvers\Converters\TokenizerCollectionConverter.cs" />
10061006
<Compile Include="Resolvers\Converters\TypeNameMarkerConverter.cs" />
10071007
<Compile Include="Resolvers\Converters\GeoPrecisionConverter.cs" />
1008+
<Compile Include="Resolvers\Converters\UpgradeStatusResponseConverter.cs" />
10081009
<Compile Include="Resolvers\Converters\UriJsonConverter.cs" />
10091010
<Compile Include="Resolvers\Converters\WarmerMappingConverter.cs" />
10101011
<Compile Include="Resolvers\Converters\ShardsSegmentConverter.cs" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace Nest.Resolvers.Converters
8+
{
9+
public class UpgradeStatusResponseConverter : JsonConverter
10+
{
11+
12+
public override bool CanConvert(Type objectType)
13+
{
14+
return true;
15+
}
16+
17+
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
18+
{
19+
var response = new UpgradeStatusResponse();
20+
reader.Read();
21+
if (reader.TokenType == JsonToken.EndObject)
22+
return response;
23+
bool newResponse = false;
24+
if ((reader.Value as string) == "size_in_bytes")
25+
{
26+
newResponse = true;
27+
reader.Read();
28+
response.SizeInBytes = (long)reader.Value;
29+
reader.Read();
30+
reader.Read();
31+
response.SizeToUpgradeInBytes = reader.Value.ToString();
32+
reader.Read();
33+
reader.Read();
34+
response.SizeToUpgradeAncientInBytes = reader.Value.ToString();
35+
reader.Read();
36+
if (reader.TokenType != JsonToken.EndObject)
37+
{
38+
reader.Read();
39+
reader.Read();
40+
}
41+
}
42+
var upgrades = new Dictionary<string, UpgradeStatus>();
43+
while(true)
44+
{
45+
var status = new UpgradeStatus();
46+
var index = reader.Value as string;
47+
reader.Read();
48+
reader.Read();
49+
reader.Read();
50+
status.SizeInBytes = (long)reader.Value;
51+
reader.Read();
52+
reader.Read();
53+
status.SizeToUpgradeInBytes = reader.Value.ToString();
54+
if (newResponse)
55+
{
56+
reader.Read();
57+
reader.Read();
58+
status.SizeToUpgradeAncientInBytes = reader.Value.ToString();
59+
}
60+
upgrades.Add(index, status);
61+
reader.Read();
62+
reader.Read();
63+
if (reader.TokenType == JsonToken.EndObject)
64+
break;
65+
}
66+
reader.Read();
67+
response.Upgrades = upgrades;
68+
return response;
69+
}
70+
71+
public override bool CanWrite { get { return false; } }
72+
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
73+
{
74+
throw new NotImplementedException();
75+
}
76+
}
77+
}

0 commit comments

Comments
 (0)