[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference help::decnet-osi_for_vms

Title:DECnet/OSI for OpenVMS
Moderator:TUXEDO::FONSECA
Created:Thu Feb 21 1991
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:3990
Total number of notes:19027

3942.0. "Problem with a DECnet server " by BALZAC::DAKONO (The thirdy thirth VIP station) Wed Apr 23 1997 04:43



	Hi,


	I have problem with a Digital <-> Bull communication software
	wich is working in Client Server mode over DECnet.

	The server part is made to handle more than 500 users (DECnet Client 
	Task).
	
	The VMS version is 6.2 (under AXP) and it uses DECnet Ph V.

	The problem arrives in a swizz Bank and i can not made lot of test
	because it is a production system and it is impossible to reproduce
	this kind of configuration at Digital.

	The problem seems to comes from a part of code written by a software
	house :

	When around 250 users are connected to the server the part of code 
	(an AST) wich waits messages in the DECnet service mailbox (where
	we receive Incomming connection or DECnet shutdown message ...)
	receive a message with 0 in the first block of IOSB, this return 
	code shutdowns the server and all users are disconnected ...

	Reading the source code i have some question ( i want to made the 
	right modification at the first try ...).
	
	1 Which event can produce this kind of return code in the AST ?

	2 All code is made with non blocking Qio execpt the IO$_ACCEPT
	  is it the right way to acceprt connection in this kind of server ? 
	  (perhaps it could takes somes seconds when lot of users are on 
	  the system)
	
	3 When the DECnet mailbox is created the size of Mailbox is 43000
	  and the size of message is set to 4300
	  Does it mean only 10 messages could be queued ?
	  What is the right message size for a DECnet mailbox wich should
	  handle incommonig call and DECnet service message ?
	

	J�r�me DAKONO
	Digital France
	
    
T.RTitleUserPersonal
Name
DateLines
3942.1RMULAC.DVO.DEC.COM::S_WATTUMScott Wattum - FTAM/VT/OSAK EngineeringWed Apr 23 1997 09:1532
>	1 Which event can produce this kind of return code in the AST ?

A completed QIO with an IOSB of zero *ALWAYS* indicates that more than one QIO
is using the same IOSB - in other words, it's a bug in the application code. 
Each QIO should be referencing a unique IOSB - no sharing allowed.  Fix the
application.

>	2 All code is made with non blocking Qio execpt the IO$_ACCEPT
>	  is it the right way to acceprt connection in this kind of server ? 
>	  (perhaps it could takes somes seconds when lot of users are on 
>	  the system)

It's fine.  It could be blocking or non-blocking.  I don't think a blocking
accept will actually block for a long time.  It seems a little inconsistant with
the apparent design philosophy of the application though; that is everything is
non-blocking except the accept.

>	3 When the DECnet mailbox is created the size of Mailbox is 43000
>	  and the size of message is set to 4300
>	  Does it mean only 10 messages could be queued ?

If the size of an actual message was 4300 bytes, then yes, only 10 messages
could be *pending* in the mailbox.  In practice, I don't think I've ever seen a
DECnet mailbox message that large - usually around 100 bytes or so if I recall
correctly (it's been awhile).  The right size of the for the buffer quota on the
mailbox would be a size sufficient to handle a message from every link at the
same time.  if you assume that messages will be no more than 256 bytes and you
plan on having at most 20 active links, then the buffer quota should be 20*256.
Larger buffer quotas don't penalize the application unless the quota is actually
used to hold a message.


3942.2RMULAC.DVO.DEC.COM::S_WATTUMScott Wattum - FTAM/VT/OSAK EngineeringWed Apr 23 1997 10:1230
AN IOSB of zero scenario usually falls into one of two cases, both of which are
timing related:

The first scenario is when you aren't doing QIO's from within AST routines;
this timing window is hard to hit because it depends on a QIO being done
just before an AST is delivered where both I/O's used the same IOSB.

QIO A issued with IOSB A and AST routine
(remember that the QIO zero's the IOSB right away before doing to I/O)
  :
 <time passes>
         QIO A completes, AST is queued for delivery; IOSB contains valid status
QIO B issued with IOSB A
QIO A AST routine delivered/invoked - whoops.... IOSB is zero

The second scenario is when you are doing QIO's from AST routines - this
is an easy timing window to hit if you spend a lot of time in the AST routine,
as AST delivery for the QIO in question is blocked until the current AST is
complete:

QIO A issued with IOSB A and AST routine
QIO B issued with IOSB B and AST routine
  :
        QIO B completes and AST routine is queued for delivery
QIO B AST routine delivered/invoked and starts processing
        QIO A completes and AST routine is queued for delivery
QIO B AST routine still active and issues QIO C with IOSB A, then rtn completes
QIO A AST routine delivered/invoked - whoops.... IOSB is zero

--Scott
3942.3ThanksBALZAC::DAKONOThe thirdy thirth VIP stationWed Apr 23 1997 17:188
    
    
    Hi,
    
    	Thanks i have found, as you told me a problem with an IOSB wich is
    used for two channel.
    
    Jerome