From 71b32bcbd0c0b5ee1c48fe0740e4e9a3a1b04bac Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Tue, 18 Apr 2023 18:02:42 -0700 Subject: [PATCH 1/3] HBASE-27746 Check if the file system supports storage policy before invoking setStoragePolicy() Change-Id: I1fcc90ec23f3b23a6876f094436320d9eb8480ee --- .../java/org/apache/hadoop/hbase/util/CommonFSUtils.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java index 800764954569..7ef8d131a5df 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java @@ -41,6 +41,7 @@ import org.slf4j.LoggerFactory; import org.apache.hbase.thirdparty.com.google.common.collect.Lists; +import static org.apache.hadoop.fs.CommonPathCapabilities.FS_STORAGEPOLICY; /** * Utility methods for interacting with the underlying file system. @@ -515,6 +516,11 @@ private static void invokeSetStoragePolicy(final FileSystem fs, final Path path, final String storagePolicy) throws IOException { Exception toThrow = null; + if (!fs.hasPathCapability(path, FS_STORAGEPOLICY)) { + LOG.debug("The file system does not support storage policy."); + return; + } + try { fs.setStoragePolicy(path, storagePolicy); LOG.debug("Set storagePolicy={} for path={}", storagePolicy, path); From bf7c689fd7cab5659ecf0a7e7e7f7224fc8f2e12 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Wed, 19 Apr 2023 13:04:36 -0700 Subject: [PATCH 2/3] Checkstyle Change-Id: I7cab20073e24b97dd6b3090723f30941febd40b4 --- .../main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java index 7ef8d131a5df..fe6f3bc238a9 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CommonFSUtils.java @@ -17,6 +17,8 @@ */ package org.apache.hadoop.hbase.util; +import static org.apache.hadoop.fs.CommonPathCapabilities.FS_STORAGEPOLICY; + import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; @@ -41,7 +43,6 @@ import org.slf4j.LoggerFactory; import org.apache.hbase.thirdparty.com.google.common.collect.Lists; -import static org.apache.hadoop.fs.CommonPathCapabilities.FS_STORAGEPOLICY; /** * Utility methods for interacting with the underlying file system. From 00bc6a1f6b6f1ed35a2f0a4feaccd376b99b9ed1 Mon Sep 17 00:00:00 2001 From: Wei-Chiu Chuang Date: Wed, 19 Apr 2023 13:36:28 -0700 Subject: [PATCH 3/3] Fix test Change-Id: I4639f791febc29d7f89ee5905e043b5dcb1071dc --- .../test/java/org/apache/hadoop/hbase/util/TestFSUtils.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestFSUtils.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestFSUtils.java index ffd9a0e0a389..8e2ce8dd8c11 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestFSUtils.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestFSUtils.java @@ -26,6 +26,8 @@ import java.io.File; import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import java.util.List; import java.util.Random; import org.apache.hadoop.conf.Configuration; @@ -415,8 +417,9 @@ public void testSetStoragePolicyDefault() throws Exception { * Note: currently the default policy is set to defer to HDFS and this case is to verify the * logic, will need to remove the check if the default policy is changed */ - private void verifyNoHDFSApiInvocationForDefaultPolicy() { + private void verifyNoHDFSApiInvocationForDefaultPolicy() throws URISyntaxException, IOException { FileSystem testFs = new AlwaysFailSetStoragePolicyFileSystem(); + testFs.initialize(new URI("hdfs://localhost/"), conf); // There should be no exception thrown when setting to default storage policy, which indicates // the HDFS API hasn't been called try {