mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-08-05 11:21:09 +03:00
Keep track of the minimum reliable size ACKed
Summary: With normal resets, we transition from `StreamSendState::ResetSent` to `StreamSendState::Closed` when we get an ACK for a RESET_STREAM frame. With reliable resets, this is going to be a little more complicated. We can't automatically transition from `StreamSendState::ResetSent` to `StreamSendState::Closed` when we get an ACK for a RESET_STREAM_AT frame because it's possible that the peer hasn't yet received all data until the reliable reset offset. My idea is the following: Keep track of the `minReliableSizeAcked`, which is the lowest value of the reliable size in any RESET_STREAM_AT frame that was ACKed by the peer. We set it to 0 if a RESET_STREAM frame was ACKed by the peer. Then, we can transition from `StreamSendState::ResetSent` to `StreamSendState::Closed` if any one of the following two events happen: * We get an ACK for a RESET_STREAM_AT or a RESET_STREAM frame, and all data until the `minReliableSizeAcked` has been ACKed by the peer. * We get an ACK for stream data, and this puts us in a state where all data until the `minReliableSizeAcked` has been ACKed by the peer. Note: This diff doesn't have any functional change. The only change is that we're keeping track of the `minReliableSizeAcked`, but aren't using it anywhere. Reviewed By: mjoras Differential Revision: D66781199 fbshipit-source-id: 2aa5138a18f70e9801e59e747460558ba706939c
This commit is contained in:
committed by
Facebook GitHub Bot
parent
1695ecc575
commit
fca90d483b
@@ -797,7 +797,7 @@ TEST_P(QuicTransportImplTestBase, StopSendingClosesIngress) {
|
||||
// suppose we tx a rst stream (and rx its corresponding ack), expect
|
||||
// terminal state and queued in closed streams
|
||||
transport->resetStream(streamID, GenericApplicationErrorCode::NO_ERROR);
|
||||
sendRstAckSMHandler(*stream);
|
||||
sendRstAckSMHandler(*stream, folly::none);
|
||||
EXPECT_TRUE(stream->inTerminalStates());
|
||||
EXPECT_TRUE(streamManager.closedStreams().contains(streamID));
|
||||
transport->driveReadCallbacks();
|
||||
@@ -831,7 +831,7 @@ TEST_P(QuicTransportImplTestBase, StopSendingClosesIngress) {
|
||||
|
||||
// suppose we tx a rst stream (and rx its corresponding ack)
|
||||
transport->resetStream(streamID, GenericApplicationErrorCode::NO_ERROR);
|
||||
sendRstAckSMHandler(*stream);
|
||||
sendRstAckSMHandler(*stream, folly::none);
|
||||
EXPECT_EQ(stream->sendState, StreamSendState::Closed);
|
||||
EXPECT_EQ(stream->recvState, StreamRecvState::Open);
|
||||
transport->driveReadCallbacks();
|
||||
|
Reference in New Issue
Block a user