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

Expose ChannelMessageQueue as IAsyncEnumerable #2400

Closed
wizpresso-steve-cy-fan opened this issue Mar 14, 2023 · 0 comments · Fixed by #2402
Closed

Expose ChannelMessageQueue as IAsyncEnumerable #2400

wizpresso-steve-cy-fan opened this issue Mar 14, 2023 · 0 comments · Fixed by #2402

Comments

@wizpresso-steve-cy-fan
Copy link

wizpresso-steve-cy-fan commented Mar 14, 2023

I don't want to duplicate the message on another channel, as ChannelMessageQueue already uses Channel internally, and ChannelReader in particular implemented this: https://learn.microsoft.com/en-us/dotnet/api/system.threading.channels.channelreader-1.readallasync?view=net-7.0

mgravell added a commit that referenced this issue Mar 15, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
* expose IAsyncEnumerable on ChannelMessageQueue
fix #2400

* PR number

* move ChannelMessageQueue.GetAsyncEnumerator to shipped
mgravell added a commit that referenced this issue Aug 10, 2023
…-centric

- introduce `Resp2Type` and `Resp3Type` shims (`Resp2Type` has reduced types)
- mark existing `Type` as `[Obsolete]`, and proxy to `Resp2Type` for compat
- deal with null handling differences
- deal with `Boolean`, which works very differently (`t`/`f` instead of `1`/`0`)

remove RedisResult.Type from Shipped.txt

- handle RESP3 types
- handle [+|-]{inf|nan}
- avoid alloc when parsing doubles

made the RedisResult constructor non-public (fix accidental API)

remove RawResult.Type; fix broken loop

format

incorrect attribute check

- nomenclature: MultiBulk => Array
- efficiency: use bit-packing to RESP2 type conversion is a bit mask

fix RawResult.HasValue

fix null array return (EmptyMultiBulk is no longer helpful)

add a ToString to Replica (other bits were local test setup issues)

simplify switch in TryParseDouble

- protocol configuration parsing
- avoid inbuilt equality/comparison operations on Version
- rules for when to try resp3

configuration documentation

words

fix ConfigurationOptions.Clone

actually connect via RESP3

demand redis6 in the RESP3 connect test

remove unnecessary directives

Lua results

more tests and tweaks to fix tests

simplify handshake

fallback connect

move SETNAME back into HELLO message; add lots of documentation about *why*

DEBUG PROTOCOL tests; some failures to look at

fix protocol tests

add missing "hide me" attribs

add docs and release notes

tyop

redundant

re-enable to get server-maintenance notifications

- ConnectWithBrokenHello is inconclusive if not a v6 server
- allow non-RESP3 tests on non-v6 servers

"DEBUG PROTOCOL" tests are inconclusive on non-v6

fix TryConnect (CLIENT ID) not always available

save all

counting is hard

expose IAsyncEnumerable on ChannelMessageQueue (#2402)

* expose IAsyncEnumerable on ChannelMessageQueue
fix #2400

* PR number

* move ChannelMessageQueue.GetAsyncEnumerator to shipped

LUA conversions

version Lua RESP conversions

true/false handling depends on setresp(3)

revert "if" split in ResultProcessor

use enum for RedisProtocol

reinstate parameterless RedisResult .ctor

fix resp 2/3 inversion snafu from enumification

fix resp dependent connection reuse issue

add failing Execute test re RESP2 vs RESP3 delta

ValuePairInterleavedProcessorBase should auto-handle responses that have become jagged in RESP3

pattern match is easier to read here

- move IsResp3; that is a PhysicalConnection thing, not a ServerEndPoint thing
- allow RawResult to know whether it is RESP3; involved moving some flags (which removes a bit hack we were using, so: yay)
- make the interleave un-jaggedify only apply on RESP3

add more RESP3 API change tests

compensate for XREAD having a different shape in RESP3

disable implicit RESP3 based on target server version
mgravell added a commit that referenced this issue Aug 10, 2023
…-centric

- introduce `Resp2Type` and `Resp3Type` shims (`Resp2Type` has reduced types)
- mark existing `Type` as `[Obsolete]`, and proxy to `Resp2Type` for compat
- deal with null handling differences
- deal with `Boolean`, which works very differently (`t`/`f` instead of `1`/`0`)

remove RedisResult.Type from Shipped.txt

- handle RESP3 types
- handle [+|-]{inf|nan}
- avoid alloc when parsing doubles

made the RedisResult constructor non-public (fix accidental API)

remove RawResult.Type; fix broken loop

format

incorrect attribute check

- nomenclature: MultiBulk => Array
- efficiency: use bit-packing to RESP2 type conversion is a bit mask

fix RawResult.HasValue

fix null array return (EmptyMultiBulk is no longer helpful)

add a ToString to Replica (other bits were local test setup issues)

simplify switch in TryParseDouble

- protocol configuration parsing
- avoid inbuilt equality/comparison operations on Version
- rules for when to try resp3

configuration documentation

words

fix ConfigurationOptions.Clone

actually connect via RESP3

demand redis6 in the RESP3 connect test

remove unnecessary directives

Lua results

more tests and tweaks to fix tests

simplify handshake

fallback connect

move SETNAME back into HELLO message; add lots of documentation about *why*

DEBUG PROTOCOL tests; some failures to look at

fix protocol tests

add missing "hide me" attribs

add docs and release notes

tyop

redundant

re-enable to get server-maintenance notifications

- ConnectWithBrokenHello is inconclusive if not a v6 server
- allow non-RESP3 tests on non-v6 servers

"DEBUG PROTOCOL" tests are inconclusive on non-v6

fix TryConnect (CLIENT ID) not always available

save all

counting is hard

expose IAsyncEnumerable on ChannelMessageQueue (#2402)

* expose IAsyncEnumerable on ChannelMessageQueue
fix #2400

* PR number

* move ChannelMessageQueue.GetAsyncEnumerator to shipped

LUA conversions

version Lua RESP conversions

true/false handling depends on setresp(3)

revert "if" split in ResultProcessor

use enum for RedisProtocol

reinstate parameterless RedisResult .ctor

fix resp 2/3 inversion snafu from enumification

fix resp dependent connection reuse issue

add failing Execute test re RESP2 vs RESP3 delta

ValuePairInterleavedProcessorBase should auto-handle responses that have become jagged in RESP3

pattern match is easier to read here

- move IsResp3; that is a PhysicalConnection thing, not a ServerEndPoint thing
- allow RawResult to know whether it is RESP3; involved moving some flags (which removes a bit hack we were using, so: yay)
- make the interleave un-jaggedify only apply on RESP3

add more RESP3 API change tests

compensate for XREAD having a different shape in RESP3

disable implicit RESP3 based on target server version

# Conflicts:
#	docs/Configuration.md
#	docs/ReleaseNotes.md
#	src/StackExchange.Redis/ConfigurationOptions.cs
#	src/StackExchange.Redis/ConnectionMultiplexer.cs
#	src/StackExchange.Redis/Interfaces/IConnectionMultiplexer.cs
#	src/StackExchange.Redis/ServerEndPoint.cs
#	tests/StackExchange.Redis.Tests/PubSubTests.cs
#	tests/StackExchange.Redis.Tests/TestBase.cs
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 a pull request may close this issue.

1 participant