-
Notifications
You must be signed in to change notification settings - Fork 9.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
raft: decouple raft release from etcd release #14713
Comments
Moving raft to separate repo was already discussed and got early support in etcd maintainer mailing list. Overall it make sense for me as it will allow raft maintainers to implement their changes without being constrained by etcd. My main worry is about investment cost. Will investing time and effort into code organization is as important now if we could invest it in other places. I think it's up to @tbg to decide if splitting raft would be a net positive investment. |
The main goal for now should be making it possible for For the community having more frequent releases of raft could be nice; at CockroachDB we don't depend on releases; we have a good handle on all changes to I don't consider it a goal in and of itself to move Is it even practical to release two projects out of the same repo? I don't think the Github releases are able to express this very well. Won't they just tar up the contents of the repo as of a single SHA? Doesn't go.mod use git tags to determine which versions exist? So I wonder if just separating the release cycles in practice forces us into a separate repo. I might be missing something that makes it possible to avoid it. If we go for a separate repo, I think a standard set of Github actions (unit tests, vet, staticcheck) is sufficient - Footnotes
|
FWIW, last time I checked it was possible to release different modules independently within the same repo. The magic is in prefixing the tag with the submodule name/path within the repo. For example, see "Tag based versioning" here, and some suggestions in Go docs. So, you could have |
If we end up "restarting" the versioning for the raft module, I would suggest not rushing into |
@pavelkalinnikov right this is Go, good to know, but etcd also relies on Github releases: https://github.com/etcd-io/etcd/releases |
I understand the desire to evolve the
It's a good idea to point out our policy about breaking changes. I would like us to be able to occasionally rename a field, move a struct, etc, and we should be clear on whether that means minting a new major release or not. I tend to think it would be nice to avoid it (don't see the cost-benefit analysis playing out favorably) but open to a discussion. Pavel, since you seem to a) know a lot about versioning and b) seem to care, maybe you could continue leading that discussion? |
I don't agree this. This is a big structure change, nobody can make any unilateral decision. I think it should be up to all existing etcd maintainers' decision, and of course the feedback from the community. If all etcd maintainers reach an agreement, then we should send a discussion topic in etcd-dev to get feedback as well. Splitting raft has impact on all raft users, but I think it should be positive impact, because raft can be released & maintained separately. etcd doesn't necessarily always to depend on the latest raft code. Picking a specific commit can also work, but it makes more sense to depend on tags. cc @hexfusion @mitake @ptabor @spzala could you please share your thoughts as well? thx.
Agreed. It makes sense to me.
The best approach seems to be the third point I mentioned above: create a separate repository for raft, such as |
Fair enough to me. |
That's the only clean way I can think of, given the limitations of a Github-supported release process. |
Just an observation: I'm noticing that our @etcd-io/maintainers-etcd GH team is anchored on the etcd-io org, so hopefully this wouldn't even require maintaining parallel worlds. |
I think having a separated raft module is a good idea. Various users of the module can have their own suitable way for controlling risk and benefit from new improvements.
I agree with @ahrtr . Having raft code that isn't actually used in that release seems to be hard to manage. Separating repositories seems to be good. |
+1 Any of the three approaches seems good but I think for the long term benefits |
Thanks @mitake and @spzala for the feedback.
I do not quite catch the point probably due to my English(not a native speaker:( ). My understanding the |
I was saying that we could keep the |
The plan for the next step is:
Since we do not get feedback from @ptabor and @hexfusion yet, so I will send an email to them (cc etcd-maintainers) as well. Once all the existing maintainers agree on the approach, then I will post a message in etcd-dev to collect feedback. Please kindly feedback if I miss anything of you have any comment or concerns. |
This in general makes sense to me as the raft package is widely used outside of etcd. As far as cycles to implement I would defer decision to more active maintainers. |
Make sense to me. |
Thanks both @hexfusion and @ptabor for the feedback. So we have got positive feedback from all etcd maintainers. I will post a message to etcd-dev to collect feedback as well. |
I think we should also migrate: It seems to have only a dependency on etcd Snapshot, |
Makes sense to me, and thx @ptabor for explicitly raised this. Previously I thought about this. It isn't a big deal and nobody explicitly mentioned it, so I did not do it in my PoC.
Let me take care of this. The raft example shouldn't depend on etcd at all. |
I just had a quick evaluation on this, and it seems that it isn't that simple. The raft implementation follows a minimalistic design philosophy, and it depends on the rafthttp and wal as well. So I regard the raftexample as an example specific to etcd. So I will not migrate it to the new repo planned for raft. Please let me know if you have any concern. Note: I am still waiting for the feedback from https://groups.google.com/g/etcd-dev/c/PC1-UXYiWwk before taking any action. |
+1 |
Thank you for checking. Makes sense to me. |
Thanks @Elbehery for the feedback.
Thanks for the response. Are you suggesting to remove raftexample from etcd repo eventually? I have no objection for it; but I would suggest to keep it as it's for now, until we finish migrating raft to a separate repo and implemented a self-contained raft example in the raft repo.
Yes, we can create a ticket to track this in the new raft project once it's available. |
All the feedback we got so far is positive, so I will kick off the migration process per #14713 (comment) in the following week. Please let me know if anyone has any concern. |
Update: the new repo raft is already created, and raised the first PR etcd-io/raft#1 . |
The migration is done. The raft was moved to a separate repo https://github.com/etcd-io/raft, and the module name was renamed to go.etcd.io/raft/v3. Thanks all for supporting this. |
Also sent notification in https://groups.google.com/g/etcd-dev/c/PC1-UXYiWwk |
What would you like to be added?
Currently the raft is released & tagged together with etcd. For example, when we release etcd 3.5.5, we will create tag
v3.5.5
for etcd andraft/v3.5.5
for raft at the same time respectively.raft is an important & stable module, it may have different evolution pace from etcd. I think it would be better to qualify and release raft separately, just like what we did for BoltDB.
We probably need to change the module name from
go.etcd.io/etcd/raft/v3
togo.etcd.io/raft
. Since it's a new beginning, we can release raft starting fromv1
, which isn't needed in the module name. We need to add the version into the module name starting fromv2
, namelygo.etcd.io/raft/v2
. FYI. Module version numberingWe can even create a separate repository for raft, such as
github.com/etcd-io/raft
. But it isn't a blocker for this request, either way we will release raft separately.We need to agree on the release criteria of raft if we follow this approach. For the first step, I think we can keep doing what we already have,
Since release-3.5 is a stable release, so we will not change anything on 3.5 and raft in 3.5. This change is only for the
main
branch.So in summary, the request has three points:
go.etcd.io/etcd/raft/v3
togo.etcd.io/raft
.@hexfusion @mitake @ptabor @serathius @spzala @tbg @nvanbenschoten @pavelkalinnikov Please share your thoughts. thx.
Why is this needed?
see above.
The text was updated successfully, but these errors were encountered: