iprop slave: try incremental after complete xfer
The following sequence of events results in slave B having a stale HDB: - slave A connects to master, master dumps HDB for the slave - kadm5 operations - slave B connects to master, master sends previously dumped HDB slave B won't discover any updates until the next transaction. The fix is simple: the slave should immediately call ihave() after receiving a complete HDB.
This commit is contained in:
@@ -727,8 +727,8 @@ main(int argc, char **argv)
|
||||
krb5_warnx(context, "ipropd-slave started at version: %ld",
|
||||
(long)server_context->log_context.version);
|
||||
|
||||
ret = ihave (context, auth_context, master_fd,
|
||||
server_context->log_context.version);
|
||||
ret = ihave(context, auth_context, master_fd,
|
||||
server_context->log_context.version);
|
||||
if (ret)
|
||||
goto retry;
|
||||
|
||||
@@ -777,30 +777,33 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
sp = krb5_storage_from_mem (out.data, out.length);
|
||||
krb5_ret_int32 (sp, &tmp);
|
||||
krb5_ret_int32(sp, &tmp);
|
||||
switch (tmp) {
|
||||
case FOR_YOU :
|
||||
receive (context, sp, server_context);
|
||||
ret = ihave (context, auth_context, master_fd,
|
||||
server_context->log_context.version);
|
||||
if (ret) {
|
||||
connected = FALSE;
|
||||
} else {
|
||||
is_up_to_date(context, status_file, server_context);
|
||||
}
|
||||
|
||||
break;
|
||||
case TELL_YOU_EVERYTHING :
|
||||
ret = receive_everything (context, master_fd, server_context,
|
||||
auth_context);
|
||||
receive(context, sp, server_context);
|
||||
ret = ihave(context, auth_context, master_fd,
|
||||
server_context->log_context.version);
|
||||
if (ret)
|
||||
connected = FALSE;
|
||||
else
|
||||
is_up_to_date(context, status_file, server_context);
|
||||
|
||||
break;
|
||||
case TELL_YOU_EVERYTHING :
|
||||
ret = receive_everything(context, master_fd, server_context,
|
||||
auth_context);
|
||||
if (ret == 0) {
|
||||
ret = ihave(context, auth_context, master_fd,
|
||||
server_context->log_context.version);
|
||||
}
|
||||
if (ret)
|
||||
connected = FALSE;
|
||||
else
|
||||
is_up_to_date(context, status_file, server_context);
|
||||
break;
|
||||
case ARE_YOU_THERE :
|
||||
is_up_to_date(context, status_file, server_context);
|
||||
send_im_here (context, master_fd, auth_context);
|
||||
send_im_here(context, master_fd, auth_context);
|
||||
break;
|
||||
case YOU_HAVE_LAST_VERSION:
|
||||
is_up_to_date(context, status_file, server_context);
|
||||
|
@@ -12,6 +12,7 @@ noinst_DATA = \
|
||||
krb5-weak.conf \
|
||||
krb5-pkinit.conf \
|
||||
krb5-pkinit-win.conf \
|
||||
krb5-slave2.conf \
|
||||
krb5-slave.conf
|
||||
|
||||
check_SCRIPTS = $(SCRIPT_TESTS)
|
||||
@@ -138,7 +139,7 @@ check-pkinit: check-pkinit.in Makefile krb5-pkinit.conf
|
||||
$(chmod) +x check-pkinit.tmp && \
|
||||
mv check-pkinit.tmp check-pkinit
|
||||
|
||||
check-iprop: check-iprop.in Makefile krb5.conf krb5-slave.conf
|
||||
check-iprop: check-iprop.in Makefile krb5.conf krb5-slave.conf krb5-slave2.conf
|
||||
$(do_subst) < $(srcdir)/check-iprop.in > check-iprop.tmp && \
|
||||
$(chmod) +x check-iprop.tmp && \
|
||||
mv check-iprop.tmp check-iprop
|
||||
@@ -212,6 +213,13 @@ krb5-slave.conf: krb5.conf.in Makefile
|
||||
-e 's,[@]kdc[@],.slave,g' < $(srcdir)/krb5.conf.in > krb5-slave.conf.tmp && \
|
||||
mv krb5-slave.conf.tmp krb5-slave.conf
|
||||
|
||||
krb5-slave2.conf: krb5.conf.in Makefile
|
||||
$(do_subst) \
|
||||
-e 's,[@]WEAK[@],true,g' \
|
||||
-e 's,[@]dk[@],,g' \
|
||||
-e 's,[@]kdc[@],.slave2,g' < $(srcdir)/krb5.conf.in > krb5-slave2.conf.tmp && \
|
||||
mv krb5-slave2.conf.tmp krb5-slave2.conf
|
||||
|
||||
krb5-pkinit.conf: krb5-pkinit.conf.in Makefile
|
||||
$(do_subst) -e 's,[@]w2k[@],no,g' < $(srcdir)/krb5-pkinit.conf.in > krb5-pkinit.conf.tmp && \
|
||||
mv krb5-pkinit.conf.tmp krb5-pkinit.conf
|
||||
@@ -247,6 +255,7 @@ CLEANFILES= \
|
||||
krb5-hdb-mitdb.conf \
|
||||
krb5-pkinit-win.conf \
|
||||
krb5-pkinit.conf \
|
||||
krb5-slave2.conf \
|
||||
krb5-slave.conf \
|
||||
krb5-weak.conf \
|
||||
krb5.conf \
|
||||
|
@@ -172,7 +172,7 @@ sleep 2
|
||||
KRB5_CONFIG="${objdir}/krb5-slave.conf" \
|
||||
${kadmin} -l get host/bar@${R} > /dev/null 2>/dev/null && exit 1
|
||||
|
||||
echo "kill slave"
|
||||
echo "kill slave and remove log and database"
|
||||
> iprop-stats
|
||||
sh ${leaks_kill} ipropd-slave $ipds || exit 1
|
||||
rm -f iprop-slave-status
|
||||
@@ -181,6 +181,8 @@ ${EGREP} 'iprop/slave.test.h5l.se@TEST.H5L.SE.*Down' iprop-stats >/dev/null || e
|
||||
|
||||
# ----------------- checking: slave is missing changes while down
|
||||
|
||||
rm current.slave.log current-db.slave* || exit 1
|
||||
|
||||
echo "doing changes while slave is down"
|
||||
${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1
|
||||
${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1
|
||||
|
Reference in New Issue
Block a user