فهرست منبع

added lock around move element

Henry Oswald 10 سال پیش
والد
کامیت
76b3a78988

+ 9 - 4
services/web/app/coffee/Features/Editor/EditorController.coffee

@@ -164,12 +164,17 @@ module.exports = EditorController =
 
 
 	moveEntity: (project_id, entity_id, folder_id, entityType, callback)->
 	moveEntity: (project_id, entity_id, folder_id, entityType, callback)->
 		Metrics.inc "editor.move-entity"
 		Metrics.inc "editor.move-entity"
-		ProjectEntityHandler.moveEntity project_id, entity_id, folder_id, entityType, =>
+		LockManager.getLock project_id, (err)->
 			if err?
 			if err?
-				logger.err err:err, project_id:project_id, entity_id:entity_id, folder_id:folder_id, "error moving entity"
+				logger.err err:err, project_id:project_id, "could not get lock for move entity"
 				return callback(err)
 				return callback(err)
-			EditorRealTimeController.emitToRoom project_id, 'reciveEntityMove', entity_id, folder_id
-			callback?()
+			ProjectEntityHandler.moveEntity project_id, entity_id, folder_id, entityType, =>
+				if err?
+					logger.err err:err, project_id:project_id, entity_id:entity_id, folder_id:folder_id, "error moving entity"
+					return callback(err)
+				LockManager.releaseLock project_id, ->
+					EditorRealTimeController.emitToRoom project_id, 'reciveEntityMove', entity_id, folder_id
+					callback?()
 
 
 	renameProject: (project_id, newName, callback = (err) ->) ->
 	renameProject: (project_id, newName, callback = (err) ->) ->
 		ProjectDetailsHandler.renameProject project_id, newName, ->
 		ProjectDetailsHandler.renameProject project_id, newName, ->

+ 1 - 1
services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee

@@ -520,13 +520,13 @@ module.exports = ProjectEntityHandler =
 				newPath =
 				newPath =
 					fileSystem: "#{path.fileSystem}/#{element.name}"
 					fileSystem: "#{path.fileSystem}/#{element.name}"
 					mongo: path.mongo
 					mongo: path.mongo
-				logger.log project_id: project._id, element_id: element._id, fileType: type, folder_id: folder_id, "adding element to project"
 				id = element._id+''
 				id = element._id+''
 				element._id = require('mongoose').Types.ObjectId(id)
 				element._id = require('mongoose').Types.ObjectId(id)
 				conditions = _id:project._id
 				conditions = _id:project._id
 				mongopath = "#{path.mongo}.#{type}"
 				mongopath = "#{path.mongo}.#{type}"
 				update = "$push":{}
 				update = "$push":{}
 				update["$push"][mongopath] = element
 				update["$push"][mongopath] = element
+				logger.log project_id: project._id, element_id: element._id, fileType: type, folder_id: folder_id, mongopath:mongopath, "adding element to project"
 				Project.update conditions, update, {}, (err)->
 				Project.update conditions, update, {}, (err)->
 					if err?
 					if err?
 						logger.err err: err, project_id: project._id, 'error saving in putElement project'
 						logger.err err: err, project_id: project._id, 'error saving in putElement project'

+ 11 - 0
services/web/test/UnitTests/coffee/Editor/EditorControllerTests.coffee

@@ -518,12 +518,23 @@ describe "EditorController", ->
 			@folder_id = "313dasd21dasdsa"
 			@folder_id = "313dasd21dasdsa"
 			@ProjectEntityHandler.moveEntity = sinon.stub().callsArgWith(4, @err)
 			@ProjectEntityHandler.moveEntity = sinon.stub().callsArgWith(4, @err)
 			@EditorRealTimeController.emitToRoom = sinon.stub()
 			@EditorRealTimeController.emitToRoom = sinon.stub()
+			@LockManager.releaseLock.callsArgWith(1)
+			@LockManager.getLock.callsArgWith(1)
 
 
 		it "should call the ProjectEntityHandler", (done)->
 		it "should call the ProjectEntityHandler", (done)->
 			@EditorController.moveEntity @project_id, @entity_id, @folder_id, @entityType, =>
 			@EditorController.moveEntity @project_id, @entity_id, @folder_id, @entityType, =>
 				@ProjectEntityHandler.moveEntity.calledWith(@project_id, @entity_id, @folder_id, @entityType).should.equal true
 				@ProjectEntityHandler.moveEntity.calledWith(@project_id, @entity_id, @folder_id, @entityType).should.equal true
 				done()
 				done()
 
 
+		it "should take the lock", (done)->
+			@EditorController.moveEntity @project_id, @entity_id, @folder_id, @entityType, =>
+				@LockManager.getLock.calledWith(@project_id).should.equal true
+				done()
+
+		it "should release the lock", (done)->
+			@EditorController.moveEntity @project_id, @entity_id, @folder_id, @entityType, =>
+				@LockManager.releaseLock.calledWith(@project_id).should.equal true
+				done()
 
 
 		it "should emit the update to the room", (done)->
 		it "should emit the update to the room", (done)->
 			@EditorController.moveEntity @project_id, @entity_id, @folder_id, @entityType, =>
 			@EditorController.moveEntity @project_id, @entity_id, @folder_id, @entityType, =>