- Bump _yplib_timeout limit from 10 to 20 seconds to better handle

packet loss when talking to a NIS server.
- Set 1 second retry timeout to further realistically handle UDP
  packet loss for yp_next packet bursts.  If the packet hasn't come
  back within 1 second its rather unlikely to come back at all.  There
  is still back-off mechanism in RPC so if there is another reason
  than packet loss for the lack of response within 1 second, the NIS
  server will not be totally bombarded with requests.

This reduces the risk of NIS failing with:

     yp_next: clnt_call: RPC: Timed out

considerably.  This is mainly a problem if you have larger NIS maps
(like at FreeBSD.org) since enumerations of the lists will cause a UDP
packet bursts where a few packets being lost once in a while do
happen.

MFC after:	1 week
Discussed with:	peter
Problem mainly diagnosed by:	peter
This commit is contained in:
Simon L. B. Nielsen 2007-03-04 10:30:43 +00:00
parent 0dc55f7681
commit 2861f68d48
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=167197

View File

@ -103,7 +103,7 @@ void *ypresp_data;
static void _yp_unbind(struct dom_binding *);
struct dom_binding *_ypbindlist;
static char _yp_domain[MAXHOSTNAMELEN];
int _yplib_timeout = 10;
int _yplib_timeout = 20;
static mutex_t _ypmutex = MUTEX_INITIALIZER;
#define YPLOCK() mutex_lock(&_ypmutex);
@ -823,6 +823,14 @@ yp_next(char *indomain, char *inmap, char *inkey, int inkeylen,
return (YPERR_DOMAIN);
}
/*
* Set low retry timeout to realistically handle UDP packet
* loss for yp_next packet bursts.
*/
tv.tv_sec = 1;
tv.tv_usec = 0;
clnt_control(ysd->dom_client, CLSET_RETRY_TIMEOUT, (char*)&tv);
tv.tv_sec = _yplib_timeout;
tv.tv_usec = 0;