diff options
author | Gluster Ant <bugzilla-bot@gluster.org> | 2018-09-12 17:52:45 +0530 |
---|---|---|
committer | Nigel Babu <nigelb@redhat.com> | 2018-09-12 17:52:45 +0530 |
commit | e16868dede6455cab644805af6fe1ac312775e13 (patch) | |
tree | 15aebdb4fff2d87cf8a72f836816b3aa634da58d /libglusterfs/src/gfdb | |
parent | 45a71c0548b6fd2c757aa2e7b7671a1411948894 (diff) |
Land part 2 of clang-format changes
Change-Id: Ia84cc24c8924e6d22d02ac15f611c10e26db99b4
Signed-off-by: Nigel Babu <nigelb@redhat.com>
Diffstat (limited to 'libglusterfs/src/gfdb')
-rw-r--r-- | libglusterfs/src/gfdb/gfdb_data_store.c | 1005 | ||||
-rw-r--r-- | libglusterfs/src/gfdb/gfdb_data_store_helper.c | 773 | ||||
-rw-r--r-- | libglusterfs/src/gfdb/gfdb_sqlite3.c | 2355 | ||||
-rw-r--r-- | libglusterfs/src/gfdb/gfdb_sqlite3_helper.c | 2361 |
4 files changed, 3114 insertions, 3380 deletions
diff --git a/libglusterfs/src/gfdb/gfdb_data_store.c b/libglusterfs/src/gfdb/gfdb_data_store.c index 78fd22ee252..426596c571e 100644 --- a/libglusterfs/src/gfdb/gfdb_data_store.c +++ b/libglusterfs/src/gfdb/gfdb_data_store.c @@ -30,11 +30,10 @@ * gfdb_conn_node_t is an opaque structure. * */ struct gfdb_conn_node_t { - gfdb_connection_t gfdb_connection; - struct list_head conn_list; + gfdb_connection_t gfdb_connection; + struct list_head conn_list; }; - /* * db_conn_list is the circular linked list which * will have all the database connections for the process @@ -48,173 +47,168 @@ static gfdb_conn_node_t *db_conn_list; * */ static pthread_mutex_t db_conn_mutex = PTHREAD_MUTEX_INITIALIZER; - /*Checks the sanity of the connection node*/ -#define CHECK_CONN_NODE(_conn_node)\ -do {\ - GF_ASSERT (_conn_node);\ - GF_ASSERT (_conn_node->gfdb_connection.gf_db_connection);\ -} while (0) +#define CHECK_CONN_NODE(_conn_node) \ + do { \ + GF_ASSERT(_conn_node); \ + GF_ASSERT(_conn_node->gfdb_connection.gf_db_connection); \ + } while (0) /* Checks the sanity of the connection node and goto */ -#define CHECK_CONN_NODE_GOTO(_conn_node, label)\ -do {\ - if (!_conn_node) {\ - goto label;\ - };\ - if (!_conn_node->gfdb_connection.gf_db_connection) {\ - goto label;\ - };\ -} while (0) +#define CHECK_CONN_NODE_GOTO(_conn_node, label) \ + do { \ + if (!_conn_node) { \ + goto label; \ + }; \ + if (!_conn_node->gfdb_connection.gf_db_connection) { \ + goto label; \ + }; \ + } while (0) /*Check if the conn node is first in the list*/ -#define IS_FIRST_NODE(db_conn_list, _conn_node)\ - ((_conn_node == db_conn_list) ? _gf_true : _gf_false) - +#define IS_FIRST_NODE(db_conn_list, _conn_node) \ + ((_conn_node == db_conn_list) ? _gf_true : _gf_false) /*Check if the conn node is the only node in the list*/ -#define IS_THE_ONLY_NODE(_conn_node)\ -((_conn_node->conn_list.next == _conn_node->conn_list.prev)\ - ? _gf_true : _gf_false) - - +#define IS_THE_ONLY_NODE(_conn_node) \ + ((_conn_node->conn_list.next == _conn_node->conn_list.prev) ? _gf_true \ + : _gf_false) /*Internal Function: Adds connection node to the end of * the db connection list.*/ static int -add_connection_node (gfdb_conn_node_t *_conn_node) { - int ret = -1; - - GF_ASSERT (_conn_node); - - /*Lock the list*/ - ret = pthread_mutex_lock (&db_conn_mutex); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ret, - LG_MSG_LOCK_LIST_FAILED, "Failed lock db connection " - "list %s", strerror(ret)); - ret = -1; - goto out; - } - - if (db_conn_list == NULL) { - db_conn_list = _conn_node; - } else { - list_add_tail (&_conn_node->conn_list, - &db_conn_list->conn_list); - } - - /*unlock the list*/ - ret = pthread_mutex_unlock (&db_conn_mutex); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ret, - LG_MSG_UNLOCK_LIST_FAILED, "Failed unlock db " - "connection list %s", strerror(ret)); - ret = -1; - goto out; - /*TODO What if the unlock fails. - * Will it lead to deadlock? - * Most of the gluster code - * no check for unlock or destroy of mutex!*/ - } - ret = 0; +add_connection_node(gfdb_conn_node_t *_conn_node) +{ + int ret = -1; + + GF_ASSERT(_conn_node); + + /*Lock the list*/ + ret = pthread_mutex_lock(&db_conn_mutex); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ret, LG_MSG_LOCK_LIST_FAILED, + "Failed lock db connection " + "list %s", + strerror(ret)); + ret = -1; + goto out; + } + + if (db_conn_list == NULL) { + db_conn_list = _conn_node; + } else { + list_add_tail(&_conn_node->conn_list, &db_conn_list->conn_list); + } + + /*unlock the list*/ + ret = pthread_mutex_unlock(&db_conn_mutex); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ret, LG_MSG_UNLOCK_LIST_FAILED, + "Failed unlock db " + "connection list %s", + strerror(ret)); + ret = -1; + goto out; + /*TODO What if the unlock fails. + * Will it lead to deadlock? + * Most of the gluster code + * no check for unlock or destroy of mutex!*/ + } + ret = 0; out: - return ret; + return ret; } - /*Internal Function: * Delete connection node from the list*/ static int -delete_conn_node (gfdb_conn_node_t *_conn_node) +delete_conn_node(gfdb_conn_node_t *_conn_node) { - int ret = -1; - - GF_ASSERT (_conn_node); - - /*Lock of the list*/ - ret = pthread_mutex_lock (&db_conn_mutex); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ret, - LG_MSG_LOCK_LIST_FAILED, "Failed lock on db connection" - " list %s", strerror(ret)); - goto out; + int ret = -1; + + GF_ASSERT(_conn_node); + + /*Lock of the list*/ + ret = pthread_mutex_lock(&db_conn_mutex); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ret, LG_MSG_LOCK_LIST_FAILED, + "Failed lock on db connection" + " list %s", + strerror(ret)); + goto out; + } + + /*Remove the connection object from list*/ + if (IS_THE_ONLY_NODE(_conn_node)) { + db_conn_list = NULL; + GF_FREE(_conn_node); + } else { + if (IS_FIRST_NODE(db_conn_list, _conn_node)) { + db_conn_list = list_entry(db_conn_list->conn_list.next, + gfdb_conn_node_t, conn_list); } - - /*Remove the connection object from list*/ - if (IS_THE_ONLY_NODE(_conn_node)) { - db_conn_list = NULL; - GF_FREE (_conn_node); - } else { - if (IS_FIRST_NODE(db_conn_list, _conn_node)) { - db_conn_list = list_entry (db_conn_list->conn_list.next, - gfdb_conn_node_t, conn_list); - } - list_del(&_conn_node->conn_list); - GF_FREE (_conn_node); - } - - /*Release the list lock*/ - ret = pthread_mutex_unlock (&db_conn_mutex); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_WARNING, ret, - LG_MSG_UNLOCK_LIST_FAILED, "Failed unlock on db " - "connection list %s", strerror(ret)); - /*TODO What if the unlock fails. - * Will it lead to deadlock? - * Most of the gluster code - * no check for unlock or destroy of mutex!*/ - ret = -1; - goto out; - } - ret = 0; + list_del(&_conn_node->conn_list); + GF_FREE(_conn_node); + } + + /*Release the list lock*/ + ret = pthread_mutex_unlock(&db_conn_mutex); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_WARNING, ret, LG_MSG_UNLOCK_LIST_FAILED, + "Failed unlock on db " + "connection list %s", + strerror(ret)); + /*TODO What if the unlock fails. + * Will it lead to deadlock? + * Most of the gluster code + * no check for unlock or destroy of mutex!*/ + ret = -1; + goto out; + } + ret = 0; out: - return ret; + return ret; } - /*Internal function: Used initialize/map db operation of * specified type of db plugin*/ static int -init_db_operations (gfdb_db_type_t gfdb_db_type, - gfdb_db_operations_t *gfdb_db_operations) +init_db_operations(gfdb_db_type_t gfdb_db_type, + gfdb_db_operations_t *gfdb_db_operations) { + int ret = -1; - int ret = -1; + GF_ASSERT(gfdb_db_operations); - GF_ASSERT (gfdb_db_operations); - - /*Clear the gfdb_db_operations*/ - gfdb_db_operations = memset(gfdb_db_operations, 0, - sizeof(*gfdb_db_operations)); - switch (gfdb_db_type) { + /*Clear the gfdb_db_operations*/ + gfdb_db_operations = memset(gfdb_db_operations, 0, + sizeof(*gfdb_db_operations)); + switch (gfdb_db_type) { case GFDB_SQLITE3: - gf_sqlite3_fill_db_operations (gfdb_db_operations); - ret = 0; - break; + gf_sqlite3_fill_db_operations(gfdb_db_operations); + ret = 0; + break; case GFDB_HYPERDEX: case GFDB_HASH_FILE_STORE: case GFDB_ROCKS_DB: - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_UNSUPPORTED_PLUGIN, "Plugin not supported"); - break; + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_UNSUPPORTED_PLUGIN, + "Plugin not supported"); + break; case GFDB_INVALID_DB: case GFDB_DB_END: - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_INVALID_DB_TYPE, "Invalid DB Type"); - break; - } - return ret; + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_INVALID_DB_TYPE, + "Invalid DB Type"); + break; + } + return ret; } - /****************************************************************************** * * LIBGFDB API Functions * * ****************************************************************************/ - /*Libgfdb API Function: Used to initialize a db connection * (Constructor function for db connection object) * Arguments: @@ -225,85 +219,79 @@ init_db_operations (gfdb_db_type_t gfdb_db_type, * Returns : if successful return the GFDB Connection node to the caller or * NULL in case of failure*/ gfdb_conn_node_t * -init_db (dict_t *args, gfdb_db_type_t gfdb_db_type) +init_db(dict_t *args, gfdb_db_type_t gfdb_db_type) { - int ret = -1; - gfdb_conn_node_t *_conn_node = NULL; - gfdb_db_operations_t *db_operations_t = NULL; - - /*Create data base connection object*/ - _conn_node = GF_CALLOC (1, sizeof(gfdb_conn_node_t), - gf_mt_db_conn_node_t); - if (!_conn_node) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, - LG_MSG_NO_MEMORY, "Failed mem alloc for " - "gfdb_conn_node_t"); - goto alloc_failed; - } - - /*Init the list component of db connection object*/ - INIT_LIST_HEAD (&_conn_node->conn_list); - - - /*Add created connection node to the list*/ - ret = add_connection_node (_conn_node); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_ADD_TO_LIST_FAILED, "Failed to add connection " - "node to list"); - goto _conn_failed; - } - - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - - /*init the db ops object of db connection object*/ - ret = init_db_operations(gfdb_db_type, db_operations_t); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_INIT_DB_FAILED, "Failed initializing database " - "operation failed."); - goto init_db_failed; - } - - /*Calling the init_db_op of the respected db type*/ - GF_ASSERT (db_operations_t->init_db_op); - ret = db_operations_t->init_db_op (args, &_conn_node->gfdb_connection. - gf_db_connection); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_INIT_DB_FAILED, "Failed initializing database"); - goto init_db_failed; - } - _conn_node->gfdb_connection.gfdb_db_type = gfdb_db_type; - ret = 0; - - return _conn_node; - - /*****Error Handling********/ - /* If init_db_operations or init_db of plugin failed delete - * conn node from the list. - * connection node will be free by delete_conn_node*/ + int ret = -1; + gfdb_conn_node_t *_conn_node = NULL; + gfdb_db_operations_t *db_operations_t = NULL; + + /*Create data base connection object*/ + _conn_node = GF_CALLOC(1, sizeof(gfdb_conn_node_t), gf_mt_db_conn_node_t); + if (!_conn_node) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY, + "Failed mem alloc for " + "gfdb_conn_node_t"); + goto alloc_failed; + } + + /*Init the list component of db connection object*/ + INIT_LIST_HEAD(&_conn_node->conn_list); + + /*Add created connection node to the list*/ + ret = add_connection_node(_conn_node); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_ADD_TO_LIST_FAILED, + "Failed to add connection " + "node to list"); + goto _conn_failed; + } + + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + + /*init the db ops object of db connection object*/ + ret = init_db_operations(gfdb_db_type, db_operations_t); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_INIT_DB_FAILED, + "Failed initializing database " + "operation failed."); + goto init_db_failed; + } + + /*Calling the init_db_op of the respected db type*/ + GF_ASSERT(db_operations_t->init_db_op); + ret = db_operations_t->init_db_op( + args, &_conn_node->gfdb_connection.gf_db_connection); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_INIT_DB_FAILED, + "Failed initializing database"); + goto init_db_failed; + } + _conn_node->gfdb_connection.gfdb_db_type = gfdb_db_type; + ret = 0; + + return _conn_node; + + /*****Error Handling********/ + /* If init_db_operations or init_db of plugin failed delete + * conn node from the list. + * connection node will be free by delete_conn_node*/ init_db_failed: - ret = delete_conn_node (_conn_node); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DELETE_FROM_LIST_FAILED, "Failed deleting " - "connection node from list"); - } - return NULL; - /*if adding to the list failed free connection node*/ + ret = delete_conn_node(_conn_node); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DELETE_FROM_LIST_FAILED, + "Failed deleting " + "connection node from list"); + } + return NULL; + /*if adding to the list failed free connection node*/ _conn_failed: - GF_FREE (_conn_node); - /*if allocation failed*/ + GF_FREE(_conn_node); + /*if allocation failed*/ alloc_failed: - return NULL; - /*****Error Handling********/ + return NULL; + /*****Error Handling********/ } - - - - /*Libgfdb API Function: Used to terminate/de-initialize db connection * (Destructor function for db connection object) * Arguments: @@ -311,43 +299,38 @@ alloc_failed: * Returns : if successful return 0 or * -ve value in case of failure*/ int -fini_db (gfdb_conn_node_t *_conn_node) +fini_db(gfdb_conn_node_t *_conn_node) { - int ret = -1; - gfdb_db_operations_t *db_operations_t = NULL; - - CHECK_CONN_NODE_GOTO (_conn_node, empty); - - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - - GF_ASSERT (db_operations_t->fini_db_op); - - ret = db_operations_t->fini_db_op(&_conn_node->gfdb_connection. - gf_db_connection); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_CLOSE_CONNECTION_FAILED, "Failed close the db " - "connection"); - goto out; - } - - ret = delete_conn_node (_conn_node); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DELETE_FROM_LIST_FAILED, "Failed deleting " - "connection node from list"); - } + int ret = -1; + gfdb_db_operations_t *db_operations_t = NULL; + + CHECK_CONN_NODE_GOTO(_conn_node, empty); + + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + + GF_ASSERT(db_operations_t->fini_db_op); + + ret = db_operations_t->fini_db_op( + &_conn_node->gfdb_connection.gf_db_connection); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_CLOSE_CONNECTION_FAILED, + "Failed close the db " + "connection"); + goto out; + } + + ret = delete_conn_node(_conn_node); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DELETE_FROM_LIST_FAILED, + "Failed deleting " + "connection node from list"); + } empty: - ret = 0; + ret = 0; out: - return ret; + return ret; } - - - - - /*Libgfdb API Function: Used to insert/update records in the database * NOTE: In current gfdb_sqlite plugin we use that * same function to delete the record. Set the @@ -364,36 +347,32 @@ out: * Returns : if successful return 0 or * -ve value in case of failure*/ int -insert_record (gfdb_conn_node_t *_conn_node, - gfdb_db_record_t *gfdb_db_record) +insert_record(gfdb_conn_node_t *_conn_node, gfdb_db_record_t *gfdb_db_record) { - int ret = 0; - gfdb_db_operations_t *db_operations_t = NULL; - void *gf_db_connection = NULL; + int ret = 0; + gfdb_db_operations_t *db_operations_t = NULL; + void *gf_db_connection = NULL; - CHECK_CONN_NODE(_conn_node); + CHECK_CONN_NODE(_conn_node); - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; - if (db_operations_t->insert_record_op) { - - ret = db_operations_t->insert_record_op (gf_db_connection, - gfdb_db_record); - if (ret) { - gf_msg (GFDB_DATA_STORE, _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), 0, - LG_MSG_INSERT_OR_UPDATE_FAILED, "Insert/Update" - " operation failed"); - } + if (db_operations_t->insert_record_op) { + ret = db_operations_t->insert_record_op(gf_db_connection, + gfdb_db_record); + if (ret) { + gf_msg(GFDB_DATA_STORE, + _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record->ignore_errors), + 0, LG_MSG_INSERT_OR_UPDATE_FAILED, + "Insert/Update" + " operation failed"); } + } - return ret; + return ret; } - - - /*Libgfdb API Function: Used to delete record from the database * NOTE: In the current gfdb_sqlite3 plugin * implementation this function is dummy. @@ -405,31 +384,28 @@ insert_record (gfdb_conn_node_t *_conn_node, * Returns : if successful return 0 or * -ve value in case of failure*/ int -delete_record (gfdb_conn_node_t *_conn_node, - gfdb_db_record_t *gfdb_db_record) +delete_record(gfdb_conn_node_t *_conn_node, gfdb_db_record_t *gfdb_db_record) { - int ret = 0; - gfdb_db_operations_t *db_operations_t = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(_conn_node); + int ret = 0; + gfdb_db_operations_t *db_operations_t = NULL; + void *gf_db_connection = NULL; - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + CHECK_CONN_NODE(_conn_node); - if (db_operations_t->delete_record_op) { - - ret = db_operations_t->delete_record_op (gf_db_connection, - gfdb_db_record); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DELETE_FAILED, "Delete operation " - "failed"); - } + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + if (db_operations_t->delete_record_op) { + ret = db_operations_t->delete_record_op(gf_db_connection, + gfdb_db_record); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DELETE_FAILED, + "Delete operation " + "failed"); } + } - return ret; + return ret; } /*Libgfdb API Function: Compact the database. @@ -441,38 +417,31 @@ delete_record (gfdb_conn_node_t *_conn_node, * Returns : if successful return 0 or * -ve value in case of failure*/ int -compact_db (gfdb_conn_node_t *_conn_node, gf_boolean_t _compact_active, - gf_boolean_t _compact_mode_switched) +compact_db(gfdb_conn_node_t *_conn_node, gf_boolean_t _compact_active, + gf_boolean_t _compact_mode_switched) { - int ret = 0; - gfdb_db_operations_t *db_operations_t = NULL; - void *gf_db_connection = NULL; + int ret = 0; + gfdb_db_operations_t *db_operations_t = NULL; + void *gf_db_connection = NULL; - CHECK_CONN_NODE(_conn_node); + CHECK_CONN_NODE(_conn_node); - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; - - if (db_operations_t->compact_db_op) { - - ret = db_operations_t->compact_db_op (gf_db_connection, - _compact_active, - _compact_mode_switched); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_COMPACT_FAILED, "Compaction operation " - "failed"); - } + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + if (db_operations_t->compact_db_op) { + ret = db_operations_t->compact_db_op(gf_db_connection, _compact_active, + _compact_mode_switched); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_COMPACT_FAILED, + "Compaction operation " + "failed"); } + } - return ret; + return ret; } - - - - /*Libgfdb API Function: Query all the records from the database * Arguments: * _conn_node : GFDB Connection node @@ -484,37 +453,30 @@ compact_db (gfdb_conn_node_t *_conn_node, gf_boolean_t _compact_active, * Returns : if successful return 0 or * -ve value in case of failure*/ int -find_all (gfdb_conn_node_t *_conn_node, - gf_query_callback_t query_callback, - void *_query_cbk_args, - int query_limit) +find_all(gfdb_conn_node_t *_conn_node, gf_query_callback_t query_callback, + void *_query_cbk_args, int query_limit) { - int ret = 0; - gfdb_db_operations_t *db_operations_t = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(_conn_node); - - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; - - if (db_operations_t->find_all_op) { - ret = db_operations_t->find_all_op (gf_db_connection, - query_callback, - _query_cbk_args, - query_limit); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_FIND_OP_FAILED, "Find all operation " - "failed"); - } + int ret = 0; + gfdb_db_operations_t *db_operations_t = NULL; + void *gf_db_connection = NULL; - } + CHECK_CONN_NODE(_conn_node); - return ret; -} + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + if (db_operations_t->find_all_op) { + ret = db_operations_t->find_all_op(gf_db_connection, query_callback, + _query_cbk_args, query_limit); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED, + "Find all operation " + "failed"); + } + } + return ret; +} /*Libgfdb API Function: Query records/files that have not changed/accessed * from a time in past to current time @@ -529,35 +491,30 @@ find_all (gfdb_conn_node_t *_conn_node, * Returns : if successful return 0 or * -ve value in case of failure*/ int -find_unchanged_for_time(gfdb_conn_node_t *_conn_node, - gf_query_callback_t query_callback, - void *_query_cbk_args, - gfdb_time_t *for_time) +find_unchanged_for_time(gfdb_conn_node_t *_conn_node, + gf_query_callback_t query_callback, + void *_query_cbk_args, gfdb_time_t *for_time) { + int ret = 0; + gfdb_db_operations_t *db_operations_t = NULL; + void *gf_db_connection = NULL; - int ret = 0; - gfdb_db_operations_t *db_operations_t = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(_conn_node); - - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; - - if (db_operations_t->find_unchanged_for_time_op) { + CHECK_CONN_NODE(_conn_node); - ret = db_operations_t->find_unchanged_for_time_op - (gf_db_connection, query_callback, - _query_cbk_args, for_time); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_FIND_OP_FAILED, "Find unchanged " - "operation failed"); - } + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + if (db_operations_t->find_unchanged_for_time_op) { + ret = db_operations_t->find_unchanged_for_time_op( + gf_db_connection, query_callback, _query_cbk_args, for_time); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED, + "Find unchanged " + "operation failed"); } + } - return ret; + return ret; } /*Libgfdb API Function: Query records/files that have changed/accessed from a @@ -573,36 +530,29 @@ find_unchanged_for_time(gfdb_conn_node_t *_conn_node, * Returns : if successful return 0 or * -ve value in case of failure*/ int -find_recently_changed_files(gfdb_conn_node_t *_conn_node, +find_recently_changed_files(gfdb_conn_node_t *_conn_node, gf_query_callback_t query_callback, - void *_query_cbk_args, - gfdb_time_t *from_time) + void *_query_cbk_args, gfdb_time_t *from_time) { + int ret = 0; + gfdb_db_operations_t *db_operations_t = NULL; + void *gf_db_connection = NULL; - int ret = 0; - gfdb_db_operations_t *db_operations_t = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(_conn_node); - - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + CHECK_CONN_NODE(_conn_node); - if (db_operations_t->find_recently_changed_files_op) { - - ret = db_operations_t->find_recently_changed_files_op ( - gf_db_connection, query_callback, - _query_cbk_args, from_time); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_FIND_OP_FAILED, - "Find changed operation failed"); - } + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + if (db_operations_t->find_recently_changed_files_op) { + ret = db_operations_t->find_recently_changed_files_op( + gf_db_connection, query_callback, _query_cbk_args, from_time); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED, + "Find changed operation failed"); } + } - return ret; - + return ret; } /*Libgfdb API Function: Query records/files that have not changed/accessed @@ -624,38 +574,31 @@ find_recently_changed_files(gfdb_conn_node_t *_conn_node, * -ve value in case of failure*/ int find_unchanged_for_time_freq(gfdb_conn_node_t *_conn_node, - gf_query_callback_t query_callback, - void *_query_cbk_args, - gfdb_time_t *for_time, - int write_freq_thresold, - int read_freq_thresold, - gf_boolean_t _clear_counters) + gf_query_callback_t query_callback, + void *_query_cbk_args, gfdb_time_t *for_time, + int write_freq_thresold, int read_freq_thresold, + gf_boolean_t _clear_counters) { - int ret = 0; - gfdb_db_operations_t *db_operations_t = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(_conn_node); + int ret = 0; + gfdb_db_operations_t *db_operations_t = NULL; + void *gf_db_connection = NULL; - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + CHECK_CONN_NODE(_conn_node); - if (db_operations_t->find_unchanged_for_time_freq_op) { - - ret = db_operations_t->find_unchanged_for_time_freq_op( - gf_db_connection, query_callback, - _query_cbk_args, for_time, - write_freq_thresold, read_freq_thresold, - _clear_counters); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_FIND_OP_FAILED, - "Find unchanged with freq operation failed"); - } + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + if (db_operations_t->find_unchanged_for_time_freq_op) { + ret = db_operations_t->find_unchanged_for_time_freq_op( + gf_db_connection, query_callback, _query_cbk_args, for_time, + write_freq_thresold, read_freq_thresold, _clear_counters); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED, + "Find unchanged with freq operation failed"); } + } - return ret; + return ret; } /*Libgfdb API Function: Query records/files that have changed/accessed from a @@ -677,44 +620,34 @@ find_unchanged_for_time_freq(gfdb_conn_node_t *_conn_node, * -ve value in case of failure*/ int find_recently_changed_files_freq(gfdb_conn_node_t *_conn_node, - gf_query_callback_t query_callback, - void *_query_cbk_args, - gfdb_time_t *from_time, - int write_freq_thresold, - int read_freq_thresold, - gf_boolean_t _clear_counters) + gf_query_callback_t query_callback, + void *_query_cbk_args, gfdb_time_t *from_time, + int write_freq_thresold, + int read_freq_thresold, + gf_boolean_t _clear_counters) { + int ret = 0; + gfdb_db_operations_t *db_operations_t = NULL; + void *gf_db_connection = NULL; - int ret = 0; - gfdb_db_operations_t *db_operations_t = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(_conn_node); - - db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + CHECK_CONN_NODE(_conn_node); - if (db_operations_t->find_recently_changed_files_freq_op) { - - ret = db_operations_t->find_recently_changed_files_freq_op( - gf_db_connection, query_callback, - _query_cbk_args, from_time, - write_freq_thresold, read_freq_thresold, - _clear_counters); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_FIND_OP_FAILED, - "Find changed with freq operation failed"); - } + db_operations_t = &_conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = _conn_node->gfdb_connection.gf_db_connection; + if (db_operations_t->find_recently_changed_files_freq_op) { + ret = db_operations_t->find_recently_changed_files_freq_op( + gf_db_connection, query_callback, _query_cbk_args, from_time, + write_freq_thresold, read_freq_thresold, _clear_counters); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED, + "Find changed with freq operation failed"); } + } - return ret; - + return ret; } - - /*Libgfdb API Function: Clear the heat for all the files * * Arguments: @@ -725,30 +658,29 @@ find_recently_changed_files_freq(gfdb_conn_node_t *_conn_node, **/ int -clear_files_heat (gfdb_conn_node_t *conn_node) +clear_files_heat(gfdb_conn_node_t *conn_node) { - int ret = 0; - gfdb_db_operations_t *db_operations = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(conn_node); - - db_operations = &conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = conn_node->gfdb_connection.gf_db_connection; - - if (db_operations->clear_files_heat_op) { - ret = db_operations->clear_files_heat_op (gf_db_connection); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_INSERT_OR_UPDATE_FAILED, - "Clear files heat operation failed"); - } + int ret = 0; + gfdb_db_operations_t *db_operations = NULL; + void *gf_db_connection = NULL; + + CHECK_CONN_NODE(conn_node); + + db_operations = &conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = conn_node->gfdb_connection.gf_db_connection; + + if (db_operations->clear_files_heat_op) { + ret = db_operations->clear_files_heat_op(gf_db_connection); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, + LG_MSG_INSERT_OR_UPDATE_FAILED, + "Clear files heat operation failed"); } + } - return ret; + return ret; } - /* Libgfdb API Function: Function to extract version of the db * Input: * gfdb_conn_node_t *conn_node : GFDB Connection node @@ -761,122 +693,111 @@ clear_files_heat (gfdb_conn_node_t *conn_node) * On failure return -1 * */ int -get_db_version (gfdb_conn_node_t *conn_node, char **version) +get_db_version(gfdb_conn_node_t *conn_node, char **version) { - int ret = 0; - gfdb_db_operations_t *db_operations = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(conn_node); - - db_operations = &conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = conn_node->gfdb_connection.gf_db_connection; - - if (db_operations->get_db_version) { - ret = db_operations->get_db_version (gf_db_connection, - version); - if (ret < 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_FIND_OP_FAILED, - "Get version failed"); - } + int ret = 0; + gfdb_db_operations_t *db_operations = NULL; + void *gf_db_connection = NULL; + + CHECK_CONN_NODE(conn_node); + + db_operations = &conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = conn_node->gfdb_connection.gf_db_connection; + + if (db_operations->get_db_version) { + ret = db_operations->get_db_version(gf_db_connection, version); + if (ret < 0) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED, + "Get version failed"); } + } - return ret; + return ret; } int -get_db_params (gfdb_conn_node_t *conn_node, char *param_key, - char **param_value) +get_db_params(gfdb_conn_node_t *conn_node, char *param_key, char **param_value) { - int ret = -1; - gfdb_db_operations_t *db_operations = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(conn_node); - - db_operations = &conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = conn_node->gfdb_connection.gf_db_connection; - - if (db_operations->get_db_params) { - ret = db_operations->get_db_params (gf_db_connection, - param_key, - param_value); - if (ret < 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_FIND_OP_FAILED, - "Get setting failed"); - } + int ret = -1; + gfdb_db_operations_t *db_operations = NULL; + void *gf_db_connection = NULL; + + CHECK_CONN_NODE(conn_node); + + db_operations = &conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = conn_node->gfdb_connection.gf_db_connection; + + if (db_operations->get_db_params) { + ret = db_operations->get_db_params(gf_db_connection, param_key, + param_value); + if (ret < 0) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_FIND_OP_FAILED, + "Get setting failed"); } + } - return ret; + return ret; } - int -set_db_params (gfdb_conn_node_t *conn_node, char *param_key, - char *param_value) +set_db_params(gfdb_conn_node_t *conn_node, char *param_key, char *param_value) { - int ret = -1; - gfdb_db_operations_t *db_operations = NULL; - void *gf_db_connection = NULL; - - CHECK_CONN_NODE(conn_node); - - db_operations = &conn_node->gfdb_connection.gfdb_db_operations; - gf_db_connection = conn_node->gfdb_connection.gf_db_connection; - - if (db_operations->set_db_params) { - ret = db_operations->set_db_params (gf_db_connection, - param_key, - param_value); - if (ret < 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_INSERT_OR_UPDATE_FAILED, - "Failed to set database setting"); - } + int ret = -1; + gfdb_db_operations_t *db_operations = NULL; + void *gf_db_connection = NULL; + + CHECK_CONN_NODE(conn_node); + + db_operations = &conn_node->gfdb_connection.gfdb_db_operations; + gf_db_connection = conn_node->gfdb_connection.gf_db_connection; + + if (db_operations->set_db_params) { + ret = db_operations->set_db_params(gf_db_connection, param_key, + param_value); + if (ret < 0) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, + LG_MSG_INSERT_OR_UPDATE_FAILED, + "Failed to set database setting"); } + } - return ret; + return ret; } - - - -static const -char *get_db_path_key() +static const char * +get_db_path_key() { - return GFDB_SQL_PARAM_DBPATH; + return GFDB_SQL_PARAM_DBPATH; } -void get_gfdb_methods (gfdb_methods_t *methods) +void +get_gfdb_methods(gfdb_methods_t *methods) { - methods->init_db = init_db; - methods->fini_db = fini_db; - methods->find_all = find_all; - methods->find_unchanged_for_time = find_unchanged_for_time; - methods->find_recently_changed_files = find_recently_changed_files; - methods->find_unchanged_for_time_freq = find_unchanged_for_time_freq; - methods->find_recently_changed_files_freq = - find_recently_changed_files_freq; - methods->clear_files_heat = clear_files_heat; - methods->get_db_version = get_db_version; - methods->get_db_params = get_db_params; - methods->set_db_params = set_db_params; - methods->get_db_path_key = get_db_path_key; - - /* Query Record related functions */ - methods->gfdb_query_record_new = gfdb_query_record_new; - methods->gfdb_query_record_free = gfdb_query_record_free; - methods->gfdb_add_link_to_query_record = gfdb_add_link_to_query_record; - methods->gfdb_write_query_record = gfdb_write_query_record; - methods->gfdb_read_query_record = gfdb_read_query_record; - - /* Link info related functions */ - methods->gfdb_link_info_new = gfdb_link_info_new; - methods->gfdb_link_info_free = gfdb_link_info_free; - - /* Compaction related functions */ - methods->compact_db = compact_db; + methods->init_db = init_db; + methods->fini_db = fini_db; + methods->find_all = find_all; + methods->find_unchanged_for_time = find_unchanged_for_time; + methods->find_recently_changed_files = find_recently_changed_files; + methods->find_unchanged_for_time_freq = find_unchanged_for_time_freq; + methods + ->find_recently_changed_files_freq = find_recently_changed_files_freq; + methods->clear_files_heat = clear_files_heat; + methods->get_db_version = get_db_version; + methods->get_db_params = get_db_params; + methods->set_db_params = set_db_params; + methods->get_db_path_key = get_db_path_key; + + /* Query Record related functions */ + methods->gfdb_query_record_new = gfdb_query_record_new; + methods->gfdb_query_record_free = gfdb_query_record_free; + methods->gfdb_add_link_to_query_record = gfdb_add_link_to_query_record; + methods->gfdb_write_query_record = gfdb_write_query_record; + methods->gfdb_read_query_record = gfdb_read_query_record; + + /* Link info related functions */ + methods->gfdb_link_info_new = gfdb_link_info_new; + methods->gfdb_link_info_free = gfdb_link_info_free; + + /* Compaction related functions */ + methods->compact_db = compact_db; } - diff --git a/libglusterfs/src/gfdb/gfdb_data_store_helper.c b/libglusterfs/src/gfdb/gfdb_data_store_helper.c index 39a97ff73d9..fb01a6c699b 100644 --- a/libglusterfs/src/gfdb/gfdb_data_store_helper.c +++ b/libglusterfs/src/gfdb/gfdb_data_store_helper.c @@ -9,151 +9,139 @@ * ****************************************************************************/ /*Create a single link info structure*/ -gfdb_link_info_t* -gfdb_link_info_new () +gfdb_link_info_t * +gfdb_link_info_new() { - gfdb_link_info_t *link_info = NULL; + gfdb_link_info_t *link_info = NULL; - link_info = GF_CALLOC (1, sizeof(gfdb_link_info_t), - gf_mt_gfdb_link_info_t); - if (!link_info) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, - LG_MSG_NO_MEMORY, "Memory allocation failed for " - "link_info "); - goto out; - } + link_info = GF_CALLOC(1, sizeof(gfdb_link_info_t), gf_mt_gfdb_link_info_t); + if (!link_info) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY, + "Memory allocation failed for " + "link_info "); + goto out; + } - INIT_LIST_HEAD (&link_info->list); + INIT_LIST_HEAD(&link_info->list); out: - return link_info; + return link_info; } /*Destroy a link info structure*/ void gfdb_link_info_free(gfdb_link_info_t *link_info) { - GF_FREE (link_info); + GF_FREE(link_info); } - /*Function to create the query_record*/ gfdb_query_record_t * gfdb_query_record_new() { - int ret = -1; - gfdb_query_record_t *query_record = NULL; - - query_record = GF_CALLOC (1, sizeof(gfdb_query_record_t), - gf_mt_gfdb_query_record_t); - if (!query_record) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, - LG_MSG_NO_MEMORY, "Memory allocation failed for " - "query_record "); - goto out; - } + int ret = -1; + gfdb_query_record_t *query_record = NULL; - INIT_LIST_HEAD (&query_record->link_list); + query_record = GF_CALLOC(1, sizeof(gfdb_query_record_t), + gf_mt_gfdb_query_record_t); + if (!query_record) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY, + "Memory allocation failed for " + "query_record "); + goto out; + } - ret = 0; + INIT_LIST_HEAD(&query_record->link_list); + + ret = 0; out: - if (ret == -1) { - GF_FREE (query_record); - } - return query_record; + if (ret == -1) { + GF_FREE(query_record); + } + return query_record; } - /*Function to delete a single linkinfo from list*/ static void -gfdb_delete_linkinfo_from_list (gfdb_link_info_t **link_info) +gfdb_delete_linkinfo_from_list(gfdb_link_info_t **link_info) { - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, link_info, out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, *link_info, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, link_info, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, *link_info, out); - /*Remove hard link from list*/ - list_del(&(*link_info)->list); - gfdb_link_info_free (*link_info); - link_info = NULL; + /*Remove hard link from list*/ + list_del(&(*link_info)->list); + gfdb_link_info_free(*link_info); + link_info = NULL; out: - return; + return; } - /*Function to destroy link_info list*/ void -gfdb_free_link_info_list (gfdb_query_record_t *query_record) +gfdb_free_link_info_list(gfdb_query_record_t *query_record) { - gfdb_link_info_t *link_info = NULL; - gfdb_link_info_t *temp = NULL; + gfdb_link_info_t *link_info = NULL; + gfdb_link_info_t *temp = NULL; - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out); - list_for_each_entry_safe(link_info, temp, - &query_record->link_list, list) - { - gfdb_delete_linkinfo_from_list (&link_info); - link_info = NULL; - } + list_for_each_entry_safe(link_info, temp, &query_record->link_list, list) + { + gfdb_delete_linkinfo_from_list(&link_info); + link_info = NULL; + } out: - return; + return; } - - /* Function to add linkinfo to the query record */ int -gfdb_add_link_to_query_record (gfdb_query_record_t *query_record, - uuid_t pgfid, - char *base_name) +gfdb_add_link_to_query_record(gfdb_query_record_t *query_record, uuid_t pgfid, + char *base_name) { - int ret = -1; - gfdb_link_info_t *link_info = NULL; - int base_name_len = 0; + int ret = -1; + gfdb_link_info_t *link_info = NULL; + int base_name_len = 0; - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, pgfid, out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, base_name, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, pgfid, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, base_name, out); - link_info = gfdb_link_info_new (); - if (!link_info) { - goto out; - } + link_info = gfdb_link_info_new(); + if (!link_info) { + goto out; + } - gf_uuid_copy (link_info->pargfid, pgfid); - base_name_len = strlen (base_name); - memcpy (link_info->file_name, base_name, base_name_len); - link_info->file_name[base_name_len] = '\0'; + gf_uuid_copy(link_info->pargfid, pgfid); + base_name_len = strlen(base_name); + memcpy(link_info->file_name, base_name, base_name_len); + link_info->file_name[base_name_len] = '\0'; - list_add_tail (&link_info->list, - &query_record->link_list); + list_add_tail(&link_info->list, &query_record->link_list); - query_record->link_count++; + query_record->link_count++; - ret = 0; + ret = 0; out: - if (ret) { - gfdb_link_info_free (link_info); - link_info = NULL; - } - return ret; + if (ret) { + gfdb_link_info_free(link_info); + link_info = NULL; + } + return ret; } - - /*Function to destroy query record*/ void gfdb_query_record_free(gfdb_query_record_t *query_record) { - if (query_record) { - gfdb_free_link_info_list (query_record); - GF_FREE (query_record); - } + if (query_record) { + gfdb_free_link_info_list(query_record); + GF_FREE(query_record); + } } - /****************************************************************************** SERIALIZATION/DE-SERIALIZATION OF QUERY RECORD *******************************************************************************/ @@ -197,40 +185,39 @@ gfdb_query_record_free(gfdb_query_record_t *query_record) * ****************************************************************************/ #define GFDB_QUERY_RECORD_FOOTER 0xBAADF00D -#define UUID_LEN 16 +#define UUID_LEN 16 /*Function to get the potential length of the serialized buffer*/ static int32_t -gfdb_query_record_serialized_length (gfdb_query_record_t *query_record) +gfdb_query_record_serialized_length(gfdb_query_record_t *query_record) { - int32_t len = -1; - gfdb_link_info_t *link_info = NULL; - - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out); + int32_t len = -1; + gfdb_link_info_t *link_info = NULL; - /* Length of GFID */ - len = UUID_LEN; + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out); - /* length of number of links*/ - len += sizeof (int32_t); + /* Length of GFID */ + len = UUID_LEN; - list_for_each_entry (link_info, &query_record->link_list, list) { + /* length of number of links*/ + len += sizeof(int32_t); - /* length of PFID */ - len += UUID_LEN; + list_for_each_entry(link_info, &query_record->link_list, list) + { + /* length of PFID */ + len += UUID_LEN; - /* Add size of base name length*/ - len += sizeof (int32_t); + /* Add size of base name length*/ + len += sizeof(int32_t); - /* Length of base_name */ - len += strlen (link_info->file_name); - - } + /* Length of base_name */ + len += strlen(link_info->file_name); + } - /* length of footer */ - len += sizeof (int32_t); + /* length of footer */ + len += sizeof(int32_t); out: - return len; + return len; } /* Function for serializing query record. @@ -259,210 +246,200 @@ out: * * */ static int -gfdb_query_record_serialize (gfdb_query_record_t *query_record, - char **in_buffer) +gfdb_query_record_serialize(gfdb_query_record_t *query_record, char **in_buffer) { - gfdb_link_info_t *link_info = NULL; - int count = -1; - int base_name_len = 0; - int buffer_length = 0; - int footer = GFDB_QUERY_RECORD_FOOTER; - char *buffer = NULL; - char *ret_buffer = NULL; - - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, - (query_record->link_count > 0), out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, in_buffer, out); - - - /* Calculate the total length of the serialized buffer */ - buffer_length = gfdb_query_record_serialized_length (query_record); - if (buffer_length <= 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Failed to calculate the length of " - "serialized buffer"); - goto out; - } - - /* Allocate memory to the serialized buffer */ - ret_buffer = GF_CALLOC (1, buffer_length, gf_common_mt_char); - if (!ret_buffer) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Memory allocation failed for " - "serialized buffer."); - goto out; - } - - buffer = ret_buffer; - - count = 0; - - /* Copying the GFID */ - memcpy (buffer, query_record->gfid, UUID_LEN); + gfdb_link_info_t *link_info = NULL; + int count = -1; + int base_name_len = 0; + int buffer_length = 0; + int footer = GFDB_QUERY_RECORD_FOOTER; + char *buffer = NULL; + char *ret_buffer = NULL; + + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, (query_record->link_count > 0), out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, in_buffer, out); + + /* Calculate the total length of the serialized buffer */ + buffer_length = gfdb_query_record_serialized_length(query_record); + if (buffer_length <= 0) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Failed to calculate the length of " + "serialized buffer"); + goto out; + } + + /* Allocate memory to the serialized buffer */ + ret_buffer = GF_CALLOC(1, buffer_length, gf_common_mt_char); + if (!ret_buffer) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Memory allocation failed for " + "serialized buffer."); + goto out; + } + + buffer = ret_buffer; + + count = 0; + + /* Copying the GFID */ + memcpy(buffer, query_record->gfid, UUID_LEN); + buffer += UUID_LEN; + count += UUID_LEN; + + /* Copying the number of links */ + memcpy(buffer, &query_record->link_count, sizeof(int32_t)); + buffer += sizeof(int32_t); + count += sizeof(int32_t); + + list_for_each_entry(link_info, &query_record->link_list, list) + { + /* Copying the PFID */ + memcpy(buffer, link_info->pargfid, UUID_LEN); buffer += UUID_LEN; count += UUID_LEN; - /* Copying the number of links */ - memcpy (buffer, &query_record->link_count, sizeof (int32_t)); - buffer += sizeof (int32_t); - count += sizeof (int32_t); - - list_for_each_entry (link_info, &query_record->link_list, list) { - - /* Copying the PFID */ - memcpy(buffer, link_info->pargfid, UUID_LEN); - buffer += UUID_LEN; - count += UUID_LEN; - - /* Copying base name length*/ - base_name_len = strlen (link_info->file_name); - memcpy (buffer, &base_name_len, sizeof (int32_t)); - buffer += sizeof (int32_t); - count += sizeof (int32_t); + /* Copying base name length*/ + base_name_len = strlen(link_info->file_name); + memcpy(buffer, &base_name_len, sizeof(int32_t)); + buffer += sizeof(int32_t); + count += sizeof(int32_t); - /* Length of base_name */ - memcpy(buffer, link_info->file_name, base_name_len); - buffer += base_name_len; - count += base_name_len; + /* Length of base_name */ + memcpy(buffer, link_info->file_name, base_name_len); + buffer += base_name_len; + count += base_name_len; + } - } - - /* Copying the Footer of the record */ - memcpy (buffer, &footer, sizeof (int32_t)); - buffer += sizeof (int32_t); - count += sizeof (int32_t); + /* Copying the Footer of the record */ + memcpy(buffer, &footer, sizeof(int32_t)); + buffer += sizeof(int32_t); + count += sizeof(int32_t); out: - if (count < 0) { - GF_FREE (ret_buffer); - ret_buffer = NULL; - } - *in_buffer = ret_buffer; - return count; + if (count < 0) { + GF_FREE(ret_buffer); + ret_buffer = NULL; + } + *in_buffer = ret_buffer; + return count; } static gf_boolean_t -is_serialized_buffer_valid (char *in_buffer, int buffer_length) { - gf_boolean_t ret = _gf_false; - int footer = 0; - - /* Read the footer */ - in_buffer += (buffer_length - sizeof (int32_t)); - memcpy (&footer, in_buffer, sizeof (int32_t)); - - /* - * if the footer is not GFDB_QUERY_RECORD_FOOTER - * then the serialized record is invalid - * - * */ - if (footer != GFDB_QUERY_RECORD_FOOTER) { - goto out; - } - - ret = _gf_true; +is_serialized_buffer_valid(char *in_buffer, int buffer_length) +{ + gf_boolean_t ret = _gf_false; + int footer = 0; + + /* Read the footer */ + in_buffer += (buffer_length - sizeof(int32_t)); + memcpy(&footer, in_buffer, sizeof(int32_t)); + + /* + * if the footer is not GFDB_QUERY_RECORD_FOOTER + * then the serialized record is invalid + * + * */ + if (footer != GFDB_QUERY_RECORD_FOOTER) { + goto out; + } + + ret = _gf_true; out: - return ret; + return ret; } - static int -gfdb_query_record_deserialize (char *in_buffer, - int buffer_length, - gfdb_query_record_t **query_record) +gfdb_query_record_deserialize(char *in_buffer, int buffer_length, + gfdb_query_record_t **query_record) { - int ret = -1; - char *buffer = NULL; - int i = 0; - gfdb_link_info_t *link_info = NULL; - int count = 0; - int base_name_len = 0; - gfdb_query_record_t *ret_qrecord = NULL; - - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, in_buffer, out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, (buffer_length > 0), out); - - if (!is_serialized_buffer_valid (in_buffer, buffer_length)) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Invalid serialized query record"); - goto out; + int ret = -1; + char *buffer = NULL; + int i = 0; + gfdb_link_info_t *link_info = NULL; + int count = 0; + int base_name_len = 0; + gfdb_query_record_t *ret_qrecord = NULL; + + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, in_buffer, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, (buffer_length > 0), out); + + if (!is_serialized_buffer_valid(in_buffer, buffer_length)) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Invalid serialized query record"); + goto out; + } + + buffer = in_buffer; + + ret_qrecord = gfdb_query_record_new(); + if (!ret_qrecord) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Failed to allocate space to " + "gfdb_query_record_t"); + goto out; + } + + /* READ GFID */ + memcpy((ret_qrecord)->gfid, buffer, UUID_LEN); + buffer += UUID_LEN; + count += UUID_LEN; + + /* Read the number of link */ + memcpy(&(ret_qrecord->link_count), buffer, sizeof(int32_t)); + buffer += sizeof(int32_t); + count += sizeof(int32_t); + + /* Read all the links */ + for (i = 0; i < ret_qrecord->link_count; i++) { + if (count >= buffer_length) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Invalid serialized " + "query record"); + ret = -1; + goto out; } - buffer = in_buffer; - - ret_qrecord = gfdb_query_record_new (); - if (!ret_qrecord) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Failed to allocate space to " - "gfdb_query_record_t"); - goto out; + link_info = gfdb_link_info_new(); + if (!link_info) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Failed to create link_info"); + goto out; } - /* READ GFID */ - memcpy ((ret_qrecord)->gfid, buffer, UUID_LEN); + /* READ PGFID */ + memcpy(link_info->pargfid, buffer, UUID_LEN); buffer += UUID_LEN; count += UUID_LEN; - /* Read the number of link */ - memcpy (&(ret_qrecord->link_count), buffer, sizeof (int32_t)); - buffer += sizeof (int32_t); - count += sizeof (int32_t); - - /* Read all the links */ - for (i = 0; i < ret_qrecord->link_count; i++) { - if (count >= buffer_length) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Invalid serialized " - "query record"); - ret = -1; - goto out; - } - - link_info = gfdb_link_info_new (); - if (!link_info) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Failed to create link_info"); - goto out; - } - - /* READ PGFID */ - memcpy (link_info->pargfid, buffer, UUID_LEN); - buffer += UUID_LEN; - count += UUID_LEN; - - /* Read base name length */ - memcpy (&base_name_len, buffer, sizeof (int32_t)); - buffer += sizeof (int32_t); - count += sizeof (int32_t); - - /* READ basename */ - memcpy (link_info->file_name, buffer, base_name_len); - buffer += base_name_len; - count += base_name_len; - link_info->file_name[base_name_len] = '\0'; - - /* Add link_info to the list */ - list_add_tail (&link_info->list, - &(ret_qrecord->link_list)); - - /* Resetting link_info */ - link_info = NULL; - } - - ret = 0; -out: - if (ret) { - gfdb_query_record_free (ret_qrecord); - ret_qrecord = NULL; - } - *query_record = ret_qrecord; - return ret; -} + /* Read base name length */ + memcpy(&base_name_len, buffer, sizeof(int32_t)); + buffer += sizeof(int32_t); + count += sizeof(int32_t); + /* READ basename */ + memcpy(link_info->file_name, buffer, base_name_len); + buffer += base_name_len; + count += base_name_len; + link_info->file_name[base_name_len] = '\0'; + /* Add link_info to the list */ + list_add_tail(&link_info->list, &(ret_qrecord->link_list)); + /* Resetting link_info */ + link_info = NULL; + } + ret = 0; +out: + if (ret) { + gfdb_query_record_free(ret_qrecord); + ret_qrecord = NULL; + } + *query_record = ret_qrecord; + return ret; +} /* Function to write query record to file * @@ -477,57 +454,54 @@ out: * * */ int -gfdb_write_query_record (int fd, - gfdb_query_record_t *query_record) +gfdb_write_query_record(int fd, gfdb_query_record_t *query_record) { - int ret = -1; - int buffer_len = 0; - char *buffer = NULL; - int write_len = 0; - char *write_buffer = NULL; - - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, (fd >= 0), out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out); - - buffer_len = gfdb_query_record_serialize (query_record, &buffer); - if (buffer_len < 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Failed to serialize query record"); - goto out; - } - - /* Serialize the buffer length and write to file */ - ret = write (fd, &buffer_len, sizeof (int32_t)); + int ret = -1; + int buffer_len = 0; + char *buffer = NULL; + int write_len = 0; + char *write_buffer = NULL; + + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, (fd >= 0), out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out); + + buffer_len = gfdb_query_record_serialize(query_record, &buffer); + if (buffer_len < 0) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Failed to serialize query record"); + goto out; + } + + /* Serialize the buffer length and write to file */ + ret = write(fd, &buffer_len, sizeof(int32_t)); + if (ret < 0) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Failed to write buffer length" + " to file"); + goto out; + } + + /* Write the serialized query record to file */ + write_len = buffer_len; + write_buffer = buffer; + while ((ret = write(fd, write_buffer, write_len)) < write_len) { if (ret < 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Failed to write buffer length" - " to file"); - goto out; + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, errno, LG_MSG_DB_ERROR, + "Failed to write serialized " + "query record to file"); + goto out; } - /* Write the serialized query record to file */ - write_len = buffer_len; - write_buffer = buffer; - while ((ret = write (fd, write_buffer, write_len)) < write_len) { - if (ret < 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, errno, - LG_MSG_DB_ERROR, "Failed to write serialized " - "query record to file"); - goto out; - } - - write_buffer += ret; - write_len -= ret; - } + write_buffer += ret; + write_len -= ret; + } - ret = 0; + ret = 0; out: - GF_FREE (buffer); - return ret; + GF_FREE(buffer); + return ret; } - - /* Function to read query record from file. * Allocates memory to query record and * returns length of serialized query record when successful @@ -535,86 +509,81 @@ out: * Return 0 when reached EOF. * */ int -gfdb_read_query_record (int fd, - gfdb_query_record_t **query_record) +gfdb_read_query_record(int fd, gfdb_query_record_t **query_record) { - int ret = -1; - int buffer_len = 0; - int read_len = 0; - char *buffer = NULL; - char *read_buffer = NULL; - - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, (fd >= 0), out); - GF_VALIDATE_OR_GOTO (GFDB_DATA_STORE, query_record, out); - - - /* Read serialized query record length from the file*/ - ret = sys_read (fd, &buffer_len, sizeof (int32_t)); + int ret = -1; + int buffer_len = 0; + int read_len = 0; + char *buffer = NULL; + char *read_buffer = NULL; + + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, (fd >= 0), out); + GF_VALIDATE_OR_GOTO(GFDB_DATA_STORE, query_record, out); + + /* Read serialized query record length from the file*/ + ret = sys_read(fd, &buffer_len, sizeof(int32_t)); + if (ret < 0) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Failed reading buffer length" + " from file"); + goto out; + } + /* EOF */ + else if (ret == 0) { + ret = 0; + goto out; + } + + /* Assumed sane range is 1B - 10MB */ + if ((buffer_len <= 0) || (buffer_len > (10 * 1024 * 1024))) { + ret = -1; + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "buffer length range is out of bound %d", buffer_len); + goto out; + } + + /* Allocating memory to the serialization buffer */ + buffer = GF_CALLOC(1, buffer_len, gf_common_mt_char); + if (!buffer) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Failed to allocate space to " + "serialized buffer"); + goto out; + } + + /* Read the serialized query record from file */ + read_len = buffer_len; + read_buffer = buffer; + while ((ret = sys_read(fd, read_buffer, read_len)) < read_len) { + /*Any error */ if (ret < 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Failed reading buffer length" - " from file"); - goto out; + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, errno, LG_MSG_DB_ERROR, + "Failed to read serialized " + "query record from file"); + goto out; } /* EOF */ else if (ret == 0) { - ret = 0; - goto out; + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Invalid query record or " + "corrupted query file"); + ret = -1; + goto out; } - /* Assumed sane range is 1B - 10MB */ - if ((buffer_len <= 0) || (buffer_len > (10 * 1024 * 1024))) { - ret = -1; - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, - "buffer length range is out of bound %d", buffer_len); - goto out; - } - - /* Allocating memory to the serialization buffer */ - buffer = GF_CALLOC (1, buffer_len, gf_common_mt_char); - if (!buffer) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Failed to allocate space to " - "serialized buffer"); - goto out; - } + read_buffer += ret; + read_len -= ret; + } + ret = gfdb_query_record_deserialize(buffer, buffer_len, query_record); + if (ret) { + gf_msg(GFDB_DATA_STORE, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "Failed to de-serialize query record"); + goto out; + } - /* Read the serialized query record from file */ - read_len = buffer_len; - read_buffer = buffer; - while ((ret = sys_read (fd, read_buffer, read_len)) < read_len) { - - /*Any error */ - if (ret < 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, errno, - LG_MSG_DB_ERROR, "Failed to read serialized " - "query record from file"); - goto out; - } - /* EOF */ - else if (ret == 0) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Invalid query record or " - "corrupted query file"); - ret = -1; - goto out; - } - - read_buffer += ret; - read_len -= ret; - } - - ret = gfdb_query_record_deserialize (buffer, buffer_len, - query_record); - if (ret) { - gf_msg (GFDB_DATA_STORE, GF_LOG_ERROR, 0, - LG_MSG_DB_ERROR, "Failed to de-serialize query record"); - goto out; - } - - ret = buffer_len; + ret = buffer_len; out: - GF_FREE (buffer); - return ret; + GF_FREE(buffer); + return ret; } diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3.c b/libglusterfs/src/gfdb/gfdb_sqlite3.c index ad94d648369..63957278e8a 100644 --- a/libglusterfs/src/gfdb/gfdb_sqlite3.c +++ b/libglusterfs/src/gfdb/gfdb_sqlite3.c @@ -19,160 +19,158 @@ * * ***************************************************************************/ gf_sql_connection_t * -gf_sql_connection_init () +gf_sql_connection_init() { - gf_sql_connection_t *gf_sql_conn = NULL; - - gf_sql_conn = GF_CALLOC (1, sizeof(gf_sql_connection_t), - gf_mt_sql_connection_t); - if (gf_sql_conn == NULL) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, ENOMEM, - LG_MSG_NO_MEMORY, "Error allocating memory to " - "gf_sql_connection_t "); - } + gf_sql_connection_t *gf_sql_conn = NULL; + + gf_sql_conn = GF_CALLOC(1, sizeof(gf_sql_connection_t), + gf_mt_sql_connection_t); + if (gf_sql_conn == NULL) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY, + "Error allocating memory to " + "gf_sql_connection_t "); + } - return gf_sql_conn; + return gf_sql_conn; } void -gf_sql_connection_fini (gf_sql_connection_t **sql_connection) +gf_sql_connection_fini(gf_sql_connection_t **sql_connection) { - if (!sql_connection) - return; - GF_FREE (*sql_connection); - *sql_connection = NULL; + if (!sql_connection) + return; + GF_FREE(*sql_connection); + *sql_connection = NULL; } const char * -gf_sql_jm2str (gf_sql_journal_mode_t jm) +gf_sql_jm2str(gf_sql_journal_mode_t jm) { - switch (jm) { + switch (jm) { case gf_sql_jm_delete: - return GF_SQL_JM_DELETE; + return GF_SQL_JM_DELETE; case gf_sql_jm_truncate: - return GF_SQL_JM_TRUNCATE; + return GF_SQL_JM_TRUNCATE; case gf_sql_jm_persist: - return GF_SQL_JM_PERSIST; + return GF_SQL_JM_PERSIST; case gf_sql_jm_memory: - return GF_SQL_JM_MEMORY; + return GF_SQL_JM_MEMORY; case gf_sql_jm_wal: - return GF_SQL_JM_WAL; + return GF_SQL_JM_WAL; case gf_sql_jm_off: - return GF_SQL_JM_OFF; + return GF_SQL_JM_OFF; case gf_sql_jm_invalid: - break; - } - return NULL; + break; + } + return NULL; } gf_sql_journal_mode_t -gf_sql_str2jm (const char *jm_str) +gf_sql_str2jm(const char *jm_str) { - if (!jm_str) { - return gf_sql_jm_invalid; - } else if (strcmp (jm_str, GF_SQL_JM_DELETE) == 0) { - return gf_sql_jm_delete; - } else if (strcmp (jm_str, GF_SQL_JM_TRUNCATE) == 0) { - return gf_sql_jm_truncate; - } else if (strcmp (jm_str, GF_SQL_JM_PERSIST) == 0) { - return gf_sql_jm_persist; - } else if (strcmp (jm_str, GF_SQL_JM_MEMORY) == 0) { - return gf_sql_jm_memory; - } else if (strcmp (jm_str, GF_SQL_JM_WAL) == 0) { - return gf_sql_jm_wal; - } else if (strcmp (jm_str, GF_SQL_JM_OFF) == 0) { - return gf_sql_jm_off; - } + if (!jm_str) { return gf_sql_jm_invalid; + } else if (strcmp(jm_str, GF_SQL_JM_DELETE) == 0) { + return gf_sql_jm_delete; + } else if (strcmp(jm_str, GF_SQL_JM_TRUNCATE) == 0) { + return gf_sql_jm_truncate; + } else if (strcmp(jm_str, GF_SQL_JM_PERSIST) == 0) { + return gf_sql_jm_persist; + } else if (strcmp(jm_str, GF_SQL_JM_MEMORY) == 0) { + return gf_sql_jm_memory; + } else if (strcmp(jm_str, GF_SQL_JM_WAL) == 0) { + return gf_sql_jm_wal; + } else if (strcmp(jm_str, GF_SQL_JM_OFF) == 0) { + return gf_sql_jm_off; + } + return gf_sql_jm_invalid; } const char * -gf_sql_av_t2str (gf_sql_auto_vacuum_t sql_av) +gf_sql_av_t2str(gf_sql_auto_vacuum_t sql_av) { - switch (sql_av) { + switch (sql_av) { case gf_sql_av_none: - return GF_SQL_AV_NONE; + return GF_SQL_AV_NONE; case gf_sql_av_full: - return GF_SQL_AV_FULL; + return GF_SQL_AV_FULL; case gf_sql_av_incr: - return GF_SQL_AV_INCR; + return GF_SQL_AV_INCR; case gf_sql_av_invalid: - break; - } - return NULL; + break; + } + return NULL; } gf_sql_auto_vacuum_t -gf_sql_str2av_t (const char *av_str) +gf_sql_str2av_t(const char *av_str) { - if (!av_str) { - return gf_sql_av_invalid; - } else if (strcmp (av_str, GF_SQL_AV_NONE) == 0) { - return gf_sql_av_none; - } else if (strcmp (av_str, GF_SQL_AV_FULL) == 0) { - return gf_sql_av_full; - } else if (strcmp (av_str, GF_SQL_AV_INCR) == 0) { - return gf_sql_av_incr; - } + if (!av_str) { return gf_sql_av_invalid; + } else if (strcmp(av_str, GF_SQL_AV_NONE) == 0) { + return gf_sql_av_none; + } else if (strcmp(av_str, GF_SQL_AV_FULL) == 0) { + return gf_sql_av_full; + } else if (strcmp(av_str, GF_SQL_AV_INCR) == 0) { + return gf_sql_av_incr; + } + return gf_sql_av_invalid; } const char * -gf_sync_t2str (gf_sql_sync_t sql_sync) +gf_sync_t2str(gf_sql_sync_t sql_sync) { - switch (sql_sync) { + switch (sql_sync) { case gf_sql_sync_off: - return GF_SQL_SYNC_OFF; + return GF_SQL_SYNC_OFF; case gf_sql_sync_normal: - return GF_SQL_SYNC_NORMAL; + return GF_SQL_SYNC_NORMAL; case gf_sql_sync_full: - return GF_SQL_SYNC_FULL; + return GF_SQL_SYNC_FULL; case gf_sql_sync_invalid: - break; - } - return NULL; + break; + } + return NULL; } gf_sql_sync_t -gf_sql_str2sync_t (const char *sync_str) +gf_sql_str2sync_t(const char *sync_str) { - if (!sync_str) { - return gf_sql_sync_invalid; - } else if (strcmp (sync_str, GF_SQL_SYNC_OFF) == 0) { - return gf_sql_sync_off; - } else if (strcmp (sync_str, GF_SQL_SYNC_NORMAL) == 0) { - return gf_sql_sync_normal; - } else if (strcmp (sync_str, GF_SQL_SYNC_FULL) == 0) { - return gf_sql_sync_full; - } + if (!sync_str) { return gf_sql_sync_invalid; + } else if (strcmp(sync_str, GF_SQL_SYNC_OFF) == 0) { + return gf_sql_sync_off; + } else if (strcmp(sync_str, GF_SQL_SYNC_NORMAL) == 0) { + return gf_sql_sync_normal; + } else if (strcmp(sync_str, GF_SQL_SYNC_FULL) == 0) { + return gf_sql_sync_full; + } + return gf_sql_sync_invalid; } - /*TODO replace GF_CALLOC by mem_pool or iobuff if required for performance */ static char * -sql_stmt_init () +sql_stmt_init() { - char *sql_stmt = NULL; + char *sql_stmt = NULL; - sql_stmt = GF_CALLOC (GF_STMT_SIZE_MAX, sizeof(char), - gf_common_mt_char); + sql_stmt = GF_CALLOC(GF_STMT_SIZE_MAX, sizeof(char), gf_common_mt_char); - if (!sql_stmt) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, ENOMEM, - LG_MSG_NO_MEMORY, "Error allocating memory to SQL " - "Statement "); - goto out; - } + if (!sql_stmt) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, ENOMEM, LG_MSG_NO_MEMORY, + "Error allocating memory to SQL " + "Statement "); + goto out; + } out: - return sql_stmt; + return sql_stmt; } /*TODO replace GF_FREE by mem_pool or iobuff if required for performance */ static void -sql_stmt_fini (char **sql_stmt) +sql_stmt_fini(char **sql_stmt) { - GF_FREE (*sql_stmt); + GF_FREE(*sql_stmt); } /****************************************************************************** @@ -183,334 +181,313 @@ sql_stmt_fini (char **sql_stmt) static sqlite3 * gf_open_sqlite3_conn(char *sqlite3_db_path, int flags) { - sqlite3 *sqlite3_db_conn = NULL; - int ret = -1; - - GF_ASSERT (sqlite3_db_path); - - /*Creates DB if not created*/ - ret = sqlite3_open_v2 (sqlite3_db_path, &sqlite3_db_conn, flags, NULL); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, - "FATAL: Could open %s : %s", - sqlite3_db_path, sqlite3_errmsg (sqlite3_db_conn)); - } - return sqlite3_db_conn; + sqlite3 *sqlite3_db_conn = NULL; + int ret = -1; + + GF_ASSERT(sqlite3_db_path); + + /*Creates DB if not created*/ + ret = sqlite3_open_v2(sqlite3_db_path, &sqlite3_db_conn, flags, NULL); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_DB_ERROR, + "FATAL: Could open %s : %s", sqlite3_db_path, + sqlite3_errmsg(sqlite3_db_conn)); + } + return sqlite3_db_conn; } static int gf_close_sqlite3_conn(sqlite3 *sqlite3_db_conn) { - int ret = 0; - - GF_ASSERT (sqlite3_db_conn); - - if (sqlite3_db_conn) { - ret = sqlite3_close (sqlite3_db_conn); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_CONNECTION_ERROR, "FATAL: sqlite3 close" - " connection failed %s", - sqlite3_errmsg (sqlite3_db_conn)); - ret = -1; - goto out; - } - } - ret = 0; + int ret = 0; + + GF_ASSERT(sqlite3_db_conn); + + if (sqlite3_db_conn) { + ret = sqlite3_close(sqlite3_db_conn); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CONNECTION_ERROR, + "FATAL: sqlite3 close" + " connection failed %s", + sqlite3_errmsg(sqlite3_db_conn)); + ret = -1; + goto out; + } + } + ret = 0; out: - return ret; + return ret; } /****************************************************************************** -* -* Database init / fini / create table -* -* ***************************************************************************/ - + * + * Database init / fini / create table + * + * ***************************************************************************/ /*Function to fill db operations*/ void -gf_sqlite3_fill_db_operations(gfdb_db_operations_t *gfdb_db_ops) +gf_sqlite3_fill_db_operations(gfdb_db_operations_t *gfdb_db_ops) { - GF_ASSERT (gfdb_db_ops); + GF_ASSERT(gfdb_db_ops); - gfdb_db_ops->init_db_op = gf_sqlite3_init; - gfdb_db_ops->fini_db_op = gf_sqlite3_fini; + gfdb_db_ops->init_db_op = gf_sqlite3_init; + gfdb_db_ops->fini_db_op = gf_sqlite3_fini; - gfdb_db_ops->insert_record_op = gf_sqlite3_insert; - gfdb_db_ops->delete_record_op = gf_sqlite3_delete; - gfdb_db_ops->compact_db_op = gf_sqlite3_vacuum; + gfdb_db_ops->insert_record_op = gf_sqlite3_insert; + gfdb_db_ops->delete_record_op = gf_sqlite3_delete; + gfdb_db_ops->compact_db_op = gf_sqlite3_vacuum; - gfdb_db_ops->find_all_op = gf_sqlite3_find_all; - gfdb_db_ops->find_unchanged_for_time_op = - gf_sqlite3_find_unchanged_for_time; - gfdb_db_ops->find_recently_changed_files_op = - gf_sqlite3_find_recently_changed_files; - gfdb_db_ops->find_unchanged_for_time_freq_op = - gf_sqlite3_find_unchanged_for_time_freq; - gfdb_db_ops->find_recently_changed_files_freq_op = - gf_sqlite3_find_recently_changed_files_freq; + gfdb_db_ops->find_all_op = gf_sqlite3_find_all; + gfdb_db_ops + ->find_unchanged_for_time_op = gf_sqlite3_find_unchanged_for_time; + gfdb_db_ops->find_recently_changed_files_op = + gf_sqlite3_find_recently_changed_files; + gfdb_db_ops->find_unchanged_for_time_freq_op = + gf_sqlite3_find_unchanged_for_time_freq; + gfdb_db_ops->find_recently_changed_files_freq_op = + gf_sqlite3_find_recently_changed_files_freq; - gfdb_db_ops->clear_files_heat_op = gf_sqlite3_clear_files_heat; + gfdb_db_ops->clear_files_heat_op = gf_sqlite3_clear_files_heat; - gfdb_db_ops->get_db_version = gf_sqlite3_version; + gfdb_db_ops->get_db_version = gf_sqlite3_version; - gfdb_db_ops->get_db_params = gf_sqlite3_pragma; + gfdb_db_ops->get_db_params = gf_sqlite3_pragma; - gfdb_db_ops->set_db_params = gf_sqlite3_set_pragma; + gfdb_db_ops->set_db_params = gf_sqlite3_set_pragma; } - static int -create_filetable (sqlite3 *sqlite3_db_conn) +create_filetable(sqlite3 *sqlite3_db_conn) { - int ret = -1; - char *sql_stmt = NULL; - char *sql_strerror = NULL; - - GF_ASSERT(sqlite3_db_conn); - - sql_stmt = sql_stmt_init (); - if (!sql_stmt) { - ret = ENOMEM; - goto out; - } - - GF_CREATE_STMT(sql_stmt); - - ret = sqlite3_exec (sqlite3_db_conn, sql_stmt, NULL, NULL, - &sql_strerror); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED, - "Failed executing: %s : %s", sql_stmt, sql_strerror); - sqlite3_free (sql_strerror); - ret = -1; - goto out; - } - - - ret = 0; + int ret = -1; + char *sql_stmt = NULL; + char *sql_strerror = NULL; + + GF_ASSERT(sqlite3_db_conn); + + sql_stmt = sql_stmt_init(); + if (!sql_stmt) { + ret = ENOMEM; + goto out; + } + + GF_CREATE_STMT(sql_stmt); + + ret = sqlite3_exec(sqlite3_db_conn, sql_stmt, NULL, NULL, &sql_strerror); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED, + "Failed executing: %s : %s", sql_stmt, sql_strerror); + sqlite3_free(sql_strerror); + ret = -1; + goto out; + } + + ret = 0; out: - sql_stmt_fini (&sql_stmt); - return ret; + sql_stmt_fini(&sql_stmt); + return ret; } - - - static int apply_sql_params_db(gf_sql_connection_t *sql_conn, dict_t *param_dict) { - int ret = -1; - char *temp_str = NULL; - char sqlite3_config_str[GF_NAME_MAX] = ""; - - GF_ASSERT(sql_conn); - GF_ASSERT(param_dict); - - /*Extract sql page_size from param_dict, - * if not specified default value will be GF_SQL_DEFAULT_PAGE_SIZE*/ - temp_str = NULL; - GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, - GFDB_SQL_PARAM_PAGE_SIZE, temp_str, - GF_SQL_DEFAULT_PAGE_SIZE); - sql_conn->page_size = atoi (temp_str); - /*Apply page_size on the sqlite db*/ - GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "page_size", "%zd", - sql_conn->page_size, ret, out); - - - - /*Extract sql cache size from param_dict, + int ret = -1; + char *temp_str = NULL; + char sqlite3_config_str[GF_NAME_MAX] = ""; + + GF_ASSERT(sql_conn); + GF_ASSERT(param_dict); + + /*Extract sql page_size from param_dict, + * if not specified default value will be GF_SQL_DEFAULT_PAGE_SIZE*/ + temp_str = NULL; + GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, + GFDB_SQL_PARAM_PAGE_SIZE, temp_str, + GF_SQL_DEFAULT_PAGE_SIZE); + sql_conn->page_size = atoi(temp_str); + /*Apply page_size on the sqlite db*/ + GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "page_size", "%zd", + sql_conn->page_size, ret, out); + + /*Extract sql cache size from param_dict, + * if not specified default value will be + * GF_SQL_DEFAULT_CACHE_SIZE pages*/ + temp_str = NULL; + GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, + GFDB_SQL_PARAM_CACHE_SIZE, temp_str, + GF_SQL_DEFAULT_CACHE_SIZE); + sql_conn->cache_size = atoi(temp_str); + /*Apply cache size on the sqlite db*/ + GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "cache_size", "%zd", + sql_conn->cache_size, ret, out); + + /*Extract sql journal mode from param_dict, + * if not specified default value will be + * GF_SQL_DEFAULT_JOURNAL_MODE i.e "wal"*/ + temp_str = NULL; + GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, + GFDB_SQL_PARAM_JOURNAL_MODE, temp_str, + GF_SQL_DEFAULT_JOURNAL_MODE); + sql_conn->journal_mode = gf_sql_str2jm(temp_str); + /*Apply journal mode to the sqlite db*/ + GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "journal_mode", "%s", temp_str, + ret, out); + + /*Only when the journal mode is WAL, wal_autocheckpoint makes sense*/ + if (sql_conn->journal_mode == gf_sql_jm_wal) { + /*Extract sql wal auto check point from param_dict * if not specified default value will be - * GF_SQL_DEFAULT_CACHE_SIZE pages*/ + * GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT pages*/ temp_str = NULL; GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, - GFDB_SQL_PARAM_CACHE_SIZE, temp_str, - GF_SQL_DEFAULT_CACHE_SIZE); - sql_conn->cache_size = atoi (temp_str); - /*Apply cache size on the sqlite db*/ - GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "cache_size", "%zd", - sql_conn->cache_size, ret, out); - - - - - /*Extract sql journal mode from param_dict, - * if not specified default value will be - * GF_SQL_DEFAULT_JOURNAL_MODE i.e "wal"*/ - temp_str = NULL; - GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, - GFDB_SQL_PARAM_JOURNAL_MODE, temp_str, - GF_SQL_DEFAULT_JOURNAL_MODE); - sql_conn->journal_mode = gf_sql_str2jm (temp_str); - /*Apply journal mode to the sqlite db*/ - GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "journal_mode", "%s", - temp_str, ret, out); - - - - /*Only when the journal mode is WAL, wal_autocheckpoint makes sense*/ - if (sql_conn->journal_mode == gf_sql_jm_wal) { - /*Extract sql wal auto check point from param_dict - * if not specified default value will be - * GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT pages*/ - temp_str = NULL; - GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, - GFDB_SQL_PARAM_WAL_AUTOCHECK, temp_str, - GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT); - sql_conn->wal_autocheckpoint = atoi(temp_str); - /*Apply wal auto check point to the sqlite db*/ - GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "wal_autocheckpoint", - "%zd", sql_conn->wal_autocheckpoint, ret, out); - } - - - - /*Extract sql synchronous from param_dict - * if not specified default value will be GF_SQL_DEFAULT_SYNC*/ - temp_str = NULL; - GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, - GFDB_SQL_PARAM_SYNC, temp_str, GF_SQL_DEFAULT_SYNC); - sql_conn->synchronous = gf_sql_str2sync_t (temp_str); - /*Apply synchronous to the sqlite db*/ - GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "synchronous", "%d", - sql_conn->synchronous, ret, out); - - - - /*Extract sql auto_vacuum from param_dict - * if not specified default value will be GF_SQL_DEFAULT_AUTO_VACUUM*/ - temp_str = NULL; - GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, - GFDB_SQL_PARAM_AUTO_VACUUM, temp_str, - GF_SQL_DEFAULT_AUTO_VACUUM); - sql_conn->auto_vacuum = gf_sql_str2av_t (temp_str); - /*Apply auto_vacuum to the sqlite db*/ - GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "auto_vacuum", "%d", - sql_conn->auto_vacuum, ret, out); - - ret = 0; + GFDB_SQL_PARAM_WAL_AUTOCHECK, temp_str, + GF_SQL_DEFAULT_WAL_AUTOCHECKPOINT); + sql_conn->wal_autocheckpoint = atoi(temp_str); + /*Apply wal auto check point to the sqlite db*/ + GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "wal_autocheckpoint", "%zd", + sql_conn->wal_autocheckpoint, ret, out); + } + + /*Extract sql synchronous from param_dict + * if not specified default value will be GF_SQL_DEFAULT_SYNC*/ + temp_str = NULL; + GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, + GFDB_SQL_PARAM_SYNC, temp_str, + GF_SQL_DEFAULT_SYNC); + sql_conn->synchronous = gf_sql_str2sync_t(temp_str); + /*Apply synchronous to the sqlite db*/ + GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "synchronous", "%d", + sql_conn->synchronous, ret, out); + + /*Extract sql auto_vacuum from param_dict + * if not specified default value will be GF_SQL_DEFAULT_AUTO_VACUUM*/ + temp_str = NULL; + GET_DB_PARAM_FROM_DICT_DEFAULT(GFDB_STR_SQLITE3, param_dict, + GFDB_SQL_PARAM_AUTO_VACUUM, temp_str, + GF_SQL_DEFAULT_AUTO_VACUUM); + sql_conn->auto_vacuum = gf_sql_str2av_t(temp_str); + /*Apply auto_vacuum to the sqlite db*/ + GF_SQLITE3_SET_PRAGMA(sqlite3_config_str, "auto_vacuum", "%d", + sql_conn->auto_vacuum, ret, out); + + ret = 0; out: - return ret; + return ret; } - - int -gf_sqlite3_init (dict_t *args, void **db_conn) { - int ret = -1; - gf_sql_connection_t *sql_conn = NULL; - struct stat stbuf = {0,}; - gf_boolean_t is_dbfile_exist = _gf_false; - char *temp_str = NULL; - - GF_ASSERT (args); - GF_ASSERT (db_conn); - - if (*db_conn != NULL) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_CONNECTION_ERROR, "DB Connection is not " - "empty!"); - return 0; - } - - if (!sqlite3_threadsafe ()) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_NOT_MULTITHREAD_MODE, - "sqlite3 is not in multithreaded mode"); - goto out; - } - - sql_conn = gf_sql_connection_init (); - if (!sql_conn) { - goto out; - } - - /*Extract sql db path from args*/ - temp_str = NULL; - GET_DB_PARAM_FROM_DICT(GFDB_STR_SQLITE3, args, - GFDB_SQL_PARAM_DBPATH, temp_str, out); - strncpy(sql_conn->sqlite3_db_path, temp_str, PATH_MAX-1); - sql_conn->sqlite3_db_path[PATH_MAX-1] = 0; - - is_dbfile_exist = (sys_stat (sql_conn->sqlite3_db_path, &stbuf) == 0) ? - _gf_true : _gf_false; - - /*Creates DB if not created*/ - sql_conn->sqlite3_db_conn = gf_open_sqlite3_conn ( - sql_conn->sqlite3_db_path, - SQLITE_OPEN_READWRITE | - SQLITE_OPEN_CREATE); - if (!sql_conn->sqlite3_db_conn) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_CONNECTION_ERROR, - "Failed creating db connection"); - goto out; - } - - /* If the file exist we skip the config part - * and creation of the schema */ - if (is_dbfile_exist) - goto db_exists; - - - /*Apply sqlite3 params to database*/ - ret = apply_sql_params_db (sql_conn, args); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_SET_PARAM_FAILED, "Failed applying sql params" - " to %s", sql_conn->sqlite3_db_path); - goto out; - } - - /*Create the schema if NOT present*/ - ret = create_filetable (sql_conn->sqlite3_db_conn); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_CREATE_FAILED, "Failed Creating %s Table", - GF_FILE_TABLE); - goto out; - } +gf_sqlite3_init(dict_t *args, void **db_conn) +{ + int ret = -1; + gf_sql_connection_t *sql_conn = NULL; + struct stat stbuf = { + 0, + }; + gf_boolean_t is_dbfile_exist = _gf_false; + char *temp_str = NULL; + + GF_ASSERT(args); + GF_ASSERT(db_conn); + + if (*db_conn != NULL) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CONNECTION_ERROR, + "DB Connection is not " + "empty!"); + return 0; + } + + if (!sqlite3_threadsafe()) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_NOT_MULTITHREAD_MODE, + "sqlite3 is not in multithreaded mode"); + goto out; + } + + sql_conn = gf_sql_connection_init(); + if (!sql_conn) { + goto out; + } + + /*Extract sql db path from args*/ + temp_str = NULL; + GET_DB_PARAM_FROM_DICT(GFDB_STR_SQLITE3, args, GFDB_SQL_PARAM_DBPATH, + temp_str, out); + strncpy(sql_conn->sqlite3_db_path, temp_str, PATH_MAX - 1); + sql_conn->sqlite3_db_path[PATH_MAX - 1] = 0; + + is_dbfile_exist = (sys_stat(sql_conn->sqlite3_db_path, &stbuf) == 0) + ? _gf_true + : _gf_false; + + /*Creates DB if not created*/ + sql_conn->sqlite3_db_conn = gf_open_sqlite3_conn( + sql_conn->sqlite3_db_path, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE); + if (!sql_conn->sqlite3_db_conn) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CONNECTION_ERROR, + "Failed creating db connection"); + goto out; + } + + /* If the file exist we skip the config part + * and creation of the schema */ + if (is_dbfile_exist) + goto db_exists; + + /*Apply sqlite3 params to database*/ + ret = apply_sql_params_db(sql_conn, args); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_SET_PARAM_FAILED, + "Failed applying sql params" + " to %s", + sql_conn->sqlite3_db_path); + goto out; + } + + /*Create the schema if NOT present*/ + ret = create_filetable(sql_conn->sqlite3_db_conn); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Failed Creating %s Table", GF_FILE_TABLE); + goto out; + } db_exists: - ret = 0; + ret = 0; out: - if (ret) { - gf_sqlite3_fini ((void **)&sql_conn); - } + if (ret) { + gf_sqlite3_fini((void **)&sql_conn); + } - *db_conn = sql_conn; + *db_conn = sql_conn; - return ret; + return ret; } - int -gf_sqlite3_fini (void **db_conn) +gf_sqlite3_fini(void **db_conn) { - int ret = -1; - gf_sql_connection_t *sql_conn = NULL; - - GF_ASSERT (db_conn); - sql_conn = *db_conn; - - if (sql_conn) { - if (sql_conn->sqlite3_db_conn) { - ret = gf_close_sqlite3_conn (sql_conn->sqlite3_db_conn); - if (ret) { - /*Logging of error done in - * gf_close_sqlite3_conn()*/ - goto out; - } - sql_conn->sqlite3_db_conn = NULL; - } - gf_sql_connection_fini (&sql_conn); + int ret = -1; + gf_sql_connection_t *sql_conn = NULL; + + GF_ASSERT(db_conn); + sql_conn = *db_conn; + + if (sql_conn) { + if (sql_conn->sqlite3_db_conn) { + ret = gf_close_sqlite3_conn(sql_conn->sqlite3_db_conn); + if (ret) { + /*Logging of error done in + * gf_close_sqlite3_conn()*/ + goto out; + } + sql_conn->sqlite3_db_conn = NULL; } - *db_conn = sql_conn; - ret = 0; + gf_sql_connection_fini(&sql_conn); + } + *db_conn = sql_conn; + ret = 0; out: - return ret; + return ret; } /****************************************************************************** @@ -520,79 +497,84 @@ out: * * ***************************************************************************/ -int gf_sqlite3_insert(void *db_conn, gfdb_db_record_t *gfdb_db_record) +int +gf_sqlite3_insert(void *db_conn, gfdb_db_record_t *gfdb_db_record) { - int ret = -1; - gf_sql_connection_t *sql_conn = db_conn; - - CHECK_SQL_CONN(sql_conn, out); - GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out); + int ret = -1; + gf_sql_connection_t *sql_conn = db_conn; + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out); - switch (gfdb_db_record->gfdb_fop_path) { + switch (gfdb_db_record->gfdb_fop_path) { case GFDB_FOP_WIND: - ret = gf_sql_insert_wind (sql_conn, gfdb_db_record); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), 0, - LG_MSG_INSERT_FAILED, "Failed wind insert"); - goto out; - } - break; + ret = gf_sql_insert_wind(sql_conn, gfdb_db_record); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_INSERT_FAILED, "Failed wind insert"); + goto out; + } + break; case GFDB_FOP_UNWIND: - ret = gf_sql_insert_unwind (sql_conn, gfdb_db_record); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), 0, - LG_MSG_INSERT_FAILED, "Failed unwind insert"); - goto out; - } - break; + ret = gf_sql_insert_unwind(sql_conn, gfdb_db_record); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_INSERT_FAILED, "Failed unwind insert"); + goto out; + } + break; case GFDB_FOP_WDEL: - ret = gf_sql_update_delete_wind (sql_conn, gfdb_db_record); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), 0, - LG_MSG_UPDATE_FAILED, "Failed updating delete " - "during wind"); - goto out; - } - break; + ret = gf_sql_update_delete_wind(sql_conn, gfdb_db_record); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_UPDATE_FAILED, + "Failed updating delete " + "during wind"); + goto out; + } + break; case GFDB_FOP_UNDEL: case GFDB_FOP_UNDEL_ALL: - ret = gf_sql_delete_unwind (sql_conn, gfdb_db_record); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), 0, - LG_MSG_DELETE_FAILED, "Failed deleting"); - goto out; - } - break; + ret = gf_sql_delete_unwind(sql_conn, gfdb_db_record); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_DELETE_FAILED, "Failed deleting"); + goto out; + } + break; case GFDB_FOP_INVALID: default: - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_INVALID_FOP, - "Cannot record to DB: Invalid FOP"); - goto out; - } + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_INVALID_FOP, + "Cannot record to DB: Invalid FOP"); + goto out; + } - ret = 0; + ret = 0; out: - return ret; + return ret; } int gf_sqlite3_delete(void *db_conn, gfdb_db_record_t *gfdb_db_record) { - int ret = -1; - gf_sql_connection_t *sql_conn = db_conn; + int ret = -1; + gf_sql_connection_t *sql_conn = db_conn; - CHECK_SQL_CONN(sql_conn, out); - GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out); + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out); - ret = 0; + ret = 0; out: - return ret; + return ret; } /****************************************************************************** @@ -603,27 +585,24 @@ out: * ***************************************************************************/ static int -gf_get_basic_query_stmt (char **out_stmt) +gf_get_basic_query_stmt(char **out_stmt) { - int ret = -1; - ret = gf_asprintf (out_stmt, "select GF_FILE_TB.GF_ID," - "GF_FLINK_TB.GF_PID ," - "GF_FLINK_TB.FNAME " - "from GF_FLINK_TB, GF_FILE_TB " - "where " - "GF_FILE_TB.GF_ID = GF_FLINK_TB.GF_ID "); - if (ret <= 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed to create base query statement"); - *out_stmt = NULL; - } - return ret; + int ret = -1; + ret = gf_asprintf(out_stmt, + "select GF_FILE_TB.GF_ID," + "GF_FLINK_TB.GF_PID ," + "GF_FLINK_TB.FNAME " + "from GF_FLINK_TB, GF_FILE_TB " + "where " + "GF_FILE_TB.GF_ID = GF_FLINK_TB.GF_ID "); + if (ret <= 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed to create base query statement"); + *out_stmt = NULL; + } + return ret; } - - - - /* * Find All files recorded in the DB * Input: @@ -631,71 +610,65 @@ gf_get_basic_query_stmt (char **out_stmt) * result records from the query * */ int -gf_sqlite3_find_all (void *db_conn, gf_query_callback_t query_callback, - void *query_cbk_args, - int query_limit) +gf_sqlite3_find_all(void *db_conn, gf_query_callback_t query_callback, + void *query_cbk_args, int query_limit) { - int ret = -1; - char *query_str = NULL; - gf_sql_connection_t *sql_conn = db_conn; - sqlite3_stmt *prep_stmt = NULL; - char *limit_query = NULL; - char *query = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); + int ret = -1; + char *query_str = NULL; + gf_sql_connection_t *sql_conn = db_conn; + sqlite3_stmt *prep_stmt = NULL; + char *limit_query = NULL; + char *query = NULL; - ret = gf_get_basic_query_stmt (&query_str); - if (ret <= 0) { - goto out; - } + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); - query = query_str; - - if (query_limit > 0) { - ret = gf_asprintf (&limit_query, "%s LIMIT %d", - query, query_limit); - if (ret < 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_QUERY_FAILED, - "Failed creating limit query statement"); - limit_query = NULL; - goto out; - } + ret = gf_get_basic_query_stmt(&query_str); + if (ret <= 0) { + goto out; + } - query = limit_query; - } + query = query_str; - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, query, -1, - &prep_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, - "Failed to prepare statement %s: %s", query, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed Query %s", query); - goto out; - } - - ret = 0; + if (query_limit > 0) { + ret = gf_asprintf(&limit_query, "%s LIMIT %d", query, query_limit); + if (ret < 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed creating limit query statement"); + limit_query = NULL; + goto out; + } + + query = limit_query; + } + + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, query, -1, &prep_stmt, 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed to prepare statement %s: %s", query, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed Query %s", query); + goto out; + } + + ret = 0; out: - sqlite3_finalize (prep_stmt); - GF_FREE (query_str); + sqlite3_finalize(prep_stmt); + GF_FREE(query_str); - if (limit_query) - GF_FREE (limit_query); + if (limit_query) + GF_FREE(limit_query); - return ret; + return ret; } - /* * Find recently changed files from the DB * Input: @@ -705,97 +678,101 @@ out: * */ int gf_sqlite3_find_recently_changed_files(void *db_conn, - gf_query_callback_t query_callback, - void *query_cbk_args, - gfdb_time_t *from_time) + gf_query_callback_t query_callback, + void *query_cbk_args, + gfdb_time_t *from_time) { - int ret = -1; - char *query_str = NULL; - gf_sql_connection_t *sql_conn = db_conn; - sqlite3_stmt *prep_stmt = NULL; - uint64_t from_time_usec = 0; - char *base_query_str = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); - - ret = gf_get_basic_query_stmt (&base_query_str); - if (ret <= 0) { - goto out; - } - - ret = gf_asprintf (&query_str, "%s AND" - /*First condition: For writes*/ - "( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_WMSEC ") >= ? )" - " OR " - /*Second condition: For reads*/ - "((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_RWMSEC ") >= ?) )" - /* Order by write wind time in a descending order - * i.e most hot files w.r.t to write */ - " ORDER BY GF_FILE_TB.W_SEC DESC", - base_query_str); - - if (ret < 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed creating query statement"); - query_str = NULL; - goto out; - } - - from_time_usec = gfdb_time_2_usec (from_time); - - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, query_str, -1, - &prep_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed to prepare statement %s :" - " %s", query_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind write wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 1, from_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind from_time_usec " - "%"PRIu64" : %s", from_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind read wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 2, from_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind from_time_usec " - "%"PRIu64" : %s ", from_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the query*/ - ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed Query %s", query_str); - goto out; - } - - ret = 0; + int ret = -1; + char *query_str = NULL; + gf_sql_connection_t *sql_conn = db_conn; + sqlite3_stmt *prep_stmt = NULL; + uint64_t from_time_usec = 0; + char *base_query_str = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); + + ret = gf_get_basic_query_stmt(&base_query_str); + if (ret <= 0) { + goto out; + } + + ret = gf_asprintf( + &query_str, + "%s AND" + /*First condition: For writes*/ + "( ((" GF_COL_TB_WSEC " * " TOSTRING( + GFDB_MICROSEC) " + " GF_COL_TB_WMSEC + ") >= ? )" + " OR " + /*Second condition: For reads*/ + "((" GF_COL_TB_RWSEC " * " TOSTRING( + GFDB_MICROSEC) " + " GF_COL_TB_RWMSEC + ") >= ?) )" + /* Order by write wind time in a + * descending order i.e most hot + * files w.r.t to write */ + " ORDER BY GF_FILE_TB.W_SEC DESC", + base_query_str); + + if (ret < 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed creating query statement"); + query_str = NULL; + goto out; + } + + from_time_usec = gfdb_time_2_usec(from_time); + + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, query_str, -1, &prep_stmt, + 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed to prepare statement %s :" + " %s", + query_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind write wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 1, from_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind from_time_usec " + "%" PRIu64 " : %s", + from_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind read wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 2, from_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind from_time_usec " + "%" PRIu64 " : %s ", + from_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the query*/ + ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed Query %s", query_str); + goto out; + } + + ret = 0; out: - sqlite3_finalize (prep_stmt); - GF_FREE (base_query_str); - GF_FREE (query_str); - return ret; + sqlite3_finalize(prep_stmt); + GF_FREE(base_query_str); + GF_FREE(query_str); + return ret; } - /* * Find unchanged files from a specified time from the DB * Input: @@ -804,101 +781,101 @@ out: * for_time : Time from where the file/s are not changed * */ int -gf_sqlite3_find_unchanged_for_time (void *db_conn, - gf_query_callback_t query_callback, - void *query_cbk_args, - gfdb_time_t *for_time) +gf_sqlite3_find_unchanged_for_time(void *db_conn, + gf_query_callback_t query_callback, + void *query_cbk_args, gfdb_time_t *for_time) { - int ret = -1; - char *query_str = NULL; - gf_sql_connection_t *sql_conn = db_conn; - sqlite3_stmt *prep_stmt = NULL; - uint64_t for_time_usec = 0; - char *base_query_str = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); - - ret = gf_get_basic_query_stmt (&base_query_str); - if (ret <= 0) { - goto out; - } - - ret = gf_asprintf (&query_str, "%s AND " - /*First condition: For writes*/ - "( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_WMSEC ") <= ? )" - " AND " - /*Second condition: For reads*/ - "((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_RWMSEC ") <= ?) )" - /* Order by write wind time in a ascending order - * i.e most cold files w.r.t to write */ - " ORDER BY GF_FILE_TB.W_SEC ASC", - base_query_str); - - if (ret < 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed to create query statement"); - query_str = NULL; - goto out; - } - - for_time_usec = gfdb_time_2_usec (for_time); - - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, query_str, -1, - &prep_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed to prepare statement %s :" - " %s", query_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind write wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 1, for_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec " - "%"PRIu64" : %s", for_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind read wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 2, for_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec " - "%"PRIu64" : %s", for_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the query*/ - ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed Query %s", query_str); - goto out; - } - - ret = 0; + int ret = -1; + char *query_str = NULL; + gf_sql_connection_t *sql_conn = db_conn; + sqlite3_stmt *prep_stmt = NULL; + uint64_t for_time_usec = 0; + char *base_query_str = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); + + ret = gf_get_basic_query_stmt(&base_query_str); + if (ret <= 0) { + goto out; + } + + ret = gf_asprintf( + &query_str, + "%s AND " + /*First condition: For writes*/ + "( ((" GF_COL_TB_WSEC " * " TOSTRING( + GFDB_MICROSEC) " + " GF_COL_TB_WMSEC + ") <= ? )" + " AND " + /*Second condition: For reads*/ + "((" GF_COL_TB_RWSEC " * " TOSTRING( + GFDB_MICROSEC) " + " GF_COL_TB_RWMSEC + ") <= ?) )" + /* Order by write wind time in a + * ascending order i.e most cold + * files w.r.t to write */ + " ORDER BY GF_FILE_TB.W_SEC ASC", + base_query_str); + + if (ret < 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed to create query statement"); + query_str = NULL; + goto out; + } + + for_time_usec = gfdb_time_2_usec(for_time); + + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, query_str, -1, &prep_stmt, + 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed to prepare statement %s :" + " %s", + query_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind write wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 1, for_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind for_time_usec " + "%" PRIu64 " : %s", + for_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind read wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 2, for_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind for_time_usec " + "%" PRIu64 " : %s", + for_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the query*/ + ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed Query %s", query_str); + goto out; + } + + ret = 0; out: - sqlite3_finalize (prep_stmt); - GF_FREE (base_query_str); - GF_FREE (query_str); - return ret; + sqlite3_finalize(prep_stmt); + GF_FREE(base_query_str); + GF_FREE(query_str); + return ret; } - - - - /* * Find recently changed files with a specific frequency from the DB * Input: @@ -911,140 +888,144 @@ out: * clear_counters : Clear counters (r/w) for all inodes in DB * */ int -gf_sqlite3_find_recently_changed_files_freq (void *db_conn, - gf_query_callback_t query_callback, - void *query_cbk_args, - gfdb_time_t *from_time, - int freq_write_cnt, - int freq_read_cnt, - gf_boolean_t clear_counters) +gf_sqlite3_find_recently_changed_files_freq( + void *db_conn, gf_query_callback_t query_callback, void *query_cbk_args, + gfdb_time_t *from_time, int freq_write_cnt, int freq_read_cnt, + gf_boolean_t clear_counters) { - int ret = -1; - char *query_str = NULL; - gf_sql_connection_t *sql_conn = db_conn; - sqlite3_stmt *prep_stmt = NULL; - uint64_t from_time_usec = 0; - char *base_query_str = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); - - ret = gf_get_basic_query_stmt (&base_query_str); - if (ret <= 0) { - goto out; - } - ret = gf_asprintf (&query_str, "%s AND " - /*First condition: For Writes*/ - "( ( ((" GF_COL_TB_WSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_WMSEC ") >= ? )" - " AND "" (" GF_COL_TB_WFC " >= ? ) )" - " OR " - /*Second condition: For Reads */ - "( ((" GF_COL_TB_RWSEC " * " TOSTRING(GFDB_MICROSEC) " + " - GF_COL_TB_RWMSEC ") >= ?)" - " AND "" (" GF_COL_TB_RFC " >= ? ) ) )" - /* Order by write wind time and write freq in a descending order - * i.e most hot files w.r.t to write */ - " ORDER BY GF_FILE_TB.W_SEC DESC, " - "GF_FILE_TB.WRITE_FREQ_CNTR DESC", - base_query_str); - - if (ret < 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed to create query statement"); - query_str = NULL; - goto out; - } - - from_time_usec = gfdb_time_2_usec (from_time); - - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, query_str, -1, - &prep_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed to prepare statement %s :" - " %s", query_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind write wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 1, from_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind from_time_usec " - "%"PRIu64" : %s", from_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind write frequency thresold*/ - ret = sqlite3_bind_int (prep_stmt, 2, freq_write_cnt); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind freq_write_cnt " - "%d : %s", freq_write_cnt, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - - /*Bind read wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 3, from_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind from_time_usec " - "%"PRIu64" : %s", from_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind read frequency thresold*/ - ret = sqlite3_bind_int (prep_stmt, 4, freq_read_cnt); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind freq_read_cnt " - "%d : %s", freq_read_cnt, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the query*/ - ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args); + int ret = -1; + char *query_str = NULL; + gf_sql_connection_t *sql_conn = db_conn; + sqlite3_stmt *prep_stmt = NULL; + uint64_t from_time_usec = 0; + char *base_query_str = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); + + ret = gf_get_basic_query_stmt(&base_query_str); + if (ret <= 0) { + goto out; + } + ret = gf_asprintf( + &query_str, + "%s AND " + /*First condition: For Writes*/ + "( ( ((" GF_COL_TB_WSEC " * " TOSTRING( + GFDB_MICROSEC) " + " GF_COL_TB_WMSEC + ") >= ? )" + " AND " + " (" GF_COL_TB_WFC + " >= ? ) )" + " OR " + /*Second condition: For Reads */ + "( ((" GF_COL_TB_RWSEC " * " TOSTRING( + GFDB_MICROSEC) " + " GF_COL_TB_RWMSEC + ") >= ?)" + " AND " + " (" GF_COL_TB_RFC + " >= ? ) ) )" + /* Order by write wind time and + * write freq in a descending + * order + * i.e most hot files w.r.t to + * write */ + " ORDER BY GF_FILE_TB.W_SEC " + "DESC, " + "GF_FILE_TB.WRITE_FREQ_CNTR DESC", + base_query_str); + + if (ret < 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed to create query statement"); + query_str = NULL; + goto out; + } + + from_time_usec = gfdb_time_2_usec(from_time); + + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, query_str, -1, &prep_stmt, + 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed to prepare statement %s :" + " %s", + query_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind write wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 1, from_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind from_time_usec " + "%" PRIu64 " : %s", + from_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind write frequency thresold*/ + ret = sqlite3_bind_int(prep_stmt, 2, freq_write_cnt); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind freq_write_cnt " + "%d : %s", + freq_write_cnt, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind read wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 3, from_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind from_time_usec " + "%" PRIu64 " : %s", + from_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind read frequency thresold*/ + ret = sqlite3_bind_int(prep_stmt, 4, freq_read_cnt); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind freq_read_cnt " + "%d : %s", + freq_read_cnt, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the query*/ + ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed Query %s", query_str); + goto out; + } + + /*Clear counters*/ + if (clear_counters) { + ret = gf_sql_clear_counters(sql_conn); if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed Query %s", query_str); - goto out; - } - - - - /*Clear counters*/ - if (clear_counters) { - ret = gf_sql_clear_counters (sql_conn); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_CLEAR_COUNTER_FAILED, "Failed to clear" - " counters!"); - goto out; - } - } - ret = 0; + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_CLEAR_COUNTER_FAILED, + "Failed to clear" + " counters!"); + goto out; + } + } + ret = 0; out: - sqlite3_finalize (prep_stmt); - GF_FREE (base_query_str); - GF_FREE (query_str); - return ret; + sqlite3_finalize(prep_stmt); + GF_FREE(base_query_str); + GF_FREE(query_str); + return ret; } - - - /* * Find unchanged files from a specified time, w.r.t to frequency, from the DB * Input: @@ -1056,30 +1037,29 @@ out: * clear_counters : Clear counters (r/w) for all inodes in DB * */ int -gf_sqlite3_find_unchanged_for_time_freq (void *db_conn, +gf_sqlite3_find_unchanged_for_time_freq(void *db_conn, gf_query_callback_t query_callback, void *query_cbk_args, gfdb_time_t *for_time, - int freq_write_cnt, - int freq_read_cnt, + int freq_write_cnt, int freq_read_cnt, gf_boolean_t clear_counters) { - int ret = -1; - char *query_str = NULL; - gf_sql_connection_t *sql_conn = db_conn; - sqlite3_stmt *prep_stmt = NULL; - uint64_t for_time_usec = 0; - char *base_query_str = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); - - ret = gf_get_basic_query_stmt (&base_query_str); - if (ret <= 0) { - goto out; - } - - ret = gf_asprintf (&query_str, "%s AND " + int ret = -1; + char *query_str = NULL; + gf_sql_connection_t *sql_conn = db_conn; + sqlite3_stmt *prep_stmt = NULL; + uint64_t for_time_usec = 0; + char *base_query_str = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); + + ret = gf_get_basic_query_stmt(&base_query_str); + if (ret <= 0) { + goto out; + } + + ret = gf_asprintf (&query_str, "%s AND " /*First condition: For Writes * Files that have write wind time smaller than for_time * OR @@ -1109,145 +1089,141 @@ gf_sqlite3_find_unchanged_for_time_freq (void *db_conn, "GF_FILE_TB.WRITE_FREQ_CNTR ASC", base_query_str); - if (ret < 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed to create query statement"); - query_str = NULL; - goto out; - } - - for_time_usec = gfdb_time_2_usec (for_time); - - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, query_str, -1, - &prep_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed to prepare delete " - "statement %s : %s", query_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind write wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 1, for_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec " - "%"PRIu64" : %s", for_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind write frequency thresold*/ - ret = sqlite3_bind_int (prep_stmt, 2, freq_write_cnt); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind freq_write_cnt" - " %d : %s", freq_write_cnt, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind write wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 3, for_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec " - "%"PRIu64" : %s", for_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - - - /*Bind read wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 4, for_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec " - "%"PRIu64" : %s", for_time_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind read frequency thresold*/ - ret = sqlite3_bind_int (prep_stmt, 5, freq_read_cnt); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind freq_read_cnt " - "%d : %s", freq_read_cnt, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind read wind time*/ - ret = sqlite3_bind_int64 (prep_stmt, 6, for_time_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed to bind for_time_usec " - "%"PRIu64" : %s", for_time_usec, - sqlite3_errmsg(sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the query*/ - ret = gf_sql_query_function (prep_stmt, query_callback, query_cbk_args); + if (ret < 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed to create query statement"); + query_str = NULL; + goto out; + } + + for_time_usec = gfdb_time_2_usec(for_time); + + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, query_str, -1, &prep_stmt, + 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed to prepare delete " + "statement %s : %s", + query_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind write wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 1, for_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind for_time_usec " + "%" PRIu64 " : %s", + for_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind write frequency thresold*/ + ret = sqlite3_bind_int(prep_stmt, 2, freq_write_cnt); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind freq_write_cnt" + " %d : %s", + freq_write_cnt, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind write wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 3, for_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind for_time_usec " + "%" PRIu64 " : %s", + for_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind read wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 4, for_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind for_time_usec " + "%" PRIu64 " : %s", + for_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind read frequency thresold*/ + ret = sqlite3_bind_int(prep_stmt, 5, freq_read_cnt); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind freq_read_cnt " + "%d : %s", + freq_read_cnt, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind read wind time*/ + ret = sqlite3_bind_int64(prep_stmt, 6, for_time_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed to bind for_time_usec " + "%" PRIu64 " : %s", + for_time_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the query*/ + ret = gf_sql_query_function(prep_stmt, query_callback, query_cbk_args); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed Query %s", query_str); + goto out; + } + + /*Clear counters*/ + if (clear_counters) { + ret = gf_sql_clear_counters(sql_conn); if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed Query %s", query_str); - goto out; - } - - - /*Clear counters*/ - if (clear_counters) { - ret = gf_sql_clear_counters (sql_conn); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_CLEAR_COUNTER_FAILED, "Failed to clear " - "counters!"); - goto out; - } + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_CLEAR_COUNTER_FAILED, + "Failed to clear " + "counters!"); + goto out; } + } - ret = 0; + ret = 0; out: - sqlite3_finalize (prep_stmt); - GF_FREE (base_query_str); - GF_FREE (query_str); - return ret; + sqlite3_finalize(prep_stmt); + GF_FREE(base_query_str); + GF_FREE(query_str); + return ret; } - int -gf_sqlite3_clear_files_heat (void *db_conn) +gf_sqlite3_clear_files_heat(void *db_conn) { - int ret = -1; - gf_sql_connection_t *sql_conn = db_conn; + int ret = -1; + gf_sql_connection_t *sql_conn = db_conn; - CHECK_SQL_CONN (sql_conn, out); + CHECK_SQL_CONN(sql_conn, out); - ret = gf_sql_clear_counters (sql_conn); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_CLEAR_COUNTER_FAILED, "Failed to clear " - "files heat"); - goto out; - } + ret = gf_sql_clear_counters(sql_conn); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CLEAR_COUNTER_FAILED, + "Failed to clear " + "files heat"); + goto out; + } - ret = 0; + ret = 0; out: - return ret; + return ret; } - /* Function to extract version of sqlite db * Input: * void *db_conn : Sqlite connection @@ -1260,48 +1236,45 @@ out: * On failure return -1 * */ int -gf_sqlite3_version (void *db_conn, char **version) +gf_sqlite3_version(void *db_conn, char **version) { - int ret = -1; - gf_sql_connection_t *sql_conn = db_conn; - sqlite3_stmt *pre_stmt = NULL; - - CHECK_SQL_CONN (sql_conn, out); - - ret = sqlite3_prepare_v2 (sql_conn->sqlite3_db_conn, - "SELECT SQLITE_VERSION()", - -1, &pre_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed init prepare stmt %s", - sqlite3_errmsg (db_conn)); - ret = -1; - goto out; - } - - ret = sqlite3_step(pre_stmt); - if (ret != SQLITE_ROW) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_GET_RECORD_FAILED, "Failed to get records " - "from db : %s", sqlite3_errmsg (db_conn)); - ret = -1; - goto out; - } - - ret = gf_asprintf (version, "%s", sqlite3_column_text (pre_stmt, 0)); - if (ret <= 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed extracting version"); - } + int ret = -1; + gf_sql_connection_t *sql_conn = db_conn; + sqlite3_stmt *pre_stmt = NULL; + + CHECK_SQL_CONN(sql_conn, out); + + ret = sqlite3_prepare_v2(sql_conn->sqlite3_db_conn, + "SELECT SQLITE_VERSION()", -1, &pre_stmt, 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed init prepare stmt %s", sqlite3_errmsg(db_conn)); + ret = -1; + goto out; + } + + ret = sqlite3_step(pre_stmt); + if (ret != SQLITE_ROW) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_RECORD_FAILED, + "Failed to get records " + "from db : %s", + sqlite3_errmsg(db_conn)); + ret = -1; + goto out; + } + + ret = gf_asprintf(version, "%s", sqlite3_column_text(pre_stmt, 0)); + if (ret <= 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed extracting version"); + } out: - sqlite3_finalize (pre_stmt); + sqlite3_finalize(pre_stmt); - return ret; + return ret; } - - /* Function to extract PRAGMA from sqlite db * Input: * void *db_conn : Sqlite connection @@ -1315,59 +1288,57 @@ out: * On failure return -1 * */ int -gf_sqlite3_pragma (void *db_conn, char *pragma_key, char **pragma_value) +gf_sqlite3_pragma(void *db_conn, char *pragma_key, char **pragma_value) { - int ret = -1; - gf_sql_connection_t *sql_conn = db_conn; - sqlite3_stmt *pre_stmt = NULL; - char *sqlstring = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pragma_key, out); - - ret = gf_asprintf (&sqlstring, "PRAGMA %s;", pragma_key); + int ret = -1; + gf_sql_connection_t *sql_conn = db_conn; + sqlite3_stmt *pre_stmt = NULL; + char *sqlstring = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pragma_key, out); + + ret = gf_asprintf(&sqlstring, "PRAGMA %s;", pragma_key); + if (ret <= 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed allocating memory"); + goto out; + } + + ret = sqlite3_prepare_v2(sql_conn->sqlite3_db_conn, sqlstring, -1, + &pre_stmt, 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed init prepare stmt %s", sqlite3_errmsg(db_conn)); + ret = -1; + goto out; + } + + ret = sqlite3_step(pre_stmt); + if (ret != SQLITE_ROW) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_RECORD_FAILED, + "Failed to get records " + "from db : %s", + sqlite3_errmsg(db_conn)); + ret = -1; + goto out; + } + + if (pragma_value) { + ret = gf_asprintf(pragma_value, "%s", sqlite3_column_text(pre_stmt, 0)); if (ret <= 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed allocating memory"); - goto out; + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed to get %s from db", pragma_key); } + } - ret = sqlite3_prepare_v2 (sql_conn->sqlite3_db_conn, - sqlstring, -1, &pre_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed init prepare stmt %s", - sqlite3_errmsg (db_conn)); - ret = -1; - goto out; - } - - ret = sqlite3_step (pre_stmt); - if (ret != SQLITE_ROW) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_GET_RECORD_FAILED, "Failed to get records " - "from db : %s", sqlite3_errmsg (db_conn)); - ret = -1; - goto out; - } - - if (pragma_value) { - ret = gf_asprintf (pragma_value, "%s", - sqlite3_column_text (pre_stmt, 0)); - if (ret <= 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_QUERY_FAILED, "Failed to get %s from db", - pragma_key); - } - } - - ret = 0; + ret = 0; out: - GF_FREE (sqlstring); + GF_FREE(sqlstring); - sqlite3_finalize (pre_stmt); + sqlite3_finalize(pre_stmt); - return ret; + return ret; } /* Function to set PRAGMA to sqlite db @@ -1380,35 +1351,34 @@ out: * On failure return -1 * */ int -gf_sqlite3_set_pragma (void *db_conn, char *pragma_key, char *pragma_value) +gf_sqlite3_set_pragma(void *db_conn, char *pragma_key, char *pragma_value) { - int ret = -1; - gf_sql_connection_t *sql_conn = db_conn; - char sqlstring[GF_NAME_MAX] = ""; - char *db_pragma_value = NULL; + int ret = -1; + gf_sql_connection_t *sql_conn = db_conn; + char sqlstring[GF_NAME_MAX] = ""; + char *db_pragma_value = NULL; - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pragma_key, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pragma_value, out); + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pragma_key, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pragma_value, out); - GF_SQLITE3_SET_PRAGMA(sqlstring, pragma_key, "%s", - pragma_value, ret, out); + GF_SQLITE3_SET_PRAGMA(sqlstring, pragma_key, "%s", pragma_value, ret, out); - ret = gf_sqlite3_pragma (db_conn, pragma_key, &db_pragma_value); - if (ret < 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, - "Failed to get %s pragma", pragma_key); - } else { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, 0, - "Value set on DB %s : %s", pragma_key, db_pragma_value); - } - GF_FREE (db_pragma_value); + ret = gf_sqlite3_pragma(db_conn, pragma_key, &db_pragma_value); + if (ret < 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_QUERY_FAILED, + "Failed to get %s pragma", pragma_key); + } else { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, 0, "Value set on DB %s : %s", + pragma_key, db_pragma_value); + } + GF_FREE(db_pragma_value); - ret = 0; + ret = 0; out: - return ret; + return ret; } /* Function to vacuum of sqlite db @@ -1421,167 +1391,152 @@ out: * On failure return -1 * */ int -gf_sqlite3_vacuum (void *db_conn, gf_boolean_t compact_active, - gf_boolean_t compact_mode_switched) +gf_sqlite3_vacuum(void *db_conn, gf_boolean_t compact_active, + gf_boolean_t compact_mode_switched) { - int ret = -1; - gf_sql_connection_t *sql_conn = db_conn; - char *sqlstring = NULL; - char *sql_strerror = NULL; - gf_boolean_t changing_pragma = _gf_true; - - CHECK_SQL_CONN (sql_conn, out); - - if (GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_NONE) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_INFO, 0, - LG_MSG_COMPACT_STATUS, - "VACUUM type is off: no VACUUM to do"); - goto out; - } - - if (compact_mode_switched) { - if (compact_active) { /* Then it was OFF before. - So turn everything on */ - ret = 0; - switch (GF_SQL_COMPACT_DEF) { - case GF_SQL_COMPACT_FULL: - ret = gf_sqlite3_set_pragma (db_conn, - "auto_vacuum", - GF_SQL_AV_FULL); - break; - case GF_SQL_COMPACT_INCR: - ret = gf_sqlite3_set_pragma (db_conn, - "auto_vacuum", - GF_SQL_AV_INCR); - break; - case GF_SQL_COMPACT_MANUAL: - changing_pragma = _gf_false; - break; - default: - ret = -1; - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_COMPACT_FAILED, - "VACUUM type undefined"); - goto out; - break; - } - - } else { /* Then it was ON before, so turn it all off */ - if (GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_FULL || - GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_INCR) { - ret = gf_sqlite3_set_pragma (db_conn, - "auto_vacuum", - GF_SQL_AV_NONE); - } else { - changing_pragma = _gf_false; - } - } - - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, - LG_MSG_PREPARE_FAILED, - "Failed to set the pragma"); - goto out; - } + int ret = -1; + gf_sql_connection_t *sql_conn = db_conn; + char *sqlstring = NULL; + char *sql_strerror = NULL; + gf_boolean_t changing_pragma = _gf_true; - gf_msg (GFDB_STR_SQLITE3, GF_LOG_INFO, 0, - LG_MSG_COMPACT_STATUS, "Turning compaction %i", - GF_SQL_COMPACT_DEF); - - /* If we move from an auto_vacuum scheme to off, */ - /* or vice-versa, we must VACUUM to save the change. */ - /* In the case of a manual VACUUM scheme, we might as well */ - /* run a manual VACUUM now if we */ - if (changing_pragma || compact_active) { - ret = gf_asprintf (&sqlstring, "VACUUM;"); - if (ret <= 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, - "Failed allocating memory"); - goto out; - } - gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, - LG_MSG_COMPACT_STATUS, "Sealed with a VACUUM"); - } - } else { /* We are active, so it's time to VACUUM */ - if (!compact_active) { /* Did we somehow enter an inconsistent - state? */ - ret = -1; - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, - "Tried to VACUUM when compaction inactive"); - goto out; - } + CHECK_SQL_CONN(sql_conn, out); - gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, - LG_MSG_COMPACT_STATUS, - "Doing regular vacuum of type %i", GF_SQL_COMPACT_DEF); - - switch (GF_SQL_COMPACT_DEF) { - case GF_SQL_COMPACT_INCR: /* INCR auto_vacuum */ - ret = gf_asprintf(&sqlstring, - "PRAGMA incremental_vacuum;"); - if (ret <= 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, - "Failed allocating memory"); - goto out; - } - gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, - LG_MSG_COMPACT_STATUS, - "Will commence an incremental VACUUM"); - break; - /* (MANUAL) Invoke the VACUUM command */ - case GF_SQL_COMPACT_MANUAL: - ret = gf_asprintf(&sqlstring, "VACUUM;"); - if (ret <= 0) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, - "Failed allocating memory"); - goto out; - } - gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, - LG_MSG_COMPACT_STATUS, - "Will commence a VACUUM"); - break; - /* (FULL) The database does the compaction itself. */ - /* We cannot do anything else, so we can leave */ - /* without sending anything to the database */ + if (GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_NONE) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS, + "VACUUM type is off: no VACUUM to do"); + goto out; + } + + if (compact_mode_switched) { + if (compact_active) { /* Then it was OFF before. + So turn everything on */ + ret = 0; + switch (GF_SQL_COMPACT_DEF) { case GF_SQL_COMPACT_FULL: - ret = 0; - goto success; - /* Any other state must be an error. Note that OFF */ - /* cannot hit this statement since we immediately leave */ - /* in that case */ + ret = gf_sqlite3_set_pragma(db_conn, "auto_vacuum", + GF_SQL_AV_FULL); + break; + case GF_SQL_COMPACT_INCR: + ret = gf_sqlite3_set_pragma(db_conn, "auto_vacuum", + GF_SQL_AV_INCR); + break; + case GF_SQL_COMPACT_MANUAL: + changing_pragma = _gf_false; + break; default: - ret = -1; - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_COMPACT_FAILED, - "VACUUM type undefined"); - goto out; - break; - } + ret = -1; + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_COMPACT_FAILED, "VACUUM type undefined"); + goto out; + break; + } + + } else { /* Then it was ON before, so turn it all off */ + if (GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_FULL || + GF_SQL_COMPACT_DEF == GF_SQL_COMPACT_INCR) { + ret = gf_sqlite3_set_pragma(db_conn, "auto_vacuum", + GF_SQL_AV_NONE); + } else { + changing_pragma = _gf_false; + } } - gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, LG_MSG_COMPACT_STATUS, - "SQLString == %s", sqlstring); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, LG_MSG_PREPARE_FAILED, + "Failed to set the pragma"); + goto out; + } - ret = sqlite3_exec(sql_conn->sqlite3_db_conn, sqlstring, NULL, NULL, - &sql_strerror); + gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS, + "Turning compaction %i", GF_SQL_COMPACT_DEF); + + /* If we move from an auto_vacuum scheme to off, */ + /* or vice-versa, we must VACUUM to save the change. */ + /* In the case of a manual VACUUM scheme, we might as well */ + /* run a manual VACUUM now if we */ + if (changing_pragma || compact_active) { + ret = gf_asprintf(&sqlstring, "VACUUM;"); + if (ret <= 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed allocating memory"); + goto out; + } + gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS, + "Sealed with a VACUUM"); + } + } else { /* We are active, so it's time to VACUUM */ + if (!compact_active) { /* Did we somehow enter an inconsistent + state? */ + ret = -1; + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Tried to VACUUM when compaction inactive"); + goto out; + } - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_GET_RECORD_FAILED, "Failed to vacuum " - "the db : %s", sqlite3_errmsg (db_conn)); + gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, LG_MSG_COMPACT_STATUS, + "Doing regular vacuum of type %i", GF_SQL_COMPACT_DEF); + + switch (GF_SQL_COMPACT_DEF) { + case GF_SQL_COMPACT_INCR: /* INCR auto_vacuum */ + ret = gf_asprintf(&sqlstring, "PRAGMA incremental_vacuum;"); + if (ret <= 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_PREPARE_FAILED, "Failed allocating memory"); + goto out; + } + gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS, + "Will commence an incremental VACUUM"); + break; + /* (MANUAL) Invoke the VACUUM command */ + case GF_SQL_COMPACT_MANUAL: + ret = gf_asprintf(&sqlstring, "VACUUM;"); + if (ret <= 0) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_PREPARE_FAILED, "Failed allocating memory"); + goto out; + } + gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS, + "Will commence a VACUUM"); + break; + /* (FULL) The database does the compaction itself. */ + /* We cannot do anything else, so we can leave */ + /* without sending anything to the database */ + case GF_SQL_COMPACT_FULL: + ret = 0; + goto success; + /* Any other state must be an error. Note that OFF */ + /* cannot hit this statement since we immediately leave */ + /* in that case */ + default: ret = -1; + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_COMPACT_FAILED, + "VACUUM type undefined"); goto out; + break; } + } + + gf_msg(GFDB_STR_SQLITE3, GF_LOG_TRACE, 0, LG_MSG_COMPACT_STATUS, + "SQLString == %s", sqlstring); + + ret = sqlite3_exec(sql_conn->sqlite3_db_conn, sqlstring, NULL, NULL, + &sql_strerror); + + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_RECORD_FAILED, + "Failed to vacuum " + "the db : %s", + sqlite3_errmsg(db_conn)); + ret = -1; + goto out; + } success: - gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS, - compact_mode_switched ? "Successfully changed VACUUM on/off" - : "DB successfully VACUUM"); + gf_msg(GFDB_STR_SQLITE3, GF_LOG_INFO, 0, LG_MSG_COMPACT_STATUS, + compact_mode_switched ? "Successfully changed VACUUM on/off" + : "DB successfully VACUUM"); out: - GF_FREE(sqlstring); + GF_FREE(sqlstring); - return ret; + return ret; } diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c b/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c index b2c3392f45a..60dd5e25e66 100644 --- a/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c +++ b/libglusterfs/src/gfdb/gfdb_sqlite3_helper.c @@ -10,7 +10,6 @@ #include "gfdb_sqlite3_helper.h" - #define GFDB_SQL_STMT_SIZE 256 /***************************************************************************** @@ -21,711 +20,653 @@ * ****************************************************************************/ static int -gf_sql_delete_all (gf_sql_connection_t *sql_conn, - char *gfid, - gf_boolean_t ignore_errors) +gf_sql_delete_all(gf_sql_connection_t *sql_conn, char *gfid, + gf_boolean_t ignore_errors) { - int ret = -1; - sqlite3_stmt *delete_file_stmt = NULL; - sqlite3_stmt *delete_link_stmt = NULL; - char *delete_link_str = "DELETE FROM " - GF_FILE_LINK_TABLE - " WHERE GF_ID = ? ;"; - char *delete_file_str = "DELETE FROM " - GF_FILE_TABLE - " WHERE GF_ID = ? ;"; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out); - - /* - * Delete all links associated with this GFID - * - * */ - /*Prepare statement for delete all links*/ - ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, delete_link_str, -1, - &delete_link_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed preparing delete " - "statement %s : %s", delete_link_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind gfid*/ - ret = sqlite3_bind_text (delete_link_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", - gfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - - /*Execute the prepare statement*/ - if (sqlite3_step (delete_link_stmt) != SQLITE_DONE) { - 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", - delete_link_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - - /* - * Delete entry from file table associated with this GFID - * - * */ - /*Prepare statement for delete all links*/ - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, delete_file_str, -1, - &delete_file_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed preparing delete " - "statement %s : %s", delete_file_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind gfid*/ - ret = sqlite3_bind_text (delete_file_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", - gfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the prepare statement*/ - if (sqlite3_step (delete_file_stmt) != SQLITE_DONE) { - 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", - delete_file_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } + int ret = -1; + sqlite3_stmt *delete_file_stmt = NULL; + sqlite3_stmt *delete_link_stmt = NULL; + char *delete_link_str = "DELETE FROM " GF_FILE_LINK_TABLE + " WHERE GF_ID = ? ;"; + char *delete_file_str = "DELETE FROM " GF_FILE_TABLE " WHERE GF_ID = ? ;"; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out); + + /* + * Delete all links associated with this GFID + * + * */ + /*Prepare statement for delete all links*/ + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, delete_link_str, -1, + &delete_link_stmt, 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed preparing delete " + "statement %s : %s", + delete_link_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind gfid*/ + ret = sqlite3_bind_text(delete_link_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", gfid, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the prepare statement*/ + if (sqlite3_step(delete_link_stmt) != SQLITE_DONE) { + 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", delete_link_str, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /* + * Delete entry from file table associated with this GFID + * + * */ + /*Prepare statement for delete all links*/ + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, delete_file_str, -1, + &delete_file_stmt, 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed preparing delete " + "statement %s : %s", + delete_file_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind gfid*/ + ret = sqlite3_bind_text(delete_file_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", gfid, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the prepare statement*/ + if (sqlite3_step(delete_file_stmt) != SQLITE_DONE) { + 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", delete_file_str, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } out: - /*Free prepared statement*/ - sqlite3_finalize (delete_file_stmt); - sqlite3_finalize (delete_link_stmt); - return ret; + /*Free prepared statement*/ + sqlite3_finalize(delete_file_stmt); + sqlite3_finalize(delete_link_stmt); + return ret; } static int -gf_sql_delete_link (gf_sql_connection_t *sql_conn, - char *gfid, - char *pargfid, - char *basename, - gf_boolean_t ignore_errors) +gf_sql_delete_link(gf_sql_connection_t *sql_conn, char *gfid, char *pargfid, + char *basename, gf_boolean_t ignore_errors) { - int ret = -1; - sqlite3_stmt *delete_stmt = NULL; - char *delete_str = "DELETE FROM " - GF_FILE_LINK_TABLE - " WHERE GF_ID = ? AND GF_PID = ?" - " AND FNAME = ?;"; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pargfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, basename, out); - - /*Prepare statement*/ - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, delete_str, -1, - &delete_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed preparing delete " - "statement %s : %s", delete_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind gfid*/ - ret = sqlite3_bind_text (delete_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", gfid, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind pargfid*/ - ret = sqlite3_bind_text (delete_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 " - ": %s", pargfid, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind basename*/ - ret = sqlite3_bind_text (delete_stmt, 3, basename, -1, NULL); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding basename %s : " - "%s", basename, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the prepare statement*/ - if (sqlite3_step(delete_stmt) != SQLITE_DONE) { - 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", - delete_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - - ret = 0; + int ret = -1; + sqlite3_stmt *delete_stmt = NULL; + char *delete_str = "DELETE FROM " GF_FILE_LINK_TABLE + " WHERE GF_ID = ? AND GF_PID = ?" + " AND FNAME = ?;"; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pargfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, basename, out); + + /*Prepare statement*/ + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, delete_str, -1, + &delete_stmt, 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed preparing delete " + "statement %s : %s", + delete_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind gfid*/ + ret = sqlite3_bind_text(delete_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", gfid, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind pargfid*/ + ret = sqlite3_bind_text(delete_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 " + ": %s", + pargfid, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind basename*/ + ret = sqlite3_bind_text(delete_stmt, 3, basename, -1, NULL); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed binding basename %s : " + "%s", + basename, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the prepare statement*/ + if (sqlite3_step(delete_stmt) != SQLITE_DONE) { + 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", delete_str, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + ret = 0; out: - /*Free prepared statement*/ - sqlite3_finalize (delete_stmt); - return ret; + /*Free prepared statement*/ + sqlite3_finalize(delete_stmt); + return ret; } - - static int -gf_sql_update_link_flags (gf_sql_connection_t *sql_conn, - char *gfid, - char *pargfid, - char *basename, - int update_flag, - gf_boolean_t is_update_or_delete, - gf_boolean_t ignore_errors) +gf_sql_update_link_flags(gf_sql_connection_t *sql_conn, char *gfid, + char *pargfid, char *basename, int update_flag, + gf_boolean_t is_update_or_delete, + gf_boolean_t ignore_errors) { - int ret = -1; - sqlite3_stmt *update_stmt = NULL; - char *update_column = NULL; - char update_str[1024] = ""; - - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pargfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, basename, out); - - update_column = (is_update_or_delete) ? "LINK_UPDATE" : "W_DEL_FLAG"; - - sprintf (update_str, "UPDATE " - GF_FILE_LINK_TABLE - " SET %s = ?" - " WHERE GF_ID = ? AND GF_PID = ? AND FNAME = ?;", - update_column); - - /*Prepare statement*/ - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, update_str, -1, - &update_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed preparing update " - "statement %s : %s", update_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - - /*Bind link_update*/ - ret = sqlite3_bind_int (update_stmt, 1, update_flag); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding update_flag %d " - ": %s", update_flag, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind gfid*/ - ret = sqlite3_bind_text (update_stmt, 2, 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", - gfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind pargfid*/ - ret = sqlite3_bind_text (update_stmt, 3, 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 " - ": %s", pargfid, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind basename*/ - ret = sqlite3_bind_text (update_stmt, 4, basename, -1, NULL); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding basename %s : " - "%s", basename, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - - /*Execute the prepare statement*/ - if (sqlite3_step(update_stmt) != SQLITE_DONE) { - 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", - update_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - ret = 0; + int ret = -1; + sqlite3_stmt *update_stmt = NULL; + char *update_column = NULL; + char update_str[1024] = ""; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pargfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, basename, out); + + update_column = (is_update_or_delete) ? "LINK_UPDATE" : "W_DEL_FLAG"; + + sprintf(update_str, + "UPDATE " GF_FILE_LINK_TABLE + " SET %s = ?" + " WHERE GF_ID = ? AND GF_PID = ? AND FNAME = ?;", + update_column); + + /*Prepare statement*/ + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, update_str, -1, + &update_stmt, 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed preparing update " + "statement %s : %s", + update_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind link_update*/ + ret = sqlite3_bind_int(update_stmt, 1, update_flag); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed binding update_flag %d " + ": %s", + update_flag, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind gfid*/ + ret = sqlite3_bind_text(update_stmt, 2, 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", gfid, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind pargfid*/ + ret = sqlite3_bind_text(update_stmt, 3, 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 " + ": %s", + pargfid, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind basename*/ + ret = sqlite3_bind_text(update_stmt, 4, basename, -1, NULL); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed binding basename %s : " + "%s", + basename, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the prepare statement*/ + if (sqlite3_step(update_stmt) != SQLITE_DONE) { + 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", update_str, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + ret = 0; out: - /*Free prepared statement*/ - sqlite3_finalize (update_stmt); - return ret; + /*Free prepared statement*/ + sqlite3_finalize(update_stmt); + return ret; } - static int -gf_sql_insert_link (gf_sql_connection_t *sql_conn, - char *gfid, - char *pargfid, - char *basename, - gf_boolean_t link_consistency, - gf_boolean_t ignore_errors) +gf_sql_insert_link(gf_sql_connection_t *sql_conn, char *gfid, char *pargfid, + char *basename, gf_boolean_t link_consistency, + gf_boolean_t ignore_errors) { - int ret = -1; - sqlite3_stmt *insert_stmt = NULL; - char insert_str[GFDB_SQL_STMT_SIZE] = ""; - - sprintf (insert_str, "INSERT INTO " - GF_FILE_LINK_TABLE - " (GF_ID, GF_PID, FNAME," - " W_DEL_FLAG, LINK_UPDATE) " - " VALUES (?, ?, ?, 0, %d);", - link_consistency); - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pargfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, basename, out); - - /*Prepare statement*/ - 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 " - "statement %s : %s", insert_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*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", - gfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*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 " - ": %s", pargfid, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*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, - "Failed binding basename %s : %s", basename, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the prepare statement*/ - if (sqlite3_step (insert_stmt) != SQLITE_DONE) { - 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", - gfid, pargfid, basename, insert_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - ret = 0; + int ret = -1; + sqlite3_stmt *insert_stmt = NULL; + char insert_str[GFDB_SQL_STMT_SIZE] = ""; + + sprintf(insert_str, + "INSERT INTO " GF_FILE_LINK_TABLE + " (GF_ID, GF_PID, FNAME," + " W_DEL_FLAG, LINK_UPDATE) " + " VALUES (?, ?, ?, 0, %d);", + link_consistency); + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pargfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, basename, out); + + /*Prepare statement*/ + 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 " + "statement %s : %s", + insert_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*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", gfid, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*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 " + ": %s", + pargfid, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*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, + "Failed binding basename %s : %s", basename, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the prepare statement*/ + if (sqlite3_step(insert_stmt) != SQLITE_DONE) { + 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", + gfid, pargfid, basename, insert_str, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + ret = 0; out: - /*Free prepared statement*/ - sqlite3_finalize (insert_stmt); - return ret; + /*Free prepared statement*/ + sqlite3_finalize(insert_stmt); + return ret; } - static int -gf_sql_update_link (gf_sql_connection_t *sql_conn, - char *gfid, - char *pargfid, - char *basename, - char *old_pargfid, - char *old_basename, - gf_boolean_t link_consistency, - gf_boolean_t ignore_errors) +gf_sql_update_link(gf_sql_connection_t *sql_conn, char *gfid, char *pargfid, + char *basename, char *old_pargfid, char *old_basename, + gf_boolean_t link_consistency, gf_boolean_t ignore_errors) { - int ret = -1; - sqlite3_stmt *insert_stmt = NULL; - char insert_str[GFDB_SQL_STMT_SIZE] = ""; - - sprintf (insert_str, "INSERT INTO " - GF_FILE_LINK_TABLE - " (GF_ID, GF_PID, FNAME," - " W_DEL_FLAG, LINK_UPDATE) " - " VALUES (? , ?, ?, 0, %d);", - link_consistency); - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, pargfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, basename, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, old_pargfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, old_basename, out); - - /* - * - * Delete the old link - * - * */ - ret = gf_sql_delete_link (sql_conn, gfid, old_pargfid, - old_basename, ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0, - LG_MSG_DELETE_FAILED, "Failed deleting old link"); - goto out; - } - - /* - * - * insert new link - * - * */ - /*Prepare statement*/ - 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 " - "statement %s : %s", insert_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*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", - gfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind new 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 " - ": %s", pargfid, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind new 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, "Failed binding basename %s : " - "%s", basename, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the prepare statement*/ - if (sqlite3_step (insert_stmt) != SQLITE_DONE) { - 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", - insert_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - - - ret = 0; + int ret = -1; + sqlite3_stmt *insert_stmt = NULL; + char insert_str[GFDB_SQL_STMT_SIZE] = ""; + + sprintf(insert_str, + "INSERT INTO " GF_FILE_LINK_TABLE + " (GF_ID, GF_PID, FNAME," + " W_DEL_FLAG, LINK_UPDATE) " + " VALUES (? , ?, ?, 0, %d);", + link_consistency); + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, pargfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, basename, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, old_pargfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, old_basename, out); + + /* + * + * Delete the old link + * + * */ + ret = gf_sql_delete_link(sql_conn, gfid, old_pargfid, old_basename, + ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors), + 0, LG_MSG_DELETE_FAILED, "Failed deleting old link"); + goto out; + } + + /* + * + * insert new link + * + * */ + /*Prepare statement*/ + 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 " + "statement %s : %s", + insert_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*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", gfid, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind new 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 " + ": %s", + pargfid, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind new 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, + "Failed binding basename %s : " + "%s", + basename, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the prepare statement*/ + if (sqlite3_step(insert_stmt) != SQLITE_DONE) { + 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", insert_str, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + ret = 0; out: - /*Free prepared statement*/ - sqlite3_finalize (insert_stmt); - return ret; + /*Free prepared statement*/ + sqlite3_finalize(insert_stmt); + return ret; } static int -gf_sql_insert_write_wind_time (gf_sql_connection_t *sql_conn, - char *gfid, - gfdb_time_t *wind_time, - gf_boolean_t ignore_errors) +gf_sql_insert_write_wind_time(gf_sql_connection_t *sql_conn, char *gfid, + gfdb_time_t *wind_time, + gf_boolean_t ignore_errors) { - int ret = -1; - sqlite3_stmt *insert_stmt = NULL; - char *insert_str = "INSERT INTO " - GF_FILE_TABLE - "(GF_ID, W_SEC, W_MSEC, UW_SEC, UW_MSEC)" - " VALUES (?, ?, ?, 0, 0);"; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, wind_time, out); - - - /*Prepare statement*/ - 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 " - "statement %s : %s", insert_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*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", - gfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind wind secs*/ - ret = sqlite3_bind_int (insert_stmt, 2, wind_time->tv_sec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding parent wind " - "secs %ld : %s", wind_time->tv_sec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind wind msecs*/ - ret = sqlite3_bind_int (insert_stmt, 3, wind_time->tv_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding parent wind " - "msecs %ld : %s", wind_time->tv_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the prepare statement*/ - if (sqlite3_step (insert_stmt) != SQLITE_DONE) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, ignore_errors), 0, - LG_MSG_EXEC_FAILED, - "Failed executing the prepared stmt GFID:%s %s : %s", - gfid, insert_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - ret = 0; + int ret = -1; + sqlite3_stmt *insert_stmt = NULL; + char *insert_str = "INSERT INTO " GF_FILE_TABLE + "(GF_ID, W_SEC, W_MSEC, UW_SEC, UW_MSEC)" + " VALUES (?, ?, ?, 0, 0);"; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, wind_time, out); + + /*Prepare statement*/ + 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 " + "statement %s : %s", + insert_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*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", gfid, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind wind secs*/ + ret = sqlite3_bind_int(insert_stmt, 2, wind_time->tv_sec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed binding parent wind " + "secs %ld : %s", + wind_time->tv_sec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind wind msecs*/ + ret = sqlite3_bind_int(insert_stmt, 3, wind_time->tv_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed binding parent wind " + "msecs %ld : %s", + wind_time->tv_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the prepare statement*/ + if (sqlite3_step(insert_stmt) != SQLITE_DONE) { + gf_msg(GFDB_STR_SQLITE3, _gfdb_log_level(GF_LOG_ERROR, ignore_errors), + 0, LG_MSG_EXEC_FAILED, + "Failed executing the prepared stmt GFID:%s %s : %s", gfid, + insert_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + ret = 0; out: - /*Free prepared statement*/ - sqlite3_finalize (insert_stmt); - return ret; + /*Free prepared statement*/ + sqlite3_finalize(insert_stmt); + return ret; } - - /*Update write/read times for both wind and unwind*/ static int -gf_update_time (gf_sql_connection_t *sql_conn, - char *gfid, - gfdb_time_t *update_time, - gf_boolean_t record_counter, - gf_boolean_t is_wind, - gf_boolean_t is_read, - gf_boolean_t ignore_errors) +gf_update_time(gf_sql_connection_t *sql_conn, char *gfid, + gfdb_time_t *update_time, gf_boolean_t record_counter, + gf_boolean_t is_wind, gf_boolean_t is_read, + gf_boolean_t ignore_errors) { - int ret = -1; - sqlite3_stmt *update_stmt = NULL; - char update_str[1024] = ""; - char *freq_cntr_str = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfid, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, update_time, out); - - /* - * Constructing the prepare statement string. - * - * */ - /*For write time*/ - if (!is_read) { - if (is_wind) { - /*if record counter is on*/ - freq_cntr_str = (record_counter) ? - ", WRITE_FREQ_CNTR = WRITE_FREQ_CNTR + 1" : ""; - - /*Perfectly safe as we will not go array of bound*/ - sprintf (update_str, "UPDATE " - GF_FILE_TABLE - " SET W_SEC = ?, W_MSEC = ? " - " %s"/*place for read freq counters*/ - " WHERE GF_ID = ? ;", freq_cntr_str); - } else { - /*Perfectly safe as we will not go array of bound*/ - sprintf (update_str, "UPDATE " - GF_FILE_TABLE - " SET UW_SEC = ?, UW_MSEC = ? ;"); - } + int ret = -1; + sqlite3_stmt *update_stmt = NULL; + char update_str[1024] = ""; + char *freq_cntr_str = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfid, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, update_time, out); + + /* + * Constructing the prepare statement string. + * + * */ + /*For write time*/ + if (!is_read) { + if (is_wind) { + /*if record counter is on*/ + freq_cntr_str = (record_counter) + ? ", WRITE_FREQ_CNTR = WRITE_FREQ_CNTR + 1" + : ""; + + /*Perfectly safe as we will not go array of bound*/ + sprintf(update_str, + "UPDATE " GF_FILE_TABLE + " SET W_SEC = ?, W_MSEC = ? " + " %s" /*place for read freq counters*/ + " WHERE GF_ID = ? ;", + freq_cntr_str); + } else { + /*Perfectly safe as we will not go array of bound*/ + sprintf(update_str, + "UPDATE " GF_FILE_TABLE " SET UW_SEC = ?, UW_MSEC = ? ;"); } - /*For Read Time update*/ - else { - if (is_wind) { - /*if record counter is on*/ - freq_cntr_str = (record_counter) ? - ", READ_FREQ_CNTR = READ_FREQ_CNTR + 1" : ""; - - /*Perfectly safe as we will not go array of bound*/ - sprintf (update_str, "UPDATE " - GF_FILE_TABLE - " SET W_READ_SEC = ?, W_READ_MSEC = ? " - " %s"/*place for read freq counters*/ - " WHERE GF_ID = ? ;", freq_cntr_str); - } else { - /*Perfectly safe as we will not go array of bound*/ - sprintf (update_str, "UPDATE " - GF_FILE_TABLE + } + /*For Read Time update*/ + else { + if (is_wind) { + /*if record counter is on*/ + freq_cntr_str = (record_counter) + ? ", READ_FREQ_CNTR = READ_FREQ_CNTR + 1" + : ""; + + /*Perfectly safe as we will not go array of bound*/ + sprintf(update_str, + "UPDATE " GF_FILE_TABLE + " SET W_READ_SEC = ?, W_READ_MSEC = ? " + " %s" /*place for read freq counters*/ + " WHERE GF_ID = ? ;", + freq_cntr_str); + } else { + /*Perfectly safe as we will not go array of bound*/ + sprintf(update_str, "UPDATE " GF_FILE_TABLE " SET UW_READ_SEC = ?, UW_READ_MSEC = ? ;"); - } - } - - /*Prepare statement*/ - ret = sqlite3_prepare (sql_conn->sqlite3_db_conn, update_str, -1, - &update_stmt, 0); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PREPARE_FAILED, "Failed preparing insert " - "statement %s : %s", update_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind time secs*/ - ret = sqlite3_bind_int (update_stmt, 1, update_time->tv_sec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding parent wind " - "secs %ld : %s", update_time->tv_sec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Bind time msecs*/ - ret = sqlite3_bind_int (update_stmt, 2, update_time->tv_usec); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_BINDING_FAILED, "Failed binding parent wind " - "msecs %ld : %s", update_time->tv_usec, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; } - - /*Bind gfid*/ - ret = sqlite3_bind_text (update_stmt, 3, 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", - gfid, sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - /*Execute the prepare statement*/ - if (sqlite3_step (update_stmt) != SQLITE_DONE) { - 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", - update_str, - sqlite3_errmsg (sql_conn->sqlite3_db_conn)); - ret = -1; - goto out; - } - - ret = 0; + } + + /*Prepare statement*/ + ret = sqlite3_prepare(sql_conn->sqlite3_db_conn, update_str, -1, + &update_stmt, 0); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PREPARE_FAILED, + "Failed preparing insert " + "statement %s : %s", + update_str, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind time secs*/ + ret = sqlite3_bind_int(update_stmt, 1, update_time->tv_sec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed binding parent wind " + "secs %ld : %s", + update_time->tv_sec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind time msecs*/ + ret = sqlite3_bind_int(update_stmt, 2, update_time->tv_usec); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_BINDING_FAILED, + "Failed binding parent wind " + "msecs %ld : %s", + update_time->tv_usec, sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Bind gfid*/ + ret = sqlite3_bind_text(update_stmt, 3, 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", gfid, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + /*Execute the prepare statement*/ + if (sqlite3_step(update_stmt) != SQLITE_DONE) { + 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", update_str, + sqlite3_errmsg(sql_conn->sqlite3_db_conn)); + ret = -1; + goto out; + } + + ret = 0; out: - /*Free prepared statement*/ - sqlite3_finalize (update_stmt); - return ret; + /*Free prepared statement*/ + sqlite3_finalize(update_stmt); + return ret; } /****************************************************************************** @@ -736,394 +677,364 @@ out: * ****************************************************************************/ int -gf_sql_insert_wind (gf_sql_connection_t *sql_conn, - gfdb_db_record_t *gfdb_db_record) +gf_sql_insert_wind(gf_sql_connection_t *sql_conn, + gfdb_db_record_t *gfdb_db_record) { - int ret = -1; - gfdb_time_t *modtime = NULL; - char *pargfid_str = NULL; - char *gfid_str = NULL; - char *old_pargfid_str = NULL; - gf_boolean_t its_wind = _gf_true;/*remains true for this function*/ - - - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfdb_db_record, out); - + int ret = -1; + gfdb_time_t *modtime = NULL; + char *pargfid_str = NULL; + char *gfid_str = NULL; + char *old_pargfid_str = NULL; + gf_boolean_t its_wind = _gf_true; /*remains true for this function*/ + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out); + + gfid_str = gf_strdup(uuid_utoa(gfdb_db_record->gfid)); + if (!gfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Creating gfid string failed."); + goto out; + } + + modtime = &gfdb_db_record->gfdb_wind_change_time; + + /* handle all dentry based operations */ + if (isdentryfop(gfdb_db_record->gfdb_fop_type)) { + /*Parent GFID is always set*/ + pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record->pargfid)); + if (!pargfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Creating gfid string " + "failed."); + goto out; + } - gfid_str = gf_strdup (uuid_utoa (gfdb_db_record->gfid)); - if (!gfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, - "Creating gfid string failed."); + /* handle create, mknod */ + if (isdentrycreatefop(gfdb_db_record->gfdb_fop_type)) { + /*insert link*/ + ret = gf_sql_insert_link( + sql_conn, gfid_str, pargfid_str, gfdb_db_record->file_name, + gfdb_db_record->link_consistency, _gf_true); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_WARNING, + gfdb_db_record->ignore_errors), + 0, LG_MSG_INSERT_FAILED, + "Failed " + "inserting link in DB"); + /* Even if link creation is failed we + * continue with the creation of file record. + * This covers to cases + * 1) Lookup heal: If the file record from + * gf_file_tb is deleted but the link record + * still exist. Lookup heal will attempt a heal + * with create_wind set. The link heal will fail + * as there is already a record and if we don't + * ignore the error we will not heal the + * gf_file_tb. + * 2) Rename file in cold tier: During a rename + * of a file that is there in cold tier. We get + * an link record created in hot tier for the + * linkto file. When the file gets heated and + * moves to hot tier there will be attempt from + * ctr lookup heal to create link and file + * record and If we don't ignore the error we + * will not heal the gf_file_tb. + * */ + } + gfdb_db_record->islinkupdate = gfdb_db_record->link_consistency; + + /* + * Only for create/mknod insert wind time + * for the first time + * */ + ret = gf_sql_insert_write_wind_time(sql_conn, gfid_str, modtime, + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_INSERT_FAILED, + "Failed inserting wind time in DB"); goto out; + } + goto out; } - - modtime = &gfdb_db_record->gfdb_wind_change_time; - - /* handle all dentry based operations */ - if (isdentryfop (gfdb_db_record->gfdb_fop_type)) { - /*Parent GFID is always set*/ - pargfid_str = gf_strdup (uuid_utoa (gfdb_db_record->pargfid)); - if (!pargfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, - 0, LG_MSG_CREATE_FAILED, "Creating gfid string " - "failed."); - goto out; - } - - /* handle create, mknod */ - if (isdentrycreatefop (gfdb_db_record->gfdb_fop_type)) { - /*insert link*/ - ret = gf_sql_insert_link(sql_conn, - gfid_str, pargfid_str, - gfdb_db_record->file_name, - gfdb_db_record->link_consistency, - _gf_true); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_WARNING, - gfdb_db_record->ignore_errors), - 0, - LG_MSG_INSERT_FAILED, "Failed " - "inserting link in DB"); - /* Even if link creation is failed we - * continue with the creation of file record. - * This covers to cases - * 1) Lookup heal: If the file record from - * gf_file_tb is deleted but the link record - * still exist. Lookup heal will attempt a heal - * with create_wind set. The link heal will fail - * as there is already a record and if we don't - * ignore the error we will not heal the - * gf_file_tb. - * 2) Rename file in cold tier: During a rename - * of a file that is there in cold tier. We get - * an link record created in hot tier for the - * linkto file. When the file gets heated and - * moves to hot tier there will be attempt from - * ctr lookup heal to create link and file - * record and If we don't ignore the error we - * will not heal the gf_file_tb. - * */ - } - gfdb_db_record->islinkupdate = gfdb_db_record-> - link_consistency; - - /* - * Only for create/mknod insert wind time - * for the first time - * */ - ret = gf_sql_insert_write_wind_time (sql_conn, gfid_str, - modtime, gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), - 0, LG_MSG_INSERT_FAILED, - "Failed inserting wind time in DB"); - goto out; - } - goto out; + /*handle rename, link */ + else { + /*rename*/ + if (strlen(gfdb_db_record->old_file_name) != 0) { + old_pargfid_str = gf_strdup( + uuid_utoa(gfdb_db_record->old_pargfid)); + if (!old_pargfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_CREATE_FAILED, + "Creating gfid string failed."); + goto out; } - /*handle rename, link */ - else { - /*rename*/ - if (strlen (gfdb_db_record->old_file_name) != 0) { - old_pargfid_str = gf_strdup (uuid_utoa ( - gfdb_db_record->old_pargfid)); - if (!old_pargfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, - 0, LG_MSG_CREATE_FAILED, - "Creating gfid string failed."); - goto out; - } - ret = gf_sql_update_link (sql_conn, gfid_str, - pargfid_str, - gfdb_db_record->file_name, - old_pargfid_str, - gfdb_db_record->old_file_name, - gfdb_db_record-> - link_consistency, - gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), - 0, LG_MSG_UPDATE_FAILED, - "Failed updating link"); - goto out; - } - gfdb_db_record->islinkupdate = gfdb_db_record-> - link_consistency; - } - /*link*/ - else { - ret = gf_sql_insert_link (sql_conn, - gfid_str, pargfid_str, - gfdb_db_record->file_name, - gfdb_db_record-> - link_consistency, - gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), - 0, LG_MSG_INSERT_FAILED, - "Failed inserting link in DB"); - goto out; - } - gfdb_db_record->islinkupdate = gfdb_db_record-> - link_consistency; - } + ret = gf_sql_update_link( + sql_conn, gfid_str, pargfid_str, gfdb_db_record->file_name, + old_pargfid_str, gfdb_db_record->old_file_name, + gfdb_db_record->link_consistency, + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_UPDATE_FAILED, "Failed updating link"); + goto out; } - } - - /* update times only when said!*/ - if (gfdb_db_record->do_record_times) { - /*All fops update times read or write*/ - ret = gf_update_time (sql_conn, gfid_str, modtime, - gfdb_db_record->do_record_counters, - its_wind, - isreadfop (gfdb_db_record->gfdb_fop_type), - gfdb_db_record->ignore_errors); + gfdb_db_record->islinkupdate = gfdb_db_record->link_consistency; + } + /*link*/ + else { + ret = gf_sql_insert_link(sql_conn, gfid_str, pargfid_str, + gfdb_db_record->file_name, + gfdb_db_record->link_consistency, + gfdb_db_record->ignore_errors); if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), 0, - LG_MSG_UPDATE_FAILED, "Failed update wind time" - " in DB"); - goto out; + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_INSERT_FAILED, + "Failed inserting link in DB"); + goto out; } + gfdb_db_record->islinkupdate = gfdb_db_record->link_consistency; + } + } + } + + /* update times only when said!*/ + if (gfdb_db_record->do_record_times) { + /*All fops update times read or write*/ + ret = gf_update_time(sql_conn, gfid_str, modtime, + gfdb_db_record->do_record_counters, its_wind, + isreadfop(gfdb_db_record->gfdb_fop_type), + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record->ignore_errors), + 0, LG_MSG_UPDATE_FAILED, + "Failed update wind time" + " in DB"); + goto out; } + } - ret = 0; + ret = 0; out: - GF_FREE (gfid_str); - GF_FREE (pargfid_str); - GF_FREE (old_pargfid_str); - return ret; + GF_FREE(gfid_str); + GF_FREE(pargfid_str); + GF_FREE(old_pargfid_str); + return ret; } - - - int -gf_sql_insert_unwind (gf_sql_connection_t *sql_conn, - gfdb_db_record_t *gfdb_db_record) +gf_sql_insert_unwind(gf_sql_connection_t *sql_conn, + gfdb_db_record_t *gfdb_db_record) { - - int ret = -1; - gfdb_time_t *modtime = NULL; - gf_boolean_t its_wind = _gf_true;/*remains true for this function*/ - char *gfid_str = NULL; - char *pargfid_str = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfdb_db_record, out); - - gfid_str = gf_strdup (uuid_utoa(gfdb_db_record->gfid)); - if (!gfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_CREATE_FAILED, "Creating gfid string failed."); - goto out; + int ret = -1; + gfdb_time_t *modtime = NULL; + gf_boolean_t its_wind = _gf_true; /*remains true for this function*/ + char *gfid_str = NULL; + char *pargfid_str = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out); + + gfid_str = gf_strdup(uuid_utoa(gfdb_db_record->gfid)); + if (!gfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Creating gfid string failed."); + goto out; + } + + /*Only update if recording unwind is set*/ + if (gfdb_db_record->do_record_times && + gfdb_db_record->do_record_uwind_time) { + modtime = &gfdb_db_record->gfdb_unwind_change_time; + ret = gf_update_time(sql_conn, gfid_str, modtime, + gfdb_db_record->do_record_counters, (!its_wind), + isreadfop(gfdb_db_record->gfdb_fop_type), + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record->ignore_errors), + 0, LG_MSG_UPDATE_FAILED, + "Failed update unwind " + "time in DB"); + goto out; } + } - /*Only update if recording unwind is set*/ - if (gfdb_db_record->do_record_times && - gfdb_db_record->do_record_uwind_time) { - modtime = &gfdb_db_record->gfdb_unwind_change_time; - ret = gf_update_time (sql_conn, gfid_str, modtime, - gfdb_db_record->do_record_counters, - (!its_wind), - isreadfop (gfdb_db_record->gfdb_fop_type), - gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), - 0, LG_MSG_UPDATE_FAILED, "Failed update unwind " - "time in DB"); - goto out; - } + /*For link creation and changes we use link updated*/ + if (gfdb_db_record->islinkupdate && + isdentryfop(gfdb_db_record->gfdb_fop_type)) { + pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record->pargfid)); + if (!pargfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Creating pargfid_str string failed."); + goto out; } - /*For link creation and changes we use link updated*/ - if (gfdb_db_record->islinkupdate && - isdentryfop(gfdb_db_record->gfdb_fop_type)) { - - pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record->pargfid)); - if (!pargfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, - 0, LG_MSG_CREATE_FAILED, - "Creating pargfid_str string failed."); - goto out; - } - - ret = gf_sql_update_link_flags (sql_conn, gfid_str, pargfid_str, - gfdb_db_record->file_name, 0, _gf_true, - gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), - 0, LG_MSG_UPDATE_FAILED, - "Failed updating link flags in unwind"); - goto out; - } + ret = gf_sql_update_link_flags(sql_conn, gfid_str, pargfid_str, + gfdb_db_record->file_name, 0, _gf_true, + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record->ignore_errors), + 0, LG_MSG_UPDATE_FAILED, + "Failed updating link flags in unwind"); + goto out; } + } - ret = 0; + ret = 0; out: - GF_FREE (gfid_str); - GF_FREE (pargfid_str); - return ret; + GF_FREE(gfid_str); + GF_FREE(pargfid_str); + return ret; } - int -gf_sql_update_delete_wind (gf_sql_connection_t *sql_conn, - gfdb_db_record_t *gfdb_db_record) +gf_sql_update_delete_wind(gf_sql_connection_t *sql_conn, + gfdb_db_record_t *gfdb_db_record) { - int ret = -1; - char *gfid_str = NULL; - char *pargfid_str = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfdb_db_record, out); - - gfid_str = gf_strdup (uuid_utoa(gfdb_db_record->gfid)); - if (!gfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, - "Creating gfid string failed."); - goto out; - } - - pargfid_str = gf_strdup (uuid_utoa(gfdb_db_record->pargfid)); - if (!pargfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, - 0, LG_MSG_CREATE_FAILED, "Creating pargfid_str " - "string failed."); - goto out; - } - - if (gfdb_db_record->link_consistency) { - ret = gf_sql_update_link_flags (sql_conn, gfid_str, pargfid_str, - gfdb_db_record->file_name, 1, - _gf_false, - gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), - 0, LG_MSG_UPDATE_FAILED, - "Failed updating link flags in wind"); - goto out; - } + int ret = -1; + char *gfid_str = NULL; + char *pargfid_str = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out); + + gfid_str = gf_strdup(uuid_utoa(gfdb_db_record->gfid)); + if (!gfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Creating gfid string failed."); + goto out; + } + + pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record->pargfid)); + if (!pargfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Creating pargfid_str " + "string failed."); + goto out; + } + + if (gfdb_db_record->link_consistency) { + ret = gf_sql_update_link_flags(sql_conn, gfid_str, pargfid_str, + gfdb_db_record->file_name, 1, _gf_false, + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, gfdb_db_record->ignore_errors), + 0, LG_MSG_UPDATE_FAILED, + "Failed updating link flags in wind"); + goto out; } + } - ret = 0; + ret = 0; out: - GF_FREE (gfid_str); - GF_FREE (pargfid_str); - return ret; + GF_FREE(gfid_str); + GF_FREE(pargfid_str); + return ret; } int -gf_sql_delete_unwind (gf_sql_connection_t *sql_conn, - gfdb_db_record_t *gfdb_db_record) +gf_sql_delete_unwind(gf_sql_connection_t *sql_conn, + gfdb_db_record_t *gfdb_db_record) { - int ret = -1; - char *gfid_str = NULL; - char *pargfid_str = NULL; - gfdb_time_t *modtime = NULL; - - CHECK_SQL_CONN (sql_conn, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, gfdb_db_record, out); - - gfid_str = gf_strdup (uuid_utoa(gfdb_db_record->gfid)); - if (!gfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, - "Creating gfid string failed."); - goto out; + int ret = -1; + char *gfid_str = NULL; + char *pargfid_str = NULL; + gfdb_time_t *modtime = NULL; + + CHECK_SQL_CONN(sql_conn, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, gfdb_db_record, out); + + gfid_str = gf_strdup(uuid_utoa(gfdb_db_record->gfid)); + if (!gfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Creating gfid string failed."); + goto out; + } + + /*Nuke all the entries for this GFID from DB*/ + if (gfdb_db_record->gfdb_fop_path == GFDB_FOP_UNDEL_ALL) { + gf_sql_delete_all(sql_conn, gfid_str, gfdb_db_record->ignore_errors); + } + /*Remove link entries only*/ + else if (gfdb_db_record->gfdb_fop_path == GFDB_FOP_UNDEL) { + pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record->pargfid)); + if (!pargfid_str) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_CREATE_FAILED, + "Creating pargfid_str " + "string failed."); + goto out; } - /*Nuke all the entries for this GFID from DB*/ - if (gfdb_db_record->gfdb_fop_path == GFDB_FOP_UNDEL_ALL) { - gf_sql_delete_all (sql_conn, gfid_str, - gfdb_db_record->ignore_errors); + /* Special performance case: + * Updating wind time in unwind for delete. This is done here + * as in the wind path we will not know whether its the last + * link or not. For a last link there is not use to update any + * wind or unwind time!*/ + if (gfdb_db_record->do_record_times) { + /*Update the wind write times*/ + modtime = &gfdb_db_record->gfdb_wind_change_time; + ret = gf_update_time(sql_conn, gfid_str, modtime, + gfdb_db_record->do_record_counters, _gf_true, + isreadfop(gfdb_db_record->gfdb_fop_type), + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_UPDATE_FAILED, + "Failed update wind time in DB"); + goto out; + } } - /*Remove link entries only*/ - else if (gfdb_db_record->gfdb_fop_path == GFDB_FOP_UNDEL) { - - pargfid_str = gf_strdup(uuid_utoa(gfdb_db_record->pargfid)); - if (!pargfid_str) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, - 0, LG_MSG_CREATE_FAILED, "Creating pargfid_str " - "string failed."); - goto out; - } - - /* Special performance case: - * Updating wind time in unwind for delete. This is done here - * as in the wind path we will not know whether its the last - * link or not. For a last link there is not use to update any - * wind or unwind time!*/ - if (gfdb_db_record->do_record_times) { - /*Update the wind write times*/ - modtime = &gfdb_db_record->gfdb_wind_change_time; - ret = gf_update_time (sql_conn, gfid_str, modtime, - gfdb_db_record->do_record_counters, - _gf_true, - isreadfop (gfdb_db_record->gfdb_fop_type), - gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), - 0, LG_MSG_UPDATE_FAILED, - "Failed update wind time in DB"); - goto out; - } - } - modtime = &gfdb_db_record->gfdb_unwind_change_time; + modtime = &gfdb_db_record->gfdb_unwind_change_time; - ret = gf_sql_delete_link(sql_conn, gfid_str, pargfid_str, - gfdb_db_record->file_name, - gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_DELETE_FAILED, "Failed deleting link"); - goto out; - } + ret = gf_sql_delete_link(sql_conn, gfid_str, pargfid_str, + gfdb_db_record->file_name, + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_DELETE_FAILED, + "Failed deleting link"); + goto out; + } - if (gfdb_db_record->do_record_times && - gfdb_db_record->do_record_uwind_time) { - ret = gf_update_time (sql_conn, gfid_str, modtime, - gfdb_db_record->do_record_counters, - _gf_false, - isreadfop(gfdb_db_record->gfdb_fop_type), - gfdb_db_record->ignore_errors); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - _gfdb_log_level (GF_LOG_ERROR, - gfdb_db_record->ignore_errors), - 0, LG_MSG_UPDATE_FAILED, - "Failed update unwind time in DB"); - goto out; - } - } - } else { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, - 0, LG_MSG_INVALID_UPLINK, "Invalid unlink option"); + if (gfdb_db_record->do_record_times && + gfdb_db_record->do_record_uwind_time) { + ret = gf_update_time(sql_conn, gfid_str, modtime, + gfdb_db_record->do_record_counters, _gf_false, + isreadfop(gfdb_db_record->gfdb_fop_type), + gfdb_db_record->ignore_errors); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, + _gfdb_log_level(GF_LOG_ERROR, + gfdb_db_record->ignore_errors), + 0, LG_MSG_UPDATE_FAILED, + "Failed update unwind time in DB"); goto out; + } } - ret = 0; + } else { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_INVALID_UPLINK, + "Invalid unlink option"); + goto out; + } + ret = 0; out: - GF_FREE (gfid_str); - GF_FREE (pargfid_str); - return ret; + GF_FREE(gfid_str); + GF_FREE(pargfid_str); + return ret; } /****************************************************************************** @@ -1132,240 +1043,218 @@ out: * * ****************************************************************************/ int -gf_sql_query_function (sqlite3_stmt *prep_stmt, - gf_query_callback_t query_callback, - void *_query_cbk_args) +gf_sql_query_function(sqlite3_stmt *prep_stmt, + gf_query_callback_t query_callback, void *_query_cbk_args) { - int ret = -1; - gfdb_query_record_t *query_record = NULL; - char *text_column = NULL; - sqlite3 *db_conn = NULL; - uuid_t prev_gfid = {0}; - uuid_t curr_gfid = {0}; - uuid_t pgfid = {0}; - char *base_name = NULL; - gf_boolean_t is_first_record = _gf_true; - gf_boolean_t is_query_empty = _gf_true; - - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, prep_stmt, out); - GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, query_callback, out); - - db_conn = sqlite3_db_handle(prep_stmt); - - /* - * Loop to access queried rows - * Each db record will have 3 columns - * GFID, PGFID, FILE_NAME - * - * For file with multiple hard links we will get multiple query rows - * with the same GFID, but different PGID and FILE_NAME Combination - * For Example if a file with - * GFID = 00000000-0000-0000-0000-000000000006 - * has 3 hardlinks file1, file2 and file3 in 3 different folder - * with GFID's - * 00000000-0000-0000-0000-0000EFC00001, - * 00000000-0000-0000-0000-00000ABC0001 and - * 00000000-0000-0000-0000-00000ABC00CD - * Then there will be 3 records - * GFID : 00000000-0000-0000-0000-000000000006 - * PGFID : 00000000-0000-0000-0000-0000EFC00001 - * FILE_NAME : file1 - * - * GFID : 00000000-0000-0000-0000-000000000006 - * PGFID : 00000000-0000-0000-0000-00000ABC0001 - * FILE_NAME : file2 - * - * GFID : 00000000-0000-0000-0000-000000000006 - * PGFID : 00000000-0000-0000-0000-00000ABC00CD - * FILE_NAME : file3 - * - * This is retrieved and added to a single query_record - * - * query_record->gfid = 00000000-0000-0000-0000-000000000006 - * ->link_info = {00000000-0000-0000-0000-0000EFC00001, - * "file1"} - * | - * V - * link_info = {00000000-0000-0000-0000-00000ABC0001, - * "file2"} - * | - * V - * link_info = {00000000-0000-0000-0000-00000ABC0001, - * "file3", - * list} - * - * This query record is sent to the registered query_callback() - * - * */ - while ((ret = sqlite3_step (prep_stmt)) == SQLITE_ROW) { - - if (sqlite3_column_count(prep_stmt) > 0) { - - is_query_empty = _gf_false; - - /*Retrieving GFID - column index is 0*/ - text_column = (char *)sqlite3_column_text - (prep_stmt, 0); - if (!text_column) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_GET_ID_FAILED, "Failed to" - "retrieve GFID"); - goto out; - } - ret = gf_uuid_parse (text_column, curr_gfid); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PARSE_FAILED, "Failed to parse " - "GFID"); - goto out; - } - - /* - * if the previous record was not of the current gfid - * call the call_back function and send the - * query record, which will have all the link_info - * objects associated with this gfid - * - * */ - if (gf_uuid_compare (curr_gfid, prev_gfid) != 0) { - - /* If this is not the first record */ - if (!is_first_record) { - /*Call the call_back function provided*/ - ret = query_callback (query_record, - _query_cbk_args); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, - GF_LOG_ERROR, 0, - LG_MSG_QUERY_CALL_BACK_FAILED, - "Query call back " - "failed"); - goto out; - } - - } - - /*Clear the query record*/ - gfdb_query_record_free (query_record); - query_record = NULL; - query_record = gfdb_query_record_new (); - if (!query_record) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, - 0, LG_MSG_CREATE_FAILED, - "Failed to create " - "query_record"); - goto out; - } - - gf_uuid_copy(query_record->gfid, - curr_gfid); - gf_uuid_copy(prev_gfid, curr_gfid); - - } - - /* Get PGFID */ - text_column = (char *)sqlite3_column_text - (prep_stmt, 1); - if (!text_column) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_GET_ID_FAILED, "Failed to" - " retrieve GF_ID"); - goto out; - } - ret = gf_uuid_parse (text_column, pgfid); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_PARSE_FAILED, "Failed to parse " - "GF_ID"); - goto out; - } - - /* Get Base name */ - text_column = (char *)sqlite3_column_text - (prep_stmt, 2); - if (!text_column) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_GET_ID_FAILED, "Failed to" - " retrieve GF_ID"); - goto out; - } - base_name = text_column; - - - /* Add link info to the list */ - ret = gfdb_add_link_to_query_record (query_record, - pgfid, base_name); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_GET_ID_FAILED, "Failed to" - " add link info to query record"); - goto out; - } - - is_first_record = _gf_false; + int ret = -1; + gfdb_query_record_t *query_record = NULL; + char *text_column = NULL; + sqlite3 *db_conn = NULL; + uuid_t prev_gfid = {0}; + uuid_t curr_gfid = {0}; + uuid_t pgfid = {0}; + char *base_name = NULL; + gf_boolean_t is_first_record = _gf_true; + gf_boolean_t is_query_empty = _gf_true; + + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, prep_stmt, out); + GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); + + db_conn = sqlite3_db_handle(prep_stmt); + + /* + * Loop to access queried rows + * Each db record will have 3 columns + * GFID, PGFID, FILE_NAME + * + * For file with multiple hard links we will get multiple query rows + * with the same GFID, but different PGID and FILE_NAME Combination + * For Example if a file with + * GFID = 00000000-0000-0000-0000-000000000006 + * has 3 hardlinks file1, file2 and file3 in 3 different folder + * with GFID's + * 00000000-0000-0000-0000-0000EFC00001, + * 00000000-0000-0000-0000-00000ABC0001 and + * 00000000-0000-0000-0000-00000ABC00CD + * Then there will be 3 records + * GFID : 00000000-0000-0000-0000-000000000006 + * PGFID : 00000000-0000-0000-0000-0000EFC00001 + * FILE_NAME : file1 + * + * GFID : 00000000-0000-0000-0000-000000000006 + * PGFID : 00000000-0000-0000-0000-00000ABC0001 + * FILE_NAME : file2 + * + * GFID : 00000000-0000-0000-0000-000000000006 + * PGFID : 00000000-0000-0000-0000-00000ABC00CD + * FILE_NAME : file3 + * + * This is retrieved and added to a single query_record + * + * query_record->gfid = 00000000-0000-0000-0000-000000000006 + * ->link_info = {00000000-0000-0000-0000-0000EFC00001, + * "file1"} + * | + * V + * link_info = {00000000-0000-0000-0000-00000ABC0001, + * "file2"} + * | + * V + * link_info = {00000000-0000-0000-0000-00000ABC0001, + * "file3", + * list} + * + * This query record is sent to the registered query_callback() + * + * */ + while ((ret = sqlite3_step(prep_stmt)) == SQLITE_ROW) { + if (sqlite3_column_count(prep_stmt) > 0) { + is_query_empty = _gf_false; + + /*Retrieving GFID - column index is 0*/ + text_column = (char *)sqlite3_column_text(prep_stmt, 0); + if (!text_column) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_ID_FAILED, + "Failed to" + "retrieve GFID"); + goto out; + } + ret = gf_uuid_parse(text_column, curr_gfid); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PARSE_FAILED, + "Failed to parse " + "GFID"); + goto out; + } + + /* + * if the previous record was not of the current gfid + * call the call_back function and send the + * query record, which will have all the link_info + * objects associated with this gfid + * + * */ + if (gf_uuid_compare(curr_gfid, prev_gfid) != 0) { + /* If this is not the first record */ + if (!is_first_record) { + /*Call the call_back function provided*/ + ret = query_callback(query_record, _query_cbk_args); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_QUERY_CALL_BACK_FAILED, + "Query call back " + "failed"); + goto out; + } + } + /*Clear the query record*/ + gfdb_query_record_free(query_record); + query_record = NULL; + query_record = gfdb_query_record_new(); + if (!query_record) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_CREATE_FAILED, + "Failed to create " + "query_record"); + goto out; } - } + gf_uuid_copy(query_record->gfid, curr_gfid); + gf_uuid_copy(prev_gfid, curr_gfid); + } - if (ret != SQLITE_DONE) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_GET_RECORD_FAILED, "Failed to retrieve records " - "from db : %s", sqlite3_errmsg (db_conn)); - ret = -1; + /* Get PGFID */ + text_column = (char *)sqlite3_column_text(prep_stmt, 1); + if (!text_column) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_ID_FAILED, + "Failed to" + " retrieve GF_ID"); goto out; - } - + } + ret = gf_uuid_parse(text_column, pgfid); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_PARSE_FAILED, + "Failed to parse " + "GF_ID"); + goto out; + } + + /* Get Base name */ + text_column = (char *)sqlite3_column_text(prep_stmt, 2); + if (!text_column) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_ID_FAILED, + "Failed to" + " retrieve GF_ID"); + goto out; + } + base_name = text_column; + + /* Add link info to the list */ + ret = gfdb_add_link_to_query_record(query_record, pgfid, base_name); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_ID_FAILED, + "Failed to" + " add link info to query record"); + goto out; + } - if (!is_query_empty) { - /* - * Call the call_back function for the last record from the - * Database - * */ - ret = query_callback (query_record, _query_cbk_args); - if (ret) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, - LG_MSG_QUERY_CALL_BACK_FAILED, - "Query call back failed"); - goto out; - } + is_first_record = _gf_false; } + } + + if (ret != SQLITE_DONE) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_GET_RECORD_FAILED, + "Failed to retrieve records " + "from db : %s", + sqlite3_errmsg(db_conn)); + ret = -1; + goto out; + } + + if (!is_query_empty) { + /* + * Call the call_back function for the last record from the + * Database + * */ + ret = query_callback(query_record, _query_cbk_args); + if (ret) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, + LG_MSG_QUERY_CALL_BACK_FAILED, "Query call back failed"); + goto out; + } + } - ret = 0; + ret = 0; out: - gfdb_query_record_free (query_record); - query_record = NULL; - return ret; + gfdb_query_record_free(query_record); + query_record = NULL; + return ret; } - - int -gf_sql_clear_counters (gf_sql_connection_t *sql_conn) +gf_sql_clear_counters(gf_sql_connection_t *sql_conn) { - int ret = -1; - char *sql_strerror = NULL; - char *query_str = NULL; - - CHECK_SQL_CONN (sql_conn, out); - - query_str = "UPDATE " - GF_FILE_TABLE - " SET " GF_COL_READ_FREQ_CNTR " = 0 , " - GF_COL_WRITE_FREQ_CNTR " = 0 ;"; - - ret = sqlite3_exec (sql_conn->sqlite3_db_conn, query_str, NULL, NULL, - &sql_strerror); - if (ret != SQLITE_OK) { - gf_msg (GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED, - "Failed to execute: %s : %s", - query_str, sql_strerror); - sqlite3_free (sql_strerror); - ret = -1; - goto out; - } - - ret = 0; + int ret = -1; + char *sql_strerror = NULL; + char *query_str = NULL; + + CHECK_SQL_CONN(sql_conn, out); + + query_str = "UPDATE " GF_FILE_TABLE " SET " GF_COL_READ_FREQ_CNTR + " = 0 , " GF_COL_WRITE_FREQ_CNTR " = 0 ;"; + + ret = sqlite3_exec(sql_conn->sqlite3_db_conn, query_str, NULL, NULL, + &sql_strerror); + if (ret != SQLITE_OK) { + gf_msg(GFDB_STR_SQLITE3, GF_LOG_ERROR, 0, LG_MSG_EXEC_FAILED, + "Failed to execute: %s : %s", query_str, sql_strerror); + sqlite3_free(sql_strerror); + ret = -1; + goto out; + } + + ret = 0; out: - return ret; + return ret; } |