[ 
https://issues.apache.org/jira/browse/HDFS-10759?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15644513#comment-15644513
 ] 

Ewan Higgs commented on HDFS-10759:
-----------------------------------

[~jingzhao]
{quote}
But we need to guarantee the compatibility: the old fsimage should still be 
supported and new enum types should be easily added (which means we may need to 
add UNKNOWN_TYPE in the enum according to the link).
{quote}

I looked into this but really as this is an optional field, it should default 
to the existing behaviour (i.e. default is contiguous and not "unknown"). If 
omitting the enum meant the block type was "unknown" new code wouldn't be able 
to handle legacy blocks (since none of them have this field set). This would 
mean the enum would be, in effect, required for all blocks since we need to 
specify that it's not unknown. 

Instead, I've made the default contiguous so existing blocks can be handled.

> Change fsimage bool isStriped from boolean to an enum
> -----------------------------------------------------
>
>                 Key: HDFS-10759
>                 URL: https://issues.apache.org/jira/browse/HDFS-10759
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: hdfs
>    Affects Versions: 3.0.0-alpha1, 3.0.0-beta1, 3.0.0-alpha2
>            Reporter: Ewan Higgs
>              Labels: hdfs-ec-3.0-must-do
>         Attachments: HDFS-10759.0001.patch
>
>
> The new erasure coding project has updated the protocol for fsimage such that 
> the {{INodeFile}} has a boolean '{{isStriped}}'. I think this is better as an 
> enum or integer since a boolean precludes any future block types. 
> For example:
> {code}
> enum BlockType {
>   CONTIGUOUS = 0,
>   STRIPED = 1,
> }
> {code}
> We can also make this more robust to future changes where there are different 
> block types supported in a staged rollout.  Here, we would use 
> {{UNKNOWN_BLOCK_TYPE}} as the first value since this is the default value. 
> See 
> [here|http://androiddevblog.com/protocol-buffers-pitfall-adding-enum-values/] 
> for more discussion.
> {code}
> enum BlockType {
>   UNKNOWN_BLOCK_TYPE = 0,
>   CONTIGUOUS = 1,
>   STRIPED = 2,
> }
> {code}
> But I'm not convinced this is necessary since there are other enums that 
> don't use this approach.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to