Browse Source

[963] addressed review comments

documentation changes
different exit status on uncaught exceptions
removed unused log message
updated 'corrupt' log message
improved 'quiet' test case
Jelte Jansen 13 years ago
parent
commit
a7254a232b

File diff suppressed because it is too large
+ 2 - 2
src/bin/dbutil/b10-dbutil.8


+ 3 - 2
src/bin/dbutil/b10-dbutil.xml

@@ -78,7 +78,8 @@
       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>
@@ -159,7 +160,7 @@
         </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>
 

+ 23 - 12
src/bin/dbutil/dbutil.py.in

@@ -34,7 +34,27 @@ The is the database name with ".backup" appended to it (or ".backup-n" if
 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
@@ -47,20 +67,13 @@ isc.util.process.rename()
 
 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
@@ -585,13 +598,11 @@ if __name__ == "__main__":
         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)

+ 1 - 4
src/bin/dbutil/dbutil_messages.mes

@@ -47,7 +47,7 @@ provided.
 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.
@@ -58,9 +58,6 @@ Debug message; the given SQL statement is executed
 % 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.

+ 1 - 1
src/bin/dbutil/tests/dbutil_test.sh.in

@@ -445,7 +445,7 @@ rm -f $tempfile $backupfile
 
 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