tdb: Improve debugging when the allrecord lock fails to upgrade
authorAndrew Bartlett <abartlet@samba.org>
Thu, 30 Mar 2017 06:11:06 +0000 (19:11 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 22 May 2017 23:13:24 +0000 (01:13 +0200)
Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
lib/tdb/common/transaction.c

index f1050a2f7d9e9c86856d1469739c2a2d70ca1c85..420e754d9b6e36c1aabcc6bb09ac296cd6f61829 100644 (file)
@@ -986,10 +986,23 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
 
        /* upgrade the main transaction lock region to a write lock */
        if (tdb_allrecord_upgrade(tdb) == -1) {
-               TDB_LOG((tdb, TDB_DEBUG_ERROR,
-                       "tdb_transaction_prepare_commit: "
-                       "failed to upgrade hash locks: %s\n",
-                        tdb_errorstr(tdb)));
+               if (tdb->ecode == TDB_ERR_RDONLY && tdb->read_only) {
+                       TDB_LOG((tdb, TDB_DEBUG_ERROR,
+                                "tdb_transaction_prepare_commit: "
+                                "failed to upgrade hash locks: "
+                                "database is read only\n"));
+               } else if (tdb->ecode == TDB_ERR_RDONLY
+                          && tdb->traverse_read) {
+                       TDB_LOG((tdb, TDB_DEBUG_ERROR,
+                                "tdb_transaction_prepare_commit: "
+                                "failed to upgrade hash locks: "
+                                "a database traverse is in progress\n"));
+               } else {
+                       TDB_LOG((tdb, TDB_DEBUG_ERROR,
+                                "tdb_transaction_prepare_commit: "
+                                "failed to upgrade hash locks: %s\n",
+                                tdb_errorstr(tdb)));
+               }
                _tdb_transaction_cancel(tdb);
                return -1;
        }