bloom: more fixes.

This commit is contained in:
Christopher Jeffrey 2017-01-11 14:28:09 -08:00
parent 65ab296d2e
commit 9efece17d1
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
2 changed files with 20 additions and 17 deletions

View File

@ -2283,6 +2283,8 @@ Chain.prototype.verifyLocks = co(function* verifyLocks(prev, tx, view, flags) {
var locks = yield this.getLocks(prev, tx, view, flags); var locks = yield this.getLocks(prev, tx, view, flags);
var medianTime; var medianTime;
// Also catches case where
// height is `-1`. Fall through.
if (locks.height >= prev.height + 1) if (locks.height >= prev.height + 1)
return false; return false;

View File

@ -27,7 +27,7 @@ var LN2 = 0.6931471805599453094172321214581765680755001343602552;
* Bloom Filter * Bloom Filter
* @exports Bloom * @exports Bloom
* @constructor * @constructor
* @param {Number|Bufer} size - Filter size in bits, or filter itself. * @param {Number|Buffer} bits - Filter size in bits, or filter itself.
* @param {Number} n - Number of hash functions. * @param {Number} n - Number of hash functions.
* @param {Number} tweak - Seed value. * @param {Number} tweak - Seed value.
* @param {Number|String} - Update type. * @param {Number|String} - Update type.
@ -38,9 +38,9 @@ var LN2 = 0.6931471805599453094172321214581765680755001343602552;
* @property {Number} update - Update flag (see {@link Bloom.flags}). * @property {Number} update - Update flag (see {@link Bloom.flags}).
*/ */
function Bloom(size, n, tweak, update) { function Bloom(bits, n, tweak, update) {
if (!(this instanceof Bloom)) if (!(this instanceof Bloom))
return new Bloom(size, n, tweak, update); return new Bloom(bits, n, tweak, update);
this.filter = DUMMY; this.filter = DUMMY;
this.size = 0; this.size = 0;
@ -48,8 +48,8 @@ function Bloom(size, n, tweak, update) {
this.tweak = 0; this.tweak = 0;
this.update = Bloom.flags.NONE; this.update = Bloom.flags.NONE;
if (size != null) if (bits != null)
this.fromOptions(size, n, tweak, update); this.fromOptions(bits, n, tweak, update);
} }
/** /**
@ -109,22 +109,23 @@ Bloom.MAX_HASH_FUNCS = 50;
/** /**
* Inject properties from options. * Inject properties from options.
* @private * @private
* @param {Number|Bufer} size - Filter size in bits, or filter itself. * @param {Number|Buffer} bits - Filter size in bits, or filter itself.
* @param {Number} n - Number of hash functions. * @param {Number} n - Number of hash functions.
* @param {Number} tweak - Seed value. * @param {Number} tweak - Seed value.
* @param {Number|String} - Update type. * @param {Number|String} - Update type.
* @returns {Bloom} * @returns {Bloom}
*/ */
Bloom.prototype.fromOptions = function fromOptions(size, n, tweak, update) { Bloom.prototype.fromOptions = function fromOptions(bits, n, tweak, update) {
var filter; var filter, size;
if (Buffer.isBuffer(size)) { if (Buffer.isBuffer(bits)) {
filter = size; filter = bits;
size = filter.length * 8; size = filter.length * 8;
} else { } else {
assert(typeof size === 'number', '`size` must be a number.'); assert(typeof bits === 'number', '`bits` must be a number or Buffer.');
assert(size > 0, '`size` must be greater than zero.'); assert(bits > 0, '`bits` must be greater than zero.');
size = bits;
size -= size % 8; size -= size % 8;
filter = new Buffer(size / 8); filter = new Buffer(size / 8);
filter.fill(0); filter.fill(0);
@ -157,21 +158,21 @@ Bloom.prototype.fromOptions = function fromOptions(size, n, tweak, update) {
/** /**
* Instantiate bloom filter from options. * Instantiate bloom filter from options.
* @param {Number|Bufer} size - Filter size in bits, or filter itself. * @param {Number|Buffer} bits - Filter size in bits, or filter itself.
* @param {Number} n - Number of hash functions. * @param {Number} n - Number of hash functions.
* @param {Number} tweak - Seed value. * @param {Number} tweak - Seed value.
* @param {Number|String} - Update type. * @param {Number|String} - Update type.
* @returns {Bloom} * @returns {Bloom}
*/ */
Bloom.fromOptions = function fromOptions(size, n, tweak, update) { Bloom.fromOptions = function fromOptions(bits, n, tweak, update) {
return new Bloom().fromOptions(size, n, tweak, update); return new Bloom().fromOptions(bits, n, tweak, update);
}; };
/** /**
* Perform the mumur3 hash on data. * Perform the mumur3 hash on data.
* @param {Buffer} val * @param {Buffer} val
* @param {Number} seed * @param {Number} n
* @returns {Number} * @returns {Number}
*/ */
@ -270,7 +271,7 @@ Bloom.fromRate = function fromRate(items, rate, update) {
if (update !== -1) if (update !== -1)
size = Math.min(size, Bloom.MAX_BLOOM_FILTER_SIZE * 8); size = Math.min(size, Bloom.MAX_BLOOM_FILTER_SIZE * 8);
n = Math.max(1, size / items * LN2); n = Math.max(1, (size / items * LN2) | 0);
if (update !== -1) if (update !== -1)
n = Math.min(n, Bloom.MAX_HASH_FUNCS); n = Math.min(n, Bloom.MAX_HASH_FUNCS);