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]

Reply via email to