diff options
| author | Greg Hudson <ghudson@mit.edu> | 2013-01-22 17:42:37 -0500 |
|---|---|---|
| committer | Greg Hudson <ghudson@mit.edu> | 2013-01-22 17:49:50 -0500 |
| commit | 7665c0677b59574c2c7ccd016221f8f4beafd279 (patch) | |
| tree | d1ec1717f811370bc9e0fdd0262ea7086dfd0055 /src/slave | |
| parent | 4b3937182b75e08eaf8f259828b018a2b6d2c111 (diff) | |
Fix iprop log reinitialization
If the master iprop log is reinitialized to serial number 0, slaves
will need to take a full dump--but after that happens, we need to know
whether the slave has taken that full dump, we we don't offering full
dumps indefinitely.
So, record a timestamp in kdb_last_time when we reinitialize the log
header, and compare the slave timestamp to kdb_last_time whenever it
has the current serial number, even if it's 0. Test this by
performing a propagation with sno 0 in t_iprop.py and detecting
whether kpropd gets a second UPDATE_FULL_RESYNC_NEEDED response from
kadmind.
ticket: 7550 (new)
Diffstat (limited to 'src/slave')
| -rw-r--r-- | src/slave/kpropd.c | 2 | ||||
| -rw-r--r-- | src/slave/kproplog.c | 12 |
2 files changed, 3 insertions, 11 deletions
diff --git a/src/slave/kpropd.c b/src/slave/kpropd.c index 627230232a..e0a8031b0e 100644 --- a/src/slave/kpropd.c +++ b/src/slave/kpropd.c @@ -834,6 +834,8 @@ reinit: now = time(NULL); if (frrequested && (now - frrequested) < params.iprop_resync_timeout) { + if (debug) + fprintf(stderr, _("Still waiting for full resync\n")); break; } else { frrequested = now; diff --git a/src/slave/kproplog.c b/src/slave/kproplog.c index c6f244bbb3..fc4c559e47 100644 --- a/src/slave/kproplog.c +++ b/src/slave/kproplog.c @@ -566,17 +566,7 @@ main(int argc, char **argv) } if (reset) { - ulog->kdb_hmagic = KDB_ULOG_HDR_MAGIC; - ulog->db_version_num = KDB_VERSION; - ulog->kdb_state = KDB_STABLE; - ulog->kdb_block = ULOG_BLOCK; - ulog->kdb_first_sno = 0; - ulog->kdb_first_time.seconds = 0; - ulog->kdb_first_time.useconds = 0; - ulog->kdb_last_sno = 0; - ulog->kdb_last_time.seconds = 0; - ulog->kdb_last_time.useconds = 0; - ulog_sync_header(ulog); + ulog_init_header(context); printf(_("Reinitialized the ulog.\n")); exit(0); } |
