@@ -40,14 +40,19 @@ public static void writeIndexHeader(RecyclerBytesStreamOutput buffer, Translog.I
4040 int uidVIntLen = RecyclerBytesStreamOutput .vIntLength (uidLen );
4141 BytesRef page = buffer .tryGetPageForWrite (FIXED_INDEX_HEADER_SIZE + uidLen + uidVIntLen );
4242 if (page != null ) {
43- writeFastIndexHeader (buffer , index , page , uidVIntLen );
43+ writeFastIndexHeader (buffer , index , page , uidLen , uidVIntLen );
4444 } else {
4545 writeSlowIndexHeader (buffer , index );
4646 }
4747 }
4848
49- private static void writeFastIndexHeader (RecyclerBytesStreamOutput buffer , Translog .Index index , BytesRef page , int uidVIntLen )
50- throws IOException {
49+ private static void writeFastIndexHeader (
50+ RecyclerBytesStreamOutput buffer ,
51+ Translog .Index index ,
52+ BytesRef page ,
53+ int uidLen ,
54+ int uidVIntLen
55+ ) throws IOException {
5156 BytesRef uid = index .uid ();
5257 String routing = index .routing ();
5358
@@ -62,7 +67,7 @@ private static void writeFastIndexHeader(RecyclerBytesStreamOutput buffer, Trans
6267 ByteUtils .writeLongBE (index .primaryTerm (), bytes , off + 30 );
6368 StreamOutput .putVInt (bytes , uid .length , off + 38 );
6469 System .arraycopy (uid .bytes , uid .offset , bytes , off + 38 + uidVIntLen , uid .length );
65- bytes [off + 38 + uidVIntLen + uid . length ] = index .routing () == null ? (byte ) 0 : (byte ) 1 ;
70+ bytes [off + 38 + uidVIntLen + uidLen ] = index .routing () == null ? (byte ) 0 : (byte ) 1 ;
6671
6772 long variableLengthStart = buffer .position ();
6873 // Write variable length items in header
@@ -95,19 +100,15 @@ private static void writeSlowIndexHeader(RecyclerBytesStreamOutput buffer, Trans
95100 }
96101
97102 public static void writeDeleteHeader (RecyclerBytesStreamOutput buffer , Translog .Delete delete ) throws IOException {
98- int uidLen = delete .uid ().length ;
99- int uidVIntLen = RecyclerBytesStreamOutput .vIntLength (uidLen );
100- BytesRef page = buffer .tryGetPageForWrite (FIXED_DELETE_HEADER_SIZE + uidLen + uidVIntLen );
103+ BytesRef page = buffer .tryGetPageForWrite (FIXED_DELETE_HEADER_SIZE );
101104 if (page != null ) {
102- writeFastDeleteHeader (delete , page , uidVIntLen );
105+ writeFastDeleteHeader (buffer , delete , page );
103106 } else {
104107 writeSlowDeleteHeader (buffer , delete );
105108 }
106109 }
107110
108- private static void writeFastDeleteHeader (Translog .Delete delete , BytesRef page , int uidVIntLen ) throws IOException {
109- BytesRef uid = delete .uid ();
110-
111+ private static void writeFastDeleteHeader (RecyclerBytesStreamOutput buffer , Translog .Delete delete , BytesRef page ) throws IOException {
111112 int off = page .offset ;
112113 byte [] bytes = page .bytes ;
113114 bytes [off + 4 ] = Translog .Operation .Type .DELETE .id ();
@@ -116,11 +117,13 @@ private static void writeFastDeleteHeader(Translog.Delete delete, BytesRef page,
116117 ByteUtils .writeLongBE (delete .version (), bytes , off + 6 );
117118 ByteUtils .writeLongBE (delete .seqNo (), bytes , off + 14 );
118119 ByteUtils .writeLongBE (delete .primaryTerm (), bytes , off + 22 );
119- StreamOutput .putVInt (bytes , uid .length , off + 30 );
120- System .arraycopy (uid .bytes , uid .offset , bytes , off + 30 + uidVIntLen , uid .length );
121120
121+ long variableLengthStart = buffer .position ();
122+ // Write variable length items in header
123+ buffer .writeBytesRef (delete .uid ());
124+ int variableLengthSize = (int ) (buffer .position () - variableLengthStart );
122125 // The total operation size is the header size + 4 bytes for checksum
123- int sizeOfOperation = FIXED_DELETE_HEADER_SIZE - Integer .BYTES + uidVIntLen + uid . length + Integer .BYTES ;
126+ int sizeOfOperation = FIXED_DELETE_HEADER_SIZE - Integer .BYTES + variableLengthSize + Integer .BYTES ;
124127 ByteUtils .writeIntBE (sizeOfOperation , bytes , off );
125128 }
126129
0 commit comments