< 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 >