From 26ef697318a7fec5ed82b000e3be4e30cfb16b50 Mon Sep 17 00:00:00 2001 From: Joseph Fernandes Date: Sat, 20 Jun 2015 14:38:12 +0530 Subject: tier/ctr: Ignore creation of T file and Ctr Lookup heal improvememnts 1) Ignore creation of T file in ctr_mknod 2) Ignore lookup for T file in ctr_lookup 3) Ctr_lookup: a. If the gfid and pgfid in empty dont record b. Decreased log level for multiple heal attempts c. Inode/File heal happens after an expiry period, which is configurable. d. Hardlink heal happens after an expiry period, which is configurable. Change-Id: Id8eb5092e78beaec22d05f5283645081619e2452 BUG: 1235269 Signed-off-by: Joseph Fernandes Reviewed-on: http://review.gluster.org/11334 Tested-by: Gluster Build System Reviewed-by: Dan Lambright Tested-by: Dan Lambright --- libglusterfs/src/gfdb/gfdb_data_store_types.h | 15 ++++++-- libglusterfs/src/gfdb/gfdb_sqlite3.c | 2 -- libglusterfs/src/gfdb/gfdb_sqlite3_helper.c | 49 ++++++++++++++++++--------- 3 files changed, 46 insertions(+), 20 deletions(-) (limited to 'libglusterfs/src') diff --git a/libglusterfs/src/gfdb/gfdb_data_store_types.h b/libglusterfs/src/gfdb/gfdb_data_store_types.h index b0511637ddc..f70a43a20fc 100644 --- a/libglusterfs/src/gfdb/gfdb_data_store_types.h +++ b/libglusterfs/src/gfdb/gfdb_data_store_types.h @@ -21,6 +21,16 @@ #include "dict.h" #include "libglusterfs-messages.h" +/* + * Helps in dynamically choosing log level + * */ +static inline gf_loglevel_t +_gfdb_log_level (gf_loglevel_t given_level, + gf_boolean_t ignore_level) +{ + return (ignore_level) ? GF_LOG_DEBUG : given_level; +} + typedef enum gf_db_operation { GFDB_INVALID_DB_OP = -1, /* Query DB OPS : All the Query DB_OP should be added */ @@ -66,8 +76,6 @@ typedef enum gf_db_operation { #define GF_COL_LINK_UPDATE "LINK_UPDATE" - - /***********************Time related********************************/ /*1 sec = 1000000 microsec*/ #define GFDB_MICROSEC 1000000 @@ -300,6 +308,9 @@ typedef struct gfdb_db_record { /* Global flag to Record/Not Record wind or wind time. * This flag will overrule do_record_uwind_time*/ gf_boolean_t do_record_times; + /* Ignoring errors while inserting. + * */ + gf_boolean_t ignore_errors; } gfdb_db_record_t; diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3.c b/libglusterfs/src/gfdb/gfdb_sqlite3.c index 7eca03f40e2..94553fba70d 100644 --- a/libglusterfs/src/gfdb/gfdb_sqlite3.c +++ b/libglusterfs/src/gfdb/gfdb_sqlite3.c @@ -176,8 +176,6 @@ sql_stmt_fini (char **sql_stmt) /****************************************************************************** * DB Essential functions used by - * create/insert/delete/update/query functions - * > execute_sqlstmt () * > gf_open_sqlite3_conn () * > gf_close_sqlite3_conn () * ***************************************************************************/ diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c b/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c index f3e0e9711a9..40ee24c9627 100644 --- a/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c +++ b/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c @@ -9,7 +9,7 @@ */ #include "gfdb_sqlite3_helper.h" -#include "libglusterfs-messages.h" + #define GFDB_SQL_STMT_SIZE 256 @@ -309,7 +309,8 @@ gf_sql_insert_link (gf_sql_connection_t *sql_conn, char *pargfid, char *basename, char *basepath, - gf_boolean_t link_consistency) + gf_boolean_t link_consistency, + gf_boolean_t ignore_errors) { int ret = -1; sqlite3_stmt *insert_stmt = NULL; @@ -332,8 +333,11 @@ gf_sql_insert_link (gf_sql_connection_t *sql_conn, ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, insert_str, -1, &insert_stmt, 0); if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed preparing insert " + gf_msg (GFDB_STR_SQLITE3, + _gfdb_log_level (GF_LOG_ERROR, ignore_errors), + 0, + LG_MSG_PREPARE_FAILED, + "Failed preparing insert " "statment %s : %s", insert_str, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); ret = -1; @@ -343,8 +347,11 @@ gf_sql_insert_link (gf_sql_connection_t *sql_conn, /*Bind gfid*/ ret = sqlite3_bind_text (insert_stmt, 1, gfid, -1, NULL); if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding gfid %s : %s", + gf_msg (GFDB_STR_SQLITE3, + _gfdb_log_level (GF_LOG_ERROR, ignore_errors), + 0, + LG_MSG_BINDING_FAILED, + "Failed binding gfid %s : %s", gfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); ret = -1; goto out; @@ -353,8 +360,10 @@ gf_sql_insert_link (gf_sql_connection_t *sql_conn, /*Bind pargfid*/ ret = sqlite3_bind_text (insert_stmt, 2, pargfid, -1, NULL); if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding parent gfid %s " + gf_msg (GFDB_STR_SQLITE3, + _gfdb_log_level (GF_LOG_ERROR, ignore_errors), + 0, LG_MSG_BINDING_FAILED, + "Failed binding parent gfid %s " ": %s", pargfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); ret = -1; @@ -364,8 +373,9 @@ gf_sql_insert_link (gf_sql_connection_t *sql_conn, /*Bind basename*/ ret = sqlite3_bind_text (insert_stmt, 3, basename, -1, NULL); if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, + gf_msg (GFDB_STR_SQLITE3, + _gfdb_log_level (GF_LOG_ERROR, ignore_errors), + 0, LG_MSG_BINDING_FAILED, "Failed binding basename %s : %s", basename, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); ret = -1; @@ -375,8 +385,10 @@ gf_sql_insert_link (gf_sql_connection_t *sql_conn, /*Bind basepath*/ ret = sqlite3_bind_text (insert_stmt, 4, basepath, -1, NULL); if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding basepath %s : " + gf_msg (GFDB_STR_SQLITE3, + _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0, + LG_MSG_BINDING_FAILED, + "Failed binding basepath %s : " "%s", basepath, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); ret = -1; @@ -385,8 +397,11 @@ gf_sql_insert_link (gf_sql_connection_t *sql_conn, /*Execute the prepare statement*/ if (sqlite3_step (insert_stmt) != SQLITE_DONE) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED, - "Failed executing the prepared stmt %s %s %s %s %s : %s", + gf_msg (GFDB_STR_SQLITE3, + _gfdb_log_level (GF_LOG_ERROR, ignore_errors), + 0, LG_MSG_EXEC_FAILED, + "Failed executing the prepared " + "stmt %s %s %s %s %s : %s", gfid, pargfid, basename, basepath, insert_str, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); ret = -1; @@ -777,7 +792,8 @@ gf_sql_insert_wind (gf_sql_connection_t *sql_conn, gfid_str, pargfid_str, gfdb_db_record->file_name, gfdb_db_record->file_path, - gfdb_db_record->link_consistency); + gfdb_db_record->link_consistency, + gfdb_db_record->ignore_errors); if (ret) { gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_INSERT_FAILED, "Failed " @@ -836,7 +852,8 @@ gf_sql_insert_wind (gf_sql_connection_t *sql_conn, gfid_str, pargfid_str, gfdb_db_record->file_name, gfdb_db_record->file_path, - gfdb_db_record->link_consistency); + gfdb_db_record->link_consistency, + gfdb_db_record->ignore_errors); if (ret) { gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_INSERT_FAILED, -- cgit