README for the "test2" example directory.
$Id: README,v 1.11 1997/11/17 18:43:36 spreitze Exp $

[ Copyright (c) 1995--1997 Xerox Corporation.  All Rights Reserved.  

  Unlimited use, reproduction, and distribution of this software is
  permitted.  Any copy of this software must include both the above
  copyright notice of Xerox Corporation and this paragraph.  Any
  distribution of this software must comply with all applicable United
  States export control laws.  This software is made available AS IS,
  and XEROX CORPORATION DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED,
  INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF MERCHANTABILITY
  AND FITNESS FOR A PARTICULAR PURPOSE, AND NOTWITHSTANDING ANY OTHER
  PROVISION CONTAINED HEREIN, ANY LIABILITY FOR DAMAGES RESULTING FROM
  THE SOFTWARE OR ITS USE IS EXPRESSLY DISCLAIMED, WHETHER ARISING IN
  CONTRACT, TORT (INCLUDING NEGLIGENCE) OR STRICT LIABILITY, EVEN IF
  XEROX CORPORATION IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ]

This directory is intended for tests of non-mainstream features.
There are currently five: a test of concurrent protocols, a test of
ASYNCHRONOUS methods, a test of pipelining,
and a test of call order preservation (AKA serialization),
and a test of both pipelining and call order preservation.
All examples are available only in C.


I.  Concurrent Protocols

The concurrent protocol test consists of two objects that call each
other in a mutual recursion of selectable depth (and constant
branching factor of 2).  They compute a Fibbonacci number according to
the definition (Fib(n) = Fib(n-1) + Fib(n-2)), with each recursive
call going between the two objects.

The concurrent protocol test consists of one program, `fp`; command
line arguments tell it whether to be a server or client.  The
arguments to the client say which Fibbonacci is to be computed.  Both
sides take optional arguments specifying "pinfo" and "tinfo".  The
test is most interesting when a concurrent "pinfo" is given.

To build the concurrent protocol test,

% ilumkmf
% make fp

To run the server,

% setenv ILU_DEBUG SUNRPCRM
% ./fp
Usage: ./fp [-p pinfo] [-t tinfo [tinfo...]] [-st | -mt | -mte] (-s | -c n)
% ./fp -p csunrpc -s
ILU version 2.0alpha7.6.  Copyright 1990-1996 Xerox Corporation.
------------------------------------------------------------
Configuration info: big-endian, is BSD, is POSIX, Solaris 2 threads, size_t=size_t
  char=1s, short=2, int=4, long=4, void *=4, fnptr=4, long long=8, long double=16, enum=4,
  protocols = sunrpc courier iiop, transports = inmem tcp udp sunrpcrm secure,
  binding via shared files in /project/rpc/current/lib/binding
------------------------------------------------------------
ilu_SetDebugLevel:  setting debug mask from 0x0 to 0x80000
sunrpcrm(156a68): CreateMooring(lower=156a48)
my SBH = 'ilu:Fibber-Test-Server/it;ilu%3Ai5P8tLpwvh+a8ordp1Z3rnZVdlF;csunrpc_2_0x61a78_1266674080@sunrpcrm=tcp_13.2.116.108_46647'
Serving...

Then run the client

% setenv ILU_DEBUG SUNRPCRM
% ./fp -p csunrpc -c 4
ILU version 2.0alpha7.6.  Copyright 1990-1996 Xerox Corporation.
------------------------------------------------------------
Configuration info: big-endian, is BSD, is POSIX, Solaris 2 threads, size_t=size_t
  char=1s, short=2, int=4, long=4, void *=4, fnptr=4, long long=8, long double=16, enum=4,
  protocols = sunrpc courier iiop, transports = inmem tcp udp sunrpcrm secure,
  binding via shared files in /project/rpc/current/lib/binding
------------------------------------------------------------
ilu_SetDebugLevel:  setting debug mask from 0x0 to 0x80000
sunrpcrm(156a28): CreateMooring(lower=156a08)
my SBH = 'ilu:13.2.116.108.dc5.31be547a.2f96/it;ilu%3Ai5P8tLpwvh+a8ordp1Z3rnZVdlF;csunrpc_2_0x61a78_1266674080@sunrpcrm=tcp_13.2.116.108_46648'
sunrpcrm:NewTrans(lower=15b120) = 15b260
sunrpcrm(15b260): BeginMessage(output)
sunrpcrm(15b260): EndMessage(output, flush=1, last chunkSize=144)
sunrpcrm(15b260): BeginMessage(input)
sunrpcrm(15b260): Read 28 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b260): Parse header of length 24 chunk (last=1), 24 in buffer.
sunrpcrm(15b260): EndMessage(input)
sunrpcrm(15b260): BeginMessage(output)
sunrpcrm(15b260): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm:NewTrans(lower=15b410) = 15f6e0
sunrpcrm(15f6e0): BeginMessage(input)
sunrpcrm(15f6e0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15f6e0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15f6e0): EndMessage(input)
..fib(3, d=2): calling step 1.
sunrpcrm(15b260): BeginMessage(output)
sunrpcrm(15b260): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm(15f6e0): BeginMessage(input)
sunrpcrm(15f6e0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15f6e0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15f6e0): EndMessage(input)
....fib(1, d=4): returning 1.
sunrpcrm(15f6e0): BeginMessage(output)
sunrpcrm(15f6e0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15f6e0): BeginMessage(input)
sunrpcrm(15f6e0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15f6e0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15f6e0): EndMessage(input)
....fib(0, d=4): returning 1.
sunrpcrm(15f6e0): BeginMessage(output)
sunrpcrm(15f6e0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15b260): BeginMessage(input)
sunrpcrm(15b260): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b260): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b260): EndMessage(input)
..fib(3, d=2): calling step 2.
sunrpcrm(15b260): BeginMessage(output)
sunrpcrm(15b260): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm(15b260): BeginMessage(input)
sunrpcrm(15b260): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b260): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b260): EndMessage(input)
..fib(3, d=2): returning 3.
sunrpcrm(15f6e0): BeginMessage(output)
sunrpcrm(15f6e0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15b260): BeginMessage(input)
sunrpcrm(15b260): Read 0 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15f6e0): BeginMessage(input)
sunrpcrm(15f6e0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15f6e0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15f6e0): EndMessage(input)
..fib(2, d=2): calling step 1.
sunrpcrm(15b260): BeginMessage(output)
sunrpcrm(15b260): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm(15b260): BeginMessage(input)
sunrpcrm(15b260): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b260): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b260): EndMessage(input)
..fib(2, d=2): calling step 2.
sunrpcrm(15b260): BeginMessage(output)
sunrpcrm(15b260): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm(15b260): BeginMessage(input)
sunrpcrm(15b260): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b260): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b260): EndMessage(input)
..fib(2, d=2): returning 2.
sunrpcrm(15f6e0): BeginMessage(output)
sunrpcrm(15f6e0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15b260): BeginMessage(input)
sunrpcrm(15b260): Read 0 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b260): BeginMessage(input)
sunrpcrm(15b260): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b260): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b260): EndMessage(input)
Fib(4) = 5
% 

