Skip to content

Commit 8228d94

Browse files
committed
Revert "update evaluator"
This reverts commit 06a84f7.
1 parent 06a84f7 commit 8228d94

File tree

3 files changed

+25
-229
lines changed

3 files changed

+25
-229
lines changed

splitio/client/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def __init__(self, factory, recorder, labels_enabled=True):
201201
:rtype: Client
202202
"""
203203
ClientBase.__init__(self, factory, recorder, labels_enabled)
204-
self._context_factory = EvaluationDataFactory(factory._get_storage('splits'), factory._get_storage('segments'), factory._get_storage('rule_based_segments'))
204+
self._context_factory = EvaluationDataFactory(factory._get_storage('splits'), factory._get_storage('segments'))
205205

206206
def destroy(self):
207207
"""
@@ -668,7 +668,7 @@ def __init__(self, factory, recorder, labels_enabled=True):
668668
:rtype: Client
669669
"""
670670
ClientBase.__init__(self, factory, recorder, labels_enabled)
671-
self._context_factory = AsyncEvaluationDataFactory(factory._get_storage('splits'), factory._get_storage('segments'), factory._get_storage('rule_based_segments'))
671+
self._context_factory = AsyncEvaluationDataFactory(factory._get_storage('splits'), factory._get_storage('segments'))
672672

673673
async def destroy(self):
674674
"""

splitio/engine/evaluator.py

Lines changed: 15 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66
from splitio.models.grammar.condition import ConditionType
77
from splitio.models.grammar.matchers.misc import DependencyMatcher
88
from splitio.models.grammar.matchers.keys import UserDefinedSegmentMatcher
9-
from splitio.models.grammar.matchers.rule_based_segment import RuleBasedSegmentMatcher
109
from splitio.optional.loaders import asyncio
1110

1211
CONTROL = 'control'
13-
EvaluationContext = namedtuple('EvaluationContext', ['flags', 'segment_memberships', 'segment_rbs_memberships', 'segment_rbs_conditions'])
12+
EvaluationContext = namedtuple('EvaluationContext', ['flags', 'segment_memberships'])
1413

1514
_LOGGER = logging.getLogger(__name__)
1615

@@ -99,10 +98,9 @@ def _treatment_for_flag(self, flag, key, bucketing, attributes, ctx):
9998

10099
class EvaluationDataFactory:
101100

102-
def __init__(self, split_storage, segment_storage, rbs_segment_storage):
101+
def __init__(self, split_storage, segment_storage):
103102
self._flag_storage = split_storage
104103
self._segment_storage = segment_storage
105-
self._rbs_segment_storage = rbs_segment_storage
106104

