\fBb10\-dbutil\fR
operates in one of two modes, check mode or upgrade mode\&.
.PP
-In check mode (\fBb10\-dbutil \-\-check\fR), the utility reads the version of the database schema from the database and prints it\&. It will tell you whether the schema is at the latest version supported by BIND 10\&. Exit status is 0 if the schema is at the correct version, 1 if the schema is at an older version, 2 if the schema is at a version not yet supported by this version of b10\-dbutil\&. Any higher value indicates a read or command\-line error\&.
+In check mode (\fBb10\-dbutil \-\-check\fR), the utility reads the version of the database schema from the database and prints it\&. It will tell you whether the schema is at the latest version supported by BIND 10\&. Exit status is 0 if the schema is at the correct version, 1 if the schema is at an older version, 2 if the schema is at a version not yet supported by this version of b10\-dbutil\&. Any higher value indicates an error during command\-line parsing or execution\&.
.PP
When the upgrade function is selected (\fBb10\-dbutil \-\-upgrade\fR), the utility takes a copy of the database, then upgrades it to the latest version of the schema\&. The contents of the database remain intact\&. (The backup file is a file in the same directory as the database file\&. It has the same name, with "\&.backup" appended to it\&. If a file of that name already exists, the file will have the suffix "\&.backup\-1"\&. If that exists, the file will be suffixed "\&.backup\-2", and so on)\&. Exit status is 0 if the upgrade is either succesful or aborted by the user, and non\-zero if there is an error\&.
.PP
.PP
\fB\-\-verbose\fR
.RS 4
-Enable verbose mode\&. Each SQL command issued by the utility will be printed to stdout before it is executed\&.
+Enable verbose mode\&. Each SQL command issued by the utility will be printed to stderr before it is executed\&.
.RE
.PP
\fB\-\-quiet\fR
version supported by BIND 10. Exit status is 0 if the schema is at
the correct version, 1 if the schema is at an older version, 2 if
the schema is at a version not yet supported by this version of
- b10-dbutil. Any higher value indicates a read or command-line error.
+ b10-dbutil. Any higher value indicates an error during command-line
+ parsing or execution.
</para>
<para>
</term>
<listitem>
<para>Enable verbose mode. Each SQL command issued by the
- utility will be printed to stdout before it is executed.</para>
+ utility will be printed to stderr before it is executed.</para>
</listitem>
</varlistentry>
upgrade fails.
"""
+# Exit codes
+# These are defined here because one of them is already used before most
+# of the import statements.
+EXIT_SUCCESS = 0
+EXIT_NEED_UPDATE = 1
+EXIT_VERSION_TOO_HIGH = 2
+EXIT_COMMAND_ERROR = 3
+EXIT_READ_ERROR = 4
+EXIT_UPGRADE_ERROR = 5
+EXIT_UNCAUGHT_EXCEPTION = 6
+
import sys; sys.path.append("@@PYTHONPATH@@")
+
+# Normally, python exits with a status code of 1 on uncaught exceptions
+# Since we reserve exit status 1 for 'database needs upgrade', we
+# override the excepthook to exit with a different status
+def my_except_hook(a, b, c):
+ sys.__excepthook__(a,b,c)
+ sys.exit(EXIT_UNCAUGHT_EXCEPTION)
+sys.excepthook = my_except_hook
+
import os, sqlite3, shutil
from optparse import OptionParser
import isc.util.process
TRACE_BASIC = logger.DBGLVL_TRACE_BASIC
+
# @brief Version String
# This is the version displayed to the user. It comprises the module name,
# the module version number, and the overall BIND 10 version number (set in
# configure.ac)
VERSION = "b10-dbutil 20120319 (BIND 10 @PACKAGE_VERSION@)"
-# Exit codes
-EXIT_SUCCESS = 0
-EXIT_NEED_UPDATE = 1
-EXIT_VERSION_TOO_HIGH = 2
-EXIT_COMMAND_ERROR = 3
-EXIT_READ_ERROR = 4
-EXIT_UPGRADE_ERROR = 5
-
# @brief Statements to Update the Database
# These are in the form of a list of dictionaries, each of which contains the
# information to perform an incremental upgrade from one version of the
except Exception as ex:
if in_progress:
logger.error(DBUTIL_UPGRADE_FAILED, ex)
- logger.warn(DBUTIL_DATABASE_MAY_BE_CORRUPTED)
+ logger.warn(DBUTIL_DATABASE_MAY_BE_CORRUPT, db.db_file,
+ db.backup_file)
else:
logger.error(DBUTIL_UPGRADE_PREPARATION_FAILED, ex)
logger.info(DBUTIL_UPGRADE_NOT_ATTEMPTED)
exit_code = EXIT_UPGRADE_ERROR
- else:
- logger.error(DBUTIL_NO_ACTION_SPECIFIED)
- exit_code = EXIT_COMMAND_ERROR
sys.exit(exit_code)
b10-dbutil was called with both the commands --upgrade and --check. Only one
action can be performed at a time.
-% DBUTIL_DATABASE_MAY_BE_CORRUPTED database may be corrupt, restore it from backup
+% DBUTIL_DATABASE_MAY_BE_CORRUPT database file %1 may be corrupt, restore it from backup (%2)
The upgrade failed while it was in progress; the database may now be in an
inconsistent state, and it is advised to restore it from the backup that was
created when b10-dbutil started.
% DBUTIL_FILE Database file: %1
The database file that is being checked.
-% DBUTIL_NO_ACTION_SPECIFIED Command error: neither --check nor --upgrade selected
-b10-dbutil was called without either --check or --upgrade.
-
% DBUTIL_NO_FILE must supply name of the database file to upgrade
b10-dbutil was called without a database file. Currently, it cannot find this
file on its own, and it must be provided.
echo "13.3 quiet flag"
copy_file $testdata/old_v1.sqlite3 $tempfile
-../run_dbutil.sh --check --quiet $tempfile 2>&1 | grep dbutil
+../run_dbutil.sh --check --quiet $tempfile 2>&1 | grep .
failzero $?
rm -f $tempfile $backupfile