Search in sources :

Example 6 with AuthenticatedClientSessionEntity

use of org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity in project keycloak by keycloak.

the class ConcurrencyJDGCacheReplaceTest method main.

public static void main(String[] args) throws Exception {
    Cache<String, SessionEntityWrapper<UserSessionEntity>> cache1 = createManager(1).getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
    Cache<String, SessionEntityWrapper<UserSessionEntity>> cache2 = createManager(2).getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
    // Create initial item
    UserSessionEntity session = new UserSessionEntity();
    session.setId("123");
    session.setRealmId("foo");
    session.setBrokerSessionId("!23123123");
    session.setBrokerUserId(null);
    session.setUser("foo");
    session.setLoginUsername("foo");
    session.setIpAddress("123.44.143.178");
    session.setStarted(Time.currentTime());
    session.setLastSessionRefresh(Time.currentTime());
    AuthenticatedClientSessionEntity clientSession = new AuthenticatedClientSessionEntity(UUID.randomUUID());
    clientSession.setAuthMethod("saml");
    clientSession.setAction("something");
    clientSession.setTimestamp(1234);
    session.getAuthenticatedClientSessions().put(CLIENT_1_UUID.toString(), clientSession.getId());
    SessionEntityWrapper<UserSessionEntity> wrappedSession = new SessionEntityWrapper<>(session);
    // Some dummy testing of remoteStore behaviour
    logger.info("Before put");
    cache1.getAdvancedCache().withFlags(// will still invoke remoteStore . Just doesn't propagate to cluster
    Flag.CACHE_MODE_LOCAL).put("123", wrappedSession);
    logger.info("After put");
    cache1.replace("123", wrappedSession);
    logger.info("After replace");
    cache1.get("123");
    logger.info("After cache1.get");
    cache2.get("123");
    logger.info("After cache2.get");
    cache1.get("123");
    logger.info("After cache1.get - second call");
    cache2.get("123");
    logger.info("After cache2.get - second call");
    cache2.replace("123", wrappedSession);
    logger.info("After replace - second call");
    cache1.get("123");
    logger.info("After cache1.get - third call");
    cache2.get("123");
    logger.info("After cache2.get - third call");
    cache1.getAdvancedCache().withFlags(Flag.SKIP_CACHE_LOAD).entrySet().stream().forEach(e -> {
    });
    logger.info("After cache1.stream");
    // Explicitly call put on remoteCache (KcRemoteCache.write ignores remote writes)
    InfinispanUtil.getRemoteCache(cache1).put("123", session);
    InfinispanUtil.getRemoteCache(cache2).replace("123", session);
    // Create caches, listeners and finally worker threads
    remoteCache1 = InfinispanUtil.getRemoteCache(cache1);
    remoteCache2 = InfinispanUtil.getRemoteCache(cache2);
    // Manual test of lifespans
    testLifespans();
    Thread worker1 = createWorker(cache1, 1);
    Thread worker2 = createWorker(cache2, 2);
    long start = System.currentTimeMillis();
    // Start and join workers
    worker1.start();
    worker2.start();
    worker1.join();
    worker2.join();
    long took = System.currentTimeMillis() - start;
    // // Output
    // for (Map.Entry<String, EntryInfo> entry : state.entrySet()) {
    // System.out.println(entry.getKey() + ":::" + entry.getValue());
    // worker1.cache.remove(entry.getKey());
    // }
    System.out.println("Finished. Took: " + took + " ms. Notes: " + cache1.get("123").getEntity().getNotes().size() + ", successfulListenerWrites: " + successfulListenerWrites.get() + ", successfulListenerWrites2: " + successfulListenerWrites2.get() + ", failedReplaceCounter: " + failedReplaceCounter.get() + ", failedReplaceCounter2: " + failedReplaceCounter2.get());
    System.out.println("Sleeping before other report");
    Thread.sleep(2000);
    System.out.println("Finished. Took: " + took + " ms. Notes: " + cache1.get("123").getEntity().getNotes().size() + ", successfulListenerWrites: " + successfulListenerWrites.get() + ", successfulListenerWrites2: " + successfulListenerWrites2.get() + ", failedReplaceCounter: " + failedReplaceCounter.get() + ", failedReplaceCounter2: " + failedReplaceCounter2.get());
    System.out.println("remoteCache1.notes: " + ((UserSessionEntity) remoteCache1.get("123")).getNotes().size());
    System.out.println("remoteCache2.notes: " + ((UserSessionEntity) remoteCache2.get("123")).getNotes().size());
    System.out.println("Histogram: ");
    // shutdown pools
    for (ExecutorService ex : executors) {
        ex.shutdown();
    }
    // Finish JVM
    cache1.getCacheManager().stop();
    cache2.getCacheManager().stop();
}
Also used : AuthenticatedClientSessionEntity(org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity) ExecutorService(java.util.concurrent.ExecutorService) SessionEntityWrapper(org.keycloak.models.sessions.infinispan.changes.SessionEntityWrapper) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Example 7 with AuthenticatedClientSessionEntity

