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

Sean Busbey edited comment on HBASE-20691 at 6/21/18 6:15 AM:
--------------------------------------------------------------

{quote}
bq. CommonFSUtils should be updated to check against 
DEFER_TO_HDFS_STORAGE_POLICY

It should check against the default storage policy and let through if so. 
Currently the default policy is set to "NONE", and we give it a comprehensive 
constant name DEFER_TO_HDFS_STORAGE_POLICY
{quote}

Right now the code in CommonFSUtils just checks against the default passed into 
the call to {{setStoragePolicy}}, not against any constant. That's incorrect. 
E.g. if someone calls {{CommonFSUtils.setStoragePolicy(fs, conf, 
"get.this.storage.policy.key", "HOT")}} then if "get.this.storage.policy.key" 
isn't set it should a) use the value "HOT" and b) actually pass that value to 
the FileSystem implementation. When checking against a constant, the one it 
should check is DEFER_TO_HDFS_STORAGE_POLICY because changing our default 
policy for WALs shouldn't change which values are passed through to the 
FileSystem instance.

{quote}
bq. the test should be in TestCommonFSUtils

Agree that they should be. Checking commit history, the set-storage related 
test cases were added in TestFSUtils by HBASE-13498 and somehow left there 
during the code refactor in HBASE-18784... How about we open a follow-on JIRA 
to move all set-storage test cases into TestCommonFSUtils after this one?
{quote}

Sure. please link it here.

{quote}
bq. Shouldn't this second invocation have thrown an IOException?

Personally I think it's OK to let it fail silently with some warning log if the 
given policy is invalid or the set policy attempt failed, as the current 
implementation does. Throwing an IOE and cause region fail to open is too much 
IMHO.
{quote}

I don't mean in the region server, I mean just here in this test. the second 
call effectively uses "HOT" as the storage policy. That's a policy that we 
should give to the underlying FileSystem. The call in the test passes 
{{testFs}} as the FileSystem instance, which is an instance of the newly added 
"throw an IOException if anyone calls setStoragePolicy" FileSystem. If the use 
doesn't throw an exception then either a) CommonFSUtils isn't passing values to 
the FileSystem it should or b) the newly added FileSystem doesn't actually 
throw and exception when called.

if the problem is a) then we haven't solved part of the problem this jira 
addresses. if the problem is b) then we also don't have confirmation that 
CommonFSUtils didn't pass the "NONE" value along to the FileSystem 
implementation.


was (Author: busbey):
{quote}
bq. CommonFSUtils should be updated to check against 
DEFER_TO_HDFS_STORAGE_POLICY

It should check against the default storage policy and let through if so. 
Currently the default policy is set to "NONE", and we give it a comprehensive 
constant name DEFER_TO_HDFS_STORAGE_POLICY
{quote}

Right now the code in CommonFSUtils just checks against the default passed into 
the call to {{setStoragePolicy}}, not against any constant. That's incorrect. 
E.g. if someone calls {{CommonFSUtils.setStoragePolicy(fs, conf, 
"get.this.storage.policy.key", "HOT")}} then if "get.this.storage.policy.key" 
isn't set it should a) use the value "HOT" and b) actually pass that value to 
the FileSystem implementation. When checking against a constant, the one it 
should check is DEFER_TO_HDFS_STORAGE_POLICY because changing our default 
policy for WALs shouldn't change which values are passed through to the 
FileSystem instance.

{quote}
bq. the test should be in TestCommonFSUtils

Agree that they should be. Checking commit history, the set-storage related 
test cases were added in TestFSUtils by HBASE-13498 and somehow left there 
during the code refactor in HBASE-18784... How about we open a follow-on JIRA 
to move all set-storage test cases into TestCommonFSUtils after this one?
{quote}

Sure. please link it here.

{quote}
bq. Shouldn't this second invocation have thrown an IOException?

Personally I think it's OK to let it fail silently with some warning log if the 
given policy is invalid or the set policy attempt failed, as the current 
implementation does. Throwing an IOE and cause region fail to open is too much 
IMHO.
{quote}

I don't mean in the region server, I mean just here in this test. the second 
call effectively uses "HOT" as the storage policy. That's a policy that we 
should give to the underlying FileSystem. The call in the test passes 
{{testFs}} as the FileSystem instance, which is an instance of the newly added 
"throw and IOException if anyone calls setStoragePolicy" FileSystem. If the use 
doesn't throw an exception then either a) CommonFSUtils isn't passing values to 
the FileSystem it should or b) the newly added FileSystem doesn't actually 
throw and exception when called.

if the problem is a) then we haven't solved part of the problem this jira 
addresses. if the problem is b) then we also don't have confirmation that 
CommonFSUtils didn't pass the "NONE" value along to the FileSystem 
implementation.

> Storage policy should allow deferring to HDFS
> ---------------------------------------------
>
>                 Key: HBASE-20691
>                 URL: https://issues.apache.org/jira/browse/HBASE-20691
>             Project: HBase
>          Issue Type: Bug
>          Components: Filesystem Integration, wal
>    Affects Versions: 1.5.0, 2.0.0
>            Reporter: Sean Busbey
>            Assignee: Yu Li
>            Priority: Minor
>             Fix For: 2.1.0, 1.5.0
>
>         Attachments: HBASE-20691.patch, HBASE-20691.v2.patch, 
> HBASE-20691.v3.patch
>
>
> In HBase 1.1 - 1.4 we can defer storage policy decisions to HDFS by using 
> "NONE" as the storage policy in hbase configs.
> As described on this [dev@hbase thread "WAL storage policies and interactions 
> with Hadoop admin 
> tools."|https://lists.apache.org/thread.html/d220726fab4bb4c9e117ecc8f44246402dd97bfc986a57eb22311117@%3Cdev.hbase.apache.org%3E]
>  we no longer have that option in 2.0.0 and 1.5.0 (as the branch is now). 
> Additionally, we can't set the policy to HOT in the event that HDFS has 
> changed the policy for a parent directory of our WALs.
> We should put back that ability. Presuming this is done by re-adopting the 
> "NONE" placeholder variable, we need to ensure that value doesn't get passed 
> to HDFS APIs. Since it isn't a valid storage policy attempting to use it will 
> cause a bunch of logging churn (which will be a regression of the problem 
> HBASE-18118 sought to fix).



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to