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",
|
krb5_warnx(context, "ipropd-slave started at version: %ld",
|
||||||
(long)server_context->log_context.version);
|
(long)server_context->log_context.version);
|
||||||
|
|
||||||
ret = ihave (context, auth_context, master_fd,
|
ret = ihave(context, auth_context, master_fd,
|
||||||
server_context->log_context.version);
|
server_context->log_context.version);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto retry;
|
goto retry;
|
||||||
|
|
||||||
@@ -777,30 +777,33 @@ main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sp = krb5_storage_from_mem (out.data, out.length);
|
sp = krb5_storage_from_mem (out.data, out.length);
|
||||||
krb5_ret_int32 (sp, &tmp);
|
krb5_ret_int32(sp, &tmp);
|
||||||
switch (tmp) {
|
switch (tmp) {
|
||||||
case FOR_YOU :
|
case FOR_YOU :
|
||||||
receive (context, sp, server_context);
|
receive(context, sp, server_context);
|
||||||
ret = ihave (context, auth_context, master_fd,
|
ret = ihave(context, auth_context, master_fd,
|
||||||
server_context->log_context.version);
|
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)
|
if (ret)
|
||||||
connected = FALSE;
|
connected = FALSE;
|
||||||
else
|
else
|
||||||
is_up_to_date(context, status_file, server_context);
|
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;
|
break;
|
||||||
case ARE_YOU_THERE :
|
case ARE_YOU_THERE :
|
||||||
is_up_to_date(context, status_file, server_context);
|
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;
|
break;
|
||||||
case YOU_HAVE_LAST_VERSION:
|
case YOU_HAVE_LAST_VERSION:
|
||||||
is_up_to_date(context, status_file, server_context);
|
is_up_to_date(context, status_file, server_context);
|
||||||
|
@@ -12,6 +12,7 @@ noinst_DATA = \
|
|||||||
krb5-weak.conf \
|
krb5-weak.conf \
|
||||||
krb5-pkinit.conf \
|
krb5-pkinit.conf \
|
||||||
krb5-pkinit-win.conf \
|
krb5-pkinit-win.conf \
|
||||||
|
krb5-slave2.conf \
|
||||||
krb5-slave.conf
|
krb5-slave.conf
|
||||||
|
|
||||||
check_SCRIPTS = $(SCRIPT_TESTS)
|
check_SCRIPTS = $(SCRIPT_TESTS)
|
||||||
@@ -138,7 +139,7 @@ check-pkinit: check-pkinit.in Makefile krb5-pkinit.conf
|
|||||||
$(chmod) +x check-pkinit.tmp && \
|
$(chmod) +x check-pkinit.tmp && \
|
||||||
mv check-pkinit.tmp check-pkinit
|
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 && \
|
$(do_subst) < $(srcdir)/check-iprop.in > check-iprop.tmp && \
|
||||||
$(chmod) +x check-iprop.tmp && \
|
$(chmod) +x check-iprop.tmp && \
|
||||||
mv check-iprop.tmp check-iprop
|
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 && \
|
-e 's,[@]kdc[@],.slave,g' < $(srcdir)/krb5.conf.in > krb5-slave.conf.tmp && \
|
||||||
mv krb5-slave.conf.tmp krb5-slave.conf
|
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
|
krb5-pkinit.conf: krb5-pkinit.conf.in Makefile
|
||||||
$(do_subst) -e 's,[@]w2k[@],no,g' < $(srcdir)/krb5-pkinit.conf.in > krb5-pkinit.conf.tmp && \
|
$(do_subst) -e 's,[@]w2k[@],no,g' < $(srcdir)/krb5-pkinit.conf.in > krb5-pkinit.conf.tmp && \
|
||||||
mv krb5-pkinit.conf.tmp krb5-pkinit.conf
|
mv krb5-pkinit.conf.tmp krb5-pkinit.conf
|
||||||
@@ -247,6 +255,7 @@ CLEANFILES= \
|
|||||||
krb5-hdb-mitdb.conf \
|
krb5-hdb-mitdb.conf \
|
||||||
krb5-pkinit-win.conf \
|
krb5-pkinit-win.conf \
|
||||||
krb5-pkinit.conf \
|
krb5-pkinit.conf \
|
||||||
|
krb5-slave2.conf \
|
||||||
krb5-slave.conf \
|
krb5-slave.conf \
|
||||||
krb5-weak.conf \
|
krb5-weak.conf \
|
||||||
krb5.conf \
|
krb5.conf \
|
||||||
|
@@ -172,7 +172,7 @@ sleep 2
|
|||||||
KRB5_CONFIG="${objdir}/krb5-slave.conf" \
|
KRB5_CONFIG="${objdir}/krb5-slave.conf" \
|
||||||
${kadmin} -l get host/bar@${R} > /dev/null 2>/dev/null && exit 1
|
${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
|
> iprop-stats
|
||||||
sh ${leaks_kill} ipropd-slave $ipds || exit 1
|
sh ${leaks_kill} ipropd-slave $ipds || exit 1
|
||||||
rm -f iprop-slave-status
|
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
|
# ----------------- checking: slave is missing changes while down
|
||||||
|
|
||||||
|
rm current.slave.log current-db.slave* || exit 1
|
||||||
|
|
||||||
echo "doing changes while slave is down"
|
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
|
||||||
${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