Skip to content

Commit

Permalink
Merge pull request #223 from uber/checksum-logging
Browse files Browse the repository at this point in the history
Log membership and ring checksum computed events
  • Loading branch information
jwolski2 committed Dec 15, 2015
2 parents 5e6cf53 + b1f5224 commit 118fe07
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 7 deletions.
1 change: 1 addition & 0 deletions config.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ Config.prototype._seed = function _seed(seed) {
seedOrDefault('gossipLogLevel', LoggingLevels.error);
seedOrDefault('joinLogLevel', LoggingLevels.warn);
seedOrDefault('membershipLogLevel', LoggingLevels.error);
seedOrDefault('ringLogLevel', LoggingLevels.error);
seedOrDefault('suspicionLogLevel', LoggingLevels.error);

// Gossip configs
Expand Down
1 change: 1 addition & 0 deletions lib/logging/logger_factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ var loggerNamesToLevels = {
gossip: 'gossipLogLevel',
join: 'joinLogLevel',
membership: 'membershipLogLevel',
ring: 'ringLogLevel',
suspicion: 'suspicionLogLevel',
};

Expand Down
14 changes: 11 additions & 3 deletions lib/membership/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,11 @@
// THE SOFTWARE.
'use strict';

function LocalMemberLeaveEvent(member, oldStatus) {
function ChecksumComputedEvent(checksum, oldChecksum) {
this.name = this.constructor.name;
this.member = member;
this.oldStatus = oldStatus;
this.checksum = checksum;
this.oldChecksum = oldChecksum;
this.timestamp = Date.now();
}

// A member becomes reusable when the damp score of a previously damped member
Expand All @@ -39,7 +40,14 @@ function DampingSuppressLimitExceededEvent(member) {
this.member = member;
}

function LocalMemberLeaveEvent(member, oldStatus) {
this.name = this.constructor.name;
this.member = member;
this.oldStatus = oldStatus;
}

module.exports = {
ChecksumComputedEvent: ChecksumComputedEvent,
DampingReusableEvent: DampingReusableEvent,
DampingSuppressLimitExceededEvent: DampingSuppressLimitExceededEvent,
LocalMemberLeaveEvent: LocalMemberLeaveEvent
Expand Down
4 changes: 3 additions & 1 deletion lib/membership/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ var _ = require('underscore');
var EventEmitter = require('events').EventEmitter;
var Member = require('./member.js');
var MemberDampScore = require('./member_damp_score.js');
var MembershipEvents = require('./events.js');
var mergeMembershipChangesets = require('./merge.js');
var timers = require('timers');
var update = require('./update.js');
Expand Down Expand Up @@ -77,7 +78,8 @@ Membership.prototype.computeChecksum = function computeChecksum() {
var prevChecksum = this.checksum;
this.checksum = this.ringpop.hashFunc(this.generateChecksumString());

this.emit('checksumComputed');
this.emit('checksumComputed', new MembershipEvents.ChecksumComputedEvent(
this.checksum, prevChecksum));
this.ringpop.stat('timing', 'compute-checksum', start);
this.ringpop.stat('gauge', 'checksum', this.checksum);
if (prevChecksum !== this.checksum) {
Expand Down
13 changes: 12 additions & 1 deletion lib/on_membership_event.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,20 @@ var Member = require('./membership/member.js');
var MembershipEvents = require('./membership/events.js');

function createChecksumComputedHandler(ringpop) {
return function onMembershipChecksumComputed() {
var membershipLogger = ringpop.loggerFactory.getLogger('membership');

return function onMembershipChecksumComputed(event) {
ringpop.stat('increment', 'membership.checksum-computed');
ringpop.emit('membershipChecksumComputed');

if (event.oldChecksum !== event.checksum) {
membershipLogger.debug('ringpop membership computed new checksum', {
local: ringpop.whoami(),
checksum: event.checksum,
oldChecksum: event.oldChecksum,
timestamp: event.timestamp
});
}
};
}

Expand Down
13 changes: 12 additions & 1 deletion lib/on_ring_event.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,20 @@
'use strict';

function createChecksumComputedHandler(ringpop) {
return function onRingChecksumComputed() {
var ringLogger = ringpop.loggerFactory.getLogger('ring');

return function onRingChecksumComputed(event) {
ringpop.stat('increment', 'ring.checksum-computed');
ringpop.emit('ringChecksumComputed');

if (event.oldChecksum !== event.checksum) {
ringLogger.debug('ringpop ring computed new checksum', {
local: ringpop.whoami(),
checksum: event.checksum,
oldChecksum: event.oldChecksum,
timestamp: event.timestamp
});
}
};
}

Expand Down
8 changes: 8 additions & 0 deletions lib/ring/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,20 @@
// THE SOFTWARE.
'use strict';

function ChecksumComputedEvent(checksum, oldChecksum) {
this.name = this.constructor.name;
this.checksum = checksum;
this.oldChecksum = oldChecksum;
this.timestamp = Date.now();
}

function RingChangedEvent(added, removed) {
this.name = this.constructor.name;
this.added = added;
this.removed = removed;
}

module.exports = {
ChecksumComputedEvent: ChecksumComputedEvent,
RingChangedEvent: RingChangedEvent
};
4 changes: 3 additions & 1 deletion lib/ring/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,11 @@ HashRing.prototype.computeChecksum = function computeChecksum() {
var serverNames = Object.keys(this.servers);
var serverNameStr = serverNames.sort().join(';');

var oldChecksum = this.checksum;
this.checksum = this.hashFunc(serverNameStr);

this.emit('checksumComputed');
this.emit('checksumComputed', new RingEvents.ChecksumComputedEvent(
this.checksum, oldChecksum));
};

HashRing.prototype.getServerCount = function getServerCount() {
Expand Down

0 comments on commit 118fe07

Please sign in to comment.