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 {