Tolerate some time-travel by slaves
This commit is contained in:
@@ -749,56 +749,56 @@ process_msg (krb5_context context, slave *s, int log_fd,
|
|||||||
|
|
||||||
ret = krb5_read_priv_message(context, s->ac, &s->fd, &out);
|
ret = krb5_read_priv_message(context, s->ac, &s->fd, &out);
|
||||||
if(ret) {
|
if(ret) {
|
||||||
krb5_warn (context, ret, "error reading message from %s", s->name);
|
krb5_warn(context, ret, "error reading message from %s", s->name);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sp = krb5_storage_from_mem (out.data, out.length);
|
sp = krb5_storage_from_mem(out.data, out.length);
|
||||||
if (sp == NULL) {
|
if (sp == NULL) {
|
||||||
krb5_warnx (context, "process_msg: no memory");
|
krb5_warnx(context, "process_msg: no memory");
|
||||||
krb5_data_free (&out);
|
krb5_data_free(&out);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (krb5_ret_int32 (sp, &tmp) != 0) {
|
if (krb5_ret_int32(sp, &tmp) != 0) {
|
||||||
krb5_warnx (context, "process_msg: client send too short command");
|
krb5_warnx(context, "process_msg: client send too short command");
|
||||||
krb5_data_free (&out);
|
krb5_data_free(&out);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
switch (tmp) {
|
switch (tmp) {
|
||||||
case I_HAVE :
|
case I_HAVE :
|
||||||
ret = krb5_ret_int32 (sp, &tmp);
|
ret = krb5_ret_int32(sp, &tmp);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
krb5_warnx (context, "process_msg: client send too I_HAVE data");
|
krb5_warnx(context, "process_msg: client send too I_HAVE data");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* new started slave that have old log */
|
/* new started slave that have old log */
|
||||||
if (s->version == 0 && tmp != 0) {
|
if (s->version == 0 && tmp != 0) {
|
||||||
if (current_version < (uint32_t)tmp) {
|
if (current_version < (uint32_t)tmp) {
|
||||||
krb5_warnx (context, "Slave %s (version %lu) have later version "
|
krb5_warnx(context, "Slave %s (version %lu) have later version "
|
||||||
"the master (version %lu) OUT OF SYNC",
|
"the master (version %lu) OUT OF SYNC",
|
||||||
s->name, (unsigned long)tmp,
|
s->name, (unsigned long)tmp,
|
||||||
(unsigned long)current_version);
|
(unsigned long)current_version);
|
||||||
}
|
}
|
||||||
s->version = tmp;
|
s->version = tmp;
|
||||||
}
|
}
|
||||||
if ((uint32_t)tmp < s->version) {
|
if ((uint32_t)tmp < s->version) {
|
||||||
krb5_warnx (context, "Slave claims to not have "
|
krb5_warnx(context, "Slave claims to not have "
|
||||||
"version we already sent to it");
|
"version we already sent to it");
|
||||||
} else {
|
s->version = tmp;
|
||||||
ret = send_diffs (context, s, log_fd, database, current_version);
|
|
||||||
}
|
}
|
||||||
|
ret = send_diffs(context, s, log_fd, database, current_version);
|
||||||
break;
|
break;
|
||||||
case I_AM_HERE :
|
case I_AM_HERE :
|
||||||
break;
|
break;
|
||||||
case ARE_YOU_THERE:
|
case ARE_YOU_THERE:
|
||||||
case FOR_YOU :
|
case FOR_YOU :
|
||||||
default :
|
default :
|
||||||
krb5_warnx (context, "Ignoring command %d", tmp);
|
krb5_warnx(context, "Ignoring command %d", tmp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_data_free (&out);
|
krb5_data_free(&out);
|
||||||
krb5_storage_free (sp);
|
krb5_storage_free(sp);
|
||||||
|
|
||||||
slave_seen(s);
|
slave_seen(s);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user