Skip to content

Commit

Permalink
dev: move port walkers into host
Browse files Browse the repository at this point in the history
  • Loading branch information
sunsingerus committed May 16, 2024
1 parent 7ce3458 commit 05c72d2
Show file tree
Hide file tree
Showing 24 changed files with 154 additions and 157 deletions.
2 changes: 1 addition & 1 deletion pkg/apis/clickhouse.altinity.com/v1/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type IChi interface {
type ICustomResource interface {
GetNamespace() string
GetName() string
GetLabels() map[string]string
Expand Down
2 changes: 1 addition & 1 deletion pkg/apis/clickhouse.altinity.com/v1/type_defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ package v1
// ChiDefaults defines defaults section of .spec
type ChiDefaults struct {
ReplicasUseFQDN *StringBool `json:"replicasUseFQDN,omitempty" yaml:"replicasUseFQDN,omitempty"`
DistributedDDL *ChiDistributedDDL `json:"distributedDDL,omitempty" yaml:"distributedDDL,omitempty"`
DistributedDDL *DistributedDDL `json:"distributedDDL,omitempty" yaml:"distributedDDL,omitempty"`
StorageManagement *StorageManagement `json:"storageManagement,omitempty" yaml:"storageManagement,omitempty"`
Templates *TemplatesList `json:"templates,omitempty" yaml:"templates,omitempty"`
}
Expand Down
14 changes: 7 additions & 7 deletions pkg/apis/clickhouse.altinity.com/v1/type_distributed_ddl.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,35 +14,35 @@

package v1

// NewChiDistributedDDL creates new ChiDistributedDDL
func NewChiDistributedDDL() *ChiDistributedDDL {
return new(ChiDistributedDDL)
// NewDistributedDDL creates new DistributedDDL
func NewDistributedDDL() *DistributedDDL {
return new(DistributedDDL)
}

// HasProfile checks whether profile is present
func (d *ChiDistributedDDL) HasProfile() bool {
func (d *DistributedDDL) HasProfile() bool {
if d == nil {
return false
}
return len(d.Profile) > 0
}

// GetProfile gets profile
func (d *ChiDistributedDDL) GetProfile() string {
func (d *DistributedDDL) GetProfile() string {
if d == nil {
return ""
}
return d.Profile
}

// MergeFrom merges from specified source
func (d *ChiDistributedDDL) MergeFrom(from *ChiDistributedDDL, _type MergeType) *ChiDistributedDDL {
func (d *DistributedDDL) MergeFrom(from *DistributedDDL, _type MergeType) *DistributedDDL {
if from == nil {
return d
}

if d == nil {
d = NewChiDistributedDDL()
d = NewDistributedDDL()
}

switch _type {
Expand Down
54 changes: 54 additions & 0 deletions pkg/apis/clickhouse.altinity.com/v1/type_host.go
Original file line number Diff line number Diff line change
Expand Up @@ -415,3 +415,57 @@ func (host *Host) HasDesiredStatefulSet() bool {

return host.Runtime.DesiredStatefulSet != nil
}

const (
ChDefaultPortName = "port"
ChDefaultPortNumber = int32(9000)

// ClickHouse open ports names and values
ChDefaultTCPPortName = "tcp"
ChDefaultTCPPortNumber = int32(9000)
ChDefaultTLSPortName = "secureclient"
ChDefaultTLSPortNumber = int32(9440)
ChDefaultHTTPPortName = "http"
ChDefaultHTTPPortNumber = int32(8123)
ChDefaultHTTPSPortName = "https"
ChDefaultHTTPSPortNumber = int32(8443)
ChDefaultInterserverHTTPPortName = "interserver"
ChDefaultInterserverHTTPPortNumber = int32(9009)
)

func (host *Host) WalkPorts(f func(name string, port *Int32, protocol core.Protocol) bool) {
if host == nil {
return
}
if f(ChDefaultPortName, host.Port, core.ProtocolTCP) {
return
}
if f(ChDefaultTCPPortName, host.TCPPort, core.ProtocolTCP) {
return
}
if f(ChDefaultTLSPortName, host.TLSPort, core.ProtocolTCP) {
return
}
if f(ChDefaultHTTPPortName, host.HTTPPort, core.ProtocolTCP) {
return
}
if f(ChDefaultHTTPSPortName, host.HTTPSPort, core.ProtocolTCP) {
return
}
if f(ChDefaultInterserverHTTPPortName, host.InterserverHTTPPort, core.ProtocolTCP) {
return
}
}

func (host *Host) WalkAssignedPorts(f func(name string, port *Int32, protocol core.Protocol) bool) {
host.WalkPorts(
func(_name string, _port *Int32, _protocol core.Protocol) bool {
if _port.HasValue() {
// Port is assigned - call provided function on it
return f(_name, _port, _protocol)
}
// Do not break, continue iterating
return false
},
)
}
4 changes: 2 additions & 2 deletions pkg/apis/clickhouse.altinity.com/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -829,8 +829,8 @@ type ServiceTemplate struct {
Spec core.ServiceSpec `json:"spec,omitempty" yaml:"spec,omitempty"`
}

// ChiDistributedDDL defines distributedDDL section of .spec.defaults
type ChiDistributedDDL struct {
// DistributedDDL defines distributedDDL section of .spec.defaults
type DistributedDDL struct {
Profile string `json:"profile,omitempty" yaml:"profile"`
}

Expand Down
34 changes: 17 additions & 17 deletions pkg/apis/clickhouse.altinity.com/v1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pkg/controller/chi/worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func (c *Controller) newWorker(q queue.PriorityQueue, sys bool) *worker {

// newContext creates new reconcile task
func (w *worker) newTask(chi *api.ClickHouseInstallation) {
w.task = newTask(chiCreator.NewCreator(chi, config.NewClickHouseConfigFilesGenerator(chi, &config.ClickHouseConfigGeneratorOptions{
w.task = newTask(chiCreator.NewCreator(chi, config.NewClickHouseConfigFilesGenerator(chi, &config.ConfigGeneratorOptions{
Users: chi.GetSpec().Configuration.Users,
Profiles: chi.GetSpec().Configuration.Profiles,
Quotas: chi.GetSpec().Configuration.Quotas,
Expand Down
59 changes: 3 additions & 56 deletions pkg/model/chi/config/ch_config_const.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,15 @@
package config

import (
core "k8s.io/api/core/v1"

api "github.com/altinity/clickhouse-operator/pkg/apis/clickhouse.altinity.com/v1"
)

type FilesGroupType string

const (
ConfigFilesGroupCommon FilesGroupType = "FilesGroupType common"
ConfigFilesGroupUsers FilesGroupType = "FilesGroupType users"
ConfigFilesGroupHost FilesGroupType = "FilesGroupType host"
FilesGroupCommon FilesGroupType = "FilesGroupType common"
FilesGroupUsers FilesGroupType = "FilesGroupType users"
FilesGroupHost FilesGroupType = "FilesGroupType host"
)

const (
Expand Down Expand Up @@ -100,60 +98,9 @@ const (
ClickHouseLogContainerName = "clickhouse-log"
)

const (
// ClickHouse open ports names and values
ChDefaultTCPPortName = "tcp"
ChDefaultTCPPortNumber = int32(9000)
ChDefaultTLSPortName = "secureclient"
ChDefaultTLSPortNumber = int32(9440)
ChDefaultHTTPPortName = "http"
ChDefaultHTTPPortNumber = int32(8123)
ChDefaultHTTPSPortName = "https"
ChDefaultHTTPSPortNumber = int32(8443)
ChDefaultInterserverHTTPPortName = "interserver"
ChDefaultInterserverHTTPPortNumber = int32(9009)
)

const (
// ZkDefaultPort specifies Zookeeper default port
ZkDefaultPort = 2181
// ZkDefaultRootTemplate specifies default ZK root - /clickhouse/{namespace}/{chi name}
ZkDefaultRootTemplate = "/clickhouse/%s/%s"
)

func HostWalkPorts(host *api.Host, f func(name string, port *api.Int32, protocol core.Protocol) bool) {
if host == nil {
return
}
if f(ChDefaultTCPPortName, host.TCPPort, core.ProtocolTCP) {
return
}
if f(ChDefaultTLSPortName, host.TLSPort, core.ProtocolTCP) {
return
}
if f(ChDefaultHTTPPortName, host.HTTPPort, core.ProtocolTCP) {
return
}
if f(ChDefaultHTTPSPortName, host.HTTPSPort, core.ProtocolTCP) {
return
}
if f(ChDefaultInterserverHTTPPortName, host.InterserverHTTPPort, core.ProtocolTCP) {
return
}
}

func HostWalkAssignedPorts(host *api.Host, f func(name string, port *api.Int32, protocol core.Protocol) bool) {
if host == nil {
return
}
HostWalkPorts(
host,
func(_name string, _port *api.Int32, _protocol core.Protocol) bool {
if _port.HasValue() {
return f(_name, _port, _protocol)
}
// Do not break, continue iterating
return false
},
)
}
10 changes: 5 additions & 5 deletions pkg/model/chi/config/ch_config_files_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,24 +29,24 @@ type ClickHouseConfigFilesGenerator struct {
}

// NewClickHouseConfigFilesGenerator creates new clickhouse configuration generator object
func NewClickHouseConfigFilesGenerator(chi *api.ClickHouseInstallation, opts *ClickHouseConfigGeneratorOptions) *ClickHouseConfigFilesGenerator {
func NewClickHouseConfigFilesGenerator(cr api.ICustomResource, opts *ConfigGeneratorOptions) *ClickHouseConfigFilesGenerator {
return &ClickHouseConfigFilesGenerator{
configGenerator: newClickHouseConfigGenerator(chi, opts),
configGenerator: newClickHouseConfigGenerator(cr, opts),
chopConfig: chop.Config(),
}
}

func (c *ClickHouseConfigFilesGenerator) CreateConfigFiles(what FilesGroupType, params ...any) map[string]string {
switch what {
case ConfigFilesGroupCommon:
case FilesGroupCommon:
var options *ClickHouseConfigFilesGeneratorOptions
if len(params) > 0 {
options = params[0].(*ClickHouseConfigFilesGeneratorOptions)
return c.createConfigFilesGroupCommon(options)
}
case ConfigFilesGroupUsers:
case FilesGroupUsers:
return c.createConfigFilesGroupUsers()
case ConfigFilesGroupHost:
case FilesGroupHost:
var host *api.Host
if len(params) > 0 {
host = params[0].(*api.Host)
Expand Down
17 changes: 9 additions & 8 deletions pkg/model/chi/config/ch_config_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package config
import (
"bytes"
"fmt"

log "github.com/altinity/clickhouse-operator/pkg/announcer"
api "github.com/altinity/clickhouse-operator/pkg/apis/clickhouse.altinity.com/v1"
"github.com/altinity/clickhouse-operator/pkg/model/chi"
Expand All @@ -41,12 +42,12 @@ const (
// ClickHouse configuration files content is an XML ATM, so config generator provides set of Get*() functions
// which produces XML which are parts of ClickHouse configuration and can/should be used as ClickHouse config files.
type ClickHouseConfigGenerator struct {
chi api.IChi
opts *ClickHouseConfigGeneratorOptions
chi api.ICustomResource
opts *ConfigGeneratorOptions
}

// newClickHouseConfigGenerator returns new ClickHouseConfigGenerator struct
func newClickHouseConfigGenerator(chi api.IChi, opts *ClickHouseConfigGeneratorOptions) *ClickHouseConfigGenerator {
func newClickHouseConfigGenerator(chi api.ICustomResource, opts *ConfigGeneratorOptions) *ClickHouseConfigGenerator {
return &ClickHouseConfigGenerator{
chi: chi,
opts: opts,
Expand Down Expand Up @@ -434,22 +435,22 @@ func (c *ClickHouseConfigGenerator) getHostHostnameAndPorts(host *api.Host) stri
// <yandex>
util.Iline(b, 0, "<"+xmlTagYandex+">")

if host.TCPPort.Value() != ChDefaultTCPPortNumber {
if host.TCPPort.Value() != api.ChDefaultTCPPortNumber {
util.Iline(b, 4, "<tcp_port>%d</tcp_port>", host.TCPPort.Value())
}
if host.TLSPort.Value() != ChDefaultTLSPortNumber {
if host.TLSPort.Value() != api.ChDefaultTLSPortNumber {
util.Iline(b, 4, "<tcp_port_secure>%d</tcp_port_secure>", host.TLSPort.Value())
}
if host.HTTPPort.Value() != ChDefaultHTTPPortNumber {
if host.HTTPPort.Value() != api.ChDefaultHTTPPortNumber {
util.Iline(b, 4, "<http_port>%d</http_port>", host.HTTPPort.Value())
}
if host.HTTPSPort.Value() != ChDefaultHTTPSPortNumber {
if host.HTTPSPort.Value() != api.ChDefaultHTTPSPortNumber {
util.Iline(b, 4, "<https_port>%d</https_port>", host.HTTPSPort.Value())
}

// Interserver host and port
util.Iline(b, 4, "<interserver_http_host>%s</interserver_http_host>", c.getRemoteServersReplicaHostname(host))
if host.InterserverHTTPPort.Value() != ChDefaultInterserverHTTPPortNumber {
if host.InterserverHTTPPort.Value() != api.ChDefaultInterserverHTTPPortNumber {
util.Iline(b, 4, "<interserver_http_port>%d</interserver_http_port>", host.InterserverHTTPPort.Value())
}

Expand Down
4 changes: 2 additions & 2 deletions pkg/model/chi/config/ch_config_generator_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ import (
api "github.com/altinity/clickhouse-operator/pkg/apis/clickhouse.altinity.com/v1"
)

type ClickHouseConfigGeneratorOptions struct {
DistributedDDL *api.ChiDistributedDDL
type ConfigGeneratorOptions struct {
DistributedDDL *api.DistributedDDL
Users *api.Settings
Profiles *api.Settings
Quotas *api.Settings
Expand Down
6 changes: 3 additions & 3 deletions pkg/model/chi/creator/config_map.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func (c *Creator) createConfigMapCHICommon(options *config.ClickHouseConfigFiles
OwnerReferences: createOwnerReferences(c.cr),
},
// Data contains several sections which are to be several xml chopConfig files
Data: c.configFilesGenerator.CreateConfigFiles(config.ConfigFilesGroupCommon, options),
Data: c.configFilesGenerator.CreateConfigFiles(config.FilesGroupCommon, options),
}
// And after the object is ready we can put version label
tags.MakeObjectVersion(cm.GetObjectMeta(), cm)
Expand All @@ -82,7 +82,7 @@ func (c *Creator) createConfigMapCHICommonUsers() *core.ConfigMap {
OwnerReferences: createOwnerReferences(c.cr),
},
// Data contains several sections which are to be several xml chopConfig files
Data: c.configFilesGenerator.CreateConfigFiles(config.ConfigFilesGroupUsers),
Data: c.configFilesGenerator.CreateConfigFiles(config.FilesGroupUsers),
}
// And after the object is ready we can put version label
tags.MakeObjectVersion(cm.GetObjectMeta(), cm)
Expand All @@ -100,7 +100,7 @@ func (c *Creator) createConfigMapCHIHost(host *api.Host) *core.ConfigMap {
OwnerReferences: createOwnerReferences(c.cr),
},
// Data contains several sections which are to be several xml chopConfig files
Data: c.configFilesGenerator.CreateConfigFiles(config.ConfigFilesGroupHost, host),
Data: c.configFilesGenerator.CreateConfigFiles(config.FilesGroupHost, host),
}
// And after the object is ready we can put version label
tags.MakeObjectVersion(cm.GetObjectMeta(), cm)
Expand Down

0 comments on commit 05c72d2

Please sign in to comment.