use of org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity in project keycloak by keycloak.

the class DistributedCacheWriteSkewTest method main.

public static void main(String[] args) throws Exception {
    Cache<String, UserSessionEntity> cache1 = createManager("node1").getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
    Cache<String, UserSessionEntity> cache2 = createManager("node2").getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
    // Create initial item
    UserSessionEntity session = new UserSessionEntity();
    session.setId("123");
    session.setRealmId("foo");
    session.setBrokerSessionId("!23123123");
    session.setBrokerUserId(null);
    session.setUser("foo");
    session.setLoginUsername("foo");
    session.setIpAddress("123.44.143.178");
    session.setStarted(Time.currentTime());
    session.setLastSessionRefresh(Time.currentTime());
    AuthenticatedClientSessionEntity clientSession = new AuthenticatedClientSessionEntity(UUID.randomUUID());
    clientSession.setAuthMethod("saml");
    clientSession.setAction("something");
    clientSession.setTimestamp(1234);
    session.getAuthenticatedClientSessions().put(CLIENT_1_UUID.toString(), clientSession.getId());
    cache1.put("123", session);
    // cache1.replace("123", session);
    // Create 2 workers for concurrent write and start them
    Worker worker1 = new Worker(1, cache1);
    Worker worker2 = new Worker(2, cache2);
    long start = System.currentTimeMillis();
    System.out.println("Started clustering test");
    worker1.start();
    // worker1.join();
    worker2.start();
    worker1.join();
    worker2.join();
    long took = System.currentTimeMillis() - start;
    session = cache1.get("123");
    System.out.println("Took: " + took + " ms. Notes count: " + session.getNotes().size() + ", failedReplaceCounter: " + failedReplaceCounter.get());
    // JGroups statistics
    JChannel channel = (JChannel) ((JGroupsTransport) cache1.getAdvancedCache().getRpcManager().getTransport()).getChannel();
    System.out.println("Sent MB: " + channel.getSentBytes() / 1000000 + ", sent messages: " + channel.getSentMessages() + ", received MB: " + channel.getReceivedBytes() / 1000000 + ", received messages: " + channel.getReceivedMessages());
    // Kill JVM
    cache1.stop();
    cache2.stop();
    cache1.getCacheManager().stop();
    cache2.getCacheManager().stop();
    System.out.println("Managers killed");
}
Also used : AuthenticatedClientSessionEntity(org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity) JChannel(org.jgroups.JChannel) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Example 8 with AuthenticatedClientSessionEntity

use of org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity in project keycloak by keycloak.

the class DistributedCacheConcurrentWritesTest method createEntityInstance.

private static SessionEntityWrapper<UserSessionEntity> createEntityInstance(String id) {
    // Create initial item
    UserSessionEntity session = new UserSessionEntity();
    session.setId(id);
    session.setRealmId("foo");
    session.setBrokerSessionId("!23123123");
    session.setBrokerUserId(null);
    session.setUser("foo");
    session.setLoginUsername("foo");
    session.setIpAddress("123.44.143.178");
    session.setStarted(Time.currentTime());
    session.setLastSessionRefresh(Time.currentTime());
    AuthenticatedClientSessionEntity clientSession = new AuthenticatedClientSessionEntity(UUID.randomUUID());
    clientSession.setAuthMethod("saml");
    clientSession.setAction("something");
    clientSession.setTimestamp(1234);
    session.getAuthenticatedClientSessions().put("foo-client", clientSession.getId());
    return new SessionEntityWrapper<>(session);
}
Also used : AuthenticatedClientSessionEntity(org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity) SessionEntityWrapper(org.keycloak.models.sessions.infinispan.changes.SessionEntityWrapper) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Example 9 with AuthenticatedClientSessionEntity

use of org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity in project keycloak by keycloak.

the class ConcurrencyJDGRemoveSessionTest method createSessionEntity.

