Skip to content

Commit 1a0ca45

Browse files
authored
FFM-12750 - Fix issue where Proxy was dropping newly created (#423)
* FFM-12750 - Fix issue where Proxy was dropping newly created flags/segments * update
1 parent 1d72786 commit 1a0ca45

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

cache/refresher.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,17 +381,27 @@ func (s Refresher) handleFetchFeatureEvent(ctx context.Context, env, identifier
381381
})
382382
}
383383

384+
// replaceFeatureConfig replaces the featureConfig in the featureConfigs array with the updated featureConfig. If the
385+
// featureConfig does not exist in the featureConfigs slice it is added to it.
384386
func replaceFeatureConfig(newConfig domain.FeatureFlag, featureConfigs *[]domain.FeatureFlag) {
385387
if featureConfigs == nil {
386388
return
387389
}
388390

391+
flagUpdated := false
389392
for i := range *featureConfigs {
390393
if (*featureConfigs)[i].Feature == newConfig.Feature {
391394
(*featureConfigs)[i] = newConfig
395+
flagUpdated = true
392396
break
393397
}
394398
}
399+
400+
// If we didn't update any featureConfigs then this must be a new one so we
401+
// need to add it to the featureConfigs slice
402+
if !flagUpdated {
403+
*featureConfigs = append(*featureConfigs, newConfig)
404+
}
395405
}
396406

397407
func (s Refresher) handleDeleteFeatureEvent(ctx context.Context, env, identifier string) error {
@@ -625,11 +635,17 @@ func replaceSegmentConfig(newConfig domain.Segment, segmentConfigs *[]domain.Seg
625635
if segmentConfigs == nil {
626636
return
627637
}
638+
segmentUpdated := false
628639

629640
for i := range *segmentConfigs {
630641
if (*segmentConfigs)[i].Identifier == newConfig.Identifier {
631642
(*segmentConfigs)[i] = newConfig
643+
segmentUpdated = true
632644
break
633645
}
634646
}
647+
648+
if !segmentUpdated {
649+
*segmentConfigs = append(*segmentConfigs, newConfig)
650+
}
635651
}

cache/refresher_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -962,13 +962,14 @@ func TestReplaceFeatureConfig(t *testing.T) {
962962
},
963963
},
964964
{
965-
name: "no matching feature - no change",
965+
name: "adding a new feature",
966966
initialConfigs: []domain.FeatureFlag{
967967
{Feature: "featA", Version: &version1},
968968
},
969-
newConfig: domain.FeatureFlag{Feature: "featB", Version: &version2},
969+
newConfig: domain.FeatureFlag{Feature: "newFlag", Version: &version1},
970970
expected: []domain.FeatureFlag{
971971
{Feature: "featA", Version: &version1},
972+
{Feature: "newFlag", Version: &version1},
972973
},
973974
},
974975
}
@@ -1009,13 +1010,14 @@ func TestReplaceSegmentConfig(t *testing.T) {
10091010
},
10101011
},
10111012
{
1012-
name: "no matching segment - no change",
1013+
name: "adding a new segment",
10131014
initialConfigs: []domain.Segment{
10141015
{Identifier: "featA", Version: &version1},
10151016
},
1016-
newConfig: domain.Segment{Identifier: "featB", Version: &version2},
1017+
newConfig: domain.Segment{Identifier: "newSegment", Version: &version1},
10171018
expected: []domain.Segment{
10181019
{Identifier: "featA", Version: &version1},
1020+
{Identifier: "newSegment", Version: &version1},
10191021
},
10201022
},
10211023
}

0 commit comments

Comments
 (0)