Skip to content

Commit

Permalink
- Bump _yplib_timeout limit from 10 to 20 seconds to better handle
Browse files Browse the repository at this point in the history
  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
  • Loading branch information
simonlbn committed Mar 4, 2007
1 parent 6658163 commit 38eadf9
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion lib/libc/yp/yplib.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit 38eadf9

Please sign in to comment.