which should provoke output like the following on the server:

sunrpcrm:NewTrans(lower=15ab68) = 15abf0
sunrpcrm(15abf0): BeginMessage(input)
sunrpcrm(15abf0): Read 148 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15abf0): Parse header of length 144 chunk (last=1), 144 in buffer.
sunrpcrm(15abf0): EndMessage(input)
sunrpcrm(15abf0): BeginMessage(output)
sunrpcrm(15abf0): EndMessage(output, flush=1, last chunkSize=24)
sunrpcrm(15abf0): BeginMessage(input)
sunrpcrm(15abf0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15abf0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15abf0): EndMessage(input)
.fib(4, d=1): calling step 1.
sunrpcrm:NewTrans(lower=15ace0) = 15b498
sunrpcrm(15b498): BeginMessage(output)
sunrpcrm(15b498): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm(15abf0): BeginMessage(input)
sunrpcrm(15abf0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15abf0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15abf0): EndMessage(input)
...fib(2, d=3): calling step 1.
sunrpcrm(15b498): BeginMessage(output)
sunrpcrm(15b498): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm(15b498): BeginMessage(input)
sunrpcrm(15b498): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b498): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b498): EndMessage(input)
...fib(2, d=3): calling step 2.
sunrpcrm(15b498): BeginMessage(output)
sunrpcrm(15b498): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm(15b498): BeginMessage(input)
sunrpcrm(15b498): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b498): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b498): EndMessage(input)
...fib(2, d=3): returning 2.
sunrpcrm(15abf0): BeginMessage(output)
sunrpcrm(15abf0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15b498): BeginMessage(input)
sunrpcrm(15b498): Read 0 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15abf0): BeginMessage(input)
sunrpcrm(15abf0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15abf0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15abf0): EndMessage(input)
...fib(1, d=3): returning 1.
sunrpcrm(15abf0): BeginMessage(output)
sunrpcrm(15abf0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15b498): BeginMessage(input)
sunrpcrm(15b498): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b498): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b498): EndMessage(input)
.fib(4, d=1): calling step 2.
sunrpcrm(15b498): BeginMessage(output)
sunrpcrm(15b498): EndMessage(output, flush=1, last chunkSize=288)
sunrpcrm(15abf0): BeginMessage(input)
sunrpcrm(15abf0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15abf0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15abf0): EndMessage(input)
...fib(1, d=3): returning 1.
sunrpcrm(15abf0): BeginMessage(output)
sunrpcrm(15abf0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15abf0): BeginMessage(input)
sunrpcrm(15abf0): Read 292 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15abf0): Parse header of length 288 chunk (last=1), 288 in buffer.
sunrpcrm(15abf0): EndMessage(input)
...fib(0, d=3): returning 1.
sunrpcrm(15abf0): BeginMessage(output)
sunrpcrm(15abf0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15b498): BeginMessage(input)
sunrpcrm(15b498): Read 36 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b498): Parse header of length 32 chunk (last=1), 32 in buffer.
sunrpcrm(15b498): EndMessage(input)
.fib(4, d=1): returning 5.
sunrpcrm(15abf0): BeginMessage(output)
sunrpcrm(15abf0): EndMessage(output, flush=1, last chunkSize=32)
sunrpcrm(15abf0): BeginMessage(input)
sunrpcrm(15abf0): Read 0 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15abf0): No more messages incoming.
sunrpcrm(15abf0): Close(lower=15ab68)
sunrpcrm(15b498): BeginMessage(input)
sunrpcrm(15b498): Read 0 more bytes, in addition to 0 previous, of next chunk (incl header).
sunrpcrm(15b498): No more messages incoming.
sunrpcrm(15b498): Close(lower=15ace0)

Check that "sunrpcrm:NewTrans" is printed exactly twice on each side;
that's evidence that multiple calls are sometimes outstanding on
connections.

This program can also be used to test multi-threading.  Giving the "-mt" switch causes OS-supplied threads to be used, if support for them is configured into ILU.  Giving the "-mte" switch goes further and causes each Fibbonacci calculation to be done by forking two threads to do the recursive calls.  "-st" requests single-threaded execution (the default, regardless of configuration).  Don't expect "sunrpcrm:NewTrans" to be printed exactly twice when using multiple threads.


II.  ASYNCHRONOUS Methods

The ASYNCHRONOUS method test involves two methods: a ASYNCHRONOUS and
a normal (synchronous) one.  The client consists of two nested loops.
Each iteration of the outer loop calls the ASYNCHRONOUS method NSEND
times (this is the inner loop), and then the synchronous method once.
The outer loop is repeated NSYNC times.  On each call, the client
passes the time (ilu_FineTime, to be specific) of the start of the
call, and the server records the time at which the actual method
executes.  The client sleeps for 1 second after each call on the
ASYNCHRONOUS method, to give clean separations of the times.  The
synchronous method returns this record of pairs of times, and clears
the timing buffer for the next series.  The client prints out the
pairs of times.  If the ASYNCHRONOUS feature is working, you should
see that in each series all call times precede all serving times.

