Skip to content

Commit 3f9a351

Browse files
committed
Ignore non-durable rcode
Fix snapshot_during_truncate test Disable explicitly for linearizable tests Signed-off-by: Mark Hannum <mhannum@bloomberg.net>
1 parent a95959e commit 3f9a351

48 files changed

Lines changed: 339 additions & 188 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

bdb/bdb_api.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,10 +1016,8 @@ int bdb_wait_for_seqnum_from_room(bdb_state_type *bdb_state,
10161016
int bdb_wait_for_seqnum_from_all_adaptive(bdb_state_type *bdb_state,
10171017
seqnum_type *seqnum, uint64_t txnsize,
10181018
int *timeoutms);
1019-
1020-
int bdb_wait_for_seqnum_from_all_adaptive_newcoh(bdb_state_type *bdb_state,
1021-
seqnum_type *seqnum,
1022-
uint64_t txnsize,
1019+
int bdb_wait_for_seqnum_from_all_int(bdb_state_type *bdb_state, seqnum_type *seqnum, int *timeoutms, int is_final);
1020+
int bdb_wait_for_seqnum_from_all_adaptive_newcoh(bdb_state_type *bdb_state, seqnum_type *seqnum, uint64_t txnsize,
10231021
int *timeoutms);
10241022

10251023
int bdb_wait_for_seqnum_from_n(bdb_state_type *bdb_state, seqnum_type *seqnum,

bdb/rep.c

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3154,14 +3154,14 @@ static int node_in_list(int node, int list[], int listsz)
31543154

31553155
int64_t gbl_distributed_commit_count = 0;
31563156
int64_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

31603161
int 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

35413551
int 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 */

cdb2api/cdb2api.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3421,7 +3421,7 @@ static int cdb2_send_query(cdb2_hndl_tp *hndl, cdb2_hndl_tp *event_hndl,
34213421
static int is_retryable(int err_val)
34223422
{
34233423
switch (err_val) {
3424-
case CDB2ERR_CHANGENODE:
3424+
case CDB2ERR_NOTDURABLE:
34253425
case CDB2ERR_NOMASTER:
34263426
case CDB2ERR_TRAN_IO_ERROR:
34273427
case CDB2ERR_REJECTED:

cdb2api/cdb2api.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ enum cdb2_errors {
104104
CDB2ERR_DUPLICATE = 299,
105105
CDB2ERR_NOTSERIAL = 230,
106106
CDB2ERR_TZNAME_FAIL = 401,
107-
CDB2ERR_CHANGENODE = 402,
107+
CDB2ERR_NOTDURABLE = 402,
108108
CDB2ERR_CHECK_CONSTRAINT = 403,
109109
CDB2ERR_DIST_ABORT = 410,
110110
CDB2ERR_QUERY_REJECTED = 451,

cdb2jdbc/src/main/java/com/bloomberg/comdb2/jdbc/Comdb2Connection.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,7 @@ public static SQLException createSQLException(String msg, int rc, String sql, Th
805805
case Constants.Errors.CDB2ERR_NOMASTER:
806806
case Constants.Errors.CDB2ERR_NOTSERIAL:
807807
case Constants.Errors.CDB2ERR_DIST_ABORT:
808-
case Constants.Errors.CDB2ERR_CHANGENODE:
808+
case Constants.Errors.CDB2ERR_NOTDURABLE:
809809
case Constants.Errors.CDB2ERR_FASTSEED:
810810
case Constants.Errors.CDB2ERR_UNTAGGED_DATABASE:
811811
case Constants.Errors.CDB2ERR_DEADLOCK:

cdb2jdbc/src/main/java/com/bloomberg/comdb2/jdbc/Comdb2Handle.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -870,7 +870,7 @@ public void clearResult() {
870870

871871
private boolean is_retryable(int err_val) {
872872
switch(err_val) {
873-
case Errors.CDB2ERR_CHANGENODE:
873+
case Errors.CDB2ERR_NOTDURABLE:
874874
case Errors.CDB2ERR_NOMASTER:
875875
case Errors.CDB2ERR_TRAN_IO_ERROR:
876876
case Errors.CDB2ERR_REJECTED:
@@ -1414,7 +1414,7 @@ else if (is_retryable(errVal) && (snapshotFile > 0 ||
14141414
// no hints ..
14151415

14161416
if ((firstResp.errCode == Sqlresponse.CDB2_ErrorCode.MASTER_TIMEOUT_VALUE ||
1417-
firstResp.errCode == Errors.CDB2ERR_CHANGENODE) && (snapshotFile > 0 ||
1417+
firstResp.errCode == Errors.CDB2ERR_NOTDURABLE) && (snapshotFile > 0 ||
14181418
(!inTxn && !is_commit) || commitSnapshotFile > 0)) {
14191419
closeNoException();
14201420
retryAll = true;

cdb2jdbc/src/main/java/com/bloomberg/comdb2/jdbc/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class Errors {
7373
public static final int CDB2ERR_NOMASTER = -101;
7474
public static final int CDB2ERR_NOTSERIAL = 230;
7575
public static final int CDB2ERR_DIST_ABORT = 430;
76-
public static final int CDB2ERR_CHANGENODE = 402;
76+
public static final int CDB2ERR_NOTDURABLE = 402;
7777
public static final int CDB2ERR_UNTAGGED_DATABASE = -102;
7878
public static final int CDB2ERR_CONSTRAINTS = -103;
7979

db/comdb2.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,6 +1273,7 @@ struct osql_sess {
12731273
int queryid;
12741274
unsigned is_reorder_on : 1;
12751275
unsigned is_delayed : 1;
1276+
unsigned is_final : 1;
12761277

12771278
/* from sorese */
12781279
osql_target_t target; /* replicant machine; host is NULL if local */

db/db_tunables.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,8 @@ extern int gbl_debug_sleep_in_analyze;
466466
extern int gbl_debug_sleep_in_summarize;
467467
extern int gbl_debug_sleep_in_trigger_info;
468468
extern int gbl_replicant_retry_on_not_durable;
469+
extern int gbl_debug_force_non_durable;
470+
extern int gbl_ignore_final_non_durable_retry;
469471
extern int gbl_enable_internal_sql_stmt_caching;
470472
extern int gbl_longreq_log_freq_sec;
471473
extern int gbl_disable_seekscan_optimization;

db/db_tunables.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2343,6 +2343,12 @@ REGISTER_TUNABLE("sockbplog_sockpool",
23432343
REGISTER_TUNABLE("replicant_retry_on_not_durable", "Replicant retries non-durable writes. (Default: off)",
23442344
TUNABLE_BOOLEAN, &gbl_replicant_retry_on_not_durable, 0, NULL, NULL, NULL, NULL);
23452345

2346+
REGISTER_TUNABLE("debug_force_non_durable", "Debug tunable which makes all commits not durable. (Default: off)",
2347+
TUNABLE_BOOLEAN, &gbl_debug_force_non_durable, EXPERIMENTAL | INTERNAL, NULL, NULL, NULL, NULL);
2348+
2349+
REGISTER_TUNABLE("hide_non_durable_rcode", "Hide non-durable rcode from clients. (Default: on)", TUNABLE_BOOLEAN,
2350+
&gbl_ignore_final_non_durable_retry, 0, NULL, NULL, NULL, NULL);
2351+
23462352
REGISTER_TUNABLE(
23472353
"lightweight_rename",
23482354
"Replaces the ondisk file rename with an aliasing at llmeta level",

0 commit comments

Comments
 (0)