-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
Fix issue with pack_commands
returning an empty byte sequence
#2416
Conversation
0841e06
to
c9dfad3
Compare
@jmcbailey Can you think of a test that can help us reproduce this? |
@chayim I can certainly add a unit test for the method(s) to cover this scenario. Adding a test to reproduce the SSL error would be trickier... |
@jmcbailey Does this only occur with SSL? I'm happy to forgo the SSL side if they can be isolated. @dvora-h can you help @jmcbailey out here? |
c9dfad3
to
fa669ff
Compare
Codecov ReportBase: 92.28% // Head: 78.16% // Decreases project coverage by
📣 This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more Additional details and impacted files@@ Coverage Diff @@
## master #2416 +/- ##
===========================================
- Coverage 92.28% 78.16% -14.13%
===========================================
Files 115 115
Lines 29734 29736 +2
===========================================
- Hits 27440 23242 -4198
- Misses 2294 6494 +4200
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. ☔ View full report at Codecov. |
Co-authored-by: Viktor Ivanov <[email protected]> Co-authored-by: Sergey Prokazov <[email protected]> Co-authored-by: Anuragkillswitch <[email protected]> Co-authored-by: dvora-h <[email protected]> Co-authored-by: Alex Schmitz <[email protected]> Co-authored-by: Alex Schmitz <[email protected]> Co-authored-by: Chayim <[email protected]> Co-authored-by: Bar Shaul <[email protected]> Co-authored-by: CrimsonGlory <[email protected]> Co-authored-by: Raymond Yin <[email protected]> Co-authored-by: zach.lee <[email protected]> Co-authored-by: James R T <[email protected]> Co-authored-by: dvora-h <[email protected]> Co-authored-by: Marc Schöchlin <[email protected]> Co-authored-by: Nick Gerow <[email protected]> Co-authored-by: Igor Malinovskiy <[email protected]> Co-authored-by: Chayim I. Kirshen <[email protected]> Co-authored-by: Leibale Eidelman <[email protected]> Co-authored-by: Thiago Bellini Ribeiro <[email protected]> Co-authored-by: woutdenolf <[email protected]> Co-authored-by: shacharPash <[email protected]> Co-authored-by: Mirek Długosz <[email protected]> Co-authored-by: Oran Avraham <[email protected]> Co-authored-by: mzdehbashi-github <[email protected]> Co-authored-by: Tyler Hutcherson <[email protected]> Co-authored-by: Felipe Machado <[email protected]> Co-authored-by: AYMEN Mohammed <[email protected]> Co-authored-by: Marc Schöchlin <[email protected]> Co-authored-by: Avasam <[email protected]> Co-authored-by: Markus Gerstel <[email protected]> Co-authored-by: Kristján Valur Jónsson <[email protected]> Co-authored-by: Nick Gerow <[email protected]> Co-authored-by: Cristian Matache <[email protected]> Co-authored-by: Anurag Bandyopadhyay <[email protected]> Co-authored-by: Seongchuel Ahn <[email protected]> Co-authored-by: Alibi <[email protected]> Co-authored-by: Smit Parmar <[email protected]> Co-authored-by: Brad MacPhee <[email protected]> Co-authored-by: Shahar Lev <[email protected]> Co-authored-by: Vladimir Mihailenco <[email protected]> Co-authored-by: Kevin James <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: David Pacsuta <[email protected]> Co-authored-by: Rich Bowen <[email protected]> Co-authored-by: gmbnomis <[email protected]> Co-authored-by: Vivanov98 <[email protected]> Co-authored-by: Kosuke <[email protected]> Co-authored-by: Sergey Prokazov <[email protected]> Co-authored-by: jmcbailey <[email protected]> Co-authored-by: Galtozzy <[email protected]> Co-authored-by: Abhishek Kumar Sinha <[email protected]> Co-authored-by: Eom Taegyung "Iggy <[email protected]> Co-authored-by: Mehdi ABAAKOUK <[email protected]> Co-authored-by: Dongkeun Lee <[email protected]> Co-authored-by: woutdenolf <[email protected]> Co-authored-by: Kurt McKee <[email protected]> Co-authored-by: Juraj Páll <[email protected]> Co-authored-by: Joan Fontanals <[email protected]> Co-authored-by: Stanislav Zmiev <[email protected]> fix (#2566) Fix unlink in cluster pipeline (#2562) Fix issue 2540: Synchronise concurrent command calls to single-client mode. (#2568) Fix: tuple function cannot be passed more than one argument (#2573) Fix issue 2567: NoneType check before raising exception (#2569) Fix issue 2349: Let async HiredisParser finish parsing after a Connection.disconnect() (#2557) Fix issue with `pack_commands` returning an empty byte sequence (#2416) Fix #2581 UnixDomainSocketConnection' object has no attribute '_command_packer' (#2583) Fix #2581 UnixDomainSocketConnection' object has no attribute '_command_packer' . Fix for `lpop` and `rpop` return typing (#2590) Fixed CredentialsProvider examples (#2587) Fixed issue #2598 - make Document class subscriptable fix: replace async_timeout by asyncio.timeout (#2602) Fix behaviour of async PythonParser to match RedisParser as for issue #2349 (#2582) Fix (#2641) fix: do not use asyncio's timeout lib before 3.11.2 (#2659) Fix issue 2660: PytestUnraisableExceptionWarning from asycio client (#2669) Fixing cancelled async futures (#2666) Fix async (#2673) Fix memory leak caused by hiredis (#2693) (#2694) Fix incorrect usage of once flag in async Sentinel (#2718) Fix topk list example. (#2724) Fix `ClusterCommandProtocol` not itself being marked as a protocol (#2729) Fix potential race condition during disconnection (#2719) fix CI (#2748) fix parse_slowlog_get (#2732) fixes for issue #1128 fix create single_connection_client from url (#2752) Fix `xadd` allow non negative maxlen (#2739) Fix JSON.MERGE Summary (#2786) Fixed key error in parse_xinfo_stream (#2788) Fix dead weakref in sentinel connection causing ReferenceError (#2767) (#2771) Fix dead weakref in sentinel conn (#2767) fix redirects and some small cleanups (#2801) Fix type hint for retry_on_error in async cluster (#2804) Fix CI (#2809) Fix async client with resp3 (#2657) Fix `COMMAND` response in resp3 (redis 7+) (#2740) Fix protocol version checking (#2737) Fix parse resp3 dict response: don't use dict comprehension (#2757) Fixing asyncio import (#2759) fix (#2799) fix async tests (#2806) Fix socket garbage collection (#2859) Fixing doc builds (#2869) Fix a duplicate word in `CONTRIBUTING.md` (#2848) Fix timeout retrying on Redis pipeline execution (#2812) Fix type hints in SearchCommands (#2817)
Pull Request check-list
Please make sure to review and check all of these items:
$ tox
pass with this change (including linting)?NOTE: these things are not required to open a PR and can be done
afterwards / while the PR is open.
Description of change
Under certain circumstances
pack_commands()
adds an empty byte sequence (b""
) to the returned list, which when connecting to a Redis server over SSL could cause an EOF error:In our case we are running an async Falcon application using the
uvicorn
worker type; we ran into the problem when using a Redis pipeline to perform anMSET
followed by one or moreEXPIRE
commands. The values in theMSET
are images, generally around 5 to 6kb in size. From what I can see it was certain images within a very specific size range, where the lengthof the value was just under 6000, that caused the problem (6000 being the
buffer_cutoff
value used inpack_commands
).(Note that in some/many cases the
b""
doesn't seem to cause a problem; I wrote a simple script to reproduce the error, executing the code in the standardasyncio
event loop, but couldn't reproduce it that way. It was only by creating a simple Falcon/uvicorn app and executing it within that that I could reproduce it; I guess it's to do with the fact that uvicorn usesuvloop
instead of the asyncio event loop, and there must be some difference in the underlying SSL transport.)