The server takes optional arguments specifying pinfo and tinfo.
There is also a verbosity switch, and a parameter to make the synchronous
method delay before returning --- don't bother with it for this test.

To build the ASYNCHRONOUS method test,

% ilumkmf
% make bsvr bclnt

To run the server,

% ./bsvr -help
Usage: ./bsvr [-v] [-s sleep] [-p pinfo] [-t tinfo [tinfo...]]
% ./bsvr -p bsunrpc
SBH = 'ilu:Batcher-Server/it;ilu%3Ak-lmMaRANKW88bREv8w2Uuu9erm;bsunrpc_2_0x61a78_1903640186@sunrpcrm=tcp_13.2.116.14_2197'

Then run the client:

% ./bclnt
Usage: ./bclnt n-syncs n-sends-per-sync
% ./bclnt 3 3
Ans(0) = 4
        808701766.206907->808701769.241622
        808701767.219225->808701769.242611
        808701768.230319->808701769.243263
        808701769.239055->808701769.243915

Ans(1) = 4
        808701769.264150->808701772.291410
        808701770.269161->808701772.292069
        808701771.281031->808701772.292706
        808701772.289489->808701772.293348

Ans(2) = 4
        808701772.307187->808701775.332846
        808701773.309603->808701775.333504
        808701774.319827->808701775.334145
        808701775.330895->808701775.334786

% 


III.  Pipelining

This test uses the same server as the previous, and a different client.  To build:

% ilumkmf
% make bsvr bclntp

When invoking the server, use the "-s <sleep>" parameter to cause it to pause <sleep> seconds inside the synchronous method:

% ./bsvr -help
Usage: ./bsvr [-v] [-s sleep] [-p pinfo] [-t tinfo [tinfo...]]
% ./bsvr -s 2
tosleep = 2
SBH = 'ilu:Batcher-Server/it;ilu%3Aa63ScIfREIiKucXgN4R+iPud+nt;sunrpc@sunrpcrm=tcp_13.2.116.32_48277'

This delay gives the client an easy chance to actually pile up some calls in a pipeline.  The client simply creates one ilu_Pipeline and makes a given number of calls on it.  If multi-threading support is configured in, the client can optionally make the calls from independent threads.

To evaluate this test, use the CALL debug flag to see whether all the calls are made on the same connection.

% setenv ILU_DEBUG CALL

% ./bclntp
Usage: ./bclntp n-syncs [-v] [-pl|+pl] [-mt|-st]

% ./bclntp 3
ILU version 2.0a10.5.  Copyright 1990-1996 Xerox Corporation.
------------------------------------------------------------
Configuration info: big-endian, is BSD, is POSIX, no threads, variant, size_t=size_t,
  char=1s, short=2, int=4, long=4, void *=4, fnptr=4, long long=0, long double=16, enum=4,
  arch=sparc-sun-sunos4.1.3_U1, compiler="/project/rpc/tools/filtered-acc",
  ANSI C lib="/import/sc3.0.1/solaris-1/SC3.0.1/lib/libansi.a", sys aux libs="",
  protocols = sunrpc courier iiop http, transports = inmem tcp sunrpcrm w3mux batching,
  binding via shared files in /project/rpc/registries/test
