Skip to content

Commit 329abb1

Browse files
committed
Prevent rec-gen only if elect-highest & retrieve-gen-from-ckp enabled
Signed-off-by: mhannum <mhannum@bloomberg.net>
1 parent 88f20eb commit 329abb1

File tree

5 files changed

+20
-2
lines changed

5 files changed

+20
-2
lines changed

berkdb/txn/txn.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1023,6 +1023,7 @@ void comdb2_cheapstack_sym(FILE *f, char *fmt, ...);
10231023

10241024
extern int gbl_fullrecovery;
10251025
int gbl_endianize_locklist = 1;
1026+
int gbl_emit_gen_commits = 1;
10261027

10271028
/*
10281029
* __txn_commit --
@@ -1131,7 +1132,7 @@ __txn_commit_int(txnp, flags, ltranid, llid, last_commit_lsn, rlocks, inlks,
11311132
}
11321133

11331134
/* don't let full recovery write a (higher) generation: it will force this newly-recovered node to be master on the next election */
1134-
elect_highest_committed_gen = !gbl_fullrecovery;
1135+
elect_highest_committed_gen = (!gbl_fullrecovery && gbl_emit_gen_commits);
11351136
db_rep = dbenv->rep_handle;
11361137
rep = db_rep->region;
11371138

db/db_tunables.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ extern int gbl_round_robin_stripes;
149149
extern int skip_clear_queue_extents;
150150
extern int gbl_rep_skip_recovery;
151151
extern int gbl_retrieve_gen_from_ckp;
152+
extern int gbl_emit_gen_commits;
152153
extern int gbl_recovery_ckp;
153154
extern int gbl_reproduce_ckp_bug;
154155
extern int gbl_sample_queries;

db/db_tunables.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,8 @@ REGISTER_TUNABLE("rep_process_txn_trace",
10571057
NULL, NULL, NULL, NULL);
10581058
REGISTER_TUNABLE("rep_skip_recovery", "Skip recovery if truncate won't unwind a transaction. (Default: off)",
10591059
TUNABLE_BOOLEAN, &gbl_rep_skip_recovery, 0, NULL, NULL, NULL, NULL);
1060+
REGISTER_TUNABLE("emit_gen_commits", "Emit commit-records which include cluster generation. (Default: on)",
1061+
TUNABLE_BOOLEAN, &gbl_emit_gen_commits, 0, NULL, NULL, NULL, NULL);
10601062
/* 'retrieve_gen_from_ckp' / 'recovery_ckp' disabled under legacy_defaults until db moves */
10611063
REGISTER_TUNABLE("retrieve_gen_from_ckp", "Retrieve generation from ckp records. (Default: on)", TUNABLE_BOOLEAN,
10621064
&gbl_retrieve_gen_from_ckp, 0, NULL, NULL, NULL, NULL);

db/sqllogfill.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,21 @@ static void print_record_info(const char *prefix, const char *lsn)
326326
}
327327
}
328328

329+
extern int gbl_retrieve_gen_from_ckp;
330+
329331
static inline int gen_okay(bdb_state_type *bdb_state, int64_t recgen, u_int32_t mygen)
330332
{
333+
/* Only check generation if both elect_highest_committed_gen and gbl_retrieve_gen_from_ckp are enabled. */
334+
if (!bdb_state->dbenv->attr.elect_highest_committed_gen || !gbl_retrieve_gen_from_ckp) {
335+
if (gbl_debug_sql_logfill && recgen > mygen) {
336+
logmsg(LOGMSG_USER,
337+
"%s: ignoring generation check (elect_highest_committed_gen=%d gbl_retrieve_gen_from_ckp=%d) "
338+
"recgen=%" PRId64 " mygen=%u\n",
339+
__func__, bdb_state->dbenv->attr.elect_highest_committed_gen, gbl_retrieve_gen_from_ckp, recgen,
340+
mygen);
341+
}
342+
return 1;
343+
}
331344
return recgen <= mygen;
332345
}
333346

@@ -698,7 +711,7 @@ static void *sql_apply_thread(void *arg)
698711
BDB_READLOCK(__func__);
699712
u_int32_t gen;
700713
bdb_state->dbenv->get_rep_gen(bdb_state->dbenv, &gen);
701-
if (copy.gen == gen && (copy.recgen == 0 || gen >= copy.recgen)) {
714+
if (copy.gen == gen && (copy.recgen == 0 || gen_okay(bdb_state, copy.recgen, gen))) {
702715
rep_apply_caller = "sqllogfill-apply-thread";
703716
bdb_state->dbenv->apply_log(bdb_state->dbenv, copy.file, copy.offset, copy.rectype, copy.blob,
704717
copy.blob_len);

tests/tunables.test/t00_all_tunables.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@
320320
(name='elect_on_mismatched_master', description='', type='BOOLEAN', value='ON', read_only='N')
321321
(name='elect_priority_bias', description='Bias this node's election priority by this amount. (Default: 0)', type='INTEGER', value='0', read_only='N')
322322
(name='electtimebase', description='Master election timeout base value.', type='INTEGER', value='50', read_only='N')
323+
(name='emit_gen_commits', description='Emit commit-records which include cluster generation. (Default: on)', type='BOOLEAN', value='ON', read_only='N')
323324
(name='emptystrnum', description='Empty strings don't convert to numbers', type='BOOLEAN', value='ON', read_only='N')
324325
(name='enable_2pc', description='Enable 2pc fdb transactions. (Default: off)', type='BOOLEAN', value='OFF', read_only='Y')
325326
(name='enable_berkdb_retry_deadlock_bias', description='', type='BOOLEAN', value='OFF', read_only='Y')

0 commit comments

Comments
 (0)