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

AMQP 0-9-1 Channel (IModel) API with async methods #843

Closed
lukebakken opened this issue May 21, 2020 · 4 comments
Closed

AMQP 0-9-1 Channel (IModel) API with async methods #843

lukebakken opened this issue May 21, 2020 · 4 comments
Assignees
Labels
help wanted next-gen-todo If a rewrite happens, address this issue.
Milestone

Comments

@lukebakken
Copy link
Contributor

I asked for some actionable feedback: https://news.ycombinator.com/item?id=23263536

If the library were being designed from scratch today, pretty much every method on the model would be Async. After all, if it leads to any network I/O of any kind, that can block.

Definitely on the 7.0 roadmap.

Working with the current public API, Trying to implement a publish wrapper that never blocks, and returns a task that either completes when the publisher confirm is received, or faults after some provided timeout, is a lot trickier than it might sound.

Recovery from network interruptions is complicated, and auto-recovery features are limited, and in some use cases actually dangerous. For example, if you are manually acknowledging messages to ensure end-to-end at-least-once delivery, then you cannot safely use the auto-recovery, since the delivery numbers would reset when the connection does, and you can accidentally aknowlodge the wrong message with delivery tag 5. (Acknowledge the new one, when you were trying to ack the old one).

In my implementation of that included my own recovery, I ended up needing to pass around the IModel itself with the delivery tags, so I can check if the channel I am about to acknowledge on is really the same one I received the message on. (There is no unique identifier of a channel instance, since even the channel number is likely to get re-used).

@lukebakken lukebakken added help wanted next-gen-todo If a rewrite happens, address this issue. labels May 21, 2020
@lukebakken lukebakken added this to the 7.0.0 milestone May 21, 2020
@lukebakken lukebakken self-assigned this May 21, 2020
@stebet
Copy link
Contributor

stebet commented May 21, 2020

Interestingly, I have a pretty big changelist getting close to being ready (still have a few quirks to work out) that does exactly this, proper async for the entire API. It is a very BIG change in all public interfaces though, as almost every method becomes async and I don't think it serves any purpose at that point to create non-async versions as it'll require A LOT of extra code to do properly (since there is no easy way to make an async method synchronous).

Unfortunately there is no easy way to turn the current client into an asynchronous one without making some sacrifices.

I'll see if I can post that PR soon, and I'm hoping I can convince @danielmarbach to go over the details with me. It's as close to a rewrite you can get without actually rewriting the entire thing i.m.o.

