When backends offers mistakenly different authentication methods,
pgpool just showed:
"unable to read message length"
"message length (%d) in slot %d does not match with slot 0(%d)", length, i, length0)));
because pool_read_message_length() called ereport(ERROR) in this
case. Actually the caller pool_do_auth() prepared more informative
message:
ereport(ERROR,
(errmsg("invalid authentication packet from backend"),
errdetail("failed to get the authentication packet length"),
errhint("This is likely caused by the inconsistency of auth method among DB nodes. \
Please check the previous error messages (hint: length field) \
from pool_read_message_length and recheck the pg_hba.conf settings.")));
Change ereport(ERROR) to ereport(LOG) in pool_read_message_length() so
that the informative message actually shows up.
errdetail("slot: %d length: %d", i, length)));
if (length != length0)
- ereport(ERROR,
+ {
+ ereport(LOG,
(errmsg("unable to read message length"),
errdetail("message length (%d) in slot %d does not match with slot 0(%d)", length, i, length0)));
+ return -1;
+ }
}