Chris Browne cbbrowne at lists.slony.info
Mon May 26 13:14:29 PDT 2008
Update of /home/cvsd/slony1/slony1-engine/src/slon
In directory main.slony.info:/tmp/cvs-serv8227

Modified Files:
	remote_listen.c 
Log Message:
Establish a maximum number of events (sel_max_events) to be processed
in an iteration in remote_listen.c's pull of events from a remote node.

This means that if a node is way, way, way behind (e.g. - tens or hundreds
of thousands of events behind), it won't try to get up to date in one
swell foop.



Index: remote_listen.c
===================================================================
RCS file: /home/cvsd/slony1/slony1-engine/src/slon/remote_listen.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -C2 -d -r1.43 -r1.44
*** remote_listen.c	23 Apr 2008 22:29:12 -0000	1.43
--- remote_listen.c	26 May 2008 20:14:27 -0000	1.44
***************
*** 66,69 ****
--- 66,71 ----
  int remote_listen_timeout;
  
+ static int sel_max_events = 0;
+ 
  /* ----------
   * slon_remoteListenThread
***************
*** 698,702 ****
  		slon_appendquery(&query, ")");
  	}
! 	slon_appendquery(&query, " order by e.ev_origin, e.ev_seqno");
  
  	rtcfg_unlock();
--- 700,708 ----
  		slon_appendquery(&query, ")");
  	}
! 	/* Limit the result set size to:
!             sync_group_maxsize * 2, if it's set
! 			100, if sync_group_maxsize isn't set */
! 	slon_appendquery(&query, " order by e.ev_origin, e.ev_seqno limit %d",
! 					 (sync_group_maxsize>0)? sync_group_maxsize * 2 : 100);
  
  	rtcfg_unlock();
***************
*** 755,758 ****
--- 761,771 ----
  	 */
  	ntuples = PQntuples(res);
+ 
+ 	/* If we drew in the maximum number of events */
+ 	if (ntuples == ((sync_group_maxsize>0)? sync_group_maxsize * 2 : 100))
+ 			sel_max_events++;   /* Add to the count... */
+ 	else
+ 			sel_max_events=0;   /* reset the count */
+ 
  	for (tupno = 0; tupno < ntuples; tupno++)
  	{
***************
*** 786,808 ****
  
  	if (ntuples > 0) {
! 		poll_sleep = 0;
! 		poll_state = SLON_POLLSTATE_POLL;
  	} else {
! 		poll_sleep = poll_sleep * 2 + sync_interval;
! 		if (poll_sleep > sync_interval_timeout) {
! 			poll_sleep = sync_interval_timeout;
! 			poll_state = SLON_POLLSTATE_LISTEN;
! 		}
  	}
  	PQclear(res);
! 
  	return 0;
  }
- 
- /*
-  * Local Variables:
-  *	tab-width: 4
-  *	c-indent-level: 4
-  *	c-basic-offset: 4
-  * End:
-  */
--- 799,822 ----
  
  	if (ntuples > 0) {
! 			if ((sel_max_events > 2) && (sync_group_maxsize > 100)) {
! 					poll_state = SLON_POLLSTATE_LISTEN;
! 					slon_log(SLON_INFO, "remoteListenThread_%d: drew maximum # of events for %d iterations\n",
! 							 node->no_id, sel_max_events);
! 					slon_log(SLON_INFO, "remoteListenThread_%d: sleep %ds, return to LISTEN mode\n",
! 							 node->no_id, 10+sel_max_events);
! 					sched_msleep(node, 10000 + (1000 * sel_max_events));
! 			} else {
! 					poll_sleep = 0;
! 					poll_state = SLON_POLLSTATE_POLL;
! 			}
  	} else {
! 			poll_sleep = poll_sleep * 2 + sync_interval;
! 			if (poll_sleep > sync_interval_timeout) {
! 					poll_sleep = sync_interval_timeout;
! 					poll_state = SLON_POLLSTATE_LISTEN;
! 			}
  	}
  	PQclear(res);
! 	last_event_sel = ntuples;
  	return 0;
  }



More information about the Slony1-commit mailing list