88
99package  org .opensearch .index .store .remote .filecache ;
1010
11+ import  org .opensearch .Version ;
1112import  org .opensearch .common .annotation .InternalApi ;
1213import  org .opensearch .common .annotation .PublicApi ;
1314import  org .opensearch .core .common .io .stream .StreamInput ;
@@ -77,9 +78,16 @@ public FileCacheStats(final StreamInput in) throws IOException {
7778        this .used  = in .readLong ();
7879        this .pinned  = in .readLong ();
7980        this .evicted  = in .readLong ();
80-         this .removed  = in .readLong ();
8181        this .hits  = in .readLong ();
82-         this .misses  = in .readLong ();
82+ 
83+         // Version guard for enhanced fields - backward compatibility for rolling upgrades 
84+         if  (in .getVersion ().onOrAfter (Version .V_3_3_0 )) {
85+             this .removed  = in .readLong ();
86+             this .misses  = in .readLong ();
87+         } else  {
88+             this .removed  = 0L ;
89+             this .misses  = 0L ;
90+         }
8391    }
8492
8593    @ Override 
@@ -90,9 +98,13 @@ public void writeTo(final StreamOutput out) throws IOException {
9098        out .writeLong (used );
9199        out .writeLong (pinned );
92100        out .writeLong (evicted );
93-         out .writeLong (removed );
94101        out .writeLong (hits );
95-         out .writeLong (misses );
102+ 
103+         // Version guard for enhanced fields - backward compatibility for rolling upgrades 
104+         if  (out .getVersion ().onOrAfter (Version .V_3_3_0 )) {
105+             out .writeLong (removed );
106+             out .writeLong (misses );
107+         }
96108    }
97109
98110    public  long  getActive () {
@@ -145,6 +157,7 @@ static final class Fields {
145157        static  final  String  USED  = "used" ;
146158        static  final  String  PINNED  = "pinned" ;
147159        static  final  String  USED_IN_BYTES  = "used_in_bytes" ;
160+         static  final  String  PINNED_IN_BYTES  = "pinned_in_bytes" ;
148161        static  final  String  EVICTIONS  = "evictions" ;
149162        static  final  String  EVICTIONS_IN_BYTES  = "evictions_in_bytes" ;
150163        static  final  String  REMOVED  = "removed" ;
@@ -159,7 +172,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
159172        builder .startObject (statsType .toString ());
160173        builder .humanReadableField (FileCacheStats .Fields .ACTIVE_IN_BYTES , FileCacheStats .Fields .ACTIVE , new  ByteSizeValue (getActive ()));
161174        builder .humanReadableField (FileCacheStats .Fields .USED_IN_BYTES , FileCacheStats .Fields .USED , new  ByteSizeValue (getUsed ()));
162-         builder .humanReadableField (FileCacheStats .Fields .USED_IN_BYTES , Fields .PINNED , new  ByteSizeValue (getPinnedUsage ()));
175+         builder .humanReadableField (FileCacheStats .Fields .PINNED_IN_BYTES , Fields .PINNED , new  ByteSizeValue (getPinnedUsage ()));
163176        builder .humanReadableField (
164177            FileCacheStats .Fields .EVICTIONS_IN_BYTES ,
165178            FileCacheStats .Fields .EVICTIONS ,
0 commit comments