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

Akka.NET v1.3.9 Production Release #3577

Merged
merged 81 commits into from
Aug 23, 2018
Merged

Akka.NET v1.3.9 Production Release #3577

merged 81 commits into from
Aug 23, 2018

Conversation

Aaronontheweb
Copy link
Member

1.3.9 August 22 2018

Maintenance Release for Akka.NET 1.3

Akka.NET v1.3.9 features some major changes to Akka.Cluster.Sharding, additional Akka.Streams stages, and some general bug fixes across the board.

Akka.Cluster.Sharding Improvements
The Akka.Cluster.Sharding documentation already describes some of the major changes in Akka.NET v1.3.9, but we figured it would be worth calling special attention to those changes here.

Props Factory for Entity Actors

In some cases, the actor may need to know the entityId associated with it. This can be achieved using the entityPropsFactory parameter to ClusterSharding.Start or ClusterSharding.StartAsync. The entity ID will be passed to the factory as a parameter, which can then be used in the creation of the actor.

In addition to the existing APIs we've always had for defining sharded entities via Props, Akka.NET v1.3.9 introduces a new method overload for Start and StartAsync which allows users to pass in the entityId of each entity actor as a constructor argument to those entities when they start.

For example:

var anotherCounterShard = ClusterSharding.Get(Sys).Start(
	                        typeName: "AnotherCounter",
	                        entityProps: Props.Create<AnotherCounter>(),
	                        typeName: AnotherCounter.ShardingTypeName,
	                        entityPropsFactory: entityId => AnotherCounter.Props(entityId),
	                        settings: ClusterShardingSettings.Create(Sys),
	                        extractEntityId: Counter.ExtractEntityId,
	                        extractShardId: Counter.ExtractShardId);

This will give you the opportunity to pass in the entityId for each actor as a constructor argument into the Props of your entity actor and possibly other use cases too.

Improvements to Starting and Querying Existing Shard Entity Types
Two additional major usability improvements to Cluster.Sharding come from some API additions and changes.

The first is that it's now possible to look up all of the currently registered shard types via the ClusterSharding.ShardTypeNames property. So long as a ShardRegion of that type has been started in the cluster, that entity type name will be added to the collection exposed by this property.

The other major usability improvement is a change to the ClusterSharding.Start property itself. Historically, you used to have to know whether or not the node you wanted to use sharding on was going to be hosting shards (call ClusterSharding.Start) or simply communicated with shards hosted on a different cluster role type (call ClusterSharding.StartProxy). Going forward, it's safe to call ClusterSharding.Start on any node and you will either receive an IActorRef to active ShardRegion or a ShardRegion running in "proxy only" mode; this is determined by looking at the ClusterShardingSettings and determining if the current node is in a role that is allowed to host shards of this type.

Akka.Streams Additions and Changes
In Akka.NET v1.3.9 we've added some new built-in stream stages and API methods designed to help improve developer productivity and ease of use.

Other Updates, Additions, and Bugfixes

To see the full set of changes for Akka.NET v1.3.9, click here.

COMMITS LOC+ LOC- AUTHOR
28 2448 5691 Aaron Stannard
11 1373 230 zbynek001
8 4590 577 Bartosz Sypytkowski
4 438 99 Ismael Hamed
4 230 240 Sean Gilliam
2 1438 0 Oleksandr Bogomaz
1 86 79 Nick Polideropoulos
1 78 0 v1rusw0rm
1 4 4 Joshua Garnett
1 32 17 Jarl Sveinung Flø Rasmussen
1 27 1 Sam13
1 250 220 Maxim Cherednik
1 184 124 Josh Taylor
1 14 0 Peter Shrosbree
1 1278 42 Marc Piechura
1 1 1 Vasily Kirichenko
1 1 1 Samuel Kelemen
1 1 1 Nyola Mike
1 1 1 Fábio Beirão

