Просмотр исходного кода

change sync to async for lockfile debugging

Henry Oswald 8 лет назад
Родитель
Сommit
6c0665bb49

+ 10 - 8
services/clsi/app/coffee/LockManager.coffee

@@ -16,11 +16,13 @@ module.exports = LockManager =
 			stale: @LOCK_STALE
 			stale: @LOCK_STALE
 		Lockfile.lock path, lockOpts, (error) ->
 		Lockfile.lock path, lockOpts, (error) ->
 			return callback new Errors.AlreadyCompilingError("compile in progress")	if error?.code is 'EEXIST'
 			return callback new Errors.AlreadyCompilingError("compile in progress")	if error?.code is 'EEXIST'
-			if error?
-				logger.err error:error, path:path, statLock:fs.lstatSync(path), statDir: fs.lstatSync(path.dirname(path)), "unable to get lock"
-				return callback(error) 
-			runner (error1, args...) ->
-				Lockfile.unlock path, (error2) ->
-					error = error1 or error2
-					return callback(error) if error?
-					callback(null, args...)
+			fs.lstat path, (err, statLock)->
+				fs.lstat Path.dirname(path), (err, statDir)->
+					if error?
+						logger.err error:error, path:path, statLock:statLock, statDir: statDir, "unable to get lock"
+						return callback(error)
+					runner (error1, args...) ->
+						Lockfile.unlock path, (error2) ->
+							error = error1 or error2
+							return callback(error) if error?
+							callback(null, args...)

+ 2 - 0
services/clsi/test/unit/coffee/LockManagerTests.coffee

@@ -10,6 +10,8 @@ describe "DockerLockManager", ->
 		@LockManager = SandboxedModule.require modulePath, requires:
 		@LockManager = SandboxedModule.require modulePath, requires:
 			"settings-sharelatex": {}
 			"settings-sharelatex": {}
 			"logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub() }
 			"logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub() }
+			"fs":
+				lstat:sinon.stub().callsArgWith(1)
 			"lockfile": @Lockfile = {}
 			"lockfile": @Lockfile = {}
 		@lockFile = "/local/compile/directory/.project-lock"
 		@lockFile = "/local/compile/directory/.project-lock"