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 c0d9fd9298 HDDS-10054. Reduce DataNode token verification heap
allocation cost. (#5909)
c0d9fd9298 is described below
commit c0d9fd9298adfed31d0dfb8c297f4a9f74290515
Author: Wei-Chiu Chuang <[email protected]>
AuthorDate: Thu Jan 11 22:56:01 2024 -0800
HDDS-10054. Reduce DataNode token verification heap allocation cost. (#5909)
---
.../hdds/security/token/ContainerTokenIdentifier.java | 18 +++++++++++++++++-
.../hdds/security/token/OzoneBlockTokenIdentifier.java | 18 +++++++++++++++++-
.../hdds/security/token/ShortLivedTokenIdentifier.java | 3 +++
.../hdds/security/token/ShortLivedTokenVerifier.java | 5 +----
4 files changed, 38 insertions(+), 6 deletions(-)
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/ContainerTokenIdentifier.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/ContainerTokenIdentifier.java
index 7cd8c279ba..78ab468acf 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/ContainerTokenIdentifier.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/ContainerTokenIdentifier.java
@@ -64,13 +64,18 @@ public class ContainerTokenIdentifier extends
ShortLivedTokenIdentifier {
@Override
public void write(DataOutput out) throws IOException {
+ out.write(getBytes());
+ }
+
+ @Override
+ public byte[] getBytes() {
ContainerTokenSecretProto.Builder builder = ContainerTokenSecretProto
.newBuilder()
.setOwnerId(getOwnerId())
.setSecretKeyId(ProtobufUtils.toProtobuf(getSecretKeyId()))
.setExpiryDate(getExpiry().toEpochMilli())
.setContainerId(containerID.getProtobuf());
- out.write(builder.build().toByteArray());
+ return builder.build().toByteArray();
}
@Override
@@ -81,6 +86,17 @@ public class ContainerTokenIdentifier extends
ShortLivedTokenIdentifier {
}
ContainerTokenSecretProto proto =
ContainerTokenSecretProto.parseFrom((DataInputStream) in);
+ readFromProto(proto);
+ }
+
+ @Override
+ public void readFromByteArray(byte[] bytes) throws IOException {
+ ContainerTokenSecretProto proto =
+ ContainerTokenSecretProto.parseFrom(bytes);
+ readFromProto(proto);
+ }
+
+ private void readFromProto(ContainerTokenSecretProto proto) {
setSecretKeyId(ProtobufUtils.fromProtobuf(proto.getSecretKeyId()));
setExpiry(Instant.ofEpochMilli(proto.getExpiryDate()));
setOwnerId(proto.getOwnerId());
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/OzoneBlockTokenIdentifier.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/OzoneBlockTokenIdentifier.java
index be18f90a07..16cbaf9be7 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/OzoneBlockTokenIdentifier.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/OzoneBlockTokenIdentifier.java
@@ -133,6 +133,17 @@ public class OzoneBlockTokenIdentifier extends
ShortLivedTokenIdentifier {
}
BlockTokenSecretProto token =
BlockTokenSecretProto.parseFrom((DataInputStream) in);
+ readFromProto(token);
+ }
+
+ @Override
+ public void readFromByteArray(byte[] bytes) throws IOException {
+ BlockTokenSecretProto token =
+ BlockTokenSecretProto.parseFrom(bytes);
+ readFromProto(token);
+ }
+
+ private void readFromProto(BlockTokenSecretProto token) {
setOwnerId(token.getOwnerId());
setExpiry(Instant.ofEpochMilli(token.getExpiryDate()));
setSecretKeyId(ProtobufUtils.fromProtobuf(token.getSecretKeyId()));
@@ -157,6 +168,11 @@ public class OzoneBlockTokenIdentifier extends
ShortLivedTokenIdentifier {
@Override
public void write(DataOutput out) throws IOException {
+ out.write(getBytes());
+ }
+
+ @Override
+ public byte[] getBytes() {
BlockTokenSecretProto.Builder builder = BlockTokenSecretProto.newBuilder()
.setBlockId(blockId)
.setOwnerId(getOwnerId())
@@ -167,7 +183,7 @@ public class OzoneBlockTokenIdentifier extends
ShortLivedTokenIdentifier {
for (AccessModeProto mode : modes) {
builder.addModes(AccessModeProto.valueOf(mode.name()));
}
- out.write(builder.build().toByteArray());
+ return builder.build().toByteArray();
}
/**
diff --git
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/ShortLivedTokenIdentifier.java
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/ShortLivedTokenIdentifier.java
index dbd168f96a..a4c82fece7 100644
---
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/ShortLivedTokenIdentifier.java
+++
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/security/token/ShortLivedTokenIdentifier.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.hdds.annotation.InterfaceAudience;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.TokenIdentifier;
+import java.io.IOException;
import java.time.Instant;
import java.util.Objects;
import java.util.UUID;
@@ -83,6 +84,8 @@ public abstract class ShortLivedTokenIdentifier extends
TokenIdentifier {
return secretKeyId;
}
+ public abstract void readFromByteArray(byte[] bytes) throws IOException;
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/security/token/ShortLivedTokenVerifier.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/security/token/ShortLivedTokenVerifier.java
index 802323436e..b03c9de5f4 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/security/token/ShortLivedTokenVerifier.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/security/token/ShortLivedTokenVerifier.java
@@ -26,8 +26,6 @@ import
org.apache.hadoop.hdds.security.symmetric.SecretKeyVerifierClient;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.Token;
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
import java.io.IOException;
import java.time.Instant;
import java.util.Objects;
@@ -75,8 +73,7 @@ public abstract class
T tokenId = createTokenIdentifier();
try {
- tokenId.readFields(new DataInputStream(new ByteArrayInputStream(
- token.getIdentifier())));
+ tokenId.readFromByteArray(token.getIdentifier());
} catch (IOException ex) {
throw new BlockTokenException("Failed to decode token : " + token);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]