From: Norbert Bizet Date: Wed, 30 Jun 2021 08:50:38 +0000 (-0400) Subject: cloud: Fix #7888 Display retry count on upload X-Git-Tag: Release-11.3.2~476 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1d2a97fe0833f68fb5e9f4bcb9809fa433a3f538;p=thirdparty%2Fbacula.git cloud: Fix #7888 Display retry count on upload --- diff --git a/bacula/src/stored/cloud_transfer_mgr.c b/bacula/src/stored/cloud_transfer_mgr.c index 2ea40d7e0..4f6a4e04e 100644 --- a/bacula/src/stored/cloud_transfer_mgr.c +++ b/bacula/src/stored/cloud_transfer_mgr.c @@ -207,45 +207,51 @@ bool transfer::is_canceled() const uint32_t transfer::append_status(POOL_MEM& msg) { POOLMEM *tmp_msg = get_pool_memory(PM_MESSAGE); - char ec[50], ed1[50]; + char ec[50], ed1[50], ed2[50]; uint32_t ret=0; static const char *state[] = {"created", "queued", "process", "done", "error"}; lock_guard lg(m_stat_mutex); if (m_state > TRANS_STATE_PROCESSED) { if (m_hash64[0]||m_hash64[1]||m_hash64[2]||m_hash64[3]||m_hash64[4]||m_hash64[5]||m_hash64[6]||m_hash64[7]) { - ret = Mmsg(tmp_msg,_("%s/part.%-5d state=%-7s size=%sB duration=%ds hash=%02x%02x%02x%02x%02x%02x%02x%02x%s%s%s%s\n"), + ret = Mmsg(tmp_msg,_("%s/part.%-5d state=%-7s %s%s%s%s size=%sB duration=%ds hash=%02x%02x%02x%02x%02x%02x%02x%02x%s%s\n"), m_volume_name, m_part, state[m_state], + (m_retry != 0)?"retry=":"", + (m_retry != 0)?edit_uint64(m_retry, ed1):"", + (m_retry != 0)?"/":"", + (m_retry != 0)?edit_uint64(m_driver->max_upload_retries, ed2):"", edit_uint64_with_suffix(m_stat_size, ec), m_stat_duration/ONE_SEC, m_hash64[0],m_hash64[1],m_hash64[2],m_hash64[3],m_hash64[4],m_hash64[5],m_hash64[6],m_hash64[7], (strlen(m_message) != 0)?" msg=":"", - (strlen(m_message) != 0)?m_message:"", - (m_retry > 1)?" retry=":"", - (m_retry > 1)?edit_uint64(m_retry, ed1):""); + (strlen(m_message) != 0)?m_message:""); } else { - ret = Mmsg(tmp_msg,_("%s/part.%-5d state=%-7s size=%sB duration=%ds%s%s%s%s\n"), + ret = Mmsg(tmp_msg,_("%s/part.%-5d state=%-7s %s%s%s%s size=%sB duration=%ds%s%s\n"), m_volume_name, m_part, state[m_state], + (m_retry != 0)?"retry=":"", + (m_retry != 0)?edit_uint64(m_retry, ed1):"", + (m_retry != 0)?"/":"", + (m_retry != 0)?edit_uint64(m_driver->max_upload_retries, ed2):"", edit_uint64_with_suffix(m_stat_size, ec), m_stat_duration/ONE_SEC, (strlen(m_message) != 0)?" msg=":"", - (strlen(m_message) != 0)?m_message:"", - (m_retry > 1)?" retry=":"", - (m_retry > 1)?edit_uint64(m_retry, ed1):""); + (strlen(m_message) != 0)?m_message:""); } pm_strcat(msg, tmp_msg); } else { - ret = Mmsg(tmp_msg,_("%s/part.%-5d state=%-7s size=%sB eta=%ds%s%s%s%s\n"), + ret = Mmsg(tmp_msg,_("%s/part.%-5d state=%-7s %s%s%s%s size=%sB eta=%ds%s%s\n"), m_volume_name, m_part, state[m_state], + (m_retry != 0)?"retry=":"", + (m_retry != 0)?edit_uint64(m_retry, ed1):"", + (m_retry != 0)?"/":"", + (m_retry != 0)?edit_uint64(m_driver->max_upload_retries, ed2):"", edit_uint64_with_suffix(m_stat_size, ec), m_stat_eta/ONE_SEC, (strlen(m_message) != 0)?" msg=":"", - (strlen(m_message) != 0)?m_message:"", - (m_retry > 1)?" retry=":"", - (m_retry > 1)?edit_uint64(m_retry, ed1):""); + (strlen(m_message) != 0)?m_message:""); pm_strcat(msg, tmp_msg); } free_pool_memory(tmp_msg); diff --git a/bacula/src/stored/generic_driver.c b/bacula/src/stored/generic_driver.c index f977e7983..c76e4f685 100644 --- a/bacula/src/stored/generic_driver.c +++ b/bacula/src/stored/generic_driver.c @@ -661,6 +661,9 @@ bool generic_driver::copy_cache_part_to_cloud(transfer *xfer) call_fct("delete", xfer->m_volume_name, xfer->m_part, NULL, NULL, &ccb, xfer->m_message, NULL); } ret=call_fct("upload",xfer->m_volume_name, xfer->m_part, &rcb, &wcb, &ccb, xfer->m_message, NULL); + if (ret!=0) { + xfer->inc_retry(); + } --retry; } @@ -697,6 +700,10 @@ bool generic_driver::copy_cache_part_to_cloud(transfer *xfer) call_fct("delete", xfer->m_volume_name, xfer->m_part, NULL, NULL, &ccb, xfer->m_message, NULL); } ret=call_fct("upload",xfer->m_volume_name, xfer->m_part, &rcb, NULL, &ccb, xfer->m_message, xfer->m_cache_fname); + if (ret!=0) { + xfer->inc_retry(); + } + --retry; } if (getenv("GENERATE_CLOUD_HASH") && (ret==0)) { diff --git a/bacula/src/stored/s3_driver.c b/bacula/src/stored/s3_driver.c index 71a9afcc6..b79666bc3 100644 --- a/bacula/src/stored/s3_driver.c +++ b/bacula/src/stored/s3_driver.c @@ -776,9 +776,11 @@ bool s3_driver::copy_cache_part_to_cloud(transfer *xfer) S3Status status = S3StatusOK; do { /* when the driver decide to retry, it must reset the processed size */ - xfer->inc_retry(); xfer->reset_processed_size(); status = put_object(xfer, xfer->m_cache_fname, cloud_fname); + if (status != S3StatusOK) { + xfer->inc_retry(); + } --retry; } while (retry_put_object(status, retry) && (retry>0)); free_pool_memory(cloud_fname);