Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        public Cluster(string name = "<no name>")
        {
            Name = name;

            _logger = Log.CreateLogger($"Cluster {Name}");

            _clusterConfig = new ClusterConfig();

            _heartbeat = new ClusterHeartBeat(this, CareForUnhealthy, CareForUnavailable);
        }