joyent/node-triton#158 tritonapi image cache never expires

Reviewed by: Chris Burroughs <chris.burroughs@joyet.com>
Approved by: Chris Burroughs <chris.burroughs@joyet.com>
This commit is contained in:
Dillon Amburgey 2016-12-19 22:00:00 -05:00 committed by Chris Burroughs
parent c7140609f0
commit 2453bc12e8
2 changed files with 36 additions and 23 deletions

View File

@ -7,6 +7,8 @@ Known issues:
## not yet released ## not yet released
- [joyent/node-triton#158] tritonapi image cache never expires
- [joyent/node-triton#153] Bump restify-clients dep. Thanks, github.com/tomgco. - [joyent/node-triton#153] Bump restify-clients dep. Thanks, github.com/tomgco.
- [joyent/node-triton#154] Fix `triton cloudapi ...` after #108 changes. - [joyent/node-triton#154] Fix `triton cloudapi ...` after #108 changes.

View File

@ -375,33 +375,44 @@ TritonApi.prototype._cacheGetJson = function _cacheGetJson(key, cb) {
assert.string(key, 'key'); assert.string(key, 'key');
assert.func(cb, 'cb'); assert.func(cb, 'cb');
var ttl = 5 * 60 * 1000; // timeout of cache file info (ms)
var keyPath = path.resolve(this.cacheDir, key); var keyPath = path.resolve(this.cacheDir, key);
fs.readFile(keyPath, 'utf8', function (err, data) { fs.stat(keyPath, function (statErr, stats) {
if (err && err.code === 'ENOENT') { if (!statErr &&
self.log.trace({keyPath: keyPath}, stats.mtime.getTime() + ttl >= (new Date()).getTime()) {
'cache file does not exist'); fs.readFile(keyPath, 'utf8', function (err, data) {
return cb(); if (err && err.code === 'ENOENT') {
} else if (err) { self.log.trace({keyPath: keyPath},
self.log.warn({err: err, keyPath: keyPath}, 'cache file does not exist');
'error reading cache file'); cb();
return cb(); } else if (err) {
} self.log.warn({err: err, keyPath: keyPath},
var obj; 'error reading cache file');
try { cb();
obj = JSON.parse(data);
} catch (dataErr) {
self.log.trace({err: dataErr, keyPath: keyPath},
'error parsing JSON cache file, removing');
fs.unlink(keyPath, function (err2) {
if (err2) {
self.log.warn({err: err2},
'failed to remove JSON cache file');
} }
cb(err2); var obj;
try {
obj = JSON.parse(data);
} catch (dataErr) {
self.log.trace({err: dataErr, keyPath: keyPath},
'error parsing JSON cache file, removing');
fs.unlink(keyPath, function (err2) {
if (err2) {
self.log.warn({err: err2},
'failed to remove JSON cache file');
}
cb();
});
return;
}
cb(null, obj);
}); });
return; } else if (statErr && statErr.code !== 'ENOENT') {
cb(statErr);
} else {
cb();
} }
cb(null, obj);
}); });
}; };