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

AddMemoryStreams in ISiloBuilder.UseSignalR can yield duplicate key #158

Open
hendrikdevloed opened this issue Oct 27, 2023 · 1 comment

Comments

@hendrikdevloed
Copy link

The two other cases are covered by a try...catch in case the user overrode the default, but should the AddMemoryStreams also be conditional in case a SIGNALR_ORLEANS_STREAM_PROVIDER was already registered?

I registered the same memory stream in my startup code but I got an error later on (during app.Run) about a duplicate key. I can imagine the same would happen when trying to register a persistent stream type.

https://github.com/OrleansContrib/SignalR.Orleans/blob/ad56e34e7c177b5be4ae7d3afee43f324478951f/src/SignalR.Orleans/Hosting/ISiloBuilderExtensions.cs#L36C26-L36C26

To keep using the nuget code, a workaround for my particular case is here https://pastebin.com/BetpuqXM but that's not a fundamental solution.

Should there be an if clause around the AddMemoryStreams to check for the presence of a SIGNALR_ORLEANS_STREAM_PROVIDER before registering the memory stream? Try...catch doesn't seem to be a solution because it doesn't generate an exception immediately, in contrast to the previous calls.

(On a related note, should the two try..catch use some lighter non-exception-based mechanism to check for the presence instead?)

@personball
Copy link

My silo start and fail at this line too, the exception is :

System.InvalidCastException
  HResult=0x80004002
  Message=Unable to cast object of type 'Orleans.Storage.MemoryGrainStorage' to type 'Orleans.ILifecycleParticipant`1[Orleans.Runtime.ISiloLifecycle]'.
  Source=Orleans.Runtime
...

I register AddAdoNetGrainStorage first and it broken in UseSignalR() line:

 builder.AddMemoryStreams("SIGNALR_ORLEANS_STREAM_PROVIDER"); 

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

No branches or pull requests

2 participants