def startForkLoop(event): if not monkeypatcher.PATCHED: errline() errline("sauna.reload is not installed correctly!") errline("Your are missing following line from instance part " "of your buildout:") errline() errline(" zope-conf-additional = %import sauna.reload") errline() errline("Not starting fork loop.") errline() return if not reload_paths: errline() errline("sauna.reload: No paths in RELOAD_PATH environment variable. " "Not starting fork loop.") errline("Set it to your development egg paths to activate reloading") errline() errline("Example:") errline(" $ RELOAD_PATH=src/ bin/instance fg") errline() return # Start fs monitor before the forkloop watcher.Watcher(reload_paths.getParentPaths(), forkloop).start() # Build and execute a configuration file to include meta, configuration and # overrides for dependencies of the deferred development packages. autoinclude.includeDependenciesForDeferred() autoinclude.checkDeferringErrors() config = getConfiguration() zserver = [server for server in config.servers if isinstance(server, zhttp_server)][0] logger.info("We saved at least %s seconds from boot up time" % (time.time() - forkloop.boot_started)) logger.info("Overview available at http://127.0.0.1:%i/@@saunareload" % (zserver.port)) forkloop.start()
def loop(self): """ Magic happens here """ registerHandler(signal.SIGINT, self._parentExitHandler) registerHandler(signal.SIGTERM, self._parentExitHandler) self.active = True logger.info("Fork loop starting on parent. PID %i" % os.getpid()) while True: self.forking = False if self.exit: return if self.fork: self.fork = False if self.pause: # Pause mode. No forks now. continue if not self.killed_child: errline() errline("Child died on bootup. " "Pausing fork loop for now.") errline("Fix possible errors and save edits " "and we'll try booting again.") errline("Waiting...") # Child died because of unknown reason. Mark it as killed # and go into pause mode. self.killed_child = True self.pause = True continue if self.isChildAlive(): # Child is still alive for some reason. Lets wait few # rounds for it to die. continue self.forking = True self.startChildBooTimer() self.child_pid = os.fork() if self.child_pid == 0: break self.killed_child = False time.sleep(1) logger.setChildLogger() logger.info("Forked new child. Installing reloadable products...") self._prepareNewChild() self.forking = False logger.logDeferredErrors() logger.logDeferred() logger.info("Booted up new child in %s seconds. PID %i" % (time.time() - self.child_started, os.getpid())) notify(NewChildIsReady(self))
def loop(self): """ Magic happens here """ registerHandler(signal.SIGINT, self._parentExitHandler) registerHandler(signal.SIGTERM, self._parentExitHandler) self.active = True logger.info("Fork loop starting on parent. PID %i" % os.getpid()) while True: self.forking = False if self.exit: return if self.fork: self.fork = False if self.pause: # Pause mode. No forks now. continue if not self.killed_child: errline() errline("Child died on bootup. Pausing fork loop for now. ") errline("Fix possible errors and save edits and we'll try booting again.") errline("Waiting...") # Child died because of unknown reason. Mark it as killed # and go into pause mode. self.killed_child = True self.pause = True continue if self.isChildAlive(): # Child is still alive for some reason. Lets wait few # rounds for it to die. continue self.forking = True self.startChildBooTimer() self.child_pid = os.fork() if self.child_pid == 0: break self.killed_child = False time.sleep(1) logger.setChildLogger() logger.info("Forked new child. Installing reloadable products...") self._prepareNewChild() self.forking = False logger.info("Booted up new new child in %s seconds. PID %i" % ( time.time() - self.child_started, os.getpid())) notify(NewChildIsReady(self))
def startForkLoop(event): if not monkeypatcher.PATCHED: errline() errline("sauna.reload is not installed correctly!") errline("Your are missing following line from instance part " "of your buildout:") errline() errline(" zope-conf-additional = %import sauna.reload") errline() errline("Not starting fork loop.") errline() return if not reload_paths: errline() errline("sauna.reload: No paths in RELOAD_PATH environment variable. " "Not starting fork loop.") errline("Set it to your development egg paths to activate reloading") errline() errline("Example:") errline(" $ RELOAD_PATH=src/ bin/instance fg") errline() return # Start fs monitor before the forkloop watcher.Watcher(reload_paths.getParentPaths(), forkloop).start() # Build and execute a configuration file to include meta, configuration and # overrides for dependencies of the deferred development packages. autoinclude.includeDependenciesForDeferred() autoinclude.checkDeferringErrors() config = getConfiguration() zserver = [ server for server in config.servers if isinstance(server, zhttp_server) ][0] logger.info("We saved at least %s seconds from boot up time" % (time.time() - forkloop.boot_started)) logger.info("Overview available at http://127.0.0.1:%i/@@saunareload" % (zserver.port)) forkloop.start()