Currently I though it made sense for it to target netstandard2.1 (.NET Core 3.0 upwards, will be .NET 5.0 compatible, but drops .NET Framework support entirely). It should also spark some interesting design discussions and what features makes sense to keep (event-based notifications and handlers vs. async interface-based ones which I'm leaning more towards).

I wouldn't expect that PR to be the big 7.0 PR, but hopefully it'll make a good base to start on.

@michaelklishin michaelklishin changed the title Address feedback from HN article Channel API with async methods May 22, 2020
@michaelklishin michaelklishin changed the title Channel API with async methods AMQP 0-9-1 Channel (IModel) API with async methods May 22, 2020
@stebet
Copy link
Contributor

stebet commented May 22, 2020

Working with the current public API, Trying to implement a publish wrapper that never blocks, and returns a task that either completes when the publisher confirm is received, or faults after some provided timeout, is a lot trickier than it might sound.

This is something that I feel the library itself could do automatically. For example, when putting the channel in ConfirmSelect mode, calling BasicPublish wouldn't return until the publisher confirm message was received, or a given timeout would be hit, or at least provide an overloaded method that does the same?

Recovery from network interruptions is complicated, and auto-recovery features are limited, and in some use cases actually dangerous. For example, if you are manually acknowledging messages to ensure end-to-end at-least-once delivery, then you cannot safely use the auto-recovery, since the delivery numbers would reset when the connection does, and you can accidentally aknowlodge the wrong message with delivery tag 5. (Acknowledge the new one, when you were trying to ack the old one).

Has any testing/research been done on if AutoRecovery is creating more problems than it solves? On that note, diagnostics/telemetry and logging is severely in need of an upgrade. That's on my radar for a potential PR as well.

In my implementation of that included my own recovery, I ended up needing to pass around the IModel itself with the delivery tags, so I can check if the channel I am about to acknowledge on is really the same one I received the message on. (There is no unique identifier of a channel instance, since even the channel number is likely to get re-used).

This should be easy to solve.

@bording
Copy link
Collaborator

bording commented May 22, 2020

This is something that I feel the library itself could do automatically. For example, when putting the channel in ConfirmSelect mode, calling BasicPublish wouldn't return until the publisher confirm message was received, or a given timeout would be hit, or at least provide an overloaded method that does the same?

I agree that this is just something the library can do. That's definitely how I made it work in my client.

@lukebakken lukebakken modified the milestones: 8.0.0, 7.0.0 Mar 8, 2022
lukebakken added a commit that referenced this issue May 11, 2023
lukebakken added a commit that referenced this issue Oct 13, 2023
Related to:
* #1345
* #1308
* #970
* #843

Implement QueueDeleteAsync, ExchangeDeclareAsync and ExchangeDeleteAsync. Refactoring to come.

Fix public API

Move rpc continuations to their own files

Add continuation timeouts to new AsyncRpcContinuations classes.

Add ExchangeBindAsync to interface
lukebakken added a commit that referenced this issue Oct 16, 2023
Related to:
* #1345
* #1308
* #970
* #843

Implement QueueDeleteAsync, ExchangeDeclareAsync and ExchangeDeleteAsync. Refactoring to come.

Fix public API

Move rpc continuations to their own files

Add continuation timeouts to new AsyncRpcContinuations classes.

Add ExchangeBindAsync to interface
lukebakken added a commit that referenced this issue Oct 16, 2023
Related to:
* #1345
* #1308
* #970
* #843

Implement QueueDeleteAsync, ExchangeDeclareAsync and ExchangeDeleteAsync. Refactoring to come.

Fix public API

Move rpc continuations to their own files

Add continuation timeouts to new AsyncRpcContinuations classes.

Add ExchangeBindAsync to interface
lukebakken added a commit that referenced this issue Oct 24, 2023
Related to:
* #1345
* #1308
* #970
* #843

Implement QueueDeleteAsync, ExchangeDeclareAsync and ExchangeDeleteAsync. Refactoring to come.

Fix public API

Move rpc continuations to their own files

Add continuation timeouts to new AsyncRpcContinuations classes.

Add ExchangeBindAsync to interface
lukebakken added a commit that referenced this issue Nov 3, 2023
Related to:
* #1345
* #1308
* #970
* #843

Implement QueueDeleteAsync, ExchangeDeclareAsync and ExchangeDeleteAsync. Refactoring to come.

Fix public API

Move rpc continuations to their own files

Add continuation timeouts to new AsyncRpcContinuations classes.

Add ExchangeBindAsync to interface

Fixup compilation after rebase

Add QueueDeleteOk to API

Add ExchangeBindAsync

Add `[Collection("IntegrationFixture")]` to test class that needs it, move test to an integration fixture class

dotnet format fix

Add exchange-exchange binding to test

Add QueueBindAsync and add to tests.

Add ExchangeUnbindAsync method

Add BasicRejectAsync

Add BasicCancelAsync

Add BasicConsumeAsync

Added BasicAckAsync and BasicQosAsync
lukebakken added a commit that referenced this issue Nov 9, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
lukebakken added a commit that referenced this issue Nov 9, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
lukebakken added a commit that referenced this issue Nov 10, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
lukebakken added a commit that referenced this issue Nov 11, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
lukebakken added a commit that referenced this issue Nov 14, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration

Consumer dispatcher shutdown fixes, test suite fixes to use ManualResetEventSlim instead of Monitor
lukebakken added a commit that referenced this issue Nov 14, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration

Consumer dispatcher shutdown fixes, test suite fixes to use ManualResetEventSlim instead of Monitor
lukebakken added a commit that referenced this issue Nov 14, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration

Consumer dispatcher shutdown fixes, test suite fixes to use ManualResetEventSlim instead of Monitor
lukebakken added a commit that referenced this issue Nov 14, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration

Consumer dispatcher shutdown fixes, test suite fixes to use ManualResetEventSlim instead of Monitor
lukebakken added a commit that referenced this issue Nov 14, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration

Consumer dispatcher shutdown fixes, test suite fixes to use ManualResetEventSlim instead of Monitor
lukebakken added a commit that referenced this issue Nov 14, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration

Consumer dispatcher shutdown fixes, test suite fixes to use ManualResetEventSlim instead of Monitor
lukebakken added a commit that referenced this issue Nov 15, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
lukebakken added a commit that referenced this issue Nov 15, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
lukebakken added a commit that referenced this issue Nov 15, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
lukebakken added a commit that referenced this issue Nov 15, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
lukebakken added a commit that referenced this issue Nov 15, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
lukebakken added a commit that referenced this issue Nov 15, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
lukebakken added a commit that referenced this issue Nov 16, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
lukebakken added a commit that referenced this issue Nov 16, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
lukebakken added a commit that referenced this issue Nov 16, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
* Only increase ThreadPool count for Integration tests
lukebakken added a commit that referenced this issue Nov 16, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
* Only increase ThreadPool count for Integration tests
@lukebakken
Copy link
Contributor Author

This will be completed by #1347

lukebakken added a commit that referenced this issue Nov 17, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
* Only increase ThreadPool count for Integration tests
* There is no need to expose ClientMemory / RentedMemory
lukebakken added a commit that referenced this issue Nov 19, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
* Only increase ThreadPool count for Integration tests
* There is no need to expose ClientMemory / RentedMemory
* Replace IList with IEnumerable in the API.
lukebakken added a commit that referenced this issue Nov 20, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
* Only increase ThreadPool count for Integration tests
* There is no need to expose ClientMemory / RentedMemory
* Replace IList with IEnumerable in the API.
lukebakken added a commit that referenced this issue Nov 20, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
* Only increase ThreadPool count for Integration tests
* There is no need to expose ClientMemory / RentedMemory
* Replace IList with IEnumerable in the API.
lukebakken added a commit that referenced this issue Nov 20, 2023
Related to:
* #1345
* #1308
* #970
* #843

Separate out Unit, Integration and Parallel Integration tests

* Creates dedicated test projects for parallel test execution (AsyncIntegration / Integration.csproj) and sequential (SequentialIntegration.csproj).
* Ensures that the ThreadPool is set with enough threads.
* Ensures that all test connections have their client provided name set.
* Fix SequentialTests that require a unique connection name.
* Shorten up test names used for connection client provided names
* Ensure all async tests are in the AsyncIntegration project.
* Convert MassPublish to async/await with multiple publishing connections.
* Add MaxParallelThreads in a csproj comment in case we want to try that out
* Wait longer when IsRunningInCI
* Introduce the RentedMemory struct to encapsulate a rented byte array and its associated ReadOnlyMemory.
* Add CreateChannelAsync and modify AsyncIntegration tests to use it.
* Add CreateConnectionAsync
* Use CreateConnectionAsync in AsyncIntegration
* Change the test suite fixes to use ManualResetEventSlim instead of Monitor
* Misc refactor to newer language features
* SocketFrameHandler CloseAsync
* Only increase ThreadPool count for Integration tests
* There is no need to expose ClientMemory / RentedMemory
* Replace IList with IEnumerable in the API.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted next-gen-todo If a rewrite happens, address this issue.
Projects
None yet
Development

No branches or pull requests

3 participants