def recover_db()

in dcrpm/rpmutil.py [0:0]


    def recover_db(self):
        # type: () -> None
        """
        Runs `db_recover`.
        """
        proc = run_with_timeout(
            [self.recover_path, "-h", self.dbpath],
            RECOVER_TIMEOUT_SEC,
            raise_on_nonzero=False,
        )
        # We've seen an unrecoverable failure mode where
        # db_recover segfaults, remediable only by a rebuild
        if proc.returncode != StatusCode.SUCCESS:
            self.status_logger.warning("db_recover_failed")
            if proc.returncode == StatusCode.SEGFAULT:
                raise DBNeedsRebuild
            else:
                raise DcRPMException(
                    "db_recover returned nonzero exit code ({}): {} {}".format(
                        proc.returncode, proc.stdout, proc.stderr
                    )
                )
        elif self.forensic:
            self.status_logger.debug(proc.stderr, extra={"key": "db_recover"})