@@ -3154,14 +3154,14 @@ static int node_in_list(int node, int list[], int listsz)
31543154
31553155int64_t gbl_distributed_commit_count = 0 ;
31563156int64_t gbl_not_durable_commit_count = 0 ;
3157+ int gbl_ignore_final_non_durable_retry = 1 ;
31573158
31583159/* ripped out ALL SUPPORT FOR ALL BROKEN CRAP MODES, aside from "newcoh" */
31593160
31603161int gbl_replicant_retry_on_not_durable = 0 ;
3161- int gbl_require_distributed_count = 0 ;
3162+ int gbl_debug_force_non_durable = 0 ;
31623163
3163- static int bdb_wait_for_seqnum_from_all_int (bdb_state_type * bdb_state , seqnum_type * seqnum , int * timeoutms ,
3164- uint64_t txnsize , int newcoh )
3164+ int bdb_wait_for_seqnum_from_all_int (bdb_state_type * bdb_state , seqnum_type * seqnum , int * timeoutms , int is_final )
31653165{
31663166 int i , now , cntbytes ;
31673167 struct interned_string * nodelist [REPMAX ];
@@ -3189,14 +3189,16 @@ static int bdb_wait_for_seqnum_from_all_int(bdb_state_type *bdb_state, seqnum_ty
31893189 int total_commissioned ;
31903190 int lock_desired = 0 ;
31913191 int fake_incoherent = 0 ;
3192+ int non_durable_retry = gbl_replicant_retry_on_not_durable && (!is_final || !gbl_ignore_final_non_durable_retry );
3193+ int force_non_durable = non_durable_retry && gbl_debug_force_non_durable ;
31923194
31933195 /* if we were passed a child, find his parent */
31943196 assert (!bdb_state -> parent );
31953197 if (bdb_state -> parent )
31963198 bdb_state = bdb_state -> parent ;
31973199
31983200 /* Dereference from parent */
3199- durable_lsns = (bdb_state -> attr -> durable_lsns || gbl_replicant_retry_on_not_durable || gbl_2pc );
3201+ durable_lsns = (bdb_state -> attr -> durable_lsns || non_durable_retry || gbl_2pc );
32003202
32013203 /* 2pc won't allow participants to commit until coordinator-commit is durable */
32023204 catchup_window = bdb_state -> attr -> catchup_window ;
@@ -3458,6 +3460,10 @@ static int bdb_wait_for_seqnum_from_all_int(bdb_state_type *bdb_state, seqnum_ty
34583460 outrc = -1 ;
34593461 }
34603462
3463+ if (force_non_durable ) {
3464+ outrc = BDBERR_NOT_DURABLE ;
3465+ }
3466+
34613467 uint32_t cur_gen ;
34623468 static uint32_t not_durable_count ;
34633469 static uint32_t durable_count ;
@@ -3478,7 +3484,7 @@ static int bdb_wait_for_seqnum_from_all_int(bdb_state_type *bdb_state, seqnum_ty
34783484 logmsg (LOGMSG_USER , "%s return not durable for durable wait seqnum test\n" , __func__ );
34793485
34803486 ATOMIC_ADD64 (gbl_not_durable_commit_count , 1 );
3481- if (durable_lsns )
3487+ if (durable_lsns || force_non_durable )
34823488 outrc = BDBERR_NOT_DURABLE ;
34833489 not_durable_count ++ ;
34843490 was_durable = 0 ;
@@ -3493,12 +3499,12 @@ static int bdb_wait_for_seqnum_from_all_int(bdb_state_type *bdb_state, seqnum_ty
34933499 BDB_RELLOCK ();
34943500
34953501 if (cur_gen != seqnum -> generation ) {
3496- if (durable_lsns )
3502+ if (durable_lsns || force_non_durable )
34973503 outrc = BDBERR_NOT_DURABLE ;
34983504 ATOMIC_ADD64 (gbl_not_durable_commit_count , 1 );
34993505 not_durable_count ++ ;
35003506 was_durable = 0 ;
3501- } else if (durable_lsns ) {
3507+ } else if (durable_lsns || force_non_durable ) {
35023508 Pthread_mutex_lock (& bdb_state -> durable_lsn_lk );
35033509 bdb_state -> dbenv -> set_durable_lsn (bdb_state -> dbenv , & seqnum -> lsn , cur_gen );
35043510 if (seqnum -> lsn .file == 0 ) {
@@ -3535,30 +3541,29 @@ static int bdb_wait_for_seqnum_from_all_int(bdb_state_type *bdb_state, seqnum_ty
35353541 calc_lsn .offset , calc_gen );
35363542 }
35373543
3544+ /* Accounting to accommodate testcase */
3545+ if (was_durable && outrc == BDBERR_NOT_DURABLE ) {
3546+ ATOMIC_ADD64 (gbl_not_durable_commit_count , 1 );
3547+ }
35383548 return outrc ;
35393549}
35403550
35413551int bdb_wait_for_seqnum_from_all (bdb_state_type * bdb_state , seqnum_type * seqnum )
35423552{
35433553 int timeoutms = bdb_state -> attr -> reptimeout * MILLISEC ;
3544- return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , & timeoutms , 0 ,
3545- 0 );
3554+ return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , & timeoutms , 0 );
35463555}
35473556
3548- int bdb_wait_for_seqnum_from_all_timeout (bdb_state_type * bdb_state ,
3549- seqnum_type * seqnum , int timeoutms )
3557+ int bdb_wait_for_seqnum_from_all_timeout (bdb_state_type * bdb_state , seqnum_type * seqnum , int timeoutms )
35503558{
3551- return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , & timeoutms , 0 ,
3552- 0 );
3559+ return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , & timeoutms , 0 );
35533560}
35543561
3555- int bdb_wait_for_seqnum_from_all_adaptive (bdb_state_type * bdb_state ,
3556- seqnum_type * seqnum , uint64_t txnsize ,
3562+ int bdb_wait_for_seqnum_from_all_adaptive (bdb_state_type * bdb_state , seqnum_type * seqnum , uint64_t txnsize ,
35573563 int * timeoutms )
35583564{
35593565 * timeoutms = -1 ;
3560- return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , timeoutms ,
3561- txnsize , 0 );
3566+ return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , timeoutms , 0 );
35623567}
35633568
35643569/*
@@ -3576,26 +3581,19 @@ int bdb_wait_for_seqnum_from_all_newcoh(bdb_state_type *bdb_state,
35763581 seqnum_type * seqnum )
35773582{
35783583 int timeoutms = bdb_state -> attr -> reptimeout * MILLISEC ;
3579- return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , & timeoutms , 0 ,
3580- 1 );
3584+ return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , & timeoutms , 0 );
35813585}
35823586
3583- int bdb_wait_for_seqnum_from_all_timeout_newcoh (bdb_state_type * bdb_state ,
3584- seqnum_type * seqnum ,
3585- int timeoutms )
3587+ int bdb_wait_for_seqnum_from_all_timeout_newcoh (bdb_state_type * bdb_state , seqnum_type * seqnum , int timeoutms )
35863588{
3587- return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , & timeoutms , 0 ,
3588- 1 );
3589+ return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , & timeoutms , 0 );
35893590}
35903591
3591- int bdb_wait_for_seqnum_from_all_adaptive_newcoh (bdb_state_type * bdb_state ,
3592- seqnum_type * seqnum ,
3593- uint64_t txnsize ,
3592+ int bdb_wait_for_seqnum_from_all_adaptive_newcoh (bdb_state_type * bdb_state , seqnum_type * seqnum , uint64_t txnsize ,
35943593 int * timeoutms )
35953594{
35963595 * timeoutms = -1 ;
3597- return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , timeoutms ,
3598- txnsize , 1 );
3596+ return bdb_wait_for_seqnum_from_all_int (bdb_state , seqnum , timeoutms , 0 );
35993597}
36003598
36013599/* let everyone know what logfile we are currently using */
0 commit comments