Skip to content

Commit 0043805

Browse files
authored
Merge pull request #569 from splitio/rbs-fix-proxy-error
Rbs fix proxy error
2 parents b3f3f36 + 6dcac32 commit 0043805

File tree

6 files changed

+26
-7
lines changed

6 files changed

+26
-7
lines changed

splitio/api/client.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,11 @@ def get(self, server, path, sdk_key, query=None, extra_headers=None): # pylint:
207207
self._record_telemetry(response.status_code, get_current_epoch_time_ms() - start)
208208
return HttpResponse(response.status_code, response.text, response.headers)
209209

210-
except Exception as exc: # pylint: disable=broad-except
210+
except requests.exceptions.ChunkedEncodingError as exc:
211+
_LOGGER.error("IncompleteRead exception detected: %s", exc)
212+
return HttpResponse(400, "", {})
213+
214+
except Exception as exc: # pylint: disable=broad-except
211215
raise HttpClientException(_EXC_MSG.format(source='request')) from exc
212216

213217
def post(self, server, path, sdk_key, body, query=None, extra_headers=None): # pylint: disable=too-many-arguments
@@ -300,6 +304,10 @@ async def get(self, server, path, apikey, query=None, extra_headers=None): # py
300304
await self._record_telemetry(response.status, get_current_epoch_time_ms() - start)
301305
return HttpResponse(response.status, body, response.headers)
302306

307+
except aiohttp.ClientPayloadError as exc:
308+
_LOGGER.error("ContentLengthError exception detected: %s", exc)
309+
return HttpResponse(400, "", {})
310+
303311
except aiohttp.ClientError as exc: # pylint: disable=broad-except
304312
raise HttpClientException(_EXC_MSG.format(source='aiohttp')) from exc
305313

splitio/api/splits.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ def fetch_splits(self, change_number, rbs_change_number, fetch_options):
8989
self._check_last_proxy_check_timestamp(change_number)
9090
change_number = self._check_old_spec_since(change_number)
9191

92+
if self._spec_version == _SPEC_1_1:
93+
fetch_options = FetchOptions(fetch_options.cache_control_headers, fetch_options.change_number,
94+
None, fetch_options.sets, self._spec_version)
95+
rbs_change_number = None
9296
query, extra_headers = build_fetch(change_number, fetch_options, self._metadata, rbs_change_number)
9397
response = self._client.get(
9498
'sdk',
@@ -158,6 +162,10 @@ async def fetch_splits(self, change_number, rbs_change_number, fetch_options):
158162
try:
159163
self._check_last_proxy_check_timestamp(change_number)
160164
change_number = self._check_old_spec_since(change_number)
165+
if self._spec_version == _SPEC_1_1:
166+
fetch_options = FetchOptions(fetch_options.cache_control_headers, fetch_options.change_number,
167+
None, fetch_options.sets, self._spec_version)
168+
rbs_change_number = None
161169

162170
query, extra_headers = build_fetch(change_number, fetch_options, self._metadata, rbs_change_number)
163171
response = await self._client.get(

splitio/models/grammar/matchers/rule_based_segment.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,12 @@ def _match_dep_rb_segments(self, excluded_rb_segments, key, attributes, context)
6363
else:
6464
excluded_segment = context['ec'].rbs_segments.get(excluded_rb_segment.name)
6565
if key in excluded_segment.excluded.get_excluded_keys():
66-
return False
66+
return True
6767

6868
if self._match_dep_rb_segments(excluded_segment.excluded.get_excluded_segments(), key, attributes, context):
6969
return True
70+
71+
if self._match_conditions(excluded_segment.conditions, key, attributes, context):
72+
return True
7073

71-
return self._match_conditions(excluded_segment.conditions, key, attributes, context)
74+
return False

splitio/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '10.2.0'
1+
__version__ = '10.3.0-rc2'

tests/engine/files/rule_base_segments2.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"trafficType": "user",
2020
"attribute": "email"
2121
},
22-
"matcherType": "START_WITH",
22+
"matcherType": "STARTS_WITH",
2323
"negate": false,
2424
"whitelistMatcherData": {
2525
"whitelist": [

tests/engine/test_evaluator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ def test_using_rbs_in_excluded(self):
314314
ctx = evaluation_facctory.context_for('bilal', ['some'])
315315
assert e.eval_with_context('bilal', 'bilal', 'some', {'email': 'bilal'}, ctx)['treatment'] == "on"
316316
ctx = evaluation_facctory.context_for('bilal2@split.io', ['some'])
317-
assert e.eval_with_context('bilal2@split.io', 'bilal2@split.io', 'some', {'email': 'bilal2@split.io'}, ctx)['treatment'] == "on"
317+
assert e.eval_with_context('bilal2@split.io', 'bilal2@split.io', 'some', {'email': 'bilal2@split.io'}, ctx)['treatment'] == "off"
318318

319319
@pytest.mark.asyncio
320320
async def test_evaluate_treatment_with_rbs_in_condition_async(self):
@@ -386,7 +386,7 @@ async def test_using_rbs_in_excluded_async(self):
386386
ctx = await evaluation_facctory.context_for('bilal', ['some'])
387387
assert e.eval_with_context('bilal', 'bilal', 'some', {'email': 'bilal'}, ctx)['treatment'] == "on"
388388
ctx = await evaluation_facctory.context_for('bilal2@split.io', ['some'])
389-
assert e.eval_with_context('bilal2@split.io', 'bilal2@split.io', 'some', {'email': 'bilal2@split.io'}, ctx)['treatment'] == "on"
389+
assert e.eval_with_context('bilal2@split.io', 'bilal2@split.io', 'some', {'email': 'bilal2@split.io'}, ctx)['treatment'] == "off"
390390

391391
class EvaluationDataFactoryTests(object):
392392
"""Test evaluation factory class."""

0 commit comments

Comments
 (0)