Skip to content

Commit 2d35083

Browse files
authored
feat(flagd): Support supplying providerID for in-process resolver as an option (#626)
Signed-off-by: Maks Osowski <[email protected]>
1 parent 210e397 commit 2d35083

File tree

5 files changed

+53
-3
lines changed

5 files changed

+53
-3
lines changed

providers/flagd/README.md

+6-3
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ Configuration can be provided as constructor options or as environment variables
103103
| WithLRUCache<br/>WithBasicInMemoryCache<br/>WithoutCache | FLAGD_CACHE | string (lru, mem, disabled) | lru | rpc |
104104
| WithEventStreamConnectionMaxAttempts | FLAGD_MAX_EVENT_STREAM_RETRIES | int | 5 | rpc |
105105
| WithOfflineFilePath | FLAGD_OFFLINE_FLAG_SOURCE_PATH | string | "" | in-process |
106+
| WithProviderID | FLAGD_SOURCE_PROVIDER_ID | string | "" | in-process |
107+
| WithSelector | FLAGD_SOURCE_SELECTOR | string | "" | in-process |
106108

107109
### Overriding behavior
108110

@@ -158,9 +160,10 @@ For general information on events, see the [official documentation](https://open
158160

159161
The flagd provider currently support following flag evaluation metadata,
160162

161-
| Field | Type | Value |
162-
|---------|--------|---------------------------------------------------|
163-
| `scope` | string | "selector" set for the associated source in flagd |
163+
| Field | Type | Value |
164+
|--------------|--------|-----------------------------------------------------|
165+
| `scope` | string | "selector" set for the associated source in flagd |
166+
| `providerID` | string | "providerID" set for the associated source in flagd |
164167

165168
## Logging
166169

providers/flagd/pkg/configuration.go

+6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const (
3535
flagdMaxCacheSizeEnvironmentVariableName = "FLAGD_MAX_CACHE_SIZE"
3636
flagdMaxEventStreamRetriesEnvironmentVariableName = "FLAGD_MAX_EVENT_STREAM_RETRIES"
3737
flagdResolverEnvironmentVariableName = "FLAGD_RESOLVER"
38+
flagdSourceProviderIDEnvironmentVariableName = "FLAGD_SOURCE_PROVIDER_ID"
3839
flagdSourceSelectorEnvironmentVariableName = "FLAGD_SOURCE_SELECTOR"
3940
flagdOfflinePathEnvironmentVariableName = "FLAGD_OFFLINE_FLAG_SOURCE_PATH"
4041
flagdTargetUriEnvironmentVariableName = "FLAGD_TARGET_URI"
@@ -51,6 +52,7 @@ type providerConfiguration struct {
5152
Port uint16
5253
TargetUri string
5354
Resolver ResolverType
55+
ProviderID string
5456
Selector string
5557
SocketPath string
5658
TLSEnabled bool
@@ -161,6 +163,10 @@ func (cfg *providerConfiguration) updateFromEnvVar() {
161163
cfg.OfflineFlagSourcePath = offlinePath
162164
}
163165

166+
if providerID := os.Getenv(flagdSourceProviderIDEnvironmentVariableName); providerID != "" {
167+
cfg.ProviderID = providerID
168+
}
169+
164170
if selector := os.Getenv(flagdSourceSelectorEnvironmentVariableName); selector != "" {
165171
cfg.Selector = selector
166172
}

providers/flagd/pkg/provider.go

+8
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ func NewProvider(opts ...ProviderOption) *Provider {
8080
service = process.NewInProcessService(process.Configuration{
8181
Host: provider.providerConfiguration.Host,
8282
Port: provider.providerConfiguration.Port,
83+
ProviderID: provider.providerConfiguration.ProviderID,
8384
Selector: provider.providerConfiguration.Selector,
8485
TargetUri: provider.providerConfiguration.TargetUri,
8586
TLSEnabled: provider.providerConfiguration.TLSEnabled,
@@ -327,6 +328,13 @@ func WithSelector(selector string) ProviderOption {
327328
}
328329
}
329330

331+
// WithProviderID sets the providerID to be used for InProcess flag sync calls
332+
func WithProviderID(providerID string) ProviderOption {
333+
return func(p *Provider) {
334+
p.providerConfiguration.ProviderID = providerID
335+
}
336+
}
337+
330338
// FromEnv sets the provider configuration from environment variables (if set)
331339
func FromEnv() ProviderOption {
332340
return func(p *Provider) {

providers/flagd/pkg/provider_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ func TestNewProvider(t *testing.T) {
2727
expectOtelIntercept bool
2828
expectSocketPath string
2929
expectTlsEnabled bool
30+
expectProviderID string
31+
expectSelector string
3032
expectCustomSyncProvider sync.ISync
3133
expectCustomSyncProviderUri string
3234
options []ProviderOption
@@ -171,6 +173,22 @@ func TestNewProvider(t *testing.T) {
171173
WithCustomSyncProvider(customSyncProvider),
172174
},
173175
},
176+
{
177+
name: "with selector and providerID with in-process resolver",
178+
expectedResolver: inProcess,
179+
expectHost: defaultHost,
180+
expectPort: defaultInProcessPort,
181+
expectCacheType: defaultCache,
182+
expectCacheSize: defaultMaxCacheSize,
183+
expectMaxRetries: defaultMaxEventStreamRetries,
184+
expectProviderID: "testProvider",
185+
expectSelector: "flags=test",
186+
options: []ProviderOption{
187+
WithInProcessResolver(),
188+
WithSelector("flags=test"),
189+
WithProviderID("testProvider"),
190+
},
191+
},
174192
}
175193

176194
for _, test := range tests {
@@ -229,6 +247,16 @@ func TestNewProvider(t *testing.T) {
229247
test.expectTargetUri, config.TargetUri)
230248
}
231249

250+
if config.Selector != test.expectSelector {
251+
t.Errorf("incorrect configuration Selector, expected %v, got %v",
252+
test.expectSelector, config.Selector)
253+
}
254+
255+
if config.ProviderID != test.expectProviderID {
256+
t.Errorf("incorrect configuration ProviderID, expected %v, got %v",
257+
test.expectProviderID, config.ProviderID)
258+
}
259+
232260
if config.CustomSyncProvider != test.expectCustomSyncProvider {
233261
t.Errorf("incorrect configuration CustomSyncProvider, expected %v, got %v",
234262
test.expectCustomSyncProvider, config.CustomSyncProvider)

providers/flagd/pkg/service/in_process/service.go

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type Configuration struct {
3636
Host any
3737
Port any
3838
TargetUri string
39+
ProviderID string
3940
Selector string
4041
TLSEnabled bool
4142
OfflineFlagSource string
@@ -54,6 +55,9 @@ func NewInProcessService(cfg Configuration) *InProcess {
5455
svcMetadata = make(model.Metadata, 1)
5556
svcMetadata["scope"] = cfg.Selector
5657
}
58+
if cfg.ProviderID != "" {
59+
svcMetadata["providerID"] = cfg.ProviderID
60+
}
5761

5862
flagStore := store.NewFlags()
5963
flagStore.FlagSources = append(flagStore.FlagSources, uri)
@@ -301,6 +305,7 @@ func makeSyncProvider(cfg Configuration, log *logger.Logger) (sync.ISync, string
301305
CredentialBuilder: &credentials.CredentialBuilder{},
302306
Logger: log,
303307
Secure: cfg.TLSEnabled,
308+
ProviderID: cfg.ProviderID,
304309
Selector: cfg.Selector,
305310
URI: uri,
306311
}, uri

0 commit comments

Comments
 (0)