[
https://issues.apache.org/jira/browse/HADOOP-6668?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12863967#action_12863967
]
Tom White commented on HADOOP-6668:
-----------------------------------
{quote}
Java public does not imply audience public. An interface is audience public
only if we expect applications to use it directly. This is probably the biggest
difference between the approach taken in this jira and HADOOP-6289.
I do not fully understand the distinction you are trying to make in " APIs that
are exposed to the user but not coded against directly (e.g. the metrics API,)"
{quote}
Users configure the metrics system, and to do so they need to have a way of
discovering which metrics contexts are available. By marking the metrics
classes like org.apache.hadoop.metrics.file.FileContext Private or
LimitedPrivate you make them no longer discoverable, since we do not publish
javadoc for private elements. (Also its class javadoc has useful information in
it.) The class is public in the sense that it is referenced in the metrics
configuration, even though the user does not code against it directly.
{quote}
I disagree with your metrics example: we should not expose APIs like metrics as
audience public. They should be limited private.
{quote}
Limited private for use by which components or subprojects? How would I write
my own metrics context?
{quote}
In the majority cases I agree, except that
some private interfaces need to be marked as stable: protocols like client
protocol should be marked as
limited-private and stable
{quote}
I agree with this. (Indeed I marked ClientProtocol in MAPREDUCE-1623 private
stable.)
{quote}
> * If an API is not annotated then it defaults to the usual Java visibility
> and Apache HADOOP stability (http://wiki.apache.org/hadoop/Roadmap) rules.
This is different than what was stated in HADOOP-5073. It should default to
audience-private unstable.
{quote}
I don't agree with this since it violates the principle of least surprise - if
an otherwise unannotated class is public, then a user would reasonably expect
it to be public. I think the onus is on developers writing code for Hadoop to
mark things as private. Longer term it may help to separate the client APIs
from the implementation (MAPREDUCE-1638).
> Apply audience and stability annotations to classes in common
> -------------------------------------------------------------
>
> Key: HADOOP-6668
> URL: https://issues.apache.org/jira/browse/HADOOP-6668
> Project: Hadoop Common
> Issue Type: Sub-task
> Components: documentation
> Reporter: Tom White
> Assignee: Tom White
> Priority: Blocker
> Fix For: 0.21.0
>
> Attachments: common.interface-tw-annotated.txt, HADOOP-6668.patch,
> HADOOP-6668.patch, HADOOP-6668.patch, HADOOP-6668.patch, HADOOP-6668.patch,
> HADOOP-6668.patch
>
>
> Mark private implementation classes with the InterfaceAudience.Private or
> InterfaceAudience.LimitedPrivate annotation to exclude them from user Javadoc
> and JDiff.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.