< prev index next >

src/java.security.jgss/share/classes/sun/security/krb5/internal/rcache/MemoryCache.java

Print this page
rev 48936 : 8197518: Kerberos krb5 authentication: AuthList's put method leads to performance issue

*** 1,7 **** /* ! * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 29,39 **** * Copyright 1997 The Open Group Research Institute. All rights reserved. */ package sun.security.krb5.internal.rcache; ! import java.util.*; import sun.security.krb5.internal.KerberosTime; import sun.security.krb5.internal.KrbApErrException; import sun.security.krb5.internal.ReplayCache; /** --- 29,41 ---- * Copyright 1997 The Open Group Research Institute. All rights reserved. */ package sun.security.krb5.internal.rcache; ! import java.util.Map; ! import java.util.concurrent.ConcurrentHashMap; ! import sun.security.krb5.internal.KerberosTime; import sun.security.krb5.internal.KrbApErrException; import sun.security.krb5.internal.ReplayCache; /**
*** 46,80 **** // TODO: One day we'll need to read dynamic krb5.conf. private static final int lifespan = KerberosTime.getDefaultSkew(); private static final boolean DEBUG = sun.security.krb5.internal.Krb5.DEBUG; ! private final Map<String,AuthList> content = new HashMap<>(); @Override public synchronized void checkAndStore(KerberosTime currTime, AuthTimeWithHash time) throws KrbApErrException { String key = time.client + "|" + time.server; ! AuthList rc = content.get(key); if (DEBUG) { System.out.println("MemoryCache: add " + time + " to " + key); } - if (rc == null) { - rc = new AuthList(lifespan); - rc.put(time, currTime); - if (!rc.isEmpty()) { - content.put(key, rc); - } - } else { - if (DEBUG) { - System.out.println("MemoryCache: Existing AuthList:\n" + rc); - } - rc.put(time, currTime); - if (rc.isEmpty()) { - content.remove(key); - } - } } public String toString() { StringBuilder sb = new StringBuilder(); for (AuthList rc: content.values()) { --- 48,68 ---- // TODO: One day we'll need to read dynamic krb5.conf. private static final int lifespan = KerberosTime.getDefaultSkew(); private static final boolean DEBUG = sun.security.krb5.internal.Krb5.DEBUG; ! private final Map<String,AuthList> content = new ConcurrentHashMap<>(); @Override public synchronized void checkAndStore(KerberosTime currTime, AuthTimeWithHash time) throws KrbApErrException { String key = time.client + "|" + time.server; ! content.computeIfAbsent(key, k -> new AuthList(lifespan)) ! .put(time, currTime); if (DEBUG) { System.out.println("MemoryCache: add " + time + " to " + key); } } public String toString() { StringBuilder sb = new StringBuilder(); for (AuthList rc: content.values()) {
< prev index next >