diff --git a/pkg/apis/clickhouse.altinity.com/v1/type_host.go b/pkg/apis/clickhouse.altinity.com/v1/type_host.go index 6e1de67a8..2bb97a28e 100644 --- a/pkg/apis/clickhouse.altinity.com/v1/type_host.go +++ b/pkg/apis/clickhouse.altinity.com/v1/type_host.go @@ -603,3 +603,14 @@ func (host *Host) IsZero() bool { func (host *Host) IsNonZero() bool { return host != nil } + +func (host *Host) ShouldIncludeIntoCluster() bool { + switch { + case host.IsStopped(): + return false + case host.GetCluster().HostsCount() < 2: + return false + default: + return true + } +} diff --git a/pkg/controller/chi/worker-chi-reconciler.go b/pkg/controller/chi/worker-chi-reconciler.go index 7079e6619..fea240869 100644 --- a/pkg/controller/chi/worker-chi-reconciler.go +++ b/pkg/controller/chi/worker-chi-reconciler.go @@ -235,6 +235,15 @@ func (w *worker) reconcileCRAuxObjectsFinal(ctx context.Context, cr *api.ClickHo cr.GetRuntime().LockCommonConfig() err = w.reconcileConfigMapCommon(ctx, cr) cr.GetRuntime().UnlockCommonConfig() + + // Wait for all hosts to be included into cluster + cr.WalkHosts(func(host *api.Host) error { + if host.ShouldIncludeIntoCluster() { + _ = w.waitHostInCluster(ctx, host) + } + return nil + }) + return err }