Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion db/toblock.c
Original file line number Diff line number Diff line change
Expand Up @@ -1218,7 +1218,9 @@ static int do_replay_case(struct ireq *iq, void *fstseqnum, int seqlen,
* This can incorrectly report NOT_DURABLE but that's sane given that half
* the cluster is incoherent */
int is_final = iq->sorese ? iq->sorese->is_final : 0;
int non_durable_retry = gbl_replicant_retry_on_not_durable && (!is_final || !gbl_ignore_final_non_durable_retry);
int can_replicant_retry = IQ_HAS_SNAPINFO(iq) && IQ_SNAPINFO(iq)->replicant_is_able_to_retry;
int non_durable_retry =
gbl_replicant_retry_on_not_durable && can_replicant_retry && (!is_final || !gbl_ignore_final_non_durable_retry);
int force_non_durable = non_durable_retry && gbl_debug_force_non_durable;

if ((bdb_attr_get(thedb->bdb_attr, BDB_ATTR_DURABLE_LSNS) || non_durable_retry) &&
Expand Down
4 changes: 3 additions & 1 deletion tests/final_non_durable_retry.test/README
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
Verify non-durable requests behavior against hide_non_durable_rcode
Verify non-durable requests behavior against hide_non_durable_rcode.
Also verifies chunk transactions do not fail with in-transaction disconnect
when non-durable replay forcing is enabled.
24 changes: 24 additions & 0 deletions tests/final_non_durable_retry.test/runit
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,36 @@ function hide_non_durable_constraint_violation
$CDB2SQL_EXE $CDB2_OPTIONS $DBNAME default "delete from t1 where 1" >/dev/null 2>&1
}

function show_non_durable_chunk_does_not_disconnect
{
hide_non_durable_rcode 0
force_all_non_durable 1

$CDB2SQL_EXE $CDB2_OPTIONS $DBNAME default - <<EOF
set transaction chunk 1
begin
$(for i in $(seq 2001 2050); do
echo "insert into t1 values ($i)"
done)
commit
EOF
rc=$?

[[ $rc -ne 0 ]] &&
failexit "chunk transaction should finish commit successfully (rc=$rc)"

hide_non_durable_rcode 0
force_all_non_durable 0
$CDB2SQL_EXE $CDB2_OPTIONS $DBNAME default "delete from t1 where a between 2001 and 2050" >/dev/null 2>&1
}

function run_test
{
hide_non_durable_good_insert
show_non_durable_good_insert
hide_non_durable_constraint_violation
show_non_durable_constraint_violation
show_non_durable_chunk_does_not_disconnect
}

create_table
Expand Down
Loading