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

Suresh Srinivas commented on HDFS-1822:
---------------------------------------

20.security (LAYOUT_VERSION = -19) adds the following opcodes:
  private static final byte OP_GET_DELEGATION_TOKEN = 15; //new delegation token
  private static final byte OP_RENEW_DELEGATION_TOKEN = 16; //renew delegation 
token
  private static final byte OP_CANCEL_DELEGATION_TOKEN = 17; //cancel 
delegation token
  private static final byte OP_UPDATE_MASTER_KEY = 18; //update master key

21 (layout version = -24) adds the following opcodes:
  private static final byte OP_RENAME = 15;  // new rename
  private static final byte OP_CONCAT_DELETE = 16; // concat files.
  private static final byte OP_SYMLINK = 17; // a symbolic link
  private static final byte OP_GET_DELEGATION_TOKEN = 18; //new delegation token
  private static final byte OP_RENEW_DELEGATION_TOKEN = 19; //renew delegation 
token
  private static final byte OP_CANCEL_DELEGATION_TOKEN = 20; //cancel 
delegation token
  private static final byte OP_UPDATE_MASTER_KEY = 21; //update master key

22 (layout version = -27) and trunk (layout version > -27) adds the following 
opcodes:
    public static final byte OP_RENAME = 15;  // new rename
    public static final byte OP_CONCAT_DELETE = 16; // concat files.
    public static final byte OP_SYMLINK = 17; // a symbolic link
    public static final byte OP_GET_DELEGATION_TOKEN = 18; //new delegation 
token
    public static final byte OP_RENEW_DELEGATION_TOKEN = 19; //renew delegation 
token
    public static final byte OP_CANCEL_DELEGATION_TOKEN = 20; //cancel 
delegation token
    public static final byte OP_UPDATE_MASTER_KEY = 21; //update master key


Conflicts in the opcodes:
# Opcode 15 means OP_GET_DELEGATION_TOKEN on 20.s and OP_RENAME on later 
releases
# Opcode 16 means OP_RENEW_DELEGATION_TOKEN on 20.s and OP_CONCAT_DELETE on 
later releases
# Opcode 17 means OP_CANCEL_DELEGATION_TOKEN on 20.s and OP_SYMLINK on later 
releases
# Opcode 18 means OP_UPDATE_MASTER_KEY on 20.s and OP_GET_DELEGATION_TOKEN on 
later releases


We need to support the following upgrades:
# 20.s to 22 or later releases
#* The opcode conflict here makes consuming editlogs impossible
# Need to support upgrade from 21 to 22 or later releases


I am proposing handling these conflicts as follows, while consuming editlogs:
# If layout version is > -24 then it is 20 version, use the definition as shown 
in 20.security
# If layout version is <= -24 use the definition from 21 onwards.

This is messy way of doing it. But I do not see any way around it.


In future:
- We need to make sure, any op code added is added in the trunk first, before 
adding it in older releases. Trunk should be the source of truth, ensuring the 
opcodes are chosen uniquely across different releases.


> Editlog opcodes overlap between 20 security and later releases
> --------------------------------------------------------------
>
>                 Key: HDFS-1822
>                 URL: https://issues.apache.org/jira/browse/HDFS-1822
>             Project: Hadoop HDFS
>          Issue Type: Bug
>          Components: name-node
>    Affects Versions: 0.21.0, 0.22.0, 0.23.0
>            Reporter: Suresh Srinivas
>            Assignee: Suresh Srinivas
>            Priority: Blocker
>             Fix For: 0.22.0, 0.23.0
>
>
> Same opcode are used for different operations between 0.20.security, 0.22 and 
> 0.23. This results in failure to load editlogs on later release, especially 
> during upgrades.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to