Skip to content

Commit 5013a69

Browse files
authored
Merge pull request #14 from hapinessjs/next
Next
2 parents d12430c + 78ef8ed commit 5013a69

6 files changed

Lines changed: 67 additions & 29 deletions

File tree

package-lock.json

Lines changed: 26 additions & 26 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@hapiness/redis",
3-
"version": "1.3.0",
3+
"version": "1.4.0",
44
"description": "Hapiness module for redis",
55
"main": "commonjs/index.js",
66
"types": "index.d.ts",

src/module/interfaces/redis.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ import { ClientOpts } from 'redis';
33
export interface RedisConfig extends ClientOpts {
44
reconnect_interval?: number;
55
ping_keepalive_interval?: number; // In seconds
6+
command_timeout?: number;
67
}

src/module/managers/redis-client.manager.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as redis_commands from 'redis-commands';
44

55
import * as EventEmitter from 'events';
66

7-
import { Observable } from 'rxjs';
7+
import { Observable, TimeoutError } from 'rxjs';
88
import { URL } from 'url';
99

1010
import { RedisConfig } from '../interfaces';
@@ -148,7 +148,17 @@ export class RedisClientManager {
148148
observer.complete();
149149
}
150150
});
151-
});
151+
}).timeout((this._config.command_timeout || 2) * 1000).retryWhen(e =>
152+
e.flatMap(err => {
153+
if (err instanceof TimeoutError) {
154+
this._client.end(true);
155+
debug(`Got a timeout on ${command}`);
156+
return this.createClient();
157+
} else {
158+
return Observable.throw(err);
159+
}
160+
})
161+
);
152162
}
153163

154164
public get client(): RedisClient {

test/mocks/redis.mock.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ export class FakeRedisClient extends EventEmitter {
3232
cb(null, null);
3333
return true;
3434
}
35+
36+
end() {}
3537
}

test/unit/redis-client.manager.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,4 +168,29 @@ export class RedisClientManagerTest {
168168
}
169169
);
170170
}
171+
172+
// @test.only('- ')
173+
// test(done) {
174+
// const fakeInst = new FakeRedisClient();
175+
176+
// const redisStub = mockRedisCreateConnection();
177+
// redisStub.returns(<any>fakeInst);
178+
179+
// Observable
180+
// .of(fakeInst)
181+
// .delay(new Date(Date.now() + 1500))
182+
// .map(_ => fakeInst.emit('ready'))
183+
// .subscribe();
184+
185+
// const manager = new RedisClientManager(
186+
// {
187+
// url: '//toto',
188+
// password: 'pass_redis',
189+
// db: '2'
190+
// }
191+
// );
192+
193+
// manager.createClient().flatMap(_ => manager.sendCommand('get', []))
194+
// .subscribe(_ => { console.log('NEXT'); done() }, e => { console.log(e); done(e) });
195+
// }
171196
}

0 commit comments

Comments
 (0)