------------------------------------------------------------
ilu_SetDebugLevel:  setting debug mask from 0x0 to 0x400
ilu_StartCall       (efffdc48 over 1513a0 to "Batcher-Server" #1, ilu.Object.ILUPing, pl=0, si=0).
ilu_StartRequest    (efffdc48 over 1513a0 to "Batcher-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffdc48 over 1513a0 to "Batcher-Server" #1)
ilu_GetReply        (efffdc48 over 1513a0 to "Batcher-Server" #1)...
ilu_GetReply        (efffdc48 over 1513a0 to "Batcher-Server" #1) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffdc48 over 1513a0 to "Batcher-Server" #1) => success
ilu_FinishCall      (efffdc48 over 1513a0 to "Batcher-Server" #1, pl=0, si=0) => err=success ca_pe=Success
Doing 3 syncs, pipelined.
ilu_StartCall       (efffe524 over 1513a0 to "Batcher-Server" #2, Batcher.T.Sync, pl=152e10, si=0).
ilu_StartRequest    (efffe524 over 1513a0 to "Batcher-Server" #2, argSize 0) => success
ilu_FinishRequest   (efffe524 over 1513a0 to "Batcher-Server" #2)
ilu_GetReply        (efffe524 over 1513a0 to "Batcher-Server" #2)...
ilu_StartCall       (efffd454 over 1513a0 to "Batcher-Server" #3, Batcher.T.Sync, pl=152e10, si=0).
ilu_StartRequest    (efffd454 over 1513a0 to "Batcher-Server" #3, argSize 0) => success
ilu_FinishRequest   (efffd454 over 1513a0 to "Batcher-Server" #3)
ilu_GetReply        (efffd454 over 1513a0 to "Batcher-Server" #3)...
ilu_StartCall       (efffc384 over 1513a0 to "Batcher-Server" #4, Batcher.T.Sync, pl=152e10, si=0).
ilu_StartRequest    (efffc384 over 1513a0 to "Batcher-Server" #4, argSize 0) => success
ilu_FinishRequest   (efffc384 over 1513a0 to "Batcher-Server" #4)
ilu_GetReply        (efffc384 over 1513a0 to "Batcher-Server" #4)...
ilu_GetReply        (efffc384 over 1513a0 to "Batcher-Server" #4) queueing reply for SN #2.
ilu_GetReply        (efffc384 over 1513a0 to "Batcher-Server" #4) queueing reply for SN #3.
ilu_GetReply        (efffc384 over 1513a0 to "Batcher-Server" #4) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffc384 over 1513a0 to "Batcher-Server" #4) => success
ilu_FinishCall      (efffc384 over 1513a0 to "Batcher-Server" #4, pl=152e10, si=0) => err=success ca_pe=Success
Sync_0() = 1
	874995217.006525->874995221.037732

ilu_GetReply        (efffd454 over 1513a0 to "Batcher-Server" #3) => (from queue) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffd454 over 1513a0 to "Batcher-Server" #3) => success
ilu_FinishCall      (efffd454 over 1513a0 to "Batcher-Server" #3, pl=152e10, si=0) => err=success ca_pe=Success
Sync_1() = 1
	874995217.001569->874995219.019064

ilu_GetReply        (efffe524 over 1513a0 to "Batcher-Server" #2) => (from queue) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffe524 over 1513a0 to "Batcher-Server" #2) => success
ilu_FinishCall      (efffe524 over 1513a0 to "Batcher-Server" #2, pl=152e10, si=0) => err=success ca_pe=Success
Sync_2() = 1
	874995216.992371->874995216.999863

% 


For comparison, give the "-pl" switch to disable the use of an ilu_Pipeline; observe that the calls are made on different ilu_Connections:

% ./bclntp 3 -pl
ILU version 2.0a10.5.  Copyright 1990-1996 Xerox Corporation.
------------------------------------------------------------
Configuration info: big-endian, is BSD, is POSIX, no threads, variant, size_t=size_t,
  char=1s, short=2, int=4, long=4, void *=4, fnptr=4, long long=0, long double=16, enum=4,
  arch=sparc-sun-sunos4.1.3_U1, compiler="/project/rpc/tools/filtered-acc",
  ANSI C lib="/import/sc3.0.1/solaris-1/SC3.0.1/lib/libansi.a", sys aux libs="",
  protocols = sunrpc courier iiop http, transports = inmem tcp sunrpcrm w3mux batching,
  binding via shared files in /project/rpc/registries/test
------------------------------------------------------------
ilu_SetDebugLevel:  setting debug mask from 0x0 to 0x400
ilu_StartCall       (efffdc40 over 1513a0 to "Batcher-Server" #1, ilu.Object.ILUPing, pl=0, si=0).
ilu_StartRequest    (efffdc40 over 1513a0 to "Batcher-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffdc40 over 1513a0 to "Batcher-Server" #1)
ilu_GetReply        (efffdc40 over 1513a0 to "Batcher-Server" #1)...
ilu_GetReply        (efffdc40 over 1513a0 to "Batcher-Server" #1) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffdc40 over 1513a0 to "Batcher-Server" #1) => success
ilu_FinishCall      (efffdc40 over 1513a0 to "Batcher-Server" #1, pl=0, si=0) => err=success ca_pe=Success
Doing 3 syncs, not pipelined.
ilu_StartCall       (efffe51c over 1513a0 to "Batcher-Server" #2, Batcher.T.Sync, pl=0, si=0).
ilu_StartRequest    (efffe51c over 1513a0 to "Batcher-Server" #2, argSize 0) => success
ilu_FinishRequest   (efffe51c over 1513a0 to "Batcher-Server" #2)
ilu_GetReply        (efffe51c over 1513a0 to "Batcher-Server" #2)...
ilu_StartCall       (efffd44c over 157030 to "Batcher-Server" #1, Batcher.T.Sync, pl=0, si=0).
ilu_StartRequest    (efffd44c over 157030 to "Batcher-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffd44c over 157030 to "Batcher-Server" #1)
ilu_GetReply        (efffd44c over 157030 to "Batcher-Server" #1)...
ilu_StartCall       (efffc37c over 15b218 to "Batcher-Server" #1, Batcher.T.Sync, pl=0, si=0).
ilu_StartRequest    (efffc37c over 15b218 to "Batcher-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffc37c over 15b218 to "Batcher-Server" #1)
ilu_GetReply        (efffc37c over 15b218 to "Batcher-Server" #1)...
ilu_GetReply        (efffc37c over 15b218 to "Batcher-Server" #1) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffc37c over 15b218 to "Batcher-Server" #1) => success
ilu_FinishCall      (efffc37c over 15b218 to "Batcher-Server" #1, pl=0, si=0) => err=success ca_pe=Success
Sync_0() = 1
	874995400.096899->874995402.100228

ilu_GetReply        (efffd44c over 157030 to "Batcher-Server" #1) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffd44c over 157030 to "Batcher-Server" #1) => success
ilu_FinishCall      (efffd44c over 157030 to "Batcher-Server" #1, pl=0, si=0) => err=success ca_pe=Success
Sync_1() = 1
	874995400.088098->874995404.119394

ilu_GetReply        (efffe51c over 1513a0 to "Batcher-Server" #2) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffe51c over 1513a0 to "Batcher-Server" #2) => success
ilu_FinishCall      (efffe51c over 1513a0 to "Batcher-Server" #2, pl=0, si=0) => err=success ca_pe=Success
Sync_2() = 1
	874995400.078238->874995400.086210

%


The Java version of this test:
Some source code is included, but at this time the java code has not been tested.


IV.  Call Order Preservation (AKA Serialization)

The server simply prints out notes of calls, and every 45 seconds closes all its idle connections.  To build:

% ilumkmf
% make stsrvr stclnt

Running the server looks like this:

% ./stsrvr
SBH = 'ilu:SerialTest-Server/it;ilu%3AdtZlS3R9meEQUIBfvCnSu0rPyrM;sunrpc@sunrpcrm=tcp_13.2.116.32_48187'
M(0, 5)
M(2, 5)
M(1, 5)
M(0, 4)
M(2, 4)
M(2, 3)
M(0, 3)
M(2, 2)
M(1, 4)
M(1, 3)
M(1, 2)
M(1, 1)

873836681 FD usage = 1
M(0, 2)
M(2, 1)
M(0, 1)

873836726 FD usage = 1

The client makes a given number of calls over a given number of serialization channels.  Each channel's calls are spaced at random intervals, drawn uniformly from the interval [0, 20.26] seconds.  The client prints something like

Calling M(0, 5) at 873836647:3081

before issuing each call.  The first parameter identifies the channel; the second counts down from the given number of calls to 1.  The last thing on the line is the ilu_FineTime of the call.

To evaluate this test, you have to understand the implementation.  Each ilu_Serializer is associated with one ilu_Connection at a time; calls associated with a given ilu_Serializer are sent over its associated ilu_Connection.  The Serializer/Connection association is only changed when the ilu_Connection closes.  When switching to a new connection at a time when it's not known whether the last call has finished executing on the server, the client's next call has to be a barrier call.  Use the CALL debug flag to get debugging output that reveals which connection is used for which call; check that the Serializer/Connection association behaves as designed.  Check that the barrier exception is raised as needed.

Running the client looks like this:

% setenv ILU_DEBUG CALL

% ./stclnt 3 6
ILU version 2.0a10.5.  Copyright 1990-1996 Xerox Corporation.
------------------------------------------------------------
Configuration info: big-endian, is BSD, is POSIX, no threads, variant, size_t=size_t,
  char=1s, short=2, int=4, long=4, void *=4, fnptr=4, long long=0, long double=16, enum=4,
  arch=sparc-sun-sunos4.1.3_U1, compiler="/project/rpc/tools/filtered-acc",
  ANSI C lib="/import/sc3.0.1/solaris-1/SC3.0.1/lib/libansi.a", sys aux libs="",
  protocols = sunrpc courier iiop http, transports = inmem tcp sunrpcrm w3mux batching,
  binding via shared files in /project/rpc/registries/test
------------------------------------------------------------
ilu_SetDebugLevel:  setting debug mask from 0x0 to 0x400
ilu_StartCall       (efffe028 over 14ee98 to "SerialTest-Server" #1, ilu.Object.ILUPing, pl=0, si=0).
ilu_StartRequest    (efffe028 over 14ee98 to "SerialTest-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffe028 over 14ee98 to "SerialTest-Server" #1)
ilu_GetReply        (efffe028 over 14ee98 to "SerialTest-Server" #1)...
ilu_GetReply        (efffe028 over 14ee98 to "SerialTest-Server" #1) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffe028 over 14ee98 to "SerialTest-Server" #1) => success
ilu_FinishCall      (efffe028 over 14ee98 to "SerialTest-Server" #1, pl=0, si=0) => err=success ca_pe=Success
ilu_StartCall       (effff094 over 14ee98 to "SerialTest-Server" #2, SerialTest.T.Prep, pl=0, si=0).
ilu_StartRequest    (effff094 over 14ee98 to "SerialTest-Server" #2, argSize 0) => success
ilu_FinishRequest   (effff094 over 14ee98 to "SerialTest-Server" #2)
ilu_GetReply        (effff094 over 14ee98 to "SerialTest-Server" #2)...
ilu_GetReply        (effff094 over 14ee98 to "SerialTest-Server" #2) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (effff094 over 14ee98 to "SerialTest-Server" #2) => success
ilu_FinishCall      (effff094 over 14ee98 to "SerialTest-Server" #2, pl=0, si=0) => err=success ca_pe=Success
Calling M(0, 6) at 874994965:788547
ilu_StartCall       (efffe99c over 14ee98 to "SerialTest-Server" #3, SerialTest.T.M, pl=0, si=150928).
ilu_StartRequest    (efffe99c over 14ee98 to "SerialTest-Server" #3, argSize 0) => success
ilu_FinishRequest   (efffe99c over 14ee98 to "SerialTest-Server" #3)
ilu_FinishCall      (efffe99c over 14ee98 to "SerialTest-Server" #3, pl=0, si=150928) => err=success ca_pe=Success
Calling M(1, 6) at 874994973:389808
ilu_StartCall       (efffe99c over 154bd0 to "SerialTest-Server" #1, SerialTest.T.M, pl=0, si=150988).
ilu_StartRequest    (efffe99c over 154bd0 to "SerialTest-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffe99c over 154bd0 to "SerialTest-Server" #1)
ilu_FinishCall      (efffe99c over 154bd0 to "SerialTest-Server" #1, pl=0, si=150988) => err=success ca_pe=Success
Calling M(2, 6) at 874994975:220077
ilu_StartCall       (efffe99c over 158db8 to "SerialTest-Server" #1, SerialTest.T.M, pl=0, si=1509e8).
ilu_StartRequest    (efffe99c over 158db8 to "SerialTest-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffe99c over 158db8 to "SerialTest-Server" #1)
ilu_FinishCall      (efffe99c over 158db8 to "SerialTest-Server" #1, pl=0, si=1509e8) => err=success ca_pe=Success
Calling M(0, 5) at 874994983:41370
ilu_StartCall       (efffe99c over 14ee98 to "SerialTest-Server" #4, SerialTest.T.M, pl=0, si=150928).
ilu_StartRequest    (efffe99c over 14ee98 to "SerialTest-Server" #4, argSize 0) => success
ilu_FinishRequest   (efffe99c over 14ee98 to "SerialTest-Server" #4)
ilu_FinishCall      (efffe99c over 14ee98 to "SerialTest-Server" #4, pl=0, si=150928) => err=success ca_pe=Success
Calling M(1, 5) at 874994988:662125
ilu_StartCall       (efffe99c over 154bd0 to "SerialTest-Server" #2, SerialTest.T.M, pl=0, si=150988).
ilu_StartRequest    (efffe99c over 154bd0 to "SerialTest-Server" #2, argSize 0) => success
ilu_FinishRequest   (efffe99c over 154bd0 to "SerialTest-Server" #2)
ilu_FinishCall      (efffe99c over 154bd0 to "SerialTest-Server" #2, pl=0, si=150988) => err=success ca_pe=Success
Calling M(2, 5) at 874994992:282740
ilu_StartCall       (efffe99c over 158db8 to "SerialTest-Server" #2, SerialTest.T.M, pl=0, si=1509e8).
ilu_StartRequest    (efffe99c over 158db8 to "SerialTest-Server" #2, argSize 0) => success
ilu_FinishRequest   (efffe99c over 158db8 to "SerialTest-Server" #2)
ilu_FinishCall      (efffe99c over 158db8 to "SerialTest-Server" #2, pl=0, si=1509e8) => err=success ca_pe=Success
Calling M(0, 4) at 874995000:193819
ilu_StartCall(serializer 150928, connection 14ee98) is barrier because conn. closed or closing.
ilu_StartCall       (to SerialTest-Server, SerialTest.T.M, pl=0, si=150928) raises err barrier (from call.c ln 411).
M(0, 4) => ILU: call is barrier call
Calling M(0, 4) at 874995007:254981
ilu_StartCall       (efffe99c over 154ad8 to "SerialTest-Server" #1, SerialTest.T.M, pl=0, si=150928).
ilu_StartRequest    (efffe99c over 154ad8 to "SerialTest-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffe99c over 154ad8 to "SerialTest-Server" #1)
ilu_FinishCall      (efffe99c over 154ad8 to "SerialTest-Server" #1, pl=0, si=150928) => err=success ca_pe=Success
Calling M(1, 4) at 874995008:435383
ilu_StartCall(serializer 150988, connection 154bd0) is barrier because conn. closed or closing.
ilu_StartCall       (to SerialTest-Server, SerialTest.T.M, pl=0, si=150988) raises err barrier (from call.c ln 411).
M(1, 4) => ILU: call is barrier call
Calling M(2, 4) at 874995009:495267
ilu_StartCall(serializer 1509e8, connection 158db8) is barrier because conn. closed or closing.
ilu_StartCall       (to SerialTest-Server, SerialTest.T.M, pl=0, si=1509e8) raises err barrier (from call.c ln 411).
M(2, 4) => ILU: call is barrier call
Calling M(1, 4) at 874995016:716408
ilu_StartCall       (efffe99c over 154ba8 to "SerialTest-Server" #1, SerialTest.T.M, pl=0, si=150988).
ilu_StartRequest    (efffe99c over 154ba8 to "SerialTest-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffe99c over 154ba8 to "SerialTest-Server" #1)
ilu_FinishCall      (efffe99c over 154ba8 to "SerialTest-Server" #1, pl=0, si=150988) => err=success ca_pe=Success
Calling M(1, 3) at 874995020:346954
ilu_StartCall       (efffe99c over 154ba8 to "SerialTest-Server" #2, SerialTest.T.M, pl=0, si=150988).
ilu_StartRequest    (efffe99c over 154ba8 to "SerialTest-Server" #2, argSize 0) => success
ilu_FinishRequest   (efffe99c over 154ba8 to "SerialTest-Server" #2)
ilu_FinishCall      (efffe99c over 154ba8 to "SerialTest-Server" #2, pl=0, si=150988) => err=success ca_pe=Success
Calling M(2, 4) at 874995022:597264
ilu_StartCall       (efffe99c over 158c78 to "SerialTest-Server" #1, SerialTest.T.M, pl=0, si=1509e8).
ilu_StartRequest    (efffe99c over 158c78 to "SerialTest-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffe99c over 158c78 to "SerialTest-Server" #1)
ilu_FinishCall      (efffe99c over 158c78 to "SerialTest-Server" #1, pl=0, si=1509e8) => err=success ca_pe=Success
Calling M(2, 3) at 874995026:807943
ilu_StartCall       (efffe99c over 158c78 to "SerialTest-Server" #2, SerialTest.T.M, pl=0, si=1509e8).
ilu_StartRequest    (efffe99c over 158c78 to "SerialTest-Server" #2, argSize 0) => success
ilu_FinishRequest   (efffe99c over 158c78 to "SerialTest-Server" #2)
ilu_FinishCall      (efffe99c over 158c78 to "SerialTest-Server" #2, pl=0, si=1509e8) => err=success ca_pe=Success
Calling M(0, 3) at 874995027:488047
ilu_StartCall       (efffe99c over 154ad8 to "SerialTest-Server" #2, SerialTest.T.M, pl=0, si=150928).
ilu_StartRequest    (efffe99c over 154ad8 to "SerialTest-Server" #2, argSize 0) => success
ilu_FinishRequest   (efffe99c over 154ad8 to "SerialTest-Server" #2)
ilu_FinishCall      (efffe99c over 154ad8 to "SerialTest-Server" #2, pl=0, si=150928) => err=success ca_pe=Success
Calling M(1, 2) at 874995039:559954
ilu_StartCall       (efffe99c over 154ba8 to "SerialTest-Server" #3, SerialTest.T.M, pl=0, si=150988).
ilu_StartRequest    (efffe99c over 154ba8 to "SerialTest-Server" #3, argSize 0) => success
ilu_FinishRequest   (efffe99c over 154ba8 to "SerialTest-Server" #3)
ilu_FinishCall      (efffe99c over 154ba8 to "SerialTest-Server" #3, pl=0, si=150988) => err=success ca_pe=Success
Calling M(0, 2) at 874995039:699937
ilu_StartCall       (efffe99c over 154ad8 to "SerialTest-Server" #3, SerialTest.T.M, pl=0, si=150928).
ilu_StartRequest    (efffe99c over 154ad8 to "SerialTest-Server" #3, argSize 0) => success
ilu_FinishRequest   (efffe99c over 154ad8 to "SerialTest-Server" #3)
ilu_FinishCall      (efffe99c over 154ad8 to "SerialTest-Server" #3, pl=0, si=150928) => err=success ca_pe=Success
Calling M(2, 2) at 874995043:830641
ilu_StartCall       (efffe99c over 158c78 to "SerialTest-Server" #3, SerialTest.T.M, pl=0, si=1509e8).
ilu_StartRequest    (efffe99c over 158c78 to "SerialTest-Server" #3, argSize 0) => success
ilu_FinishRequest   (efffe99c over 158c78 to "SerialTest-Server" #3)
ilu_FinishCall      (efffe99c over 158c78 to "SerialTest-Server" #3, pl=0, si=1509e8) => err=success ca_pe=Success
Calling M(1, 1) at 874995052:71798
ilu_StartCall(serializer 150988, connection 154ba8) is barrier because conn. closed or closing.
ilu_StartCall       (to SerialTest-Server, SerialTest.T.M, pl=0, si=150988) raises err barrier (from call.c ln 411).
M(1, 1) => ILU: call is barrier call
Calling M(0, 1) at 874995054:292203
ilu_StartCall(serializer 150928, connection 154ad8) is barrier because conn. closed or closing.
ilu_StartCall       (to SerialTest-Server, SerialTest.T.M, pl=0, si=150928) raises err barrier (from call.c ln 411).
M(0, 1) => ILU: call is barrier call
Calling M(1, 1) at 874995056:442752
ilu_StartCall       (efffe99c over 158bc8 to "SerialTest-Server" #1, SerialTest.T.M, pl=0, si=150988).
ilu_StartRequest    (efffe99c over 158bc8 to "SerialTest-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffe99c over 158bc8 to "SerialTest-Server" #1)
ilu_FinishCall      (efffe99c over 158bc8 to "SerialTest-Server" #1, pl=0, si=150988) => err=success ca_pe=Success
Calling M(2, 1) at 874995057:2610
ilu_StartCall(serializer 1509e8, connection 158c78) is barrier because conn. closed or closing.
ilu_StartCall       (to SerialTest-Server, SerialTest.T.M, pl=0, si=1509e8) raises err barrier (from call.c ln 411).
M(2, 1) => ILU: call is barrier call
Calling M(2, 1) at 874995067:254730
ilu_StartCall       (efffe99c over 158bc8 to "SerialTest-Server" #2, SerialTest.T.M, pl=0, si=1509e8).
ilu_StartRequest    (efffe99c over 158bc8 to "SerialTest-Server" #2, argSize 0) => success
ilu_FinishRequest   (efffe99c over 158bc8 to "SerialTest-Server" #2)
ilu_FinishCall      (efffe99c over 158bc8 to "SerialTest-Server" #2, pl=0, si=1509e8) => err=success ca_pe=Success
Calling M(0, 1) at 874995068:174249
ilu_StartCall       (efffe99c over 158bc8 to "SerialTest-Server" #3, SerialTest.T.M, pl=0, si=150928).
ilu_StartRequest    (efffe99c over 158bc8 to "SerialTest-Server" #3, argSize 0) => success
ilu_FinishRequest   (efffe99c over 158bc8 to "SerialTest-Server" #3)
ilu_FinishCall      (efffe99c over 158bc8 to "SerialTest-Server" #3, pl=0, si=150928) => err=success ca_pe=Success

% 


V.  Pipelining Together with Call Order Preservation

In this test, the multi-threaded client makes multiple concurrent calls, all using the same pipeline and serializer.  The goals is to test whether the calls are indeed serialized and made over the same connection.  This test only works if ILU has been configured to support OS-supplied threads.

To make:

% ilumkmf
% make stsrvr sptclnt

Running the server looks like this:

% ./stsrvr
SBH = 'ilu:SerialTest-Server/it;ilu%3AhCSGnKUbNNx9F0BkG7amW1AD3ag;sunrpc@sunrpcrm=tcp_13.2.116.32_34442'
M(0, 1001)      at      879791913:648064
M(0, 1001) returning at 879791914:008137
N(1, 1001)      at      879791914:009192
N(1, 1001) returning at 879791915:008089
M(2, 1001)      at      879791915:011489
M(2, 1001) returning at 879791916:008250
N(3, 1001)      at      879791916:009095
N(3, 1001) returning at 879791917:008429
M(4, 1001)      at      879791917:014350
M(4, 1001) returning at 879791918:013211
N(5, 1001)      at      879791918:014052
N(5, 1001) returning at 879791919:008719

879791936 FD usage = 1

The server pauses for 1 second inside each M and N call, to give the caller a good chance to make a pipelined call on the same connection.

The client takes as a command line parameter the number of concurrent calls to make.  Half of them are on an ASYNCHRONOUS method (M), the other half are on a synchronous one (N).  As before, using debugging output to check that the calls all go over the same connection.  Here's an example:

% setenv ILU_DEBUG call
% ./sptclnt 6
ILU version 2.0a11.2.  Copyright 1990-1996 Xerox Corporation.
------------------------------------------------------------
Configuration info: big-endian, is BSD, is POSIX, Solaris 2 threads, variant, size_t=size_t,
  char=1s, short=2, int=4, long=4, void *=4, fnptr=4, long long=8, long double=16, enum=4,
  arch=sparc-sun-solaris2.5.1, compiler="/import/sunpro-4.0/SUNWspro/bin/cc -xs -Xt -v",
  ANSI C lib=" -lm", sys aux libs=" -lsocket -lnsl -lthread",
  protocols = sunrpc courier iiop http w3ng, transports = inmem tcp sunrpcrm w3mux batching,
  binding via shared files in /net/augustus/augustus/ilub
------------------------------------------------------------
ilu_SetDebugLevel:  setting debug mask from 0x0 to 0x400
ilu_StartCall       (efffe4f0 over 21e4c0 to "SerialTest-Server" #1, ilu.Object.ILUPing, pl=0, si=0).
ilu_StartRequest    (efffe4f0 over 21e4c0 to "SerialTest-Server" #1, argSize 0) => success
ilu_FinishRequest   (efffe4f0 over 21e4c0 to "SerialTest-Server" #1)
ilu_GetReply        (efffe4f0 over 21e4c0 to "SerialTest-Server" #1)...
ilu_GetReply        (efffe4f0 over 21e4c0 to "SerialTest-Server" #1) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (efffe4f0 over 21e4c0 to "SerialTest-Server" #1) => success
ilu_FinishCall      (efffe4f0 over 21e4c0 to "SerialTest-Server" #1, pl=0, si=0) => err=success ca_pe=Success
ilu_StartCall       (effff55c over 21e4c0 to "SerialTest-Server" #2, SerialTest.T.Prep, pl=0, si=0).
ilu_StartRequest    (effff55c over 21e4c0 to "SerialTest-Server" #2, argSize 0) => success
ilu_FinishRequest   (effff55c over 21e4c0 to "SerialTest-Server" #2)
ilu_GetReply        (effff55c over 21e4c0 to "SerialTest-Server" #2)...
ilu_GetReply        (effff55c over 21e4c0 to "SerialTest-Server" #2) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (effff55c over 21e4c0 to "SerialTest-Server" #2) => success
ilu_FinishCall      (effff55c over 21e4c0 to "SerialTest-Server" #2, pl=0, si=0) => err=success ca_pe=Success
Calling       M(0, 1001) at 879791913:633595
ilu_StartCall       (ee407b7c over 21e4c0 to "SerialTest-Server" #3, SerialTest.T.M, pl=218f20, si=219550).
ilu_StartRequest    (ee407b7c over 21e4c0 to "SerialTest-Server" #3, argSize 0) => success
ilu_FinishRequest   (ee407b7c over 21e4c0 to "SerialTest-Server" #3)
ilu_FinishCall      (ee407b7c over 21e4c0 to "SerialTest-Server" #3, pl=218f20, si=219550) => err=success ca_pe=Success
Returned from M(0, 1001) at 879791913:638558
Calling       N(1, 1001) at 879791913:638916
ilu_StartCall       (ee305b7c over 21e4c0 to "SerialTest-Server" #4, SerialTest.T.N, pl=218f20, si=219550).
ilu_StartRequest    (ee305b7c over 21e4c0 to "SerialTest-Server" #4, argSize 0) => success
ilu_FinishRequest   (ee305b7c over 21e4c0 to "SerialTest-Server" #4)
ilu_GetReply        (ee305b7c over 21e4c0 to "SerialTest-Server" #4)...
Calling       M(2, 1001) at 879791913:644123
ilu_StartCall       (ee203b7c over 21e4c0 to "SerialTest-Server" #5, SerialTest.T.M, pl=218f20, si=219550).
ilu_StartRequest    (ee203b7c over 21e4c0 to "SerialTest-Server" #5, argSize 0Calling       N(3, 1001) at 879791913:649742
Calling       M(4, 1001) at 879791913:650023
Calling       N(5, 1001) at 879791913:650229
) => success
ilu_FinishRequest   (ee203b7c over 21e4c0 to "SerialTest-Server" #5)
ilu_FinishCall      (ee203b7c over 21e4c0 to "SerialTest-Server" #5, pl=218f20, si=219550) => err=success ca_pe=Success
ilu_StartCall       (ee101b7c over 21e4c0 to "SerialTest-Server" #6, SerialTest.T.N, pl=218f20, si=219550).
ilu_StartRequest    (ee101b7c over 21e4c0 to "SerialTest-Server" #6, argSize 0) => success
ilu_FinishRequest   (ee101b7c over 21e4c0 to "SerialTest-Server" #6)
ilu_GetReply        (ee101b7c over 21e4c0 to "SerialTest-Server" #6)...
ilu_StartCall       (edc0fb7c over 21e4c0 to "SerialTest-Server" #7, SerialTest.T.M, pl=218f20, si=219550).
ilu_StartRequest    (edc0fb7c over 21e4c0 to "SerialTest-Server" #7, argSize 0) => success
ilu_FinishRequest   (edc0fb7c over 21e4c0 to "SerialTest-Server" #7)
ilu_FinishCall      (edc0fb7c over 21e4c0 to "SerialTest-Server" #7, pl=218f20, si=219550) => err=success ca_pe=Success
Returned from M(4, 1001) at 879791913:662018
ilu_StartCall       (edb0db7c over 21e4c0 to "SerialTest-Server" #8, SerialTest.T.N, pl=218f20, si=219550).
ilu_StartRequest    (edb0db7c over 21e4c0 to "SerialTest-Server" #8, argSize 0) => success
ilu_FinishRequest   (edb0db7c over 21e4c0 to "SerialTest-Server" #8)
ilu_GetReply        (edb0db7c over 21e4c0 to "SerialTest-Server" #8)...
Returned from M(2, 1001) at 879791913:666836
ilu_GetReply        (edb0db7c over 21e4c0 to "SerialTest-Server" #8) queueing reply for SN #4.
ilu_GetReply        (ee305b7c over 21e4c0 to "SerialTest-Server" #4) => (from queue) ans=Success estatus=0 err=success
ilu_ReplyRead       (ee305b7c over 21e4c0 to "SerialTest-Server" #4) => success
ilu_FinishCall      (ee305b7c over 21e4c0 to "SerialTest-Server" #4, pl=218f20, si=219550) => err=success ca_pe=Success
Returned from N(1, 1001) at 879791915:045079
ilu_GetReply        (edb0db7c over 21e4c0 to "SerialTest-Server" #8) queueing reply for SN #6.
ilu_GetReply        (ee101b7c over 21e4c0 to "SerialTest-Server" #6) => (from queue) ans=Success estatus=0 err=success
ilu_ReplyRead       (ee101b7c over 21e4c0 to "SerialTest-Server" #6) => success
ilu_FinishCall      (ee101b7c over 21e4c0 to "SerialTest-Server" #6, pl=218f20, si=219550) => err=success ca_pe=Success
Returned from N(3, 1001) at 879791917:013541
ilu_GetReply        (edb0db7c over 21e4c0 to "SerialTest-Server" #8) => (from wire) ans=Success estatus=0 err=success
ilu_ReplyRead       (edb0db7c over 21e4c0 to "SerialTest-Server" #8) => success
ilu_FinishCall      (edb0db7c over 21e4c0 to "SerialTest-Server" #8, pl=218f20, si=219550) => err=success ca_pe=Success
Returned from N(5, 1001) at 879791919:012727

% 