Apply recovery pause before writes, after commits, and do not apply it to syncs to not block EC pools from functioning
Test / buildenv (push) Successful in 12s Details
Test / build (push) Successful in 2m38s Details
Test / test_cas (push) Successful in 12s Details
Test / test_change_pg_count (push) Successful in 38s Details
Test / test_change_pg_size (push) Successful in 10s Details
Test / test_change_pg_count_ec (push) Successful in 33s Details
Test / test_create_nomaxid (push) Successful in 9s Details
Test / test_etcd_fail (push) Successful in 1m0s Details
Test / test_add_osd (push) Successful in 2m48s Details
Test / test_interrupted_rebalance_imm (push) Successful in 1m57s Details
Test / test_interrupted_rebalance (push) Successful in 2m2s Details
Test / test_failure_domain (push) Successful in 42s Details
Test / test_interrupted_rebalance_ec (push) Successful in 2m7s Details
Test / test_snapshot (push) Successful in 1m1s Details
Test / test_snapshot_ec (push) Successful in 28s Details
Test / test_minsize_1 (push) Successful in 15s Details
Test / test_interrupted_rebalance_ec_imm (push) Successful in 1m23s Details
Test / test_rm (push) Successful in 14s Details
Test / test_move_reappear (push) Successful in 24s Details
Test / test_snapshot_down (push) Successful in 31s Details
Test / test_snapshot_down_ec (push) Successful in 34s Details
Test / test_splitbrain (push) Successful in 27s Details
Test / test_snapshot_chain (push) Successful in 2m17s Details
Test / test_rebalance_verify_imm (push) Successful in 3m48s Details
Test / test_rebalance_verify (push) Successful in 4m27s Details
Test / test_switch_primary (push) Successful in 36s Details
Test / test_write (push) Successful in 43s Details
Test / test_write_xor (push) Successful in 38s Details
Test / test_write_no_same (push) Successful in 16s Details
Test / test_rebalance_verify_ec (push) Successful in 5m34s Details
Test / test_rebalance_verify_ec_imm (push) Successful in 4m48s Details
Test / test_heal_pg_size_2 (push) Successful in 4m12s Details
Test / test_heal_ec (push) Successful in 4m51s Details
Test / make_test (push) Failing after 44s Details
Test / test_heal_csum_32k_dmj (push) Successful in 5m8s Details
Test / test_heal_csum_32k_dj (push) Successful in 5m2s Details
Test / test_heal_csum_32k (push) Successful in 6m1s Details
Test / test_heal_csum_4k_dmj (push) Successful in 5m58s Details
Test / test_scrub_zero_osd_2 (push) Successful in 57s Details
Test / test_scrub (push) Successful in 1m7s Details
Test / test_scrub_xor (push) Successful in 56s Details
Test / test_heal_csum_4k (push) Successful in 6m22s Details
Test / test_heal_csum_4k_dj (push) Successful in 6m24s Details
Test / test_scrub_pg_size_6_pg_minsize_4_osd_count_6_ec (push) Successful in 43s Details
Test / test_scrub_ec (push) Successful in 22s Details
Test / test_scrub_pg_size_3 (push) Successful in 1m57s Details
Test / test_snapshot_chain_ec (push) Successful in 1m25s Details

Vitaliy Filippov 2024-02-11 12:19:08 +03:00
parent 4a4d6667c6
commit cebe1c004f
3 changed files with 24 additions and 3 deletions

View File

@ -283,6 +283,7 @@ class osd_t
void exec_sync_stab_all(osd_op_t *cur_op);
void exec_show_config(osd_op_t *cur_op);
void exec_secondary(osd_op_t *cur_op);
void exec_secondary_real(osd_op_t *cur_op);
void secondary_op_callback(osd_op_t *cur_op);
// primary ops

View File

@ -442,7 +442,7 @@ void osd_t::tune_recovery()
if (recovery_target_sleep_count < recovery_tune_agg_interval)
recovery_target_sleep_count++;
recovery_target_sleep_us = recovery_target_sleep_total / recovery_target_sleep_count;
if (log_level > 4)
if (log_level > 1)
{
printf(
"[OSD %lu] auto-tune: client util: %.2f, recovery util: %.2f, lat: %lu us -> target util %.2f, delay %lu us\n",

View File

@ -42,8 +42,10 @@ void osd_t::secondary_op_callback(osd_op_t *op)
int retval = op->bs_op->retval;
delete op->bs_op;
op->bs_op = NULL;
if (op->is_recovery_related() && recovery_target_sleep_us)
if (op->is_recovery_related() && recovery_target_sleep_us &&
op->req.hdr.opcode == OSD_OP_SEC_STABILIZE)
{
// Apply pause AFTER commit. Do not apply pause to SYNC at all
if (!op->tv_end.tv_sec)
{
clock_gettime(CLOCK_REALTIME, &op->tv_end);
@ -59,7 +61,25 @@ void osd_t::secondary_op_callback(osd_op_t *op)
}
}
void osd_t::exec_secondary(osd_op_t *cur_op)
void osd_t::exec_secondary(osd_op_t *op)
{
if (op->is_recovery_related() && recovery_target_sleep_us &&
op->req.hdr.opcode != OSD_OP_SEC_STABILIZE && op->req.hdr.opcode != OSD_OP_SEC_SYNC)
{
// Apply pause BEFORE write/delete
tfd->set_timer_us(recovery_target_sleep_us, false, [this, op](int timer_id)
{
clock_gettime(CLOCK_REALTIME, &op->tv_begin);
exec_secondary_real(op);
});
}
else
{
exec_secondary_real(op);
}
}
void osd_t::exec_secondary_real(osd_op_t *cur_op)
{
if (cur_op->req.hdr.opcode == OSD_OP_SEC_READ_BMP)
{