Skip to content

Commit

Permalink
split caching into its own library
Browse files Browse the repository at this point in the history
  • Loading branch information
tjfontaine committed Mar 24, 2013
1 parent 313df7b commit a512909
Show file tree
Hide file tree
Showing 8 changed files with 6 additions and 435 deletions.
1 change: 1 addition & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
* Add SPF record type, same as TXT
* Emit platform ready on windows (Oleg Elifantiev)
* Split packet parsing into its own library
* Split caching into its own library

2013-03-03 Timothy J Fontaine <[email protected]>
* Assert missing fields
Expand Down
62 changes: 2 additions & 60 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ var question = dns.Question({
type: 'A',
});

var start = new Date().getTime();
var start = Date.now();

var req = dns.Request({
question: question,
Expand All @@ -49,7 +49,7 @@ req.on('message', function (err, answer) {
});

req.on('end', function () {
var delta = (new Date().getTime()) - start;
var delta = (Date.now()) - start;
console.log('Finished processing request: ' + delta.toString() + 'ms');
});

Expand Down Expand Up @@ -269,61 +269,3 @@ Available Types:
- `service` -- string
- `regexp` -- string
- `replacement` -- string

Cache
-----

If you perform a query on an A or AAAA type and it doesn't exist, the cache
will attempt to lookup a CNAME and then resolve that.

The constructor takes an optional object with the following properties:

* `store` -- implements the cache store model (optional, default MemoryStore)

Methods:

* `lookup(question, cb)` -- for a given question check the cache store for
existence
* `store(packet)` -- iterates over the resource records in a packet and sends
them to the cache store
* `purge()` -- clears the cache store of all entries

MemoryStore / Cache store model
-------------------------------

`MemoryStore(opts)` -- An in memory store based on a js object

Methods:

* `get(domain, key, cb)`
- `domain` is the holder under which keys will be applied,
`key` is the subdomain that is being queried for.
If you `get('example.com', 'www', cb)` you are really asking for `www.example.com`.
- `cb(err, results)` -- results is an object of types and array of answers
* `{ 1: [{address: '127.0.0.1', ttl: 300, type: 1, class: 1}] }`
* `set(domain, key, data, cb)`
- `domain` is the parent under which this key is stored.
`key` is the subdomain we are storing, `data` is an object of types with an array of answers.
* `set('example.com', 'www', {1: [{class:1, type:1, ttl:300, address:'127.0.0.1'}]}, cb)`
- `cb(err, data)` -- cb merely returns the data that was passed.
* `delete(domain[, key[, type]], cb)` -- delete all from a domain, a domain and key,
or a domain a key and a type.

Lookup
------

Is a mechanism that given a store performs the common resolution pattern.

Given `example.com` previous added to a store:

* `www.example.com CNAME foo.bar.example.com.`
* `*.example.com A 127.0.0.1`

A `Lookup(store, 'example.com', {name:'www.example.com', type:1}, cb)`
will resolve `www` to the CNAME and then search for `foo.bar.example.com` which
will return no results, and then search for `*.bar.example.com` which will also
return no results, and ultimately searches for `*.example.com` which will return
the desired record.

Callback will be called with `(err, results)` where results is an array suitable
for use in `Packet.answer`
9 changes: 0 additions & 9 deletions dns.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,3 @@ exports.Question = function (opts) {
return q;
};
exports.Request = client.Request;

exports.Cache = require('./lib/cache');
exports.MemoryStore = require('./lib/memory').MemoryStore;

var utils = require('./lib/utils');

exports.Lookup = utils.Lookup
exports.is_absolute = utils.is_absolute;
exports.ensure_absolute = utils.ensure_absolute;
184 changes: 0 additions & 184 deletions lib/cache.js

This file was deleted.

93 changes: 0 additions & 93 deletions lib/memory.js

This file was deleted.

4 changes: 2 additions & 2 deletions lib/platform.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var fs = require('fs'),
net = require('net'),
os = require('os'),
util = require('util'),
Cache = require('./cache'),
Cache = require('native-dns-cache'),
consts = require('native-dns-packet').consts,
path = require('path'),
utils = require('./utils');
Expand Down Expand Up @@ -268,7 +268,7 @@ Platform.prototype._parseHosts = function(hostsfile) {
});

Object.keys(toStore).forEach(function (key) {
self.hosts._store.set(self.hosts._zone, utils.ensure_absolute(key), toStore[key]);
self.hosts._store.set(self.hosts._zone, key, toStore[key]);
});
self._hostsReady = true;
self._checkReady();
Expand Down
Loading

0 comments on commit a512909

Please sign in to comment.