(unnamed)

text/plain

Filename: (unnamed)
Type: text/plain
Part: 0
Message: Re: Stats collector performance improvement
Index: src/backend/postmaster/pgstat.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v
retrieving revision 1.118
diff -c -c -r1.118 pgstat.c
*** src/backend/postmaster/pgstat.c	3 Jan 2006 19:54:08 -0000	1.118
--- src/backend/postmaster/pgstat.c	4 Jan 2006 23:22:44 -0000
***************
*** 1839,1845 ****
  	int			msg_recv = 0;	/* next receive index */
  	int			msg_have = 0;	/* number of bytes stored */
  	bool		overflow = false;
! 
  	/*
  	 * Identify myself via ps
  	 */
--- 1839,1847 ----
  	int			msg_recv = 0;	/* next receive index */
  	int			msg_have = 0;	/* number of bytes stored */
  	bool		overflow = false;
! 	bool		is_block_mode = false;
! 	int			cnt = 0, bloops = 0, nbloops = 0;
! 	
  	/*
  	 * Identify myself via ps
  	 */
***************
*** 1870,1875 ****
--- 1872,1921 ----
  	 */
  	msgbuffer = (char *) palloc(PGSTAT_RECVBUFFERSZ);
  
+ 
+ 	while (1)
+ 	{
+ #if 0
+ 		  FD_ZERO(&rfds);
+ 		  FD_ZERO(&wfds);
+ 		  maxfd = -1;
+ 			  FD_SET(pgStatSock, &rfds);
+ 			  maxfd = pgStatSock;
+ 	
+ 		  timeout.tv_sec = 0;
+ 		  timeout.tv_usec = 0;
+ 	
+ 		  select(maxfd + 1, &rfds, &wfds, NULL, &timeout);
+ #endif
+ 	
+ 			  if (is_block_mode)
+ 				  bloops++;
+ 			  else
+ 				  nbloops++;
+ 	
+ 			  len = recv(pgStatSock, (char *) &input_buffer,
+ 						 sizeof(PgStat_Msg), 0);
+ 			  if (len > 0)
+ 				  cnt += len;
+ 	
+ //fprintf(stderr, "len = %d, errno = %d\n", len, errno);
+ 	
+ 			  if (len > 0 && is_block_mode)
+ 			  {
+ 				  pg_set_noblock(pgStatSock);
+ 				  is_block_mode = false;
+ 			  }
+ 			  else if (len < 0 && errno == EAGAIN && !is_block_mode)
+ 			  {
+ 				  pg_set_block(pgStatSock);
+ 				  is_block_mode = true;
+ 			  }
+ //			  if ((bloops + nbloops)  % 1000 == 0)
+ //				  fprintf(stderr, "cnt = %d, len = %d, bloops = %d, nbloops = %d\n", cnt, len, bloops, nbloops);
+ 	}
+ 	
+ 	exit(1);
+ 
  	/*
  	 * Loop forever
  	 */