Skip to content

Releases: OrleansContrib/Orleankka

2.0.0-RC

12 Mar 21:07
Compare
Choose a tag to compare
2.0.0-RC Pre-release
Pre-release

Major update of Orleankka. Works with Orleans 2.0.0-RC. Lots of important fixes, improvements and breaking changes. Details will follow ...

1.5.0

15 Oct 11:57
Compare
Choose a tag to compare

Changes since 1.0.1

Breaking

  • .NET 4.6.1 minimum framework requirement (constraint of upstream Orleans v1.5)
  • ClientObservable.Create -> IClientActorSystem.CreateObservable() - ClientActorSystem/EmbeddedActorSystem now implement additional IClientActorSystem interface which allows to create client-side observables
  • ClientObservable doesn't have implicit conversion to ObserverRef anymore (since it was converted to interface). Use IClientObservable.Ref to get observer reference
  • Removal of binary serialization from all references (StreamRef/ActorRef/ClientRef)
  • Removal of static ClientActorSystem.Current/ClusterActorSystem.Current in favor of DI - in Bootstrappers and other providers use passed IServiceProvider to obtain a reference (via GetService<T>()) to IActorSystem/ClusterActorSystem
  • Removal of Worker and Actor attributes. Instead native Orleans attributes are now supported. Use StatelessWorker and native XXXPlacement attributes
  • EmbeddedActorSystem now has Task returning Start/Stop methods. You need to await them.
  • ClientActorSystem now has Task returning Connect/Disconnect methods since it could be created inside silo (actors) and should not block
  • ClientActorSystem/ClusterActorSystem/EmbeddedActorSystem now require cleanup of resources and implement IDisposable
  • InvocationPipeline is gone. Actor interceptor registration is now part of configurator's fluent api. Use provided ActorInvoker(IActorInvoker global) or ActorInvoker(string name, IActorInvoker invoker) to register actor interceptors
  • Actor activator api has been reworked and simplified. Use provided Activator(IActorActivator) method to register it
  • EmbeddedActorSystem doesn't load silo in separate AppDomain anymore
  • Reentrant attribute is gone. Use native Orleans attributes to control interleaving.
    • Reentrant() -> Orleans.Concurrency.Reentrant
    • Reentrant(string callbackMethod) -> Orleans.Concurrency.MayInterleave
  • Reentrant(type) has been renamed to Interleave(type) attribute to avoid aliasing problems with native Reentrant attribute
  • IClientObservable now returns ClientRef instead of ObserverRef
  • All de-serialialization of references now need to be done via IActorSystem. Use ActorOf(Path)/StreamOf(Path)/ClientOf(Path) to restore and bind references when writing external serializers (see Hyperion example). Corresponding Deserialize methods were removed from all ref classes
  • ActorPath/StreamPath could be implicitly converted to strings for serialization purposes (see Hyperion example)
  • The fluent api of EmbeddedConfigurator has been reworked to be more intention revealing. Things which make sense only to a cluster or client now need to be configured separately using provided Cluster(Action<ClusterConfigurator> configure) and Client(Action<ClientConfigurator> configure) callbacks
  • PlaygroundConfigurator lost TweakClient/TweakCluster configuration methods in favor of configuration callback mentioned above
  • Custom IActorActivator now need to be registered via native DI instead of dedicated Activator() registration method. See DependencyInjection.Autofac and Demo examples.

