This is an automated email from the ASF dual-hosted git repository.
siyao pushed a commit to branch HDDS-4944
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/HDDS-4944 by this push:
new bb67e13 HDDS-6004. Use changes from HDDS-5881 for volume chroot.
(#2924)
bb67e13 is described below
commit bb67e13048914d90a37469d9cff5952045a8c454
Author: Ethan Rose <[email protected]>
AuthorDate: Wed Jan 19 18:38:10 2022 -0800
HDDS-6004. Use changes from HDDS-5881 for volume chroot. (#2924)
---
.../apache/hadoop/ozone/client/ObjectStore.java | 15 +--
.../apache/hadoop/ozone/client/OzoneClient.java | 7 +-
.../hadoop/ozone/client/OzoneClientFactory.java | 51 +++------
.../ozone/client/protocol/ClientProtocol.java | 3 +-
.../apache/hadoop/ozone/client/rpc/RpcClient.java | 4 +-
.../hadoop/ozone/om/helpers/OmDBAccessIdInfo.java | 75 ++++---------
.../ozone/om/protocol/OzoneManagerProtocol.java | 2 +-
...OzoneManagerProtocolClientSideTranslatorPB.java | 3 +-
.../ozone/security/OzoneTokenIdentifier.java | 37 +------
.../om/multitenant/TestMultiTenantVolume.java | 7 +-
.../src/main/proto/OmClientProtocol.proto | 9 +-
.../ozone/om/codec/OmDBAccessIdInfoCodec.java | 6 +-
.../hadoop/ozone/om/OMMultiTenantManager.java | 3 +-
.../hadoop/ozone/om/OMMultiTenantManagerImpl.java | 20 ++--
.../org/apache/hadoop/ozone/om/OzoneAclUtils.java | 21 ++++
.../org/apache/hadoop/ozone/om/OzoneManager.java | 118 ++++++++++++---------
.../hadoop/ozone/om/S3SecretManagerImpl.java | 14 +--
.../hadoop/ozone/om/request/OMClientRequest.java | 12 +--
.../om/request/file/OMDirectoryCreateRequest.java | 2 +-
.../om/request/s3/security/OMSetSecretRequest.java | 48 +--------
.../om/request/s3/security/S3GetSecretRequest.java | 43 +++-----
.../s3/tenant/OMAssignUserToTenantRequest.java | 8 +-
.../s3/tenant/OMTenantAssignAdminRequest.java | 1 -
.../s3/tenant/OMTenantRevokeAdminRequest.java | 1 -
.../response/s3/security/OMSetSecretResponse.java | 13 +--
.../tenant/OMTenantAssignUserAccessIdResponse.java | 6 +-
.../protocolPB/OzoneManagerRequestHandler.java | 8 +-
.../OzoneDelegationTokenSecretManager.java | 18 +---
.../ozone/om/TestOMMultiTenantManagerImpl.java | 12 +--
.../s3/security/TestS3GetSecretRequest.java | 9 +-
.../ozone/security/TestOzoneTokenIdentifier.java | 18 ----
.../hadoop/ozone/s3/OzoneClientProducer.java | 18 +---
32 files changed, 229 insertions(+), 383 deletions(-)
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/ObjectStore.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/ObjectStore.java
index 5b5b664..6819718 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/ObjectStore.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/ObjectStore.java
@@ -64,8 +64,6 @@ public class ObjectStore {
*/
private int listCacheSize;
private final String defaultS3Volume;
- // TODO: Using for now for multitenancy but remove when HDDS-4440 is merged.
- private final String accessID;
/**
* Creates an instance of ObjectStore.
@@ -73,15 +71,9 @@ public class ObjectStore {
* @param proxy ClientProtocol proxy.
*/
public ObjectStore(ConfigurationSource conf, ClientProtocol proxy) {
- this(conf, proxy, null);
- }
-
- public ObjectStore(ConfigurationSource conf, ClientProtocol proxy,
- String accessID) {
this.proxy = TracingUtil.createProxy(proxy, ClientProtocol.class, conf);
this.listCacheSize = HddsClientUtils.getListCacheSize(conf);
defaultS3Volume = HddsClientUtils.getDefaultS3VolumeName(conf);
- this.accessID = accessID;
}
@VisibleForTesting
@@ -90,7 +82,6 @@ public class ObjectStore {
OzoneConfiguration conf = new OzoneConfiguration();
proxy = null;
defaultS3Volume = HddsClientUtils.getDefaultS3VolumeName(conf);
- this.accessID = null;
}
@VisibleForTesting
@@ -163,11 +154,7 @@ public class ObjectStore {
}
public OzoneVolume getS3Volume() throws IOException {
- if (accessID == null) {
- return proxy.getVolumeDetails(defaultS3Volume);
- } else {
- return proxy.getS3VolumeDetails(accessID);
- }
+ return proxy.getS3VolumeDetails();
}
public S3SecretValue getS3Secret(String kerberosID) throws IOException {
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneClient.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneClient.java
index bb97ebc..493315e 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneClient.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneClient.java
@@ -84,13 +84,8 @@ public class OzoneClient implements Closeable {
* @param proxy ClientProtocol proxy instance
*/
public OzoneClient(ConfigurationSource conf, ClientProtocol proxy) {
- this(conf, proxy, null);
- }
-
- public OzoneClient(ConfigurationSource conf, ClientProtocol proxy,
- String accessID) {
this.proxy = proxy;
- this.objectStore = new ObjectStore(conf, this.proxy, accessID);
+ this.objectStore = new ObjectStore(conf, this.proxy);
this.conf = conf;
}
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneClientFactory.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneClientFactory.java
index a0cddc3..9bf3973 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneClientFactory.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/OzoneClientFactory.java
@@ -107,16 +107,10 @@ public final class OzoneClientFactory {
*/
public static OzoneClient getRpcClient(String omServiceId,
ConfigurationSource config) throws IOException {
- return getRpcClient(getClientProtocol(config, omServiceId), config, null);
- }
-
- public static OzoneClient getRpcClient(String omServiceId,
- ConfigurationSource config, String accessID) throws IOException {
Preconditions.checkNotNull(omServiceId);
Preconditions.checkNotNull(config);
if (OmUtils.isOmHAServiceId(config, omServiceId)) {
- return getRpcClient(getClientProtocol(config, omServiceId), config,
- accessID);
+ return getRpcClient(getClientProtocol(config, omServiceId), config);
} else {
throw new IOException("Service ID specified " +
"does not match with " + OZONE_OM_SERVICE_IDS_KEY + " defined in " +
@@ -125,8 +119,18 @@ public final class OzoneClientFactory {
}
}
- public static OzoneClient getRpcClient(ConfigurationSource config,
- String accessID) throws IOException {
+ /**
+ * Returns an OzoneClient which will use RPC protocol.
+ *
+ * @param config
+ * used for OzoneClient creation
+ *
+ * @return OzoneClient
+ *
+ * @throws IOException
+ */
+ public static OzoneClient getRpcClient(ConfigurationSource config)
+ throws IOException {
Preconditions.checkNotNull(config);
// Doing this explicitly so that when service ids are defined in the
@@ -140,29 +144,13 @@ public final class OzoneClientFactory {
" defined in the configuration. Use the method getRpcClient which " +
"takes serviceID and configuration as param");
} else if (serviceIds.length == 1) {
- return getRpcClient(getClientProtocol(config, serviceIds[0]), config,
- accessID);
+ return getRpcClient(getClientProtocol(config, serviceIds[0]), config);
} else {
- return getRpcClient(getClientProtocol(config), config, accessID);
+ return getRpcClient(getClientProtocol(config), config);
}
}
/**
- * Returns an OzoneClient which will use RPC protocol.
- *
- * @param config
- * used for OzoneClient creation
- *
- * @return OzoneClient
- *
- * @throws IOException
- */
- public static OzoneClient getRpcClient(ConfigurationSource config)
- throws IOException {
- return getRpcClient(config, null);
- }
-
- /**
* Creates OzoneClient with the given ClientProtocol and Configuration.
*
* @param clientProtocol
@@ -172,13 +160,8 @@ public final class OzoneClientFactory {
* Configuration to be used for OzoneClient creation
*/
private static OzoneClient getRpcClient(ClientProtocol clientProtocol,
- ConfigurationSource config) {
- return new OzoneClient(config, clientProtocol, null);
- }
-
- private static OzoneClient getRpcClient(ClientProtocol clientProtocol,
- ConfigurationSource config, String accessID) {
- return new OzoneClient(config, clientProtocol, accessID);
+ ConfigurationSource config) {
+ return new OzoneClient(config, clientProtocol);
}
/**
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java
index ab1c52e..1bb410e 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/protocol/ClientProtocol.java
@@ -124,12 +124,11 @@ public interface ClientProtocol {
throws IOException;
/**
- * @param accessID
* @return The {@link OzoneVolume} that should be used to for this S3
* request based on its access ID.
* @throws IOException
*/
- OzoneVolume getS3VolumeDetails(String accessID) throws IOException;
+ OzoneVolume getS3VolumeDetails() throws IOException;
/**
* Checks if a Volume exists and the user with a role specified has access
diff --git
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
index ad0c13f..98c19ae 100644
---
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
+++
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
@@ -433,8 +433,8 @@ public class RpcClient implements ClientProtocol {
}
@Override
- public OzoneVolume getS3VolumeDetails(String accessID) throws IOException {
- OmVolumeArgs volume = ozoneManagerClient.getS3Volume(accessID);
+ public OzoneVolume getS3VolumeDetails() throws IOException {
+ OmVolumeArgs volume = ozoneManagerClient.getS3Volume();
return buildOzoneVolume(volume);
}
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmDBAccessIdInfo.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmDBAccessIdInfo.java
index 7488603..fcc6d8c 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmDBAccessIdInfo.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmDBAccessIdInfo.java
@@ -17,8 +17,9 @@
*/
package org.apache.hadoop.ozone.om.helpers;
-import com.google.common.base.Preconditions;
-import org.apache.hadoop.hdds.StringUtils;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
+
+import java.io.IOException;
/**
* This class is used for storing Ozone tenant accessId info.
@@ -33,10 +34,6 @@ public final class OmDBAccessIdInfo {
*/
private final String userPrincipal;
/**
- * Corresponding secret key for the accessId.
- */
- private final String secretKey;
- /**
* Whether this accessId is an administrator of the tenant.
*/
private final boolean isAdmin;
@@ -49,71 +46,47 @@ public final class OmDBAccessIdInfo {
// This implies above String fields should NOT contain the split key.
public static final String SERIALIZATION_SPLIT_KEY = ";";
- public OmDBAccessIdInfo(String tenantId,
- String userPrincipal, String secretKey,
+ public OmDBAccessIdInfo(String tenantId, String userPrincipal,
boolean isAdmin, boolean isDelegatedAdmin) {
this.tenantId = tenantId;
this.userPrincipal = userPrincipal;
- this.secretKey = secretKey;
this.isAdmin = isAdmin;
this.isDelegatedAdmin = isDelegatedAdmin;
}
- private OmDBAccessIdInfo(String accessIdInfoString) {
- String[] tInfo = accessIdInfoString.split(SERIALIZATION_SPLIT_KEY);
- Preconditions.checkState(tInfo.length == 3 || tInfo.length == 5,
- "Incorrect accessIdInfoString");
-
- tenantId = tInfo[0];
- userPrincipal = tInfo[1];
- secretKey = tInfo[2];
- if (tInfo.length == 5) {
- isAdmin = Boolean.parseBoolean(tInfo[3]);
- isDelegatedAdmin = Boolean.parseBoolean(tInfo[4]);
- } else {
- isAdmin = false;
- isDelegatedAdmin = false;
- }
- }
-
public String getTenantId() {
return tenantId;
}
- private String serialize() {
- final StringBuilder sb = new StringBuilder();
- sb.append(tenantId);
- sb.append(SERIALIZATION_SPLIT_KEY).append(userPrincipal);
- sb.append(SERIALIZATION_SPLIT_KEY).append(secretKey);
- sb.append(SERIALIZATION_SPLIT_KEY).append(isAdmin);
- sb.append(SERIALIZATION_SPLIT_KEY).append(isDelegatedAdmin);
- return sb.toString();
- }
-
/**
- * Convert OmDBAccessIdInfo to byteArray to be persisted to DB.
- * @return byte[]
+ * Convert OmDBAccessIdInfo to protobuf to be persisted to DB.
*/
- public byte[] convertToByteArray() {
- return StringUtils.string2Bytes(serialize());
+ public OzoneManagerProtocolProtos.OmDBAccessInfo getProtobuf() {
+ return OzoneManagerProtocolProtos.OmDBAccessInfo.newBuilder()
+ .setUserPrincipal(userPrincipal)
+ .setIsAdmin(isAdmin)
+ .setIsDelegatedAdmin(isDelegatedAdmin)
+ .setTenantId(tenantId)
+ .build();
}
/**
* Convert byte array to OmDBAccessIdInfo.
*/
- public static OmDBAccessIdInfo getFromByteArray(byte[] bytes) {
- String tInfo = StringUtils.bytes2String(bytes);
- return new OmDBAccessIdInfo(tInfo);
+ public static OmDBAccessIdInfo getFromProtobuf(
+ OzoneManagerProtocolProtos.OmDBAccessInfo infoProto) throws IOException {
+ return new Builder()
+ .setKerberosPrincipal(infoProto.getUserPrincipal())
+ .setIsAdmin(infoProto.getIsAdmin())
+ .setIsDelegatedAdmin(infoProto.getIsDelegatedAdmin())
+ .setTenantId(infoProto.getTenantId())
+ .build();
}
public String getUserPrincipal() {
return userPrincipal;
}
- public String getSecretKey() {
- return secretKey;
- }
-
public boolean getIsAdmin() {
return isAdmin;
}
@@ -129,7 +102,6 @@ public final class OmDBAccessIdInfo {
public static final class Builder {
private String tenantId;
private String kerberosPrincipal;
- private String sharedSecret;
private boolean isAdmin;
private boolean isDelegatedAdmin;
@@ -143,11 +115,6 @@ public final class OmDBAccessIdInfo {
return this;
}
- public Builder setSharedSecret(String sharedSecret) {
- this.sharedSecret = sharedSecret;
- return this;
- }
-
public Builder setIsAdmin(boolean isAdmin) {
this.isAdmin = isAdmin;
return this;
@@ -159,7 +126,7 @@ public final class OmDBAccessIdInfo {
}
public OmDBAccessIdInfo build() {
- return new OmDBAccessIdInfo(tenantId, kerberosPrincipal, sharedSecret,
+ return new OmDBAccessIdInfo(tenantId, kerberosPrincipal,
isAdmin, isDelegatedAdmin);
}
}
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocol/OzoneManagerProtocol.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocol/OzoneManagerProtocol.java
index b9bf572..e18d57f 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocol/OzoneManagerProtocol.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocol/OzoneManagerProtocol.java
@@ -605,7 +605,7 @@ public interface OzoneManagerProtocol
"this to be implemented, as write requests use a new approach");
}
- OmVolumeArgs getS3Volume(String accessID) throws IOException;
+ OmVolumeArgs getS3Volume() throws IOException;
/**
* Revoke user accessId to a tenant.
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
index 9e0f789..2051a97 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/protocolPB/OzoneManagerProtocolClientSideTranslatorPB.java
@@ -1102,9 +1102,8 @@ public final class
OzoneManagerProtocolClientSideTranslatorPB
}
@Override
- public OmVolumeArgs getS3Volume(String accessID) throws IOException {
+ public OmVolumeArgs getS3Volume() throws IOException {
final GetS3VolumeRequest request = GetS3VolumeRequest.newBuilder()
- .setAccessID(accessID)
.build();
final OMRequest omRequest = createOMRequest(Type.GetS3Volume)
.setGetS3VolumeRequest(request)
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/security/OzoneTokenIdentifier.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/security/OzoneTokenIdentifier.java
index a62dd15..01fcaf8 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/security/OzoneTokenIdentifier.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/security/OzoneTokenIdentifier.java
@@ -23,7 +23,6 @@ import java.io.DataOutput;
import java.io.IOException;
import java.time.Instant;
import java.util.Arrays;
-import java.util.function.UnaryOperator;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.hadoop.hdds.annotation.InterfaceAudience;
@@ -34,10 +33,7 @@ import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableUtils;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMTokenProto;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMTokenProto.Type;
-import org.apache.hadoop.security.UserGroupInformation;
import
org.apache.hadoop.security.token.delegation.AbstractDelegationTokenIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMTokenProto.Type.S3AUTHINFO;
@@ -50,9 +46,6 @@ import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.
public class OzoneTokenIdentifier extends
AbstractDelegationTokenIdentifier {
- private static final Logger LOG =
- LoggerFactory.getLogger(OzoneTokenIdentifier.class);
-
public static final Text KIND_NAME = new Text("OzoneToken");
private String omCertSerialId;
private Type tokenType;
@@ -61,10 +54,6 @@ public class OzoneTokenIdentifier extends
private String strToSign;
private String omServiceId;
- // Function to convert an arbitrary accessId to the kerberos user that owns
- // the accessId.
- private UnaryOperator<String> getUserForAccessId;
-
/**
* Create an empty delegation token identifier.
*/
@@ -118,24 +107,10 @@ public class OzoneTokenIdentifier extends
return buf.getData();
}
- @Override
- public UserGroupInformation getUser() {
- if (getUserForAccessId != null && tokenType.equals(S3AUTHINFO)) {
- // Should have been passed as accessId
- String tokenUser = getOwner().toString();
- String actualUserName = getUserForAccessId.apply(tokenUser);
- if (actualUserName != null) {
- LOG.debug("S3 Token user for {} : {}", tokenUser, actualUserName);
- return UserGroupInformation.createRemoteUser(actualUserName);
- }
- }
- return super.getUser();
- }
-
- /** Instead of relying on proto deserialization, this
- * provides explicit deserialization for OzoneTokenIdentifier.
- * @return byte[]
- */
+ /** Instead of relying on proto deserialization, this
+ * provides explicit deserialization for OzoneTokenIdentifier.
+ * @return byte[]
+ */
public OzoneTokenIdentifier fromUniqueSerializedKey(byte[] rawData)
throws IOException {
DataInputBuffer in = new DataInputBuffer();
@@ -393,10 +368,6 @@ public class OzoneTokenIdentifier extends
this.strToSign = strToSign;
}
- public void setGetUserForAccessId(UnaryOperator<String> func) {
- this.getUserForAccessId = func;
- }
-
@Override
public String toString() {
StringBuilder buffer = new StringBuilder();
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/multitenant/TestMultiTenantVolume.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/multitenant/TestMultiTenantVolume.java
index 2415285..cd7a58a 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/multitenant/TestMultiTenantVolume.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/multitenant/TestMultiTenantVolume.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.ozone.client.OzoneVolume;
import org.apache.hadoop.ozone.client.rpc.RpcClient;
import org.apache.hadoop.ozone.om.OMMultiTenantManagerImpl;
import org.apache.hadoop.ozone.om.exceptions.OMException;
+import org.apache.hadoop.ozone.om.protocol.S3Auth;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -150,8 +151,8 @@ public class TestMultiTenantVolume {
OzoneConfiguration conf = cluster.getOzoneManager().getConfiguration();
// Manually construct an object store instead of using the cluster
// provided one so we can specify the access ID.
- // TODO: Update after HDDS-4440 is merged and this is not necessary.
- return new ObjectStore(conf, new RpcClient(conf, null),
- accessID);
+ RpcClient client = new RpcClient(conf, null);
+ client.setTheadLocalS3Auth(new S3Auth("unused1", "unused2", accessID));
+ return new ObjectStore(conf, client);
}
}
diff --git
a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
index 5cfb56c..fdc5765 100644
--- a/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
+++ b/hadoop-ozone/interface-client/src/main/proto/OmClientProtocol.proto
@@ -1503,7 +1503,7 @@ message TenantRevokeAdminRequest {
}
message GetS3VolumeRequest {
- optional string accessID = 1;
+
}
message CreateTenantResponse {
@@ -1532,6 +1532,13 @@ message TenantRevokeAdminResponse {
optional bool success = 1; // TODO: Remove this field
}
+message OmDBAccessInfo {
+ optional string tenantId = 1;
+ optional string userPrincipal = 2;
+ optional bool isAdmin = 3;
+ optional bool isDelegatedAdmin = 4;
+}
+
message GetS3VolumeResponse {
optional VolumeInfo volumeInfo = 1;
}
diff --git
a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/OmDBAccessIdInfoCodec.java
b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/OmDBAccessIdInfoCodec.java
index fa8ad73..b3926fc 100644
---
a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/OmDBAccessIdInfoCodec.java
+++
b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/codec/OmDBAccessIdInfoCodec.java
@@ -19,6 +19,7 @@ package org.apache.hadoop.ozone.om.codec;
import org.apache.hadoop.hdds.utils.db.Codec;
import org.apache.hadoop.ozone.om.helpers.OmDBAccessIdInfo;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,7 +37,7 @@ public class OmDBAccessIdInfoCodec implements
Codec<OmDBAccessIdInfo> {
@Override
public byte[] toPersistedFormat(OmDBAccessIdInfo object) throws IOException {
checkNotNull(object, "Null object can't be converted to byte array.");
- return object.convertToByteArray();
+ return object.getProtobuf().toByteArray();
}
@Override
@@ -44,7 +45,8 @@ public class OmDBAccessIdInfoCodec implements
Codec<OmDBAccessIdInfo> {
throws IOException {
checkNotNull(rawData, "Null byte array can't be converted to " +
"real object.");
- return OmDBAccessIdInfo.getFromByteArray(rawData);
+ return OmDBAccessIdInfo.getFromProtobuf(
+ OzoneManagerProtocolProtos.OmDBAccessInfo.parseFrom(rawData));
}
@Override
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManager.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManager.java
index f44dafc..558f9be 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManager.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManager.java
@@ -19,6 +19,7 @@ package org.apache.hadoop.ozone.om;
import java.io.IOException;
import java.util.List;
+import com.google.common.base.Optional;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.ozone.om.helpers.TenantUserList;
import org.apache.hadoop.ozone.om.multitenant.AccessPolicy;
@@ -196,7 +197,7 @@ public interface OMMultiTenantManager {
* @param accessID
* @return String tenant name
*/
- String getTenantForAccessID(String accessID) throws IOException;
+ Optional<String> getTenantForAccessID(String accessID) throws IOException;
/**
* Given a user, make him an admin of the corresponding Tenant.
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManagerImpl.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManagerImpl.java
index b073936..5bdc12e 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManagerImpl.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMultiTenantManagerImpl.java
@@ -35,6 +35,8 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+
+import com.google.common.base.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -354,8 +356,7 @@ public class OMMultiTenantManagerImpl implements
OMMultiTenantManager {
}
@Override
- public String getUserSecret(String accessID)
- throws IOException {
+ public String getUserSecret(String accessID) throws IOException {
return "";
}
@@ -405,13 +406,14 @@ public class OMMultiTenantManagerImpl implements
OMMultiTenantManager {
}
@Override
- public String getTenantForAccessID(String accessID) throws IOException {
+ public Optional<String> getTenantForAccessID(String accessID)
+ throws IOException {
OmDBAccessIdInfo omDBAccessIdInfo =
omMetadataManager.getTenantAccessIdTable().get(accessID);
if (omDBAccessIdInfo == null) {
- throw new OMException(INVALID_ACCESSID);
+ return Optional.absent();
}
- return omDBAccessIdInfo.getTenantId();
+ return Optional.of(omDBAccessIdInfo.getTenantId());
}
public List<String> listAllAccessIDs(String tenantID)
@@ -426,8 +428,12 @@ public class OMMultiTenantManagerImpl implements
OMMultiTenantManager {
try {
controlPathLock.writeLock().lock();
// tenantId (tenant name) is necessary to retrieve role name
- final String tenantId = getTenantForAccessID(accessID);
- assert(tenantId != null);
+ Optional<String> optionalTenant = getTenantForAccessID(accessID);
+ if (!optionalTenant.isPresent()) {
+ throw new OMException("No tenant found for access ID " + accessID,
+ INVALID_ACCESSID);
+ }
+ final String tenantId = optionalTenant.get();
final OzoneTenantRolePrincipal existingAdminRole =
OzoneTenantRolePrincipal.getAdminRole(tenantId);
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneAclUtils.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneAclUtils.java
index e7834db..91eeaeb 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneAclUtils.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneAclUtils.java
@@ -32,9 +32,30 @@ import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.INVA
*/
public final class OzoneAclUtils {
+ private static OMMultiTenantManager multiTenantManager;
+
private OzoneAclUtils() {
}
+ public static void setOMMultiTenantManager(
+ OMMultiTenantManager tenantManager) {
+ multiTenantManager = tenantManager;
+ }
+
+ /**
+ * Converts the given access ID to a kerberos principal.
+ * If the access ID does not belong to a tenant, the access ID is returned
+ * as is to be used as the principal.
+ */
+ public static String principalToAccessID(String accessID) throws IOException
{
+ String principal = multiTenantManager.getUserNameGivenAccessId(accessID);
+ if (principal == null) {
+ principal = accessID;
+ }
+
+ return principal;
+ }
+
/**
* Check Acls of ozone object with volume owner and bucket owner.
* @param ozoneManager
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 0e07b64..3d7473d 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
@@ -251,7 +251,6 @@ import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_DEFAULT_BUCKET_LAYOU
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.DETECTED_LOOP_IN_BUCKET_LINKS;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.INVALID_AUTH_METHOD;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.INVALID_REQUEST;
-import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.INVALID_ACCESSID;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.PERMISSION_DENIED;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.TOKEN_ERROR_OTHER;
import static
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
@@ -303,7 +302,7 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
private String omId;
private OMMetadataManager metadataManager;
- private OMMultiTenantManager multiTenantManagr;
+ private OMMultiTenantManager multiTenantManager;
private VolumeManager volumeManager;
private BucketManager bucketManager;
private KeyManager keyManager;
@@ -648,8 +647,9 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
private void instantiateServices(boolean withNewSnapshot) throws IOException
{
metadataManager = new OmMetadataManagerImpl(configuration);
- multiTenantManagr = new OMMultiTenantManagerImpl(metadataManager,
+ multiTenantManager = new OMMultiTenantManagerImpl(metadataManager,
configuration);
+ OzoneAclUtils.setOMMultiTenantManager(multiTenantManager);
volumeManager = new VolumeManagerImpl(metadataManager, configuration);
bucketManager = new BucketManagerImpl(metadataManager, getKmsProvider(),
isRatisEnabled);
@@ -887,7 +887,6 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
.setS3SecretManager(s3SecretManager)
.setCertificateClient(certClient)
.setOmServiceId(omNodeDetails.getServiceId())
- .setOMMultiTenantManager(multiTenantManagr)
.build();
}
@@ -1356,7 +1355,7 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
* @return metadata manager.
*/
public OMMultiTenantManager getMultiTenantManager() {
- return multiTenantManagr;
+ return multiTenantManager;
}
public OzoneBlockTokenSecretManager getBlockTokenMgr() {
@@ -2169,8 +2168,9 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
throws IOException {
UserGroupInformation user;
if (getS3Auth() != null) {
- user = UserGroupInformation.createRemoteUser(
- getS3Auth().getAccessId());
+ String principal =
+ OzoneAclUtils.principalToAccessID(getS3Auth().getAccessId());
+ user = UserGroupInformation.createRemoteUser(principal);
} else {
user = ProtobufRpcEngine.Server.getRemoteUser();
}
@@ -2994,14 +2994,14 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
auditMap.put(OzoneConsts.USER_PREFIX, prefix);
try {
String userName = getRemoteUser().getUserName();
- if (!multiTenantManagr.isTenantAdmin(userName, tenantId)
+ if (!multiTenantManager.isTenantAdmin(userName, tenantId)
&& !omAdminUsernames.contains(userName)) {
throw new IOException("Only tenant and ozone admins can access this " +
"API. '" + userName + "' is not an admin.");
}
final TenantUserList userList =
- multiTenantManagr.listUsersInTenant(tenantId, prefix);
+ multiTenantManager.listUsersInTenant(tenantId, prefix);
AUDIT.logReadSuccess(buildAuditMessageForSuccess(
OMAction.TENANT_LIST_USER, auditMap));
return userList;
@@ -3013,38 +3013,54 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
}
@Override
- public OmVolumeArgs getS3Volume(String accessID) throws IOException {
-
- final String tenantId;
- try {
- tenantId = multiTenantManagr.getTenantForAccessID(accessID);
- // TODO: Get volume name from DB. Do not assume the same. e.g.
- //metadataManager.getTenantStateTable().get(tenantId)
- // .getBucketNamespaceName();
- final String volumeName = tenantId;
- if (LOG.isDebugEnabled()) {
- LOG.debug("Get S3 volume request for access ID {} belonging to tenant"
+
- " {} is directed to the volume {}.", accessID, tenantId,
- volumeName);
- }
- // This call performs acl checks and checks volume existence.
- return getVolumeInfo(volumeName);
-
- } catch (OMException ex) {
- if (ex.getResult().equals(INVALID_ACCESSID)) {
- // If the user is not associated with a tenant, they will use the
- // default s3 volume.
- String defaultS3volume =
- HddsClientUtils.getDefaultS3VolumeName(configuration);
-
+ public OmVolumeArgs getS3Volume() throws IOException {
+ // Unless the OM request contains S3 authentication info with an access
+ // ID that corresponds to a tenant volume, the request will be directed
+ // to the default S3 volume.
+ String s3Volume = HddsClientUtils.getDefaultS3VolumeName(configuration);
+ S3Authentication s3Auth = getS3Auth();
+
+ if (s3Auth != null) {
+ String accessID = s3Auth.getAccessId();
+ // TODO HDDS-6063: Volume lock is needed here along with the other
+ // multi-tenant read requests.
+ Optional<String> optionalTenantId =
+ multiTenantManager.getTenantForAccessID(accessID);
+
+ if (optionalTenantId.isPresent()) {
+ String tenantId = optionalTenantId.get();
+ OmDBTenantInfo tenantInfo =
+ metadataManager.getTenantStateTable().get(tenantId);
+ if (tenantInfo != null) {
+ s3Volume = metadataManager.getTenantStateTable().get(tenantId)
+ .getBucketNamespaceName();
+ } else {
+ String message = "Expected to find a tenant for access ID " +
+ accessID +
+ " but no tenant was found. Possibly inconsistent OM DB!";
+ LOG.error(message);
+ throw new OMException(message, ResultCodes.TENANT_NOT_FOUND);
+ }
if (LOG.isDebugEnabled()) {
- LOG.debug("No tenant found for access ID {}. Directing " +
- "requests to default s3 volume {}.", accessID, defaultS3volume);
+ LOG.debug("Get S3 volume request for access ID {} belonging to " +
+ "tenant {} is directed to the volume {}.", accessID,
tenantId,
+ s3Volume);
}
- return getVolumeInfo(defaultS3volume);
+ } else if (LOG.isDebugEnabled()) {
+ LOG.debug("No tenant found for access ID {}. Directing " +
+ "requests to default s3 volume {}.", accessID, s3Volume);
}
- throw ex;
+ } else if (LOG.isDebugEnabled()) {
+ // An old S3 gateway talking to a new OM may not attach the auth info.
+ // This old version of s3g will also not have a client that supports
+ // multi-tenancy, so we can direct requests to the default S3 volume.
+ LOG.debug("S3 authentication was not attached to the OM request. " +
+ "Directing requests to the default S3 volume {}.",
+ s3Volume);
}
+
+ // This call performs acl checks and checks volume existence.
+ return getVolumeInfo(s3Volume);
}
@Override
@@ -3769,20 +3785,22 @@ public final class OzoneManager extends
ServiceRuntimeInfoImpl
throws IOException {
Pair<String, String> resolved;
- try {
- if (isAclEnabled) {
- InetAddress remoteIp = Server.getRemoteIp();
- resolved = resolveBucketLink(requested, new HashSet<>(),
- Server.getRemoteUser(),
- remoteIp,
- remoteIp != null ? remoteIp.getHostName() :
- omRpcAddress.getHostName());
- } else {
- resolved = resolveBucketLink(requested, new HashSet<>(),
- null, null, null);
+ if (isAclEnabled) {
+ UserGroupInformation ugi = Server.getRemoteUser();
+ if (getS3Auth() != null) {
+ ugi = UserGroupInformation
+ .createRemoteUser(
+ OzoneAclUtils.principalToAccessID(getS3Auth().getAccessId()));
}
- } catch (Throwable t) {
- throw t;
+ InetAddress remoteIp = Server.getRemoteIp();
+ resolved = resolveBucketLink(requested, new HashSet<>(),
+ ugi,
+ remoteIp,
+ remoteIp != null ? remoteIp.getHostName() :
+ omRpcAddress.getHostName());
+ } else {
+ resolved = resolveBucketLink(requested, new HashSet<>(),
+ null, null, null);
}
return new ResolvedBucket(requested, resolved);
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/S3SecretManagerImpl.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/S3SecretManagerImpl.java
index 57d17cd..b3d4503 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/S3SecretManagerImpl.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/S3SecretManagerImpl.java
@@ -82,22 +82,22 @@ public class S3SecretManagerImpl implements S3SecretManager
{
}
@Override
- public String getS3UserSecretString(String kerberosID)
+ public String getS3UserSecretString(String awsAccessKey)
throws IOException {
- Preconditions.checkArgument(Strings.isNotBlank(kerberosID),
+ Preconditions.checkArgument(Strings.isNotBlank(awsAccessKey),
"awsAccessKeyId cannot be null or empty.");
- LOG.trace("Get secret for awsAccessKey:{}", kerberosID);
+ LOG.trace("Get secret for awsAccessKey:{}", awsAccessKey);
S3SecretValue s3Secret;
- omMetadataManager.getLock().acquireReadLock(S3_SECRET_LOCK, kerberosID);
+ omMetadataManager.getLock().acquireReadLock(S3_SECRET_LOCK, awsAccessKey);
try {
- s3Secret = omMetadataManager.getS3SecretTable().get(kerberosID);
+ s3Secret = omMetadataManager.getS3SecretTable().get(awsAccessKey);
if (s3Secret == null) {
throw new OzoneSecurityException("S3 secret not found for " +
- "awsAccessKeyId " + kerberosID, S3_SECRET_NOT_FOUND);
+ "awsAccessKeyId " + awsAccessKey, S3_SECRET_NOT_FOUND);
}
} finally {
- omMetadataManager.getLock().releaseReadLock(S3_SECRET_LOCK, kerberosID);
+ omMetadataManager.getLock().releaseReadLock(S3_SECRET_LOCK,
awsAccessKey);
}
return s3Secret.getAwsSecret();
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
index 08eb966..e430665 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
@@ -133,17 +133,17 @@ public abstract class OMClientRequest implements
RequestAuditor {
* Get User information which needs to be set in the OMRequest object.
* @return User Info.
*/
- public OzoneManagerProtocolProtos.UserInfo getUserInfo() {
+ public OzoneManagerProtocolProtos.UserInfo getUserInfo() throws IOException {
UserGroupInformation user = ProtobufRpcEngine.Server.getRemoteUser();
InetAddress remoteAddress = ProtobufRpcEngine.Server.getRemoteIp();
OzoneManagerProtocolProtos.UserInfo.Builder userInfo =
OzoneManagerProtocolProtos.UserInfo.newBuilder();
- // If S3 Authentication is set, use AccessId as user.
+ // If S3 Authentication is set, determine user based on access ID.
if (omRequest.hasS3Authentication()) {
- // TODO: For tenant users, translate accessId to (short) username
- // with multiTenantManager.getUserNameGivenAccessId(accessId)
- userInfo.setUserName(omRequest.getS3Authentication().getAccessId());
+ String principal = OzoneAclUtils.principalToAccessID(
+ omRequest.getS3Authentication().getAccessId());
+ userInfo.setUserName(principal);
} else if (user != null) {
// Added not null checks, as in UT's these values might be null.
userInfo.setUserName(user.getUserName());
@@ -164,7 +164,7 @@ public abstract class OMClientRequest implements
RequestAuditor {
* @return User Info.
*/
public OzoneManagerProtocolProtos.UserInfo getUserIfNotExists(
- OzoneManager ozoneManager) {
+ OzoneManager ozoneManager) throws IOException {
OzoneManagerProtocolProtos.UserInfo userInfo = getUserInfo();
if (!userInfo.hasRemoteAddress() || !userInfo.hasUserName()){
OzoneManagerProtocolProtos.UserInfo.Builder newuserInfo =
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
index 6c2a862..f90b4c4 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
@@ -113,7 +113,7 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
}
@Override
- public OMRequest preExecute(OzoneManager ozoneManager) {
+ public OMRequest preExecute(OzoneManager ozoneManager) throws IOException {
CreateDirectoryRequest createDirectoryRequest =
getOmRequest().getCreateDirectoryRequest();
Preconditions.checkNotNull(createDirectoryRequest);
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/security/OMSetSecretRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/security/OMSetSecretRequest.java
index 423e18d..9c8ddb7 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/security/OMSetSecretRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/security/OMSetSecretRequest.java
@@ -144,16 +144,9 @@ public class OMSetSecretRequest extends OMClientRequest {
// Intentionally set to final so they can only be set once.
final S3SecretValue newS3SecretValue;
- final OmDBAccessIdInfo newDBAccessIdInfo;
// Update legacy S3SecretTable, if the accessId entry exists
- if (omMetadataManager.getS3SecretTable().get(accessId) == null) {
- // S3SecretTable will be deprecated.
- // It is acceptable to not have an accessId entry in it.
- LOG.debug("accessId '{}' not found in S3SecretTable", accessId);
- newS3SecretValue = null;
-
- } else {
+ if (omMetadataManager.getS3SecretTable().get(accessId) != null) {
// accessId found in S3SecretTable. Update S3SecretTable
LOG.debug("Updating S3SecretTable cache entry");
// Update S3SecretTable cache entry in this case
@@ -163,42 +156,8 @@ public class OMSetSecretRequest extends OMClientRequest {
new CacheKey<>(accessId),
new CacheValue<>(Optional.of(newS3SecretValue),
transactionLogIndex));
- }
-
- // Get accessId entry from multi-tenant TenantAccessIdTable
- final OmDBAccessIdInfo omDBAccessIdInfo =
- omMetadataManager.getTenantAccessIdTable().get(accessId);
-
- // Check accessId existence in TenantAccessIdTable
- if (omDBAccessIdInfo == null) {
- // At some point we need to migrate entries from S3SecretTable
- // to TenantAccessIdTable, and S3SecretTable should eventually become
- // empty.
- LOG.warn("accessId '{}' not found in TenantAccessIdTable", accessId);
- newDBAccessIdInfo = null;
-
} else {
- // Update TenantAccessIdTable
- // Build new OmDBAccessIdInfo with updated secret
- LOG.debug("Updating TenantAccessIdTable cache entry");
- newDBAccessIdInfo = new OmDBAccessIdInfo.Builder()
- .setTenantId(omDBAccessIdInfo.getTenantId())
- .setKerberosPrincipal(omDBAccessIdInfo.getUserPrincipal())
- .setSharedSecret(secretKey)
- .setIsAdmin(omDBAccessIdInfo.getIsAdmin())
- .setIsDelegatedAdmin(omDBAccessIdInfo.getIsDelegatedAdmin())
- .build();
-
- // Update TenantAccessIdTable cache entry
- omMetadataManager.getTenantAccessIdTable().addCacheEntry(
- new CacheKey<>(accessId),
- new CacheValue<>(Optional.of(newDBAccessIdInfo),
- transactionLogIndex));
- }
-
- // If neither S3SecretTable nor TenantAccessIdTable is updated, throw
- // ACCESSID_NOT_FOUND exception.
- if (newS3SecretValue == null && newDBAccessIdInfo == null) {
+ // If S3SecretTable is not updated, throw ACCESSID_NOT_FOUND exception.
throw new OMException("accessId '" + accessId + "' not found.",
OMException.ResultCodes.ACCESSID_NOT_FOUND);
}
@@ -209,8 +168,7 @@ public class OMSetSecretRequest extends OMClientRequest {
.setAccessId(accessId)
.setSecretKey(secretKey);
- omClientResponse = new OMSetSecretResponse(accessId,
- newDBAccessIdInfo, newS3SecretValue,
+ omClientResponse = new OMSetSecretResponse(accessId, newS3SecretValue,
omResponse.setSetS3SecretResponse(setSecretResponse).build());
} catch (IOException ex) {
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/security/S3GetSecretRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/security/S3GetSecretRequest.java
index 9e737c4..8b57757 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/security/S3GetSecretRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/security/S3GetSecretRequest.java
@@ -24,7 +24,6 @@ import java.util.Map;
import com.google.common.base.Optional;
import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.hadoop.ozone.om.helpers.OmDBAccessIdInfo;
import org.apache.hadoop.ozone.om.request.util.OmResponseUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -159,41 +158,29 @@ public class S3GetSecretRequest extends OMClientRequest {
}
try {
- // Note: We use the same S3_SECRET_LOCK for TenantAccessIdTable.
acquiredLock = omMetadataManager.getLock()
.acquireWriteLock(S3_SECRET_LOCK, accessId);
- // Check multi-tenant table first: tenantAccessIdTable
final S3SecretValue assignS3SecretValue;
- final OmDBAccessIdInfo omDBAccessIdInfo =
- omMetadataManager.getTenantAccessIdTable().get(accessId);
- if (omDBAccessIdInfo == null) {
- // Not found in TenantAccessIdTable. Fallback to S3SecretTable.
- final S3SecretValue s3SecretValue =
- omMetadataManager.getS3SecretTable().get(accessId);
-
- if (s3SecretValue == null) {
- if (createIfNotExist) {
- // Still not found in S3SecretTable. Add new entry in this case
- assignS3SecretValue = new S3SecretValue(accessId, awsSecret);
- // Add cache entry first.
- omMetadataManager.getS3SecretTable().addCacheEntry(
- new CacheKey<>(accessId),
- new CacheValue<>(Optional.of(assignS3SecretValue),
- transactionLogIndex));
- // TODO: Put accessId entry straight to TenantAccessIdTable
- // later when we deprecate the S3SecretTable.
- } else {
- assignS3SecretValue = null;
- }
+ final S3SecretValue s3SecretValue =
+ omMetadataManager.getS3SecretTable().get(accessId);
+
+ if (s3SecretValue == null) {
+ // Not found in S3SecretTable.
+ if (createIfNotExist) {
+ // Add new entry in this case
+ assignS3SecretValue = new S3SecretValue(accessId, awsSecret);
+ // Add cache entry first.
+ omMetadataManager.getS3SecretTable().addCacheEntry(
+ new CacheKey<>(accessId),
+ new CacheValue<>(Optional.of(assignS3SecretValue),
+ transactionLogIndex));
} else {
- // Found in S3SecretTable.
- awsSecret = s3SecretValue.getAwsSecret();
assignS3SecretValue = null;
}
} else {
- // Found in TenantAccessIdTable.
- awsSecret = omDBAccessIdInfo.getSecretKey();
+ // Found in S3SecretTable.
+ awsSecret = s3SecretValue.getAwsSecret();
assignS3SecretValue = null;
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMAssignUserToTenantRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMAssignUserToTenantRequest.java
index ff74225..8d796e1 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMAssignUserToTenantRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMAssignUserToTenantRequest.java
@@ -289,7 +289,6 @@ public class OMAssignUserToTenantRequest extends
OMClientRequest {
final OmDBAccessIdInfo omDBAccessIdInfo = new OmDBAccessIdInfo.Builder()
.setTenantId(tenantId)
.setKerberosPrincipal(principal)
- .setSharedSecret(s3SecretValue.getAwsSecret())
.setIsAdmin(false)
.setIsDelegatedAdmin(false)
.build();
@@ -325,21 +324,18 @@ public class OMAssignUserToTenantRequest extends
OMClientRequest {
new CacheKey<>(accessId),
new CacheValue<>(Optional.of(roleName), transactionLogIndex));
- // Add to S3SecretTable.
- // Note: S3SecretTable will be deprecated in the future.
+ // Add S3SecretTable cache entry
acquiredS3SecretLock = omMetadataManager.getLock()
.acquireWriteLock(S3_SECRET_LOCK, accessId);
// Expect accessId absence from S3SecretTable
- // TODO: This table might be merged with tenantAccessIdTable later.
if (omMetadataManager.getS3SecretTable().isExist(accessId)) {
LOG.error("accessId '{}' already exists in S3SecretTable", accessId);
throw new OMException("accessId '" + accessId +
"' already exists in S3SecretTable",
- OMException.ResultCodes.INVALID_REQUEST);
+ OMException.ResultCodes.TENANT_USER_ACCESSID_ALREADY_EXISTS);
}
- // Add S3SecretTable cache entry
omMetadataManager.getS3SecretTable().addCacheEntry(
new CacheKey<>(accessId),
new CacheValue<>(Optional.of(s3SecretValue), transactionLogIndex));
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignAdminRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignAdminRequest.java
index aebd924..4c021d2 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignAdminRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignAdminRequest.java
@@ -189,7 +189,6 @@ public class OMTenantAssignAdminRequest extends
OMClientRequest {
new OmDBAccessIdInfo.Builder()
.setTenantId(oldAccessIdInfo.getTenantId())
.setKerberosPrincipal(oldAccessIdInfo.getUserPrincipal())
- .setSharedSecret(oldAccessIdInfo.getSecretKey())
.setIsAdmin(true)
.setIsDelegatedAdmin(delegated)
.build();
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeAdminRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeAdminRequest.java
index 06f7c72..0987ab0 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeAdminRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantRevokeAdminRequest.java
@@ -169,7 +169,6 @@ public class OMTenantRevokeAdminRequest extends
OMClientRequest {
new OmDBAccessIdInfo.Builder()
.setTenantId(oldAccessIdInfo.getTenantId())
.setKerberosPrincipal(oldAccessIdInfo.getUserPrincipal())
- .setSharedSecret(oldAccessIdInfo.getSecretKey())
.setIsAdmin(false)
.setIsDelegatedAdmin(false)
.build();
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/security/OMSetSecretResponse.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/security/OMSetSecretResponse.java
index 7d60f26..694ba9f 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/security/OMSetSecretResponse.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/security/OMSetSecretResponse.java
@@ -20,7 +20,6 @@ package org.apache.hadoop.ozone.om.response.s3.security;
import org.apache.hadoop.hdds.utils.db.BatchOperation;
import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.helpers.OmDBAccessIdInfo;
import org.apache.hadoop.ozone.om.helpers.S3SecretValue;
import org.apache.hadoop.ozone.om.response.CleanupTableInfo;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
@@ -34,28 +33,24 @@ import javax.annotation.Nullable;
import java.io.IOException;
import static org.apache.hadoop.ozone.om.OmMetadataManagerImpl.S3_SECRET_TABLE;
-import static
org.apache.hadoop.ozone.om.OmMetadataManagerImpl.TENANT_ACCESS_ID_TABLE;
/**
* Response for SetSecret request.
*/
-@CleanupTableInfo(cleanupTables = {S3_SECRET_TABLE, TENANT_ACCESS_ID_TABLE})
+@CleanupTableInfo(cleanupTables = {S3_SECRET_TABLE})
public class OMSetSecretResponse extends OMClientResponse {
private static final Logger LOG =
LoggerFactory.getLogger(OMSetSecretResponse.class);
private String accessId;
- private OmDBAccessIdInfo dbAccessIdInfo;
private S3SecretValue s3SecretValue;
public OMSetSecretResponse(@Nullable String accessId,
- @Nullable OmDBAccessIdInfo dbAccessIdInfo,
@Nullable S3SecretValue s3SecretValue,
@Nonnull OMResponse omResponse) {
super(omResponse);
this.accessId = accessId;
- this.dbAccessIdInfo = dbAccessIdInfo;
this.s3SecretValue = s3SecretValue;
}
@@ -74,12 +69,6 @@ public class OMSetSecretResponse extends OMClientResponse {
assert(getOMResponse().getStatus() ==
OzoneManagerProtocolProtos.Status.OK);
- if (dbAccessIdInfo != null) {
- LOG.debug("Updating TenantAccessIdTable");
- omMetadataManager.getTenantAccessIdTable().putWithBatch(batchOperation,
- accessId, dbAccessIdInfo);
- }
-
if (s3SecretValue != null) {
LOG.debug("Updating TenantAccessIdTable");
omMetadataManager.getS3SecretTable().putWithBatch(batchOperation,
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/tenant/OMTenantAssignUserAccessIdResponse.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/tenant/OMTenantAssignUserAccessIdResponse.java
index eb9ec84..50c5aa1 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/tenant/OMTenantAssignUserAccessIdResponse.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/s3/tenant/OMTenantAssignUserAccessIdResponse.java
@@ -90,7 +90,6 @@ public class OMTenantAssignUserAccessIdResponse extends
OMClientResponse {
if (s3SecretValue != null &&
getOMResponse().getStatus() == OzoneManagerProtocolProtos.Status.OK) {
- assert(accessId.equals(s3SecretValue.getKerberosID()));
// Add S3SecretTable entry
omMetadataManager.getS3SecretTable().putWithBatch(batchOperation,
accessId, s3SecretValue);
@@ -110,4 +109,9 @@ public class OMTenantAssignUserAccessIdResponse extends
OMClientResponse {
public OmDBAccessIdInfo getOmDBAccessIdInfo() {
return omDBAccessIdInfo;
}
+
+ @VisibleForTesting
+ public S3SecretValue getS3Secret() {
+ return s3SecretValue;
+ }
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
index c09d26a..9f0ac29 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerRequestHandler.java
@@ -80,7 +80,6 @@ import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRespo
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.PrepareStatusResponse;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ServiceListRequest;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ServiceListResponse;
-import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.GetS3VolumeRequest;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.GetS3VolumeResponse;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.TenantGetUserInfoRequest;
@@ -229,8 +228,7 @@ public class OzoneManagerRequestHandler implements
RequestHandler {
responseBuilder.setPrepareStatusResponse(prepareStatusResponse);
break;
case GetS3Volume:
- GetS3VolumeResponse s3VolumeResponse =
- getS3Volume(request.getGetS3VolumeRequest());
+ GetS3VolumeResponse s3VolumeResponse = getS3Volume();
responseBuilder.setGetS3VolumeResponse(s3VolumeResponse);
break;
case TenantGetUserInfo:
@@ -709,9 +707,9 @@ public class OzoneManagerRequestHandler implements
RequestHandler {
.setCurrentTxnIndex(prepareState.getIndex()).build();
}
- private GetS3VolumeResponse getS3Volume(GetS3VolumeRequest request)
+ private GetS3VolumeResponse getS3Volume()
throws IOException {
- OmVolumeArgs s3VolArgs = impl.getS3Volume(request.getAccessID());
+ OmVolumeArgs s3VolArgs = impl.getS3Volume();
return GetS3VolumeResponse.newBuilder()
.setVolumeInfo(s3VolArgs.getProtobuf())
.build();
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/security/OzoneDelegationTokenSecretManager.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/security/OzoneDelegationTokenSecretManager.java
index a433e10..5d34f6a 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/security/OzoneDelegationTokenSecretManager.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/security/OzoneDelegationTokenSecretManager.java
@@ -36,7 +36,6 @@ import
org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient
import org.apache.hadoop.hdds.security.x509.exceptions.CertificateException;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMultiTenantManager;
import org.apache.hadoop.ozone.om.S3SecretManager;
import org.apache.hadoop.ozone.om.S3SecretManagerImpl;
import org.apache.hadoop.ozone.om.exceptions.OMException;
@@ -72,7 +71,6 @@ public class OzoneDelegationTokenSecretManager
private final long tokenRemoverScanInterval;
private String omCertificateSerialId;
private String omServiceId;
- private OMMultiTenantManager multiTenantManager;
/**
* If the delegation token update thread holds this lock, it will not get
@@ -99,7 +97,6 @@ public class OzoneDelegationTokenSecretManager
isRatisEnabled = b.ozoneConf.getBoolean(
OMConfigKeys.OZONE_OM_RATIS_ENABLE_KEY,
OMConfigKeys.OZONE_OM_RATIS_ENABLE_DEFAULT);
- this.multiTenantManager = b.omMultiTenantManager;
loadTokenSecretState(store.loadState());
}
@@ -114,7 +111,6 @@ public class OzoneDelegationTokenSecretManager
private long tokenRemoverScanInterval;
private Text service;
private S3SecretManager s3SecretManager;
- private OMMultiTenantManager omMultiTenantManager;
private CertificateClient certClient;
private String omServiceId;
@@ -161,23 +157,11 @@ public class OzoneDelegationTokenSecretManager
this.omServiceId = serviceId;
return this;
}
-
- public Builder setOMMultiTenantManager(OMMultiTenantManager
- multiTenantManager) {
- this.omMultiTenantManager = multiTenantManager;
- return this;
- }
-
}
@Override
public OzoneTokenIdentifier createIdentifier() {
- OzoneTokenIdentifier tokenId = OzoneTokenIdentifier.newInstance();
- if (multiTenantManager != null) {
- tokenId.setGetUserForAccessId(
- multiTenantManager::getUserNameGivenAccessId);
- }
- return tokenId;
+ return OzoneTokenIdentifier.newInstance();
}
/**
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMultiTenantManagerImpl.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMultiTenantManagerImpl.java
index de87581..7c07ac8 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMultiTenantManagerImpl.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOMMultiTenantManagerImpl.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.List;
+import com.google.common.base.Optional;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.ozone.OzoneConsts;
@@ -74,7 +75,7 @@ public class TestOMMultiTenantManagerImpl {
omMetadataManager.getTenantAccessIdTable().put("seed-accessId1",
new OmDBAccessIdInfo(tenantName, "seed-user1",
- "sharedsecret1", false, false));
+ false, false));
tenantManager = new OMMultiTenantManagerImpl(omMetadataManager, conf);
assertEquals(1, tenantManager.getTenantCache().size());
@@ -129,10 +130,9 @@ public class TestOMMultiTenantManagerImpl {
@Test
public void testGetTenantForAccessID() throws Exception {
- assertEquals(tenantName, tenantManager.getTenantForAccessID("seed" +
- "-accessId1"));
- LambdaTestUtils.intercept(OMException.class, () -> {
- tenantManager.getTenantForAccessID("invalid-accessId1");
- });
+ Optional<String> optionalTenant = tenantManager.getTenantForAccessID(
+ "seed-accessId1");
+ assertTrue(optionalTenant.isPresent());
+ assertEquals(tenantName, optionalTenant.get());
}
}
\ No newline at end of file
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/security/TestS3GetSecretRequest.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/security/TestS3GetSecretRequest.java
index a2b9587..3ebb14c 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/security/TestS3GetSecretRequest.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/security/TestS3GetSecretRequest.java
@@ -382,6 +382,9 @@ public class TestS3GetSecretRequest {
final OmDBAccessIdInfo omDBAccessIdInfo =
omTenantAssignUserAccessIdResponse.getOmDBAccessIdInfo();
Assert.assertNotNull(omDBAccessIdInfo);
+ final S3SecretValue originalS3Secret =
+ omTenantAssignUserAccessIdResponse.getS3Secret();
+ Assert.assertNotNull(originalS3Secret);
// 3. S3GetSecretRequest: Get secret of "[email protected]" (as an admin).
@@ -419,7 +422,9 @@ public class TestS3GetSecretRequest {
s3GetSecretResponse.getOMResponse().getGetS3SecretResponse();
final S3Secret s3Secret = getS3SecretResponse.getS3Secret();
Assert.assertEquals(ACCESS_ID_BOB, s3Secret.getKerberosID());
- Assert.assertEquals(
- omDBAccessIdInfo.getSecretKey(), s3Secret.getAwsSecret());
+ Assert.assertEquals(originalS3Secret.getAwsSecret(),
+ s3Secret.getAwsSecret());
+ Assert.assertEquals(originalS3Secret.getKerberosID(),
+ s3Secret.getKerberosID());
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/TestOzoneTokenIdentifier.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/TestOzoneTokenIdentifier.java
index 2ac8d4c..48ed205 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/TestOzoneTokenIdentifier.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/TestOzoneTokenIdentifier.java
@@ -17,8 +17,6 @@
*/
package org.apache.hadoop.ozone.security;
-import static
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMTokenProto.Type.S3AUTHINFO;
-
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
@@ -348,20 +346,4 @@ public class TestOzoneTokenIdentifier {
Assert.assertEquals("Deserialize Serialized Token should equal.",
idWrite, idRead);
}
-
- @Test
- public void testGetUserFromAccessIdInToken() {
- OzoneTokenIdentifier id = getIdentifierInst();
- Assert.assertEquals("User1", id.getUser().getUserName());
-
- id.setTokenType(S3AUTHINFO);
- Assert.assertEquals("User1", id.getUser().getUserName());
-
- id.setGetUserForAccessId(s -> "modified-" + s);
- Assert.assertEquals("modified-User1", id.getUser().getUserName());
-
- id.setGetUserForAccessId(s -> null);
- Assert.assertEquals("User1", id.getUser().getUserName());
-
- }
}
\ No newline at end of file
diff --git
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientProducer.java
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientProducer.java
index 3f5c5f7..1ac5f2e 100644
---
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientProducer.java
+++
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/OzoneClientProducer.java
@@ -97,8 +97,6 @@ public class OzoneClientProducer {
String awsAccessId = signatureInfo.getAwsAccessId();
validateAccessId(awsAccessId);
- // TODO: Once HDDS-4440 is merged, access ID should be passed
- // through the OM transport. Double check @erose
return new S3Auth(stringToSign,
signatureInfo.getSignature(),
awsAccessId);
@@ -122,28 +120,18 @@ public class OzoneClientProducer {
ozoneConfiguration.setIfUnset(OZONE_OM_CLIENT_PROTOCOL_VERSION_KEY,
OZONE_OM_CLIENT_PROTOCOL_VERSION);
- // TODO: Added this snippet for a quick fix due to a conflict with
HDDS-5883
- // Double check / optimize.
- String accessId = null;
- try {
- accessId = signatureProcessor.parseSignature().getAwsAccessId();
- } catch (OS3Exception e) {
- LOG.error("Unable to parse signature to get accessId");
- }
-
if (omServiceID == null) {
- return OzoneClientFactory.getRpcClient(ozoneConfiguration, accessId);
+ return OzoneClientFactory.getRpcClient(ozoneConfiguration);
} else {
// As in HA case, we need to pass om service ID.
- return OzoneClientFactory.getRpcClient(omServiceID,
- ozoneConfiguration, accessId);
+ return OzoneClientFactory.getRpcClient(omServiceID, ozoneConfiguration);
}
}
// ONLY validate aws access id when needed.
private void validateAccessId(String awsAccessId) throws Exception {
if (awsAccessId == null || awsAccessId.equals("")) {
- LOG.error("Malformed s3 header. awsAccessID: ", awsAccessId);
+ LOG.error("Malformed s3 header. awsAccessID: {}", awsAccessId);
throw wrapOS3Exception(MALFORMED_HEADER);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]