gfe-relnote: Use PTO_RETRANSMISSION instead of PROBE_RETRANSMISSION for PTO retransmission. Also populate transport connection stats for debugging purpose. Protected by existing gfe2_reloadable_flag_quic_enable_pto. PiperOrigin-RevId: 277780869 Change-Id: I8e7584bebaf966ecf3fa7549767ef8bdf9d1f14d
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc index 44b2ac4..2b52dd2 100644 --- a/quic/core/quic_sent_packet_manager.cc +++ b/quic/core/quic_sent_packet_manager.cc
@@ -46,7 +46,8 @@ return transmission_type == HANDSHAKE_RETRANSMISSION || transmission_type == TLP_RETRANSMISSION || transmission_type == PROBING_RETRANSMISSION || - transmission_type == RTO_RETRANSMISSION; + transmission_type == RTO_RETRANSMISSION || + transmission_type == PTO_RETRANSMISSION; } // If pacing rate is accurate, > 2 burst token is not likely to help first ACK @@ -441,7 +442,7 @@ !unacked_packets_.HasRetransmittableFrames(*transmission_info)) << "transmission_type: " << TransmissionTypeToString(transmission_type); // Handshake packets should never be sent as probing retransmissions. - DCHECK(pto_enabled_ || !transmission_info->has_crypto_handshake || + DCHECK(!transmission_info->has_crypto_handshake || transmission_type != PROBING_RETRANSMISSION); HandleRetransmission(transmission_type, transmission_info); @@ -727,7 +728,7 @@ for (QuicPacketNumber retransmission : probing_packets) { QUIC_DVLOG(1) << ENDPOINT << "Marking " << retransmission << " for probing retransmission"; - MarkForRetransmission(retransmission, PROBING_RETRANSMISSION); + MarkForRetransmission(retransmission, PTO_RETRANSMISSION); } // It is possible that there is not enough outstanding data for probing. }
diff --git a/quic/core/quic_types.cc b/quic/core/quic_types.cc index 6ebc4eb..5e717de 100644 --- a/quic/core/quic_types.cc +++ b/quic/core/quic_types.cc
@@ -478,6 +478,7 @@ RETURN_STRING_LITERAL(LOSS_RETRANSMISSION); RETURN_STRING_LITERAL(RTO_RETRANSMISSION); RETURN_STRING_LITERAL(TLP_RETRANSMISSION); + RETURN_STRING_LITERAL(PTO_RETRANSMISSION); RETURN_STRING_LITERAL(PROBING_RETRANSMISSION); default: // Some varz rely on this behavior for statistic collection.
diff --git a/quic/core/quic_types.h b/quic/core/quic_types.h index f3299d0..60754c0 100644 --- a/quic/core/quic_types.h +++ b/quic/core/quic_types.h
@@ -156,6 +156,7 @@ LOSS_RETRANSMISSION, // Retransmits due to loss detection. RTO_RETRANSMISSION, // Retransmits due to retransmit time out. TLP_RETRANSMISSION, // Tail loss probes. + PTO_RETRANSMISSION, // Retransmission due to probe timeout. PROBING_RETRANSMISSION, // Retransmission in order to probe bandwidth. LAST_TRANSMISSION_TYPE = PROBING_RETRANSMISSION, }; @@ -465,6 +466,8 @@ TLP_RETRANSMITTED, // This packet has been retransmitted when RTO fires. RTO_RETRANSMITTED, + // This packet has been retransmitted when PTO fires. + PTO_RETRANSMITTED, // This packet has been retransmitted for probing purpose. PROBE_RETRANSMITTED, LAST_PACKET_STATE = PROBE_RETRANSMITTED,
diff --git a/quic/core/quic_utils.cc b/quic/core/quic_utils.cc index 297cc8b..a6f6577 100644 --- a/quic/core/quic_utils.cc +++ b/quic/core/quic_utils.cc
@@ -165,6 +165,7 @@ RETURN_STRING_LITERAL(LOST); RETURN_STRING_LITERAL(TLP_RETRANSMITTED); RETURN_STRING_LITERAL(RTO_RETRANSMITTED); + RETURN_STRING_LITERAL(PTO_RETRANSMITTED); RETURN_STRING_LITERAL(PROBE_RETRANSMITTED); } return "INVALID_SENT_PACKET_STATE"; @@ -329,6 +330,8 @@ return TLP_RETRANSMITTED; case RTO_RETRANSMISSION: return RTO_RETRANSMITTED; + case PTO_RETRANSMISSION: + return PTO_RETRANSMITTED; case PROBING_RETRANSMISSION: return PROBE_RETRANSMITTED; default:
diff --git a/quic/core/quic_utils_test.cc b/quic/core/quic_utils_test.cc index 213ff38..362c766 100644 --- a/quic/core/quic_utils_test.cc +++ b/quic/core/quic_utils_test.cc
@@ -131,6 +131,8 @@ EXPECT_EQ(TLP_RETRANSMITTED, state); } else if (i == RTO_RETRANSMISSION) { EXPECT_EQ(RTO_RETRANSMITTED, state); + } else if (i == PTO_RETRANSMISSION) { + EXPECT_EQ(PTO_RETRANSMITTED, state); } else if (i == PROBING_RETRANSMISSION) { EXPECT_EQ(PROBE_RETRANSMITTED, state); } else {