Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't send piggybacked acks when they are not needed. #7958

Merged
merged 1 commit into from
Jun 28, 2021

Conversation

bzbarsky-apple
Copy link
Contributor

We used to set a persistent flag on reliable message contexts that
would cause them to send piggyback acks with all responses after that
point. Stop doing that.

Also simplify the handling of the IsAckPending state. It gets set to
true when we set a pending ack id, gets set to false when someone
takes that ack id from us (e.g. to send the ack). This ensures that
SendStandaloneAckMessage() clears the IsAckPending() state (which it
already did, but that was not very obvious).

Fixes #7339

Problem

We are sending acks when we don't need to (and arguably should not), and causing duplicate acks to appear on the other side, which can cause problems.

Change overview

Ensure that we only send an ack when we actually have an ack pending.

Testing

New unit tests were added to cover the failure modes I was aware of that were caused by this problem. Existing unit tests were run and pass.

We used to set a persistent flag on reliable message contexts that
would cause them to send piggyback acks with all responses after that
point.  Stop doing that.

Also simplify the handling of the IsAckPending state.  It gets set to
true when we set a pending ack id, gets set to false when someone
takes that ack id from us (e.g. to send the ack).  This ensures that
SendStandaloneAckMessage() clears the IsAckPending() state (which it
already did, but that was not very obvious).

Fixes project-chip#7339
@woody-apple
Copy link
Contributor

@woody-apple woody-apple merged commit 233ec0f into project-chip:master Jun 28, 2021
@bzbarsky-apple bzbarsky-apple deleted the fix-mrp-ack-sending branch June 28, 2021 22:14
bzbarsky-apple added a commit to bzbarsky-apple/connectedhomeip that referenced this pull request Jun 29, 2021
With project-chip#7958 merged,
this should not be a problem.
bzbarsky-apple added a commit to bzbarsky-apple/connectedhomeip that referenced this pull request Jun 29, 2021
With project-chip#7958 merged,
this should not be a problem.
bzbarsky-apple added a commit to bzbarsky-apple/connectedhomeip that referenced this pull request Jun 29, 2021
With project-chip#7958 merged,
this should not be a problem.

Prospectively re-enabling for WriteClient too, though that code is not
used yet.
bzbarsky-apple added a commit to bzbarsky-apple/connectedhomeip that referenced this pull request Jun 29, 2021
With project-chip#7958 merged,
this should not be a problem.

Prospectively re-enabling for WriteClient too, though that code is not
used yet.
woody-apple pushed a commit that referenced this pull request Jun 29, 2021
With #7958 merged,
this should not be a problem.

Prospectively re-enabling for WriteClient too, though that code is not
used yet.
nikita-s-wrk pushed a commit to nikita-s-wrk/connectedhomeip that referenced this pull request Sep 23, 2021
)

We used to set a persistent flag on reliable message contexts that
would cause them to send piggyback acks with all responses after that
point.  Stop doing that.

Also simplify the handling of the IsAckPending state.  It gets set to
true when we set a pending ack id, gets set to false when someone
takes that ack id from us (e.g. to send the ack).  This ensures that
SendStandaloneAckMessage() clears the IsAckPending() state (which it
already did, but that was not very obvious).

Fixes project-chip#7339
nikita-s-wrk pushed a commit to nikita-s-wrk/connectedhomeip that referenced this pull request Sep 23, 2021
With project-chip#7958 merged,
this should not be a problem.

Prospectively re-enabling for WriteClient too, though that code is not
used yet.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ReliableMessageContext::HasPeerRequestedAck should not exist
4 participants