HDFS-16207. Remove NN logs stack trace for non-existent xattr query (#3375)

Change-Id: Ibde523b20a6b8ac92991da52583e625a018d2ee6
This commit is contained in:
Ahmed Hussein 2021-09-08 23:21:16 -05:00 committed by Chris Nauroth
parent a2242df10a
commit 1f61944e3b
6 changed files with 53 additions and 10 deletions

View File

@ -0,0 +1,40 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hdfs.protocol;
import java.io.IOException;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
/**
* The exception that happens when you ask to get a non existing XAttr.
*/
@InterfaceAudience.Private
@InterfaceStability.Evolving
public class XAttrNotFoundException extends IOException {
private static final long serialVersionUID = -6506239904158794057L;
public static final String DEFAULT_EXCEPTION_MSG =
"At least one of the attributes provided was not found.";
public XAttrNotFoundException() {
this(DEFAULT_EXCEPTION_MSG);
}
public XAttrNotFoundException(String msg) {
super(msg);
}
}

View File

@ -29,6 +29,7 @@ import org.apache.hadoop.fs.permission.FsAction;
import org.apache.hadoop.hdfs.DFSConfigKeys;
import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.hdfs.XAttrHelper;
import org.apache.hadoop.hdfs.protocol.XAttrNotFoundException;
import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos;
import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos.ReencryptionInfoProto;
import org.apache.hadoop.hdfs.protocolPB.PBHelperClient;
@ -114,8 +115,7 @@ class FSDirXAttrOp {
return filteredAll;
}
if (filteredAll == null || filteredAll.isEmpty()) {
throw new IOException(
"At least one of the attributes provided was not found.");
throw new XAttrNotFoundException();
}
List<XAttr> toGet = Lists.newArrayListWithCapacity(xAttrs.size());
for (XAttr xAttr : xAttrs) {
@ -129,8 +129,7 @@ class FSDirXAttrOp {
}
}
if (!foundIt) {
throw new IOException(
"At least one of the attributes provided was not found.");
throw new XAttrNotFoundException();
}
}
return toGet;

View File

@ -127,6 +127,7 @@ import org.apache.hadoop.hdfs.protocol.QuotaByStorageTypeExceededException;
import org.apache.hadoop.hdfs.protocol.QuotaExceededException;
import org.apache.hadoop.hdfs.protocol.RecoveryInProgressException;
import org.apache.hadoop.hdfs.protocol.ReplicatedBlockStats;
import org.apache.hadoop.hdfs.protocol.XAttrNotFoundException;
import org.apache.hadoop.hdfs.protocol.ZoneReencryptionStatus;
import org.apache.hadoop.hdfs.protocol.RollingUpgradeInfo;
import org.apache.hadoop.hdfs.protocol.SnapshotDiffReport;
@ -544,7 +545,8 @@ public class NameNodeRpcServer implements NamenodeProtocols {
AclException.class,
FSLimitException.PathComponentTooLongException.class,
FSLimitException.MaxDirectoryItemsExceededException.class,
DisallowedDatanodeException.class);
DisallowedDatanodeException.class,
XAttrNotFoundException.class);
clientRpcServer.addSuppressedLoggingExceptions(StandbyException.class,
UnresolvedPathException.class);

View File

@ -43,6 +43,7 @@ import org.apache.hadoop.fs.permission.AclStatus;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.fs.permission.PermissionStatus;
import org.apache.hadoop.hdfs.XAttrHelper;
import org.apache.hadoop.hdfs.protocol.XAttrNotFoundException;
import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos;
import org.apache.hadoop.hdfs.server.namenode.FSImageFormatPBINode;
import org.apache.hadoop.hdfs.server.namenode.FSImageFormatProtobuf;
@ -452,8 +453,7 @@ class FSImageLoader {
}
if (!found) {
throw new IOException(
"At least one of the attributes provided was not found.");
throw new XAttrNotFoundException();
}
}

View File

@ -38,6 +38,7 @@ import java.util.function.Supplier;
import org.apache.hadoop.thirdparty.com.google.common.collect.Lists;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.hadoop.hdfs.protocol.XAttrNotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.log4j.Level;
@ -3435,7 +3436,7 @@ public class TestDFSShell {
String str = out.toString();
assertTrue("xattr value was incorrectly returned",
str.indexOf(
"getfattr: At least one of the attributes provided was not found")
"getfattr: " + XAttrNotFoundException.DEFAULT_EXCEPTION_MSG)
>= 0);
out.reset();
}

View File

@ -36,6 +36,7 @@ import org.apache.hadoop.hdfs.DFSTestUtil;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.HdfsConfiguration;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.protocol.XAttrNotFoundException;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.security.AccessControlException;
import org.apache.hadoop.security.UserGroupInformation;
@ -408,7 +409,7 @@ public class FSXAttrBaseTest {
Assert.fail("expected IOException");
} catch (IOException e) {
GenericTestUtils.assertExceptionContains(
"At least one of the attributes provided was not found.", e);
XAttrNotFoundException.DEFAULT_EXCEPTION_MSG, e);
}
/* Throw an exception if an xattr that was requested does not exist. */
@ -422,7 +423,7 @@ public class FSXAttrBaseTest {
Assert.fail("expected IOException");
} catch (IOException e) {
GenericTestUtils.assertExceptionContains(
"At least one of the attributes provided was not found.", e);
XAttrNotFoundException.DEFAULT_EXCEPTION_MSG, e);
}
}