From 510d88595f62cc769d0b577023d6cb226e9197e6 Mon Sep 17 00:00:00 2001 From: Noriko Hosoi Date: Thu, 26 Apr 2012 17:15:26 -0700 Subject: [PATCH] Ticket #345 - db deadlock return should not log error https://fedorahosted.org/389/ticket/345 Fix description: error log level is set to SLAPI_LOG_TRACE if DB_LOCK_DEADLOCK is returned from the BDB operations, otherwise set to SLAPI_LOG_FATAL. --- ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c | 57 ++++++++++++------------- 1 files changed, 27 insertions(+), 30 deletions(-) diff --git a/ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c b/ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c index 4eba4ed..53b37e4 100644 --- a/ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c +++ b/ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c @@ -63,6 +63,9 @@ static int entryrdn_noancestorid = 0; #define ASSERT(_x) ; #endif +#define ENTRYRDN_LOGLEVEL(rc) \ + (((rc)==DB_LOCK_DEADLOCK)?SLAPI_LOG_TRACE:SLAPI_LOG_FATAL) + #define ENTRYRDN_TAG "entryrdn-index" #define RDN_INDEX_SELF 'S' @@ -259,7 +262,7 @@ entryrdn_index_entry(backend *be, /* Make a cursor */ rc = db->cursor(db, db_txn, &cursor, 0); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "entryrdn_index_entry: Failed to make a cursor: %s(%d)\n", dblayer_strerror(rc), rc); cursor = NULL; @@ -280,8 +283,7 @@ bail: if (cursor) { int myrc = cursor->c_close(cursor); if (0 != myrc) { - int loglevel = (myrc == DB_LOCK_DEADLOCK) ? SLAPI_LOG_TRACE : SLAPI_LOG_FATAL; - slapi_log_error(loglevel, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(myrc), ENTRYRDN_TAG, "entryrdn_index_entry: Failed to close cursor: %s(%d)\n", dblayer_strerror(myrc), myrc); if (!rc) { @@ -375,7 +377,7 @@ entryrdn_index_read_ext(backend *be, /* Make a cursor */ rc = db->cursor(db, db_txn, &cursor, 0); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "entryrdn_index_read: Failed to make a cursor: %s(%d)\n", dblayer_strerror(rc), rc); cursor = NULL; @@ -394,8 +396,7 @@ bail: if (cursor) { int myrc = cursor->c_close(cursor); if (0 != myrc) { - int loglevel = (myrc == DB_LOCK_DEADLOCK) ? SLAPI_LOG_TRACE : SLAPI_LOG_FATAL; - slapi_log_error(loglevel, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(myrc), ENTRYRDN_TAG, "entryrdn_index_read: Failed to close cursor: %s(%d)\n", dblayer_strerror(myrc), myrc); if (!rc) { @@ -544,7 +545,7 @@ entryrdn_rename_subtree(backend *be, /* Make a cursor */ rc = db->cursor(db, db_txn, &cursor, 0); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "entryrdn_rename_subtree: Failed to make a cursor: %s(%d)\n", dblayer_strerror(rc), rc); cursor = NULL; @@ -663,7 +664,7 @@ entryrdn_rename_subtree(backend *be, renamedata.flags = DB_DBT_USERMEM; rc = _entryrdn_put_data(cursor, &key, &renamedata, RDN_INDEX_SELF); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "entryrdn_rename_subtree: Adding %s failed; " "%s(%d)\n", keybuf, dblayer_strerror(rc), rc); goto bail; @@ -735,7 +736,7 @@ entryrdn_rename_subtree(backend *be, } rc = _entryrdn_put_data(cursor, &key, &renamedata, RDN_INDEX_PARENT); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "entryrdn_rename_subtree: Adding " "%s failed; %s(%d)\n", keybuf, dblayer_strerror(rc), rc); @@ -770,7 +771,7 @@ entryrdn_rename_subtree(backend *be, renamedata.flags = DB_DBT_USERMEM; rc = _entryrdn_put_data(cursor, &key, &renamedata, RDN_INDEX_SELF); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "entryrdn_rename_subtree: Adding %s failed; " "%s(%d)\n", keybuf, dblayer_strerror(rc), rc); goto bail; @@ -853,8 +854,7 @@ bail: if (cursor) { int myrc = cursor->c_close(cursor); if (0 != myrc) { - int loglevel = (myrc == DB_LOCK_DEADLOCK) ? SLAPI_LOG_TRACE : SLAPI_LOG_FATAL; - slapi_log_error(loglevel, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(myrc), ENTRYRDN_TAG, "entryrdn_rename_subtree: Failed to close cursor: %s(%d)\n", dblayer_strerror(myrc), myrc); if (!rc) { @@ -950,7 +950,7 @@ entryrdn_get_subordinates(backend *be, /* Make a cursor */ rc = db->cursor(db, db_txn, &cursor, 0); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "entryrdn_get_subordinates: Failed to make a cursor: %s(%d)\n", dblayer_strerror(rc), rc); cursor = NULL; @@ -1001,8 +1001,7 @@ bail: if (cursor) { int myrc = cursor->c_close(cursor); if (0 != myrc) { - int loglevel = (myrc == DB_LOCK_DEADLOCK) ? SLAPI_LOG_TRACE : SLAPI_LOG_FATAL; - slapi_log_error(loglevel, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(myrc), ENTRYRDN_TAG, "entryrdn_get_subordinates: Failed to close cursor: %s(%d)\n", dblayer_strerror(myrc), myrc); if (!rc) { @@ -1171,8 +1170,7 @@ bail: if (cursor) { int myrc = cursor->c_close(cursor); if (0 != myrc) { - int loglevel = (myrc == DB_LOCK_DEADLOCK) ? SLAPI_LOG_TRACE : SLAPI_LOG_FATAL; - slapi_log_error(loglevel, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(myrc), ENTRYRDN_TAG, "entryrdn_lookup_dn: Failed to close cursor: %s(%d)\n", dblayer_strerror(myrc), myrc); if (!rc) { @@ -1324,8 +1322,7 @@ bail: if (cursor) { int myrc = cursor->c_close(cursor); if (0 != myrc) { - int loglevel = (myrc == DB_LOCK_DEADLOCK) ? SLAPI_LOG_TRACE : SLAPI_LOG_FATAL; - slapi_log_error(loglevel, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(myrc), ENTRYRDN_TAG, "entryrdn_get_parent: Failed to close cursor: %s(%d)\n", dblayer_strerror(myrc), myrc); if (!rc) { @@ -1760,7 +1757,7 @@ _entryrdn_put_data(DBC *cursor, DBT *key, DBT *data, char type) } else { keyword = "self"; } - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_put_data: Adding the %s link (%s) " "failed: %s (%d)\n", keyword, (char *)key->data, dblayer_strerror(rc), rc); @@ -1801,7 +1798,7 @@ retry_get: /* We found it, so delete it */ rc = cursor->c_del(cursor, 0); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_del_data: Deleting %s failed; " "%s(%d)\n", (char *)key->data, dblayer_strerror(rc), rc); @@ -1923,7 +1920,7 @@ _entryrdn_replace_suffix_id(DBC *cursor, DBT *key, DBT *adddata, /* SELF */ rc = cursor->c_put(cursor, key, adddata, DB_CURRENT); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_replace_suffix_id: Adding suffix %s failed: " "%s (%d)\n", normsuffix, dblayer_strerror(rc), rc); goto bail; @@ -2053,7 +2050,7 @@ retry_get2: id_internal_to_stored(id, pelem->rdn_elem_id); rc = cursor->c_put(cursor, key, &moddata, DB_CURRENT); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_replace_suffix_id: " "Fixing the parent link (%s) failed: %s (%d)\n", keybuf, dblayer_strerror(rc), rc); @@ -2152,7 +2149,7 @@ _entryrdn_insert_key(backend *be, existdata.flags = DB_DBT_MALLOC; rc = cursor->c_get(cursor, &key, &existdata, DB_SET); if (rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_insert_key: Get existing suffix %s " "failed: %s (%d)\n", nrdn, dblayer_strerror(rc), rc); @@ -2247,7 +2244,7 @@ _entryrdn_insert_key(backend *be, "_entryrdn_insert_key: Suffix %s added: %d\n", slapi_rdn_get_rdn(tmpsrdn), rc); } else { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_insert_key: Suffix \"%s\" not found: " "%s(%d)\n", nrdn, dblayer_strerror(rc), rc); goto bail; @@ -2347,7 +2344,7 @@ _entryrdn_insert_key(backend *be, "_entryrdn_insert_key: Node \"%s\" not found: " "%s(%d)\n", dn, dblayer_strerror(rc), rc); } else { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_insert_key: Getting \"%s\" failed: " "%s(%d)\n", dn, dblayer_strerror(rc), rc); } @@ -2367,7 +2364,7 @@ _entryrdn_insert_key(backend *be, } else { char *dn = NULL; slapi_rdn_get_dn(tmpsrdn, &dn); - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_insert_key: Suffix \"%s\" not found: " "%s(%d)\n", nrdn, dblayer_strerror(rc), rc); slapi_ch_free_string(&dn); @@ -2612,7 +2609,7 @@ retry_get0: /* the cursor is set at the parent link by _entryrdn_get_elem */ rc = cursor->c_del(cursor, 0); if (rc && DB_NOTFOUND != rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_delete_key: Deleting %s failed; " "%s(%d)\n", (char *)key.data, dblayer_strerror(rc), rc); @@ -2627,7 +2624,7 @@ retry_get0: /* the cursor is set at the parent link by _entryrdn_get_elem */ rc = cursor->c_del(cursor, 0); if (rc && DB_NOTFOUND != rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_delete_key: Deleting %s failed; " "%s(%d)\n", (char *)key.data, dblayer_strerror(rc), rc); @@ -2643,7 +2640,7 @@ retry_get0: /* the cursor is set at the parent link by _entryrdn_get_elem */ rc = cursor->c_del(cursor, 0); if (rc && DB_NOTFOUND != rc) { - slapi_log_error(SLAPI_LOG_FATAL, ENTRYRDN_TAG, + slapi_log_error(ENTRYRDN_LOGLEVEL(rc), ENTRYRDN_TAG, "_entryrdn_delete_key: Deleting %s failed; " "%s(%d)\n", (char *)key.data, dblayer_strerror(rc), rc); -- 1.7.7.6