1+ using System ;
12using Newtonsoft . Json ;
23
34namespace Nest
@@ -23,9 +24,16 @@ public interface IRolloverLifecycleAction : ILifecycleAction
2324 long ? MaximumDocuments { get ; set ; }
2425
2526 /// <summary>
26- /// Max primary shard index storage size in bytes .
27+ /// Max primary shard index storage size using byte notation (e.g. 40gb or 40000000000b) .
2728 /// </summary>
2829 [ JsonProperty ( "max_size" ) ]
30+ string MaximumSizeAsString { get ; set ; }
31+
32+ /// <summary>
33+ /// Max primary shard index storage size in bytes.
34+ /// </summary>
35+ [ JsonIgnore ]
36+ [ Obsolete ( "Use MaximumSizeAsString property instead" ) ]
2937 long ? MaximumSize { get ; set ; }
3038 }
3139
@@ -38,23 +46,91 @@ public class RolloverLifecycleAction : IRolloverLifecycleAction
3846 public long ? MaximumDocuments { get ; set ; }
3947
4048 /// <inheritdoc />
41- public long ? MaximumSize { get ; set ; }
49+ public string MaximumSizeAsString { get ; set ; }
50+
51+ /// <inheritdoc />
52+ [ Obsolete ( "Use MaximumSizeAsString property instead" ) ]
53+ public long ? MaximumSize
54+ {
55+ get => BytesValueConverter . ToBytes ( MaximumSizeAsString ) ;
56+ set
57+ {
58+ if ( value == null )
59+ {
60+ MaximumSizeAsString = null ;
61+ return ;
62+ }
63+ MaximumSizeAsString = value + "b" ;
64+ }
65+ }
66+ }
67+
68+ public static class BytesValueConverter
69+ {
70+ public static long ? ToBytes ( string value )
71+ {
72+ if ( string . IsNullOrEmpty ( value ) )
73+ {
74+ return null ;
75+ }
76+
77+ if ( value . EndsWith ( "pb" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 2 ) ) * 1_125_899_906_842_624 ;
78+ if ( value . EndsWith ( "tb" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 2 ) ) * 1_099_511_627_776 ;
79+ if ( value . EndsWith ( "gb" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 2 ) ) * 1_073_741_824 ;
80+ if ( value . EndsWith ( "mb" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 2 ) ) * 1_048_576 ;
81+ if ( value . EndsWith ( "kb" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 2 ) ) * 1_024 ;
82+
83+ if ( value . EndsWith ( "p" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 1 ) ) * 1_125_899_906_842_624 ;
84+ if ( value . EndsWith ( "t" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 1 ) ) * 1_099_511_627_776 ;
85+ if ( value . EndsWith ( "g" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 1 ) ) * 1_073_741_824 ;
86+ if ( value . EndsWith ( "m" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 1 ) ) * 1_048_576 ;
87+ if ( value . EndsWith ( "k" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 1 ) ) * 1_024 ;
88+
89+ if ( value . EndsWith ( "b" ) ) return Convert . ToInt64 ( value . Substring ( 0 , value . Length - 1 ) ) ;
90+
91+ // Assume bytes
92+ return Convert . ToInt64 ( value ) ;
93+ }
4294 }
4395
4496 public class RolloverLifecycleActionDescriptor
4597 : DescriptorBase < RolloverLifecycleActionDescriptor , IRolloverLifecycleAction > , IRolloverLifecycleAction
4698 {
99+ private string _maximumSizeAsString ;
100+
47101 /// <inheritdoc cref="IRolloverLifecycleAction.MaximumAge" />
48102 Time IRolloverLifecycleAction . MaximumAge { get ; set ; }
49103
50104 /// <inheritdoc cref="IRolloverLifecycleAction.MaximumDocuments" />
51105 long ? IRolloverLifecycleAction . MaximumDocuments { get ; set ; }
52106
107+ /// <inheritdoc cref="IRolloverLifecycleAction.MaximumSizeAsString" />
108+ string IRolloverLifecycleAction . MaximumSizeAsString { get => _maximumSizeAsString ; set => _maximumSizeAsString = value ; }
109+
53110 /// <inheritdoc cref="IRolloverLifecycleAction.MaximumSize" />
54- long ? IRolloverLifecycleAction . MaximumSize { get ; set ; }
111+ [ Obsolete ( "Use MaximumSizeAsString property instead" ) ]
112+ long ? IRolloverLifecycleAction . MaximumSize
113+ {
114+ get => BytesValueConverter . ToBytes ( _maximumSizeAsString ) ;
115+ set
116+ {
117+ if ( value == null )
118+ {
119+ _maximumSizeAsString = null ;
120+ return ;
121+ }
122+ _maximumSizeAsString = value + "b" ;
123+ }
124+ }
125+
126+ /// <inheritdoc cref="IRolloverLifecycleAction.MaximumSizeAsString" />
127+ public RolloverLifecycleActionDescriptor MaximumSizeAsString ( string maximumSizeAsString ) => Assign ( maximumSizeAsString , ( a , v ) => a . MaximumSizeAsString = maximumSizeAsString ) ;
55128
56129 /// <inheritdoc cref="IRolloverLifecycleAction.MaximumSize" />
130+ [ Obsolete ( "Use MaximumSizeAsString property instead" ) ]
131+ #pragma warning disable 618
57132 public RolloverLifecycleActionDescriptor MaximumSize ( long ? maximumSize ) => Assign ( maximumSize , ( a , v ) => a . MaximumSize = maximumSize ) ;
133+ #pragma warning restore 618
58134
59135 /// <inheritdoc cref="IRolloverLifecycleAction.MaximumAge" />
60136 public RolloverLifecycleActionDescriptor MaximumAge ( Time maximumAge ) => Assign ( maximumAge , ( a , v ) => a . MaximumAge = maximumAge ) ;
0 commit comments