Commit 05f6304
committed
refactor(lazy): Route per-flag resolution through engine.get_evaluation_result
Per review: keep the engine/client boundary intact and let the engine
handle all evaluation correctness — instead of reaching into
``is_context_in_segment`` / ``get_flag_result_from_context`` directly,
``Flags._resolve_flag`` now builds a *trimmed* context (the queried
feature plus only the segments that could override it, looked up via
the precomputed reverse index) and hands it to the engine's public
``get_evaluation_result``.
Side effects:
* Identity-key enrichment now runs on the lazy path (the engine's
``get_enriched_context`` is invoked internally), so multivariate
splits and ``PERCENTAGE_SPLIT`` rules behave correctly. Previously
the lazy path silently degraded these.
* Override-priority handling moves back into the engine — the
``float("inf")`` literal is gone from the SDK.
* ``Flags.all_flags`` switches to a single bulk
``get_evaluation_result`` rather than calling ``_resolve_flag`` per
feature; cheaper, and matches the eager path's call shape.
Trim cost is ~0.8 µs per call, so the lazy path is now ~2.6 µs mean /
~3.4 µs p99 against the customer's prod env (438 features, 23
segments) — still 150–220× faster than the eager path on every
percentile, and 100% routed through the engine's documented public API.
beep boop1 parent 6057139 commit 05f6304
2 files changed
Lines changed: 37 additions & 52 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | | - | |
8 | | - | |
9 | | - | |
10 | | - | |
11 | 8 | | |
12 | 9 | | |
13 | 10 | | |
| |||
186 | 183 | | |
187 | 184 | | |
188 | 185 | | |
189 | | - | |
190 | | - | |
191 | | - | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
192 | 190 | | |
193 | 191 | | |
194 | 192 | | |
195 | 193 | | |
196 | | - | |
| 194 | + | |
| 195 | + | |
197 | 196 | | |
198 | | - | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
199 | 200 | | |
200 | 201 | | |
201 | 202 | | |
| |||
265 | 266 | | |
266 | 267 | | |
267 | 268 | | |
268 | | - | |
269 | | - | |
270 | | - | |
271 | | - | |
272 | | - | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
273 | 277 | | |
274 | 278 | | |
275 | 279 | | |
276 | 280 | | |
277 | 281 | | |
278 | 282 | | |
279 | 283 | | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
292 | | - | |
293 | | - | |
294 | | - | |
295 | | - | |
296 | | - | |
297 | | - | |
298 | | - | |
299 | | - | |
300 | | - | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
312 | 294 | | |
313 | 295 | | |
314 | 296 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
332 | 332 | | |
333 | 333 | | |
334 | 334 | | |
335 | | - | |
| 335 | + | |
336 | 336 | | |
337 | 337 | | |
338 | 338 | | |
339 | 339 | | |
340 | 340 | | |
341 | 341 | | |
342 | 342 | | |
343 | | - | |
| 343 | + | |
344 | 344 | | |
345 | 345 | | |
346 | | - | |
| 346 | + | |
347 | 347 | | |
348 | 348 | | |
349 | 349 | | |
350 | | - | |
| 350 | + | |
| 351 | + | |
351 | 352 | | |
352 | 353 | | |
353 | 354 | | |
354 | 355 | | |
355 | | - | |
356 | | - | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
357 | 360 | | |
358 | 361 | | |
359 | 362 | | |
| |||
0 commit comments