feat: support nested props in fractional evaluator#869
feat: support nested props in fractional evaluator#869toddbaert merged 10 commits intoopen-feature:mainfrom craigpastro:improve-fractional-evaluator
Conversation
Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
✅ Deploy Preview for polite-licorice-3db33c canceled.
|
Codecov Report
@@ Coverage Diff @@
## main #869 +/- ##
==========================================
+ Coverage 72.67% 72.81% +0.14%
==========================================
Files 27 27
Lines 2759 2755 -4
==========================================
+ Hits 2005 2006 +1
+ Misses 667 664 -3
+ Partials 87 85 -2
📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
There was a problem hiding this comment.
Tested locally and works as expected. Looks good to me except one small thing which I think is technically a violation of the spec, here.
Otherwise I have left some nits which I would love your input on. To reduce confusion, I've proposed bucketing property instead of target property since the latter has a bit too much overlap with targetinKey and they aren't exactly the same thing. I hope that make sense 😅
Thanks again for your help @craigpastro
docs/other_resources/in-process-providers/evaluators/fractional_evaluation.md
Show resolved
Hide resolved
docs/other_resources/in-process-providers/evaluators/fractional_evaluation.md
Show resolved
Hide resolved
docs/other_resources/in-process-providers/evaluators/fractional_evaluation.md
Outdated
Show resolved
Hide resolved
docs/other_resources/in-process-providers/evaluators/fractional_evaluation.md
Outdated
Show resolved
Hide resolved
docs/other_resources/in-process-providers/evaluators/fractional_evaluation.md
Outdated
Show resolved
Hide resolved
Co-authored-by: Todd Baert <todd.baert@dynatrace.com> Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
…l_evaluation.md Co-authored-by: Todd Baert <todd.baert@dynatrace.com> Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
…l_evaluation.md Co-authored-by: Todd Baert <todd.baert@dynatrace.com> Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
…l_evaluation.md Co-authored-by: Todd Baert <todd.baert@dynatrace.com> Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
Kavindu-Dodan
left a comment
There was a problem hiding this comment.
Looks good (left a suggestion for improvement)
And I don't see this as a breaking change, so we don't have to mark the PR as a breaking change 🤔 This introduce a behavior change but that's from an invalid fractional evaluation to targetingKey as a fallback
Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
|
@craigpastro I'm really bummed but the changes seem to have broken the nice spread on your friends-character emails 😩 😩 😩 |
Ya, using a "hard-coded" string also seems to still work. So I agree with @Kavindu-Dodan unless I'm missing something. |
Signed-off-by: Craig Pastro <pastro.craig@gmail.com>
LOL. No, we got it back by replacing Pheobe with Joey (and RossG with just Ross)... perhaps some deeper meaning here. |
Oh, yes, this is true. It will no longer extract the value of that hardcoded string from the context though. |
It's my pleasure! Will definitely look for other opportunities to contribute in the future. |
🤖 I have created a release *beep* *boop* --- <details><summary>flagd: 0.6.4</summary> ## [0.6.4](flagd/v0.6.3...flagd/v0.6.4) (2023-08-30) ### 🐛 Bug Fixes * **deps:** update module github.com/cucumber/godog to v0.13.0 ([#855](#855)) ([5b42486](5b42486)) * **deps:** update module github.com/open-feature/flagd/core to v0.6.3 ([#794](#794)) ([9671964](9671964)) ### 🧹 Chore * **deps:** update golang docker tag to v1.21 ([#822](#822)) ([effe29d](effe29d)) </details> <details><summary>flagd-proxy: 0.2.9</summary> ## [0.2.9](flagd-proxy/v0.2.8...flagd-proxy/v0.2.9) (2023-08-30) ### 🐛 Bug Fixes * **deps:** update module github.com/open-feature/flagd/core to v0.6.3 ([#794](#794)) ([9671964](9671964)) ### 🧹 Chore * **deps:** update golang docker tag to v1.21 ([#822](#822)) ([effe29d](effe29d)) </details> <details><summary>core: 0.6.4</summary> ## [0.6.4](core/v0.6.3...core/v0.6.4) (2023-08-30) ### 🐛 Bug Fixes * **deps:** update kubernetes packages to v0.28.0 ([#841](#841)) ([cc195e1](cc195e1)) * **deps:** update kubernetes packages to v0.28.1 ([#860](#860)) ([f3237c2](f3237c2)) * **deps:** update module github.com/open-feature/open-feature-operator to v0.2.36 ([#799](#799)) ([fa4da4b](fa4da4b)) * **deps:** update module golang.org/x/crypto to v0.12.0 ([#797](#797)) ([edae3fd](edae3fd)) * **deps:** update module golang.org/x/net to v0.14.0 ([#798](#798)) ([92c2f26](92c2f26)) * **deps:** update module sigs.k8s.io/controller-runtime to v0.15.1 ([#795](#795)) ([13d62fd](13d62fd)) * **deps:** update module sigs.k8s.io/controller-runtime to v0.16.0 ([#856](#856)) ([88d832a](88d832a)) ### ✨ New Features * add flag key to hash in fractional evaluation ([#847](#847)) ([ca6a35f](ca6a35f)) * add gRPC healthchecks ([#863](#863)) ([da30b7b](da30b7b)) * support nested props in fractional evaluator ([#869](#869)) ([50ff739](50ff739)) ### 🧹 Chore * deprecate fractionalEvaluation for fractional ([#873](#873)) ([243fef9](243fef9)) * replace xxh3 with murmur3 in bucket algorithm ([#846](#846)) ([c3c9e4e](c3c9e4e)) </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This PR
This PR adds the ability to use nested properties for the bucket key in fractional evaluation. It is a breaking change from the current behaviour. If the bucket key is not provided it will default to
{"cat": [{"var":"$flagd.flagKey"}, {"var":"targetingKey"}]}.@toddbaert I am not sure that my approach to the missing bucket key is the best. I would have preferred to add
{"cat": [{"var":"$flagd.flagKey"}, {"var":"targetingKey"}]}to the targeting object and let JsonLogic handle it, but it would be a bit clumsy and involve string manipulation. I don't think there is a nice way to do it, but I'll play around a bit more.Related Issues
See #848.
Closes #843.
Notes
Follow-up Tasks
How to test