Thread: Re: [HACKERS] CORBA STATUS

Re: [HACKERS] CORBA STATUS

From
Michael Robinson
Date:
Goran Thyni <goran@kirra.net> writes:
>I found that there is a fundamental problem
>concerning the difference in process models
>in pgsql and the POA (Portable Object Adaptor)
>in CORBA implementations.
>
>AFAICS, POA assumes a threaded server while
>PgSQL uses a traditional forking model.

This is not the case.  The POA assumes a nestable, multiplexed call 
interface.  The POA server can receive multiple requests from multiple
clients (or even multiple simultaneous requests from one client), and,
if single threaded, is allowed to simply queue them and service each 
request in natural order.

If something bad happens (say, transaction deadlock, or whatever), the 
POA server just spits out the appropriate exceptions, and the clients 
figure out what to do next.

Speaking of which, exception handling is the one area where CORBA completely
embarrasses the current FE/BE protocol.  As PostgreSQL starts climbing
the database value chain, people will probably like to see error handling
that doesn't core-dump clients and backends.
-Michael Robinson

P.S.  On the off chance this will get answered the second time around, 
is there any particular reason for minx::int4 to be an illegal cast?



Re: [HACKERS] CORBA STATUS

From
Goran Thyni
Date:
Michael Robinson wrote:
> Goran Thyni <goran@kirra.net> writes:
> >AFAICS, POA assumes a threaded server while
> >PgSQL uses a traditional forking model.
>
> This is not the case.  The POA assumes a nestable, multiplexed call
> interface.  The POA server can receive multiple requests from multiple
> clients (or even multiple simultaneous requests from one client), and,
> if single threaded, is allowed to simply queue them and service each
> request in natural order.

OK,
I went on hearsay, got confused by the code.
Thank you for clearifying.

But the issue remains,
if you fork in a connection handler (after accept())
you got two servers competing on both connections.

I outline a model for how CORBA could be implemented
without rewriting the whole server and make it optional
for platforms not supporting CORBA.

Attached below is a first attempt with sketchy pseudo-code.
I hope it is understandable.

regards,
--
-----------------
Göran Thyni
On quiet nights you can hear Windows NT reboot!
mainloop()
{
  if (fork())
    {
      traditional_accept_fork_loop();
      kill_corba_server_and_exit();
    }
  else
    {
      corba_main_in_POA();
    }
}

corba_connection_handle()
{
  setup_IPC();
  if (!fork())
    {
      for (;;)
    {
      wait_on_IPC();
      runquery();
    }
    }
}

corba_request_handler()
{
  send_requset_on_IPC();
  wait_for_response();
  response_to_POA();
}