Ernani Pereira de Mattos Junior created KNOX-1165: -----------------------------------------------------
Summary: Knox - Another unnamed CacheManager already exists in the same VM. Key: KNOX-1165 URL: https://issues.apache.org/jira/browse/KNOX-1165 Project: Apache Knox Issue Type: Bug Components: KnoxSSO, Server Affects Versions: 0.12.0 Environment: JDK 1.8 CentOS-6 (64bit) Reporter: Ernani Pereira de Mattos Junior Priority: Critical PROBLEM: Issue is described on the note ""Error:Shiro environment initialization failed" when starting KNOX"; ERROR env.EnvironmentLoader (EnvironmentLoader.java:initEnvironment(146)) - Shiro environment initialization failed org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following: After implementing the solution of creating a new ehcache.xml and reference as <ehcache name="knox-mytopology1"> we still see the issue: Caused by: net.sf.ehcache.CacheException: Another CacheManager with same name 'knox-tp' already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following: STEPS TO REPRODUCE: When enabling the following parameters: <param> <name>main.cacheManager</name> <value>org.apache.shiro.cache.ehcache.EhCacheManager</value> </param> <param> <name>main.securityManager.cacheManager</name> <value>$cacheManager</value> </param> <param> <name>main.ldapRealm.authenticationCachingEnabled</name> <value>true</value> </param> MORE INFO: This KNOX-804 was open to solve this same issue but is not documented anywhere, but we can see the coding changes in GitHub. -> The issue seems to be a racing condition on the Shiro lib class, in which depending on the processing power of the server there are two threads within the same "if" statement; ref: https://github.com/apache/shiro/blob/master/support/ehcache/src/main/java/org/apache/shiro/cache/ehcache/EhCacheManager.java 1. The Default constructor only builds the Object, and does not do much: /** * Default no argument constructor */ public EhCacheManager() { } 2. Accordingly with shiro documentation: /** * Initializes this instance. * <p/> * If a {@link #setCacheManager CacheManager} has been * explicitly set (e.g. via Dependency Injection or programmatically) prior to calling this * method, this method does nothing. * <p/> * However, if no {@code CacheManager} has been set, the default Ehcache singleton will be initialized, where * Ehcache will look for an {@code ehcache.xml} file at the root of the classpath. If one is not found, * Ehcache will use its own failsafe configuration file. * <p/> * Because Shiro cannot use the failsafe defaults (fail-safe expunges cached objects after 2 minutes, * something not desirable for Shiro sessions), this class manages an internal default configuration for * this case. * * @throws org.apache.shiro.cache.CacheException * if there are any CacheExceptions thrown by EhCache. * @see net.sf.ehcache.CacheManager#create */ public final void init() throws CacheException { ensureCacheManager(); } private net.sf.ehcache.CacheManager ensureCacheManager() { ***It fails in here. } 2.1 This is the head of the exception: The source of the existing CacheManager is: InputStreamConfigurationSource [stream=java.io.BufferedInputStream@675ffd1d] at org.apache.shiro.cache.ehcache.EhCacheManager.ensureCacheManager(EhCacheManager.java:224) at org.apache.shiro.cache.ehcache.EhCacheManager.init(EhCacheManager.java:199) at org.apache.shiro.util.LifecycleUtils.init(LifecycleUtils.java:45) at org.apache.shiro.util.LifecycleUtils.init(LifecycleUtils.java:40) 3. Starting from Knox-804, the KnoxCacheManager was introduced. public class KnoxCacheManager extends EhCacheManager { + + public KnoxCacheManager() { + setCacheManager(net.sf.ehcache.CacheManager.create()); + } +} *Remember that Init() will do nothing if anything in case the setCacheManager is explicitly set. ref: https://github.com/apache/knox/commit/f9d8e07d768459240c8665f139cc140575dc5216 -- This message was sent by Atlassian JIRA (v6.4.14#64029)