Hey Appy,

I think Enis essentially copied what I was originally trying to do. Up in Avatica[1], I made a similar API Maven module which just had interfaces. The implementation was them split up into a different module to avoid the implementation details of the API (specifically, using Dropwizard3) from "infecting" anyone who just wanted the API. Implementations of the metrics API could be picked up via ServiceLoader.

So, here in HBase, our "hbase-metrics" module is really an implementation of hbase-metrics-api for dropwizard-metrics 3.2.1 (the naming just loses that detail).

In Avatica, I wanted to make sure that people could use a metrics library implementation of their choosing (e.g. tied to whatever kind of container or app-server you're deploying Avatica). In HBase, that isn't such a concern -- we publish via Metrics2 and that's it.

That said, I could see a place where this separation enables some extra functionality with less headache, but I, admittedly, don't have a concrete use-case behind it.

- Josh

[1] https://github.com/apache/calcite-avatica

On 10/24/17 6:09 PM, Apekshit Sharma 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/eee3b0180ead73c09b33f9583bfee9c01bc3aed2/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/eee3b0180ead73c09b33f9583bfee9c01bc3aed2/hbase-metrics-api/src/main/java/org/apache/hadoop/hbase/metrics/MetricRegistriesLoader.java#L39

-- Appy

Reply via email to