Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I'm learning Node and Redis and created a semaphore for master/slaves.

var redis = require("redis"),
    _ = require('underscore'),
    async = require('async'),
    client = redis.createClient();

var isMaster = false,
    SEMAPHORE_ADDRESS = 'semaphore';
var lifeCycle = function(next) {
  if(isMaster) {
    client.set([SEMAPHORE_ADDRESS, true, 'EX', 5], function(err, val) {
      console.log('master lifecycle');
      if(err !== null) { throw err; }
      else if(val === 'OK') {
        console.log('everything ok; I will send slaves some tasks');
      } else {
        assert.fail();
      }
      next();
    });
  } else {
    console.log('slave lifecycle');
    client.set([SEMAPHORE_ADDRESS, true, 'NX', 'EX', 5], function(err, val) {
      if(err !== null) { throw err; }
      if(val === null) {
        console.log('slaves takes some tasks');
      } else if(val === 'OK') {
        console.log('I`m master');
        isMaster = true;
      }
      next();
    });
  }
};
async.forever(
  function(next) {
    setTimeout(
      lifeCycle.bind(null, next),
      1000
    );
  }
);
share|improve this question

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.