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

Delay connection closed (#69) #79

Merged
merged 7 commits into from
Nov 10, 2018
Merged

Delay connection closed (#69) #79

merged 7 commits into from
Nov 10, 2018

Conversation

mehaase
Copy link
Contributor

@mehaase mehaase commented Nov 7, 2018

As described in the issue, get_message() was raising connection closed
even if there were pending messages. Per Nathaniel's suggestion, the
proper behavior is this:

  1. If the remote endpoint closed the connection, then the local endpoint
    may continue reading all messages sent prior to closing.
  2. If the local endpoint closed the connection, then the local endpoint
    may not read any more messages.

I added tests for these two conditions and implemented the behavior by
closing the ReceiveChannel inside the connection's aclose(). This
requires a bit of additional exception handling inside get_message()
and inside the reader task.

One slight surprise is that the test couldn't be written due to the bug
in #74! The client would hang because the reader task is blocked by
the unconsumed messages. So I changed the channel size to 32, which
allows this test to work, and I will replace this hard-coded value
when I fix #74.

belm0 and others added 2 commits November 6, 2018 17:56
As described in the issue, get_message() was raising connection closed
even if there were pending messages. Per Nathaniel's suggestion, the
proper behavior is this:

1. If the remote endpoint closed the connection, then the local endpoint
   may continue reading all messages sent prior to closing.
2. If the local endpoint closed the connection, then the local endpoint
   may not read any more messages.

I added tests for these two conditions and implemented the behavior by
closing the ReceiveChannel inside the connection's `aclose()`. This
requires a bit of additional exception handling inside `get_message()`
and inside the reader task.

One slight surprise is that the test can't be written due to the bug
in #74! The client would hang because the reader task is blocked by
the unconsumed messages. So I changed the channel size to 32, which
allows this test to work, and I will replace this hard-coded value
when I fix #74.
@mehaase mehaase requested a review from belm0 November 7, 2018 21:47
@coveralls
Copy link

coveralls commented Nov 7, 2018

Pull Request Test Coverage Report for Build 79

  • 14 of 14 (100.0%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage increased (+1.8%) to 92.954%

Totals Coverage Status
Change from base Build 71: 1.8%
Covered Lines: 343
Relevant Lines: 369

💛 - Coveralls

tests/test_connection.py Show resolved Hide resolved
tests/test_connection.py Outdated Show resolved Hide resolved
trio_websocket/_impl.py Outdated Show resolved Hide resolved
trio_websocket/_impl.py Show resolved Hide resolved
belm0 and others added 3 commits November 8, 2018 12:27
  * combine BytesReceived and TextReceived handlers
  * use join to build message rather than +=
Copy link
Member

@belm0 belm0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to first confirm if there isn't a direct resolution to #74, which would obviate need for the buffering workaround.

tests/test_connection.py Show resolved Hide resolved
tests/test_connection.py Show resolved Hide resolved
tests/test_connection.py Outdated Show resolved Hide resolved
trio_websocket/_impl.py Outdated Show resolved Hide resolved
* Leave the default channel size hard coded to zero.
* Skip the test that requires non-zero channel size.
* Fix incomplete doc string on get_message().
belm0 pushed a commit to belm0/trio-websocket that referenced this pull request Nov 9, 2018
@belm0 belm0 mentioned this pull request Nov 9, 2018
belm0 pushed a commit to belm0/trio-websocket that referenced this pull request Nov 10, 2018
@mehaase mehaase merged commit 64822ca into master Nov 10, 2018
@mehaase mehaase deleted the delay_connection_closed branch November 10, 2018 19:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

open_websocket context manager doesn't exit if there are pending receives
4 participants