From 565eb709886a5fcee206697bc94805f5a2c10e68 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 21 Sep 2023 13:17:30 +0300 Subject: [PATCH] =?UTF-8?q?platform-imdg-api-hazelcast-impl=20=D1=80=D0=B5?= =?UTF-8?q?=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BE?= =?UTF-8?q?=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BE=D0=B6?= =?UTF-8?q?=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20http://git.mfd.msk/mfd/c?= =?UTF-8?q?learing/-/issues/29=20=D0=B8=20=D0=B2=20backend-api=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B3=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BE=D0=B9?= =?UTF-8?q?=20RequestInfoAccepter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/BackEndApiImdgConfig.java | 4 +- .../service/HazelcastServiceBase.java | 41 +++++++++++-------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/BackEndApiImdgConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/BackEndApiImdgConfig.java index 152bc87e5..b43a385db 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/BackEndApiImdgConfig.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/BackEndApiImdgConfig.java @@ -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; } diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java index 0fb7b039f..b9c79fa1f 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java @@ -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));