@@ -159,9 +159,11 @@ private void deserializeTPipeTransferRawReq(
159159 final ByteBuffer buffer , final TabletStringInternPool tabletStringInternPool ) {
160160 final int startPosition = buffer .position ();
161161 try {
162+ // Current V1 raw tablet requests can be converted to InsertTabletStatement directly. Keep
163+ // this as the first attempt to avoid the overhead of constructing an intermediate Tablet.
162164 final InsertTabletStatement insertTabletStatement =
163- TabletStatementConverter .deserializeLegacyStatementFromTabletFormat (
164- buffer , tabletStringInternPool );
165+ TabletStatementConverter .deserializeStatementFromTabletFormat (
166+ buffer , false , tabletStringInternPool );
165167 isAligned = insertTabletStatement .isAligned ();
166168 statement = insertTabletStatement ;
167169 return ;
@@ -170,16 +172,20 @@ private void deserializeTPipeTransferRawReq(
170172 }
171173
172174 try {
175+ // Some old senders serialize Tablet without column categories. Retry with the legacy reader
176+ // before falling back to the full Tablet deserialization path.
173177 final InsertTabletStatement insertTabletStatement =
174- TabletStatementConverter .deserializeStatementFromTabletFormat (
175- buffer , false , tabletStringInternPool );
178+ TabletStatementConverter .deserializeLegacyStatementFromTabletFormat (
179+ buffer , tabletStringInternPool );
176180 isAligned = insertTabletStatement .isAligned ();
177181 statement = insertTabletStatement ;
182+ return ;
178183 } catch (final Exception e ) {
179184 buffer .position (startPosition );
180- tablet = PipeTabletUtils .internTablet (Tablet .deserialize (buffer ), tabletStringInternPool );
181- isAligned = ReadWriteIOUtils .readBool (buffer );
182185 }
186+
187+ tablet = PipeTabletUtils .internTablet (Tablet .deserialize (buffer ), tabletStringInternPool );
188+ isAligned = ReadWriteIOUtils .readBool (buffer );
183189 }
184190
185191 /////////////////////////////// Air Gap ///////////////////////////////
0 commit comments