Skip to content

Commit 25ce3ec

Browse files
committed
Merge pull request #7 from primus/ioredis
Ditch leverage and redis in favor of ioredis
2 parents 256f874 + bdc6618 commit 25ce3ec

File tree

5 files changed

+29
-29
lines changed

5 files changed

+29
-29
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ this plugin:
3434
- *redis*: Metroplex is currently using Redis as its default back-end for storing
3535
the state of the connections. If you do not supply us with a pre-defined Redis
3636
client (or authorized) we will create a Redis client which only connects to
37-
localhost and Redis's default port number.
37+
localhost and Redis's default port number. When provided this must be an
38+
[`ioredis`](https://github.com/luin/ioredis) client.
3839
- *namespace*: As the databases are usually shared with other programs it's good
3940
to prefix all the data that you store, in Metroplex we prefix every key with
4041
the set namespace. The default namespace is `metroplex`.

metroplex.js

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
'use strict';
22

3-
var Leverage = require('leverage')
4-
, https = require('https')
3+
var https = require('https')
54
, fuse = require('fusing')
6-
, ip = require('ip');
7-
8-
//
9-
// Ensure that the directory for our custom lua scripts is set correctly.
10-
//
11-
Leverage.scripts = Leverage.scripts.concat(
12-
Leverage.introduce(require('path').join(__dirname, 'redis'), Leverage.prototype)
13-
);
5+
, path = require('path')
6+
, ip = require('ip')
7+
, fs = require('fs');
148

159
/**
1610
* Add defaults to the supplied options. The following options are available:
@@ -32,17 +26,20 @@ function Metroplex(primus, options) {
3226
options = options || {};
3327
primus = primus || {};
3428

35-
var parsed = this.parse(primus.server);
29+
var lua = fs.readFileSync(path.join(__dirname, 'redis/annihilate.lua'), 'utf8')
30+
, parsed = this.parse(primus.server);
3631

3732
this.fuse();
3833

39-
this.redis = options.redis || require('redis').createClient();
34+
this.redis = options.redis || new require('ioredis')();
4035
this.namespace = (options.namespace || 'metroplex') +':';
4136
this.interval = options.interval || 5 * 60 * 1000;
4237
this.timeout = options.timeout || 30 * 60;
4338
this.latency = options.latency || 2000;
44-
this.leverage = new Leverage(this.redis, {
45-
namespace: this.namespace
39+
40+
this.redis.defineCommand('annihilate', {
41+
lua: lua.replace('{leverage::namespace}', this.namespace),
42+
numberOfKeys: 1
4643
});
4744

4845
if (parsed || options.address) {
@@ -90,21 +87,22 @@ Metroplex.readable('parse', function parse(server) {
9087
* @api public
9188
*/
9289
Metroplex.readable('register', function register(address, fn) {
93-
var metroplex = this;
90+
var redis = this.redis
91+
, metroplex = this;
9492

95-
metroplex.address = this.parse(address || metroplex.address);
93+
metroplex.address = this.parse(address);
9694
if (!metroplex.address) {
9795
if (fn) fn();
9896
return this;
9997
}
10098

101-
metroplex.leverage.annihilate(metroplex.address, function annihilate(err) {
99+
redis.annihilate(metroplex.address, function annihilate(err) {
102100
if (err) {
103101
if (fn) return fn(err);
104102
return metroplex.emit('error', err);
105103
}
106104

107-
metroplex.redis.multi()
105+
redis.multi()
108106
.psetex(metroplex.namespace + metroplex.address, metroplex.interval, Date.now())
109107
.sadd(metroplex.namespace +'servers', metroplex.address)
110108
.exec(function register(err) {
@@ -119,6 +117,8 @@ Metroplex.readable('register', function register(address, fn) {
119117
if (fn) fn(err, metroplex.address);
120118
});
121119
});
120+
121+
return this;
122122
});
123123

124124
/**
@@ -138,7 +138,7 @@ Metroplex.readable('unregister', function unregister(address, fn) {
138138
return this;
139139
}
140140

141-
metroplex.leverage.annihilate(address, function annihilate(err) {
141+
metroplex.redis.annihilate(address, function annihilate(err) {
142142
if (err) {
143143
if (fn) return fn(err);
144144
return metroplex.emit('error', err);
@@ -200,7 +200,7 @@ Metroplex.readable('servers', function servers(self, fn) {
200200
self = 0;
201201
}
202202

203-
this.redis.smembers(this.namespace +'servers', function smembers(err, members) {
203+
metroplex.redis.smembers(this.namespace +'servers', function smembers(err, members) {
204204
if (self) return fn(err, members);
205205

206206
fn(err, (members || []).filter(function filter(address) {
@@ -265,7 +265,7 @@ Metroplex.readable('setInterval', function setIntervals() {
265265
redis.get(metroplex.namespace + address, function get(err, stamp) {
266266
if (err || Date.now() - +stamp < metroplex.interval) return;
267267

268-
metroplex.leverage.annihilate(address, function murdered(err) {
268+
redis.annihilate(address, function murdered(err) {
269269
if (err) return metroplex.emit('error', err);
270270
});
271271
});

package.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,15 @@
3030
"mocha": "2.2.x",
3131
"omega-supreme": "0.0.x",
3232
"pre-commit": "1.0.x",
33-
"primus": "3.0.x",
33+
"primus": "3.1.x",
3434
"istanbul": "0.3.x",
3535
"ws": "0.7.x"
3636
},
3737
"dependencies": {
38-
"async": "1.0.x",
38+
"async": "1.3.x",
3939
"eventemitter3": "1.1.x",
4040
"fusing": "1.0.x",
4141
"ip": "0.3.x",
42-
"leverage": "0.1.x",
43-
"redis": "0.12.x"
42+
"ioredis": "1.5.x"
4443
}
4544
}

redis/annihilate.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ local address = assert(KEYS[1], 'The server address is missing')
66

77
--
88
-- Get all the sparks for our given address so we can nuke them from our "global"
9-
-- spark registry>
9+
-- spark registry.
1010
--
1111
local sparks = redis.call('SMEMBERS', namespace .. address ..':sparks')
1212

@@ -20,7 +20,7 @@ end
2020

2121
--
2222
-- Delete all left over references to this server address which are:
23-
--
23+
--
2424
-- 1. Our dedicated sparks set
2525
-- 2. Our server in the servers list
2626
-- 3. The keep alive server update

test/integration.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
describe('plugin', function () {
22
'use strict';
33

4-
var redis = require('redis').createClient()
4+
var redis = new require('ioredis')()
55
, assume = require('assume')
66
, Primus = require('primus')
77
, metroplex = require('../');

0 commit comments

Comments
 (0)