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)