mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #17758 from henrybear327/doc/fix_typo_and_improve
Improve documentation
This commit is contained in:
commit
5de6b76a9f
@ -1,42 +1,42 @@
|
||||
# How to contribute
|
||||
|
||||
etcd is Apache 2.0 licensed and accepts contributions via GitHub pull requests.
|
||||
This document outlines basics of contributing to etcd.
|
||||
This document outlines the basics of contributing to etcd.
|
||||
|
||||
This is a rough outline of what a contributor's workflow looks like:
|
||||
* [Find something to work on](#Find-something-to-work-on)
|
||||
* [Check for flaky tests](#Check-for-flaky-tests)
|
||||
* [Setup development environment](#Setup-development-environment)
|
||||
* [Set up development environment](#Set-up-development-environment)
|
||||
* [Implement your change](#Implement-your-change)
|
||||
* [Commit your change](#Commit-your-change)
|
||||
* [Create a pull request](#Create-a-pull-request)
|
||||
* [Get your pull request reviewed](#Get-your-pull-request-reviewed)
|
||||
|
||||
If you have any questions about, please reach out using one of the methods listed in [contact].
|
||||
If you have any questions, please reach out using one of the methods listed in [contact].
|
||||
|
||||
[contact]: ./README.md#Contact
|
||||
|
||||
## Learn more about etcd
|
||||
|
||||
Before making a change please look through resources below to learn more about etcd and tools used for development.
|
||||
Before making a change please look through the resources below to learn more about etcd and tools used for development.
|
||||
|
||||
* Please learn about [Git](https://github.com/git-guides) version control system used in etcd.
|
||||
* Read the [etcd learning resources](https://etcd.io/docs/v3.5/learning/)
|
||||
* Read the [etcd community membership](/Documentation/contributor-guide/community-membership.md)
|
||||
* Watch [etcd deep dive](https://www.youtube.com/watch?v=D2pm6ufIt98&t=927s)
|
||||
* Watch [etcd code walk through](https://www.youtube.com/watch?v=H3XaSF6wF7w)
|
||||
* Watch [etcd code walkthrough](https://www.youtube.com/watch?v=H3XaSF6wF7w)
|
||||
|
||||
## Find something to work on
|
||||
|
||||
All the work in etcd project is tracked in [github issue tracker].
|
||||
All the work in the etcd project is tracked in [GitHub issue tracker].
|
||||
Issues should be properly labeled making it easy to find something for you.
|
||||
|
||||
Depending on your interest and experience you should check different labels:
|
||||
* If you are just starting, check issues labeled with [good first issue].
|
||||
* When you feel more conformable in your contributions, checkout [help wanted].
|
||||
* Advanced contributors can try to help with issues labeled [priority/important] covering most relevant work at the time.
|
||||
* When you feel more comfortable in your contributions, check out [help wanted].
|
||||
* Advanced contributors can try to help with issues labeled [priority/important] covering the most relevant work at the time.
|
||||
|
||||
If any of aforementioned labels don't have unassigned issues, please [contact] one of the [maintainers] asking to triage more issues.
|
||||
If any of the aforementioned labels don't have unassigned issues, please [contact] one of the [maintainers] asking to triage more issues.
|
||||
|
||||
[github issue tracker]: https://github.com/etcd-io/etcd/issues
|
||||
[good first issue]: https://github.com/search?type=issues&q=org%3Aetcd-io+state%3Aopen++label%3A%22good+first+issue%22
|
||||
@ -62,7 +62,7 @@ For more, because etcd uses Kubernetes' prow infrastructure to run CI jobs, the
|
||||
If you find any flaky tests on testgrid, please
|
||||
|
||||
1. Check [existing issues](https://github.com/etcd-io/etcd/issues?q=is%3Aissue+is%3Aopen+label%3Atype%2Fflake) to see if an issue has already been opened for this test. If not, open an issue with the `type/flake` label.
|
||||
2. Try to reproduce the flaky test on your machine via `stress`, for example to reproduce the failure of `TestPeriodicSkipRevNotChange`:
|
||||
2. Try to reproduce the flaky test on your machine via `stress`, for example, to reproduce the failure of `TestPeriodicSkipRevNotChange`:
|
||||
|
||||
```bash
|
||||
cd server/etcdserver/api/v3compactor
|
||||
@ -73,29 +73,29 @@ stress -p=8 ./v3compactor.test
|
||||
```
|
||||
3. Fix it.
|
||||
|
||||
## Setup development environment
|
||||
## Set up development environment
|
||||
|
||||
The etcd project supports two options for development:
|
||||
|
||||
1. Manually setup local environment.
|
||||
2. Automatically setup [devcontainer](https://containers.dev).
|
||||
1. Manually set up the local environment.
|
||||
2. Automatically set up [devcontainer](https://containers.dev).
|
||||
|
||||
For both options the only supported architecture is `linux-amd64`. Bug reports for other environments will generally be ignored. Supporting new environments requires introduction of proper tests and maintainer support that is currently lacking in the etcd project.
|
||||
For both options, the only supported architecture is `linux-amd64`. Bug reports for other environments will generally be ignored. Supporting new environments requires the introduction of proper tests and maintainer support that is currently lacking in the etcd project.
|
||||
|
||||
If you would like etcd to support your preferred environment you can [file an issue].
|
||||
|
||||
### Option 1 - Manually setup local environment
|
||||
### Option 1 - Manually set up the local environment
|
||||
|
||||
This is the original etcd development environment, is most supported and is backwards compatible for development of older etcd versions.
|
||||
This is the original etcd development environment, is most supported, and is backward compatible for the development of older etcd versions.
|
||||
|
||||
Follow the steps below to setup the environment:
|
||||
Follow the steps below to set up the environment:
|
||||
|
||||
- [Clone the repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)
|
||||
- Install Go by following [installation](https://go.dev/doc/install). Please check minimal go version in [go.mod file](./go.mod#L3).
|
||||
- Install Go by following [installation](https://go.dev/doc/install). Please check the minimal go version in [go.mod file](./go.mod#L3).
|
||||
- Install build tools:
|
||||
- `make`: For debian based distributions you can run `sudo apt-get install build-essential`
|
||||
- `protoc`: You can download for your os. Use version [`v3.20.3`](https://github.com/protocolbuffers/protobuf/releases/tag/v3.20.3).
|
||||
- `yamllint`: For debian based distribution you can run `sudo apt-get install yamllint`
|
||||
- `make`: For Debian-based distributions you can run `sudo apt-get install build-essential`
|
||||
- `protoc`: You can download it for your os. Use version [`v3.20.3`](https://github.com/protocolbuffers/protobuf/releases/tag/v3.20.3).
|
||||
- `yamllint`: For Debian-based distribution you can run `sudo apt-get install yamllint`
|
||||
- Verify that everything is installed by running `make build`
|
||||
|
||||
Note: `make build` runs with `-v`. Other build flags can be added through env `GO_BUILD_FLAGS`, **if required**. Eg.,
|
||||
@ -103,17 +103,17 @@ Note: `make build` runs with `-v`. Other build flags can be added through env `G
|
||||
GO_BUILD_FLAGS="-buildmode=pie" make build
|
||||
```
|
||||
|
||||
### Option 2 - Automatically setup devcontainer
|
||||
### Option 2 - Automatically set up devcontainer
|
||||
|
||||
This is a more recently added environmnent that aims to make it faster for new contributors to get started with etcd. This option is supported for etcd versions 3.6 onwards.
|
||||
This is a more recently added environment that aims to make it faster for new contributors to get started with etcd. This option is supported for etcd versions 3.6 onwards.
|
||||
|
||||
This option can be [used locally](https://code.visualstudio.com/docs/devcontainers/tutorial) on a system running Visual Studio Code and Docker, or in a remote cloud based [Codespaces](https://github.com/features/codespaces) environment.
|
||||
This option can be [used locally](https://code.visualstudio.com/docs/devcontainers/tutorial) on a system running Visual Studio Code and Docker, or in a remote cloud-based [Codespaces](https://github.com/features/codespaces) environment.
|
||||
|
||||
To get started, create a codespace for this repository by clicking this 👇
|
||||
|
||||
[](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=11225014)
|
||||
|
||||
A codespace will open in a web-based version of Visual Studio Code. The [dev container](.devcontainer/devcontainer.json) is fully configured with software needed for this project.
|
||||
A codespace will open in a web-based version of Visual Studio Code. The [dev container](.devcontainer/devcontainer.json) is fully configured with the software needed for this project.
|
||||
|
||||
**Note**: Dev containers is an open spec which is supported by [GitHub Codespaces](https://github.com/codespaces) and [other tools](https://containers.dev/supporting).
|
||||
|
||||
@ -121,30 +121,30 @@ A codespace will open in a web-based version of Visual Studio Code. The [dev con
|
||||
|
||||
## Implement your change
|
||||
|
||||
etcd code should follow coding style suggested by the Golang community.
|
||||
etcd code should follow the coding style suggested by the Golang community.
|
||||
See the [style doc](https://github.com/golang/go/wiki/CodeReviewComments) for details.
|
||||
|
||||
Please ensure that your change passes static analysis (requires [golangci-lint](https://golangci-lint.run/usage/install/)):
|
||||
- `make verify` to verify if all checks pass.
|
||||
- `make verify-*` to verify a single check, for example `make verify-bom` to verify if bill-of-materials.json file is up-to-date.
|
||||
- `make verify-*` to verify a single check, for example, `make verify-bom` to verify if `bill-of-materials.json` file is up-to-date.
|
||||
- `make fix` to fix all checks.
|
||||
- `make fix-*` to fix a single checks, for example `make fix-bom` to update bill-of-materials.json.
|
||||
- `make fix-*` to fix a single check, for example, `make fix-bom` to update `bill-of-materials.json`.
|
||||
|
||||
Please ensure that your change passes tests.
|
||||
- `make test-unit` to run unit tests.
|
||||
- `make test-integration` to run integration tests.
|
||||
- `make test-e2e` to run e2e tests.
|
||||
|
||||
All changes are expected to come with unit test.
|
||||
All changes are expected to come with a unit test.
|
||||
All new features are expected to have either e2e or integration tests.
|
||||
|
||||
## Commit your change
|
||||
|
||||
etcd follows a rough convention for commit messages:
|
||||
* First line:
|
||||
* Should start name of package (for example `etcdserver`, `etcdctl`) followed by `:` character.
|
||||
* Should start with the name of the package (for example `etcdserver`, `etcdctl`) followed by the `:` character.
|
||||
* Describe the `what` behind the change
|
||||
* Optionally author might provide the `why` behind the change in the main commit message body.
|
||||
* Optionally, the author might provide the `why` behind the change in the main commit message body.
|
||||
* Last line should be `Signed-off-by: firstname lastname <email@example.com>` (can be automatically generate by providing `--signoff` to git commit command).
|
||||
|
||||
Example of commit message:
|
||||
@ -162,9 +162,9 @@ Signed-off-by: FirstName LastName <github@github.com>
|
||||
|
||||
## Create a pull request
|
||||
|
||||
Please follow [making a pull request](https://docs.github.com/en/get-started/quickstart/contributing-to-projects#making-a-pull-request) guide.
|
||||
Please follow the [making a pull request](https://docs.github.com/en/get-started/quickstart/contributing-to-projects#making-a-pull-request) guide.
|
||||
|
||||
If you are still working on the pull request, you can convert it to draft by clicking `Convert to draft` link just below list of reviewers.
|
||||
If you are still working on the pull request, you can convert it to a draft by clicking `Convert to draft` link just below the list of reviewers.
|
||||
|
||||
Multiple small PRs are preferred over single large ones (>500 lines of code).
|
||||
|
||||
@ -180,6 +180,6 @@ It might happen that some unrelated tests on your PR are failing, due to their f
|
||||
In such cases please [file an issue] to deflake the problematic test and ask one of [maintainers] to rerun the tests.
|
||||
|
||||
If all checks were successful feel free to reach out for review from people that were involved in the original discussion or [maintainers].
|
||||
Depending on complexity of the PR it might require between 1 and 2 maintainers to approve your change before merging.
|
||||
Depending on the complexity of the PR it might require between 1 and 2 maintainers to approve your change before merging.
|
||||
|
||||
Thanks for contributing!
|
||||
|
@ -3,7 +3,7 @@
|
||||
## Guide
|
||||
|
||||
* New development occurs on the [main branch][main].
|
||||
* Main branch should always have a green build!
|
||||
* The main branch should always have a green build!
|
||||
* Backwards-compatible bug fixes should target the main branch and subsequently be ported to stable branches.
|
||||
* Once the main branch is ready for release, it will be tagged and become the new stable branch.
|
||||
|
||||
@ -15,13 +15,12 @@ The `main` branch is our development branch. All new features land here first.
|
||||
|
||||
To try new and experimental features, pull `main` and play with it. Note that `main` may not be stable because new features may introduce bugs.
|
||||
|
||||
Before the release of the next stable version, feature PRs will be frozen. A [release manager](./release.md#release-management) will be assigned to major/minor version and will lead the etcd community in test, bug-fix and documentation of the release for one to two weeks.
|
||||
Before the release of the next stable version, feature PRs will be frozen. A [release manager](./release.md#release-management) will be assigned to the major/minor version and will lead the etcd community in testing, bug-fix, and documentation of the release for one to two weeks.
|
||||
|
||||
### Stable branches
|
||||
|
||||
All branches with prefix `release-` are considered _stable_ branches.
|
||||
All branches with the prefix `release-` are considered _stable_ branches.
|
||||
|
||||
After every minor release ([semver.org](https://semver.org/)), we will have a new stable branch for that release, managed by a [patch release manager](./release.md#release-management). We will keep fixing the backwards-compatible bugs for the latest two stable releases. A _patch_ release to each supported release branch, incorporating any bug fixes, will be once every two weeks, given any patches.
|
||||
After every minor release ([semver.org](https://semver.org/)), we will have a new stable branch for that release, managed by a [patch release manager](./release.md#release-management). We will keep fixing the backward-compatible bugs for the latest two stable releases. A _patch_ release to each supported release branch, incorporating any bug fixes, will be once every two weeks, given any patches.
|
||||
|
||||
[main]: https://github.com/etcd-io/etcd/tree/main
|
||||
|
||||
|
@ -24,7 +24,7 @@ below.
|
||||
|
||||
## Member
|
||||
|
||||
Members are continuously active contributors in the community. They can have
|
||||
Members are continuously active contributors to the community. They can have
|
||||
issues and PRs assigned to them. Members are expected to remain active
|
||||
contributors to the community.
|
||||
|
||||
@ -41,7 +41,7 @@ contributors to the community.
|
||||
- Subscribed to [etcd-dev@googlegroups.com](https://groups.google.com/g/etcd-dev)
|
||||
- Have read the [contributor guide]
|
||||
- Sponsored by two active maintainers or reviewers.
|
||||
- Sponsors must be from multiple member companies to demonstrate integration across community.
|
||||
- Sponsors must be from multiple member companies to demonstrate integration across the community.
|
||||
- With no objections from other maintainers
|
||||
- Open a [membership nomination] issue against the `kubernetes/org` repo
|
||||
- Ensure your sponsors are @mentioned on the issue
|
||||
@ -54,11 +54,11 @@ contributors to the community.
|
||||
- Responsive to issues and PRs assigned to them
|
||||
- Granted "triage access" to etcd project
|
||||
- Active owner of code they have contributed (unless ownership is explicitly transferred)
|
||||
- Code is well tested
|
||||
- Code is well-tested
|
||||
- Tests consistently pass
|
||||
- Addresses bugs or issues discovered after code is accepted
|
||||
|
||||
**Note:** members who frequently contribute code are expected to proactively
|
||||
**Note:** Members who frequently contribute code are expected to proactively
|
||||
perform code reviews and work towards becoming a *reviewer*.
|
||||
|
||||
## Reviewers
|
||||
@ -78,7 +78,7 @@ maintainership.
|
||||
- Reviewed or contributed at least 20 substantial PRs to the codebase.
|
||||
- Knowledgeable about the codebase.
|
||||
- Sponsored by two active maintainers.
|
||||
- Sponsors must be from multiple member companies to demonstrate integration across community.
|
||||
- Sponsors must be from multiple member companies to demonstrate integration across the community.
|
||||
- With no objections from other maintainers
|
||||
- Reviewers can be removed by a supermajority of the maintainers or can resign by notifying
|
||||
the maintainers.
|
||||
@ -96,8 +96,8 @@ maintainership.
|
||||
|
||||
## Maintainers
|
||||
|
||||
Maintainers are first and foremost contributors that have shown they
|
||||
are committed to the long term success of a project. Maintainership is about building
|
||||
Maintainers are first and foremost contributors who have shown they
|
||||
are committed to the long-term success of a project. Maintainership is about building
|
||||
trust with the current maintainers and being a person that they can
|
||||
depend on to make decisions in the best interest of the project in a consistent manner.
|
||||
|
||||
@ -109,20 +109,20 @@ depend on to make decisions in the best interest of the project in a consistent
|
||||
- Deep understanding of the technical domain of the project
|
||||
- Sustained contributions to design and direction by doing all of:
|
||||
- Authoring and reviewing proposals
|
||||
- Initiating, contributing and resolving discussions (emails, GitHub issues, meetings)
|
||||
- Identifying subtle or complex issues in designs and implementation PRs
|
||||
- Directly contributed to the project through implementation and / or review
|
||||
- Initiating, contributing, and resolving discussions (emails, GitHub issues, meetings)
|
||||
- Identifying subtle or complex issues in the designs and implementation of PRs
|
||||
- Directly contributed to the project through implementation and/or review
|
||||
- Sponsored by two active maintainers and elected by supermajority
|
||||
- Sponsors must be from multiple member companies to demonstrate integration across community.
|
||||
- Sponsors must be from multiple member companies to demonstrate integration across the community.
|
||||
- To become a maintainer send an email with your candidacy to etcd-maintainers-private@googlegroups.com
|
||||
- Ensure your sponsors are @mentioned on the email
|
||||
- Ensure your sponsors are @mentioned in the email
|
||||
- Include a list of contributions representative of your work on the project.
|
||||
- Existing maintainers vote will privately and respond to the email with either acceptance or with feedback for suggested improvement.
|
||||
- Existing maintainers vote will privately and respond to the email with either acceptance or feedback for suggested improvement.
|
||||
- With your membership approved you are expected to:
|
||||
- Open a PR and add an entry to the [OWNERS] file
|
||||
- Subscribe to etcd-maintainers@googlegroups.com and etcd-maintainers-private@googlegroups.com
|
||||
- Request to join to [etcd-maintainer teams of etcd organization of GitHub](https://github.com/orgs/etcd-io/teams/maintainers-etcd)
|
||||
- Request to join to the private slack channel for etcd maintainers on [kubernetes slack](http://slack.kubernetes.io/)
|
||||
- Request to join [etcd-maintainer teams of etcd organization of GitHub](https://github.com/orgs/etcd-io/teams/maintainers-etcd)
|
||||
- Request to join the private slack channel for etcd maintainers on [kubernetes slack](http://slack.kubernetes.io/)
|
||||
- Request access to etcd-development GCP project where we publish releases
|
||||
- Request access to passwords shared between maintainers
|
||||
|
||||
@ -133,26 +133,26 @@ depend on to make decisions in the best interest of the project in a consistent
|
||||
- Define milestones and releases
|
||||
- Mentor and guide reviewers, and contributors to the project.
|
||||
- Participate when called upon in the [security disclosure and release process]
|
||||
- Ensure continued health of the project
|
||||
- Ensure the continued health of the project
|
||||
- Adequate test coverage to confidently release
|
||||
- Tests are passing reliably (i.e. not flaky) and are fixed when they fail
|
||||
- Ensure a healthy process for discussion and decision making is in place.
|
||||
- Ensure a healthy process for discussion and decision-making is in place.
|
||||
- Work with other maintainers to maintain the project's overall health and success holistically
|
||||
|
||||
### Retiring
|
||||
|
||||
Life priorities, interests, and passions can change. Maintainers can retire and
|
||||
move to [emeritus maintainers]. If a maintainer needs to step down, they should
|
||||
inform other maintainers, if possible, help find someone to pick up the related
|
||||
work. At the very least, ensure the related work can be continued. Afterward
|
||||
they can remove themselves from list of existing maintainers.
|
||||
inform other maintainers and, if possible, help find someone to pick up the related
|
||||
work. At the very least, ensure the related work can be continued. Afterward,
|
||||
they can remove themselves from the list of existing maintainers.
|
||||
|
||||
If a maintainer has not been performing their duties for period of 12 months,
|
||||
they can be removed by other maintainers. In that case inactive maintainer will
|
||||
be first notified via an email. If situation doesn't improve, they will be
|
||||
If a maintainer has not been performing their duties for 12 months,
|
||||
they can be removed by other maintainers. In that case, the inactive maintainer will
|
||||
be first notified via an email. If the situation doesn't improve, they will be
|
||||
removed. If an emeritus maintainer wants to regain an active role, they can do
|
||||
so by renewing their contributions. Active maintainers should welcome such a move.
|
||||
Retiring of other maintainers or regaining the status should require approval
|
||||
Retiring other maintainers or regaining the status should require the approval
|
||||
of at least two active maintainers.
|
||||
|
||||
## Acknowledgements
|
||||
@ -166,3 +166,4 @@ Contributor roles and responsibilities were written based on [Kubernetes communi
|
||||
[emeritus maintainers]: /README.md#etcd-emeritus-maintainers
|
||||
[security disclosure and release process]: /security/README.md
|
||||
[two-factor authentication]: https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/about-two-factor-authentication
|
||||
|
||||
|
@ -19,12 +19,12 @@
|
||||
The dependabot is enabled & [configured](https://github.com/etcd-io/etcd/blob/main/.github/dependabot.yml) to
|
||||
manage dependencies for etcd `main` branch. But dependabot doesn't work well for multi-module repository like `etcd`,
|
||||
see [dependabot-core/issues/6678](https://github.com/dependabot/dependabot-core/issues/6678).
|
||||
Usually human intervention is required each time when dependabot automatically opens some PRs to bump dependencies.
|
||||
Please see guidance below.
|
||||
Usually, human intervention is required each time when dependabot automatically opens some PRs to bump dependencies.
|
||||
Please see the guidance below.
|
||||
|
||||
### Dependencies used in workflows
|
||||
|
||||
The PRs which automatically bump dependencies (see examples below) used in workflows are fine, and can be approved & merged directly as long as all checks are successful.
|
||||
The PRs that automatically bump dependencies (see examples below) used in workflows are fine and can be approved & merged directly as long as all checks are successful.
|
||||
|
||||
- [build(deps): bump github/codeql-action from 2.2.11 to 2.2.12](https://github.com/etcd-io/etcd/pull/15736)
|
||||
- [build(deps): bump actions/checkout from 3.5.0 to 3.5.2](https://github.com/etcd-io/etcd/pull/15735)
|
||||
@ -34,7 +34,7 @@ The PRs which automatically bump dependencies (see examples below) used in workf
|
||||
|
||||
When multiple etcd modules depend on the same package, please bump the package version for all the modules in the correct order. The rule is simple:
|
||||
if module A depends on module B, then bump the dependency for module B before module A. If the two modules do not depend on each other, then
|
||||
it doesn't matter to bump which module first. For example, multiple modules depend on `github.com/spf13/cobra`, we need to bump the dependency
|
||||
it doesn't matter to bump which module first. For example, multiple modules depend on `github.com/spf13/cobra`, so we need to bump the dependency
|
||||
in the following order,
|
||||
|
||||
- go.etcd.io/etcd/pkg/v3
|
||||
@ -50,7 +50,7 @@ Note the module `go.etcd.io/etcd/tools/v3` doesn't depend on any other modules,
|
||||
|
||||
### Steps to bump a dependency
|
||||
|
||||
Use the `github.com/spf13/cobra` as an example, follow steps below to bump it from 1.6.1 to 1.7.0 for module `go.etcd.io/etcd/etcdctl/v3`,
|
||||
Use the `github.com/spf13/cobra` as an example, follow the steps below to bump it from 1.6.1 to 1.7.0 for module `go.etcd.io/etcd/etcdctl/v3`,
|
||||
|
||||
```bash
|
||||
cd ${ETCD_ROOT_DIR}/etcdctl
|
||||
@ -74,9 +74,9 @@ you can get all dependencies bumping for the module `go.etcd.io/etcd/tools/v3` i
|
||||
|
||||
### Indirect dependencies
|
||||
|
||||
Usually we don't bump a dependency if all modules just indirectly depend on it, such as `github.com/go-logr/logr`.
|
||||
Usually, we don't bump a dependency if all modules just indirectly depend on it, such as `github.com/go-logr/logr`.
|
||||
|
||||
If an indirect dependency (e.g. `D1`) causes any CVE or bugs which affect etcd, usually the module (e.g. `M1`, not part of etcd, but used by etcd)
|
||||
If an indirect dependency (e.g. `D1`) causes any CVE or bugs that affect etcd, usually the module (e.g. `M1`, not part of etcd, but used by etcd)
|
||||
which depends on it should bump the dependency (`D1`), and then etcd just needs to bump `M1`. However, if the module (`M1`) somehow doesn't
|
||||
bump the problematic dependency, then etcd can still bump it (`D1`) directly following the same steps above. But as a long-term solution, etcd should
|
||||
try to remove the dependency on such module (`M1`) that lack maintenance.
|
||||
@ -84,7 +84,7 @@ try to remove the dependency on such module (`M1`) that lack maintenance.
|
||||
For mixed cases, in which some modules directly while others indirectly depend on a dependency, we have multiple options,
|
||||
|
||||
- Bump the dependency for all modules, no matter it's direct or indirect dependency.
|
||||
- Bump the dependency only for modules which directly depend on it.
|
||||
- Bump the dependency only for modules that directly depend on it.
|
||||
|
||||
We should try to follow the first way, and temporarily fall back to the second one if we run into any issue on the first way. Eventually we
|
||||
should fix the issue and ensure all modules depend on the same version of the dependency.
|
||||
@ -98,27 +98,27 @@ Please refer to [build(deps): bump arduino/setup-protoc from 1.3.0 to 2.0.0](htt
|
||||
### Rotation worksheet
|
||||
|
||||
The dependabot scheduling interval is weekly; it means dependabot will automatically raise a bunch of PRs per week.
|
||||
Usually human intervention is required each time. We have a [rotation worksheet](https://docs.google.com/spreadsheets/d/1jodHIO7Dk2VWTs1IRnfMFaRktS9IH8XRyifOnPdSY8I/edit#gid=1394774387),
|
||||
Usually, human intervention is required each time. We have a [rotation worksheet](https://docs.google.com/spreadsheets/d/1jodHIO7Dk2VWTs1IRnfMFaRktS9IH8XRyifOnPdSY8I/edit#gid=1394774387),
|
||||
and everyone is welcome to participate; you just need to register your name in the worksheet.
|
||||
|
||||
## Stable branches
|
||||
|
||||
Usually we don't proactively bump dependencies for stable releases unless there are any CVEs or bugs that affect etcd.
|
||||
Usually, we don't proactively bump dependencies for stable releases unless there are any CVEs or bugs that affect etcd.
|
||||
|
||||
If we have to do it, then follow the same guidance above. Note that there is no `./scripts/fix.sh` in release-3.4, so no need to
|
||||
execute it for 3.4.
|
||||
|
||||
## Golang versions
|
||||
|
||||
The etcd project aims to maintain a development branch that is on the latest [Go version](https://go.dev/dl), ideally this will align with the Go version in use for Kubernetes project development. For an example on how to update etcd to a new minor release of Go refer to issue <https://github.com/etcd-io/etcd/issues/16393> and the linked pull requests.
|
||||
The etcd project aims to maintain a development branch that is on the latest [Go version](https://go.dev/dl), ideally, this will align with the Go version in use for Kubernetes project development. For an example of how to update etcd to a new minor release of Go refer to issue <https://github.com/etcd-io/etcd/issues/16393> and the linked pull requests.
|
||||
|
||||
Suggested steps for performing a minor version upgrade for the etcd development branch:
|
||||
|
||||
1. Carefully review new Go version release notes and potentially related blog for any deprecations, performance impacts or other considerations.
|
||||
2. Create a github issue to signal intent to upgrade and invite discussion, example <https://github.com/etcd-io/etcd/issues/16393>.
|
||||
1. Carefully review new Go version release notes and potentially related blog posts for any deprecations, performance impacts, or other considerations.
|
||||
2. Create a GitHub issue to signal intent to upgrade and invite discussion, for example, <https://github.com/etcd-io/etcd/issues/16393>.
|
||||
3. Complete the upgrade locally in your development environment.
|
||||
4. Run performance benchmarks locally to compare before and after.
|
||||
5. Raise a pull request for the changes, example <https://github.com/etcd-io/etcd/pull/16394>.
|
||||
5. Raise a pull request for the changes, for example, <https://github.com/etcd-io/etcd/pull/16394>.
|
||||
|
||||
Stable etcd release branches will be maintained to stay on the latest patch release of a supported Go version. Upgrading minor versions will be completed before the minor version in use currently is no longer supported. Refer to the [Go release policy](https://go.dev/doc/devel/release).
|
||||
|
||||
|
@ -12,8 +12,8 @@ Any new feature is usually added as an experimental feature. An experimental fea
|
||||
- Might be buggy due to a lack of user testing. Enabling the feature may not work as expected.
|
||||
- Disabled by default when added initially.
|
||||
- Support for such a feature may be dropped at any time without notice
|
||||
- Feature related issues may be given lower priorities.
|
||||
- It can be removed in the next minor or major release without following the feature deprecation policy unless it graduates to the stable future.
|
||||
- Feature-related issues may be given lower priorities.
|
||||
- It can be removed in the next minor or major release without following the feature deprecation policy unless it graduates to a stable future.
|
||||
|
||||
### Stable
|
||||
|
||||
@ -24,21 +24,21 @@ A stable feature is characterized as below:
|
||||
|
||||
### Unsafe
|
||||
|
||||
Unsafe features are rare and listed under the `Unsafe feature:` section in the etcd usage documentation. By default, they are disabled. They should be used with caution following documentation. An unsafe feature can be removed in the next minor or major release without following feature deprecation policy.
|
||||
Unsafe features are rare and listed under the `Unsafe feature:` section in the etcd usage documentation. By default, they are disabled. They should be used with caution following documentation. An unsafe feature can be removed in the next minor or major release without following the feature deprecation policy.
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
### Adding a new feature
|
||||
|
||||
Any new enhancements to the etcd are typically added as an experimental feature. 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.
|
||||
Any new enhancements to the etcd are typically added as an experimental feature. 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.
|
||||
- Open an issue
|
||||
- It must provide a clear need for the proposed feature.
|
||||
- It should list development work items as checkboxes. There must be one work item towards future graduation to the stable future.
|
||||
- It should list development work items as checkboxes. There must be one work item towards future graduation to a stable future.
|
||||
- Label the issue with `type/feature` and `experimental`.
|
||||
- Keep the issue open for tracking purpose until a decision is made on graduation.
|
||||
- Keep the issue open for tracking purposes until a decision is made on graduation.
|
||||
- Open a Pull Request (PR)
|
||||
- Provide unit tests. Integreation tests are also recommended as possible.
|
||||
- Provide robust e2e test coverage. If the feature being added is complicated or quickly needed, maintainers can decide to go with e2e tests for basic coverage initially and have robust coverage added at the later time before feature graduation to the stable feature.
|
||||
- Provide unit tests. Integration tests are also recommended as possible.
|
||||
- Provide robust e2e test coverage. If the feature being added is complicated or quickly needed, maintainers can decide to go with e2e tests for basic coverage initially and have robust coverage added at a later time before the feature graduation to the stable feature.
|
||||
- Provide logs for proper debugging.
|
||||
- Provide metrics and benchmarks as needed.
|
||||
- The Feature should be disabled by default.
|
||||
@ -54,7 +54,7 @@ It is important that experimental features don't get stuck in that stage. They s
|
||||
Decide if an experimental feature is ready for graduation to the stable stage.
|
||||
- Find the issue that was used to enable the experimental feature initially. One way to find such issues is to search for issues with `type/feature` and `experimental` labels.
|
||||
- Fix any known open issues against the feature.
|
||||
- Make sure the feature was enabled for at least one previous release. Check the PR(s) reference from the issue to see when the feature related code changes were merged.
|
||||
- Make sure the feature was enabled for at least one previous release. Check the PR(s) reference from the issue to see when the feature-related code changes were merged.
|
||||
|
||||
#### Provide implementation
|
||||
If an experimental feature is found ready for graduation to the stable stage, open a Pull Request (PR) with the following changes.
|
||||
@ -70,12 +70,12 @@ At least two maintainers must approve the work. Patch releases should not be con
|
||||
|
||||
#### Experimental
|
||||
An experimental feature deprecates when it graduates to the stable stage.
|
||||
- Add a deprecation message in the documentation of the experimental feature with a recommendation to use related stable feature. e.g. `DEPRECATED. Use <feature-name> instead.`
|
||||
- Add a deprecation message in the documentation of the experimental feature with a recommendation to use a related stable feature. e.g. `DEPRECATED. Use <feature-name> instead.`
|
||||
- Add a `deprecated` label in the issue that was initially used to enable the experimental feature.
|
||||
|
||||
#### Stable
|
||||
As the project evolves, a stable feature may sometimes need to be deprecated and removed. Such a situation should be handled using the steps below:
|
||||
- Create an issue for tracking purpose.
|
||||
- Create an issue for tracking purposes.
|
||||
- Add a deprecation message in the feature usage documentation before a planned release for feature deprecation. e.g. `To be deprecated in <release>.`. If a new feature replaces the `To be deprecated` feature, then also provide a message saying so. e.g. `Use <feature-name> instead.`.
|
||||
- Deprecate the feature in the planned release with a message as part of the feature usage documentation. e.g. `DEPRECATED`. If a new feature replaces the deprecated feature, then also provide a message saying so. e.g. `DEPRECATED. Use <feature-name> instead.`.
|
||||
- Add a `deprecated` label in the related issue.
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Set up local cluster
|
||||
# Set up the local cluster
|
||||
|
||||
For testing and development deployments, the quickest and easiest way is to configure a local cluster. For a production deployment, refer to the [clustering][clustering] section.
|
||||
|
||||
@ -28,7 +28,7 @@ Use `etcdctl` to interact with the running cluster:
|
||||
OK
|
||||
```
|
||||
|
||||
If OK is printed, storing key-value pair is successful.
|
||||
If OK is printed, storing the key-value pair is successful.
|
||||
|
||||
2. Retrieve the value of `foo`:
|
||||
|
||||
@ -69,7 +69,7 @@ Use `etcdctl` to interact with the running cluster:
|
||||
```
|
||||
$ etcdctl --write-out=table --endpoints=localhost:2379 member list
|
||||
```
|
||||
The list of etcd members are displayed as follows:
|
||||
The list of etcd members is displayed as follows:
|
||||
|
||||
```
|
||||
+------------------+---------+--------+------------------------+------------------------+
|
||||
@ -88,7 +88,7 @@ Use `etcdctl` to interact with the running cluster:
|
||||
OK
|
||||
```
|
||||
|
||||
If OK is printed, storing key-value pair is successful.
|
||||
If OK is printed, storing the key-value pair is successful.
|
||||
|
||||
### Testing fault tolerance
|
||||
|
||||
@ -144,7 +144,7 @@ To exercise etcd's fault tolerance, kill a member and attempt to retrieve the ke
|
||||
hello
|
||||
```
|
||||
|
||||
Restarting the member re-establish the connection. `etcdctl` will now be able to retrieve the key successfully. To learn more about interacting with etcd, read [interacting with etcd section][interacting].
|
||||
Restarting the member re-establishs the connection. `etcdctl` will now be able to retrieve the key successfully. To learn more about interacting with etcd, read [interacting with etcd section][interacting].
|
||||
|
||||
[clustering]: https://etcd.io/docs/latest/op-guide/clustering/
|
||||
[interacting]: https://etcd.io/docs/latest/dev-guide/interacting_v3/
|
||||
|
@ -7,14 +7,14 @@ etcd uses the [zap][zap] library for logging application output categorized into
|
||||
* Send a normal message to a remote peer
|
||||
* Write a log entry to disk
|
||||
|
||||
* Info: Normal, working log information, everything is fine, but helpful notices for auditing or common operations. Should rather not be logged more frequently than once per a few seconds in normal server's operation.
|
||||
* Info: Normal, working log information, everything is fine, but helpful notices for auditing or common operations. Should rather not be logged more frequently than once per a few seconds in a normal server's operation.
|
||||
* Examples:
|
||||
* Startup configuration
|
||||
* Start to do snapshot
|
||||
* Start to do a snapshot
|
||||
|
||||
* Warning: (Hopefully) Temporary conditions that may cause errors, but may work fine. A replica disappearing (that may reconnect) is a warning.
|
||||
* Examples:
|
||||
* Failure to send raft message to a remote peer
|
||||
* Failure to send a raft message to a remote peer
|
||||
* Failure to receive heartbeat message within the configured election timeout
|
||||
|
||||
* Error: Data has been lost, a request has failed for a bad reason, or a required resource has been lost.
|
||||
|
@ -5,17 +5,17 @@ The etcd project (since version 3.5) is organized into multiple
|
||||
|
||||

|
||||
|
||||
There are following modules:
|
||||
There are the following modules:
|
||||
|
||||
- **go.etcd.io/etcd/api/v3** - contains API definitions
|
||||
(like protos & proto-generated libraries) that defines communication protocol
|
||||
between etcd clients and server.
|
||||
between etcd clients and servers.
|
||||
|
||||
- **go.etcd.io/etcd/pkg/v3** - collection of utility packages used by etcd
|
||||
- **go.etcd.io/etcd/pkg/v3** - a collection of utility packages used by etcd
|
||||
without being specific to etcd itself. A package belongs here
|
||||
only if it could possibly be moved out into its own repository in the future.
|
||||
Please avoid adding here code that has a lot of dependencies on its own, as
|
||||
they automatically becoming dependencies of the client library
|
||||
they automatically become dependencies of the client library
|
||||
(that we want to keep lightweight).
|
||||
|
||||
- **go.etcd.io/etcd/client/v3** - client library used to contact etcd over
|
||||
@ -26,14 +26,14 @@ There are following modules:
|
||||
https://github.com/etcd-io/raft.
|
||||
|
||||
- **go.etcd.io/etcd/server/v3** - etcd implementation.
|
||||
The code in this package is etcd internal and should not be consumed
|
||||
The code in this package is internal to etcd and should not be consumed
|
||||
by external projects. The package layout and API can change within the minor versions.
|
||||
|
||||
- **go.etcd.io/etcd/etcdctl/v3** - a command line tool to access and manage etcd.
|
||||
|
||||
- **go.etcd.io/etcd/tests/v3** - a module that contains all integration tests of etcd.
|
||||
Notice: All unit-tests (fast and not requiring cross-module dependencies)
|
||||
should be kept in the local modules to the code under the test.
|
||||
Notice: All unit tests (fast and not requiring cross-module dependencies)
|
||||
should be kept in the local modules of the code under the test.
|
||||
|
||||
- **go.etcd.io/bbolt** - implementation of persistent b-tree.
|
||||
Hosted in a separate repository: https://github.com/etcd-io/bbolt.
|
||||
@ -44,7 +44,7 @@ There are following modules:
|
||||
1. All etcd modules should be released in the same versions, e.g.
|
||||
`go.etcd.io/etcd/client/v3@v3.5.10` must depend on `go.etcd.io/etcd/api/v3@v3.5.10`.
|
||||
|
||||
The consistent updating of versions can by performed using:
|
||||
The consistent updating of versions can be performed using:
|
||||
```shell script
|
||||
% DRY_RUN=false TARGET_VERSION="v3.5.10" ./scripts/release_mod.sh update_versions
|
||||
```
|
||||
@ -76,7 +76,7 @@ There are following modules:
|
||||
|
||||
### Future
|
||||
|
||||
As a North Star, we would like to evaluate etcd modules towards following model:
|
||||
As a North Star, we would like to evaluate etcd modules towards the following model:
|
||||
|
||||

|
||||
|
||||
|
@ -6,7 +6,7 @@ The procedure includes some manual steps for sanity checking, but it can probabl
|
||||
|
||||
## Release management
|
||||
|
||||
The following pool of release candidates manage the release each etcd major/minor version as well as manage patches
|
||||
The following pool of release candidates manages the release of each etcd major/minor version as well as manages patches
|
||||
to each stable release branch. They are responsible for communicating the timelines and status of each release and
|
||||
for ensuring the stability of the release branch.
|
||||
|
||||
@ -16,27 +16,27 @@ for ensuring the stability of the release branch.
|
||||
- Sahdev Zala [@spzala](https://github.com/spzala)
|
||||
- Wenjia Zhang [@wenjiaswe](https://github.com/wenjiaswe)
|
||||
|
||||
All releases version numbers follow the format of [semantic versioning 2.0.0](http://semver.org/).
|
||||
All release version numbers follow the format of [semantic versioning 2.0.0](http://semver.org/).
|
||||
|
||||
### Major, minor version release, or its pre-release
|
||||
|
||||
- Ensure the relevant milestone on GitHub is complete. All referenced issues should be closed, or moved elsewhere.
|
||||
- Ensure the relevant milestone on GitHub is complete. All referenced issues should be closed or moved elsewhere.
|
||||
- Ensure the latest upgrade documentation is available.
|
||||
- Bump [hardcoded MinClusterVerion in the repository](https://github.com/etcd-io/etcd/blob/v3.4.15/version/version.go#L29), if necessary.
|
||||
- Add feature capability maps for the new version, if necessary.
|
||||
|
||||
### Patch version release
|
||||
|
||||
- To request a backport, devlopers submit cherrypick PRs targeting the release branch. The commits should not include merge commits. The commits should be restricted to bug fixes and security patches.
|
||||
- To request a backport, developers submit cherry-pick PRs targeting the release branch. The commits should not include merge commits. The commits should be restricted to bug fixes and security patches.
|
||||
- The cherrypick PRs should target the appropriate release branch (`base:release-<major>-<minor>`). `hack/patch/cherrypick.sh` may be used to automatically generate cherrypick PRs.
|
||||
- The release patch manager reviews the cherrypick PRs. Please discuss carefully what is backported to the patch release. Each patch release should be strictly better than it's predecessor.
|
||||
- The release patch manager reviews the cherrypick PRs. Please discuss carefully what is backported to the patch release. Each patch release should be strictly better than its predecessor.
|
||||
- The release patch manager will cherry-pick these commits starting from the oldest one into stable branch.
|
||||
|
||||
## Write release note
|
||||
## Write a release note
|
||||
|
||||
- Write introduction for the new release. For example, what major bug we fix, what new features we introduce or what performance improvement we make.
|
||||
- Put `[GH XXXX]` at the head of change line to reference Pull Request that introduces the change. Moreover, add a link on it to jump to the Pull Request.
|
||||
- Find PRs with `release-note` label and explain them in `NEWS` file, as a straightforward summary of changes for end-users.
|
||||
- Write an introduction for the new release. For example, what major bug we fix, what new features we introduce, or what performance improvement we make.
|
||||
- Put `[GH XXXX]` at the head of the change line to reference the Pull Request that introduces the change. Moreover, add a link on it to jump to the Pull Request.
|
||||
- Find PRs with the `release-note` label and explain them in the `NEWS` file, as a straightforward summary of changes for end-users.
|
||||
|
||||
## Patch release criteria
|
||||
|
||||
@ -51,13 +51,13 @@ The etcd project aims to release a new patch version if any of the following con
|
||||
|
||||
### Prerequisites
|
||||
|
||||
There are some prerequisites, which should be done before the release process. These are one time operations,
|
||||
There are some prerequisites, which should be done before the release process. These are one-time operations,
|
||||
which don't need to be executed before releasing each version.
|
||||
1. Generate a GPG key and add it to your github account. Refer to the links on [settings](https://github.com/settings/keys).
|
||||
2. Ensure you have a Linux machine, on which the git, golang and docker have been installed.
|
||||
- Ensure the golang version matches the version defined in `.go-version` file.
|
||||
1. Generate a GPG key and add it to your GitHub account. Refer to the links on [settings](https://github.com/settings/keys).
|
||||
2. Ensure you have a Linux machine, on which the git, Golang, and docker have been installed.
|
||||
- Ensure the Golang version matches the version defined in `.go-version` file.
|
||||
- Ensure non-privileged users can run docker commands, refer to the [Linux postinstall](https://docs.docker.com/engine/install/linux-postinstall/).
|
||||
- Ensure there is at least 500MB free space on your Linux machine.
|
||||
- Ensure there is at least 500MB of free space on your Linux machine.
|
||||
3. Install gsutil, refer to [gsutil_install](https://cloud.google.com/storage/docs/gsutil_install).
|
||||
4. Authenticate the image registry, refer to [Authentication methods](https://cloud.google.com/container-registry/docs/advanced-authentication).
|
||||
- `gcloud auth login`
|
||||
@ -65,7 +65,7 @@ which don't need to be executed before releasing each version.
|
||||
|
||||
### Release steps
|
||||
|
||||
1. Raise an issue to public the release plan, e.g. [issues/17350](https://github.com/etcd-io/etcd/issues/17350).
|
||||
1. Raise an issue to publish the release plan, e.g. [issues/17350](https://github.com/etcd-io/etcd/issues/17350).
|
||||
2. Verify you can pass the authentication to the image registries,
|
||||
- `docker login gcr.io`
|
||||
- `docker login quay.io`
|
||||
@ -75,10 +75,10 @@ which don't need to be executed before releasing each version.
|
||||
4. Run the release script under the repository's root directory, replacing `${VERSION}` with a value without the `v` prefix, i.e. `3.5.13`.
|
||||
- `DRY_RUN=false ./scripts/release.sh ${VERSION}`
|
||||
|
||||
It generates all release binaries under directory `./release` and images. Binaries are pushed to the google cloud bucket
|
||||
It generates all release binaries under the directory `./release` and images. Binaries are pushed to the Google Cloud bucket
|
||||
under project `etcd-development`, and images are pushed to `quay.io` and `gcr.io`.
|
||||
5. Publish release page in Github
|
||||
- Set release title as the version name
|
||||
5. Publish the release page on GitHub
|
||||
- Set the release title as the version name
|
||||
- Follow the format of previous release pages
|
||||
- Attach the generated binaries and signature file
|
||||
- Select whether it's a pre-release
|
||||
@ -98,13 +98,13 @@ Thanks to everyone who contributed to the release!
|
||||
etcd team
|
||||
```
|
||||
7. Update the changelog to reflect the correct release date.
|
||||
8. Paste the release link to the issue raised at step 1 and close the issue.
|
||||
8. Paste the release link to the issue raised in Step 1 and close the issue.
|
||||
9. Crease a new stable branch through `git push origin release-${VERSION_MAJOR}.${VERSION_MINOR}` if this is a new major or minor stable release.
|
||||
|
||||
#### Release known issues
|
||||
|
||||
1. Timeouts pushing binaries - If binaries fail to fully upload to google cloud storage, the script must be re-run using the same command. Any artifacts that already pushed will be overwritten to ensure they are correct. The storage bucket does not use object versioning so there no possibility for incorrect files to remain.
|
||||
1. Timeouts pushing binaries - If binaries fail to fully upload to Google Cloud storage, the script must be re-run using the same command. Any artifacts that are already pushed will be overwritten to ensure they are correct. The storage bucket does not use object versioning so incorrect files cannot remain.
|
||||
|
||||
2. Timeouts pushing images - It is rare, although possible for connection timeouts to occur when publishing etcd release images to `quay.io` or `gcr.io`. If this occurs, it is known to be safe to rerun the release script command appending the `--no-upload` flag and image uploads will gracefully resume.
|
||||
2. Timeouts pushing images - It is rare, although possible for connection timeouts to occur when publishing etcd release images to `quay.io` or `gcr.io`. If this occurs, it is known to be safe to rerun the release script command appending the `--no-upload` flag, and image uploads will gracefully resume.
|
||||
|
||||
3. GPG vs SSH signing - The release scripts assume that git tags will be signed with a GPG key. Since 2022 GitHub has supported [signing commits and tags using ssh](https://github.blog/changelog/2022-08-23-ssh-commit-verification-now-supported). Until further release script updates are completed you will need to disable this feature in your `~/.gitconfig` and revert to signing via GPG to perform etcd releases.
|
||||
|
@ -4,13 +4,13 @@ If any part of the etcd project has bugs or documentation mistakes, please let u
|
||||
|
||||
To make the bug report accurate and easy to understand, please try to create bug reports that are:
|
||||
|
||||
- Specific. Include as much details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with etcd configuration is especially important).
|
||||
- Specific. Include as many details as possible: which version, what environment, what configuration, etc. If the bug is related to running the etcd server, please attach the etcd log (the starting log with the etcd configuration is especially important).
|
||||
|
||||
- Reproducible. Include the steps to reproduce the problem. We understand some issues might be hard to reproduce, please includes the steps that might lead to the problem. If possible, please attach the affected etcd data dir and stack strace to the bug report.
|
||||
- Reproducible. Include the steps to reproduce the problem. We understand some issues might be hard to reproduce, please include the steps that might lead to the problem. If possible, please attach the affected etcd data dir and stack trace to the bug report.
|
||||
|
||||
- Isolated. Please try to isolate and reproduce the bug with minimum dependencies. It would significantly slow down the speed to fix a bug if too many dependencies are involved in a bug report. Debugging external systems that rely on etcd is out of scope, but we are happy to provide guidance in the right direction or help with using etcd itself.
|
||||
|
||||
- Unique. Do not duplicate existing bug report.
|
||||
- Unique. Do not duplicate existing bug reports.
|
||||
|
||||
- Scoped. One bug per report. Do not follow up with another bug inside one report.
|
||||
|
||||
@ -26,7 +26,7 @@ We might ask for further information to locate a bug. A duplicated bug report wi
|
||||
$ kill -QUIT $PID
|
||||
```
|
||||
|
||||
### How to get etcd version
|
||||
### How to get the etcd version
|
||||
|
||||
``` bash
|
||||
$ etcd --version
|
||||
@ -39,7 +39,7 @@ $ sudo systemctl cat etcd2
|
||||
$ sudo journalctl -u etcd2
|
||||
```
|
||||
|
||||
Due to an upstream systemd bug, journald may miss the last few log lines when its processes exit. If journalctl says etcd stopped without fatal or panic message, try `sudo journalctl -f -t etcd2` to get full log.
|
||||
Due to an upstream systemd bug, journald may miss the last few log lines when its processes exit. If journalctl says etcd stopped without a fatal or panic message, try `sudo journalctl -f -t etcd2` to get the full log.
|
||||
|
||||
[etcd-issue]: https://github.com/etcd-io/etcd/issues/new
|
||||
[filing-good-bugs]: http://fantasai.inkedblade.net/style/talks/filing-good-bugs/
|
||||
|
@ -1,9 +1,9 @@
|
||||
# Roadmap
|
||||
|
||||
etcd uses GitHub milestones to track all tasks in each major or minor release. The `roadmap.md` file only records the
|
||||
most important tasks for each release. The list is based on current maintainers capacity that may shift over time.
|
||||
Proposed milestones is what we think we can deliver with people we have. If we have more support on the important
|
||||
stuff, we could pick up more items from backlog. Note that etcd will continue to mainly focus on technical debt over
|
||||
most important tasks for each release. The list is based on the current maintainer capacity that may shift over time.
|
||||
Proposed milestones are what we think we can deliver with the people we have. If we have more support on the important
|
||||
stuff, we could pick up more items from the backlog. Note that etcd will continue to mainly focus on technical debt over
|
||||
the next few major or minor releases.
|
||||
|
||||
Each item has an assigned priority. Refer to [priority definitions](https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/triage_issues.md#step-5---prioritise-the-issue).
|
||||
@ -18,7 +18,7 @@ For a full list of tasks in `v3.6.0`, please see [milestone etcd-v3.6](https://g
|
||||
| [StoreV2 deprecation](https://github.com/etcd-io/etcd/issues/12913) | priority/important-soon | In progress | This task will be covered in both 3.6 and 3.7. |
|
||||
| [Release raft 3.6.0](https://github.com/etcd-io/raft/issues/89) | priority/important-soon | Not started | etcd 3.6.0 will depends on raft 3.6.0 |
|
||||
| [Release bbolt 1.4.0](https://github.com/etcd-io/bbolt/issues/553) | priority/important-soon | Not started | etcd 3.6.0 will depends on bbolt 1.4.0 |
|
||||
| [Support /livez and /readyz endpoints](https://github.com/etcd-io/etcd/issues/16007) | priority/important-longterm | In progress | It provides clearer APIs, and can also workaround the stalled writes issue |
|
||||
| [Support /livez and /readyz endpoints](https://github.com/etcd-io/etcd/issues/16007) | priority/important-longterm | In progress | It provides clearer APIs, and can also work around the stalled writes issue |
|
||||
| [Bump gRPC](https://github.com/etcd-io/etcd/issues/16290) | priority/important-longterm | Completed | It isn't guaranteed to be resolved in 3.6, and might be postponed to 3.7 depending on the effort and risk. |
|
||||
| [Deprecate grpc-gateway or bump it](https://github.com/etcd-io/etcd/issues/14499) | priority/important-longterm | Completed | It isn't guaranteed to be resolved in 3.6, and might be postponed to 3.7 depending on the effort and risk. |
|
||||
| [bbolt: Add logger into bbolt](https://github.com/etcd-io/bbolt/issues/509) | priority/important-longterm | Completed | It's important to diagnose bbolt issues |
|
||||
@ -33,7 +33,7 @@ For a full list of tasks in `v3.7.0`, please see [milestone etcd-v3.7](https://g
|
||||
|-------------------------------------------------------------------------------------------------------------------|----------|-----------------------------------------------------------------------------------|
|
||||
| [StoreV2 deprecation](https://github.com/etcd-io/etcd/issues/12913) | P0 | Finish the remaining tasks 3.7. |
|
||||
| [Refactor lease: Lease might be revoked by mistake by old leader](https://github.com/etcd-io/etcd/issues/15247) | P1 | to be investigated & discussed |
|
||||
| [Integrate raft's new feature (async write) into etcd](https://github.com/etcd-io/etcd/issues/16291) | P1 | It should can improve the performance |
|
||||
| [Integrate raft's new feature (async write) into etcd](https://github.com/etcd-io/etcd/issues/16291) | P1 | It should improve the performance |
|
||||
| [bbolt: Support customizing the bbolt rebalance threshold](https://github.com/etcd-io/bbolt/issues/422) | P2 | It may get rid of etcd's defragmentation. Both bbolt and etcd need to be changed. |
|
||||
| [Evaluate and (graduate or deprecate/remove) experimental features](https://github.com/etcd-io/etcd/issues/16292) | P2 | Finish the remaining tasks 3.7. |
|
||||
|
||||
|
@ -4,19 +4,19 @@
|
||||
|
||||
Speed up issue management.
|
||||
|
||||
The `etcd` issues are listed at <https://github.com/etcd-io/etcd/issues> and are identified with labels. For example, an issue that is identified as a bug will be set to label `type/bug`.
|
||||
The `etcd` issues are listed at <https://github.com/etcd-io/etcd/issues> and are identified with labels. For example, an issue that is identified as a bug will be set to the label `type/bug`.
|
||||
|
||||
The etcd project uses labels to indicate common attributes such as `area`, `type` and `priority` of incoming issues.
|
||||
The etcd project uses labels to indicate common attributes such as `area`, `type`, and `priority` of incoming issues.
|
||||
|
||||
New issues will often start out without any labels, but typically `etcd` maintainers, reviewers and members will add labels by following these triage guidelines. The detailed list of labels can be found at <https://github.com/etcd-io/etcd/labels>.
|
||||
New issues will often start without any labels, but typically `etcd` maintainers, reviewers, and members will add labels by following these triage guidelines. The detailed list of labels can be found at <https://github.com/etcd-io/etcd/labels>.
|
||||
|
||||
## Scope
|
||||
|
||||
This document serves as the primary guidelines for triaging incoming issues in `etcd`.
|
||||
|
||||
All contributors are encouraged and welcome to help manage issues which will help reduce burden on project maintainers, though the work and responsibilities discussed in this document are created with `etcd` project reviewers and members in mind as these individuals will have triage access to the etcd project which is a requirement for actions like applying labels or closing issues.
|
||||
All contributors are encouraged and welcome to help manage issues which will help reduce the burden on project maintainers, though the work and responsibilities discussed in this document are created with `etcd` project reviewers and members in mind as these individuals will have triage access to the etcd project which is a requirement for actions like applying labels or closing issues.
|
||||
|
||||
Refer to [etcd community membership](https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/community-membership.md) for guidance on becoming and etcd project member or reviewer.
|
||||
Refer to [etcd community membership](https://github.com/etcd-io/etcd/blob/main/Documentation/contributor-guide/community-membership.md) for guidance on becoming an etcd project member or reviewer.
|
||||
|
||||
## Step 1 - Find an issue to triage
|
||||
|
||||
@ -34,33 +34,33 @@ Before we start adding labels or trying to work out a priority, our first triage
|
||||
|
||||
### Issues that don't belong to etcd
|
||||
|
||||
Sometime issues are reported that actually belongs to other projects that `etcd` use. For example, `grpc` or `golang` issues. Such issues should be addressed by asking reporter to open issues in appropriate other project.
|
||||
Sometimes issues are reported that belong to other projects that `etcd` use. For example, `grpc` or `golang` issues. Such issues should be addressed by asking the reporter to open issues in the appropriate other projects.
|
||||
|
||||
These issues can generally be closed unless a maintainer and issue reporter see a need to keep it open for tracking purpose. If you have triage permissions please close it, alternatively mention the @etcd-io/members group to request a member with triage access close the issue.
|
||||
These issues can generally be closed unless a maintainer and issue reporter see a need to keep it open for tracking purposes. If you have triage permissions please close it, alternatively mention the @etcd-io/members group to request a member with triage access to close the issue.
|
||||
|
||||
### Duplicate issues
|
||||
|
||||
If an issue is a duplicate, add a comment stating so along with a reference for the original issue and if you have triage permissions please close it, alternatively mention the @etcd-io/members group to request a member with triage access close the issue.
|
||||
|
||||
## Step 3 - Apply the appropriate type label
|
||||
## Step 3 - Apply the appropriate type of label
|
||||
|
||||
Adding a `type` label to an issue helps create visibility on the health of the project and helps contributors identify potential priorities, i.e. addressing existing bugs or test flakes before implementing new features.
|
||||
|
||||
### Support requests
|
||||
|
||||
As a general rule the focus for etcd support is to address common themes in a broad way that helps all users, i.e. through channels like known issues, frequently asked questions and high quality documentation. To make the best use of project members time we should avoid providing 1:1 support if a broad approach is available.
|
||||
As a general rule, the focus for etcd support is to address common themes in a broad way that helps all users, i.e. through channels like known issues, frequently asked questions, and high-quality documentation. To make the best use of project members time we should avoid providing 1:1 support if a broad approach is available.
|
||||
|
||||
Some people mistakenly use our GitHub bug report or feature request templates to file support requests. Usually they are asking for help operating or configuring some aspect of etcd. Support requests for etcd should instead be raised as [discussions](https://github.com/etcd-io/etcd/discussions).
|
||||
Some people mistakenly use our GitHub bug report or feature request templates to file support requests. Usually, they are asking for help operating or configuring some aspect of etcd. Support requests for etcd should instead be raised as [discussions](https://github.com/etcd-io/etcd/discussions).
|
||||
|
||||
Common types of support requests are:
|
||||
|
||||
1. Questions about configuring or operating existing well documented etcd features, for example <https://github.com/etcd-io/etcd/issues/15945>. Note - If an existing feature is not well documented please apply the `area/documentation` label and propose documentation improvements that would prevent future users from stumbling on the problem again.
|
||||
1. Questions about configuring or operating existing well-documented etcd features, for example, <https://github.com/etcd-io/etcd/issues/15945>. Note - If an existing feature is not well documented please apply the `area/documentation` label and propose documentation improvements that would prevent future users from stumbling on the problem again.
|
||||
|
||||
2. Bug reports or questions about unspported versions of etcd, for example <https://github.com/etcd-io/etcd/issues/15796>. When responding to these issues please refer to our [supported versions documentation](https://etcd.io/docs/latest/op-guide/versioning) and encourage the reporter to upgrade to a recent patch release of a supported version as soon as possible. We should limit the effort supporting users that do not make the effort to run a supported version of etcd or ensure their version is patched.
|
||||
2. Bug reports or questions about unsupported versions of etcd, for example <https://github.com/etcd-io/etcd/issues/15796>. When responding to these issues please refer to our [supported versions documentation](https://etcd.io/docs/latest/op-guide/versioning) and encourage the reporter to upgrade to a recent patch release of a supported version as soon as possible. We should limit the effort supporting users that do not make the effort to run a supported version of etcd or ensure their version is patched.
|
||||
|
||||
3. Bug reports that do not provide a complete list of steps to reproduce issue and/or contributors are not able to reproduce the issue, for example <https://github.com/etcd-io/etcd/issues/15740>. We should limit the effort we put into reproducing issues ourselves and motivate users to provide necessary information to accept the bug report.
|
||||
3. Bug reports that do not provide a complete list of steps to reproduce the issue and/or contributors are not able to reproduce the issue, for example, <https://github.com/etcd-io/etcd/issues/15740>. We should limit the effort we put into reproducing issues ourselves and motivate users to provide the necessary information to accept the bug report.
|
||||
|
||||
4. General questions that are filed using feature request or bug report issue templates, for example <https://github.com/etcd-io/etcd/issues/15914>. Note - These types of requests may surface good additions to our [frequently asked questions](https://etcd.io/docs/v3.5/faq).
|
||||
4. General questions that are filed using feature request or bug report issue templates, for example, <https://github.com/etcd-io/etcd/issues/15914>. Note - These types of requests may surface good additions to our [frequently asked questions](https://etcd.io/docs/v3.5/faq).
|
||||
|
||||
If you identify that an issue is a support request please:
|
||||
|
||||
@ -70,7 +70,7 @@ If you identify that an issue is a support request please:
|
||||
|
||||
> Thank you for your question, this support issue will be moved to our [Discussion Forums](https://github.com/etcd-io/etcd/discussions).
|
||||
>
|
||||
> We are trying to consolidate the channels to which questions for help/support are posted so that we can improve our efficiency in responding to your requests, and to make it easier for you to find answers to frequently asked questions and how to address common use cases.
|
||||
> We are trying to consolidate the channels to which questions for help/support are posted so that we can improve our efficiency in responding to your requests, and make it easier for you to find answers to frequently asked questions and how to address common use cases.
|
||||
>
|
||||
> We regularly see messages posted in multiple forums, with the full response thread only in one place or, worse, spread across multiple forums. Also, the large volume of support issues on GitHub is making it difficult for us to use issues to identify real bugs.
|
||||
>
|
||||
@ -83,23 +83,23 @@ If you identify that an issue is a support request please:
|
||||
>
|
||||
> The etcd team
|
||||
|
||||
3. Finally, click `Convert to discussion` on the right hand panel, selecting the appropriate discussion category.
|
||||
3. Finally, click `Convert to discussion` on the right-hand panel, selecting the appropriate discussion category.
|
||||
|
||||
### Bug reports
|
||||
|
||||
If an issue has been raised as a bug it should already have the `type/bug` label, however if this is missing for an issue you determine to be a bug please add the label manually.
|
||||
If an issue has been raised as a bug it should already have the `type/bug` label, however, if this is missing for an issue you determine to be a bug please add the label manually.
|
||||
|
||||
The next step is to validate if the issue is indeed a bug. If not, add a comment with findings and close trivial issue. For non-trivial issue, wait to hear back from issue reporter and see if there is any objection. If issue reporter does not reply in 30 days, close the issue.
|
||||
The next step is to validate if the issue is indeed a bug. If not, add a comment with the findings and close the trivial issue. For non-trivial issues, wait to hear back from the issue reporter and see if there is any objection. If the issue reporter does not reply in 30 days, close the issue.
|
||||
|
||||
If the problem can not be reproduced or requires more information, leave a comment for the issue reporter as soon as possible while the issue will be fresh for the issue reporter.
|
||||
If the problem can not be reproduced or requires more information, leave a comment for the issue reporter as soon as possible while the issue is fresh for the issue reporter.
|
||||
|
||||
### Feature requests
|
||||
|
||||
New feature requests should be created via the etcd feature request template and in theory already have the `type/feature` label, however if this is missing for an issue you determine to be a feature please add the label manually.
|
||||
New feature requests should be created via the etcd feature request template and in theory already have the `type/feature` label, however, if this is missing for an issue you determine to be a feature please add the label manually.
|
||||
|
||||
### Test flakes
|
||||
|
||||
Test flakes are a specific type of bug that the etcd project tracks separately as these are a priority to address. These should be created via the test flake template and in theory already have the `type/flake` label, however if this is missing for an issue you determine to be related to a flaking test please add the label manually.
|
||||
Test flakes are a specific type of bug that the etcd project tracks separately as these are a priority to address. These should be created via the test flake template and in theory already have the `type/flake` label, however, if this is missing for an issue you determine to be related to a flaking test please add the label manually.
|
||||
|
||||
## Step 4 - Define the areas impacted
|
||||
|
||||
@ -121,9 +121,9 @@ Below is a brief summary of the area labels in active use by the etcd project al
|
||||
| area/auth | |
|
||||
| area/etcdctl | |
|
||||
| area/etcdutl | |
|
||||
| area/contrib | Not to be confused with `area/community` this label is specifically used for issues relating to community maintained scripts or files in the `contrib/` directory which aren't part of the core etcd project. |
|
||||
| area/contrib | Not to be confused with `area/community` this label is specifically used for issues relating to community-maintained scripts or files in the `contrib/` directory which aren't part of the core etcd project. |
|
||||
| area/documentation | |
|
||||
| area/tooling | Generally used in relation to the third party / external utilities or tools that are used in various stages of the etcd build, test or release process, for example tooling to create sboms. |
|
||||
| area/tooling | Generally used in relation to the third party / external utilities or tools that are used in various stages of the etcd build, test, or release process, for example, tooling to create sboms. |
|
||||
| area/testing | |
|
||||
| area/robustness-testing | |
|
||||
|
||||
@ -131,11 +131,11 @@ Below is a brief summary of the area labels in active use by the etcd project al
|
||||
|
||||
If an issue lacks a priority label it has not been formally prioritized yet.
|
||||
|
||||
Adding a `priority` label helps the etcd project understand what is important and should be worked on now, and conversely what is not as important and is on the project backlog.
|
||||
Adding a `priority` label helps the etcd project understand what is important and should be worked on now, and conversely, what is not as important and is on the project backlog.
|
||||
|
||||
|Priority label|What it means|Examples|
|
||||
|---|---|---|
|
||||
| `priority/critical-urgent` | Maintainers are responsible for making sure that these issues (in their area) are being actively worked on—i.e., drop what you're doing. Stuff is burning. These should be fixed before the next release. | user-visible critical bugs in core features <br> broken builds on tier1 supported platforms <br> tests and critical security issues |
|
||||
| `priority/critical-urgent` | Maintainers are responsible for making sure that these issues (in their area) are being actively worked on—i.e., drop what you're doing. The stuff is burning. These should be fixed before the next release. | user-visible critical bugs in core features <br> broken builds on tier1 supported platforms <br> tests and critical security issues |
|
||||
| `priority/important-soon` | Must be staffed and worked on either currently or very soon—ideally in time for the next release. | |
|
||||
| `priority/important-longterm` | Important over the long term, but may not be currently staffed and/or may require multiple releases to complete. | |
|
||||
| `priority/backlog` | General agreement that this is a nice-to-have, but no one's available to work on it anytime soon. Community contributions would be most welcome in the meantime, though it might take a while to get them reviewed if reviewers are fully occupied with higher-priority issues—for example, immediately before a release.| |
|
||||
@ -179,11 +179,11 @@ Once initial triage has been completed, issues need to be re-evaluated over time
|
||||
|
||||
### Track important issues
|
||||
|
||||
If an issue is at risk of being closed by stale bot in future, but is an important issuefor the etcd project, then please apply the `stage/tracked` label and remove any `stale` labels that exist. This will ensure the project does not lose sight of the issue.
|
||||
If an issue is at risk of being closed by the stale bot in the future, but is an important issue for the etcd project, then please apply the `stage/tracked` label and remove any `stale` labels that exist. This will ensure the project does not lose sight of the issue.
|
||||
|
||||
### Close incomplete issues
|
||||
|
||||
Issues that lack enough information from the issue reporter should be closed if issue reporter do not provide information in 30 days. Issues can always be re-opened at a later date if new information is provided.
|
||||
Issues that lack enough information from the issue reporter should be closed if the issue reporter does not provide information in 30 days. Issues can always be re-opened at a later date if new information is provided.
|
||||
|
||||
### Check for incomplete work
|
||||
|
||||
|
@ -5,23 +5,23 @@
|
||||
Speed up PR management.
|
||||
|
||||
The `etcd` PRs are listed at https://github.com/etcd-io/etcd/pulls
|
||||
A PR can have various labels, milestone, reviewer etc. The detailed list of labels can be found at
|
||||
A PR can have various labels, milestones, reviewers, etc. The detailed list of labels can be found at
|
||||
https://github.com/kubernetes/kubernetes/labels
|
||||
|
||||
Following are few example searches on PR for convenience:
|
||||
Following are a few example searches on PR for convenience:
|
||||
* [Open PRS for milestone etcd-v3.6](https://github.com/etcd-io/etcd/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+milestone%3Aetcd-v3.6)
|
||||
* [PRs under investigation](https://github.com/etcd-io/etcd/labels/Investigating)
|
||||
|
||||
## Scope
|
||||
|
||||
These guidelines serves as a primary document for managing PRs in `etcd`. Everyone is welcome to help manage PRs but the work and responsibilities discussed in this document is created with `etcd` maintainers and active contributors in mind.
|
||||
These guidelines serve as a primary document for managing PRs in `etcd`. Everyone is welcome to help manage PRs but the work and responsibilities discussed in this document are created with `etcd` maintainers and active contributors in mind.
|
||||
|
||||
## Handle inactive PRs
|
||||
Poke PR owner if review comments are not addressed in 15 days. If PR owner does not reply in 90 days, update the PR with a new commit if possible. If not, inactive PR should be closed after 180 days.
|
||||
Poke PR owner if review comments are not addressed in 15 days. If the PR owner does not reply in 90 days, update the PR with a new commit if possible. If not, inactive PR should be closed after 180 days.
|
||||
|
||||
## Poke reviewer if needed
|
||||
|
||||
Reviewers are responsive in a timely fashion, but considering everyone is busy, give them some time after requesting review if quick response is not provided. If response is not provided in 10 days, feel free to contact them via adding a comment in the PR or sending an email or message on the Slack.
|
||||
Reviewers are responsive in a timely fashion, but considering everyone is busy, give them some time after requesting a review if a quick response is not provided. If the response is not provided in 10 days, feel free to contact them via adding a comment in the PR or sending an email or message on Slack.
|
||||
|
||||
## Verify important labels are in place
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user