New Features

  • ActorRef interceptors. This is similar to actor interceptors but for invocations of ActorRef.Tell/Ask/Notify. Could be thought as replacement for client-side interception feature of Orleans but actor ref interception in Orleankka has broader applicability, since it could be also used inside silo, for example to log all requests made from one actor to another actor to Zipkin, etc.
  • ClientConfigurator now provides additional Services(Action<IServiceCollection> configure) method to inject dependencies via Orleans native DI. Some of the things (like ClusterConnectionLost delegate) exposed prior Orleans 1.5 via GrainClient now need to be injected via DI
  • Full support for native DI via additional Services(Action<IServiceCollection> configuie) method on ClusterConfigirator. This allows registering custom placement strategies, etc
  • Default actor activator now resolves actor instances via native DI
  • New Actor constructor overloads which makes using native DI possible. Id, IActorRuntime - are all optional now. To use native DI just make them optional in subclass constructors as well. See DependencyInjection.Native and Demo examples.
  • Exposed some useful grain provided properties such as IServiceProvider, IGrainFactory, Identity, Logger, etc via IActorHost interface. Import Orleankka.Core namespace to gain access
  • Support multi-cluster registration attributes ([GlobalSingleInstance]/[OneInstancePerCluster])
  • Support [Version] attribute
  • Support all built-in [XXXPlacement] attributes
  • Support for custom placement attributes. Parameterized custom placement attributes are supported with public read/write properties of the following types:
    • primitives - string, bool, short, int, long, float and double
    • System.Type
    • System.Enum
  • Actor behaviors now work without explicit pre-registration in unit tests. ActorBehavior.Register was removed
  • One-way invocation via Notify() has been optimized with [OneWay] attribute
  • ActorRef interceptors. This is similar to actor interceptors but for invocations of ActorRef Tell/Ask/Notify. Could be thought as replacement for client-side interception feature of Orleans but actor ref interception in Orleankka has broader applicability, since it could be also used inside silo. Tracing all inter-actor communications to Zipkin is easy now.
  • ClientConfigurator now provides additional Services(Action<IServiceCollection> configure) method to inject dependencies via Orleans native DI. Some of the things (like ClusterConnectionLost delegate) exposed prior Orleans 1.5 via GrainClient need to be injected via DI
  • Better integration with OrleansDashboard. Metrics will be shown for actual messages being sent to an actor instead of aggregating everything under dumb Receive() label
  • Added support for actor storage providers via ActorStorageProvider, which basically is a grain storage provider tailored for Orelankka actor API. Check example in Orleankka.Tests/Features/Stateful_actors.cs

TestKit

  • Improved ClientObservable testing with dedicated mock
  • Serialization round-trip testing now uses real ClientBuilder for validation (but is slower)
  • Renamed SerializationOptions to MessageSerialization. Also, internally used SerializationManager now public. Useful to test serialization without being forced to dispatch via ActorRef (in case of direct message serilization testing)
  • Unused members were removed from StreamRefMock

FSharp

  • Updated to FSharp.Core 4.4.1.0

1.5.0-preview8

10 Aug 22:09
Compare
Choose a tag to compare
1.5.0-preview8 Pre-release
Pre-release
  • Better (future) integration with OrleansDashboard. Metrics will be shown for actual messages being sent to an actor instead of aggregating everything under dumb Receive() label

1.5.0-preview7

10 Aug 22:06
Compare
Choose a tag to compare
1.5.0-preview7 Pre-release
Pre-release

Breaking Changes

  • Custom IActorActivator now need to be registered via native DI instead of dedicated Activator() registration method. See DependencyInjection.Autofac and Demo examples.

New Features

  • Full support for native DI via additional Services(Action<IServiceCollection> configuie) method on ClusterConfigirator. This allows registering custom placement strategies, etc
  • Default actor activator now resolves actor instances via native DI
  • New Actor constructor overloads which makes using native DI possible. Id, IActorRuntime - are all optional now. To use native DI just make them optional in subclass constructors as well. See DependencyInjection.Native and Demo examples.

1.5.0-preview6

09 Aug 14:10
Compare
Choose a tag to compare
1.5.0-preview6 Pre-release
Pre-release

Fixes

  • Reminder service now correctly handles repeated reminder un-registration in case of repeated forwarding (see discussion here).

1.5.0-preview5

01 Aug 14:24
Compare
Choose a tag to compare
1.5.0-preview5 Pre-release
Pre-release

Fixes

  • Client actor system connection in case of late cluster startup
  • Scanning of AppDoman.Current.GetAssemblies() which was causing problems with some 3rd party libs (IKVM)

1.5.0-preview4

31 Jul 16:42
Compare
Choose a tag to compare
1.5.0-preview4 Pre-release
Pre-release

Breaking Changes

  • Reentrant attribute is gone. Use native Orleans attributes to control interleaving.
    • Reentrant() -> Orleans.Concurrency.Reentrant
    • Reentrant(string callbackMethod) -> Orleans.Concurrency.MayInterleave
  • Reentrant(type) has been renamed to Interleave(type) attribute to avoid aliasing problems with native Reentrant attribute
  • IClientObservable now returns ClientRef instead of ObserverRef
  • All de-serialialization of references now need to be done via IActorSystem. Use ActorOf(Path)/StreamOf(Path)/ClientOf(Path) to restore and bind references when writing external serializers (see Hyperion example). Corresponding Deserialize methods were removed from all ref classes
  • ActorPath/StreamPath could be implicitly converted to strings for serialization purposes (see Hyperion example)
  • The fluent api of EmbeddedConfigurator has been reworked to be more intention revealing. Things which make sense only to a cluster or client now need to be configured separately using provided Cluster(Action<ClusterConfigurator> configure) and Client(Action<ClientConfigurator> configure) callbacks
  • PlaygroundConfigurator lost TweakClient/TweakCluster configuration methods in favor of configuration callback mentioned above

