[
https://issues.apache.org/jira/browse/HBASE-12856?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14277434#comment-14277434
]
Andrew Purtell commented on HBASE-12856:
----------------------------------------
On further thought using weak refs actually seems incorrect. We create a
classloader per implementation jar so a coprocessor implementation can have
singletons across all regions in a regionserver. (This was before we had
RegionServerObserver, but is still a valid impl technique.) So having separate
and distinct classloaders for the same table coprocessor implementation would
confound expectations and produce incorrect runtime behavior.
So unless objection I am going to change the table coprocessor classloader
cache to use normal references.
> Revisit table coprocessor classloader caching
> ---------------------------------------------
>
> Key: HBASE-12856
> URL: https://issues.apache.org/jira/browse/HBASE-12856
> Project: HBase
> Issue Type: Improvement
> Reporter: Andrew Purtell
> Assignee: Andrew Purtell
> Fix For: 2.0.0, 0.98.10, 1.1.0
>
>
> For table coprocessors, we create coprocessor classloaders and cache them
> keyed on the path to the coprocessor jar. However, we cache weak refs so it's
> quite possible if the refs are not being retained due to heap pressure we
> might create a new classloader on the next region open, i.e. after a split or
> relocation. If under very heavy write load, perhaps ingest with all edits
> skipping the WAL for example, we'd be both generating a ton of garbage and
> rapidly splitting at the same time.
> We should revisit the notion of keeping only weak refs.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)