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()
Exemple #2
0
    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))
Exemple #3
0
    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))
Exemple #4
0
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()