Skip to content

Commit dac46d8

Browse files
fix: check ch version (#8778)
Check the clickhouse version, before the setting secondary_indices_enable_bulk_filtering is used.
1 parent 802ce6d commit dac46d8

File tree

4 files changed

+40
-19
lines changed

4 files changed

+40
-19
lines changed

pkg/signoz/provider.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,14 @@ func NewSQLMigrationProviderFactories(
136136

137137
func NewTelemetryStoreProviderFactories() factory.NamedMap[factory.ProviderFactory[telemetrystore.TelemetryStore, telemetrystore.Config]] {
138138
return factory.MustNewNamedMap(
139-
clickhousetelemetrystore.NewFactory(telemetrystorehook.NewSettingsFactory(), telemetrystorehook.NewLoggingFactory()),
139+
clickhousetelemetrystore.NewFactory(
140+
telemetrystore.TelemetryStoreHookFactoryFunc(func(s string) factory.ProviderFactory[telemetrystore.TelemetryStoreHook, telemetrystore.Config] {
141+
return telemetrystorehook.NewSettingsFactory(s)
142+
}),
143+
telemetrystore.TelemetryStoreHookFactoryFunc(func(s string) factory.ProviderFactory[telemetrystore.TelemetryStoreHook, telemetrystore.Config] {
144+
return telemetrystorehook.NewLoggingFactory()
145+
}),
146+
),
140147
)
141148
}
142149

pkg/telemetrystore/clickhousetelemetrystore/provider.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,13 @@ type provider struct {
1616
hooks []telemetrystore.TelemetryStoreHook
1717
}
1818

19-
func NewFactory(hookFactories ...factory.ProviderFactory[telemetrystore.TelemetryStoreHook, telemetrystore.Config]) factory.ProviderFactory[telemetrystore.TelemetryStore, telemetrystore.Config] {
19+
func NewFactory(hookFactories ...telemetrystore.TelemetryStoreHookFactoryFunc) factory.ProviderFactory[telemetrystore.TelemetryStore, telemetrystore.Config] {
2020
return factory.NewProviderFactory(factory.MustNewName("clickhouse"), func(ctx context.Context, providerSettings factory.ProviderSettings, config telemetrystore.Config) (telemetrystore.TelemetryStore, error) {
21-
// we want to fail fast so we have hook registration errors before creating the telemetry store
22-
hooks := make([]telemetrystore.TelemetryStoreHook, len(hookFactories))
23-
for i, hookFactory := range hookFactories {
24-
hook, err := hookFactory.New(ctx, providerSettings, config)
25-
if err != nil {
26-
return nil, err
27-
}
28-
hooks[i] = hook
29-
}
30-
return New(ctx, providerSettings, config, hooks...)
21+
return New(ctx, providerSettings, config, hookFactories...)
3122
})
3223
}
3324

34-
func New(ctx context.Context, providerSettings factory.ProviderSettings, config telemetrystore.Config, hooks ...telemetrystore.TelemetryStoreHook) (telemetrystore.TelemetryStore, error) {
25+
func New(ctx context.Context, providerSettings factory.ProviderSettings, config telemetrystore.Config, hookFactories ...telemetrystore.TelemetryStoreHookFactoryFunc) (telemetrystore.TelemetryStore, error) {
3526
settings := factory.NewScopedProviderSettings(providerSettings, "github.com/SigNoz/signoz/pkg/telemetrystore/clickhousetelemetrystore")
3627

3728
options, err := clickhouse.ParseDSN(config.Clickhouse.DSN)
@@ -47,6 +38,20 @@ func New(ctx context.Context, providerSettings factory.ProviderSettings, config
4738
return nil, err
4839
}
4940

41+
var version string
42+
if err := chConn.QueryRow(ctx, "SELECT version()").Scan(&version); err != nil {
43+
return nil, err
44+
}
45+
46+
hooks := make([]telemetrystore.TelemetryStoreHook, len(hookFactories))
47+
for i, hookFactory := range hookFactories {
48+
hook, err := hookFactory(version).New(ctx, providerSettings, config)
49+
if err != nil {
50+
return nil, err
51+
}
52+
hooks[i] = hook
53+
}
54+
5055
return &provider{
5156
settings: settings,
5257
clickHouseConn: chConn,

pkg/telemetrystore/telemetrystore.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55

66
"github.com/ClickHouse/clickhouse-go/v2"
7+
"github.com/SigNoz/signoz/pkg/factory"
78
)
89

910
type TelemetryStore interface {
@@ -19,6 +20,8 @@ type TelemetryStoreHook interface {
1920
AfterQuery(ctx context.Context, event *QueryEvent)
2021
}
2122

23+
type TelemetryStoreHookFactoryFunc func(string) factory.ProviderFactory[TelemetryStoreHook, Config]
24+
2225
func WrapBeforeQuery(hooks []TelemetryStoreHook, ctx context.Context, event *QueryEvent) context.Context {
2326
for _, hook := range hooks {
2427
ctx = hook.BeforeQuery(ctx, event)

pkg/telemetrystore/telemetrystorehook/settings.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package telemetrystorehook
33
import (
44
"context"
55
"encoding/json"
6+
"strings"
67

78
"github.com/ClickHouse/clickhouse-go/v2"
89
"github.com/SigNoz/signoz/pkg/factory"
@@ -11,16 +12,20 @@ import (
1112
)
1213

1314
type provider struct {
14-
settings telemetrystore.QuerySettings
15+
clickHouseVersion string
16+
settings telemetrystore.QuerySettings
1517
}
1618

17-
func NewSettingsFactory() factory.ProviderFactory[telemetrystore.TelemetryStoreHook, telemetrystore.Config] {
18-
return factory.NewProviderFactory(factory.MustNewName("settings"), NewSettings)
19+
func NewSettingsFactory(version string) factory.ProviderFactory[telemetrystore.TelemetryStoreHook, telemetrystore.Config] {
20+
return factory.NewProviderFactory(factory.MustNewName("settings"), func(ctx context.Context, providerSettings factory.ProviderSettings, config telemetrystore.Config) (telemetrystore.TelemetryStoreHook, error) {
21+
return NewSettings(ctx, providerSettings, config, version)
22+
})
1923
}
2024

21-
func NewSettings(ctx context.Context, providerSettings factory.ProviderSettings, config telemetrystore.Config) (telemetrystore.TelemetryStoreHook, error) {
25+
func NewSettings(ctx context.Context, providerSettings factory.ProviderSettings, config telemetrystore.Config, version string) (telemetrystore.TelemetryStoreHook, error) {
2226
return &provider{
23-
settings: config.Clickhouse.QuerySettings,
27+
clickHouseVersion: version,
28+
settings: config.Clickhouse.QuerySettings,
2429
}, nil
2530
}
2631

@@ -75,7 +80,8 @@ func (h *provider) BeforeQuery(ctx context.Context, _ *telemetrystore.QueryEvent
7580
settings["result_overflow_mode"] = ctx.Value("result_overflow_mode")
7681
}
7782

78-
if !h.settings.SecondaryIndicesEnableBulkFiltering {
83+
// ClickHouse version check is added since this setting is not support on version below 25.5
84+
if strings.HasPrefix(h.clickHouseVersion, "25") && !h.settings.SecondaryIndicesEnableBulkFiltering {
7985
// TODO(srikanthccv): enable it when the "Cannot read all data" issue is fixed
8086
// https://github.com/ClickHouse/ClickHouse/issues/82283
8187
settings["secondary_indices_enable_bulk_filtering"] = false

0 commit comments

Comments
 (0)