Brian Gough 9 лет назад
Родитель
Сommit
3a930a636e

+ 1 - 1
services/clsi/app/coffee/CompileController.coffee

@@ -16,7 +16,7 @@ module.exports = CompileController =
 			ProjectPersistenceManager.markProjectAsJustAccessed request.project_id, (error) ->
 			ProjectPersistenceManager.markProjectAsJustAccessed request.project_id, (error) ->
 				return next(error) if error?
 				return next(error) if error?
 				CompileManager.doCompile request, (error, outputFiles = []) ->
 				CompileManager.doCompile request, (error, outputFiles = []) ->
-					if error instanceOf Errors.FilesOutOfSyncError
+					if error instanceof Errors.FilesOutOfSyncError
 						code = 409 # Http 409 Conflict
 						code = 409 # Http 409 Conflict
 						status = "retry"
 						status = "retry"
 					else if error?.terminated
 					else if error?.terminated

+ 5 - 2
services/clsi/app/coffee/CompileManager.coffee

@@ -32,9 +32,12 @@ module.exports = CompileManager =
 		timer = new Metrics.Timer("write-to-disk")
 		timer = new Metrics.Timer("write-to-disk")
 		logger.log project_id: request.project_id, user_id: request.user_id, "syncing resources to disk"
 		logger.log project_id: request.project_id, user_id: request.user_id, "syncing resources to disk"
 		ResourceWriter.syncResourcesToDisk request, compileDir, (error) ->
 		ResourceWriter.syncResourcesToDisk request, compileDir, (error) ->
-			if error?
+			if error? and error instanceof Errors.FilesOutOfSyncError
+				logger.warn project_id: request.project_id, user_id: request.user_id, "files out of sync, please retry"
+				return callback(error)
+			else if error?
 				logger.err err:error, project_id: request.project_id, user_id: request.user_id, "error writing resources to disk"
 				logger.err err:error, project_id: request.project_id, user_id: request.user_id, "error writing resources to disk"
-				return callback(error) 
+				return callback(error)
 			logger.log project_id: request.project_id, user_id: request.user_id, time_taken: Date.now() - timer.start, "written files to disk"
 			logger.log project_id: request.project_id, user_id: request.user_id, time_taken: Date.now() - timer.start, "written files to disk"
 			timer.done()
 			timer.done()
 			
 			

+ 6 - 9
services/clsi/app/coffee/ResourceWriter.coffee

@@ -14,10 +14,10 @@ parallelFileDownloads = settings.parallelFileDownloads or 1
 module.exports = ResourceWriter =
 module.exports = ResourceWriter =
 
 
 	syncResourcesToDisk: (request, basePath, callback = (error) ->) ->
 	syncResourcesToDisk: (request, basePath, callback = (error) ->) ->
-		if request.syncType? is "incremental"
-			ResourceWriter.checkSyncState request.syncState, basePath, (error, ok) ->
-				logger.log syncState: request.syncState, result:ok, "checked state on incremental request"
-				return callback new Errors.FilesOutOfSyncError("invalid state for incremental update") if not ok
+		if request.syncType is "incremental"
+			ResourceWriter.checkSyncState request.syncState, basePath, (error, syncStateOk) ->
+				logger.log syncState: request.syncState, result:syncStateOk, "checked state on incremental request"
+				return callback new Errors.FilesOutOfSyncError("invalid state for incremental update") if not syncStateOk
 				ResourceWriter.saveIncrementalResourcesToDisk request.project_id, request.resources, basePath, callback
 				ResourceWriter.saveIncrementalResourcesToDisk request.project_id, request.resources, basePath, callback
 		else
 		else
 			@saveAllResourcesToDisk request.project_id, request.resources, basePath, (error) ->
 			@saveAllResourcesToDisk request.project_id, request.resources, basePath, (error) ->
@@ -30,11 +30,8 @@ module.exports = ResourceWriter =
 
 
 	checkSyncState: (state, basePath, callback) ->
 	checkSyncState: (state, basePath, callback) ->
 		fs.readFile Path.join(basePath, ".resource-sync-state"), {encoding:'ascii'}, (err, oldState) ->
 		fs.readFile Path.join(basePath, ".resource-sync-state"), {encoding:'ascii'}, (err, oldState) ->
-			logger.log state:state, oldState: oldState, basePath:basePath, err:err, "checking sync state"
-			if state is oldState
-				return callback(null, true)
-			else
-				return callback(null, false)
+			# ignore errors, return true if state matches, false otherwise (including errors)
+			return callback(null, if state is oldState then true else false)
 
 
 	saveIncrementalResourcesToDisk: (project_id, resources, basePath, callback = (error) ->) ->
 	saveIncrementalResourcesToDisk: (project_id, resources, basePath, callback = (error) ->) ->
 		@_createDirectory basePath, (error) =>
 		@_createDirectory basePath, (error) =>