non-blocking connections in libpq, fix proposal

Поиск
Список
Период
Сортировка
От Bernhard Herzog
Тема non-blocking connections in libpq, fix proposal
Дата
Msg-id 6qn0z7l8sm.fsf@abnoba.intevation.de
обсуждение исходный текст
Ответы Re: non-blocking connections in libpq, fix proposal  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: non-blocking connections in libpq, fix proposal  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список pgsql-interfaces
Hi,

after finding out that libpq apparently doesn't work properly when
sending long queries ('long' meaning somewhere larger than 8KB), I had a
look at the sources and also found some mails in the archives where this
issue had been discussed. The problem appears to be still present in the
current CVS version.

I've worked on a fix today that works for me. It's perhaps not the best
solution but it's simple :-)

The basic strategy is to fix pqFlush and pqPutBytes.

The problem with pqFlush as it stands now is that it returns EOF when an
error occurs or when not all data could be sent. The latter case is
clearly not an error for a non-blocking connection but the caller can't
distringuish it from an error very well.

The first part of the fix is therefore to fix pqFlush. This is done by
to renaming it to pqFlushSome which only differs from pqFlush in its
return values to allow the caller to make the above distinction and a
new pqFlush which is implemented in terms of pqFlushSome and behaves
exactly like the old pqFlush.

The second part of the fix modifies pqPutBytes to use pqFlushSome
instead of pqFlush and to either send all the data or if not all data
can be sent on a non-blocking connection to at least put all data into
the output buffer, enlarging it if necessary.

I've also added a new API function PQflushSome which analogously to
PQflush just calls pqFlushSome. Programs using PQsendQuery should use
this new function. The main difference is that this function will have
to be called repeatedly (calling select() properly in between) until all
data has been written.


Being new to postgresql development I'm not completely sure how to
proceed from here. Is it OK if I post the patch here?

  Bernhard


-- 
Intevation GmbH                                 http://intevation.de/
Sketch                                 http://sketch.sourceforge.net/
MapIt!                                               http://mapit.de/


В списке pgsql-interfaces по дате отправления:

Предыдущее
От: jtv
Дата:
Сообщение: Re: C++: PgDatabase or PgConnection and lifetime of the objects?
Следующее
От: Tom Lane
Дата:
Сообщение: Re: non-blocking connections in libpq, fix proposal