private async Task <IKeyValueStore> InitializeKeyValueStoreAsync( [NotNull] IEnumerable <IManagedProcess> managedProcesses, [NotNull] ClusterHeartBeat heartbeat) { string etcdAgentType = WellKnownAgentType.KeyValueStore.ToString(); IEnumerable <IManagedProcess> kvsProcesses = managedProcesses.Where(m => m.AgentType.Equals(etcdAgentType)); // For all well-known KVS agent processes... foreach (var kvsProcess in kvsProcesses) { // Check if they live (reviving them, if necessary): bool started = await heartbeat.CheckHeartBeatAsync(kvsProcess); if (started) { // ... and try making contact IServerProcess serverProcess = (IServerProcess)kvsProcess; var keyValueStore = await EtcdKeyValueStore.TryConnectAsync( serverProcess.HostName, serverProcess.Port, serverProcess.UseTls); if (keyValueStore != null) { _logger.LogInformation("Using etcd based key-value store..."); return(keyValueStore); } } } // None is configured or none is running or none is responding: _logger.LogInformation("Using in-memory key-value store..."); return(new LocalKeyValueStore()); }
public Cluster(string name = "<no name>") { Name = name; _logger = Log.CreateLogger($"Cluster {Name}"); _clusterConfig = new ClusterConfig(); _heartbeat = new ClusterHeartBeat(this, CareForUnhealthy, CareForUnavailable); }