Skip to content

Commit 84f57d7

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. Falls back to legacy PEERDB_CLICKHOUSE_AWS_S3_BUCKET_NAME and PEERDB_CLICKHOUSE_GCS_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 84f57d7

2 files changed

Lines changed: 39 additions & 10 deletions

File tree

flow/connectors/clickhouse/clickhouse.go

Lines changed: 26 additions & 9 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, env, 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")
@@ -183,13 +194,19 @@ func createS3StagingStore(
183194
func createGCSStagingStore(
184195
ctx context.Context,
185196
env map[string]string,
197+
unifiedBucketName string,
186198
) (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)
199+
// Prefer unified bucket name, fall back to legacy GCS-specific env var.
200+
gcsBucketName := unifiedBucketName
201+
if gcsBucketName == "" {
202+
var err error
203+
gcsBucketName, err = internal.PeerDBClickHouseGCSBucketName(ctx, env)
204+
if err != nil {
205+
return nil, fmt.Errorf("failed to get GCS bucket name: %w", err)
206+
}
190207
}
191208
if gcsBucketName == "" {
192-
return nil, errors.New("PEERDB_CLICKHOUSE_GCS_BUCKET_NAME not set but staging provider is gcs")
209+
return nil, errors.New("staging bucket name not set for gcs provider")
193210
}
194211

195212
deploymentUID := internal.PeerDBDeploymentUID()

flow/internal/dynamicconf.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,17 @@ var DynamicSettings = [...]*protos.DynamicSetting{
182182
ApplyMode: protos.DynconfApplyMode_APPLY_MODE_AFTER_RESUME,
183183
TargetForSetting: protos.DynconfTarget_CLICKHOUSE,
184184
},
185+
{
186+
Name: "PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME",
187+
Description: "Staging bucket name for ClickHouse mirrors (provider-agnostic, preferred over legacy env vars)",
188+
DefaultValue: "",
189+
ValueType: protos.DynconfValueType_STRING,
190+
ApplyMode: protos.DynconfApplyMode_APPLY_MODE_IMMEDIATE,
191+
TargetForSetting: protos.DynconfTarget_CLICKHOUSE,
192+
},
185193
{
186194
Name: "PEERDB_CLICKHOUSE_GCS_BUCKET_NAME",
187-
Description: "GCS bucket to store Avro files for mirrors with ClickHouse target",
195+
Description: "GCS bucket to store Avro files for mirrors with ClickHouse target (legacy, prefer PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME)",
188196
DefaultValue: "",
189197
ValueType: protos.DynconfValueType_STRING,
190198
ApplyMode: protos.DynconfApplyMode_APPLY_MODE_IMMEDIATE,
@@ -730,6 +738,10 @@ func PeerDBClickHouseStagingProvider(ctx context.Context, env map[string]string)
730738
return dynLookup(ctx, env, "PEERDB_CLICKHOUSE_STAGING_PROVIDER")
731739
}
732740

741+
func PeerDBClickHouseStagingBucketName(ctx context.Context, env map[string]string) (string, error) {
742+
return dynLookup(ctx, env, "PEERDB_CLICKHOUSE_STAGING_BUCKET_NAME")
743+
}
744+
733745
func PeerDBClickHouseGCSBucketName(ctx context.Context, env map[string]string) (string, error) {
734746
return dynLookup(ctx, env, "PEERDB_CLICKHOUSE_GCS_BUCKET_NAME")
735747
}

0 commit comments

Comments
 (0)