Skip to content

StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: PUBLISH content #1147

@Tadimsky

Description

@Tadimsky

We upgrade to the v2 version recently and since then have started seeing these exceptions. When this happens, we have to restart the service instance in order for it to reconnect.
However, it seems that about an hour after the restart occurs, we get the same issue show up.

We're rolling back to the v1 library to mitigate the issue, but would like to find out what could be happening.
We're using the Azure Redis Cache for Pub/Sub only. The redis instance is hosted in West US 2 and used by services running in West US 2 and East US. In our case, only Easst US is running into these issues.

Here is the full exception information:

StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: PUBLISH content; An existing connection was forcibly closed by the remote host; IOCP: (Busy=1,Free=999,Min=4,Max=1000), WORKER: (Busy=0,Free=32767,Min=4,Max=32767), Local-CPU: n/a ---> StackExchange.Redis.RedisConnectionException: SocketFailure on intentcontent-prod-westus2.redis.cache.windows.net:6380/Interactive, Flushing/Faulted, last: PUBLISH, origin: ReadFromPipe, outstanding: 984, last-read: 18s ago, last-write: 12s ago, keep-alive: 60s, state: ConnectedEstablished, mgr: 7 of 10 available, in: 0, last-heartbeat: 0s ago, last-mbeat: 0s ago, global: 0s ago, v: 2.0.600.65315 ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: PUBLISH content; An existing connection was forcibly closed by the remote host; IOCP: (Busy=1,Free=999,Min=4,Max=1000), WORKER: (Busy=0,Free=32767,Min=4,Max=32767), Local-CPU: n/a ---> StackExchange.Redis.RedisConnectionException: SocketFailure on intentcontent-prod-westus2.redis.cache.windows.net:6380/Interactive, Flushing/Faulted, last: PUBLISH, origin: ReadFromPipe, outstanding: 984, last-read: 18s ago, last-write: 12s ago, keep-alive: 60s, state: ConnectedEstablished, mgr: 7 of 10 available, in: 0, last-heartbeat: 0s ago, last-mbeat: 0s ago, global: 0s ago, v: 2.0.600.65315 ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   --- End of inner exception stack trace ---
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error)
   at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
   at System.Net.Security.SslStreamInternal.<FillBufferAsync>g__InternalFillBufferAsync|38_0[TReadAdapter](TReadAdapter adap, ValueTask`1 task, Int32 min, Int32 initial)
   at System.Net.Security.SslStreamInternal.ReadAsyncInternal[TReadAdapter](TReadAdapter adapter, Memory`1 buffer)
   at Pipelines.Sockets.Unofficial.StreamConnection.AsyncStreamPipe.CopyFromStreamToReadPipe() in C:\Code\Pipelines.Sockets.Unofficial\src\Pipelines.Sockets.Unofficial\StreamConnection.AsyncStreamPipe.cs:line 97
   at System.IO.Pipelines.PipeCompletion.ThrowLatchedException()
   at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result)
   at System.IO.Pipelines.Pipe.GetReadAsyncResult()
   at StackExchange.Redis.PhysicalConnection.ReadFromPipe()
   --- End of inner exception stack trace ---
   at Microsoft.Intentional.ContentService.Frontend.Storage.RedisChangeNotifier.PublishMessage(ContentMessage message, Boolean fireAndForget)
   at Microsoft.Intentional.ContentService.Frontend.Storage.RedisChangeNotifier.SendSmallChangeAsync(String documentId, ReadOnlyMemory`1 payload, Boolean fireAndForget)
   at Microsoft.Intentional.ContentService.Frontend.Storage.RedisChangeNotifier.SendAsync(String documentId, ReadOnlyMemory`1 payload, Boolean fireAndForget)
   at Microsoft.Intentional.ContentService.Frontend.Storage.RedisChangeNotifier.SendAsync(String documentId, ReadOnlyMemory`1 payload, Boolean fireAndForget)
   at Microsoft.Intentional.ContentService.Frontend.Storage.RedisChangeNotifier.SendAsync(String documentId, ReadOnlyMemory`1 payload, Boolean fireAndForget)
   at Microsoft.Intentional.ContentService.Frontend.Storage.RedisChangeNotifier.SendAsync(String documentId, ReadOnlyMemory`1 payload, Boolean fireAndForget)
   --- End of inner exception stack trace ---
   at StackExchange.Redis.ConnectionMultiplexer.ThrowFailed[T](TaskCompletionSource`1 source, Exception unthrownException) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2201
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Intentional.ContentService.Frontend.Storage.RedisChangeNotifier.PublishMessage(ContentMessage message, Boolean fireAndForget)
   at Microsoft.Intentional.ContentService.Frontend.Storage.RedisChangeNotifier.SendLargeChangeAsync(String documentId, ReadOnlyMemory`1 payload)

Anyone know if the info in the exception message is helpful? And what we can do to investigate further?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions