Re: PGStream synchronization

Поиск
Список
Период
Сортировка
От Oliver Jowett
Тема Re: PGStream synchronization
Дата
Msg-id 4A95D980.3070809@opencloud.com
обсуждение исходный текст
Ответ на Re: PGStream synchronization  (Maciek Sakrejda <msakrejda@truviso.com>)
Ответы Re: PGStream synchronization
Список pgsql-jdbc
Maciek Sakrejda wrote:

> Any thoughts?

How about, instead of using raw monitor synchronization to provide
mutual exclusion on access to the stream, we use a lock object (i.e.
something similar to java.util.concurrent.locks.Lock, though we can't
use exactly that class before 1.5 obviously), try to grab the lock
before close, and behave differently depending on if we succeeded or not.

So the close logic can look something like this:

  if (lock.tryLock()) {
    // we have exclusive access to the connection
    // do a normal shutdown
    try {
      sendTerminate();
      stream.close();
    } finally {
      lock.unlock();
    }
  } else {
    // something is concurrently using the connection
    // just abruptly close the connection
    stream.close();
  }

In the concurrent case, we don't send Terminate, but we also don't risk
sending it at the wrong point in the stream.

This means that a concurrent Connection.close() while something is
happening will result in an "unexpected client EOF" logged on the server
side, but that's almost what you want in this case anyway .. concurrent
close pretty much means "help, abort this!" ..

-O

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

Предыдущее
От: Maciek Sakrejda
Дата:
Сообщение: Re: PGStream synchronization
Следующее
От: Maciek Sakrejda
Дата:
Сообщение: PGStream synchronization