From 505e12b0e2ae1918ca53c58cd74802c19edd5818 Mon Sep 17 00:00:00 2001
From: "Ruslan (The BadAss SysMan) Laishev" <ruslan.laishev@demlabs.net>
Date: Tue, 15 Mar 2022 13:55:02 +0300
Subject: [PATCH] A small refactoring to reduce diagnostic output. Added new
 configuration option in the section "resources":
 dap_global_db_track_history=true|false (default is false)

dap_common.h:
Added new macro debug_if(cond, log_level, format, ...) is supposed to be used instead of
giant construction like:
if ( debug_flag )
 log_it(L_DEBUG, "bla-bla-bla");
---
 dap-sdk/core/include/dap_common.h             |  6 +-
 modules/global-db/dap_chain_global_db.c       | 57 +++++++++++--------
 .../global-db/dap_chain_global_db_driver.c    | 27 ++++-----
 .../dap_chain_global_db_driver_cdb.c          |  7 +--
 .../dap_chain_global_db_driver_sqlite.c       |  3 +-
 .../include/dap_chain_global_db_driver.h      |  2 +-
 .../include/dap_chain_global_db_driver_cdb.h  |  2 +-
 .../dap_chain_global_db_driver_sqlite.h       |  2 +-
 8 files changed, 57 insertions(+), 49 deletions(-)

diff --git a/dap-sdk/core/include/dap_common.h b/dap-sdk/core/include/dap_common.h
index 7e4f3c69e8..6dcdcd59b2 100755
--- a/dap-sdk/core/include/dap_common.h
+++ b/dap-sdk/core/include/dap_common.h
@@ -280,7 +280,7 @@ typedef int dap_spinlock_t;
  * @brief The log_level enum
  */
 
