github dotnet/orleans v3.2.0

latest releases: v3.7.2, v8.1.0, v8.1.0-preview3...
3 years ago

3.2.0 includes two major changes

  • Pluggable grain directory

This feature allows to use external storage as an option for keeping grain directory information. Directory plugins can be configured for different grain classes independently, so that different consistency/availability tradeoffs can be made for different grain classes.
As part of this change, we had to remove support for multi-cluster functionality. We intend to bring it back as a grain directory plugin at a later time. Removal of multi-clustering is the only breaking change, and only if you used the feature previously.

  • Switch to using .NET thread pool for scheduling

Since the initial release, Orleans has been using its own custom thread pool implementation to make up for the deficiencies in the .NET thread pool. Since then, the .NET thread pool has improved significantly, and there is no need any more for a separate solution within Orleans.

We measured a performance increase of 3.2.0 compared to 3.1.6 of 12% to 20% depending on the test scenario.

Other improvements and bug fixes since 3.1.0.

  • Breaking changes

    • Remove current multicluster implementation (#6498)
  • Non-breaking improvements

    • Remove new() constraint for grain persistence (#6351)
    • Improve TLS troubleshooting experience (#6352)
    • Remove unnecessary RequestContext.Clear in networking (#6357)
    • Cleanup GrainBasedReminderTable (#6355)
    • Avoid using GrainTimer in non-grain contexts (#6342)
    • Omit assembly name for all types from System namespace during codegen (#6394)
    • Fix System namespace classification in Orleans.CodeGenerator (#6396)
    • Reduce port clashes in TestCluster (#6399, #6413)
    • Use the overload of ConcurrentDictionary.GetOrAdd that takes a method (#6409)
    • Ignore not found exception when clearing azure queues (#6419)
    • MembershipTableCleanupAgent: dispose timer if cleanup is unsupported (#6415)
    • Allow grain call filters to retry calls (#6414)
    • Avoid most cases of loggers with non-static category names (#6430)
    • Free SerializationContext and DeserializationContext between calls (#6433)
    • Don't use iowait in cpu calcs on linux (#6444)
    • TLS: specify an application protocol to satisfy ALPN (#6455)
    • Change the error about not supported membership table cleanup functionality into a warning. (#6447)
    • Update obsoletion warning for ISiloBuilderConfigurator (#6461)
    • Allow GatewayManager initialization to be retried (#6459)
    • Added eventIndex (#6467)
    • Send rejections for messages enqueued on stopped outbound queue (#6474)
    • Stopped WorkItemGroup logging enhancement (#6483)
    • Streamline LINQ/Enumerable use (#6482)
    • Support for pluggable grain directory (#6340, #6354, #6366, #6385, #6473, #6485, #6502, #6524)
    • Expose timeouts for Azure Table Storage (#6462, #6501, #6509)
    • Schedule Tasks and WorkItems on .NET ThreadPool (#6261)
    • Schedule received messages onto thread pool in Connection.ProcessIncoming (#6263)
    • Remove AsyncAgent, Executor and related (#6264)
    • Reorient RuntimeContext around IGrainContext (#6365)
    • Remove Message.DebugContext and related code (#6323)
    • Remove obviated GrainId constructor and associated code (#6322)
    • Set isolation level to READ COMMITTED to avoid Gap Lock issues (#6331)
    • AdoNet: Rename Storage table to OrleansStorage for consistency with other tables. (#6336)
    • Avoid using GrainTimer in non-grain contexts (#6342)
    • Remove unnecessary provider runtime members (#6362)
    • Remove ClientInvokeCallback (#6364)
    • Remove ProcessExitHandlingOptions (#6369)
    • Simplify OrleansTaskScheduler (#6370)
    • Remove IServiceProvider from IGrainContext (#6372)
    • Streamline MemoryStorage and InMemoryReminderTable (#6315)
    • Fix test glitch in PersistenceProvider_Memory_FixedLatency_WriteRead (#6378)
    • Fix errors reported by GitHub Semmle code analysis tools. (#6374)
    • Remove Microsoft prefix from logging categories (#6431)
    • Streamline Dictionary use and remove some dead code (#6439)
    • Make methods on AITelemetryConsumer virtual; clean-up (#6469)
    • Remove IHostedClient abstraction (#6475)
    • Only allocate an array for lengths when array rank is greater than 3 (#6493)
    • Support ValueTask as [OneWay] Methods Return Type (#6521)
    • Grain Directory Redis implementation (#6543, #6569, #6570, #6571)
  • Non-breaking bug fixes

    • Fix CleanupDefunctSiloMembership & MembershipTableTests (#6344)
    • Schedule IMembershipTable.CleanupDefunctSiloEntries more frequently (#6346)
    • CodeGenerator fixes (#6347)
    • Fix handling of gateways in Orleans.TestingHost (#6348)
    • Avoid destructuring in log templates (#6356)
    • Clear RequestContext after use (#6358)
    • Amended Linux stats registration to add services on Linux only (#6375)
    • Update performance counter dependencies (#6397)
    • Reminders period overflow issue in ADO.NET Reminders Table (#6390)
    • Read only the body segment from EventData (#6412)
    • Consistently sanitize RowKey & PartitionKey properties for Azure Table Storage reminders implementation (#6460)
    • Gossip that the silo is dead before the outbound queue gets closed (#6480)
    • Fix a race condition in LifecycleSubject (#6481)
    • Fix log message (#6408)
    • Do not reject rejection messages locally. Drop them instead (#6525)
    • LocalGrainDirectory.UnregisterManyAsync should always be called from RemoteGrainDirectory context (#6575)

Don't miss a new orleans release

NewReleases is sending notifications on new releases.