Thread: Re: [HACKERS] CORBA STATUS
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?
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(); }