#!/usr/bin/env node
/ Copyright 2015 The MemDB Authors. / / Licensed under the Apache License, Version 2.0 (the "License"); / you may not use this file except in compliance with the License. / You may obtain a copy of the License at / / http://www.apache.org/licenses/LICENSE-2.0 / / Unless required by applicable law or agreed to in writing, software / distributed under the License is distributed on an "AS IS" BASIS, / WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or / implied. See the License for the specific language governing / permissions and limitations under the License. See the AUTHORS file / for names of contributors.
'use strict';
var helpContent = '\ MemDB - Distributed transactional in memory database\n\n\ Usage: memdbd [options]\n\ Options:\n\ -c, –conf path Config file path\n\ -s, –shard shardId Start specific shard\n\ -d, –daemon Start as daemon\n\ -h, –help Display this help\n';
if (require.main = module) {
var argv = require('minimist')(process.argv.slice(2));
if(process.argv.length <= 2 || argv.help || argv.h){ console.log(helpContent); process.exit(0); }
var confPath = argv.conf || argv.c; var shardId = argv.shard || argv.s; if(!shardId){ throw new Error('Please specify shardId with –shard'); }
//Become daemon if((argv.d || argv.daemon) && !process.env.__parentPid){
process.env.__parentPid = process.pid;
var opts = { stdio : 'ignore', env : process.env, cwd : process.cwd(), detached : true, }; var args = [].concat(process.argv); args.shift(); // shift off node
process.stdout.write('starting ' + shardId + '… ');
var child = require('child_process').spawn(process.execPath, args, opts); child.on('exit', function(code, signal){ if(code !== 0){ process.stdout.write('failed\n'); process.exit(1); } else{ process.exit(0); } }); child.unref();
process.on('SIGUSR2', function(){ process.stdout.write('success\n'); process.exit(0); });
// prevent from exit process.on('SIGTERM', function(){}); process.on('SIGINT', function(){}); setTimeout(function(){}, 100000000);
return; }
var config = require('../app/config'); var conf = config.init(confPath, shardId); var shardConfig = config.shardConfig(shardId);
require('../app/server').start(shardConfig) .then(function(){ // send signal to parent process var parentPid = process.env.__parentPid; if(parentPid){ process.kill(parentPid, 'SIGUSR2'); } }, function(e){ console.error(e.stack ? e.stack : e);
require('memdb-logger').shutdown(function(){ process.exit(1); }); }); }