[ 
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.

Reply via email to