private static SessionEntityWrapper<UserSessionEntity> createSessionEntity(String sessionId) {
    // Create 100 initial sessions
    UserSessionEntity session = new UserSessionEntity();
    session.setId(sessionId);
    session.setRealmId("foo");
    session.setBrokerSessionId("!23123123");
    session.setBrokerUserId(null);
    session.setUser("foo");
    session.setLoginUsername("foo");
    session.setIpAddress("123.44.143.178");
    session.setStarted(Time.currentTime());
    session.setLastSessionRefresh(Time.currentTime());
    AuthenticatedClientSessionEntity clientSession = new AuthenticatedClientSessionEntity(UUID.randomUUID());
    clientSession.setAuthMethod("saml");
    clientSession.setAction("something");
    clientSession.setTimestamp(1234);
    session.getAuthenticatedClientSessions().put(CLIENT_1_UUID.toString(), clientSession.getId());
    SessionEntityWrapper<UserSessionEntity> wrappedSession = new SessionEntityWrapper<>(session);
    return wrappedSession;
}
Also used : AuthenticatedClientSessionEntity(org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity) SessionEntityWrapper(org.keycloak.models.sessions.infinispan.changes.SessionEntityWrapper) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Example 10 with AuthenticatedClientSessionEntity

use of org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity in project keycloak by keycloak.

the class JDGPutTest method main.

public static void main(String[] args) throws Exception {
    Cache<String, Object> cache1 = createManager(1).getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
    Cache<String, Object> cache2 = createManager(2).getCache(InfinispanConnectionProvider.USER_SESSION_CACHE_NAME);
    try {
        // RemoteCache remoteCache1 = InfinispanUtil.getRemoteCache(cache1);
        // RemoteCache remoteCache2 = InfinispanUtil.getRemoteCache(cache2);
        // remoteCache1.put("key1", new Book("book1", "desc", 1));
        // remoteCache2.put("key2", );
        String uuidStr = UUID.randomUUID().toString();
        System.out.println(uuidStr);
        UUID uuid = UUID.fromString(uuidStr);
        AuthenticatedClientSessionEntity ace = new AuthenticatedClientSessionEntity(uuid);
        SessionEntityWrapper wrapper = new SessionEntityWrapper(ace);
        cache1.put("key1", wrapper);
        // cache1.put("key1", "val1");
        // AuthenticatedClientSessionEntity val1 = (AuthenticatedClientSessionEntity) cache2.get("key1");
        // RemoteCache remoteCache1 = InfinispanUtil.getRemoteCache(cache1);
        // remoteCache1.put("key1", "val1");
        RemoteCache remoteCache2 = InfinispanUtil.getRemoteCache(cache2);
        Object o = remoteCache2.get("key1");
        logger.info("Before retrieve entries");
        try (CloseableIterator it = remoteCache2.retrieveEntries(null, 64)) {
            Object o2 = it.next();
            logger.info("o2: " + o2);
        }
        // Object key = remoteCache2.keySet().iterator().next();
        // Object value = remoteCache2.values().iterator().next();
        // logger.info("Key: " + key + ", val: " + value);
        bulkLoadSessions(remoteCache2);
    } finally {
        Thread.sleep(2000);
        // Finish JVM
        cache1.getCacheManager().stop();
        cache2.getCacheManager().stop();
    }
}
Also used : AuthenticatedClientSessionEntity(org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity) CloseableIterator(org.infinispan.commons.util.CloseableIterator) RemoteCache(org.infinispan.client.hotrod.RemoteCache) UUID(java.util.UUID) SessionEntityWrapper(org.keycloak.models.sessions.infinispan.changes.SessionEntityWrapper)

Aggregations

AuthenticatedClientSessionEntity (org.keycloak.models.sessions.infinispan.entities.AuthenticatedClientSessionEntity)20 UserSessionEntity (org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)9 SessionEntityWrapper (org.keycloak.models.sessions.infinispan.changes.SessionEntityWrapper)8 UUID (java.util.UUID)7 ClientSessionUpdateTask (org.keycloak.models.sessions.infinispan.changes.ClientSessionUpdateTask)7 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)3 RemoteCache (org.infinispan.client.hotrod.RemoteCache)3 SessionUpdateTask (org.keycloak.models.sessions.infinispan.changes.SessionUpdateTask)3 Serializable (java.io.Serializable)2 Collection (java.util.Collection)2 Collections (java.util.Collections)2 HashMap (java.util.HashMap)2 Iterator (java.util.Iterator)2 Map (java.util.Map)2 Objects (java.util.Objects)2 Set (java.util.Set)2 Future (java.util.concurrent.Future)2 TimeUnit (java.util.concurrent.TimeUnit)2 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 BiFunction (java.util.function.BiFunction)2