From c173c8de73881112d2a12b71c827a5f211e6a3cd Mon Sep 17 00:00:00 2001 From: YuriyZ Date: Fri, 28 Jun 2024 11:21:09 +0300 Subject: [PATCH] feat(jans-auth-server): mark indexes which we are about to re-use as VALID https://github.com/JanssenProject/jans/issues/8562 Signed-off-by: YuriyZ --- .../server/service/cluster/StatusIndexPoolService.java | 7 +++++++ .../main/java/io/jans/model/token/StatusIndexPool.java | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/jans-auth-server/server/src/main/java/io/jans/as/server/service/cluster/StatusIndexPoolService.java b/jans-auth-server/server/src/main/java/io/jans/as/server/service/cluster/StatusIndexPoolService.java index f89084117cd..28b26030a7f 100644 --- a/jans-auth-server/server/src/main/java/io/jans/as/server/service/cluster/StatusIndexPoolService.java +++ b/jans-auth-server/server/src/main/java/io/jans/as/server/service/cluster/StatusIndexPoolService.java @@ -8,12 +8,15 @@ import io.jans.as.model.config.StaticConfiguration; import io.jans.as.model.configuration.AppConfiguration; +import io.jans.as.server.service.token.StatusListIndexService; import io.jans.model.token.StatusIndexPool; +import io.jans.model.tokenstatus.TokenStatus; import io.jans.orm.PersistenceEntryManager; import io.jans.orm.exception.EntryPersistenceException; import io.jans.orm.model.PagedResult; import io.jans.orm.model.SortOrder; import io.jans.orm.search.filter.Filter; +import io.jans.service.cdi.util.CdiUtil; import jakarta.annotation.PostConstruct; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; @@ -213,6 +216,10 @@ public StatusIndexPool allocate(int nodeId) { // If lock is ours reset entry and return it if (LOCK_KEY.equals(lockedPool.getLockKey()) && lockedPool.getNodeId().equals(nodeId)) { log.debug("Re-using existing status index pool {}, node {}, LOCK_KEY {}", lockedPool.getId(), nodeId, LOCK_KEY); + + // mark all indexes which we are re-using as VALID + StatusListIndexService indexService = CdiUtil.bean(StatusListIndexService.class); + indexService.updateStatusAtIndexes(lockedPool.enumerateAllIndexes(), TokenStatus.VALID); return lockedPool; } } catch (EntryPersistenceException ex) { diff --git a/jans-core/service/src/main/java/io/jans/model/token/StatusIndexPool.java b/jans-core/service/src/main/java/io/jans/model/token/StatusIndexPool.java index e66947b57c7..11c5b946e00 100644 --- a/jans-core/service/src/main/java/io/jans/model/token/StatusIndexPool.java +++ b/jans-core/service/src/main/java/io/jans/model/token/StatusIndexPool.java @@ -6,7 +6,9 @@ import io.jans.orm.model.base.BaseEntry; import jakarta.persistence.Transient; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** @@ -95,6 +97,14 @@ public void setLockKey(String lockKey) { this.lockKey = lockKey; } + public List enumerateAllIndexes() { + List indexes = new ArrayList<>(); + for (int i = getStartIndex(); i <= getEndIndex(); i++ ) { + indexes.add(i); + } + return indexes; + } + public Integer getStartIndex() { return startIndex; }