Thanks for the detailed feedback, Sanjay. I have produced a new patch which addresses all your points (see below). I've also gone through and added Public Stable to those classes where I had left it implicit. As you said, this is getting close now.
> * ContentSummary, FsServerDefaults Public, Evolving. But all the writable methods are Private.
Agreed - done.
> * PositionedReadable, Seekable and Syncable - there was an internal debate in my corridor on this - lets discuss this on the jira.
I think these are user-facing, hence Public. Seekable#seekToNewSource should be private though, since it's an internal method.
> * security classes limited private evolving
OK - done. But do we need further changes given MAPREDUCE-1651?
> * DF, DU used by HDFS and MR for checking localfs - hence limitedPrivate evolving
> * FsShell - we are only exposing bin/hadoop fs; FsShell is an implementation of it. Hence private
> * Trash - private - the public cmds delete and expunge cmds expose the functionality
I think the intent is for users to be able to move files to trash, and expunge trash, from Java programs. I think Hive and Pig may use it too. So I think it's Public Stable (or Evolving perhaps).
> * Metrics - see my detailed comment above
> * The io.serializer classes are private but the class name is public since it can be specified in config (use the same solution as proposed for metric plugins.
I made the serializer classes LimitedPrivate (HDFS, MapReduce), and left the Serialization implementations Public, but with Private methods.
> * GenericOptionsParser, private but Tool, ToolRunner public.
OK - done.
> * ReflectionUtils, limited private.
Client code may use ReflectionUtils.newInstance() - so I would suggest Public Evolving.