New Features

  • ActorRef interceptors. This is similar to actor interceptors but for invocations of ActorRef.Tell/Ask/Notify. Could be thought as replacement for client-side interception feature of Orleans but actor ref interception in Orleankka has broader applicability, since it could be also used inside silo, for example to log all requests made from one actor to another actor to Zipkin, etc.
  • ClientConfigurator now provides additional Services(Action<IServiceCollection> configure) method to inject dependencies via Orleans native DI. Some of the things (like ClusterConnectionLost delegate) exposed prior Orleans 1.5 via GrainClient now need to be injected via DI

TestKit

  • BREAK: SerializationOptions was renamed to MessageSerialiation. Also, internally used SerializationManager now public. Useful to test serialization without being forced to dispatch via ActorRef (in case of direct message serilization testing)

1.5.0-preview3

31 Jul 10:12
Compare
Choose a tag to compare
1.5.0-preview3 Pre-release
Pre-release
  • FIX: bug with custom actor interface handling
  • Updated to FSharp.Core 4.4.1.0

1.5.0-preview2

27 Jul 23:01
Compare
Choose a tag to compare
1.5.0-preview2 Pre-release
Pre-release

TestKit

  • FIX: Serialization roundtrip testing

1.5.0-preview

24 Jul 19:02
Compare
Choose a tag to compare
1.5.0-preview Pre-release
Pre-release

Changes since 1.0.1

Breaking

  • .NET 4.6.1 framework requirement (constraint of upstream Orleans v1.5)
  • ClientObservable.Create -> IClientActorSystem.CreateObservable() - ClientActorSystem/EmbeddedActorSystem now implement additional IClientActorSystem interface which allows to create client-side observables
  • ClientObservable doesn't have implicit conversion to ObserverRef anymore (since it was converted to interface). Use IClientObservable.Ref to get observer reference
  • Removal of binary serialization from all references (StreamRef/ActorRef/ClientRef)
  • Removal of static ClientActorSystem.Current/ClusterActorSystem.Current in favor of DI - in Bootstrappers and other providers use passed IServiceProvider to obtain a reference (via GetService<T>()) to IActorSystem/ClusterActorSystem
  • Removal of Worker and Actor attributes. Instead native Orleans attributes are now supported. Use StatelessWorker and native XXXPlacement attributes
  • EmbeddedActorSystem now has Task returning Start/Stop methods. You need to await them.
  • ClientActorSystem now has Task returning Connect/Disconnect methods since it could be created inside silo (actors) and should not block
  • ClientActorSystem/ClusterActorSystem/EmbeddedActorSystem now require cleanup of resources and implement IDisposable
  • InvocationPipeline is gone. Actor interceptor registration is now part of configurator's fluent api. Use provided ActorInvoker(IActorInvoker global) or ActorInvoker(string name, IActorInvoker invoker) to register actor interceptors
  • Actor activator api has been reworked and simplified. Use provided Activator(IActorActivator) method to register it
  • EmbeddedActorSystem doesn't load silo in separate AppDomain anymore

New features

  • Exposed some useful grain provided properties such as IServiceProvider, IGrainFactory, Identity, Logger, etc via IActorHost interface. Import Orleankka.Core namespace to gain access
  • Support multi-cluster registration attributes ([GlobalSingleInstance]/[OneInstancePerCluster])
  • Support [Version] attribute
  • Support all built-in [XXXPlacement] attributes
  • Support for custom placement attributes. Parameterized custom placement attributes are supported with public read/write properties of the following types:
    • primitives - string, bool, short, int, long, float and double
    • System.Type
    • System.Enum
  • Actor behaviors now work without explicit pre-registration in unit tests. ActorBehavior.Register was removed
  • One-way invocation via Notify() has been optimized with [OneWay] attribute

TestKit

  • Improved ClientObservable testing with dedicated mock
  • BROKEN: Serialization roundtrip testing. Will be fixed in next beta release