platform-imdg-api-hazelcast-impl рефакторинг ожидания дожидания http://git.mfd.msk/mfd/clearing/-/issues/29 и в backend-api дожидание готовности перед работой RequestInfoAccepter

This commit is contained in:
AKurakin 2023-09-21 13:17:30 +03:00
parent 8c7c88c84f
commit 565eb70988
2 changed files with 27 additions and 18 deletions

View file

@ -28,9 +28,11 @@ public class BackEndApiImdgConfig {
@Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
BackendApiSettings clientSetting
) {
return new HazelcastService(taskExecutorHazelcastClientInitializer,
ImdgProvider imdg = new HazelcastService(taskExecutorHazelcastClientInitializer,
taskExecutorIdGeneratorAwaiter,
clientSetting.getHazelcast());
// todo корректное ожидание готовности imdg.waitAvailable();
return imdg;
}

View file

@ -43,6 +43,9 @@ public abstract class HazelcastServiceBase
protected volatile boolean isAvailableNow;
private Environment environment;
protected Object lockAvailable;
protected AtomicBoolean hzAvailable;
public HazelcastServiceBase(
ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
@ -239,28 +242,32 @@ public abstract class HazelcastServiceBase
return imdg;
}
@Override
public void waitAvailable() {
Object lock = new Object();
AtomicBoolean hzAvailable = new AtomicBoolean();
statusSubscribe(new IHazelcastClusterStatus() {
@Override
public void getAvailable(HazelcastInstance hazelcastNotInited) {
synchronized (lock) {
hzAvailable.set(true);
lock.notifyAll();
public synchronized void waitAvailable() {
if (lockAvailable == null) {
this.lockAvailable = new Object();
this.hzAvailable = new AtomicBoolean();
statusSubscribe(new IHazelcastClusterStatus() {
@Override
public void getAvailable(HazelcastInstance hazelcastNotInited) {
synchronized (lockAvailable) {
hzAvailable.set(true);
lockAvailable.notifyAll();
}
}
}
@Override
public void getUnavailable(HazelcastInstance hazelcastNotInited) {
}
});
synchronized (lock) {
@Override
public void getUnavailable(HazelcastInstance hazelcastNotInited) {
}
});
}
log.debug("Wait IMDG available");
synchronized (lockAvailable) {
try {
if (!hzAvailable.get()) {
lock.wait();
lockAvailable.wait();
}
log.debug("IMDG ready");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
log.error(ExceptionUtils.getStackTrace(e));