107105
def context_for(self, key, feature_names):
108106
"""
@@ -116,50 +114,28 @@ def context_for(self, key, feature_names):
116114
pending = set(feature_names)
117115
splits = {}
118116
pending_memberships = set()
119-
pending_rbs_memberships = set()
120117
while pending:
121118
fetched = self._flag_storage.fetch_many(list(pending))
122119
features = filter_missing(fetched)
123120
splits.update(features)
124121
pending = set()
125122
for feature in features.values():
126-
cf, cs, crbs = get_dependencies(feature)
123+
cf, cs = get_dependencies(feature)
127124
pending.update(filter(lambda f: f not in splits, cf))
128125
pending_memberships.update(cs)
129-
pending_rbs_memberships.update(crbs)
130-
131-
rbs_segment_memberships = {}
132-
rbs_segment_conditions = {}
133-
key_membership = False
134-
segment_memberhsip = False
135-
for rbs_segment in pending_rbs_memberships:
136-
key_membership = key in self._rbs_segment_storage.get(rbs_segment).excluded.get_excluded_keys()
137-
segment_memberhsip = False
138-
for segment_name in self._rbs_segment_storage.get(rbs_segment).excluded.get_excluded_segments():
139-
if self._segment_storage.segment_contains(segment_name, key):
140-
segment_memberhsip = True
141-
break
142-
143-
rbs_segment_memberships.update({rbs_segment: segment_memberhsip or key_membership})
144-
if not (segment_memberhsip or key_membership):
145-
rbs_segment_conditions.update({rbs_segment: [condition for condition in self._rbs_segment_storage.get(rbs_segment).conditions]})
146-
147-
return EvaluationContext(
148-
splits,
149-
{ segment: self._segment_storage.segment_contains(segment, key)
150-
for segment in pending_memberships
151-
},
152-
rbs_segment_memberships,
153-
rbs_segment_conditions
154-
)
126+
127+
return EvaluationContext(splits, {
128+
segment: self._segment_storage.segment_contains(segment, key)
129+
for segment in pending_memberships
130+
})
131+
155132

156133
class AsyncEvaluationDataFactory:
157134

158-
def __init__(self, split_storage, segment_storage, rbs_segment_storage):
135+
def __init__(self, split_storage, segment_storage):
159136
self._flag_storage = split_storage
160137
self._segment_storage = segment_storage
161-
self._rbs_segment_storage = rbs_segment_storage
162-
138+
163139
async def context_for(self, key, feature_names):
164140
"""
165141
Recursively iterate & fetch all data required to evaluate these flags.
@@ -172,47 +148,23 @@ async def context_for(self, key, feature_names):
172148
pending = set(feature_names)
173149
splits = {}
174150
pending_memberships = set()
175-
pending_rbs_memberships = set()
176151
while pending:
177152
fetched = await self._flag_storage.fetch_many(list(pending))
178153
features = filter_missing(fetched)
179154
splits.update(features)
180155
pending = set()
181156
for feature in features.values():
182-
cf, cs, crbs = get_dependencies(feature)
157+
cf, cs = get_dependencies(feature)
183158
pending.update(filter(lambda f: f not in splits, cf))
184159
pending_memberships.update(cs)
185-
pending_rbs_memberships.update(crbs)
186-
160+
187161
segment_names = list(pending_memberships)
188162
segment_memberships = await asyncio.gather(*[
189163
self._segment_storage.segment_contains(segment, key)
190164
for segment in segment_names
191165
])
192166

193-
rbs_segment_memberships = {}
194-
rbs_segment_conditions = {}
195-
key_membership = False
196-
segment_memberhsip = False
197-
for rbs_segment in pending_rbs_memberships:
198-
rbs_segment_obj = await self._rbs_segment_storage.get(rbs_segment)
199-
key_membership = key in rbs_segment_obj.excluded.get_excluded_keys()
200-
segment_memberhsip = False
201-
for segment_name in rbs_segment_obj.excluded.get_excluded_segments():
202-
if await self._segment_storage.segment_contains(segment_name, key):
203-
segment_memberhsip = True
204-
break
205-
206-
rbs_segment_memberships.update({rbs_segment: segment_memberhsip or key_membership})
207-
if not (segment_memberhsip or key_membership):
208-
rbs_segment_conditions.update({rbs_segment: [condition for condition in rbs_segment_obj.conditions]})
209-
210-
return EvaluationContext(
211-
splits,
212-
dict(zip(segment_names, segment_memberships)),
213-
rbs_segment_memberships,
214-
rbs_segment_conditions
215-
)
167+
return EvaluationContext(splits, dict(zip(segment_names, segment_memberships)))
216168

217169

218170
def get_dependencies(feature):
@@ -221,17 +173,14 @@ def get_dependencies(feature):
221173
"""
222174
feature_names = []
223175
segment_names = []
224-
rbs_segment_names = []
225176
for condition in feature.conditions:
226177
for matcher in condition.matchers:
227-
if isinstance(matcher,RuleBasedSegmentMatcher):
228-
rbs_segment_names.append(matcher._rbs_segment_name)
229178
if isinstance(matcher,UserDefinedSegmentMatcher):
230179
segment_names.append(matcher._segment_name)
231180
elif isinstance(matcher, DependencyMatcher):
232181
feature_names.append(matcher._split_name)
233182

234-
return feature_names, segment_names, rbs_segment_names
183+
return feature_names, segment_names
235184

236185
def filter_missing(features):
237186
return {k: v for (k, v) in features.items() if v is not None}

0 commit comments

Comments
 (0)