You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cloudstack.apache.org by Leo Simons <LS...@schubergphilis.com> on 2014/07/22 18:19:25 UTC

proposing sane git organization of redundant router work

(mostly for schuberg philis internal, but CC to cloudstack as fyi in case someone is following our github)

Hey folks,

Just discussing with Daan. Now that we’re figuring out our plan for writing the code a bit, I think we have to reflect that in source code management.

First, for reference, cloudstack community has been discussing a move to this basic model (and I hope they do it soon!)
    http://nvie.com/posts/a-successful-git-branching-model/

I think for our work we should incorporate something similar, and we should have more than just a “redundant refactored virtual router” feature. That will be so big a patchset it will not be reviewable for the community.

See attached picture (or http://i.imgur.com/TshmUeY.png if it gets stripped). I think it says more than the words below :-)

[cid:9AB246A7-A438-40CE-9F3E-C015BBAA4A27@schubergphilis.com]

First, I think we need to make some effort to split “refactoring that does not change functionality” from “adding or changing functionality”. This will allow reviewers to ‘mechanically’ review refactoring changes (“yes it seems likely this code still does the same” or “I see you clicked some refactor buttons in eclipse, yes yes") and focus most brain power on the functionality (“yes I see how this is providing redundancy that matches the design”).

Second, I think we need to organize the code _clearly_ along the division of labor/topics/functionality that we are finding. That is, work on the systemvm functionality itself can be seen as pretty isolated from the management server and shows up as a prereq/dependency for the matching code in the management server that invokes the new version of the systemvm. So we can a systemvm-foo feature branch and a systemvm-java feature branch.

Third, I think we need to try hard to split off bits and pieces that can be submitted back upstream to apache as distinct patch sets. For example the work I’m doing to get the systemvm veewee build working in our jenkins can be isolated into its own feature/patchset so I’m doing that. I imagine something similar may be true for publicizing our marvin integration test bits and pieces, especially where we are adding existing tests for new functionality.

Fourth, I’m torn on whether I like the testing experiments intermixed with the other refactor work. Obviously its the only convenient way to refactor along the test case, but given the experimental nature it will mean some kind of tricky git subtree tomfoolery or whatnot to filter out the abandoned experiments later. I guess, use a different package name please :-)

In particular this means ditching/rebasing/replaying vpc-toolkit / vlc-toolkit-hugo into bits and pieces; they’re too messy and misnamed! It should be pretty feasible still right now to cherry-pick / rebase our way through. A few weeks from now it will have gotten very hard.

I am probably safe to volunteer to do a lot of the work (probably getting Daan to help me) to get this set up, but getting this right is obviously always a team effort.

Thoughts? Objections? Too much / too little? Alternatives?


cheers,


Leo


Re: proposing sane git organization of redundant router work

Posted by Daan Hoogland <DH...@schubergphilis.com>.
I will certainly help. Your fourth point puzzles me. Maybe for some tests it is true, they can be separated from the code these are testing , for some it is not. Shouldn't we use that as guide? Am I seeing things to simple?

Sent from my iPhone

On 22 jul. 2014, at 18:19, "Leo Simons" <LS...@schubergphilis.com>> wrote:

(mostly for schuberg philis internal, but CC to cloudstack as fyi in case someone is following our github)

Hey folks,

Just discussing with Daan. Now that we’re figuring out our plan for writing the code a bit, I think we have to reflect that in source code management.

First, for reference, cloudstack community has been discussing a move to this basic model (and I hope they do it soon!)
    http://nvie.com/posts/a-successful-git-branching-model/

I think for our work we should incorporate something similar, and we should have more than just a “redundant refactored virtual router” feature. That will be so big a patchset it will not be reviewable for the community.

See attached picture (or http://i.imgur.com/TshmUeY.png if it gets stripped). I think it says more than the words below :-)

<branching.png>

First, I think we need to make some effort to split “refactoring that does not change functionality” from “adding or changing functionality”. This will allow reviewers to ‘mechanically’ review refactoring changes (“yes it seems likely this code still does the same” or “I see you clicked some refactor buttons in eclipse, yes yes") and focus most brain power on the functionality (“yes I see how this is providing redundancy that matches the design”).

Second, I think we need to organize the code _clearly_ along the division of labor/topics/functionality that we are finding. That is, work on the systemvm functionality itself can be seen as pretty isolated from the management server and shows up as a prereq/dependency for the matching code in the management server that invokes the new version of the systemvm. So we can a systemvm-foo feature branch and a systemvm-java feature branch.

Third, I think we need to try hard to split off bits and pieces that can be submitted back upstream to apache as distinct patch sets. For example the work I’m doing to get the systemvm veewee build working in our jenkins can be isolated into its own feature/patchset so I’m doing that. I imagine something similar may be true for publicizing our marvin integration test bits and pieces, especially where we are adding existing tests for new functionality.

Fourth, I’m torn on whether I like the testing experiments intermixed with the other refactor work. Obviously its the only convenient way to refactor along the test case, but given the experimental nature it will mean some kind of tricky git subtree tomfoolery or whatnot to filter out the abandoned experiments later. I guess, use a different package name please :-)

In particular this means ditching/rebasing/replaying vpc-toolkit / vlc-toolkit-hugo into bits and pieces; they’re too messy and misnamed! It should be pretty feasible still right now to cherry-pick / rebase our way through. A few weeks from now it will have gotten very hard.

I am probably safe to volunteer to do a lot of the work (probably getting Daan to help me) to get this set up, but getting this right is obviously always a team effort.

Thoughts? Objections? Too much / too little? Alternatives?


cheers,


Leo