From f0fff135e4020e462edb5dbb3934e2547ff82fb4 Mon Sep 17 00:00:00 2001 From: Olzhas <oljas.jarasbaev@demlabs.net> Date: Thu, 31 Oct 2024 17:29:06 +0700 Subject: [PATCH] [+] delay var --- .../consensus/esbocs/dap_chain_cs_esbocs.c | 25 +++++++++++++++---- .../esbocs/include/dap_chain_cs_esbocs.h | 2 ++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index 653f59ec2e..17a5122058 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -1090,6 +1090,7 @@ static bool s_session_round_new(void *a_arg) s_session_round_clear(a_session); a_session->cur_round.id++; a_session->cur_round.sync_attempt++; + a_session->cur_round.round_start_ts = dap_time_now(); a_session->state = DAP_CHAIN_ESBOCS_SESSION_STATE_WAIT_START; a_session->ts_round_sync_start = 0; a_session->ts_stage_entry = 0; @@ -1139,11 +1140,24 @@ static bool s_session_round_new(void *a_arg) } if (!a_session->cur_round.sync_sent) { - uint16_t l_sync_send_delay = a_session->sync_failed ? - s_get_round_skip_timeout(a_session) : - PVT(a_session->esbocs)->new_round_delay; - if (l_round_already_started) - l_sync_send_delay = 0; + uint16_t l_sync_send_delay = 0; + + if (!l_round_already_started && a_session->sync_failed) { + l_sync_send_delay = s_get_round_skip_timeout(a_session); + } else if (!l_round_already_started) { + long long l_time_delta = a_session->esbocs->last_accepted_block_timestamp - a_session->cur_round.round_start_ts; + log_it(L_DEBUG, "Round continue from last accepter block = %ld", l_time_delta); + if (l_time_delta >= 0 && l_time_delta < PVT(a_session->esbocs)->new_round_delay) { + l_sync_send_delay = PVT(a_session->esbocs)->new_round_delay - *(uint16_t*)l_time_delta; + } else if (l_time_delta < 0 && l_time_delta > -PVT(a_session->esbocs)->new_round_delay){ + l_time_delta = dap_time_now() - a_session->cur_round.round_start_ts; + log_it(L_DEBUG, "Round continue for %ld", l_time_delta); + if (l_time_delta < PVT(a_session->esbocs)->new_round_delay) { + l_sync_send_delay = PVT(a_session->esbocs)->new_round_delay - *(uint16_t*)l_time_delta; + } + } + } + log_it(L_DEBUG, "l_sync_send_delay = %u", l_sync_send_delay); debug_if(PVT(a_session->esbocs)->debug, L_MSG, "net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U" start. Syncing validators in %u seconds", a_session->chain->net_name, a_session->chain->name, @@ -1772,6 +1786,7 @@ static bool s_session_candidate_to_chain(dap_chain_esbocs_session_t *a_session, switch (l_res) { case ATOM_ACCEPT: log_it(L_INFO, "block %s added in chain successfully", l_candidate_hash_str); + a_session->esbocs->last_accepted_block_timestamp = dap_time_now(); res = true; break; case ATOM_MOVE_TO_THRESHOLD: diff --git a/modules/consensus/esbocs/include/dap_chain_cs_esbocs.h b/modules/consensus/esbocs/include/dap_chain_cs_esbocs.h index 6fdcff7378..770001d011 100644 --- a/modules/consensus/esbocs/include/dap_chain_cs_esbocs.h +++ b/modules/consensus/esbocs/include/dap_chain_cs_esbocs.h @@ -127,6 +127,7 @@ typedef struct dap_chain_esbocs { dap_time_t last_directive_vote_timestamp; dap_time_t last_directive_accept_timestamp; dap_time_t last_submitted_candidate_timestamp; + dap_time_t last_accepted_block_timestamp; void *_pvt; } dap_chain_esbocs_t; @@ -142,6 +143,7 @@ typedef struct dap_chain_esbocs_directive { typedef struct dap_chain_esbocs_round { uint64_t id; uint64_t sync_attempt; + dap_time_t round_start_ts; dap_hash_fast_t last_block_hash; dap_hash_fast_t directive_hash; -- GitLab