SUPPORT-9165: add wait for accumulator
This commit is contained in:
parent
bc0f2af3f1
commit
682d9313dc
1 changed files with 15 additions and 0 deletions
|
|
@ -12,6 +12,8 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||
|
||||
import ervu_business_metrics.config.KafkaEnabledCondition;
|
||||
import ervu_business_metrics.model.sso.UserSessionInfo;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
|
@ -21,6 +23,7 @@ import org.springframework.stereotype.Component;
|
|||
@Component
|
||||
@Conditional(KafkaEnabledCondition.class)
|
||||
public class SessionResponseHolder {
|
||||
private final Logger LOGGER = LoggerFactory.getLogger(SessionResponseHolder.class);
|
||||
private final Map<String, SessionAccumulator> sessionsMap = new ConcurrentHashMap<>();
|
||||
|
||||
public void initIfAbsent(String requestKey, int totalExpected) {
|
||||
|
|
@ -37,9 +40,21 @@ public class SessionResponseHolder {
|
|||
public List<UserSessionInfo> awaitSessions(String requestKey, long timeout, TimeUnit unit)
|
||||
throws ExecutionException, InterruptedException, TimeoutException {
|
||||
SessionAccumulator acc = sessionsMap.get(requestKey);
|
||||
|
||||
long startTime = System.nanoTime();
|
||||
LOGGER.info("Начало ожидания сессий для requestKey = {}", requestKey);
|
||||
|
||||
while (acc == null && (System.nanoTime() - startTime) < unit.toNanos(timeout)) {
|
||||
LOGGER.debug("Аккумулятор для requestKey = {} еще не найден, повторная проверка", requestKey);
|
||||
TimeUnit.MILLISECONDS.sleep(50);
|
||||
acc = sessionsMap.get(requestKey);
|
||||
}
|
||||
|
||||
if (acc == null) {
|
||||
LOGGER.error("Аккумулятор для requestKey: {} не был инициализирован за время ожидания.", requestKey);
|
||||
return List.of();
|
||||
}
|
||||
|
||||
return acc.getFuture().get(timeout, unit);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue