diff --git a/src/Nest/Domain/Responses/UpgradeStatusResponse.cs b/src/Nest/Domain/Responses/UpgradeStatusResponse.cs index 91389ac82b5..5360e943173 100644 --- a/src/Nest/Domain/Responses/UpgradeStatusResponse.cs +++ b/src/Nest/Domain/Responses/UpgradeStatusResponse.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using Nest.Resolvers.Converters; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -6,14 +7,23 @@ namespace Nest { + [JsonObject(MemberSerialization.OptIn)] + [JsonConverter(typeof(UpgradeStatusResponseConverter))] public interface IUpgradeStatusResponse : IResponse { + long SizeInBytes { get; set; } + string SizeToUpgradeInBytes { get; set; } + string SizeToUpgradeAncientInBytes { get; set; } Dictionary Upgrades { get; set; } + } public class UpgradeStatusResponse : BaseResponse, IUpgradeStatusResponse { [JsonConverter(typeof(DictionaryKeysAreNotPropertyNamesJsonConverter))] public Dictionary Upgrades { get; set; } + public long SizeInBytes { get; set; } + public string SizeToUpgradeInBytes { get; set; } + public string SizeToUpgradeAncientInBytes { get; set; } } } diff --git a/src/Nest/Domain/Status/UpgradeStatus.cs b/src/Nest/Domain/Status/UpgradeStatus.cs index d55697ca5c6..4c6bfa26185 100644 --- a/src/Nest/Domain/Status/UpgradeStatus.cs +++ b/src/Nest/Domain/Status/UpgradeStatus.cs @@ -19,5 +19,8 @@ public class UpgradeStatus [JsonProperty("size_to_upgrade_in_bytes")] public string SizeToUpgradeInBytes { get; set; } + + [JsonProperty("size_to_upgrade_ancient_in_bytes")] + public string SizeToUpgradeAncientInBytes { get; set; } } } diff --git a/src/Nest/ElasticClient-Upgrade.cs b/src/Nest/ElasticClient-Upgrade.cs index 954cc9c6ba2..c0b25cc7761 100644 --- a/src/Nest/ElasticClient-Upgrade.cs +++ b/src/Nest/ElasticClient-Upgrade.cs @@ -8,8 +8,6 @@ namespace Nest { - using UpgradeStatusResponseConverter = Func; - public partial class ElasticClient { public IUpgradeResponse Upgrade(IUpgradeRequest upgradeRequest) @@ -50,9 +48,7 @@ public IUpgradeStatusResponse UpgradeStatus(IUpgradeStatusRequest upgradeStatusR { return this.Dispatcher.Dispatch( upgradeStatusRequest, - (p, d) => this.RawDispatch.IndicesGetUpgradeDispatch( - p.DeserializationState(new UpgradeStatusResponseConverter((r, s) => DeserializeUpgradeStatusResponse(r, s))) - ) + (p, d) => this.RawDispatch.IndicesGetUpgradeDispatch(p) ); } @@ -61,9 +57,7 @@ public IUpgradeStatusResponse UpgradeStatus(Func s); return this.Dispatcher.Dispatch( upgradeStatusDescriptor, - (p, d) => this.RawDispatch.IndicesGetUpgradeDispatch( - p.DeserializationState(new UpgradeStatusResponseConverter((r, s) => DeserializeUpgradeStatusResponse(r, s))) - ) + (p, d) => this.RawDispatch.IndicesGetUpgradeDispatch(p) ); } @@ -71,9 +65,7 @@ public Task UpgradeStatusAsync(IUpgradeStatusRequest upg { return this.Dispatcher.DispatchAsync( upgradeStatusRequest, - (p, d) => this.RawDispatch.IndicesGetUpgradeDispatchAsync( - p.DeserializationState(new UpgradeStatusResponseConverter((r, s) => DeserializeUpgradeStatusResponse(r, s))) - ) + (p, d) => this.RawDispatch.IndicesGetUpgradeDispatchAsync(p) ); } @@ -82,18 +74,8 @@ public Task UpgradeStatusAsync(Func s); return this.Dispatcher.DispatchAsync( upgradeStatusDescriptor, - (p, d) => this.RawDispatch.IndicesGetUpgradeDispatchAsync( - p.DeserializationState(new UpgradeStatusResponseConverter((r, s) => DeserializeUpgradeStatusResponse(r, s))) - ) + (p, d) => this.RawDispatch.IndicesGetUpgradeDispatchAsync(p) ); } - - private UpgradeStatusResponse DeserializeUpgradeStatusResponse(IElasticsearchResponse response, Stream stream) - { - return new UpgradeStatusResponse - { - Upgrades = this.Serializer.Deserialize>(stream) - }; - } } } diff --git a/src/Nest/Nest.csproj b/src/Nest/Nest.csproj index 8ce9357f048..ab52f3b6ba8 100644 --- a/src/Nest/Nest.csproj +++ b/src/Nest/Nest.csproj @@ -1005,6 +1005,7 @@ + diff --git a/src/Nest/Resolvers/Converters/UpgradeStatusResponseConverter.cs b/src/Nest/Resolvers/Converters/UpgradeStatusResponseConverter.cs new file mode 100644 index 00000000000..5c02547dc6a --- /dev/null +++ b/src/Nest/Resolvers/Converters/UpgradeStatusResponseConverter.cs @@ -0,0 +1,77 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Nest.Resolvers.Converters +{ + public class UpgradeStatusResponseConverter : JsonConverter + { + + public override bool CanConvert(Type objectType) + { + return true; + } + + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) + { + var response = new UpgradeStatusResponse(); + reader.Read(); + if (reader.TokenType == JsonToken.EndObject) + return response; + bool newResponse = false; + if ((reader.Value as string) == "size_in_bytes") + { + newResponse = true; + reader.Read(); + response.SizeInBytes = (long)reader.Value; + reader.Read(); + reader.Read(); + response.SizeToUpgradeInBytes = reader.Value.ToString(); + reader.Read(); + reader.Read(); + response.SizeToUpgradeAncientInBytes = reader.Value.ToString(); + reader.Read(); + if (reader.TokenType != JsonToken.EndObject) + { + reader.Read(); + reader.Read(); + } + } + var upgrades = new Dictionary(); + while(true) + { + var status = new UpgradeStatus(); + var index = reader.Value as string; + reader.Read(); + reader.Read(); + reader.Read(); + status.SizeInBytes = (long)reader.Value; + reader.Read(); + reader.Read(); + status.SizeToUpgradeInBytes = reader.Value.ToString(); + if (newResponse) + { + reader.Read(); + reader.Read(); + status.SizeToUpgradeAncientInBytes = reader.Value.ToString(); + } + upgrades.Add(index, status); + reader.Read(); + reader.Read(); + if (reader.TokenType == JsonToken.EndObject) + break; + } + reader.Read(); + response.Upgrades = upgrades; + return response; + } + + public override bool CanWrite { get { return false; } } + public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) + { + throw new NotImplementedException(); + } + } +}