def Startup()

in automation/tinc/main/ext/qautils/gppylib/operations/gpMigratorUtil.py [0:0]


    def Startup(self, env, utility=False, upgrade=False):
        '''
        Starts up the specified database
        '''

        if self.dbup:
            raise UpgradeError('database already started')
        self.dbup = [env, utility]

        isu = ""
        if utility:
            isu = " in utility mode"
        elif upgrade:
            isu = " in upgrade mode"

        if (env == self.oldenv):
            logger.info('Starting old Greenplum postmaster%s' % isu)
        else:
            logger.info('Starting new Greenplum postmaster%s' % isu)

        try:
            cmd = "gpstart -a"
            if utility:
                cmd = cmd +' -m'
                env['GPSTART_INTERNAL_MASTER_ONLY'] = '1'

            if upgrade:  cmd = cmd +' -U upgrade'

            cmd += ' -l %s' % self.logdir

            locked = os.path.join(env['MASTER_DATA_DIRECTORY'],
                                  'pg_hba.conf'+LOCKEXT)
            try:
                if os.path.exists(locked):
                    env['PGUSER'] = MIGRATIONUSER
                    logger.debug("lockfile: '%s' exists" % locked)
                else:
                    logger.debug("lockfile: '%s' does not exist" % locked)

                logger.debug("Starting cluster with env = %s" % str(env))
                pid = subprocess.Popen(cmd, preexec_fn=os.setpgrp,
                                       env=env, shell=True,
                                       stdout=self.logfile, 
                                       stderr=self.logfile, 
                                       close_fds=True)
            finally:
                if os.path.exists(locked):
                    del env['PGUSER']

            # Ignore interrupt requests until startup is done
            error = None
            retcode = None
            while retcode == None:
                try: 
                    retcode = pid.wait();

                except KeyboardInterrupt, e:
                    if not self.interrupted:
                        logger.fatal('***************************************')
                        logger.fatal('SIGINT-: Upgrade Aborted')
                        logger.fatal('***************************************')
                        logger.info( 'Performing clean abort')
                        self.interrupted = True
                        error = e
                    else:
                        logger.info( 'SIGINT-: Still processing shutdown')

            if retcode < 0:
                raise UpgradeError("Startup terminated by signal");

            today = date.today().strftime('%Y%m%d')
            logname = os.path.join(self.logdir, 'gpstart_%s.log' % today)
            if retcode == 1:
                logger.warn('***************************************')
                logger.warn('Warnings generated starting cluster')
                logger.warn('Check %s for detailed warnings' % logname)
                logger.warn('***************************************')
            if retcode > 1:
                logger.fatal('***************************************')
                logger.fatal('Startup failed with error code %d' % retcode)
                logger.fatal('Check %s for detailed warnings' % logname)
                logger.fatal('***************************************')
                raise UpgradeError('Startup failed')

            # If we recieved an interrupt, resignal it now that the startup is done
            if error: 
                raise error

        except OSError, e:
            logger.fatal(str(e))
            raise UpgradeError('Startup failed')

        self.CheckUp();