def _subscribeServer(self, client, job, multinode=False): if multinode: from rmake_plugins.multinode.build import builder from rmake.multinode.server import subscriber client = builder.BuilderNodeClient(self.rmakeCfg, job.jobId, job) publisher = subscriber._RmakeBusPublisher(client) publisher.attach(job) while not client.bus.isRegistered(): client.serve_once() return publisher else: from rmake.build import subscriber subscriber._RmakeServerPublisherProxy(client.uri).attach(job)
def __init__(self, uri, cfg, repositoryPid=None, proxyPid=None, pluginMgr=None, quiet=False): util.mkdirChain(cfg.logDir) logPath = cfg.logDir + '/rmake.log' rpcPath = cfg.logDir + '/xmlrpc.log' serverLogger = ServerLogger() serverLogger.disableRPCConsole() serverLogger.logToFile(logPath) serverLogger.logRPCToFile(rpcPath) if quiet: serverLogger.setQuietMode() else: if cfg.verbose: logLevel = logging.DEBUG else: logLevel = logging.INFO serverLogger.enableConsole(logLevel) serverLogger.info( '*** Started rMake Server at pid %s (serving at %s)' % (os.getpid(), uri)) try: self._initialized = False self.db = None # forked jobs that are currently active self._buildPids = {} self.uri = uri self.cfg = cfg self.repositoryPid = repositoryPid self.proxyPid = proxyPid apirpc.XMLApiServer.__init__( self, uri, logger=serverLogger, forkByDefault=True, sslCertificate=cfg.getSslCertificatePath(), caCertificate=cfg.getCACertificatePath()) self._setUpInternalUser() self.db = database.Database(cfg.getDbPath(), cfg.getDbContentsPath()) self.auth = auth.AuthenticationManager(cfg.getAuthUrl(), self.db) if pluginMgr is None: pluginMgr = plugins.PluginManager([]) self.plugins = pluginMgr # any jobs that were running before are not running now subscriberLog = logger.Logger('susbscriber', self.cfg.getSubscriberLogPath()) self._publisher = publish._RmakeServerPublisher( subscriberLog, self.db, self._fork) self.worker = worker.Worker(self.cfg, self._logger) dbLogger = subscriber._JobDbLogger(self.db) # note - it's important that the db logger # comes first, before the general publisher, # so that whatever published is actually # recorded in the DB. self._subscribers = [dbLogger] if self.uri: s = subscriber._RmakeServerPublisherProxy(self.uri) else: # testsuite path - external subscribers also go through # internal interface when the server is not run as a separate # process. s = subscriber._RmakeServerPublisherProxy(ShimAddress(self)) self._subscribers.append(s) self._internalSubscribers = [dbLogger] s = subscriber._RmakeServerPublisherProxy(ShimAddress(self)) self._internalSubscribers.append(s) self.plugins.callServerHook('server_postInit', self) except errors.uncatchableExceptions: raise except Exception, err: self.error('Error initializing rMake Server:\n %s\n%s', err, traceback.format_exc()) self._try('halt', self._shutDown) raise
def __init__(self, uri, cfg, repositoryPid=None, proxyPid=None, pluginMgr=None, quiet=False): util.mkdirChain(cfg.logDir) logPath = cfg.logDir + '/rmake.log' rpcPath = cfg.logDir + '/xmlrpc.log' serverLogger = ServerLogger() serverLogger.disableRPCConsole() serverLogger.logToFile(logPath) serverLogger.logRPCToFile(rpcPath) if quiet: serverLogger.setQuietMode() else: if cfg.verbose: logLevel = logging.DEBUG else: logLevel = logging.INFO serverLogger.enableConsole(logLevel) serverLogger.info('*** Started rMake Server at pid %s (serving at %s)' % (os.getpid(), uri)) try: self._initialized = False self.db = None # forked jobs that are currently active self._buildPids = {} self.uri = uri self.cfg = cfg self.repositoryPid = repositoryPid self.proxyPid = proxyPid apirpc.XMLApiServer.__init__(self, uri, logger=serverLogger, forkByDefault = True, sslCertificate=cfg.getSslCertificatePath(), caCertificate=cfg.getCACertificatePath()) self._setUpInternalUser() self.db = database.Database(cfg.getDbPath(), cfg.getDbContentsPath()) self.auth = auth.AuthenticationManager(cfg.getAuthUrl(), self.db) if pluginMgr is None: pluginMgr = plugins.PluginManager([]) self.plugins = pluginMgr # any jobs that were running before are not running now subscriberLog = logger.Logger('susbscriber', self.cfg.getSubscriberLogPath()) self._publisher = publish._RmakeServerPublisher(subscriberLog, self.db, self._fork) self.worker = worker.Worker(self.cfg, self._logger) dbLogger = subscriber._JobDbLogger(self.db) # note - it's important that the db logger # comes first, before the general publisher, # so that whatever published is actually # recorded in the DB. self._subscribers = [dbLogger] if self.uri: s = subscriber._RmakeServerPublisherProxy(self.uri) else: # testsuite path - external subscribers also go through # internal interface when the server is not run as a separate # process. s = subscriber._RmakeServerPublisherProxy(ShimAddress(self)) self._subscribers.append(s) self._internalSubscribers = [dbLogger] s = subscriber._RmakeServerPublisherProxy(ShimAddress(self)) self._internalSubscribers.append(s) self.plugins.callServerHook('server_postInit', self) except errors.uncatchableExceptions: raise except Exception, err: self.error('Error initializing rMake Server:\n %s\n%s', err, traceback.format_exc()) self._try('halt', self._shutDown) raise
def _subscribeServer(self, client, job): subscriber._RmakeServerPublisherProxy(client.uri).attach(job)