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

add configurable limit, delay and timeout to /pack via query string

Brian Gough 11 лет назад
Родитель
Сommit
775f5ebbe1
2 измененных файлов с 22 добавлено и 4 удалено
  1. 2 1
      services/track-changes/app.coffee
  2. 20 3
      services/track-changes/app/coffee/PackWorker.coffee

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

@@ -34,7 +34,8 @@ app.post "/pack", (req, res, next) ->
 		res.send "pack already running"
 		res.send "pack already running"
 	else
 	else
 		logger.log "running pack"
 		logger.log "running pack"
-		packWorker = child_process.fork(__dirname + '/app/js/PackWorker.js')
+		packWorker = child_process.fork(__dirname + '/app/js/PackWorker.js',
+			[req.query.limit, req.query.delay, req.query.timeout])
 		packWorker.on 'exit', (code, signal) ->
 		packWorker.on 'exit', (code, signal) ->
 			logger.log {code, signal}, "history auto pack exited"
 			logger.log {code, signal}, "history auto pack exited"
 			packWorker = null
 			packWorker = null

+ 20 - 3
services/track-changes/app/coffee/PackWorker.coffee

@@ -10,9 +10,23 @@ PackManager = require "./PackManager"
 # this worker script is forked by the main process to look for
 # this worker script is forked by the main process to look for
 # document histories which can be packed
 # document histories which can be packed
 
 
-DOCUMENT_PACK_DELAY = 1000
+LIMIT = Number(process.argv[2]) || 1000
+DOCUMENT_PACK_DELAY = Number(process.argv[3]) || 1000
+TIMEOUT = Number(process.argv[4]) || 30*60*1000
 
 
-logger.log 'checking for updates'
+shutDownRequested = false
+setTimeout () ->
+	logger.log "pack timed out, requesting shutdown"
+	# start the shutdown on the next pack
+	shutDownRequested = true
+	# do a hard shutdown after a further 5 minutes
+	setTimeout () ->
+		logger.error "HARD TIMEOUT in pack worker"
+		process.exit()
+	, 5*60*1000
+, TIMEOUT
+
+logger.log "checking for updates, limit=#{LIMIT}, delay=#{DOCUMENT_PACK_DELAY}, timeout=#{TIMEOUT}"
 
 
 finish = () ->
 finish = () ->
 	logger.log 'closing db'
 	logger.log 'closing db'
@@ -26,6 +40,9 @@ processUpdates = (pending) ->
 			if err?
 			if err?
 				logger.error {err, result}, "error in pack worker"
 				logger.error {err, result}, "error in pack worker"
 				return callback(err)
 				return callback(err)
+			if shutDownRequested
+				logger.error "shutting down pack worker"
+				return callback(new Error("shutdown"))
 			setTimeout () ->
 			setTimeout () ->
 				callback(err, result)
 				callback(err, result)
 			, DOCUMENT_PACK_DELAY
 			, DOCUMENT_PACK_DELAY
@@ -41,7 +58,7 @@ db.docHistoryStats.find({
 	update_count: {$gt : PackManager.MIN_COUNT}
 	update_count: {$gt : PackManager.MIN_COUNT}
 }).sort({
 }).sort({
 	update_count:-1
 	update_count:-1
-}).limit 1000, (err, results) ->
+}).limit LIMIT, (err, results) ->
 	if err?
 	if err?
 		logger.log {err}, 'error checking for updates'
 		logger.log {err}, 'error checking for updates'
 		finish()
 		finish()