Przeglądaj źródła

Migrate lock to be redis-cluster compatible

James Allen 9 lat temu
rodzic
commit
fb6e028182

+ 1 - 1
services/track-changes/app/coffee/LockManager.coffee

@@ -1,6 +1,6 @@
 Settings = require "settings-sharelatex"
 Settings = require "settings-sharelatex"
 redis = require("redis-sharelatex")
 redis = require("redis-sharelatex")
-rclient = redis.createClient(Settings.redis.web)
+rclient = redis.createClient(Settings.redis.lock)
 os = require "os"
 os = require "os"
 crypto = require "crypto"
 crypto = require "crypto"
 logger = require "logger-sharelatex"
 logger = require "logger-sharelatex"

+ 4 - 2
services/track-changes/app/coffee/PackManager.coffee

@@ -6,6 +6,8 @@ LockManager = require "./LockManager"
 MongoAWS = require "./MongoAWS"
 MongoAWS = require "./MongoAWS"
 Metrics = require "metrics-sharelatex"
 Metrics = require "metrics-sharelatex"
 ProjectIterator = require "./ProjectIterator"
 ProjectIterator = require "./ProjectIterator"
+Settings = require "settings-sharelatex"
+keys = Settings.redis.lock.key_schema
 
 
 # Sharejs operations are stored in a 'pack' object
 # Sharejs operations are stored in a 'pack' object
 #
 #
@@ -319,7 +321,7 @@ module.exports = PackManager =
 
 
 	insertPacksIntoIndexWithLock: (project_id, doc_id, newPacks, callback) ->
 	insertPacksIntoIndexWithLock: (project_id, doc_id, newPacks, callback) ->
 		LockManager.runWithLock(
 		LockManager.runWithLock(
-			"HistoryIndexLock:#{doc_id}",
+			keys.historyIndexLock({doc_id}),
 			(releaseLock) ->
 			(releaseLock) ->
 				PackManager._insertPacksIntoIndex project_id, doc_id, newPacks, releaseLock
 				PackManager._insertPacksIntoIndex project_id, doc_id, newPacks, releaseLock
 			callback
 			callback
@@ -438,7 +440,7 @@ module.exports = PackManager =
 
 
 	markPackAsFinalisedWithLock: (project_id, doc_id, pack_id, callback) ->
 	markPackAsFinalisedWithLock: (project_id, doc_id, pack_id, callback) ->
 		LockManager.runWithLock(
 		LockManager.runWithLock(
-			"HistoryLock:#{doc_id}",
+			keys.historyLock({doc_id}),
 			(releaseLock) ->
 			(releaseLock) ->
 				PackManager._markPackAsFinalised project_id, doc_id, pack_id, releaseLock
 				PackManager._markPackAsFinalised project_id, doc_id, pack_id, releaseLock
 			callback
 			callback

+ 2 - 1
services/track-changes/app/coffee/UpdatesManager.coffee

@@ -9,6 +9,7 @@ logger = require "logger-sharelatex"
 async = require "async"
 async = require "async"
 _ = require "underscore"
 _ = require "underscore"
 Settings = require "settings-sharelatex"
 Settings = require "settings-sharelatex"
+keys = Settings.redis.lock.key_schema
 
 
 module.exports = UpdatesManager =
 module.exports = UpdatesManager =
 	compressAndSaveRawUpdates: (project_id, doc_id, rawUpdates, temporary, callback = (error) ->) ->
 	compressAndSaveRawUpdates: (project_id, doc_id, rawUpdates, temporary, callback = (error) ->) ->
@@ -126,7 +127,7 @@ module.exports = UpdatesManager =
 		UpdatesManager._prepareDocForUpdates project_id, doc_id, (error) ->
 		UpdatesManager._prepareDocForUpdates project_id, doc_id, (error) ->
 			return callback(error) if error?
 			return callback(error) if error?
 			LockManager.runWithLock(
 			LockManager.runWithLock(
-				"HistoryLock:#{doc_id}",
+				keys.historyLock({doc_id}),
 				(releaseLock) ->
 				(releaseLock) ->
 					UpdatesManager.processUncompressedUpdates project_id, doc_id, temporary, releaseLock
 					UpdatesManager.processUncompressedUpdates project_id, doc_id, temporary, releaseLock
 				callback
 				callback

+ 4 - 1
services/track-changes/config/settings.defaults.coffee

@@ -18,10 +18,13 @@ module.exports =
 			user: "sharelatex"
 			user: "sharelatex"
 			pass: "password"
 			pass: "password"
 	redis:
 	redis:
-		web:
+		lock:
 			host: "localhost"
 			host: "localhost"
 			port: 6379
 			port: 6379
 			pass: ""
 			pass: ""
+			key_schema:
+				historyLock: ({doc_id}) -> "HistoryLock:#{doc_id}"
+				historyIndexLock: ({project_id}) -> "HistoryIndexLock:#{project_id}"
 		history:
 		history:
 			port:"6379"
 			port:"6379"
 			host:"localhost"
 			host:"localhost"

+ 1 - 1
services/track-changes/test/unit/coffee/LockManager/LockManagerTests.coffee

@@ -9,7 +9,7 @@ describe "LockManager", ->
 	beforeEach ->
 	beforeEach ->
 		@Settings = 		
 		@Settings = 		
 			redis:
 			redis:
-				web:{}
+				lock:{}
 		@LockManager = SandboxedModule.require modulePath, requires:
 		@LockManager = SandboxedModule.require modulePath, requires:
 			"redis-sharelatex":
 			"redis-sharelatex":
 				createClient: () => @rclient =
 				createClient: () => @rclient =

+ 2 - 0
services/track-changes/test/unit/coffee/PackManager/PackManagerTests.coffee

@@ -21,6 +21,8 @@ describe "PackManager", ->
 			"./MongoAWS": {}
 			"./MongoAWS": {}
 			"logger-sharelatex": { log: sinon.stub(), error: sinon.stub() }
 			"logger-sharelatex": { log: sinon.stub(), error: sinon.stub() }
 			'metrics-sharelatex': {inc: ()->}
 			'metrics-sharelatex': {inc: ()->}
+			"settings-sharelatex":
+				redis: lock: key_schema: {}
 		@callback = sinon.stub()
 		@callback = sinon.stub()
 		@doc_id = ObjectId().toString()
 		@doc_id = ObjectId().toString()
 		@project_id = ObjectId().toString()
 		@project_id = ObjectId().toString()

+ 3 - 0
services/track-changes/test/unit/coffee/UpdatesManager/UpdatesManagerTests.coffee

@@ -17,6 +17,9 @@ describe "UpdatesManager", ->
 			"./UpdateTrimmer": @UpdateTrimmer = {}
 			"./UpdateTrimmer": @UpdateTrimmer = {}
 			"./DocArchiveManager": @DocArchiveManager = {}
 			"./DocArchiveManager": @DocArchiveManager = {}
 			"logger-sharelatex": { log: sinon.stub(), error: sinon.stub() }
 			"logger-sharelatex": { log: sinon.stub(), error: sinon.stub() }
+			"settings-sharelatex":
+				redis: lock: key_schema:
+					historyLock: ({doc_id}) -> "HistoryLock:#{doc_id}"
 		@doc_id = "doc-id-123"
 		@doc_id = "doc-id-123"
 		@project_id = "project-id-123"
 		@project_id = "project-id-123"
 		@callback = sinon.stub()
 		@callback = sinon.stub()