Skip to content

Commit

Permalink
Merge pull request #133 from Altinity/0.4.1
Browse files Browse the repository at this point in the history
Reconcile delete service procedure
  • Loading branch information
alex-zaitsev committed Jun 27, 2019
2 parents 3fca592 + 4771331 commit 3d3526e
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 30 deletions.
2 changes: 1 addition & 1 deletion manifests/dev/dev-watch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"

source "${CUR_DIR}/dev-config.sh"

watch -n1 "kubectl -n ${CHOPERATOR_NAMESPACE} get all,configmap,endpoints,pv,pvc"
watch -n1 "kubectl -n ${CHOPERATOR_NAMESPACE} get pod,service,configmap,pv,statefulset,pvc"
2 changes: 1 addition & 1 deletion pkg/apis/clickhouse.altinity.com/v1/type_chi.go
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ func (chi *ClickHouseInstallation) GetServiceTemplate(name string) (*ChiServiceT

// GetServiceTemplate gets own ChiServiceTemplate
func (chi *ClickHouseInstallation) GetOwnServiceTemplate() (*ChiServiceTemplate, bool) {
name := chi.Spec.Defaults.Templates.serviceTemplate
name := chi.Spec.Defaults.Templates.ServiceTemplate
template, ok := chi.GetServiceTemplate(name)
return template, ok
}
4 changes: 2 additions & 2 deletions pkg/apis/clickhouse.altinity.com/v1/type_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ func (cluster *ChiCluster) GetServiceTemplate() (*ChiServiceTemplate, bool) {
}

func (cluster *ChiCluster) WalkShards(
f func(shardIndex int, shard *ChiShard) error,
f func(shard *ChiShard) error,
) []error {
res := make([]error, 0)

for shardIndex := range cluster.Layout.Shards {
shard := &cluster.Layout.Shards[shardIndex]
res = append(res, f(shardIndex, shard))
res = append(res, f(shard))
}

return res
Expand Down
6 changes: 3 additions & 3 deletions pkg/apis/clickhouse.altinity.com/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ type ChiDefaults struct {
type ChiTemplateNames struct {
PodTemplate string `json:"podTemplate,omitempty" yaml:"podTemplate"`
VolumeClaimTemplate string `json:"volumeClaimTemplate,omitempty" yaml:"volumeClaimTemplate"`
serviceTemplate string `json:"serviceTemplate,omitempty" yaml:"serviceTemplate"`
ServiceTemplate string `json:"serviceTemplate,omitempty" yaml:"serviceTemplate"`
ClusterServiceTemplate string `json:"clusterServiceTemplate,omitempty" yaml:"clusterServiceTemplate"`
ShardServiceTemplate string `json:"shardServiceTemplate,omitempty" yaml:"shardServiceTemplate"`
ReplicaServiceTemplate string `json:"replicaServiceTemplate,omitempty" yaml:"replicaServiceTemplate"`
Expand All @@ -72,8 +72,8 @@ func (templates *ChiTemplateNames) MergeFrom(from *ChiTemplateNames) {
if templates.VolumeClaimTemplate == "" {
templates.VolumeClaimTemplate = from.VolumeClaimTemplate
}
if templates.serviceTemplate == "" {
templates.serviceTemplate = from.serviceTemplate
if templates.ServiceTemplate == "" {
templates.ServiceTemplate = from.ServiceTemplate
}
if templates.ClusterServiceTemplate == "" {
templates.ClusterServiceTemplate = from.ClusterServiceTemplate
Expand Down
100 changes: 77 additions & 23 deletions pkg/controller/chi/deleters.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,28 +57,48 @@ func (c *Controller) deleteReplica(replica *chop.ChiReplica) error {
_ = c.statefulSetDelete(replica)
_ = c.persistentVolumeClaimDelete(replica)
_ = c.configMapDelete(replica)
_ = c.serviceDelete(replica)
_ = c.deleteServiceReplica(replica)

glog.V(1).Infof("End delete replica %s/%s", replica.Address.ClusterName, replica.Name)

return nil
}

// deleteShard deletes all kubernetes resources related to shard *chop.ChiShard
func (c *Controller) deleteShard(shard *chop.ChiShard) {
func (c *Controller) deleteShard(shard *chop.ChiShard) error {
glog.V(1).Infof("Start delete shard %s/%s", shard.Address.Namespace, shard.Name)

// Delete all replicas
shard.WalkReplicas(c.deleteReplica)

// Delete Shard Service
c.deleteServiceShard(shard)
glog.V(1).Infof("End delete shard %s/%s", shard.Address.Namespace, shard.Name)

return nil
}

// deleteCluster deletes all kubernetes resources related to cluster *chop.ChiCluster
func (c *Controller) deleteCluster(cluster *chop.ChiCluster) {
glog.V(1).Infof("Start delete cluster %s", cluster.Name)
cluster.WalkReplicas(c.deleteReplica)
func (c *Controller) deleteCluster(cluster *chop.ChiCluster) error {
glog.V(1).Infof("Start delete cluster %s/%s", cluster.Address.Namespace, cluster.Name)

// Delete all shards
cluster.WalkShards(c.deleteShard)

// Delete Cluster Service
c.deleteServiceCluster(cluster)
glog.V(1).Infof("End delete cluster %s/%s", cluster.Address.Namespace, cluster.Name)

return nil
}

// deleteChi deletes all kubernetes resources related to chi *chop.ClickHouseInstallation
func (c *Controller) deleteChi(chi *chop.ClickHouseInstallation) {
func (c *Controller) deleteChi(chi *chop.ClickHouseInstallation) error {
glog.V(1).Infof("Start delete CHI %s/%s", chi.Namespace, chi.Name)

// Delete all clusters
chi.WalkClusters(func(cluster *chop.ChiCluster) error {
c.deleteCluster(cluster)
return nil
return c.deleteCluster(cluster)
})

// Delete common ConfigMap's
Expand Down Expand Up @@ -106,14 +126,12 @@ func (c *Controller) deleteChi(chi *chop.ClickHouseInstallation) {
glog.V(1).Infof("FAIL delete ConfigMap %s/%s %v", chi.Namespace, configMapCommonUsersName, err)
}

chiServiceName := chopmodel.CreateChiServiceName(chi)
// Delete Service
err = c.kubeClient.CoreV1().Services(chi.Namespace).Delete(chiServiceName, newDeleteOptions())
if err == nil {
glog.V(1).Infof("OK delete Service %s/%s", chi.Namespace, chiServiceName)
} else {
glog.V(1).Infof("FAIL delete Service %s/%s %v", chi.Namespace, chiServiceName, err)
}
err = c.deleteServiceChi(chi)

glog.V(1).Infof("End delete CHI %s/%s", chi.Namespace, chi.Name)

return nil
}

// statefulSetDeletePod delete a pod of a StatefulSet. This requests StatefulSet to relaunch deleted pod
Expand Down Expand Up @@ -202,17 +220,53 @@ func (c *Controller) configMapDelete(replica *chop.ChiReplica) error {
return nil
}

// serviceDelete deletes Service
func (c *Controller) serviceDelete(replica *chop.ChiReplica) error {
name := chopmodel.CreateStatefulSetServiceName(replica)
// deleteServiceReplica deletes Service
func (c *Controller) deleteServiceReplica(replica *chop.ChiReplica) error {
serviceName := chopmodel.CreateStatefulSetServiceName(replica)
namespace := replica.Address.Namespace
glog.V(1).Infof("deleteServiceReplica(%s/%s)", namespace, serviceName)
return c.deleteServiceIfExists(namespace, serviceName)
}

func (c *Controller) deleteServiceShard(shard *chop.ChiShard) error {
serviceName := chopmodel.CreateShardServiceName(shard)
namespace := shard.Address.Namespace
glog.V(1).Infof("deleteServiceShard(%s/%s)", namespace, serviceName)
return c.deleteServiceIfExists(namespace, serviceName)
}

func (c *Controller) deleteServiceCluster(cluster *chop.ChiCluster) error {
serviceName := chopmodel.CreateClusterServiceName(cluster)
namespace := cluster.Address.Namespace
glog.V(1).Infof("deleteServiceCluster(%s/%s)", namespace, serviceName)
return c.deleteServiceIfExists(namespace, serviceName)
}

func (c *Controller) deleteServiceChi(chi *chop.ClickHouseInstallation) error {
serviceName := chopmodel.CreateChiServiceName(chi)
namespace := chi.Namespace
glog.V(1).Infof("deleteServiceChi(%s/%s)", namespace, serviceName)
return c.deleteServiceIfExists(namespace, serviceName)
}

glog.V(1).Infof("serviceDelete(%s/%s)", namespace, name)
func (c *Controller) deleteServiceIfExists(namespace, name string) error {
// Delete Service in case it does not exist

if err := c.kubeClient.CoreV1().Services(namespace).Delete(name, newDeleteOptions()); err == nil {
glog.V(1).Infof("Service %s/%s deleted", namespace, name)
// Check service exists
_, err := c.kubeClient.CoreV1().Services(namespace).Get(name, metav1.GetOptions{})

if err != nil {
// No such a service, nothing to delete
return nil
}

// Delete service
err = c.kubeClient.CoreV1().Services(namespace).Delete(name, newDeleteOptions())
if err == nil {
glog.V(1).Infof("OK delete Service %s/%s", namespace, name)
} else {
glog.V(1).Infof("Service %s/%s delete FAILED %v", namespace, name, err)
glog.V(1).Infof("FAIL delete Service %s/%s %v", namespace, name, err)
}
return nil

return err
}

0 comments on commit 3d3526e

Please sign in to comment.