Skip to content

Commit 53ab53d

Browse files
whites11claude
andcommitted
feat(clickhouse): add unified PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME env var
Add provider-agnostic PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME that works with PEERDB_CLICKHOUSE_STAGING_PROVIDER to configure staging storage. GCS uses the unified var exclusively. S3 falls back to the legacy PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME when the unified var is not set. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent d888da8 commit 53ab53d

2 files changed

Lines changed: 25 additions & 17 deletions

File tree

flow/connectors/clickhouse/clickhouse.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,26 @@ func createStagingStore(
117117
return nil, nil, fmt.Errorf("failed to get staging provider: %w", err)
118118
}
119119

120+
// Prefer unified PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME, fall back to provider-specific env vars.
121+
bucketName, err := internal.PeerDBClickHouseStagingBucketName(ctx, env)
122+
if err != nil {
123+
return nil, nil, fmt.Errorf("failed to get staging bucket name: %w", err)
124+
}
125+
120126
switch strings.ToLower(provider) {
121127
case "gcs":
122-
store, err := createGCSStagingStore(ctx, env)
128+
store, err := createGCSStagingStore(ctx, bucketName)
123129
return store, nil, err
124130
default:
125-
return createS3StagingStore(ctx, env, config)
131+
return createS3StagingStore(ctx, env, config, bucketName)
126132
}
127133
}
128134

129135
func createS3StagingStore(
130136
ctx context.Context,
131137
env map[string]string,
132138
config *protos.ClickhouseConfig,
139+
unifiedBucketName string,
133140
) (utils.StagingStore, *utils.ClickHouseS3Credentials, error) {
134141
var awsConfig utils.PeerAWSCredentials
135142
var awsBucketPath string
@@ -157,9 +164,13 @@ func createS3StagingStore(
157164
deploymentUID := internal.PeerDBDeploymentUID()
158165
flowName, _ := ctx.Value(shared.FlowNameKey).(string)
159166
bucketPathSuffix := fmt.Sprintf("%s/%s", url.PathEscape(deploymentUID), url.PathEscape(flowName))
160-
awsBucketName, err := internal.PeerDBClickHouseAWSS3BucketName(ctx, env)
161-
if err != nil {
162-
return nil, nil, fmt.Errorf("failed to get PeerDB ClickHouse Bucket Name: %w", err)
167+
// Prefer unified bucket name, fall back to legacy S3-specific env var.
168+
awsBucketName := unifiedBucketName
169+
if awsBucketName == "" {
170+
awsBucketName, err = internal.PeerDBClickHouseAWSS3BucketName(ctx, env)
171+
if err != nil {
172+
return nil, nil, fmt.Errorf("failed to get PeerDB ClickHouse Bucket Name: %w", err)
173+
}
163174
}
164175
if awsBucketName == "" {
165176
return nil, nil, errors.New("PeerDB ClickHouse Bucket Name not set")
@@ -182,20 +193,16 @@ func createS3StagingStore(
182193

183194
func createGCSStagingStore(
184195
ctx context.Context,
185-
env map[string]string,
196+
bucketName string,
186197
) (utils.StagingStore, error) {
187-
gcsBucketName, err := internal.PeerDBClickHouseGCSBucketName(ctx, env)
188-
if err != nil {
189-
return nil, fmt.Errorf("failed to get GCS bucket name: %w", err)
190-
}
191-
if gcsBucketName == "" {
192-
return nil, errors.New("PEERDB_CLICKHOUSE_GCS_BUCKET_NAME not set but staging provider is gcs")
198+
if bucketName == "" {
199+
return nil, errors.New("PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME must be set when staging provider is gcs")
193200
}
194201

195202
deploymentUID := internal.PeerDBDeploymentUID()
196203
flowName, _ := ctx.Value(shared.FlowNameKey).(string)
197204
bucketPath := fmt.Sprintf("gs://%s/%s/%s",
198-
gcsBucketName, url.PathEscape(deploymentUID), url.PathEscape(flowName))
205+
bucketName, url.PathEscape(deploymentUID), url.PathEscape(flowName))
199206

200207
return utils.NewGCSStagingStore(ctx, bucketPath)
201208
}

flow/internal/dynamicconf.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ var DynamicSettings = [...]*protos.DynamicSetting{
183183
TargetForSetting: protos.DynconfTarget_CLICKHOUSE,
184184
},
185185
{
186-
Name: "PEERDB_CLICKHOUSE_GCS_BUCKET_NAME",
187-
Description: "GCS bucket to store Avro files for mirrors with ClickHouse target",
186+
Name: "PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME",
187+
Description: "Staging bucket name for ClickHouse mirrors (provider-agnostic, preferred over legacy env vars)",
188188
DefaultValue: "",
189189
ValueType: protos.DynconfValueType_STRING,
190190
ApplyMode: protos.DynconfApplyMode_APPLY_MODE_IMMEDIATE,
@@ -730,10 +730,11 @@ func PeerDBClickHouseStagingProvider(ctx context.Context, env map[string]string)
730730
return dynLookup(ctx, env, "PEERDB_CLICKHOUSE_STAGING_PROVIDER")
731731
}
732732

733-
func PeerDBClickHouseGCSBucketName(ctx context.Context, env map[string]string) (string, error) {
734-
return dynLookup(ctx, env, "PEERDB_CLICKHOUSE_GCS_BUCKET_NAME")
733+
func PeerDBClickHouseStagingBucketName(ctx context.Context, env map[string]string) (string, error) {
734+
return dynLookup(ctx, env, "PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME")
735735
}
736736

737+
737738
func PeerDBS3UuidPrefix(ctx context.Context, env map[string]string) (bool, error) {
738739
return dynamicConfBool(ctx, env, "PEERDB_S3_UUID_PREFIX")
739740
}

0 commit comments

Comments
 (0)