-typedef enum dap_log_level { 
+typedef enum dap_log_level {
 
   L_DEBUG     = 0,
   L_INFO      = 1,
@@ -289,7 +289,7 @@ typedef enum dap_log_level {
   L_DAP       = 4,
   L_WARNING   = 5,
   L_ATT       = 6,
-  L_ERROR     = 7, 
+  L_ERROR     = 7,
   L_CRITICAL  = 8,
   L_TOTAL,
 
@@ -454,6 +454,8 @@ char *dap_log_get_item(time_t a_start_time, int a_limit);
 
 DAP_PRINTF_ATTR(3, 4) void _log_it( const char * log_tag, enum dap_log_level, const char * format, ... );
 #define log_it( _log_level, ...) _log_it( LOG_TAG, _log_level, ##__VA_ARGS__)
+#define debug_if( flg, lvl, ...) _log_it( ((flg) ? LOG_TAG : NULL), (lvl), ##__VA_ARGS__)
+
 
 const char * log_error(void);
 void dap_log_level_set(enum dap_log_level ll);
diff --git a/modules/global-db/dap_chain_global_db.c b/modules/global-db/dap_chain_global_db.c
index e874bb9723..1f630e4409 100644
--- a/modules/global-db/dap_chain_global_db.c
+++ b/modules/global-db/dap_chain_global_db.c
@@ -76,9 +76,12 @@ typedef struct sync_group_item
 // Tacked group callbacks
 static sync_group_item_t *s_sync_group_items = NULL;
 static sync_group_item_t *s_sync_group_extra_items = NULL;
-static bool s_track_history = false;
-static bool s_db_drvmode_async = false;
 
+static int s_track_history = 0;
+
+int     s_db_drvmode_async ,                                                /* Set a kind of processing requests to DB:
+                                                                            <> 0 - Async mode should be used */
+        s_dap_global_db_debug_more;                                         /* Enable extensible debug output */
 
 /**
  * @brief Adds a group name for synchronization.
@@ -153,16 +156,16 @@ dap_list_t *dap_chain_db_get_sync_extra_groups()
  * @param obj a pointer to the structure
  * @return (none)
  */
-void dap_chain_global_db_obj_clean(dap_global_db_obj_t *obj)
+void dap_chain_global_db_obj_clean(dap_global_db_obj_t *a_obj)
 {
-    if(!obj)
+    if(!a_obj)
         return;
 
-    DAP_DELETE(obj->key);
-    DAP_DELETE(obj->value);
+    DAP_DELETE(a_obj->key);
+    DAP_DELETE(a_obj->value);
 
-    obj->key = NULL;
-    obj->value = NULL;
+    a_obj->key = NULL;
+    a_obj->value = NULL;
 }
 
 /**
@@ -170,10 +173,10 @@ void dap_chain_global_db_obj_clean(dap_global_db_obj_t *obj)
  * @param obj a pointer to the object
  * @return (none)
  */
-void dap_chain_global_db_obj_delete(dap_global_db_obj_t *obj)
+void dap_chain_global_db_obj_delete(dap_global_db_obj_t *a_obj)
 {
-    dap_chain_global_db_obj_clean(obj);
-    DAP_DELETE(obj);
+    dap_chain_global_db_obj_clean(a_obj);
+    DAP_DELETE(a_obj);
 }
 
 /**
@@ -213,14 +216,18 @@ int dap_chain_global_db_init(dap_config_t * g_config)
     s_db_drvmode_async = dap_config_get_item_bool(g_config, "resources", "dap_global_db_drvmode_async");
     log_it(L_NOTICE,"DB Driver Async mode: %s", s_db_drvmode_async ? "ON": "OFF");
 
+    s_dap_global_db_debug_more = dap_config_get_item_bool(g_config, "resources", "dap_global_db_drvmode_async");
+
+    //debug_if(s_dap_global_db_debug_more, L_DEBUG, "Just a test for %d", 135);
+
     lock();
-    int res = dap_db_driver_init(l_driver_name, l_storage_path, s_db_drvmode_async);
+    int res = dap_db_driver_init(l_driver_name, l_storage_path);
     unlock();
 
     if( res != 0 )
         log_it(L_CRITICAL, "Hadn't initialized db driver \"%s\" on path \"%s\"", l_driver_name, l_storage_path);
     else
-        log_it(L_NOTICE,"GlobalDB initialized");
+        log_it(L_NOTICE, "GlobalDB initialized");
 
     return res;
 }
@@ -232,35 +239,39 @@ int dap_chain_global_db_init(dap_config_t * g_config)
  */
 void dap_chain_global_db_deinit(void)
 {
+sync_group_item_t *l_item = NULL, *l_item_tmp = NULL,
+        *l_add_item = NULL, *l_add_item_tmp = NULL;
+
     lock();
     dap_db_driver_deinit();
-    //dap_db_deinit();
     unlock();
-    sync_group_item_t * l_item = NULL, *l_item_tmp = NULL;
+
     HASH_ITER(hh, s_sync_group_items, l_item, l_item_tmp)
     {
         DAP_DELETE(l_item->group_name_for_history);
         DAP_DELETE(l_item);
     }
-    sync_group_item_t * l_add_item = NULL, *l_add_item_tmp = NULL;
+
     HASH_ITER(hh, s_sync_group_extra_items, l_add_item, l_add_item_tmp)
     {
         DAP_DELETE(l_add_item->group_mask);
         DAP_DELETE(l_add_item->group_name_for_history);
         DAP_DELETE(l_add_item);
     }
-    s_sync_group_items = NULL;
 
+    s_sync_group_items = NULL;
 }
 
 /**
  * @brief Flushes a database cahce to disk.
  * @return 0
  */
-int dap_chain_global_db_flush(void){
+int dap_chain_global_db_flush(void)
+{
     lock();
     int res = dap_db_driver_flush();
     unlock();
+
     return res;
 }
 
@@ -303,11 +314,11 @@ dap_store_obj_t* dap_chain_global_db_obj_gr_get(const char *a_key, size_t *a_dat
 
 /**
  * @brief Gets an object value from database by a_key and a_group.
- * 
+ *
  * @param a_key an object key string
  * @param a_data_len_out a length of values that were gotten
  * @param a_group a group name string
- * @return If successful, returns a pointer to the object value. 
+ * @return If successful, returns a pointer to the object value.
  */
 uint8_t * dap_chain_global_db_gr_get(const char *a_key, size_t *a_data_len_out, const char *a_group)
 {
@@ -346,7 +357,7 @@ uint8_t * dap_chain_global_db_get(const char *a_key, size_t *a_data_len_out)
  * @param a_timestamp an object time stamp
  * @return True if successful, false otherwise.
  */
-static bool global_db_gr_del_add(const char *a_key, const char *a_group, time_t a_timestamp)
+static int global_db_gr_del_add(const char *a_key, const char *a_group, time_t a_timestamp)
 {
 dap_store_obj_t store_data = {0};
 char	l_group[DAP_DB_K_MAXGRPLEN];
@@ -372,7 +383,7 @@ int l_res = 0;
  * @param a_group a group name string, for example "kelvin-testnet.nodes"
  * @return If successful, returns true; otherwise, false.
  */
-static bool global_db_gr_del_del(const char *a_key, const char *a_group)
+static int global_db_gr_del_del(const char *a_key, const char *a_group)
 {
 dap_store_obj_t store_data = {0};
 char	l_group[DAP_DB_K_MAXGRPLEN];
@@ -386,7 +397,7 @@ int	l_res = 0;
     store_data.group = l_group;
 
     lock();
-    if(dap_chain_global_db_driver_is(store_data.group, store_data.key))
+    if ( dap_chain_global_db_driver_is(store_data.group, store_data.key) )
         l_res = dap_chain_global_db_driver_delete(&store_data, 1);
     unlock();
 
diff --git a/modules/global-db/dap_chain_global_db_driver.c b/modules/global-db/dap_chain_global_db_driver.c
index d3157eee24..8182bb9ebf 100644
--- a/modules/global-db/dap_chain_global_db_driver.c
+++ b/modules/global-db/dap_chain_global_db_driver.c
@@ -24,6 +24,8 @@
  *  MODIFICATION HISTORY:
  *
  *      24-FEB-2022 RRL Added Async I/O functionality for DB request processing
+ *
+ *      15-MAR-2022 RRL Some cosmetic changes to reduce a diagnostic output.
  */
 
 #include <stddef.h>
@@ -58,8 +60,9 @@ static char s_used_driver [32];                                             /* N
 static dap_db_driver_callbacks_t s_drv_callback;                            /* A set of interface routines for the selected
                                                                             DB Driver at startup time */
 
-static int s_db_drvmode_async = 0;                                          /* Set a kind of processing requests to DB:
+extern  int s_db_drvmode_async ,                                            /* Set a kind of processing requests to DB:
                                                                             <> 0 - Async mode should be used */
+        s_dap_global_db_debug_more;                                         /* Enable extensible debug output */
 
 static pthread_mutex_t s_db_reqs_list_lock = PTHREAD_MUTEX_INITIALIZER;     /* Lock to coordinate access to the <s_db_reqs_queue> */
 static dap_slist_t s_db_reqs_list = {0};                                    /* A queue of request to DB - maintained in */
@@ -71,11 +74,9 @@ static dap_slist_t s_db_reqs_list = {0};                                    /* A
  * @param driver_name a string determining a type of database driver:
  * "сdb", "sqlite" ("sqlite3") or "pgsql"
  * @param a_filename_db a path to a database file
- * @param db_drvmode_async a flag to switch DB Engine to "Async"  mode
  * @return Returns 0, if successful; otherwise <0.
  */
-int dap_db_driver_init(const char *a_driver_name, const char *a_filename_db,
-               bool db_drvmode_async)
+int dap_db_driver_init(const char *a_driver_name, const char *a_filename_db)
 {
 int l_ret = -1;
 
@@ -85,7 +86,7 @@ int l_ret = -1;
     // Fill callbacks with zeros
     memset(&s_drv_callback, 0, sizeof(dap_db_driver_callbacks_t));
 
-    if ( (s_db_drvmode_async = db_drvmode_async) )                          /* Set a kind of processing requests to DB: <> 0 - Async mode should be used */
+    if ( s_db_drvmode_async )                                               /* Set a kind of processing requests to DB: <> 0 - Async mode should be used */
     {
         s_db_reqs_list.head = s_db_reqs_list.tail = NULL;
         s_db_reqs_list.nr = 0;
@@ -104,9 +105,9 @@ int l_ret = -1;
     if(!dap_strcmp(s_used_driver, "ldb"))
         l_ret = -1;
     else if(!dap_strcmp(s_used_driver, "sqlite") || !dap_strcmp(s_used_driver, "sqlite3") )
-        l_ret = dap_db_driver_sqlite_init(l_db_path_ext, &s_drv_callback, db_drvmode_async);
+        l_ret = dap_db_driver_sqlite_init(l_db_path_ext, &s_drv_callback);
     else if(!dap_strcmp(s_used_driver, "cdb"))
-        l_ret = dap_db_driver_cdb_init(l_db_path_ext, &s_drv_callback, db_drvmode_async);
+        l_ret = dap_db_driver_cdb_init(l_db_path_ext, &s_drv_callback);
 
 #ifdef DAP_CHAIN_GDB_ENGINE_MDBX
     else if(!dap_strcmp(s_used_driver, "mdbx"))
@@ -131,12 +132,12 @@ void dap_db_driver_deinit(void)
 {
     log_it(L_NOTICE, "DeInit for %s ...", s_used_driver);
 
-    if ( s_db_drvmode_async )                   /* Let's finishing outstanding DB request ... */
+    if ( s_db_drvmode_async )                                               /* Let's finishing outstanding DB request ... */
     {
         for ( int i = 7; i-- && s_db_reqs_list.nr; )
         {
             log_it(L_WARNING, "Let's finished outstanding DB requests (%d) ... ",  s_db_reqs_list.nr);
-            for ( int j = 3; (j = sleep(j)); );   /* Hibernate for 3 seconds ... */
+            for ( int j = 3; (j = sleep(j)); );                             /* Hibernate for 3 seconds ... */
         }
 
         log_it(L_INFO, "Number of outstanding DB requests: %d",  s_db_reqs_list.nr);
@@ -254,7 +255,7 @@ dap_store_obj_t *l_store_obj_cur;
     if(!a_store_obj || !a_store_count)
         return -1;
 
-    log_it(L_DEBUG, "[%p] Process DB Request ...", a_store_obj);
+    debug_if(s_dap_global_db_debug_more,  L_DEBUG, "[%p] Process DB Request ...", a_store_obj);
 
     l_store_obj_cur = a_store_obj;                                          /* We have to  use a power of the address's incremental arithmetic */
     l_ret = 0;                                                              /* Preset return code to OK */
@@ -275,7 +276,7 @@ dap_store_obj_t *l_store_obj_cur;
     if(a_store_count > 1 && s_drv_callback.transaction_end)
         s_drv_callback.transaction_end();
 
-    log_it(L_DEBUG, "[%p] Finished DB Request (code %d)", a_store_obj, l_ret);
+    debug_if(s_dap_global_db_debug_more, L_DEBUG, "[%p] Finished DB Request (code %d)", a_store_obj, l_ret);
     return l_ret;
 }
 
@@ -287,7 +288,7 @@ dap_store_obj_t *l_store_obj_cur;
 dap_worker_t        *l_dap_worker;
 size_t l_store_obj_cnt;
 
-    log_it(L_DEBUG, "Entering, %d entries in the queue ...",  s_db_reqs_list.nr);
+    debug_if(s_dap_global_db_debug_more, L_DEBUG, "Entering, %d entries in the queue ...",  s_db_reqs_list.nr);
 
     assert ( !pthread_mutex_lock(&s_db_reqs_list_lock) );                   /* Get exclusive access to the request list */
 
@@ -368,7 +369,7 @@ dap_worker_t        *l_dap_worker;
         else l_ret = dap_proc_queue_add_callback(l_dap_worker, s_dap_driver_req_exec, NULL);
         }
 
-    log_it(L_DEBUG, "[%p] DB Request has been enqueued (code %d)", l_store_obj_cur, l_ret);
+    debug_if(s_dap_global_db_debug_more, L_DEBUG, "[%p] DB Request has been enqueued (code %d)", l_store_obj_cur, l_ret);
 
     return  l_ret;
 }
diff --git a/modules/global-db/dap_chain_global_db_driver_cdb.c b/modules/global-db/dap_chain_global_db_driver_cdb.c
index 0aa6bd3506..0ce7d72601 100644
--- a/modules/global-db/dap_chain_global_db_driver_cdb.c
+++ b/modules/global-db/dap_chain_global_db_driver_cdb.c
@@ -67,8 +67,6 @@ static pcdb_instance s_cdb = NULL;
 static pthread_mutex_t cdb_mutex = PTHREAD_MUTEX_INITIALIZER;
 /** A read-write lock for working with a CDB instanse. */
 static pthread_rwlock_t cdb_rwlock = PTHREAD_RWLOCK_INITIALIZER;
-/** Mode of request processing */
-static bool s_db_drvmode_async = false;
 
 /**
  * @brief Serialize key and val to a item
@@ -243,8 +241,7 @@ ERR:
  * @param a_db_drvmode_async
  * @return 0 if success, -1 if сouldn't open db directory, -2 if dap_cdb_init_group() returns NULL.
  */
-int dap_db_driver_cdb_init(const char *a_cdb_path, dap_db_driver_callbacks_t *a_drv_callback,
-               bool a_db_drvmode_async)
+int dap_db_driver_cdb_init(const char *a_cdb_path, dap_db_driver_callbacks_t *a_drv_callback)
 {
     s_cdb_path = dap_strdup(a_cdb_path);
     if(s_cdb_path[strlen(s_cdb_path)] == '/') {
@@ -288,8 +285,6 @@ int dap_db_driver_cdb_init(const char *a_cdb_path, dap_db_driver_callbacks_t *a_
         }
     }
 
-    s_db_drvmode_async = a_db_drvmode_async;	/* DB Driver mode: Async/Sync */
-
     a_drv_callback->read_last_store_obj = dap_db_driver_cdb_read_last_store_obj;
     a_drv_callback->apply_store_obj     = dap_db_driver_cdb_apply_store_obj;
     a_drv_callback->read_store_obj      = dap_db_driver_cdb_read_store_obj;
diff --git a/modules/global-db/dap_chain_global_db_driver_sqlite.c b/modules/global-db/dap_chain_global_db_driver_sqlite.c
index 1975f4dea5..a0ab013e02 100644
--- a/modules/global-db/dap_chain_global_db_driver_sqlite.c
+++ b/modules/global-db/dap_chain_global_db_driver_sqlite.c
@@ -126,8 +126,7 @@ static void s_sqlite_free_connection(sqlite3 *a_conn)
  * @param a_drv_callback a pointer to a structure of callback functions
  * @return If successful returns 0, else a code < 0.
  */
-int dap_db_driver_sqlite_init(const char *a_filename_db, dap_db_driver_callbacks_t *a_drv_callback,
-                  bool db_drvmode_async)
+int dap_db_driver_sqlite_init(const char *a_filename_db, dap_db_driver_callbacks_t *a_drv_callback)
 {
     int l_ret = -1;
 
diff --git a/modules/global-db/include/dap_chain_global_db_driver.h b/modules/global-db/include/dap_chain_global_db_driver.h
index 443ca4aced..e6f9451b98 100644
--- a/modules/global-db/include/dap_chain_global_db_driver.h
+++ b/modules/global-db/include/dap_chain_global_db_driver.h
@@ -83,7 +83,7 @@ typedef struct dap_db_driver_callbacks {
 } dap_db_driver_callbacks_t;
 
 
-int dap_db_driver_init(const char *driver_name, const char *a_filename_db, bool a_db_drvmode_async);
+int dap_db_driver_init(const char *driver_name, const char *a_filename_db);
 void dap_db_driver_deinit(void);
 
 dap_store_obj_t* dap_store_obj_copy(dap_store_obj_t *a_store_obj, size_t a_store_count);
diff --git a/modules/global-db/include/dap_chain_global_db_driver_cdb.h b/modules/global-db/include/dap_chain_global_db_driver_cdb.h
index 891ebbcf0f..948d0ada5f 100644
--- a/modules/global-db/include/dap_chain_global_db_driver_cdb.h
+++ b/modules/global-db/include/dap_chain_global_db_driver_cdb.h
@@ -38,7 +38,7 @@ typedef struct _cdb_record {
     char *val;
 } cdb_record, *pcdb_record;
 
-int dap_db_driver_cdb_init(const char *, dap_db_driver_callbacks_t *, bool);
+int dap_db_driver_cdb_init(const char *, dap_db_driver_callbacks_t *);
 int dap_db_driver_cdb_deinit();
 int dap_db_driver_cdb_flush(void);
 
diff --git a/modules/global-db/include/dap_chain_global_db_driver_sqlite.h b/modules/global-db/include/dap_chain_global_db_driver_sqlite.h
index bc3679adbe..aa5e50219b 100644
--- a/modules/global-db/include/dap_chain_global_db_driver_sqlite.h
+++ b/modules/global-db/include/dap_chain_global_db_driver_sqlite.h
@@ -29,7 +29,7 @@
 
 #define DAP_SQLITE_POOL_COUNT                   16
 
-int dap_db_driver_sqlite_init(const char *a_filename_db, dap_db_driver_callbacks_t *a_drv_callback, bool db_drvmode_async);
+int dap_db_driver_sqlite_init(const char *a_filename_db, dap_db_driver_callbacks_t *a_drv_callback);
 int dap_db_driver_sqlite_deinit(void);
 
 sqlite3* dap_db_driver_sqlite_open(const char *a_filename_utf8, int a_flags, char **error_message);
-- 
GitLab