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

Feng Honghua commented on HBASE-10595:
--------------------------------------

bq.Lastly, what about we don't check the existence of the table dir, and just 
return null if the table descriptor file doesn't exist(it's now treated a 
special case of "modified time not newer than cache", IMHO it's incorrect)? 
This way we still align with the cache semantic "invalidate cache if it's not 
coherent with its backing store" but can save an access to NN if the table dir 
does exist.
I will make a new patch accordingly if you guys agree on above:-)

> HBaseAdmin.getTableDescriptor can wrongly get the previous table's 
> TableDescriptor even after the table dir in hdfs is removed
> ------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-10595
>                 URL: https://issues.apache.org/jira/browse/HBASE-10595
>             Project: HBase
>          Issue Type: Sub-task
>          Components: master, util
>            Reporter: Feng Honghua
>            Assignee: Feng Honghua
>         Attachments: HBASE-10595-trunk_v1.patch, HBASE-10595-trunk_v2.patch, 
> HBASE-10595-trunk_v3.patch, HBASE-10595-trunk_v4.patch
>
>
> When a table dir (in hdfs) is removed(by outside), HMaster will still return 
> the cached TableDescriptor to client for getTableDescriptor request.
> On the contrary, HBaseAdmin.listTables() is handled correctly in current 
> implementation, for a table whose table dir in hdfs is removed by outside, 
> getTableDescriptor can still retrieve back a valid (old) table descriptor, 
> while listTables says it doesn't exist, this is inconsistent
> The reason for this bug is because HMaster (via FSTableDescriptors) doesn't 
> check if the table dir exists for getTableDescriptor() request, (while it 
> lists all existing table dirs(not firstly respects cache) and returns 
> accordingly for listTables() request)
> When a table is deleted via deleteTable, the cache will be cleared after the 
> table dir and tableInfo file is removed, listTables/getTableDescriptor 
> inconsistency should be transient(though still exists, when table dir is 
> removed while cache is not cleared) and harder to expose



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

Reply via email to