[ https://issues.apache.org/jira/browse/HBASE-4050?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13411693#comment-13411693 ]
Alex Baranau commented on HBASE-4050: ------------------------------------- So, about the shim. Haven't done that kind of thing before, so please correct me where/if I'm wrong. Background: There are quite a lot (>10) classes we want to use in HBase code which are different in Hadoop 1.0+ and 2.0+ from metrics2 framework. There are two options basically. *1. Create shim classes for every class we want to use from Hadoop metrics2* and which are different in Hadoop 1.0+ and 2.0+ codebase. Shim class is basically consists of: * interface (may be abstract class) similar (or exact same, depending on which methods we want to use from it) * multiple implementations of this interface, each uses reflection to dynamically load the class from hadoop (based on which hadoop version we should use) and propagate methods invocation to it _Pros_: no extra/external jars to be loaded, all code is in main HBase maven module _Cons_: a lot of code which uses reflection (i.e. ugly code, hard to maintain, + bad performance) *2. Create shim classes for "central/factory" classes*, *add only interfaces for classes which we want to use from Hadoop metrics2* and which are different in Hadoop 1.0+ and 2.0+ codebase, *extract actual implementation of these interfaces into shim jars* and load them depending on which Hadoop version we need to use. In other words: * add _only_ interfaces in HBase codebase (in new metrics2 package) for classes of metrics2 framework we want to use * create shim classes for "central/factory" classes, such as MetricsRegistry: interface + code to load the actual implementation by classname * create two shim jars (e.g. "metrics2-hadoop-1.0-shim.jar" and "metrics2-hadoop-2.0-shim.jar") each with implementation of the interfaces above using classes from the corresponded hadoop version * add ShimLoader class which, at runtime finds out which hadoop version is used and which shim jar should be loaded, and loads the correspondent jar _Pros_: minimum reflection (just for initializing "central/factory" classes, once) _Cons_: needs loading jars (not sure this is a con), probably we'll have to add separate maven modules to develop two shim jars > Update HBase metrics framework to metrics2 framework > ---------------------------------------------------- > > Key: HBASE-4050 > URL: https://issues.apache.org/jira/browse/HBASE-4050 > Project: HBase > Issue Type: New Feature > Components: metrics > Affects Versions: 0.90.4 > Environment: Java 6 > Reporter: Eric Yang > Assignee: Alex Baranau > Priority: Critical > Fix For: 0.96.0 > > Attachments: 4050-metrics-v2.patch, 4050-metrics-v3.patch, > HBASE-4050.patch > > > Metrics Framework has been marked deprecated in Hadoop 0.20.203+ and 0.22+, > and it might get removed in future Hadoop release. Hence, HBase needs to > revise the dependency of MetricsContext to use Metrics2 framework. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira