joyent/node-triton#63 "triton images" with a filter should not be cached

This commit is contained in:
Trent Mick 2015-12-29 14:53:49 -08:00
parent f66e50c770
commit b50f0c8aa1
2 changed files with 21 additions and 8 deletions

View File

@ -2,6 +2,7 @@
## 3.4.2 (not yet released)
- #63 "triton images" with a filter should not be cached.
- #65 Fix `triton profile(s)` handling when the user has no profiles yet.

View File

@ -220,8 +220,11 @@ TritonApi.prototype._cacheGetJson = function _cacheGetJson(key, cb) {
* CloudAPI listImages wrapper with optional caching.
*
* @param opts {Object} Optional.
* - useCase {Boolean} Whether to use Triton's local cache.
* - ... all other cloudapi ListImages options
* - useCache {Boolean} Default false. Whether to use Triton's local cache.
* Note that the *currently* implementation will only use the cache
* when there are no filter options.
* - ... all other cloudapi ListImages options per
* <https://apidocs.joyent.com/cloudapi/#ListImages>
* @param {Function} callback `function (err, imgs)`
*/
TritonApi.prototype.listImages = function listImages(opts, cb) {
@ -237,14 +240,21 @@ TritonApi.prototype.listImages = function listImages(opts, cb) {
var listOpts = common.objCopy(opts);
delete listOpts.useCache;
var cacheKey = 'images.json';
// For now at least, we only cache full results (no filtering).
var useCache = Boolean(opts.useCache);
var cacheKey;
if (Object.keys(listOpts).length > 0) {
useCache = false;
} else {
cacheKey = 'images.json';
}
var cached;
var fetched;
var res;
vasync.pipeline({funcs: [
function tryCache(_, next) {
if (!opts.useCache) {
if (!useCache) {
return next();
}
self._cacheGetJson(cacheKey, function (err, cached_) {
@ -272,10 +282,11 @@ TritonApi.prototype.listImages = function listImages(opts, cb) {
},
function cacheFetched(_, next) {
if (!fetched) {
return next();
if (cacheKey && fetched) {
self._cachePutJson(cacheKey, fetched, next);
} else {
next();
}
self._cachePutJson(cacheKey, fetched, next);
}
]}, function (err) {
@ -311,7 +322,8 @@ TritonApi.prototype.getImage = function getImage(opts, cb) {
next();
return;
}
self._cacheGetJson('images.json', function (err, images) {
var cacheKey = 'images.json';
self._cacheGetJson(cacheKey, function (err, images) {
if (err) {
next(err);
return;