Skip to content

Commit

Permalink
Merge pull request #3643 from akkadotnet/dev
Browse files Browse the repository at this point in the history
v1.3.10 Production Release
  • Loading branch information
Aaronontheweb authored Nov 2, 2018
2 parents 5ca1a77 + 15aa4f1 commit 4dbb9da
Show file tree
Hide file tree
Showing 68 changed files with 1,754 additions and 534 deletions.
52 changes: 52 additions & 0 deletions .github/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Configuration for probot-stale - https://github.com/probot/stale

# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 60

# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 7

# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels: []

# Set to true to ignore issues in a project (defaults to false)
exemptProjects: false

# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: false

# Label to use when marking as stale
staleLabel: wontfix

# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when removing the stale label.
# unmarkComment: >
# Your comment here.

# Comment to post when closing a stale Issue or Pull Request.
# closeComment: >
# Your comment here.

# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30

# Limit to only `issues` or `pulls`
# only: issues

# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
# pulls:
# daysUntilStale: 30
# markComment: >
# This pull request has been automatically marked as stale because it has not had
# recent activity. It will be closed if no further activity occurs. Thank you
# for your contributions.

# issues:
# exemptLabels:
# - confirmed
34 changes: 34 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,37 @@
#### 1.3.10 November 1 2018 ####
**Maintenance Release for Akka.NET 1.3**

Akka.NET v1.3.10 consists mostly of bug fixes and patches to various parts of Akka.NET:

* [Akka.Remote: add support for using installed certificates with thumbprints](https://github.com/akkadotnet/akka.net/issues/3632)
* [Akka.IO: fix TCP sockets leak](https://github.com/akkadotnet/akka.net/issues/3630)
* [Akka.DI.Core: Check if Dependency Resolver is configured to avoid a `NullReferenceException`](https://github.com/akkadotnet/akka.net/pull/3619)
* [Akka.Streams: Interop between Akka.Streams and IObservable](https://github.com/akkadotnet/akka.net/pull/3112)
* [HOCON: Parse size in bytes format. Parse microseconds and nanoseconds.](https://github.com/akkadotnet/akka.net/pull/3600)
* [Akka.Cluster: Don't automatically down quarantined nodes](https://github.com/akkadotnet/akka.net/pull/3605)

To [see the full set of changes for Akka.NET 1.3.10, click here](https://github.com/akkadotnet/akka.net/milestone/28).

| COMMITS | LOC+ | LOC- | AUTHOR |
| --- | --- | --- | --- |
| 8 | 887 | 220 | Bartosz Sypytkowski |
| 5 | 67 | 174 | Aaron Stannard |
| 4 | 15 | 7 | Caio Proiete |
| 3 | 7 | 4 | Maciek Misztal |
| 2 | 60 | 8 | Marcus Weaver |
| 2 | 57 | 12 | moerwald |
| 2 | 278 | 16 | Peter Shrosbree |
| 2 | 2 | 2 | Fábio Beirão |
| 1 | 71 | 71 | Sean Gilliam |
| 1 | 6 | 0 | basbossinkdivverence |
| 1 | 24 | 5 | Ismael Hamed |
| 1 | 193 | 8 | to11mtm |
| 1 | 17 | 33 | zbynek001 |
| 1 | 12 | 3 | Oleksandr Bogomaz |
| 1 | 1 | 1 | MelnikovIG |
| 1 | 1 | 1 | Alex Villarreal |
| 1 | 1 | 0 | Yongjie Ma |

#### 1.3.9 August 22 2018 ####
**Maintenance Release for Akka.NET 1.3**

Expand Down
13 changes: 2 additions & 11 deletions build.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -298,15 +298,6 @@ Target "NBench" <| fun _ ->
// Nuget targets
//--------------------------------------------------------------------------------

let overrideVersionSuffix (project:string) =
match project with
| p when p.Contains("Akka.Serialization.Wire") -> preReleaseVersionSuffix
| p when p.Contains("Akka.Serialization.Hyperion") -> preReleaseVersionSuffix
| p when p.Contains("Akka.Cluster.Sharding") -> preReleaseVersionSuffix
| p when p.Contains("Akka.DistributedData") -> preReleaseVersionSuffix
| p when p.Contains("Akka.DistributedData.LightningDB") -> preReleaseVersionSuffix
| _ -> versionSuffix

Target "CreateNuget" (fun _ ->
let projects = !! "src/**/*.*sproj"
-- "src/**/*.Tests*.*sproj"
Expand All @@ -323,7 +314,7 @@ Target "CreateNuget" (fun _ ->
Project = project
Configuration = configuration
AdditionalArgs = ["--include-symbols"]
VersionSuffix = overrideVersionSuffix project
VersionSuffix = versionSuffix
OutputPath = outputNuGet })

projects |> Seq.iter (runSingleProject)
Expand Down Expand Up @@ -380,7 +371,7 @@ Target "CreateMntrNuget" (fun _ ->
Project = project
Configuration = configuration
AdditionalArgs = ["--include-symbols"]
VersionSuffix = overrideVersionSuffix project
VersionSuffix = versionSuffix
OutputPath = outputNuGet } )
)

Expand Down
2 changes: 1 addition & 1 deletion docs/articles/actors/coordinated-shutdown.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ By default, this graceful leave action will by triggered whenever the `Coordinat
By default, `CoordinatedShutdown.Run()` will also be executed if a node is removed via `Cluster.Down` (non-graceful exit), but this can be disabled by changing the following Akka.Cluster HOCON setting:

```
akka.run-coordinated-shutdown-when-down = off
akka.cluster.run-coordinated-shutdown-when-down = off
```

### Invoking `CoordinatedShutdown.Run()` on Process Exit
Expand Down
2 changes: 1 addition & 1 deletion docs/articles/actors/dependency-injection.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ var container = builder.Build();

// Create the ActorSystem and Dependency Resolver
var system = ActorSystem.Create("MySystem");
var propsResolver = new AutoFacDependencyResolver(container, system);
system.UseAutofac(container);
```

### CastleWindsor
Expand Down
2 changes: 1 addition & 1 deletion docs/articles/intro/use-case-and-deployment-scenarios.md
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ namespace MyActorWorkerRole

while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(1000);
await Task.Delay(1000, cancellationToken);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion docs/articles/intro/what-are-actors.md
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ In this way, actors actually achieve the execution we imagined for objects:
![actors interact with each other by sending messages](/images/actor_graph.png)

An important difference of passing messages instead of calling methods is that messages have no return value.
By sending a message, an actor delegates work to another actor. As we saw in @ref:[The illusion of a call stack](what-are-actors.md#the-illusion-of-a-call-stack),
By sending a message, an actor delegates work to another actor. As we saw in [The illusion of a call stack](what-are-actors.md#the-illusion-of-a-call-stack),
if it expected a return value, the sending actor would either need to block or to execute the other actor's work on the same thread.
Instead, the receiving actor delivers the results in a reply message.

Expand Down
8 changes: 0 additions & 8 deletions docs/articles/streams/configuration.md

This file was deleted.

49 changes: 49 additions & 0 deletions docs/articles/streams/integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,55 @@ The numbers in parenthesis illustrates how many calls that are in progress at
the same time. Here the downstream demand and thereby the number of concurrent
calls are limited by the buffer size (4) of the `ActorMaterializerSettings`.

### Integrating with Observables

Starting from version 1.3.2, Akka.Streams offers integration with observables - both as possible sources and sinks for incoming events. In order to expose Akka.Streams runnable graph as an observable, use `Sink.AsObservable<T>` method. Example:

```csharp
IObservable<int> observable = Source.From(new []{ 1, 2, 3 })
.RunWith(Sink.AsObservable<int>(), materializer);
```

In order to use an observable as an input source to Akka graph, you may want to use `Source.FromObservable<T>` method. Example:

```csharp
await Source.FromObservable(observable, maxBufferCapacity: 128, overflowStrategy: OverflowStrategy.DropHead)
.RunForEach(Console.WriteLine, materializer);
```

You may notice two extra parameters here. One of the advantages of Akka.Streams (and reactive streams in general) over Reactive Extensions is notion of backpressure - absent in Rx.NET. This puts a constraint of rate limiting the events incoming form upstream. If an observable will be producing events faster, than downstream is able to consume them, source stage will start to buffer them up to a provided `maxBufferCapacity` limit. Once that limit is reached, an overflow strategy will be applied. There are several different overflow strategies to choose from:

- `OverflowStrategy.DropHead` (default) will drop the oldest element. In this mode source works in circular buffer fashion.
- `OverflowStrategy.DropTail` will cause a current element to replace a one set previously in a buffer.
- `OverflowStrategy.DropNew` will cause current event to be dropped. This effectivelly will cause dropping any new incoming events until a buffer will get some free space.
- `OverflowStrategy.Fail` will cause a `BufferOverflowException` to be send as an error signal.
- `OverflowStrategy.DropBuffer` will cause a whole buffer to be cleared once it's limit has been reached.

Any other `OverflowStrategy` option is not supported by `Source.FromObservable` stage.

### Integrating with event handlers

C# events can also be used as a potential source of an Akka.NET stream. It's possible using `Source.FromEvent` methods. Example:

```csharp
Source.FromEvent<RoutedEventArgs>(
addHandler: h => button.Click += h,
removeHandler: h => button.Click -= h,
maxBufferCapacity: 128,
overflowStrategy: OverflowStrategy.DropHead)
.RunForEach(e => Console.WriteLine($"Captured click from {e.Source}"), materializer);

// using custom delegate adapter
Source.FromEvent<EventHandler<RoutedEventArgs>, RoutedEventArgs>(
conversion: onNext => (sender, eventArgs) => onNext(eventArgs),
addHandler: h => button.Click += h,
removeHandler: h => button.Click -= h)
.RunForEach(e => Console.WriteLine($"Captured click from {e.Source}"), materializer);
```

Just like in case of `Source.FromObservable`, `Source.FromEvents` can take optional parameters used to configure buffering strategy applied for incoming events.


### Integrating with Reactive Streams
`Reactive Streams` defines a standard for asynchronous stream processing with non-blocking
back pressure. It makes it possible to plug together stream libraries that adhere to the standard.
Expand Down
10 changes: 5 additions & 5 deletions docs/articles/utilities/serilog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ PM> Install-Package Akka.Logger.Serilog

## Example

The following example uses Serilog's __Colored Console__ sink available via nuget, there are wide range of other sinks available depending on your needs, for example a rolling log file sink. See serilog's documentation for details on these.
The following example uses Serilog's __Console__ sink available via nuget, there are wide range of other sinks available depending on your needs, for example a rolling log file sink. See serilog's documentation for details on these.

```
PM> Install-Package Serilog.Sinks.ColoredConsole
PM> Install-Package Serilog.Sinks.Console
```

Next, you'll need to configure the global `Log.Logger` and also specify to use
the logger in the config when creating the system, for example like this:
```csharp
var logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.WriteTo.Console()
.MinimumLevel.Information()
.CreateLogger();

Expand Down Expand Up @@ -72,7 +72,7 @@ If the configured output template is, for example, `"[{CorrelationId}] {Message}
```csharp
// configure sink with an output template
var logger = new LoggerConfiguration()
.WriteTo.ColoredConsole(outputTemplate: "[{CorrelationId}] {Message}{NewLine}")
.WriteTo.Console(outputTemplate: "[{CorrelationId}] {Message}{NewLine}")
.MinimumLevel.Information()
.CreateLogger();
```
Expand Down Expand Up @@ -105,7 +105,7 @@ The code can then be updated as follows removing the inline HOCON from the actor

```csharp
var logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.WriteTo.Console()
.MinimumLevel.Information()
.CreateLogger();

Expand Down
2 changes: 1 addition & 1 deletion docs/docfx.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
"default",
"template"
],
"postProcessors": [],
"postProcessors": ["ExtractSearchIndex"],
"noLangKeyword": false
}
}
2 changes: 1 addition & 1 deletion docs/examples/Tutorials/Tutorial4/DeviceGroupQuerySpec.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public void DeviceGroupQuery_must_return_return_DeviceNotAvailable_if_device_sto
device1.ExpectMsg<ReadTemperature>(read => read.RequestId == 0);
device2.ExpectMsg<ReadTemperature>(read => read.RequestId == 0);

queryActor.Tell(new RespondTemperature(requestId: 0, value: 1.0), device2.Ref);
queryActor.Tell(new RespondTemperature(requestId: 0, value: 1.0), device1.Ref);
device2.Tell(PoisonPill.Instance);

requester.ExpectMsg<RespondAllTemperatures>(msg =>
Expand Down
9 changes: 5 additions & 4 deletions docs/examples/Tutorials/Tutorial4/DeviceGroupSpec.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using Akka.Actor;
using Akka.TestKit.Xunit2;
using Akka.Util.Internal;
using FluentAssertions;
using Xunit;

Expand Down Expand Up @@ -136,10 +137,10 @@ public void DeviceGroup_actor_must_be_able_to_collect_temperatures_from_all_acti

groupActor.Tell(new RequestAllTemperatures(0), probe.Ref);
probe.ExpectMsg<RespondAllTemperatures>(msg =>
{
// TODO: compare temperatures dictionary
return msg.RequestId == 0;
});
msg.Temperatures["device1"].AsInstanceOf<Temperature>().Value == 1.0 &&
msg.Temperatures["device2"].AsInstanceOf<Temperature>().Value == 2.0 &&
msg.Temperatures["device3"] is TemperatureNotAvailable &&
msg.RequestId == 0);
}
#endregion
}
Expand Down
3 changes: 3 additions & 0 deletions docs/web.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
<rewrite>
<rules>
<rule name="rewrite docs to articles" stopProcessing="true">
Expand Down
Loading

0 comments on commit 4dbb9da

Please sign in to comment.