Arvid Heise created ORC-653:
-------------------------------

             Summary: OrcFile#getStaticMemoryManager caches initial 
configuration and leaks classloaders
                 Key: ORC-653
                 URL: https://issues.apache.org/jira/browse/ORC-653
             Project: ORC
          Issue Type: Improvement
    Affects Versions: 1.5.6
            Reporter: Arvid Heise


As part of our effort to find classloader leaks in Apache Flink, we found the 
following issue coming from OrcFile.
{code:java}
  private static synchronized MemoryManager getStaticMemoryManager(
      final Configuration conf) {
    if (memoryManager == null) {
      memoryManager = new ThreadLocal<MemoryManager>() {
        @Override
        protected MemoryManager initialValue() {
          return new MemoryManagerImpl(conf);
        }
      };
    }
    return memoryManager.get();
  }
{code}
Here the original conf will be used for all other memory managers in the 
future. If you close the classloader of that conf, future usages of any 
{{MemoryManager}} coming through that {{ThreadLocal}} will fail.

For our use case, where there is only one conf/{{MemoryManager}} per Thread, it 
would be sufficient, to explicitly initialize the thread locals.
{code:java}
  private static synchronized MemoryManager getStaticMemoryManager(
      final Configuration conf) {
    MemoryManager manager = memoryManager.get();
    if (manager == null) {
      manager = new MemoryManagerImpl(conf);
      memoryManager.set(manager);
    }
    return manager;
  }
{code}
I can provide a patch and additional information.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to