Provision for immediate caching of an image

Include the URL of your launchpad blueprint:

https://blueprints.launchpad.net/glance/+spec/instant_caching

Provision for immediate caching of a given image on a particular glance node.

Problem description

In Yoga we have added support for caching related operations under V2 API, but still we need to depend on existing periodic job to cache the actual image. This means user/deployer/admin needs to wait until next periodic job to run for caching of an actual image. Even though default time for periodic job is 300 seconds (5 minutes) it may vary deployment wise and the user has to wait until the actual image is cached.

Proposed change

We are proposing to remove existing periodic job from glance-api and modify existing PUT /v2/cache/{image_id} API which will queue an image for caching and start caching it immediately. If any existing instant caching operation is in progress then the latest image will be added to the queue so that it will be picked up for caching as soon as previous operation completes. User can use GET /v2/cache API call to see the size of the queue.

Alternatives

Instead of modifying existing API, we can add a new POST API which will start immediate caching of specified image. We can use existing policy cache_image so that user with appropriate permissions can perform this operation. To make the policy compatible with secure RBAC we need to pass required parameters like ImageTarget while enforcing the policy. It is recommended to keep cache_image operation limited to admin use only.

Another alternative solution could be, instead of removing the old periodic job, the new API should trigger the periodic job instantly to cache all the images rather than just caching a specified image at a time. This solution need to be thread safe as there might be a chance of existing periodic job is already running or new periodic job will start running while we trigger the same via API.

Data model impact

None

REST API impact

None

Security impact

None

Notifications impact

None

Other end user impact

None

Performance Impact

None

Other deployer impact

Caching is and will remain local to each glance node and as this command will be executed remotely, operator needs to know the direct URL of each glance node which are behind the load balancer. Operator needs to provide this direct URL to glanceclient so that client should hit particular node to trigger immediate caching on that node.

Developer impact

None

Implementation

Assignee(s)

Primary assignee:

dansmith or abhishekk

Other contributors:

None

Reviewers:

cyril-roelandt/rosmaita/jokke/pdeore/mrjoshi

Work Items

  • Modify existing API (PUT /v2/cache/{image_id})

  • Remove the ‘cache_prefetcher_interval’ config option and related tests.

  • Modify documentation, update API reference

  • Tempest coverage for Caching operations

Dependencies

None

Testing

  • All new cache API should be tested using tempest tests

Documentation Impact

  • The API documentation will need to be updated

  • Need to update Cache documentation as well with new information

References