-
Bug
-
Resolution: Unresolved
-
Major
-
None
-
1.18.0
-
False
-
-
False
-
-
Description of Problem
The Operator performs comparison on fields of resources (such as Deployments) to figure out whether something has changed and whether it needs to reconcile. For this purpose, it uses reflect.DeepEqual most of the time (i.e. here)
However, when comparing lists, this might yield a wrong result, because lists are sent back in non-deterministic order by etcd. So, the two lists:
- foo - bar
and
- bar - foo
are semantically equal, but reflect.DeepEqual would return false, resulting in the Operator determining the need for a reconciliation. This leads to empty Update calls in the Kubernetes API, putting pressure on etcd.
The Operator should use a semantic comparison for list fields, instead of relying on reflect.DeepEqual for comparing lists.
Additional Info
- <Any additional info such as logs, must-gather outputs, etc.>
Problem Reproduction
- <How do we reproduce the problem?>
Reproducibility
- <Always/Intermittent/Only Once>
Prerequisites/Environment
- <OpenShift, managed service (e.g., ROSA, ARO), operators, layered product, and other software versions, build details>
Steps to Reproduce
- ...
Expected Results
- ...
Actual Results
- ...
Problem Analysis
- <Completed by engineering team as part of the triage/refinement process>
Root Cause
- <What is the root cause of the problem? Or, why is it not a bug?>
Workaround (If Possible)
- <Are there any workarounds we can provide to the customers?>
Fix Approaches
- <If we decide to fix this bug, how will we do it?>
Acceptance Criteria
- ...
Definition of Done
- Code Complete:
- All code has been written, reviewed, and approved.
- Tested:
- Unit tests have been written and passed.
- Ensure code coverage is not reduced with the changes.
- Integration tests have been automated.
- System tests have been conducted, and all critical bugs have been fixed.
- Tested and merged on OpenShift either upstream or downstream on a local build.
- Documentation:
- User documentation or release notes have been written (if applicable).
- Build:
- Code has been successfully built and integrated into the main repository / project.
- Midstream changes (if applicable) are done, reviewed, approved and merged.
- Review:
- Code has been peer-reviewed and meets coding standards.
- All acceptance criteria defined in the user story have been met.
- Tested by reviewer on OpenShift.
- Deployment:
- The feature has been deployed on OpenShift cluster for testing.