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

If optipng is sigkilled by timeout, then ignore that error

Shane Kilkelly 9 лет назад
Родитель
Сommit
d0bbe8beae

+ 3 - 1
services/filestore/app/coffee/ImageOptimiser.coffee

@@ -11,10 +11,12 @@ module.exports =
 			timeout: 30 * 1000
 			timeout: 30 * 1000
 			killSignal: "SIGKILL"
 			killSignal: "SIGKILL"
 		exec args, opts,(err, stdout, stderr)->
 		exec args, opts,(err, stdout, stderr)->
+			if err? and err?.signal == 'SIGKILL'
+				logger.warn {err: err, stderr: stderr, localPath: localPath}, "optimiser timeout reached"
+				err = null
 			if err?
 			if err?
 				logger.err err:err, stderr:stderr, localPath:localPath, "something went wrong converting compressPng"
 				logger.err err:err, stderr:stderr, localPath:localPath, "something went wrong converting compressPng"
 			else
 			else
 				logger.log  localPath:localPath, "finished compressPng file"
 				logger.log  localPath:localPath, "finished compressPng file"
 			callback(err)
 			callback(err)
-			
 
 

+ 12 - 1
services/filestore/test/unit/coffee/ImageOptimiserTests.coffee

@@ -17,6 +17,7 @@ describe "ImageOptimiser", ->
 			"logger-sharelatex":
 			"logger-sharelatex":
 				log:->
 				log:->
 				err:->
 				err:->
+				warn:->
 
 
 		@sourcePath = "/this/path/here.eps"
 		@sourcePath = "/this/path/here.eps"
 		@error = "Error"
 		@error = "Error"
@@ -36,4 +37,14 @@ describe "ImageOptimiser", ->
 			@child_process.exec.callsArgWith(2, @error)
 			@child_process.exec.callsArgWith(2, @error)
 			@optimiser.compressPng @sourcePath, (err)=>
 			@optimiser.compressPng @sourcePath, (err)=>
 				err.should.equal @error
 				err.should.equal @error
-				done()
+				done()
+
+		describe 'when optimiser is sigkilled', ->
+
+			it 'should not produce an error', (done) ->
+				@error = new Error('woops')
+				@error.signal = 'SIGKILL'
+				@child_process.exec.callsArgWith(2, @error)
+				@optimiser.compressPng @sourcePath, (err)=>
+					expect(err).to.equal(null)
+					done()