def main(): try: logging.config.fileConfig(LOG_CONF_PATH) except: logging.basicConfig(filename='/dev/stdout', filemode='w+', level=logging.DEBUG) log = logging.getLogger("SuperVdsm.Server") log.warn("Could not init proper logging", exc_info=True) log = logging.getLogger("SuperVdsm.Server") try: log.debug("Making sure I'm root") if os.geteuid() != 0: sys.exit(errno.EPERM) log.debug("Parsing cmd args") authkey, parentPid = sys.argv[1:] log.debug("Creating PID file") with open(PIDFILE, "w") as f: f.write(str(os.getpid()) + "\n") log.debug("Cleaning old socket") if os.path.exists(ADDRESS): os.unlink(ADDRESS) log.debug("Setting up keep alive thread") monThread = threading.Thread(target=__pokeParent, args=[int(parentPid)]) monThread.setDaemon(True) monThread.start() log.debug("Creating remote object manager") manager = _SuperVdsmManager(address=ADDRESS, authkey=authkey) manager.register('instance', callable=_SuperVdsm) server = manager.get_server() servThread = threading.Thread(target=server.serve_forever) servThread.setDaemon(True) servThread.start() chown(ADDRESS, METADATA_USER, METADATA_GROUP) log.debug("Started serving super vdsm object") servThread.join() except Exception: log.error("Could not start Super Vdsm", exc_info=True) sys.exit(1) finally: try: os.unlink(ADDRESS) except OSError: pass
def main(): def bind(func): def wrapper(_SuperVdsm, *args, **kwargs): return func(*args, **kwargs) return wrapper for name, func in listPublicFunctions(): setattr(_SuperVdsm, name, logDecorator(bind(func))) try: logging.config.fileConfig(LOG_CONF_PATH) except: logging.basicConfig(filename='/dev/stdout', filemode='w+', level=logging.DEBUG) log = logging.getLogger("SuperVdsm.Server") log.warn("Could not init proper logging", exc_info=True) log = logging.getLogger("SuperVdsm.Server") try: log.debug("Making sure I'm root - SuperVdsm") if os.geteuid() != 0: sys.exit(errno.EPERM) pidfile = P_VDSM_RUN + 'supervdsmd.pid' pid = str(os.getpid()) with open(pidfile, 'w') as f: f.write(pid + "\n") log.debug("Parsing cmd args") address = sys.argv[1] log.debug("Cleaning old socket %s", address) if os.path.exists(address): os.unlink(address) log.debug("Setting up keep alive thread") try: log.debug("Creating remote object manager") manager = _SuperVdsmManager(address=address, authkey='') manager.register('instance', callable=_SuperVdsm) server = manager.get_server() servThread = threading.Thread(target=server.serve_forever) servThread.setDaemon(True) servThread.start() chown(address, getpwnam(VDSM_USER).pw_uid, METADATA_GROUP) log.debug("Started serving super vdsm object") threading.Thread(target=sourceRouteThread.subscribeToInotifyLoop(), name='sourceRoute').start() # Python bug of thread.join() will block signal # http://bugs.python.org/issue1167930 while servThread.isAlive(): servThread.join(5) finally: if os.path.exists(address): utils.rmFile(address) except Exception: log.error("Could not start Super Vdsm", exc_info=True) sys.exit(1)