Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
cellframe-sdk
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Code
Merge requests
17
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cellframe
cellframe-sdk
Commits
16fc9846
Commit
16fc9846
authored
2 years ago
by
ruslan.laishev
💬
Browse files
Options
Downloads
Patches
Plain Diff
[*] Async GDB : maintenance commit
parent
5ffffff3
No related branches found
No related tags found
No related merge requests found
Pipeline
#15356
passed with stage
Stage: analyze
in 1 second
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
modules/global-db/dap_chain_global_db.c
+103
-91
103 additions, 91 deletions
modules/global-db/dap_chain_global_db.c
with
103 additions
and
91 deletions
modules/global-db/dap_chain_global_db.c
+
103
−
91
View file @
16fc9846
...
...
@@ -59,7 +59,7 @@ int s_db_drvmode_async , /* S
static
dap_proc_thread_t
*
s_global_db_proc_thread
;
/* Dedicated thread to process GDB Asyn requests */
dap_proc_queue_t
*
s_global_db_proc_queue
;
int
s_db_add_sync_group
(
dap_list_t
**
a_grp_list
,
dap_sync_group_item_t
*
a_item
)
...
...
@@ -239,72 +239,7 @@ static int s_check_db_version(dap_config_t *g_config)
return
res
;
}
void
s_dap_chain_global_db_request_processor
(
void
)
{
}
/**
* @brief Initializes a database by g_config structure.
* @note You should call this function before calling any other functions in this library.
* @param g_config a pointer to the configuration structure
* @return Returns 0 if successful; otherwise, <0.
*/
int
dap_chain_global_db_init
(
dap_config_t
*
g_config
)
{
int
l_rc
;
static
int
is_check_version
=
0
;
dap_proc_queue_t
*
l_queue
;
const
char
*
l_storage_path
=
dap_config_get_item_str
(
g_config
,
"resources"
,
"dap_global_db_path"
);
const
char
*
l_driver_name
=
dap_config_get_item_str_default
(
g_config
,
"resources"
,
"dap_global_db_driver"
,
"sqlite"
);
s_track_history
=
dap_config_get_item_bool_default
(
g_config
,
"resources"
,
"dap_global_db_track_history"
,
s_track_history
);
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"
,
"debug_more"
);
if
(
(
l_rc
=
dap_db_driver_init
(
l_driver_name
,
l_storage_path
,
s_db_drvmode_async
))
)
return
log_it
(
L_CRITICAL
,
"Hadn't initialized DB driver
\"
%s
\"
on path
\"
%s
\"
, code: %d"
,
l_driver_name
,
l_storage_path
,
l_rc
),
l_rc
;
if
(
!
is_check_version
){
if
(
(
l_rc
=
s_check_db_version
(
g_config
))
)
return
log_it
(
L_ERROR
,
"GlobalDB version changed, please export or remove old version!"
),
l_rc
;
is_check_version
=
true
;
}
log_it
(
L_NOTICE
,
"GlobalDB initialized"
);
/*
* Create a dedicated thread to process request to GDB
*/
if
(
!
(
s_global_db_proc_thread
=
dap_proc_thread_run_custom
())
)
{
log_it
(
L_ERROR
,
"Error create dedicated thread for GDB request processing"
);
log_it
(
L_ERROR
,
"Async DB processing is switched OFF"
);
return
-
EIO
;
}
if
(
!
(
l_queue
=
dap_proc_queue_create_ext
(
s_global_db_proc_thread
))
)
{
log_it
(
L_ERROR
,
"Error create queue for GDB request processing"
);
log_it
(
L_ERROR
,
"Async DB processing is switched OFF"
);
return
-
EIO
;
}
l_queue
->
esocket
=
dap_events_socket_create_type_queue_ptr_unsafe
(
NULL
,
s_dap_chain_global_db_request_processor
);
return
l_rc
;
}
static
void
s_clear_sync_grp
(
void
*
a_elm
)
static
inline
void
s_clear_sync_grp
(
void
*
a_elm
)
{
dap_sync_group_item_t
*
l_item
=
(
dap_sync_group_item_t
*
)
a_elm
;
DAP_DELETE
(
l_item
->
group_mask
);
...
...
@@ -331,9 +266,7 @@ void dap_chain_global_db_deinit(void)
*/
int
dap_chain_global_db_flush
(
void
)
{
int
res
=
dap_db_driver_flush
();
return
res
;
return
dap_db_driver_flush
();
}
/**
...
...
@@ -517,11 +450,11 @@ int l_res = 0;
*/
uint64_t
global_db_gr_del_get_timestamp
(
const
char
*
a_group
,
const
char
*
a_key
)
{
uint64_t
l_timestamp
=
0
;
dap_store_obj_t
store_data
=
{
0
};
char
l_group
[
DAP_DB
$
SZ_MAXGROUPNAME
];
size_t
l_count_out
=
0
;
dap_store_obj_t
*
l_obj
;
uint64_t
l_timestamp
=
0
;
dap_store_obj_t
store_data
=
{
0
};
char
l_group
[
DAP_DB
$
SZ_MAXGROUPNAME
];
size_t
l_count_out
=
0
;
dap_store_obj_t
*
l_obj
;
if
(
!
a_key
)
return
l_timestamp
;
...
...
@@ -593,15 +526,15 @@ dap_store_obj_t* dap_chain_global_db_cond_load(const char *a_group, uint64_t a_f
* @param a_records_count_out[out] a number of data
* @return If successful, a pointer to data; otherwise NULL.
*/
dap_global_db_obj_t
*
dap_chain_global_db_gr_load
(
const
char
*
a_group
,
size_t
*
a_records_count_out
)
dap_global_db_obj_t
*
dap_chain_global_db_gr_load
(
const
char
*
a_group
,
size_t
*
a_records_count_out
)
{
size_t
l_count
=
0
;
dap_store_obj_t
*
l_store_obj
=
dap_chain_global_db_driver_read
(
a_group
,
NULL
,
&
l_count
);
if
(
!
l_store_obj
)
return
NULL
;
dap_global_db_obj_t
*
l_data
=
DAP_NEW_Z_SIZE
(
dap_global_db_obj_t
,
l_count
*
sizeof
(
dap_global_db_obj_t
));
dap_global_db_obj_t
*
l_data
=
DAP_NEW_Z_SIZE
(
dap_global_db_obj_t
,
l_count
*
sizeof
(
dap_global_db_obj_t
));
if
(
!
l_data
)
{
dap_store_obj_free
(
l_store_obj
,
l_count
);
return
NULL
;
...
...
@@ -618,9 +551,12 @@ dap_global_db_obj_t* dap_chain_global_db_gr_load(const char *a_group, size_t *a_
};
l_valid
++
;
}
dap_store_obj_free
(
l_store_obj
,
l_count
);
if
(
a_records_count_out
)
*
a_records_count_out
=
l_valid
;
return
l_data
;
}
...
...
@@ -642,6 +578,7 @@ void dap_global_db_change_notify(dap_store_obj_t *a_store_data)
{
dap_store_obj_t
*
l_obj
=
a_store_data
;
dap_list_t
*
it
=
s_sync_group_items
;
while
(
it
)
{
for
(;
it
;
it
=
it
->
next
)
{
dap_sync_group_item_t
*
l_sync_group_item
=
(
dap_sync_group_item_t
*
)
it
->
data
;
...
...
@@ -711,14 +648,12 @@ bool dap_chain_global_db_gr_set_ext(const char *a_key, const void *a_value, size
*/
bool
dap_chain_global_db_gr_set
(
const
char
*
a_key
,
const
void
*
a_value
,
size_t
a_value_len
,
const
char
*
a_group
)
{
uint8_t
l_flags
=
RECORD_COMMON
;
return
dap_chain_global_db_gr_set_ext
(
a_key
,
a_value
,
a_value_len
,
a_group
,
l_flags
);
return
dap_chain_global_db_gr_set_ext
(
a_key
,
a_value
,
a_value_len
,
a_group
,
RECORD_COMMON
);
}
bool
dap_chain_global_db_gr_pinned_set
(
const
char
*
a_key
,
const
void
*
a_value
,
size_t
a_value_len
,
const
char
*
a_group
)
{
uint8_t
l_flags
=
RECORD_PINNED
;
return
dap_chain_global_db_gr_set_ext
(
a_key
,
a_value
,
a_value_len
,
a_group
,
l_flags
);
return
dap_chain_global_db_gr_set_ext
(
a_key
,
a_value
,
a_value_len
,
a_group
,
RECORD_PINNED
);
}
/**
...
...
@@ -745,10 +680,8 @@ bool dap_chain_global_db_gr_del(const char *a_key, const char *a_group)
store_data
.
key
=
a_key
;
store_data
.
group
=
(
char
*
)
a_group
;
int
l_res
=
dap_chain_global_db_driver_delete
(
&
store_data
,
1
);
if
(
a_key
)
{
if
(
l_res
>=
0
)
{
// add to Del group
...
...
@@ -760,6 +693,7 @@ bool dap_chain_global_db_gr_del(const char *a_key, const char *a_group)
dap_global_db_change_notify
(
&
store_data
);
}
}
return
!
l_res
;
}
...
...
@@ -777,10 +711,8 @@ dap_store_obj_t *l_store_obj;
if
(
!
a_objs_count
)
return
true
;
int
l_res
=
dap_chain_global_db_driver_apply
(
a_store_data
,
a_objs_count
);
l_store_obj
=
(
dap_store_obj_t
*
)
a_store_data
;
int
l_res_del
=
0
;
...
...
@@ -854,7 +786,7 @@ char* dap_chain_global_db_hash(const uint8_t *data, size_t data_size)
int
dap_global_db_req_enqueue
(
int
dap_global_db_req_enqueue
(
int
a_req_type
,
const
char
*
a_group
,
const
char
*
a_key
,
...
...
@@ -864,8 +796,8 @@ int dap_global_db_req_enqueue (
void
*
a_cb_arg
)
{
dap_grobal_db_req_t
*
l_db_req
;
int
l_rc
;
dap_grobal_db_req_t
*
l_db_req
;
dap_proc_queue_t
*
l_que
;
dap_worker_t
*
l_wrk
;
dap_proc_thread_t
*
l_proc_thd
;
...
...
@@ -887,10 +819,20 @@ dap_events_socket_t *l_es;
l_wrk
=
l_que
->
esocket
->
worker
;
l_proc_thd
=
l_que
->
esocket
->
proc_thread
;
if
(
!
l_wrk
&&
!
l_proc_thd
)
return
log_it
(
L_ERROR
,
"Both <worker> or <proc_thread> contexts are NULL"
),
-
EINVAL
;
if
(
l_wrk
&&
l_proc_thd
)
return
log_it
(
L_ERROR
,
"Both <worker> or <proc_thread> contexts are NOT NULL"
),
-
EINVAL
;
/* So, at this point we should decide a what <event socket> context will be used */
l_es
=
l_wrk
?
l_wrk
->
esockets
:
l_proc_thd
->
esockets
[
0
];
if
(
!
(
l_db_req
=
DAP_NEW_Z
(
dap_grobal_db_req_t
))
)
/* Allocate memory for new DB Request context */
return
log_it
(
L_ERROR
,
"Cannot allocate memory for DB Request, errno=%d"
,
errno
),
-
errno
;
l_db_req
->
req
=
a_req_type
;
/* Fill by inputs data ... */
/* Fill by data DB Request context - is supposed to be used at executor end */
l_db_req
->
req
=
a_req_type
;
l_db_req
->
cb_rtn
=
a_cb_rtn
;
l_db_req
->
cb_arg
=
a_cb_arg
;
l_db_req
->
es
=
l_es
;
...
...
@@ -900,7 +842,13 @@ dap_events_socket_t *l_es;
l_db_req
->
value
=
(
void
*
)
a_data
;
l_db_req
->
value_len
=
a_data_size
;
if
(
(
l_rc
=
dap_events_socket_queue_ptr_send_to_input
(
l_es
,
l_db_req
))
)
/* Enqueue DB Request to processor */
/*
dap_events_socket_queue_ptr_send_to_input( l_worker->queue_callback_gdb_input, ...)
Либо
dap_events_socket_queue_ptr_send_to_input( l_thread->queue_callback_gdb_input, ...)
*/
if
(
(
l_rc
=
dap_events_socket_queue_ptr_send_to_input
(
l_es
->
callbacks
.,
l_db_req
))
)
/* Enqueue DB Request to processor */
{
DAP_DELETE
(
l_db_req
);
log_it
(
L_ERROR
,
"Wasn't send pointer to queue: code %d"
,
l_rc
);
...
...
@@ -908,6 +856,70 @@ dap_events_socket_t *l_es;
a_req_type
,
a_group
,
a_key
,
a_data
,
a_data_size
);
}
return
l_rc
;
}
static
void
s_dap_chain_global_db_request_processor
(
dap_events_socket_t
*
a_es
,
void
*
a_arg
)
{
}
/**
* @brief Initializes a database by g_config structure.
* @note You should call this function before calling any other functions in this library.
* @param g_config a pointer to the configuration structure
* @return Returns 0 if successful; otherwise, <0.
*/
int
dap_chain_global_db_init
(
dap_config_t
*
g_config
)
{
int
l_rc
;
static
int
is_check_version
=
0
;
const
char
*
l_storage_path
=
dap_config_get_item_str
(
g_config
,
"resources"
,
"dap_global_db_path"
);
const
char
*
l_driver_name
=
dap_config_get_item_str_default
(
g_config
,
"resources"
,
"dap_global_db_driver"
,
"sqlite"
);
s_track_history
=
dap_config_get_item_bool_default
(
g_config
,
"resources"
,
"dap_global_db_track_history"
,
s_track_history
);
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"
,
"debug_more"
);
if
(
(
l_rc
=
dap_db_driver_init
(
l_driver_name
,
l_storage_path
,
s_db_drvmode_async
))
)
return
log_it
(
L_CRITICAL
,
"Hadn't initialized DB driver
\"
%s
\"
on path
\"
%s
\"
, code: %d"
,
l_driver_name
,
l_storage_path
,
l_rc
),
l_rc
;
if
(
!
is_check_version
){
if
(
(
l_rc
=
s_check_db_version
(
g_config
))
)
return
log_it
(
L_ERROR
,
"GlobalDB version changed, please export or remove old version!"
),
l_rc
;
is_check_version
=
true
;
}
log_it
(
L_NOTICE
,
"GlobalDB initialized"
);
/*
* Create a dedicated thread to process request to GDB
*/
if
(
!
(
s_global_db_proc_thread
=
dap_proc_thread_run_custom
())
)
{
log_it
(
L_ERROR
,
"Error create dedicated thread for GDB request processing"
);
log_it
(
L_ERROR
,
"Async DB processing is switched OFF"
);
return
-
EIO
;
}
if
(
!
(
s_global_db_proc_queue
=
dap_proc_queue_create_ext
(
s_global_db_proc_thread
))
)
{
log_it
(
L_ERROR
,
"Error create queue for GDB request processing"
);
log_it
(
L_ERROR
,
"Async DB processing is switched OFF"
);
return
-
EIO
;
}
s_global_db_proc_queue
->
esocket
=
dap_events_socket_create_type_queue_ptr_unsafe
(
NULL
,
s_dap_chain_global_db_request_processor
);
return
l_rc
;
}
This diff is collapsed.
Click to expand it.
ruslan.laishev
💬
@ruslan.laishev
mentioned in commit
e7e5f5b4
·
2 years ago
mentioned in commit
e7e5f5b4
mentioned in commit e7e5f5b45ada9cde468c129d6a4de7eb15be54ea
Toggle commit list
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment