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:
parent
c7140609f0
commit
2453bc12e8
@ -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.
|
||||||
|
@ -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);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user