platform-imdg-api-hazelcast-impl рефакторинг ожидания дожидания http://git.mfd.msk/mfd/clearing/-/issues/29 и в backend-api дожидание готовности перед работой RequestInfoAccepter
This commit is contained in:
parent
8c7c88c84f
commit
565eb70988
2 changed files with 27 additions and 18 deletions
|
|
@ -28,9 +28,11 @@ public class BackEndApiImdgConfig {
|
||||||
@Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
|
@Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
|
||||||
BackendApiSettings clientSetting
|
BackendApiSettings clientSetting
|
||||||
) {
|
) {
|
||||||
return new HazelcastService(taskExecutorHazelcastClientInitializer,
|
ImdgProvider imdg = new HazelcastService(taskExecutorHazelcastClientInitializer,
|
||||||
taskExecutorIdGeneratorAwaiter,
|
taskExecutorIdGeneratorAwaiter,
|
||||||
clientSetting.getHazelcast());
|
clientSetting.getHazelcast());
|
||||||
|
// todo корректное ожидание готовности imdg.waitAvailable();
|
||||||
|
return imdg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,9 @@ public abstract class HazelcastServiceBase
|
||||||
protected volatile boolean isAvailableNow;
|
protected volatile boolean isAvailableNow;
|
||||||
private Environment environment;
|
private Environment environment;
|
||||||
|
|
||||||
|
protected Object lockAvailable;
|
||||||
|
protected AtomicBoolean hzAvailable;
|
||||||
|
|
||||||
public HazelcastServiceBase(
|
public HazelcastServiceBase(
|
||||||
ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
|
ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
|
||||||
ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
|
ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
|
||||||
|
|
@ -239,28 +242,32 @@ public abstract class HazelcastServiceBase
|
||||||
return imdg;
|
return imdg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void waitAvailable() {
|
public synchronized void waitAvailable() {
|
||||||
Object lock = new Object();
|
if (lockAvailable == null) {
|
||||||
AtomicBoolean hzAvailable = new AtomicBoolean();
|
this.lockAvailable = new Object();
|
||||||
statusSubscribe(new IHazelcastClusterStatus() {
|
this.hzAvailable = new AtomicBoolean();
|
||||||
@Override
|
statusSubscribe(new IHazelcastClusterStatus() {
|
||||||
public void getAvailable(HazelcastInstance hazelcastNotInited) {
|
@Override
|
||||||
synchronized (lock) {
|
public void getAvailable(HazelcastInstance hazelcastNotInited) {
|
||||||
hzAvailable.set(true);
|
synchronized (lockAvailable) {
|
||||||
lock.notifyAll();
|
hzAvailable.set(true);
|
||||||
|
lockAvailable.notifyAll();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@Override
|
@Override
|
||||||
public void getUnavailable(HazelcastInstance hazelcastNotInited) {
|
public void getUnavailable(HazelcastInstance hazelcastNotInited) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
synchronized (lock) {
|
}
|
||||||
|
log.debug("Wait IMDG available");
|
||||||
|
synchronized (lockAvailable) {
|
||||||
try {
|
try {
|
||||||
if (!hzAvailable.get()) {
|
if (!hzAvailable.get()) {
|
||||||
lock.wait();
|
lockAvailable.wait();
|
||||||
}
|
}
|
||||||
|
log.debug("IMDG ready");
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
log.error(ExceptionUtils.getStackTrace(e));
|
log.error(ExceptionUtils.getStackTrace(e));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue