[kepler-dev] where do actor packages meant to work with Kepler 1.0 go in the repository?

Chad Berkley berkley at nceas.ucsb.edu
Thu Jun 26 11:22:57 PDT 2008


I think we could make it general enough that you could build an 
extension out of a directory within kepler or from a different 
repository all together.  Like I said, I kind of view directories in the 
repository as different repositories anyway.

I definitely support making it so that functionality in the root 
build.xml file is not redundant.  I think ant does this pretty nicely. 
Our metacat product does something similar for the ecogrid extensions.

I'm available pretty much anytime next week monday - wednesday.  I'm 
busy most of Thursday and Friday is a holiday (Independence Day).

chad


Timothy McPhillips wrote:
> Hi Chad,
> 
> I like your suggestions.  I've added some questions and comments of my own:
> 
> 
> On Jun 26, 2008, at 9:18 AM, Chad Berkley wrote:
> 
>> Hi Tim,
>>
>> See my thoughts below.
>>
>> Timothy McPhillips wrote:
>>> Dear All,
>>> With the Kepler 1.0 release out and the migration to svn complete I 
>>> am about to begin migrating into the Kepler repository some code 
>>> we've been developing here at UCD.  Some of these checkins will be 
>>> relatively straightforward, but other code will present some 
>>> integration, source code management, and build system challenges I'd 
>>> really like to get everyone's input and help with.
>>> *** Upcoming checkins ***
>>> 1.  First, I will be committing a new version of the COMAD framework 
>>> to src/org/kepler/comad.  The current version in Kepler is included 
>>> under src/org/nddp.  The major difference with the new version is 
>>> that it includes comprehensive support for recording provenance from 
>>> COMAD workflows and storing the results as provenance-annotated 
>>> 'trace' files.  2.  Second, we would like to begin committing the 
>>> code specific to the pPOD extension to Kepler (phylogenetics actors 
>>> and data types for the AToL community).  This integration will be 
>>> trickier.  Please see "complications" below.
>>> 3.  Third, when the COMAD and pPOD sources have been successfully 
>>> integrated with the main Kepler system, I will delete the code under 
>>> src/org/nddp, this package having been superseded by the two sets of 
>>> checkins above.
>>> *** Complications  ***
>>> Ok, here's the conundrum.  The pPOD extension is mostly a set of 
>>> actors for phylogenetics analyses.  Prior to the Kepler 1.0 release 
>>> we provided a preview release 
>>> <http://daks.genomecenter.ucdavis.edu/kepler-ppod/> of the pPOD 
>>> actors (based on the COMAD framework) to the AToL 
>>> <http://atol.sdsc.edu/> community (see a poster 
>>> <http://daks.genomecenter.ucdavis.edu/kepler-ppod/poster.pdf> and 
>>> presentation 
>>> <http://daks.genomecenter.ucdavis.edu/kepler-ppod/Kepler-Ppod.pdf> 
>>> about the Kepler/ppod preview).  This was not meant for production 
>>> use, but rather as a way to get feedback from the community on our 
>>> work.  However, in the very near future we would like to release this 
>>> code as a package of actors and community-specific customizations to 
>>> the Kepler GUI.   Note that this release will not be targeted only at 
>>> an abstract community of folks who might possibly try it out, but 
>>> also at particular scientists who have asked for specific workflows 
>>> based on the pPOD package and who need them very badly for their own 
>>> research.)
>>> As you might expect, we do *not* want to:
>>> N1.  Wait for the next release of Kepler before distributing these 
>>> actors. N2.  Release a package of actors that has been tested only 
>>> against  the revision of Kepler that we happen to find at the trunk 
>>> of the Kepler repository on a particular day. Instead, we want to 
>>> (read 'must') release a package of actors that works with Kepler 
>>> 1.0.  When another release of Kepler is made (Kepler 1.1, say), we 
>>> will need to release a version of the pPOD actors that works with 
>>> *that* version of Kepler.  There are number of questions implied by 
>>> this need to release a package of actors designed to work with a 
>>> particular, supported release of Kepler:
>>> Q1. How do we build the pPOD actors against Kepler 1.0 rather than 
>>> against the current revision in the repository?
>>
>> One way to do this would be to have a build.xml file in your ppod 
>> source tree that just knows how to build ppod.  The build.xml file for 
>> kepler could be made to import the ppod build file when ppod needs to 
>> be built.  In the future, we could redesign the kepler build.xml file 
>> to allow importing different build files from the command line so that 
>> the build file itself does not need to be altered.
> 
> An extension-specific build file in each extension source tree sounds 
> like a good idea, as long as it doesn't require duplicating 
> functionality provided by the central build.xml file.  There is more to 
> do than build the Java sources, too.  Actor package extensions will have 
> their own set of kar source files that will be need to be jarred up the 
> same way kar sources for actors in the core of Kepler are, for example.  
> The build system ought to use the central support for building kar files 
> rather requiring that package builders reinvent or copy this 
> functionality.  (The hacked version of the build file we use at UCD 
> deals with this issue--more or less).
> 
>>
>>> Q2.  Where should we put the pPOD actors and support classes in the 
>>> Kepler repository directory structure?  If we put them in, say, 
>>> src/org/ppod (under kepler), then all of this code will be seen by 
>>> the build system and all kepler developers will find themselves 
>>> building code that is not necessarily meant to be compiled against 
>>> the current revision of Kepler in the repository.  If any classes the 
>>> pPOD package depends on elsewhere in Kepler are renamed, moved, 
>>> removed, or changed significantly, the pPOD code will no longer build 
>>> against the current revision of Kepler in the repository.  The build 
>>> will break.
>>
>> if the build file system is used, the ppod actors would not be built 
>> unless the user told the build system to build them.
> 
> So there would be a place in the repository for source code trees that 
> do not get compiled by default with the core of Kepler?  Excellent.
> 
>>
>>> A further complication is that once the 1.0-compatible version of the 
>>> pPOD package is out, we likely will want to begin building against 
>>> the latest revision of Kepler in the repository until the next 
>>> version of Kepler is out, at which point we'll want to build against 
>>> *that* supported version of Kepler.  In short, we need to be able to 
>>> choose which revision of Kepler in the repository we build the pPOD 
>>> package against, without disturbing folks working with the current 
>>> revision of Kepler.
>>
>> I think this could be done with ant.  you'll just need to have your 
>> build file make sure that the current checkout of kepler is the 
>> tag/branch that you want.
>>
> 
> Cool.
> 
>>> *** Solutions? ***
>>> S1.  On the surface this problem sounds like one that could be solved 
>>> with branches.  And I believe it possibly could, and that branches 
>>> likely will be involved in some way (for example, we will still want 
>>> to provide bug fixes to the 1.0-compatible version of the pPOD actors 
>>> when we're working on the 1.1-compatible release).  However, is this 
>>> how we want to treat the Kepler 1.0 release branch in the 
>>> repository?  Do we want to be checking hundreds of source files into 
>>> the Kepler 1.0 release branch indefinitely, and almost certainly 
>>> introducing new bugs and instabilities there?
>>
>> Kepler 1.0 is released, so we can no longer make changes to that 
>> branch and still call it 1.0.  This is not an option, imho.
> 
> I agree with this.
> 
>>
>>> S2.  An alternative would be to create a separate source tree for 
>>> pPOD in the svn repository (as a peer to kepler, for example).  The 
>>> build system would not include this 'extension' when compiling the 
>>> Kepler java sources.  Instead, we might build the pPOD package 
>>> against the Kepler 1.0 release jar itself.  This approach might scale 
>>> better and enable everyone providing their users 1.0-compatible 
>>> actors to share their work with the community through the Kepler 
>>> repository without requiring that their code work with the current 
>>> revision of Kepler.
>>
>> I kind of think of each directory in the repository as its own 
>> repository anyway.  I think the compilation/non-compilation of a given 
>> directory should be controlled by the build file(s).  I don't think 
>> its necessary to have an entirely new repository for extensions.  If 
>> this is something that is needed by the greater community, we could 
>> create a high level directory in the kepler repository for extensions 
>> (kepler/extension) and have a hierarchical build system built around 
>> that.
> 
> I agree a new repository is not needed.  A directory for hosting 
> extensions would be great.  I'd start checking in the COMAD and pPOD 
> extensions today if there were such a place in the repository!
> 
>>
>>> The problem with this second approach is that it might not be so easy 
>>> to build against the current revision of Kepler, should one choose to 
>>> do so (and as we likely will between releases of the pPOD package).  
>>> At least, not without building the Kepler jar each time.
>>
>> I think the build file in the extensions directory could easily build 
>> kepler to the version you need and put the jar file into the 
>> extensions dir for use.  then it wouldn't need to be built multiple 
>> times and you'd guarantee that you were building against the version 
>> of kepler you want.
> 
> Sounds good!
> 
>>
>>> S3.  A variant of S2 would be to enable developers to tell the build 
>>> system to optionally include extensions in the build.  With the 
>>> extensions stored as peers to the kepler directory in the repository, 
>>> developers could choose which extensions to check out, and specify 
>>> different branches or tags for Kepler and for each extension checked 
>>> out.
>>
>> I guess my approach above is similar to this except that it uses the 
>> main kepler repository instead of different repositories.
> 
> Yep, I don't see a need for different repositories for each extension.  
> On the other hand, it would be nice if the build system could build 
> extensions not stored in the central repository, too (e.g., extensions 
> stored in other repositories but that have been checked out out to a 
> developer's machine).
> 
> Tristan--do you have thoughts about this?
> 
>>
>> I'm kind of thinking off the cuff here so I hope my ideas don't seem 
>> too malformed.  Maybe we could have a call next week to chat about this.
>>
> 
> Let's definitely chat soon.  It'd be great to move quickly on this.
> 
> All--who wants to participate in that discussion?  Tristan?  Christopher 
> Tuot?
> 
> 
> Thanks, Chad!
> 
> Tim
> 
> 


More information about the Kepler-dev mailing list