Мы используем LeaderLatch для выбора лидера в моем кластере.
мы используем его так:
leaderLatch.addListener(new LeaderLatchListener() {
@Override
public void isLeader() {
// create leader tasks runner
}
@Override
public void notLeader() {
// shutdown leader tasks runner
});
leaderLatch.start();
leaderLatch.await();
У нас также есть процесс постепенного завершения работы:
CloseableUtils.closeQuietly(leaderLatch);
теперь проблема в том, что когда я закрываю экземпляр без лидера, метод await()
выдает EOFException.
Это код из самого LeaderLatch:
public void await() throws InterruptedException, EOFException
{
synchronized(this)
{
while ( (state.get() == State.STARTED) && !hasLeadership.get() )
{
wait();
}
}
if ( state.get() != State.STARTED )
{
throw new EOFException();
}
}
, так как у меня есть закрыл его - состояние не НАЧАЛО, а ЗАКРЫТО, поэтому выбрасывается пустое исключение EOFException.
Есть ли лучший способ?
Мы используем curator-recepies-4.2.0
С уважением, Идо