Documentation/contributor-guide/features.md
This document provides an overview of etcd features and general development guidelines for adding and deprecating them. The project maintainers can override these guidelines per the need of the project following the project governance.
The etcd features fall into three stages: Alpha, Beta, and GA.
Any new feature is usually added as an Alpha feature. An Alpha feature is characterized as below:
A Beta feature is characterized as below:
A GA feature is characterized as below:
Any new enhancements to the etcd are typically added as an Alpha feature.
etcd follows the Kubernetes KEP process for new enhancements. The general development requirements are listed below. They can be somewhat flexible depending on the scope of the feature and review discussions and will evolve over time.
/sig etcd.if cfg.ServerFeatureGate.Enabled(features.FeatureName).It is important that features don't get stuck in one stage. They should be revisited and moved to the next stage once they meet the graduation criteria listed in the KEP. A feature should stay at one stage for at least one release before being promoted.
If a feature is found ready for graduation to the next stage, open a Pull Request (PR) with the following changes.
PreRelease stage in server/features/etcd_features.go.At least two maintainers must approve the work. Patch releases should not be considered for graduation.
Alpha features can be removed without going through the deprecation process.
server/features/etcd_features.go, and clean up all relevant code.As the project evolves, a Beta/GA feature may sometimes need to be deprecated and removed. Such a situation should be handled using the steps below:
{Default: false, PreRelease: featuregate.Deprecated, LockedToDefault: false} in server/features/etcd_features.go. Deprecated feature gates must respond with a warning when used.
{Default: false, PreRelease: featuregate.Deprecated, LockedToDefault: true} in server/features/etcd_features.go, and start cleaning the code.At least two maintainers must approve the work. Patch releases should not be considered for deprecation.