The weird module dance with reflection came from needing to extend inner hadoop classes on multiple different versions. This was back when HBase had to support hadoop < 1, hadoop 1.x, and hadoop 2.x. When we dropped older hadoop versions then things got easier.
On Tue, Oct 24, 2017 at 3:09 PM, Apekshit Sharma <[email protected]> wrote: > Hi > > Am confused why do we have this weird circular dependency between the two > modules: hbase-metrics-api & hbase-metrics. And since maven doesn't allow > it explicitly, this was tucked and hidden by using reflection? > > MetricRegistriesImpl[hbase-metrics] implements > MetricRegistries[hbase-metrics-api]. > MetricRegistriesLoader[hbase-metrics-api] depends on this implementation, > MetricRegistriesImpl, because it instantiates it via reflection > <https://github.com/apache/hbase/blob/eee3b0180ead73c09b33f9583bfee9 > c01bc3aed2/hbase-metrics-api/src/main/java/org/apache/ > hadoop/hbase/metrics/MetricRegistriesLoader.java#L39> > [1]. > > Can we just move all interfaces and default implementation together into > single module. But i like the idea of keeping implementations in separate > package with "impl" explicitly in package name. > > [1] > https://github.com/apache/hbase/blob/eee3b0180ead73c09b33f9583bfee9 > c01bc3aed2/hbase-metrics-api/src/main/java/org/apache/ > hadoop/hbase/metrics/MetricRegistriesLoader.java#L39 > > -- Appy >
