From 7adcc98c6ce6535f5b2a6600d6cc1e34dca83e21 Mon Sep 17 00:00:00 2001 From: vramik Date: Fri, 1 Mar 2024 18:35:55 +0100 Subject: [PATCH] Map Store Removal: Remove obsolete KeycloakModelUtils.isRealmProviderJpa method Closes #27445 Signed-off-by: vramik --- .../events/jpa/JpaEventStoreProvider.java | 38 +++++++------------ .../models/utils/KeycloakModelUtils.java | 8 ---- 2 files changed, 13 insertions(+), 33 deletions(-) diff --git a/model/jpa/src/main/java/org/keycloak/events/jpa/JpaEventStoreProvider.java b/model/jpa/src/main/java/org/keycloak/events/jpa/JpaEventStoreProvider.java index 28e3ff6af9..a6c0b63ee0 100755 --- a/model/jpa/src/main/java/org/keycloak/events/jpa/JpaEventStoreProvider.java +++ b/model/jpa/src/main/java/org/keycloak/events/jpa/JpaEventStoreProvider.java @@ -34,7 +34,6 @@ import org.keycloak.models.RealmModel; import org.keycloak.models.jpa.entities.RealmAttributeEntity; import org.keycloak.models.jpa.entities.RealmAttributes; import org.keycloak.models.jpa.entities.RealmEntity; -import org.keycloak.models.utils.KeycloakModelUtils; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; @@ -84,34 +83,23 @@ public class JpaEventStoreProvider implements EventStoreProvider { @Override public void clearExpiredEvents() { - // By default, realm provider is always "jpa", so we can optimize and delete all events in single SQL, assuming that realms are saved in the DB as well. - // Fallback to model API just with different realm provider than "jpa" (This is never the case in standard Keycloak installations) int numDeleted = 0; long currentTimeMillis = Time.currentTimeMillis(); - if (KeycloakModelUtils.isRealmProviderJpa(session)) { - // Group realms by expiration times. This will be effective if different realms have same/similar event expiration times, which will probably be the case in most environments - List eventExpirations = em.createQuery("select distinct realm.eventsExpiration from RealmEntity realm where realm.eventsExpiration > 0").getResultList(); - for (Long expiration : eventExpirations) { - List realmIds = em.createQuery("select realm.id from RealmEntity realm where realm.eventsExpiration = :expiration") - .setParameter("expiration", expiration) - .getResultList(); - int currentNumDeleted = em.createQuery("delete from EventEntity where realmId in :realmIds and time < :eventTime") - .setParameter("realmIds", realmIds) - .setParameter("eventTime", currentTimeMillis - (expiration * 1000)) - .executeUpdate(); - logger.tracef("Deleted %d events for the expiration %d", currentNumDeleted, expiration); - numDeleted += currentNumDeleted; - } - logger.debugf("Cleared %d expired events in all realms", numDeleted); - } else { - session.realms().getRealmsStream().forEach(realm -> { - if (realm.isEventsEnabled() && realm.getEventsExpiration() > 0) { - long olderThan = Time.currentTimeMillis() - realm.getEventsExpiration() * 1000; - clear(realm, olderThan); - } - }); + // Group realms by expiration times. This will be effective if different realms have same/similar event expiration times, which will probably be the case in most environments + List eventExpirations = em.createQuery("select distinct realm.eventsExpiration from RealmEntity realm where realm.eventsExpiration > 0").getResultList(); + for (Long expiration : eventExpirations) { + List realmIds = em.createQuery("select realm.id from RealmEntity realm where realm.eventsExpiration = :expiration") + .setParameter("expiration", expiration) + .getResultList(); + int currentNumDeleted = em.createQuery("delete from EventEntity where realmId in :realmIds and time < :eventTime") + .setParameter("realmIds", realmIds) + .setParameter("eventTime", currentTimeMillis - (expiration * 1000)) + .executeUpdate(); + logger.tracef("Deleted %d events for the expiration %d", currentNumDeleted, expiration); + numDeleted += currentNumDeleted; } + logger.debugf("Cleared %d expired events in all realms", numDeleted); } @Override diff --git a/server-spi-private/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java b/server-spi-private/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java index eae0cd0a28..795e0a7abd 100755 --- a/server-spi-private/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java +++ b/server-spi-private/src/main/java/org/keycloak/models/utils/KeycloakModelUtils.java @@ -978,14 +978,6 @@ public final class KeycloakModelUtils { } } - /** - * @return true if implementation of realmProvider is "jpa" . Which is always the case in standard Keycloak installations. - */ - public static boolean isRealmProviderJpa(KeycloakSession session) { - Set providerIds = session.listProviderIds(RealmProvider.class); - return providerIds != null && providerIds.size() == 1 && providerIds.iterator().next().equals("jpa"); - } - /** * @param clientAuthenticatorType * @return secret size based on authentication type