[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| [p2-dev] Aggregating ArtifactRepositories | 
I have a situation where a server has a knowledge of a lot of 
MetadataRepositories and ArtifactRepositories but it does not mirror the 
actual artifacts. The objective for the server is to keep track of 
things, not to store things.
A common use-case will be to create a subset of what I have in the 
database and present that as an installable site (i.e. an MDR and an 
AR). The subset is limited by a set of root IU's. This is how I 
currently do this:
1. Query the database for the transitive closure of all IU's that 
fulfill at least one required capability from another IU using the root 
IU's as the starting point.
2. Create an MDR from the generated closure.
3. Generate an AR based on all ArtifactKey's of all IU's in the MDR.
Step one and two are trivial. Step three is more complicated because 
each AR has it's own way of computing the actual location of the 
artifact. The solution I've come up with right now is not ideal and I 
would like to discuss how to improve it:
1. I store the result of the SimpleArtifactRepository.getLocation(desc) 
in the repository together with the descriptor.
2. When generating the final AR, I include the location as a 
'repositoryProperty' named 'artifact.reference'.
This works, since the SimpleArtifactRepository will use this reference 
and bypass all calculations that are based on the repository location 
but it has one rather serious drawback. The mirror selection does not 
come into play at all.
I could add an extra step that would calculate a mirror location when 
the AR is generated. It would be slightly better since it would spread 
the load but the information would still be static. From that point on, 
any given artifact will always be fetched from the same mirror. Not 
ideal either.
A better solution for me would be if the artifact descriptor could be 
extended to include (and hence, possibly override) the properties 
declared in the repository. That way I could provide a "mirror base" to 
each descriptor and trust P2 to compute the correct mirror on demand.
Another solution would be to avoid the AR generation completely and 
instead provide the URL's of the original AR's. This doesn't seem to be 
possible at present since the P2 update manager assumes that a 'site' 
consists of exactly one MDR and one AR and that they reside in the same 
location.
Any input on this is greatly appreciated.
Regards,
Thomas Hallgren