This is an automated email from the ASF dual-hosted git repository. elek pushed a commit to branch HDDS-2181 in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git
commit 90ca1247b36fa384ae17ddd2dd11a7a5603ae72d Author: Vivek Ratnavel Subramanian <vivekratnave...@gmail.com> AuthorDate: Wed Oct 9 17:11:55 2019 -0700 Fix review comments --- .../main/java/org/apache/hadoop/ozone/OmUtils.java | 14 ---------- .../org/apache/hadoop/ozone/om/KeyManagerImpl.java | 32 ++++++++-------------- .../org/apache/hadoop/ozone/om/OzoneManager.java | 10 +++++++ .../om/request/key/OMAllocateBlockRequest.java | 21 ++------------ .../ozone/om/request/key/OMKeyCommitRequest.java | 22 ++------------- .../hadoop/ozone/om/request/key/OMKeyRequest.java | 31 +++++++++++++++++++++ 6 files changed, 57 insertions(+), 73 deletions(-) diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java index ad33cae..8e129c9 100644 --- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java +++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java @@ -57,8 +57,6 @@ import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos; import static org.apache.hadoop.hdds.HddsUtils.getHostNameFromConfigKeys; import static org.apache.hadoop.hdds.HddsUtils.getPortNumberFromConfigKeys; -import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ACL_AUTHORIZER_CLASS; -import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ACL_AUTHORIZER_CLASS_NATIVE; import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ADDRESS_KEY; import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_BIND_HOST_DEFAULT; import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_HTTPS_ADDRESS_KEY; @@ -527,16 +525,4 @@ public final class OmUtils { return repeatedOmKeyInfo; } - - /** - * Returns true if OzoneNativeAuthorizer is configured in the configuration. - * @param configuration ozone configuration - * @return true if OzoneNativeAuthorizer is configured in the configuration; - * else false. - */ - public static boolean isNativeAuthorizerEnabled(Configuration configuration) { - String authorizer = configuration.get(OZONE_ACL_AUTHORIZER_CLASS); - return authorizer != null && - authorizer.equals(OZONE_ACL_AUTHORIZER_CLASS_NATIVE); - } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java index faa65bb..d0be40b 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java @@ -1655,31 +1655,21 @@ public class KeyManagerImpl implements KeyManager { metadataManager.getLock().acquireReadLock(BUCKET_LOCK, volume, bucket); try { validateBucket(volume, bucket); - OmKeyInfo keyInfo = null; - try { - if (ozObject.getResourceType() == OPEN_KEY) { - keyInfo = metadataManager.getOpenKeyTable().get(objectKey); - } else { - OzoneFileStatus fileStatus = getFileStatus(args); - keyInfo = fileStatus.getKeyInfo(); - } + OmKeyInfo keyInfo; - if (keyInfo == null) { - // the key does not exist, but it is a parent "dir" of some key - // let access be determined based on volume/bucket/prefix ACL - LOG.debug("key:{} is non-existent parent, permit access to user:{}", - keyName, context.getClientUgi()); - return true; - } - } catch (OMException e) { - if (e.getResult() == FILE_NOT_FOUND) { - keyInfo = metadataManager.getOpenKeyTable().get(objectKey); - } + if (ozObject.getResourceType() == OPEN_KEY) { + keyInfo = metadataManager.getOpenKeyTable().get(objectKey); + } else { + OzoneFileStatus fileStatus = getFileStatus(args); + keyInfo = fileStatus.getKeyInfo(); } if (keyInfo == null) { - throw new OMException("Key not found, checkAccess failed. Key:" + - objectKey, KEY_NOT_FOUND); + // the key does not exist, but it is a parent "dir" of some key + // let access be determined based on volume/bucket/prefix ACL + LOG.debug("key:{} is non-existent parent, permit access to user:{}", + keyName, context.getClientUgi()); + return true; } boolean hasAccess = OzoneAclUtil.checkAclRight( diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java index a6503d7..ba157bc 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java @@ -301,6 +301,8 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl private final boolean grpcBlockTokenEnabled; private final boolean useRatisForReplication; + private boolean isNativeAuthorizerEnabled; + private OzoneManager(OzoneConfiguration conf) throws IOException, AuthenticationException { super(OzoneVersionInfo.OZONE_VERSION_INFO); @@ -473,6 +475,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl if (accessAuthorizer instanceof OzoneNativeAuthorizer) { OzoneNativeAuthorizer authorizer = (OzoneNativeAuthorizer) accessAuthorizer; + isNativeAuthorizerEnabled = true; authorizer.setVolumeManager(volumeManager); authorizer.setBucketManager(bucketManager); authorizer.setKeyManager(keyManager); @@ -3290,4 +3293,11 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl return ozAdmins; } + /** + * Returns true if OzoneNativeAuthorizer is enabled and false if otherwise. + * @return if native authorizer is enabled. + */ + public boolean isNativeAuthorizerEnabled() { + return isNativeAuthorizerEnabled; + } } diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java index ef2af6d..7bc8738 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java @@ -25,11 +25,8 @@ import java.util.Map; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.ozone.OmUtils; import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer; -import org.apache.hadoop.ozone.security.acl.OzoneObj; import org.apache.hadoop.util.Time; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -173,22 +170,8 @@ public class OMAllocateBlockRequest extends OMKeyRequest { OmKeyInfo omKeyInfo = null; try { // check Acl - // Native authorizer requires client id as part of keyname to check - // write ACL on key. Add client id to key name if ozone native - // authorizer is configured. - Configuration config = ozoneManager.getConfiguration(); - if (OmUtils.isNativeAuthorizerEnabled(config)) { - String keyNameForAclCheck = - keyName + "/" + allocateBlockRequest.getClientID(); - // During allocate block request, it is possible that key is - // not present in the key table and hence setting the resource type - // to OPEN_KEY to check the openKeyTable. - checkKeyAcls(ozoneManager, volumeName, bucketName, keyNameForAclCheck, - IAccessAuthorizer.ACLType.WRITE, OzoneObj.ResourceType.OPEN_KEY); - } else { - checkKeyAcls(ozoneManager, volumeName, bucketName, keyName, - IAccessAuthorizer.ACLType.WRITE, OzoneObj.ResourceType.KEY); - } + checkKeyAclsInOpenKeyTable(ozoneManager, volumeName, bucketName, keyName, + IAccessAuthorizer.ACLType.WRITE, allocateBlockRequest.getClientID()); OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager(); validateBucketAndVolume(omMetadataManager, volumeName, diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java index 63ea5a0..811ecf7 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java @@ -25,11 +25,8 @@ import java.util.stream.Collectors; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.ozone.OmUtils; import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper; import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer; -import org.apache.hadoop.ozone.security.acl.OzoneObj; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -120,22 +117,9 @@ public class OMKeyCommitRequest extends OMKeyRequest { OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager(); try { // check Acl - // Native authorizer requires client id as part of keyname to check - // write ACL on key. Add client id to key name if ozone native - // authorizer is configured. - Configuration config = ozoneManager.getConfiguration(); - if (OmUtils.isNativeAuthorizerEnabled(config)) { - String keyNameForAclCheck = - keyName + "/" + commitKeyRequest.getClientID(); - // During key commit request, it is possible that key is - // not present in the key table and hence setting the resource type - // to OPEN_KEY to check the openKeyTable. - checkKeyAcls(ozoneManager, volumeName, bucketName, keyNameForAclCheck, - IAccessAuthorizer.ACLType.WRITE, OzoneObj.ResourceType.OPEN_KEY); - } else { - checkKeyAcls(ozoneManager, volumeName, bucketName, keyName, - IAccessAuthorizer.ACLType.WRITE, OzoneObj.ResourceType.KEY); - } + checkKeyAclsInOpenKeyTable(ozoneManager, volumeName, bucketName, + keyName, IAccessAuthorizer.ACLType.WRITE, + commitKeyRequest.getClientID()); List<OmKeyLocationInfo> locationInfoList = commitKeyArgs .getKeyLocationsList().stream() diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java index 16e97e8..73753d8 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java @@ -523,6 +523,8 @@ public abstract class OMKeyRequest extends OMClientRequest { * @param volume * @param bucket * @param key + * @param aclType + * @param resourceType * @throws IOException */ protected void checkKeyAcls(OzoneManager ozoneManager, String volume, @@ -535,4 +537,33 @@ public abstract class OMKeyRequest extends OMClientRequest { } } + /** + * Check ACLs for Ozone Key in OpenKey table + * if ozone native authorizer is enabled. + * @param ozoneManager + * @param volume + * @param bucket + * @param key + * @param aclType + * @param clientId + * @throws IOException + */ + protected void checkKeyAclsInOpenKeyTable(OzoneManager ozoneManager, + String volume, String bucket, String key, + IAccessAuthorizer.ACLType aclType, long clientId) throws IOException { + // Native authorizer requires client id as part of key name to check + // write ACL on key. Add client id to key name if ozone native + // authorizer is configured. + if (ozoneManager.isNativeAuthorizerEnabled()) { + String keyNameForAclCheck = key + "/" + clientId; + // During key commit request, it is possible that key is + // not present in the key table and hence setting the resource type + // to OPEN_KEY to check the openKeyTable. + checkKeyAcls(ozoneManager, volume, bucket, keyNameForAclCheck, + aclType, OzoneObj.ResourceType.OPEN_KEY); + } else { + checkKeyAcls(ozoneManager, volume, bucket, key, + aclType, OzoneObj.ResourceType.KEY); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: hdfs-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: hdfs-commits-h...@hadoop.apache.org