-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClusterConfigurator.cs
55 lines (47 loc) · 1.63 KB
/
ClusterConfigurator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System.Diagnostics;
using DotNext.Net;
using DotNext.Net.Cluster;
using DotNext.Net.Cluster.Consensus.Raft;
namespace Raft3DockerClusterExample;
public class ClusterConfigurator : IClusterMemberLifetime
{
private readonly ILogger<ClusterConfigurator> _logger;
public ClusterConfigurator(ILogger<ClusterConfigurator> logger)
{
_logger = logger;
}
internal void LeaderChanged(ICluster cl, IClusterMember? leader)
{
if (cl is not IRaftCluster cluster)
{
Debug.Assert(cl is IRaftCluster);
return;
}
var term = cluster.Term;
var timeout = cluster.ElectionTimeout;
_logger.LogInformation(leader is null
? "Consensus cannot be reached"
: $"New cluster leader is elected. Leader address is {leader.EndPoint}.");
_logger.LogInformation($"Term of local cluster member is {term}. Election timeout {timeout}");
}
public void OnStart(IRaftCluster cluster, IDictionary<string, string> metadata)
{
cluster.LeaderChanged += LeaderChanged;
cluster.PeerDiscovered += ClusterOnPeerDiscovered;
cluster.PeerGone += ClusterOnPeerGone;
}
private void ClusterOnPeerGone(IPeerMesh arg1, PeerEventArgs arg2)
{
_logger.LogInformation($"Peer gone: {arg2.PeerAddress}");
}
private void ClusterOnPeerDiscovered(IPeerMesh arg1, PeerEventArgs arg2)
{
_logger.LogInformation($"Peer discovered: {arg2.PeerAddress}");
}
public void OnStop(IRaftCluster cluster)
{
cluster.LeaderChanged -= LeaderChanged;
cluster.PeerDiscovered -= ClusterOnPeerDiscovered;
cluster.PeerGone -= ClusterOnPeerGone;
}
}