This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new ad7caf7f3d HDDS-9882. Share ByteString-related code between
OzonePBHelper classes (#5808)
ad7caf7f3d is described below
commit ad7caf7f3d8a9d4d43f1f4ff82bfb94c80a31a25
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Wed Dec 27 10:35:48 2023 +0100
HDDS-9882. Share ByteString-related code between OzonePBHelper classes
(#5808)
---
.../hadoop/hdds/scm/protocolPB/OzonePBHelper.java | 27 ++++---
.../hadoop/ozone/om/helpers/OmKeyLocationInfo.java | 9 ++-
...OzoneManagerProtocolClientSideTranslatorPB.java | 6 +-
.../apache/hadoop/ozone/protocolPB/OMPBHelper.java | 54 ++++++-------
.../hadoop/ozone/protocolPB/OzonePBHelper.java | 88 ----------------------
.../security/OMCancelDelegationTokenRequest.java | 4 +-
.../security/OMGetDelegationTokenRequest.java | 4 +-
.../security/OMRenewDelegationTokenRequest.java | 4 +-
.../protocolPB/OzoneManagerRequestHandler.java | 3 +-
9 files changed, 60 insertions(+), 139 deletions(-)
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/OzonePBHelper.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/OzonePBHelper.java
similarity index 76%
rename from
hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/OzonePBHelper.java
rename to
hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/OzonePBHelper.java
index faaea85abc..8bdd4eef39 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/OzonePBHelper.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/OzonePBHelper.java
@@ -23,6 +23,7 @@ import
org.apache.hadoop.hdds.protocol.proto.HddsProtos.TokenProto;
import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.security.token.TokenIdentifier;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -44,8 +45,8 @@ public final class OzonePBHelper {
* This map should not be accessed directly. Used the getFixedByteString
* methods instead.
*/
- private static final ConcurrentHashMap<Object, ByteString>
- FIXED_BYTESTRING_CACHE = new ConcurrentHashMap<>();
+ private static final Map<Object, ByteString>
+ FIXED_BYTE_STRING_CACHE = new ConcurrentHashMap<>();
/**
* Get the ByteString for frequently used fixed and small set strings.
@@ -53,7 +54,7 @@ public final class OzonePBHelper {
* @param key string
*/
public static ByteString getFixedByteString(Text key) {
- return FIXED_BYTESTRING_CACHE.computeIfAbsent(key,
+ return FIXED_BYTE_STRING_CACHE.computeIfAbsent(key,
k -> ByteString.copyFromUtf8(k.toString()));
}
@@ -62,7 +63,10 @@ public final class OzonePBHelper {
return (bytes.length == 0) ? ByteString.EMPTY : ByteString.copyFrom(bytes);
}
- public static Token<? extends TokenIdentifier> tokenFromProto(
+ /**
+ * Convert {@link TokenProto} (used for container tokens) to {@link Token}.
+ */
+ public static <T extends TokenIdentifier> Token<T> tokenFromProto(
TokenProto tokenProto) {
return new Token<>(
tokenProto.getIdentifier().toByteArray(),
@@ -71,12 +75,15 @@ public final class OzonePBHelper {
new Text(tokenProto.getService()));
}
+ /**
+ * Convert {@link Token} to {@link TokenProto} (used for container tokens).
+ */
public static TokenProto protoFromToken(Token<?> token) {
- TokenProto.Builder builder = TokenProto.newBuilder().
- setIdentifier(getByteString(token.getIdentifier())).
- setPassword(getByteString(token.getPassword())).
- setKindBytes(getFixedByteString(token.getKind())).
- setServiceBytes(getByteString(token.getService().getBytes()));
- return builder.build();
+ return TokenProto.newBuilder()
+ .setIdentifier(getByteString(token.getIdentifier()))
+ .setPassword(getByteString(token.getPassword()))
+ .setKindBytes(getFixedByteString(token.getKind()))
+ .setServiceBytes(getByteString(token.getService().getBytes()))
+ .build();
}
}
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyLocationInfo.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyLocationInfo.java
index 9ff1ca94ea..adaf3a5c05 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyLocationInfo.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyLocationInfo.java
@@ -22,7 +22,7 @@ import
org.apache.hadoop.hdds.scm.pipeline.UnknownPipelineStateException;
import org.apache.hadoop.hdds.scm.storage.BlockLocationInfo;
import org.apache.hadoop.hdds.security.token.OzoneBlockTokenIdentifier;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyLocation;
-import org.apache.hadoop.ozone.protocolPB.OzonePBHelper;
+import org.apache.hadoop.ozone.protocolPB.OMPBHelper;
import org.apache.hadoop.security.token.Token;
/**
@@ -103,7 +103,7 @@ public final class OmKeyLocationInfo extends
BlockLocationInfo {
try {
Token<OzoneBlockTokenIdentifier> token = getToken();
if (token != null) {
- builder.setToken(OzonePBHelper.protoFromToken(token));
+ builder.setToken(OMPBHelper.protoFromToken(token));
}
// Pipeline can be null when key create with override and
@@ -147,8 +147,9 @@ public final class OmKeyLocationInfo extends
BlockLocationInfo {
.setCreateVersion(keyLocation.getCreateVersion())
.setPartNumber(keyLocation.getPartNumber());
if (keyLocation.hasToken()) {
- builder.setToken((Token<OzoneBlockTokenIdentifier>)
- OzonePBHelper.tokenFromProto(keyLocation.getToken()));
+ Token<OzoneBlockTokenIdentifier> token =
+ OMPBHelper.tokenFromProto(keyLocation.getToken());
+ builder.setToken(token);
}
return builder.build();
}
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 840b3244a4..c5e0a0b83c 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
@@ -1892,7 +1892,7 @@ public final class
OzoneManagerProtocolClientSideTranslatorPB
resp =
handleError(submitRequest(omRequest)).getGetDelegationTokenResponse();
return resp.getResponse().hasToken() ?
- OMPBHelper.convertToDelegationToken(resp.getResponse().getToken())
+ OMPBHelper.tokenFromProto(resp.getResponse().getToken())
: null;
} catch (IOException e) {
if (e instanceof OMException) {
@@ -1914,7 +1914,7 @@ public final class
OzoneManagerProtocolClientSideTranslatorPB
throws OMException {
RenewDelegationTokenRequestProto req =
RenewDelegationTokenRequestProto.newBuilder().
- setToken(OMPBHelper.convertToTokenProto(token)).
+ setToken(OMPBHelper.protoFromToken(token)).
build();
OMRequest omRequest = createOMRequest(Type.RenewDelegationToken)
@@ -1945,7 +1945,7 @@ public final class
OzoneManagerProtocolClientSideTranslatorPB
throws OMException {
CancelDelegationTokenRequestProto req = CancelDelegationTokenRequestProto
.newBuilder()
- .setToken(OMPBHelper.convertToTokenProto(token))
+ .setToken(OMPBHelper.protoFromToken(token))
.build();
OMRequest omRequest = createOMRequest(Type.CancelDelegationToken)
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/protocolPB/OMPBHelper.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/protocolPB/OMPBHelper.java
index 9836379a59..ccb2080a87 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/protocolPB/OMPBHelper.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/protocolPB/OMPBHelper.java
@@ -44,9 +44,9 @@ import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.FileEnc
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.MD5MD5Crc32FileChecksumProto;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
-import org.apache.hadoop.ozone.security.OzoneTokenIdentifier;
import org.apache.hadoop.ozone.security.proto.SecurityProtos.TokenProto;
import org.apache.hadoop.security.token.Token;
+import org.apache.hadoop.security.token.TokenIdentifier;
import org.apache.hadoop.ozone.client.checksum.CrcUtil;
import org.apache.hadoop.util.DataChecksum;
import org.slf4j.Logger;
@@ -56,6 +56,9 @@ import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
+import static
org.apache.hadoop.hdds.scm.protocolPB.OzonePBHelper.getByteString;
+import static
org.apache.hadoop.hdds.scm.protocolPB.OzonePBHelper.getFixedByteString;
+
/**
* Utilities for converting protobuf classes.
*/
@@ -65,40 +68,37 @@ public final class OMPBHelper {
ByteString.copyFromUtf8("<redacted>");
private OMPBHelper() {
- /** Hidden constructor */
+ // no instances
}
/**
- * Converts Ozone delegation token to @{@link TokenProto}.
- * @return tokenProto
+ * Convert {@link TokenProto} (used for delegation tokens and block tokens)
+ * to {@link Token}.
*/
- public static TokenProto convertToTokenProto(Token<?> tok) {
- if (tok == null) {
- throw new IllegalArgumentException("Invalid argument: token is null");
- }
-
- return TokenProto.newBuilder().
- setIdentifier(getByteString(tok.getIdentifier())).
- setPassword(getByteString(tok.getPassword())).
- setKind(tok.getKind().toString()).
- setService(tok.getService().toString()).build();
- }
-
- public static ByteString getByteString(byte[] bytes) {
- // return singleton to reduce object allocation
- return (bytes.length == 0) ? ByteString.EMPTY : ByteString.copyFrom(bytes);
+ public static <T extends TokenIdentifier> Token<T> tokenFromProto(
+ TokenProto tokenProto) {
+ return new Token<>(
+ tokenProto.getIdentifier().toByteArray(),
+ tokenProto.getPassword().toByteArray(),
+ new Text(tokenProto.getKind()),
+ new Text(tokenProto.getService()));
}
/**
- * Converts @{@link TokenProto} to Ozone delegation token.
- *
- * @return Ozone
+ * Convert {@link Token} to {@link TokenProto} (used for delegation tokens
+ * and block tokens).
*/
- public static Token<OzoneTokenIdentifier> convertToDelegationToken(
- TokenProto tokenProto) {
- return new Token<>(tokenProto.getIdentifier()
- .toByteArray(), tokenProto.getPassword().toByteArray(), new Text(
- tokenProto.getKind()), new Text(tokenProto.getService()));
+ public static TokenProto protoFromToken(Token<?> token) {
+ if (token == null) {
+ throw new IllegalArgumentException("Invalid argument: token is null");
+ }
+
+ return TokenProto.newBuilder()
+ .setIdentifier(getByteString(token.getIdentifier()))
+ .setPassword(getByteString(token.getPassword()))
+ .setKindBytes(getFixedByteString(token.getKind()))
+ .setServiceBytes(getByteString(token.getService().getBytes()))
+ .build();
}
public static BucketEncryptionKeyInfo convert(
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/protocolPB/OzonePBHelper.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/protocolPB/OzonePBHelper.java
deleted file mode 100644
index c9f1c3f53b..0000000000
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/protocolPB/OzonePBHelper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * 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.ozone.protocolPB;
-
-import com.google.protobuf.ByteString;
-import org.apache.hadoop.io.Text;
-import org.apache.hadoop.ozone.security.proto.SecurityProtos.TokenProto;
-import org.apache.hadoop.security.token.Token;
-import org.apache.hadoop.security.token.TokenIdentifier;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Helper class for converting protobuf objects.
- */
-public final class OzonePBHelper {
- private OzonePBHelper() {
- /** Hidden constructor */
- }
-
- // Borrowed from ProtobuHelper.java in hadoop-common involving protobuf
- // messages to avoid breakage due to shading of protobuf in Hadoop-3.3+.
- /**
- * Map used to cache fixed strings to ByteStrings. Since there is no
- * automatic expiration policy, only use this for strings from a fixed, small
- * set.
- * <p/>
- * This map should not be accessed directly. Used the getFixedByteString
- * methods instead.
- */
- private static final ConcurrentHashMap<Object, ByteString>
- FIXED_BYTESTRING_CACHE = new ConcurrentHashMap<>();
-
- /**
- * Get the ByteString for frequently used fixed and small set strings.
- *
- * @param key string
- * @return
- */
- public static ByteString getFixedByteString(Text key) {
- ByteString value = FIXED_BYTESTRING_CACHE.get(key);
- if (value == null) {
- value = ByteString.copyFromUtf8(key.toString());
- ByteString oldValue = FIXED_BYTESTRING_CACHE.putIfAbsent(key, value);
- return oldValue != null ? oldValue : value;
- }
- return value;
- }
-
- public static ByteString getByteString(byte[] bytes) {
- // return singleton to reduce object allocation
- return (bytes.length == 0) ? ByteString.EMPTY : ByteString.copyFrom(bytes);
- }
-
- public static Token<? extends TokenIdentifier> tokenFromProto(
- TokenProto tokenProto) {
- Token<? extends TokenIdentifier> token = new Token<>(
- tokenProto.getIdentifier().toByteArray(),
- tokenProto.getPassword().toByteArray(),
- new Text(tokenProto.getKind()),
- new Text(tokenProto.getService()));
- return token;
- }
-
- public static TokenProto protoFromToken(Token<?> tok) {
- TokenProto.Builder builder = TokenProto.newBuilder().
- setIdentifier(getByteString(tok.getIdentifier())).
- setPassword(getByteString(tok.getPassword())).
- setKindBytes(getFixedByteString(tok.getKind())).
- setServiceBytes(getByteString(tok.getService().getBytes()));
- return builder.build();
- }
-}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMCancelDelegationTokenRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMCancelDelegationTokenRequest.java
index b95baeefd9..aaba7b4888 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMCancelDelegationTokenRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMCancelDelegationTokenRequest.java
@@ -66,7 +66,7 @@ public class OMCancelDelegationTokenRequest extends
OMClientRequest {
Map<String, String> auditMap = null;
try {
- Token<OzoneTokenIdentifier> token = OMPBHelper.convertToDelegationToken(
+ Token<OzoneTokenIdentifier> token = OMPBHelper.tokenFromProto(
request.getCancelDelegationTokenRequest().getToken());
auditMap = buildTokenAuditMap(token);
@@ -139,7 +139,7 @@ public class OMCancelDelegationTokenRequest extends
OMClientRequest {
CancelDelegationTokenRequestProto cancelDelegationTokenRequest =
getOmRequest().getCancelDelegationTokenRequest();
- return OMPBHelper.convertToDelegationToken(
+ return OMPBHelper.tokenFromProto(
cancelDelegationTokenRequest.getToken());
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMGetDelegationTokenRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMGetDelegationTokenRequest.java
index 751cd7a8c4..ad9b770e00 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMGetDelegationTokenRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMGetDelegationTokenRequest.java
@@ -103,7 +103,7 @@ public class OMGetDelegationTokenRequest extends
OMClientRequest {
.setResponse(
SecurityProtos.GetDelegationTokenResponseProto
.newBuilder().setToken(OMPBHelper
- .convertToTokenProto(token)).build())
+ .protoFromToken(token)).build())
.build())
.setTokenRenewInterval(ozoneManager.getDelegationTokenMgr()
.getTokenRenewInterval()))
@@ -153,7 +153,7 @@ public class OMGetDelegationTokenRequest extends
OMClientRequest {
.getGetDelegationTokenResponse().getResponse().getToken();
Token<OzoneTokenIdentifier> ozoneTokenIdentifierToken =
- OMPBHelper.convertToDelegationToken(tokenProto);
+ OMPBHelper.tokenFromProto(tokenProto);
AuditLogger auditLogger = ozoneManager.getAuditLogger();
Map<String, String> auditMap =
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMRenewDelegationTokenRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMRenewDelegationTokenRequest.java
index e82404407e..ff04096a08 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMRenewDelegationTokenRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/security/OMRenewDelegationTokenRequest.java
@@ -71,7 +71,7 @@ public class OMRenewDelegationTokenRequest extends
OMClientRequest {
long renewTime;
try {
- Token<OzoneTokenIdentifier> token = OMPBHelper.convertToDelegationToken(
+ Token<OzoneTokenIdentifier> token = OMPBHelper.tokenFromProto(
renewDelegationTokenRequest.getToken());
auditMap = buildTokenAuditMap(token);
@@ -133,7 +133,7 @@ public class OMRenewDelegationTokenRequest extends
OMClientRequest {
getOmRequest().getUpdatedRenewDelegationTokenRequest();
Token<OzoneTokenIdentifier> ozoneTokenIdentifierToken =
- OMPBHelper.convertToDelegationToken(updateRenewDelegationTokenRequest
+ OMPBHelper.tokenFromProto(updateRenewDelegationTokenRequest
.getRenewDelegationTokenRequest().getToken());
AuditLogger auditLogger = ozoneManager.getAuditLogger();
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 f6284393ed..072234dd80 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
@@ -37,6 +37,7 @@ import
org.apache.hadoop.hdds.protocol.proto.HddsProtos.TransferLeadershipReques
import
org.apache.hadoop.hdds.protocol.proto.HddsProtos.TransferLeadershipResponseProto;
import
org.apache.hadoop.hdds.protocol.proto.HddsProtos.UpgradeFinalizationStatus;
import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.scm.protocolPB.OzonePBHelper;
import org.apache.hadoop.hdds.utils.FaultInjector;
import org.apache.hadoop.ozone.OzoneAcl;
import org.apache.hadoop.ozone.common.PayloadUtils;
@@ -445,7 +446,7 @@ public class OzoneManagerRequestHandler implements
RequestHandler {
DBUpdates dbUpdatesWrapper =
impl.getDBUpdates(dbUpdatesRequest);
for (int i = 0; i < dbUpdatesWrapper.getData().size(); i++) {
- builder.addData(OMPBHelper.getByteString(
+ builder.addData(OzonePBHelper.getByteString(
dbUpdatesWrapper.getData().get(i)));
}
builder.setSequenceNumber(dbUpdatesWrapper.getCurrentSequenceNumber());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]