[omniORB] Re:Connection management

Haarek Ryeng Haarek.Ryeng@datarespons.no
Wed, 26 Jan 2000 12:12:51 +0100


This is a multi-part message in MIME format.
--------------0064A099D3F15BBDDE6FABB0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Possibly the scavenger task terminates your connections since the call length
(20 sec.) is greater than the idleIncoming/idleOutgoing attributes?

try:
omniORB::idleConnectionScanPeriod(omniORB::idleIncoming,<somenbr > 20);
omniORB::idleConnectionScanPeriod(omniORB::idleOutgoing,<somenbr > 20);

But keep the sampling freq. at 3 or so.
Client proxy might want to restart the terminated connections (thread no. 5
appearing twice)? Experiment!

- Haarek

Jorge Garcia wrote:

> ****
> ****  Sai-Lai Lo wrote:
>
>   omniORB::maxTcpConnectionPerServer controls on the client side how
> many
>   concurrent request the client will invoke on the server. If the number
> of
>   request to the same server is more than this number, the other
> requests
>   will be queued until the previous ones return.
>
>   If you want more concurrent requests, set the variable to a higher
> number
>   before you call ORB_init.
>
> ****
> ****  Haarek Ryeng wrote:
>
>   ORBinConScanPeriod = 180 sec. // should be less than call freq of your
>
>                                                           // client
> threads !!!
>
>   ORBoutConScanPeriod = 120 sec.
>
>   I think these are the ones you have to tune !
>
>   The ORBscanGranularity is merely the sampling frequency and defines
> the
>   accurancy of the above timeout periods.
>
>   More effectively,if you have threads and socket enouhg, boost your
>   maxTcpConnectionPerServer.
>
> ****
> *********
>
>   Hi,
>
>     Right, if I set omniORB::maxTcpConnectionPerServer = 10 all works
>     fine, but, I want to have a limited number of server threads,
> because
>     I don't know how many threads will be spawned by my client.
>
>     I have tried different parameter combinations and I have got the
> next results:
>
>     * using default values:
>
>     - server: ./server.exe
>
>           Thread 0 into remote function.
>           Thread 1 into remote function.
>           Thread 2 into remote function.
>           Thread 3 into remote function.
>           Thread 4 into remote function.
>           Thread 0 out of remote funciton.
>           Thread 1 out of remote funciton.
>           Thread 2 out of remote funciton.
>           Thread 3 out of remote funciton.
>           Thread 4 out of remote funciton.
>           Thread 5 into remote function.
>           Thread 5 out of remote funciton.
>           Thread 6 into remote function.
>           Thread 6 out of remote funciton.
>           Thread 7 into remote function.
>           Thread 7 out of remote funciton.
>           Thread 8 into remote function.
>           Thread 8 out of remote funciton.
>           Thread 9 into remote function.
>           Thread 9 out of remote funciton.
>
>     - client: ./client.exe 5
>
>           Start...
>           starting thread: 0
>           starting thread: 1
>           starting thread: 2
>           starting thread: 3
>           starting thread: 4
>           starting thread: 5
>           starting thread: 6
>           starting thread: 7
>           starting thread: 8
>           starting thread: 9
>           thread 0 finished in 20.02 sec.
>           thread 1 finished in 20.021 sec.
>           thread 2 finished in 20.023 sec.
>           thread 3 finished in 20.039 sec.
>           thread 4 finished in 20.042 sec.
>           thread 5 finished in 40.032 sec.
>           thread 6 finished in 60.006 sec.
>           thread 7 finished in 80 sec.
>           thread 8 finished in 99.991 sec.
>           thread 9 finished in 119.982 sec.
>           End...
>           Time: 120.257
>
>      * using these parameters:
>
>          omniORB::scanGranularity(3);
>          omniORB::idleConnectionScanPeriod(omniORB::idleIncoming,3);
>          omniORB::idleConnectionScanPeriod(omniORB::idleOutgoing,3);
>          omniORB::callTimeOutPeriod(omniORB::clientSide,20);
>          omniORB::callTimeOutPeriod(omniORB::serverSide,3);
>
>         - server: ./server.exe
>
>           Thread 0 into remote function.
>           Thread 1 into remote function.
>           Thread 2 into remote function.
>           Thread 3 into remote function.
>           Thread 4 into remote function.
>           Thread 0 out of remote funciton.
>           Thread 1 out of remote funciton.
>           Thread 2 out of remote funciton.
>           Thread 3 out of remote funciton.
>           Thread 4 out of remote funciton.
>           Thread 5 into remote function.
>           Thread 5 into remote function. ???????
>           Thread 6 into remote function.
>           Thread 7 into remote function.
>           Thread 8 into remote function.
>           Thread 9 into remote function.
>           Thread 5 out of remote funciton.
>           Thread 9 out of remote funciton.
>           Thread 8 out of remote funciton.
>           Thread 7 out of remote funciton.
>           Thread 6 out of remote funciton.
>           Thread 5 out of remote funciton. ??????
>
>         - client: ./client.exe 5
>
>           Start...
>           starting thread: 0
>           starting thread: 1
>           starting thread: 2
>           starting thread: 3
>           starting thread: 4
>           starting thread: 5
>           starting thread: 6
>           starting thread: 7
>           starting thread: 8
>           starting thread: 9
>           thread 0 finished in 20.018 sec.
>           thread 1 finished in 20.01 sec.
>           thread 2 finished in 20.014 sec.
>           thread 3 finished in 20.027 sec.
>           thread 4 finished in 20.012 sec.
>           thread 5 finished in 58.885 sec.
>           thread 6 finished in 58.867 sec.
>           thread 7 finished in 58.848 sec.
>           thread 8 finished in 58.831 sec.
>           thread 9 finished in 58.812 sec.
>           End...
>           Time: 59.04
>
>   The results that I want to obtain are:
>
>      - server:
>
>           Thread 0 into remote function.
>           Thread 1 into remote function.
>           Thread 2 into remote function.
>           Thread 3 into remote function.
>           Thread 4 into remote function.
>           Thread 0 out of remote funciton.
>           Thread 1 out of remote funciton.
>           Thread 2 out of remote funciton.
>           Thread 3 out of remote funciton.
>           Thread 4 out of remote funciton.
>           Thread 5 into remote function.
>           Thread 6 into remote function.
>           Thread 7 into remote function.
>           Thread 8 into remote function.
>           Thread 9 into remote function.
>           Thread 5 out of remote funciton.
>           Thread 6 out of remote funciton.
>           Thread 7 out of remote funciton.
>           Thread 8 out of remote funciton.
>           Thread 9 out of remote funciton.
>
>      - client: ./client.exe 5
>
>       Start...
>       starting thread: 0
>       starting thread: 1
>       starting thread: 2
>       starting thread: 3
>       starting thread: 4
>       starting thread: 5
>       starting thread: 6
>       starting thread: 7
>       starting thread: 8
>       starting thread: 9
>       thread 0 finished in 20.018 sec.
>       thread 1 finished in 20.01 sec.
>       thread 2 finished in 20.014 sec.
>       thread 3 finished in 20.027 sec.
>       thread 4 finished in 20.012 sec.
>       thread 5 finished in 40.xxx sec.
>       thread 6 finished in 40.xxx sec.
>       thread 7 finished in 40.xxx sec.
>       thread 8 finished in 40.xxx sec.
>       thread 9 finished in 40.xxx sec.
>       End...
>       Time: 40.xx
>
> Regards,
>
> Jorge Garcia
> R&D Software Engineer
> Mabyc, S.A.
> Barcelona (Spain)
>
> ========
> SOURCES
> ========
>
> -------
> libreria.idl
> -------
>
> #define __LIBRERIA_IDL__
>
> module Libreria
> {
>  interface Funciones
>  {
>   long suma(in long value,in long tnum);
>  };
> };
>
> #endif
>
> --------
> libreria_i.cc
> --------
>
> #include <iostream.h>
> #include <unistd.h>
> #include "libreria.hh"
>
> class Libreria_i : public virtual Libreria::_sk_Funciones
> {
>  public:
>   Libreria_i() {}
>   virtual ~Libreria_i() {}
>   virtual long suma(long value,long tnum);
> };
>
> long Libreria_i::suma(long value,long tnum)
> {
>  cout << "Thread " << tnum << " into remote function." << endl;
>  sleep(20);
>  value+=tnum;
>  cout << "Thread " << tnum << " out of remote funciton. " << endl;
>  return value;
> }
>
> -------
> server.cc
> -------
>
> #include <iostream.h>
> #include <fstream.h>
> #include "omnithread.h"
> #include "libreria.hh"
> #include "libreria_i.cc"
>
> int main(int argc, char **argv)
> {
>  try
>  {
>   CORBA::ORB_ptr orb = CORBA::ORB_init(argc,argv,"omniORB2");
>   CORBA::BOA_ptr boa = orb->BOA_init(argc,argv,"omniORB2_BOA");
>
>   Libreria_i *myobj = new Libreria_i();
>
>   myobj->_obj_is_ready(boa);
>
>   Libreria::Funciones_var myobjRef = myobj->_this();
>
>   CORBA::String_var p = orb->object_to_string(myobjRef);
>
>   ofstream out ("LIBRERIA.IOR");
>   out << (char*)p << endl;
>   out.close();
>
>   boa->impl_is_ready();
>
>   boa->destroy();
>   orb->NP_destroy();
>  }
>  catch(...)
>  {
>   cout << "exception into server." << endl;
>  }
>  return 0;
> }
>
> ------
> client.cc
> ------
>
> #include <iostream.h>
> #include <fstream.h>
> #include <stdio.h>
> #include <string.h>
> #include <stdlib.h>
> #include <time.h>
> #include <unistd.h>
> #include <signal.h>
> #include <sys/types.h>
> #include <sys/time.h>
> #include <pthread.h>
> #include <sys/types.h>
> #include <sys/wait.h>
> #include "libreria.hh"
>
> #define MAXTHREADS 10
>
> struct thread_info
> {
>  int pos;
>  pthread_t id;
>  int result;
>  Libreria::Funciones_var e;
> };
>
> struct thread_info thread_list[MAXTHREADS];
>
> long da_milis()
> {
>  struct timeval tv;
>  gettimeofday(&tv,NULL);
>  return (tv.tv_sec*1000L) + (tv.tv_usec/1000L);
> }
>
> void* ThreadFunction(void* p)
> {
>  long min,mout;
>  double res;
>
>  try
>  {
>   cout << "starting thread: " << (long)(*(long*)p) <<  endl;
>   min=da_milis();
>   thread_list[(long)(*(long*)p)].e->suma(1,(long)(*(long*)p));
>   mout=da_milis();
>   res=(double)((mout-min)/1000.0);
>   cout << "thread " << (long)(*(long*)p) << " finished in " << res << "
> sec." << endl;
>  }
>  catch(CORBA::COMM_FAILURE& ex)
>  {
>   cerr << "Caught system exception COMM_FAILURE, unable to contact the "
>
>        << "object." << endl;
>  }
>  catch(...)
>  {
>   cout << "Eexception" << endl;
>  }
>
>  pthread_exit(p);
> }
>
> void main (int argc, char **argv)
> {
>  try
>  {
>   long min,mout,buc;
>   double res;
>   char ref[1000];
>   int i;
>
>   ifstream in("LIBRERIA.IOR");
>
>   CORBA::ORB_ptr orb = CORBA::ORB_init(argc,argv,"omniORB2");
>   CORBA::Object_ptr obj2;
>
>   omniORB::maxTcpConnectionPerServer=atoi(argv[1]);
>   //omniORB::scanGranularity(3);
>   //omniORB::idleConnectionScanPeriod(omniORB::idleIncoming,3);
>   //omniORB::idleConnectionScanPeriod(omniORB::idleOutgoing,3);
>   //omniORB::callTimeOutPeriod(omniORB::clientSide,20);
>   //omniORB::callTimeOutPeriod(omniORB::serverSide,3);
>
>   in >> ref;
>   in.close();
>
>   CORBA::Object_var obj = orb->string_to_object(ref);
>   obj2=obj;
>
>   for(i=0;i<MAXTHREADS;i++)
>   {
>    thread_list[i].e = Libreria::Funciones::_narrow(obj2);
>    thread_list[i].pos = i;
>    if (CORBA::is_nil(thread_list[i].e))
>    {
>      cerr << "hello: cannot invoke on a nil object reference.\n" <<
> endl;
>      return;
>    }
>   }
>
>   cout << "Start..." << endl;
>
>   min=da_milis();
>
>   for(i=0;i<MAXTHREADS;i++)
>   {
>
> pthread_create(&thread_list[i].id,NULL,&ThreadFunction,&thread_list[i].pos);
>
>   }
>
>   for(i=0;i<MAXTHREADS;i++)
>   {
>    pthread_join(thread_list[i].id,(void*)&thread_list[i].result);
>   }
>
>   mout=da_milis();
>
>   res=(double)((mout-min)/1000.0);
>
>   cout << "End..." << endl;
>
>   cout << "Time: " << res << endl;
>
>   orb->NP_destroy();
>  }
> catch(CORBA::COMM_FAILURE& ex)
>  {
>   cerr << "Caught system exception COMM_FAILURE, unable to contact the "
>
>        << "object." << endl;
>  }
>  catch(omniORB::fatalException& ex)
>  {
>   cerr << "Caught omniORB2 fatalException. This indicates a bug is
> caught "
>        << "within omniORB2.\nPlease send a bug report.\n"
>        << "The exception was thrown in file: " << ex.file() << "\n"
>    << "                            line: " << ex.line() << "\n"
>        << "The error message is: " << ex.errmsg() << endl;
>  }
>  catch(...)
>  {
>   cerr << "Caught a system exception." << endl;
>  }
>
>  return 0;
> }

--------------0064A099D3F15BBDDE6FABB0
Content-Type: text/x-vcard; charset=us-ascii;
 name="haarek.ryeng.vcf"
Content-Transfer-Encoding: 7bit
Content-Description: Card for Hårek Ryeng
Content-Disposition: attachment;
 filename="haarek.ryeng.vcf"

begin:vcard 
adr;dom:;;;N-1322 HØVIK;;;
n:Ryeng;Hårek
x-mozilla-html:FALSE
org:Data Respons AS
version:2.1
email;internet:haarek.ryeng@datarespons.no
title:M.sci (computers & signal processing)
tel;fax:67112050
tel;home:90196734
tel;work:67112071
x-mozilla-cpt:;0
fn:Hårek Ryeng
end:vcard

--------------0064A099D3F15BBDDE6FABB0--