Skip to content

Commit 5590f2c

Browse files
committed
rec-gen can be larger than cluster gen
Signed-off-by: mhannum <mhannum@bloomberg.net>
1 parent 036f22c commit 5590f2c

File tree

5 files changed

+23
-3
lines changed

5 files changed

+23
-3
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: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,9 +326,24 @@ static void print_record_info(const char *prefix, const char *lsn)
326326
}
327327
}
328328

329+
extern int gbl_match_on_ckp;
330+
329331
static inline int gen_okay(bdb_state_type *bdb_state, int64_t recgen, u_int32_t mygen)
330332
{
331-
return recgen <= mygen;
333+
if (recgen > mygen) {
334+
static int64_t cnt = 0;
335+
static int lastprint = 0;
336+
cnt++;
337+
if (gbl_debug_sql_logfill) {
338+
int now = comdb2_time_epoch();
339+
if (now - lastprint > 0) {
340+
logmsg(LOGMSG_USER, "%s: recgen > mygen: recgen=%" PRId64 " mygen=%u cnt=%" PRId64 "\n",
341+
__func__, recgen, mygen, cnt);
342+
lastprint = now;
343+
}
344+
}
345+
}
346+
return 1;
332347
}
333348

334349
static int apply_record(bdb_state_type *bdb_state, const char *lsn, void *blob, int blob_len, int64_t genp,
@@ -698,7 +713,7 @@ static void *sql_apply_thread(void *arg)
698713
BDB_READLOCK(__func__);
699714
u_int32_t gen;
700715
bdb_state->dbenv->get_rep_gen(bdb_state->dbenv, &gen);
701-
if (copy.gen == gen && (copy.recgen == 0 || gen >= copy.recgen)) {
716+
if (copy.gen == gen && (copy.recgen == 0 || gen_okay(bdb_state, copy.recgen, gen))) {
702717
rep_apply_caller = "sqllogfill-apply-thread";
703718
bdb_state->dbenv->apply_log(bdb_state->dbenv, copy.file, copy.offset, copy.rectype, copy.blob,
704719
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)