Is there any way of not using or even not reserving the memory of this cache? I am tring to reduce memory consumption to bare minimum and i dont use this cache at all ... On Jun 10, 2014 7:01 PM, "Ignasi Barrera" <[email protected]> wrote:
> Hi! > > TL;DR: Populating images in the image cache. > > I'm working on a fix for JCLOUDS-588 [1] and I have a first > implementation [2]. However, before submitting a pull request I want > to validate it here. > > Basically the issue is the population of the image cache. When using > the ComputeService, jclouds caches the list of images (as it can be an > expensive operation) in a memoized supplier. That cache is used by the > TemplateBuilder, the default ComputeServiceAdapter and by most of the > classes in the compute abstraction, to avoid making unnecessary > expensive calls to the provider. > > There are, at least, two cases in which the use of this cache is > leading to images not being found: > > * When images are created with the ImageExtension (see JCLOUDS-512 [3]). > * When providers don't return some images when listing them but a > "getById" call works (see JCLOUDS-570 [1]). > > > IMO, the safest approach to fix this is to populate the missing images > in the cache as soon as we find them. The challenging thing is that > the image cache is currently implemented as a memoized supplier, which > is basically a singleton immutable set, so we can't write to it or > copy it to a new instance, as there are many classes that will have it > already injected. > > In the current patch I'm working on, I've created an > ImageCacheSupplier [5] that acts as a "view" of that memoized > supplier. It provides a "registerImage" method to register the > discovered images, and it returns the composition of both, the cached > and discovered ones when someone calls its "get()" method. That > ImageCacheSupplier replaces the current memoized supplier, so it is by > default injected in all providers. > > > And my questions are: > > * We have to manually populate the images in the cache as soon as we > know they're missing. This is obvious in the template builder and the > image extension. Do you have in mind any other case or place in the > code where we should take care of populating images? (Doing this by > default can be overkill as noted in JCLOUDS-588 comments, so we'd > better identify where we might find unknown images and register them > there). > > * Do you have in mind an alternate/better approach to this one? :) > > > Thanks! > > Ignasi > > > [1] https://issues.apache.org/jira/browse/JCLOUDS-588 > [2] https://github.com/nacx/jclouds/tree/588-imagecache > [3] https://issues.apache.org/jira/browse/JCLOUDS-512 > [4] https://issues.apache.org/jira/browse/JCLOUDS-570 > [5] > https://github.com/nacx/jclouds/blob/588-imagecache/compute/src/main/java/org/jclouds/compute/suppliers/ImageCacheSupplier.java >
