General topic: stability, resilience, recoverability, better logging and error handling.
New features:
Bugfixes:
- On-field handlers were triggered for non-existent fields with
None
→None
change. #523 - Sub-handlers' state was not purged, preventing their execution in the future. #517
Resilience improvements:
- Annotations from other Kopf-based operators are fully ignored to avoid ping-pong effects. #539 #538
- The operator will force-stop itself by SIGKILL after 10 minutes of attempts to stop gracefully. #543
- Crash the whole operator on unrecoverable errors in watchers/workers. #509
- Throttle individual resource processing on unexpected errors. #510
- Extra exceptions are intercepted and ignored for k8s-event posting. #507
- Treat client timeouts during watches similar to other API errors. #506
- Handle all connection errors from the initial streaming request. #512
Experience improvements:
- Annotations restrictions on key length are reworked to allow longer names (v2/v1 keys). #529
- Annotations values are now compacted (no spaces) for the better visual outlook. #516
- Log/warn when the resulting patched object does not match the intended patch. #527
- Filtered-out resources do not create phantom logs & do not get annotated anymore. #545
- Cluster-scoped objects are logged by their name, without "None" as the namespace. #544
- Better phrasing for some log messages to avoid confusion. #540
- Documentation fixes. #530
Internal changes:
- The first release since the fork. #502 #500 #505 #546
- CI feedback is sped up from ≈40-50 mins to ≈5 mins per push. #536 #537
- K3d/K3s is used for CI functional/integration testing; Minikube is for nightly tests. #536 #547
- K8s versions are updated for CI builds. #501
- Imports are sorted with
isort
. #525 #531 - Added tests for operators' peering. #519
- Added tests for logging & loggers. #544
- Get rid of mocks for causes & registries, use normal classes. #521
- Time-based tests are stabilised (though not fully fixed). #534 #528 #520 #522
- Asyncio tasks are now named in Python 3.8+, which makes the debugging easier. #542