Skip to content

Commit

Permalink
revert passing non-cached methods through cache. Closes #1922
Browse files Browse the repository at this point in the history
  • Loading branch information
Eran Hammer committed Sep 9, 2014
1 parent b6c7358 commit f810016
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 6 deletions.
29 changes: 24 additions & 5 deletions lib/methods.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,20 +50,35 @@ internals.Methods.prototype._add = function (name, fn, options, env) {

var settings = Hoek.cloneWithShallow(options, ['bind']);
settings.generateKey = settings.generateKey || internals.generateKey;

var bind = settings.bind || (env && env.bind) || null;

// Create method

settings.cache = settings.cache || {};
if (!settings.cache) {
this._assign(name, function (/* arguments, methodNext */) {

var args = arguments;
var methodNext = args[args.length - 1];

var timer = new Hoek.Timer();
args[args.length - 1] = function (err, result) {

methodNext(err, result, null, { msec: timer.elapsed(), error: err });
};

fn.apply(bind, args);
});

return;
}

settings.cache.generateFunc = function (id, next) {

id.args[id.args.length - 1] = next; // function (err, result, ttl)
fn.apply(bind, id.args);
};

var cache = (settings.cache.expiresIn || settings.cache.expiresAt ? this.pack._provisionCache(settings.cache, 'method', name, settings.cache.segment)
: new Catbox.Policy(settings.cache));
var cache = this.pack._provisionCache(settings.cache, 'method', name, settings.cache.segment);

var method = function (/* arguments, methodNext */) {

Expand Down Expand Up @@ -93,7 +108,11 @@ internals.Methods.prototype._add = function (name, fn, options, env) {
}
};

// create method path
this._assign(name, method);
};


internals.Methods.prototype._assign = function (name, method) {

var path = name.split('.');
var ref = this.methods;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "hapi",
"description": "HTTP Server framework",
"homepage": "http://hapijs.com",
"version": "6.8.0",
"version": "6.8.1",
"repository": {
"type": "git",
"url": "git://github.com/hapijs/hapi"
Expand Down
26 changes: 26 additions & 0 deletions test/methods.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,32 @@ describe('Method', function () {
done();
});

it('calls non cached method multiple times', function (done) {

var gen = 0;
var method = function (id, next) {

return next(null, { id: id, gen: gen++ });
};

var server = new Hapi.Server(0);
server.method('test', method);

server.start(function () {

server.methods.test(1, function (err, result) {

expect(result.gen).to.equal(0);

server.methods.test(1, function (err, result) {

expect(result.gen).to.equal(1);
done();
});
});
});
});

it('reuses cached method value', function (done) {

var gen = 0;
Expand Down

0 comments on commit f810016

Please sign in to comment.