David Powell created HDFS-5782:
----------------------------------

             Summary: BlockListAsLongs should take lists of Replicas rather 
than concrete classes
                 Key: HDFS-5782
                 URL: https://issues.apache.org/jira/browse/HDFS-5782
             Project: Hadoop HDFS
          Issue Type: Sub-task
          Components: datanode
    Affects Versions: 3.0.0
            Reporter: David Powell
            Priority: Minor
         Attachments: HDFS-5782.patch

>From HDFS-5194:

{quote}
BlockListAsLongs's constructor takes a list of Blocks and a list of 
ReplicaInfos.  On the surface, the former is mildly irritating because it is a 
concrete class, while the latter is a greater concern due to being a File-based 
implementation of Replica.

On deeper inspection, BlockListAsLongs passes members of both to an internal 
method that accepts just Blocks, which conditionally casts them *back* to 
ReplicaInfos (this cast only happens to the latter, though this isn't 
immediately obvious to the reader).

Conveniently, all methods called on these objects are found in the Replica 
interface, and all functional (i.e. non-test) consumers of this interface pass 
in Replica subclasses.  If this constructor took Lists of Replicas instead, it 
would be more generally useful and its implementation would be cleaner as well.
{quote}

Fixing this indeed makes the business end of BlockListAsLongs cleaner while 
requiring no changes to FsDatasetImpl.  As suggested by the above description, 
though, the HDFS tests use BlockListAsLongs differently from the production 
code -- they pretty much universally provide a list of actual Blocks.  To 
handle this:

- In the case of SimulatedFSDataset, providing a list of Replicas is actually 
less work.

- In the case of NNThroughputBenchmark, rewriting to use Replicas is fairly 
invasive.  Instead, the patch creates a second constructor in BlockListOfLongs 
specifically for the use of NNThrougputBenchmark.  It turns the stomach a 
little, but is clearer and requires less code than the alternatives (and isn't 
without precedent).  




--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to