Skip to content

Commit 34a74cb

Browse files
fix: experimentRules should have same order as experimentIds (#279)
## Summary - ExperimentRules sequence critically important when evaluating for decision. it should follow experimentIds under featureFlag object sequence. - Updated ci to xenial since trusty has no more dotnet version. - Updated mono & dotnet-sdk versions which were quite old. ## Test plan - We have test cases in FSC, must pass for unsorted scenarios.
1 parent 444b53d commit 34a74cb

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

.travis.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
- stage: 'Unit Tests'
4949
language: csharp
5050
dist: xenial
51-
mono: 5.2.0
51+
mono: 6.12.0
5252
solution: "./OptimizelySDK.Travis.sln"
5353
install:
5454
- nuget restore ./OptimizelySDK.Travis.sln
@@ -67,9 +67,9 @@ jobs:
6767
- stage: 'NetStandard16'
6868
language: csharp
6969
# dotnet only works on trusty https://github.com/travis-ci/travis-ci/issues/5189
70-
dist: trusty
70+
dist: xenial
7171
mono: none
72-
dotnet: 2.1.502
72+
dotnet: 3.1
7373
install:
7474
- dotnet restore OptimizelySDK.NetStandard16/OptimizelySDK.NetStandard16.csproj
7575
script:
@@ -84,9 +84,9 @@ jobs:
8484
- stage: 'NetStandard20'
8585
language: csharp
8686
# dotnet only works on trusty https://github.com/travis-ci/travis-ci/issues/5189
87-
dist: trusty
87+
dist: xenial
8888
mono: none
89-
dotnet: 2.1.502
89+
dotnet: 3.1
9090
install:
9191
- dotnet restore OptimizelySDK.NetStandard20/OptimizelySDK.NetStandard20.csproj
9292
script:

OptimizelySDK/OptlyConfig/OptimizelyConfigService.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,11 @@ private IDictionary<string, OptimizelyFeature> GetFeaturesMap(ProjectConfig proj
227227
foreach (var featureFlag in projectConfig.FeatureFlags)
228228
{
229229

230-
var featureExperimentMap = experimentsMapById.Where(expMap => featureFlag.ExperimentIds.Contains(expMap.Key))
231-
.ToDictionary(k => k.Value.Key, v => v.Value);
230+
var experimentRules = featureFlag.ExperimentIds.Select(experimentId => experimentsMapById[experimentId]).ToList();
232231

233232
var featureVariableMap = featureFlag.Variables.Select(v => (OptimizelyVariable)v).ToDictionary(k => k.Key, v => v) ?? new Dictionary<string, OptimizelyVariable>();
234233

235-
var experimentRules = featureExperimentMap.Select(exMap => exMap.Value).ToList();
234+
var featureExperimentMap = experimentRules.ToDictionary(experiment => experiment.Key, experiment => experiment);
236235
var rollout = projectConfig.GetRolloutFromId(featureFlag.RolloutId);
237236
var deliveryRules = GetDeliveryRules(featureFlag.Id, rollout.Experiments, projectConfig);
238237

0 commit comments

Comments
 (0)