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

Protocol support: RESP3 #2396

Merged
merged 26 commits into from
Sep 7, 2023
Merged

Protocol support: RESP3 #2396

merged 26 commits into from
Sep 7, 2023

Commits on Aug 10, 2023

  1. first stab at RESP3; no actual parse code at the moment - this is API…

    …-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
    mgravell committed Aug 10, 2023
    Configuration menu
    Copy the full SHA
    ed1b107 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    4c2cd0d View commit details
    Browse the repository at this point in the history
  3. test setup: ensure we don't false-negative due to confusion between s…

    …erver version and protocol
    mgravell committed Aug 10, 2023
    Configuration menu
    Copy the full SHA
    843a84e View commit details
    Browse the repository at this point in the history
  4. update RESP3 guidance

    mgravell committed Aug 10, 2023
    Configuration menu
    Copy the full SHA
    a548b51 View commit details
    Browse the repository at this point in the history

Commits on Aug 11, 2023

  1. - remove double CLIENT ID (retain the "main" property, ConnectionId)

    - add a few missing ForAwait
    - add onnectWithTiming which is intended to find the netfx connect stall
    mgravell committed Aug 11, 2023
    Configuration menu
    Copy the full SHA
    e0efe48 View commit details
    Browse the repository at this point in the history

Commits on Aug 16, 2023

  1. - fix initial connect pause

    - fix pubsub
    mgravell committed Aug 16, 2023
    Configuration menu
    Copy the full SHA
    9f01470 View commit details
    Browse the repository at this point in the history
  2. - advertise RedisProtocol on IServer

    - fix cluster tests (false positive: we *expect* zero subscriber connections in RESP3)
    - fix flakey Lua test (unrelated to resp 3)
    - separate the Me() key in protocol dependent tests
    mgravell committed Aug 16, 2023
    Configuration menu
    Copy the full SHA
    af46e9e View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    7efe5f8 View commit details
    Browse the repository at this point in the history
  4. generalize such that verbatim strings always return just the value po…

    …rtion unless explicitly requested
    mgravell committed Aug 16, 2023
    Configuration menu
    Copy the full SHA
    cf956c1 View commit details
    Browse the repository at this point in the history
  5. - fix pubsub failover tests (resp3 changes which connections need to …

    …die)
    
    - fix tests that assumed Create returned a real ConnectionMultiplexer
    mgravell committed Aug 16, 2023
    Configuration menu
    Copy the full SHA
    0a5505f View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    29c88d0 View commit details
    Browse the repository at this point in the history

Commits on Aug 22, 2023

  1. Configuration menu
    Copy the full SHA
    00daa23 View commit details
    Browse the repository at this point in the history
  2. Fix test logging

    NickCraver committed Aug 22, 2023
    Configuration menu
    Copy the full SHA
    a3feb31 View commit details
    Browse the repository at this point in the history

Commits on Aug 23, 2023

  1. deal with problems with order of tests breaking connections; don't le…

    …t the fixture hold broken connections
    mgravell committed Aug 23, 2023
    Configuration menu
    Copy the full SHA
    e592e01 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    951ee96 View commit details
    Browse the repository at this point in the history
  3. Tests: Add support for [RunPerProtocol] and simplify multi-protocol t…

    …esting
    
    This is a simpler approach to duplicating tests, but also fixes many - when changing things I noticed several base classes were incorrect so we silently dropped many tests in the PR inadvertently.
    NickCraver committed Aug 23, 2023
    Configuration menu
    Copy the full SHA
    117b93f View commit details
    Browse the repository at this point in the history

Commits on Sep 5, 2023

  1. Configuration menu
    Copy the full SHA
    0c74763 View commit details
    Browse the repository at this point in the history
  2. Test fixups

    NickCraver committed Sep 5, 2023
    Configuration menu
    Copy the full SHA
    126e32a View commit details
    Browse the repository at this point in the history
  3. Fix tests on 3.1 server setup

    We have to get off AppVeyor and on to something else, testing against 3.1 in the mainline is kinda bananapants at this point.
    NickCraver committed Sep 5, 2023
    Configuration menu
    Copy the full SHA
    8c388a9 View commit details
    Browse the repository at this point in the history
  4. Stream tests: fix unique keys

    These were colliding on RESP2/RESP3 but also using an entirely different system...let's simplify!
    NickCraver committed Sep 5, 2023
    Configuration menu
    Copy the full SHA
    af96022 View commit details
    Browse the repository at this point in the history
  5. Bump version to 2.7

    NickCraver committed Sep 5, 2023
    Configuration menu
    Copy the full SHA
    6d53672 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    5c24f7a View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    eb36efb View commit details
    Browse the repository at this point in the history
  8. Remove console write

    NickCraver committed Sep 5, 2023
    Configuration menu
    Copy the full SHA
    517eaea View commit details
    Browse the repository at this point in the history
  9. Doc + ref fixes

    NickCraver committed Sep 5, 2023
    Configuration menu
    Copy the full SHA
    18e0ea9 View commit details
    Browse the repository at this point in the history

Commits on Sep 7, 2023

  1. Doc fixes

    NickCraver committed Sep 7, 2023
    Configuration menu
    Copy the full SHA
    8ddd99a View commit details
    Browse the repository at this point in the history