diff --git a/lib/membership.js b/lib/membership.js index 5333dcee..20f9746c 100644 --- a/lib/membership.js +++ b/lib/membership.js @@ -29,6 +29,7 @@ var util = require('util'); function Membership(ringpop) { this.ringpop = ringpop; this.members = []; + this.membersByAddress = {}; this.checksum = null; } @@ -59,16 +60,7 @@ Membership.prototype.computeChecksum = function computeChecksum() { }; Membership.prototype.findMemberByAddress = function findMemberByAddress(address) { - // TODO Index by address - for (var i = 0; i < this.members.length; i++) { - var member = this.members[i]; - - if (member.address === address) { - return member; - } - } - - return null; + return this.membersByAddress[address]; }; Membership.prototype.generateChecksumString = function generateChecksumString() { @@ -249,6 +241,7 @@ Membership.prototype.update = function update(changes) { } self.members.splice(self.getJoinPosition(), 0, member); + self.membersByAddress[member.address] = member; } member.status = update.status; diff --git a/test/integration/swim-test.js b/test/integration/swim-test.js index 5cfe49b8..5f3c7f5d 100644 --- a/test/integration/swim-test.js +++ b/test/integration/swim-test.js @@ -190,7 +190,9 @@ testRingpopCluster({ // Mutating all member addresses to make each of selected ping-req members // unreachable and therefore, the results of ping-req inconclusive. ringpop.membership.members.forEach(function eachMember(member) { - member.address += '001'; + if (member.address !== unreachableMember.address) { + member.address += '001'; + } }); sendPingReq({