feat: introduce flag merge behaviour#414
feat: introduce flag merge behaviour#414beeme1mr merged 28 commits intoopen-feature:mainfrom james-milligan:sync-merge-behaviour
Conversation
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Codecov Report
@@ Coverage Diff @@
## main #414 +/- ##
==========================================
+ Coverage 65.06% 66.30% +1.24%
==========================================
Files 11 11
Lines 1374 1395 +21
==========================================
+ Hits 894 925 +31
+ Misses 425 414 -11
- Partials 55 56 +1
📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more |
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
|
I'm looking at this now. Sorry about the wait @james-milligan |
Co-authored-by: Todd Baert <toddbaert@gmail.com> Signed-off-by: James Milligan <75740990+james-milligan@users.noreply.github.com>
Signed-off-by: James Milligan <james@omnant.co.uk>
Signed-off-by: James Milligan <james@omnant.co.uk>
|
I had a look into the PR and I think we need some agreements. Current implementation focus on resyncs after a deletion. This means the changes we introduce only concern the store delete scenarios. In my view, we need to be careful about core logic (ex:- store - runtime - isync ) changes and breaking changes must be justifiable. With that, can't we simply rely on the following and ignore resyncs altogether,
wouldn't such an approach work or am I not seeing the big picture? 🤔 |
That seems to be (to me) more or less what this PR does. See the tests here: https://github.com/open-feature/flagd/pull/414/files/5415b75a4c48bf3ff8014bd92428666711a0a1f8#diff-575f3e52e026f848e85c7a6cd9561cda5def99f4a58a9786801d4d4097f0ae03R12-R73 |
Yes, I also think this is what it does. But I am yet to see the need for a resync 🤔 If a low-priority sync provider can't override an existing flag & if sync providers publish updates for changes, then is there any reason for a force refill? |
If flag-a exists in 2 sync providers, (provider-A and provider-B) with provider-A taking priority, then the starup and initial datasync will result in the value of flag-a from provider-B being discarded. In the event that the value of flag-a is then deleted in provider-A then we will not recieve the previously discarded flag-a value from provider-B until there is another update event from it, and the sdk will always return the default value. |
Thank you. I now understand the scenario you want to handle. This shows the impact of caching and the difficulty to maintain them. I am still in favor of not having a refill strategy for removals to minimize the complexity of store and runtime components. But may be others have different opinions and this could be a desirable feature. |
Signed-off-by: James Milligan <james@omnant.co.uk>
Co-authored-by: Skye Gill <gill.skye95@gmail.com> Signed-off-by: James Milligan <75740990+james-milligan@users.noreply.github.com>
|
Could you please add a section in the docs that describes the merge behavior. It can basically be a summary of the conversations we've had in this thread. |
|
Please add some debug logging when a duplicate flag key is detected from another source. While the behavior defined in this PR makes sense, it would be very difficult to troubleshoot without any indication that merging occurred. |
🤖 I have created a release *beep* *boop* --- ## [0.4.0](v0.3.7...v0.4.0) (2023-03-02) ### ⚠ BREAKING CHANGES * Use OTel to export metrics (metric name changes) ([#419](#419)) ### 🧹 Chore * add additional sections to the release notes ([#449](#449)) ([798f71a](798f71a)) * attach image sbom to release artefacts ([#407](#407)) ([fb4ee50](fb4ee50)) * **deps:** update actions/configure-pages digest to fc89b04 ([#417](#417)) ([04014e7](04014e7)) * **deps:** update amannn/action-semantic-pull-request digest to b6bca70 ([#441](#441)) ([ce0ebe1](ce0ebe1)) * **deps:** update docker/login-action digest to ec9cdf0 ([#437](#437)) ([2650670](2650670)) * **deps:** update docker/metadata-action digest to 3343011 ([#438](#438)) ([e7ebf32](e7ebf32)) * **deps:** update github/codeql-action digest to 32dc499 ([#439](#439)) ([f91d91b](f91d91b)) * **deps:** update google-github-actions/release-please-action digest to d3c71f9 ([#406](#406)) ([6e1ffb2](6e1ffb2)) * disable caching tests in CI ([#442](#442)) ([28a35f6](28a35f6)) * fix race condition on init read ([#409](#409)) ([0c9eb23](0c9eb23)) * integration test stability ([#432](#432)) ([5a6a5d5](5a6a5d5)) * integration tests ([#312](#312)) ([6192ac8](6192ac8)) * reorder release note sections ([df7bfce](df7bfce)) * use -short flag in benchmark tests ([#431](#431)) ([e68a6aa](e68a6aa)) ### 🐛 Bug Fixes * **deps:** update kubernetes packages to v0.26.2 ([#450](#450)) ([2885227](2885227)) * **deps:** update module github.com/bufbuild/connect-go to v1.5.2 ([#416](#416)) ([feb7f04](feb7f04)) * **deps:** update module github.com/open-feature/go-sdk-contrib/providers/flagd to v0.1.9 ([#427](#427)) ([42d2705](42d2705)) * **deps:** update module github.com/open-feature/open-feature-operator to v0.2.29 ([#429](#429)) ([b7fae81](b7fae81)) * **deps:** update module github.com/stretchr/testify to v1.8.2 ([#440](#440)) ([ab3e674](ab3e674)) * **deps:** update module golang.org/x/net to v0.7.0 ([#410](#410)) ([c6133b6](c6133b6)) * **deps:** update module sigs.k8s.io/controller-runtime to v0.14.5 ([#454](#454)) ([f907f11](f907f11)) * remove non-error error log from parseFractionalEvaluationData ([#446](#446)) ([34aca79](34aca79)) ### ✨ New Features * add debug logging for merge behaviour ([#456](#456)) ([dc71e84](dc71e84)) * add Health and Readiness probes ([#418](#418)) ([7f2358c](7f2358c)) * Add version to startup message ([#430](#430)) ([8daf613](8daf613)) * introduce flag merge behaviour ([#414](#414)) ([524f65e](524f65e)) * introduce grpc sync for flagd ([#297](#297)) ([33413f2](33413f2)) * refactor and improve K8s sync provider ([#443](#443)) ([4c03bfc](4c03bfc)) * Use OTel to export metrics (metric name changes) ([#419](#419)) ([eb3982a](eb3982a)) ### 📚 Documentation * add .net flagd provider ([73d7840](73d7840)) * configuration merge docs ([#455](#455)) ([6cb66b1](6cb66b1)) * documentation for creating a provider ([#413](#413)) ([d0c099d](d0c099d)) * updated filepaths for schema store regex ([#344](#344)) ([2d0e9d9](2d0e9d9)) --- 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
Related Issues
Notes
Follow-up Tasks
How to test