Aaronontheweb and others added 30 commits January 20, 2018 08:30
Synchronize 1.4 branch with dev
* switch akka.cluster.sharding dependency for akka.cluster.tools from prerelease to nuget release version (#2608)

* Add LightningDB nuspec (#2609)

* added Akka.DistributedData.LightningDB nuspec

* updated assembly information
* Implement PartitionHub

* port docs

* fix formatting

* API approval

* address remarks
* AkkaPduCodec performance fixes

* made HeartbeatPdu immutable

* made all internal formatting methods static
* Tests should be precise - in temrs of what to expect

* Ask interface refined #3220

* ClusterRouter unit test fix #3220

* Ask deadlock test added #3220

* Handle deadlock by removing the SynchronizationContext #3220

* Fixing ScatterGather router test #3220

* Ask interface refined #3220

AskSpecs consolidated
Api change approval - internal CastTask removed

* Fixing header #3220
* fixed bug in UseRoleIgnoredSpec

* close #3294 - fixed usages of GetPaths inside all Group router implementations
* expose RemoteActorRef APIs for extensibility

* made ClusterActorRefProvider public

* created IClusterActorRefProvider marker interface
* added Akka.NET v1.3.4 release notes
* fixed issues with supervision docs

* one more bugfix in the example code
* Fixing premature pruning of Topics

The DistributedPubSubMediator wasn't checking if the TopicActor was actually terminated before pruning it from the bucket.  This can cause problems if a TopicActor is re-suscribed to before being stopped.  The Subscribe message only checks Context.Child, but does not check if the bucket is still valid.  So it was possible to get in a state where subscribes/unsubscribes were succeeding, but any publishes to the topic where being dropped on the floor.

I've also switched from null to ActorRefs.Nobody.  Previously, if a Topic actor had terminated and a publish for that topic was received before the DistributedPubSubMediator did a prune, the publish would throw an exception.

* Switching to IsNobody() extension method
* initial commit for StreamRefs

* more work over Stream-Ref serializer

* fixes in serializer and config

* fixes in stream-refs and tests

* StreamRefs docs

* added defaults for StreamRefsSettings

* StreamRefs approvals API

* fixed missing impl + added animation gifs to docs

* applied docs, fixed namespaces

* fixed stream ref serializer namespaces
* Change TaskCompletionSource from TGeneric to Option<TGeneric>

* update Code and Unit tests to make them build

* Fix  TcpSpec.Outgoing_TCP_stream_must_properly_full_close_if_requested Unit Test

* Fix KeepGoingStageSpec Unit Tests
added v1.3.9 placeholder for nightlies
This reverts commit 466360c, reversing
changes made to 84da3d5.
* Add CombineMaterialized method to Source

* More reasonable materializers combine function name and type

* Approve Streams API change

* Move instance method to SourceOperations extensions
Sam13 and others added 29 commits June 29, 2018 11:48
Ignore CodeRush working files
Ignore GhostDoc working files
Ignore NDepend working files
Ignore Visual Studio Code working files
* Wrapped markdown to 80 columns

* Adding of detail to fix #3433 and fixing spelling error
Messages that come through for an entity before StartEntity
has been processed for that entity caused redundant persistence
of the entity.
…ities-redundant-journals

Sharding - Check remembered entities before remembering entity
This PR fixes various issues w.r.t. the documentation site.

- fix various typos
- fix several links
- fix styling issues
I don't believe `Selet` is a valid method
* ClusterSingletonManager should ignore FSM events during shutdown

* added copyright headers and API approval

* wasn't calling RunCoordinatedShutdownWhenDowning() before

* Run all CoordinatedShutdown phases also when downing

* add Reason to CoordinatedShutdown

* Allow member to leave a cluster via CoordinatedShutdown.run when MemberStatus is Joining/WeaklyUp/Up.

* ClusterSpec, race between MemberRemoved and MemberExited
private readonly double? _lastTemperatureReading = null;
on line 61 would make this field not editable because of the red only modifier
* Port KeepAliveConcat and UnfoldFlow

* additional KeepAliveConcat test
* KillSwitches: flow stage from CancellationToken

* removed cancellation token from materializer value type

* added API approvals and docs
* Port PagedSource

* Port IntervalBasedRateLimiter
* first cut at Akka.NET v1.3.9 release notes

* finished v1.3.9 release notes

* added link back to milestone
@Aaronontheweb Aaronontheweb merged commit 5ca1a77 into master Aug 23, 2018
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

Successfully merging this pull request may close these issues.

None yet