@@ -3,6 +3,7 @@ package featureflags
33import (
44 "context"
55 "fmt"
6+ "os"
67 "strings"
78
89 "github.com/launchdarkly/go-sdk-common/v3/ldcontext"
@@ -34,8 +35,9 @@ const (
3435// All flags must be defined here: https://app.launchdarkly.com/projects/default/flags/
3536
3637type JSONFlag struct {
37- name string
38- fallback ldvalue.Value
38+ name string
39+ fallback ldvalue.Value
40+ fallbackOnZero bool
3941}
4042
4143func (f JSONFlag ) Key () string {
@@ -50,6 +52,10 @@ func (f JSONFlag) Fallback() ldvalue.Value {
5052 return f .fallback
5153}
5254
55+ func (f JSONFlag ) FallbackOnZero () bool {
56+ return f .fallbackOnZero
57+ }
58+
5359func newJSONFlag (name string , fallback ldvalue.Value ) JSONFlag {
5460 flag := JSONFlag {name : name , fallback : fallback }
5561 builder := launchDarklyOfflineStore .Flag (flag .name ).ValueForAll (fallback )
@@ -88,6 +94,10 @@ func (f BoolFlag) Fallback() bool {
8894 return f .fallback
8995}
9096
97+ func (f BoolFlag ) FallbackOnZero () bool {
98+ return false
99+ }
100+
91101func newBoolFlag (name string , fallback bool ) BoolFlag {
92102 flag := BoolFlag {name : name , fallback : fallback }
93103 builder := launchDarklyOfflineStore .Flag (flag .name ).VariationForAll (fallback )
@@ -122,8 +132,9 @@ var (
122132)
123133
124134type IntFlag struct {
125- name string
126- fallback int
135+ name string
136+ fallback int
137+ fallbackOnZero bool
127138}
128139
129140func (f IntFlag ) Key () string {
@@ -138,6 +149,10 @@ func (f IntFlag) Fallback() int {
138149 return f .fallback
139150}
140151
152+ func (f IntFlag ) FallbackOnZero () bool {
153+ return f .fallbackOnZero
154+ }
155+
141156func newIntFlag (name string , fallback int ) IntFlag {
142157 flag := IntFlag {name : name , fallback : fallback }
143158 builder := launchDarklyOfflineStore .Flag (flag .name ).ValueForAll (ldvalue .Int (fallback ))
@@ -207,8 +222,9 @@ var (
207222)
208223
209224type StringFlag struct {
210- name string
211- fallback string
225+ name string
226+ fallback string
227+ fallbackOnEmptyString bool
212228}
213229
214230func (f StringFlag ) Key () string {
@@ -223,6 +239,10 @@ func (f StringFlag) Fallback() string {
223239 return f .fallback
224240}
225241
242+ func (f StringFlag ) FallbackOnZero () bool {
243+ return f .fallbackOnEmptyString
244+ }
245+
226246func newStringFlag (name string , fallback string ) StringFlag {
227247 flag := StringFlag {name : name , fallback : fallback }
228248 builder := launchDarklyOfflineStore .Flag (flag .name ).ValueForAll (ldvalue .String (fallback ))
@@ -231,6 +251,13 @@ func newStringFlag(name string, fallback string) StringFlag {
231251 return flag
232252}
233253
254+ func newStringFlagFallbackOnEmptyString (name string , fallback string ) StringFlag {
255+ flag := newStringFlag (name , fallback )
256+ flag .fallbackOnEmptyString = true
257+
258+ return flag
259+ }
260+
234261// This is currently not configurable via feature flags.
235262const (
236263 DefaultKernelVersion = "vmlinux-6.1.158"
@@ -251,9 +278,9 @@ var FirecrackerVersionMap = map[string]string{
251278
252279// BuildIoEngine Sync is used by default as there seems to be a bad interaction between Async and a lot of io operations.
253280var (
254- BuildFirecrackerVersion = newStringFlag ("build-firecracker-version" , env .GetEnv ("DEFAULT_FIRECRACKER_VERSION" , DefaultFirecrackerVersion ))
281+ BuildFirecrackerVersion = newStringFlagFallbackOnEmptyString ("build-firecracker-version" , env .GetEnv ("DEFAULT_FIRECRACKER_VERSION" , DefaultFirecrackerVersion ))
255282 BuildIoEngine = newStringFlag ("build-io-engine" , "Sync" )
256- DefaultPersistentVolumeType = newStringFlag ("default-persistent-volume-type" , "" )
283+ DefaultPersistentVolumeType = newStringFlagFallbackOnEmptyString ("default-persistent-volume-type" , os . Getenv ( "DEFAULT_PERSISTENT_VOLUME_TYPE" ) )
257284 BuildNodeInfo = newJSONFlag ("preferred-build-node" , ldvalue .Null ())
258285 FirecrackerVersions = newJSONFlag ("firecracker-versions" , ldvalue .FromJSONMarshal (FirecrackerVersionMap ))
259286)
0 commit comments