1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-04 18:29:17 +02:00

Don't auto-migrate because it's slow when many processes have to do the same.

This commit is contained in:
Simo Kinnunen 2014-04-02 14:39:07 +09:00
parent 5183485a53
commit 8f90ce0e02
2 changed files with 131 additions and 97 deletions

View file

@ -435,6 +435,23 @@ program
})
})
program
.command('migrate')
.description('migrates the database to the latest version')
.action(function() {
var log = logger.createLogger('cli:migrate')
, db = require('./db')
db.setup()
.then(function() {
process.exit(0)
})
.catch(function(err) {
log.fatal('Migration had an error:', err.stack)
process.exit(1)
})
})
program
.command('local [serial..]')
.description('start everything locally')
@ -485,114 +502,124 @@ program
.option('-d, --disable-watch'
, 'disable watching resources')
.action(function() {
var log = logger.createLogger('cli')
var log = logger.createLogger('cli:local')
, options = cliutil.lastArg(arguments)
, db = require('./db')
var procs = [
// app triproxy
procutil.fork(__filename, [
'triproxy', 'app001'
, '--bind-pub', options.bindAppPub
, '--bind-dealer', options.bindAppDealer
, '--bind-pull', options.bindAppPull
])
// Each forked process waits for signals to stop, and we run over the
// default limit of 10. So, it's not a leak, but a refactor wouldn't hurt.
process.setMaxListeners(20)
// device triproxy
, procutil.fork(__filename, [
'triproxy', 'dev001'
, '--bind-pub', options.bindDevPub
, '--bind-dealer', options.bindDevDealer
, '--bind-pull', options.bindDevPull
])
function run() {
var procs = [
// app triproxy
procutil.fork(__filename, [
'triproxy', 'app001'
, '--bind-pub', options.bindAppPub
, '--bind-dealer', options.bindAppDealer
, '--bind-pull', options.bindAppPull
])
// processor one
, procutil.fork(__filename, [
'processor', 'proc001'
, '--connect-app-dealer', options.bindAppDealer
, '--connect-dev-dealer', options.bindDevDealer
])
// device triproxy
, procutil.fork(__filename, [
'triproxy', 'dev001'
, '--bind-pub', options.bindDevPub
, '--bind-dealer', options.bindDevDealer
, '--bind-pull', options.bindDevPull
])
// processor two
, procutil.fork(__filename, [
'processor', 'proc002'
, '--connect-app-dealer', options.bindAppDealer
, '--connect-dev-dealer', options.bindDevDealer
])
// processor one
, procutil.fork(__filename, [
'processor', 'proc001'
, '--connect-app-dealer', options.bindAppDealer
, '--connect-dev-dealer', options.bindDevDealer
])
// reaper one
, procutil.fork(__filename, [
'reaper', 'reaper001'
, '--connect-push', options.bindDevPull
])
// processor two
, procutil.fork(__filename, [
'processor', 'proc002'
, '--connect-app-dealer', options.bindAppDealer
, '--connect-dev-dealer', options.bindDevDealer
])
// provider
, procutil.fork(__filename, [
'provider'
, '--name', options.provider
, '--connect-sub', options.bindDevPub
, '--connect-push', options.bindDevPull
].concat(cliutil.allUnknownArgs(arguments)))
// reaper one
, procutil.fork(__filename, [
'reaper', 'reaper001'
, '--connect-push', options.bindDevPull
])
// auth-mock
, procutil.fork(__filename, [
'auth-mock'
, '--port', options.authPort
, '--secret', options.authSecret
, '--app-url', util.format('http://localhost:%d/', options.appPort)
])
// provider
, procutil.fork(__filename, [
'provider'
, '--name', options.provider
, '--connect-sub', options.bindDevPub
, '--connect-push', options.bindDevPull
].concat(cliutil.allUnknownArgs(arguments)))
// app
, procutil.fork(__filename, [
'app'
, '--port', options.appPort
, '--secret', options.authSecret
, '--auth-url', util.format('http://localhost:%d/', options.authPort)
, '--storage-url'
, util.format('http://localhost:%d/', options.storagePort)
, '--connect-sub', options.bindAppPub
, '--connect-push', options.bindAppPull
].concat((function() {
var extra = []
if (options.disableWatch) {
extra.push('--disable-watch')
}
return extra
})()))
// auth-mock
, procutil.fork(__filename, [
'auth-mock'
, '--port', options.authPort
, '--secret', options.authSecret
, '--app-url', util.format('http://localhost:%d/', options.appPort)
])
// storage
, procutil.fork(__filename, [
'storage-temp'
, '--port', options.storagePort
])
]
// app
, procutil.fork(__filename, [
'app'
, '--port', options.appPort
, '--secret', options.authSecret
, '--auth-url', util.format('http://localhost:%d/', options.authPort)
, '--storage-url'
, util.format('http://localhost:%d/', options.storagePort)
, '--connect-sub', options.bindAppPub
, '--connect-push', options.bindAppPull
].concat((function() {
var extra = []
if (options.disableWatch) {
extra.push('--disable-watch')
}
return extra
})()))
function shutdown() {
log.info('Shutting down all child processes')
procs.forEach(function(proc) {
proc.cancel()
// storage
, procutil.fork(__filename, [
'storage-temp'
, '--port', options.storagePort
])
]
function shutdown() {
log.info('Shutting down all child processes')
procs.forEach(function(proc) {
proc.cancel()
})
return Promise.settle(procs)
}
process.on('SIGINT', function() {
log.info('Received SIGINT, waiting for processes to terminate')
})
return Promise.settle(procs)
process.on('SIGTERM', function() {
log.info('Received SIGTERM, waiting for processes to terminate')
})
return Promise.all(procs)
.then(function() {
process.exit(0)
})
.catch(function(err) {
log.fatal('Child process had an error', err.stack)
return shutdown()
.then(function() {
process.exit(1)
})
})
}
process.on('SIGINT', function() {
log.info('Received SIGINT, waiting for processes to terminate')
})
process.on('SIGTERM', function() {
log.info('Received SIGTERM, waiting for processes to terminate')
})
Promise.all(procs)
.then(function() {
process.exit(0)
})
.catch(function(err) {
log.fatal('Child process had an error', err.stack)
return shutdown()
.then(function() {
process.exit(1)
})
})
procutil.fork(__filename, ['migrate'])
.then(run)
})
program.parse(process.argv)