Hi Vladimir and Steve, Thanks for your comments. See below.
- Edward --
Hi Edward, The main disadvantage of this proposal is that it will require much more time for the maintenance, which is a show stopper, IMHO: Any update in the main tree will require to checkout every branch with backports and make specific changes.
The proposed development method does have some additional steps which will need to be performed by the individual developers prior to sending in a pull request: * if the change is applicable to all backport branches, the developer will create a commit in the master (or fixes) branch. This commit will contain actual code changes rather then a patch file. Once the commit has been made in the master (or fixes) branch, the developer will have to merge the new commit to applicable backports. Effectively, this is done with two commands (executed per backport branch) - "git checkout <branch>" and "git merge master". This is easily scriptable. The result of the above process can be one of two possibilities: 1. The commit merges cleanly to all backport branches - in this case, the developer is ready to send the pull request. 2. The commit creates a merge conflict in one or more of the backport branches - in this case, the developer fixes the merge conflicts in all applicable backports and then submits the pull request. This scenario does involve a little bit more of manual maintenance work, however, I don't consider this a show-stopper for the following reasons: * even with the current structure of the repo, developers have to make sure that the patches for the individual backports apply cleanly and are correct (effectively, the same work as fixing the merge conflict) * the work is performed by the individual developers and, thus distributed among all members. It does not have to be performed by a single individual/maintainer. * in our experience, merge conflicts happen very seldom. Almost all commits will merge cleanly and will not require additional effort. * if the change is only applicable to a few backport branches, the developer will have to make the change into each of the backport branches. This is effectively the same work that the developer will have to do in the existing structure with some simplification. The developer will not have to prepare the tree for the particular backport (just checking out the particular branch will do that). In addition, the developer will not have to create a patch file to be checked in as changes are in the form of actual code. The goal of the newly proposed structure and development method is that pull requests are only submitted on "clean" repositories. By the time the pull request is submitted, all commits should have been applied to the appropriate backport branches and all merge conflicts resolved in the source repository ("source" as in "the repository to pull from"). There should be minimal to no maintenance work required by the person pulling into the "master" OFED repository.
In addition, a lot of backports can be shared by the different kernels/Distros and it is easily maintainable today. The suggested approach will lead to spending more work on backports as they will be developed separately.
In general, we consider sharing backport directories/branches for multiple kernels a bad idea. It creates confusion and as soon as there is a difference, there will be the need to separate the two in some way. The newly proposed structure and development method will have just as many backport branches as there are backport directories in the current OFED repository. The checking out of the correct backport branch could be done easily by using the 'ofed_scripts/get_backport_dir.sh' script in conjunction with 'git checkout'.
Regarding the issues you bring in your proposal, there is a mechanism that enables to check that all patches can be applied clearly (ofed_scripts/ofed_makedist.sh) and a build script that checks the compilation on the OFA server. Also, ofed_makedist.sh creates a tarball per backport directory which make it easier to test/develop for this specific kernel. Each developer should check his code using these tools before sending a pull request.
There is a way for developers to check their work but the fact that broken patches have been checked into the repo on multiple occasions indicates that the method isn't used for every patch that is submitted or does not work as intended. The newly proposed structure and development method will minimize the potential of checking in broken changes by the virtue of requiring that all commits are in the form of actual code, they are applied to all appropriate backport branches, and pull requests are submitted only on "clean" trees. There will still be a need to do nightly builds to verify that commits don't break the build but this is already done, so there will be no change in this regard.
Also, there is something unclear to me with the suggested approach: How the source tarball, included in the OFED, will look like?
The general discussion is about how the repository will be organized and how developers will work within the new structure. The source tarball can be packaged up as the community requires. For example, our process already contains a script which creates a source RPM which matches the content of the source RPM generated by the OFED scripts. It translates the proposed repository structure into the same source RPM as OFED generates. In this way, we can leverage the OFED spec and Makefiles.
Currently, I am investigating the "compat" backport project (https://lkml.org/lkml/2011/9/9/327). Probably, we should go in this direction.
It makes sense to investigate this while we are looking at alternatives. I would like to hear of your findings. Regards, Edward
Regards, Vladimir
This message and any attached documents contain information from QLogic Corporation or its wholly-owned subsidiaries that may be confidential. If you are not the intended recipient, you may not read, copy, distribute, or use this information. If you have received this transmission in error, please notify the sender immediately by reply e-mail and then delete this message. _______________________________________________ ewg mailing list ewg@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg