From b0cf0666fa0362c4a9852dffc9e85d8b2c167a8c Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 14 Jul 2014 15:38:55 +0100 Subject: [PATCH] changed the redis stuf to multi --- .../ConnectedUsersManager.coffee | 41 ++++++++----------- .../ConnectedUsersManagerTests.coffee | 17 +++----- 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/services/web/app/coffee/Features/ConnectedUsers/ConnectedUsersManager.coffee b/services/web/app/coffee/Features/ConnectedUsers/ConnectedUsersManager.coffee index eb008738ba..e2683788a3 100644 --- a/services/web/app/coffee/Features/ConnectedUsers/ConnectedUsersManager.coffee +++ b/services/web/app/coffee/Features/ConnectedUsers/ConnectedUsersManager.coffee @@ -21,30 +21,25 @@ module.exports = markUserAsConnected: (project_id, user_id, callback = (err)->)-> logger.log project_id:project_id, user_id:user_id, "marking user as connected" - async.series [ - (cb)-> - rclient.sadd buildProjectSetKey(project_id), user_id, cb - (cb)-> - rclient.expire buildProjectSetKey(project_id), FOUR_DAYS_IN_S, cb - (cb)-> - rclient.hset buildUserKey(project_id, user_id), "connected_at", new Date(), cb - (cb)-> - rclient.expire buildUserKey(project_id, user_id), USER_TIMEOUT_IN_S, cb - ], (err)-> + + multi = rclient.multi() + multi.sadd buildProjectSetKey(project_id), user_id + multi.expire buildProjectSetKey(project_id), FOUR_DAYS_IN_S + multi.hset buildUserKey(project_id, user_id), "connected_at", new Date() + multi.expire buildUserKey(project_id, user_id), USER_TIMEOUT_IN_S + multi.exec (err)-> if err? logger.err err:err, project_id:project_id, user_id:user_id, "problem marking user as connected" callback(err) markUserAsDisconnected: (project_id, user_id, callback)-> logger.log project_id:project_id, user_id:user_id, "marking user as disconnected" - async.series [ - (cb)-> - rclient.srem buildProjectSetKey(project_id), user_id, cb - (cb)-> - rclient.expire buildProjectSetKey(project_id), FOUR_DAYS_IN_S, cb - (cb)-> - rclient.del buildUserKey(project_id, user_id), cb - ], callback + multi = rclient.multi() + multi.srem buildProjectSetKey(project_id), user_id + multi.expire buildProjectSetKey(project_id), FOUR_DAYS_IN_S + multi.del buildUserKey(project_id, user_id) + multi.exec callback + _getConnectedUser: (project_id, user_id, callback)-> rclient.hgetall buildUserKey(project_id, user_id), (err, result)-> @@ -59,12 +54,10 @@ module.exports = callback err, result setUserCursorPosition: (project_id, user_id, cursorData, callback)-> - async.series [ - (cb)-> - rclient.hset buildUserKey(project_id, user_id), "cursorData", JSON.stringify(cursorData), cb - (cb)-> - rclient.expire buildUserKey(project_id, user_id), USER_TIMEOUT_IN_S, cb - ], callback + multi = rclient.multi() + multi.hset buildUserKey(project_id, user_id), "cursorData", JSON.stringify(cursorData) + multi.expire buildUserKey(project_id, user_id), USER_TIMEOUT_IN_S + multi.exec callback getConnectedUsers: (project_id, callback)-> diff --git a/services/web/test/UnitTests/coffee/ConnectedUsersManager/ConnectedUsersManagerTests.coffee b/services/web/test/UnitTests/coffee/ConnectedUsersManager/ConnectedUsersManagerTests.coffee index 32253255b1..46bf8f7012 100644 --- a/services/web/test/UnitTests/coffee/ConnectedUsersManager/ConnectedUsersManagerTests.coffee +++ b/services/web/test/UnitTests/coffee/ConnectedUsersManager/ConnectedUsersManagerTests.coffee @@ -27,6 +27,8 @@ describe "ConnectedUsersManager", -> expire:sinon.stub() hset:sinon.stub() hgetall:sinon.stub() + exec:sinon.stub() + multi: => return @rClient tk.freeze(new Date()) @ConnectedUsersManager = SandboxedModule.require modulePath, requires: @@ -42,10 +44,7 @@ describe "ConnectedUsersManager", -> describe "markUserAsConnected", -> beforeEach -> - @rClient.hset.callsArgWith(3) - @rClient.sadd.callsArgWith(2) - @rClient.expire.callsArgWith(2) - + @rClient.exec.callsArgWith(0) it "should set a key with the date and give it a ttl", (done)-> @ConnectedUsersManager.markUserAsConnected @project_id, @user_id, (err)=> @@ -69,9 +68,7 @@ describe "ConnectedUsersManager", -> describe "markUserAsDisconnected", -> beforeEach -> - @rClient.srem.callsArgWith(2) - @rClient.del.callsArgWith(1) - @rClient.expire.callsArgWith(2) + @rClient.exec.callsArgWith(0) it "should remove the user from the set", (done)-> @ConnectedUsersManager.markUserAsDisconnected @project_id, @user_id, (err)=> @@ -88,7 +85,6 @@ describe "ConnectedUsersManager", -> @rClient.expire.calledWith("users_in_project:#{@project_id}", 24 * 4 * 60 * 60).should.equal true done() - describe "_getConnectedUser", -> it "should get the user returning connected if there is a value", (done)-> @@ -105,8 +101,6 @@ describe "ConnectedUsersManager", -> result.user_id.should.equal @user_id done() - - describe "getConnectedUsers", -> beforeEach -> @@ -129,8 +123,7 @@ describe "ConnectedUsersManager", -> beforeEach -> @cursorData = { row: 12, column: 9, doc_id: '53c3b8c85fee64000023dc6e' } - @rClient.hset.callsArgWith(3) - @rClient.expire.callsArgWith(2) + @rClient.exec.callsArgWith(0) it "should add the cursor data to the users hash", (done)-> @ConnectedUsersManager.setUserCursorPosition @project_id, @user_id, @cursorData, (err)=>