[ 
https://issues.apache.org/jira/browse/HDFS-5326?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Colin Patrick McCabe updated HDFS-5326:
---------------------------------------

    Attachment: HDFS-5326.003.patch

* adjust protobufs as recommended in HDFS-5166.  Specifically, create a 
{{PathBasedCacheDirectiveInfoProto}}, and use it in the add, modify, and list 
RPCs.  This avoids having to duplicate those fields everywhere.

* get rid of the descriptor / directive division.  Having many different types 
for the same thing is confusing to users.  The only advantage of the division 
is that it prevented using a Directive with an ID in a context where that was 
inappropriate; however, we can simply validate this in the one case it matters 
(in FSNamesystem when doing addDirective).  This also gets rid of some 
long-standing WTFs (why does -removeDirective remove a descriptor?, etc)

* Both the directive type and the protobuf now have all fields optional.  We 
can simply validate that fields exist when we need them.  This will be helpful 
later in allowing us to compatibly add new fields, once compatibility becomes a 
big concern (in branch-2).

* add {{modifyPathBasedCacheDirective}}, which modifies an existing PBCD.

* in CacheManager, there were a few cases where we were converting a PBCE to a 
PBCD, just to get some field we could have accessed directly in the PBCE.  Just 
access the field directly from the PBCE.

* in CacheManager, use try ... catch and log all {{IOException}} objects that 
were thrown, rather than making the programmer duplicate the failure message in 
the log and in the thrown exception.  This does change some indentation but it 
makes  things much cleaner on the whole.

* use standardized exceptions like {{AccessControlException}} rather than 
custom ones like {{AddPathBasedCacheDirectiveException}}.  Add 
{{IdNotFoundException}} to the common set of exceptions.

* {{addPathBasedCacheDirective}] now returns an ID, not a Directive.  The 
previous situation was confusing because the object that was being returned had 
its ID based on what the NameNode set, but the rest of the fields left 
identical to what  the client passed.  This could result in some of the fields 
being wrong.  So just return to the client what the server returned.

* Similarly, {{removePathBasedCacheDirective}} now just takes an ID, not an 
object.  It's confusing to take an object, since it obscures the fact that we 
only look at one field (ID).  Making the parameter an object encourages people 
to try to  remove by path or some other field, which simply won't work.  
Calling Directive#getId is straightforward and makes it obvious what is going 
on.

* Make sure that AddPathBasedCacheDirectiveOp stores the ID of the created 
directive.  Previously, we were relying on the ordering of the directives and 
the ID assignment order, which is brittle.  If any edit log entries are 
unreadable, this strategy fails completely.  Storing the ID is much more robust.

> add modifyDirective to cacheAdmin
> ---------------------------------
>
>                 Key: HDFS-5326
>                 URL: https://issues.apache.org/jira/browse/HDFS-5326
>             Project: Hadoop HDFS
>          Issue Type: Sub-task
>          Components: datanode, namenode
>    Affects Versions: 3.0.0
>            Reporter: Colin Patrick McCabe
>            Assignee: Colin Patrick McCabe
>         Attachments: HDFS-5326.003.patch
>
>
> We should add a way of modifying cache directives on the command-line, 
> similar to how modifyCachePool works.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to