This is an automated email from the ASF dual-hosted git repository.

ivandika 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 a00787c9d1 HDDS-11532. Sort multipart uploads on ListMultipartUploads 
response (#7929)
a00787c9d1 is described below

commit a00787c9d1eeae99cf1046efd2a1031042e38c36
Author: Peter Lee <[email protected]>
AuthorDate: Thu Feb 20 13:51:44 2025 +0800

    HDDS-11532. Sort multipart uploads on ListMultipartUploads response (#7929)
---
 .../java/org/apache/hadoop/ozone/util/UUIDv7.java  | 61 ++++++++++++++++++++++
 .../ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java   |  5 +-
 .../om/request/util/OMMultipartUploadUtils.java    |  4 +-
 3 files changed, 64 insertions(+), 6 deletions(-)

diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDv7.java 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDv7.java
new file mode 100644
index 0000000000..2a5f8f84b6
--- /dev/null
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/util/UUIDv7.java
@@ -0,0 +1,61 @@
+/*
+ * 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.util;
+
+import java.nio.ByteBuffer;
+import java.security.SecureRandom;
+import java.util.UUID;
+
+/**
+ * Utility class for generating UUIDv7.
+ * https://antonz.org/uuidv7/
+ */
+public final class UUIDv7 {
+  private static final ThreadLocal<SecureRandom> GENERATOR = 
ThreadLocal.withInitial(SecureRandom::new);
+
+  // Private constructor to prevent instantiation
+  private UUIDv7() {
+  }
+
+  public static UUID randomUUID() {
+    byte[] value = randomBytes();
+    ByteBuffer buf = ByteBuffer.wrap(value);
+    long high = buf.getLong();
+    long low = buf.getLong();
+    return new UUID(high, low);
+  }
+
+  public static byte[] randomBytes() {
+    // random bytes
+    byte[] value = new byte[16];
+    GENERATOR.get().nextBytes(value);
+
+    // current timestamp in ms
+    ByteBuffer timestamp = ByteBuffer.allocate(Long.BYTES);
+    timestamp.putLong(System.currentTimeMillis());
+
+    // timestamp
+    System.arraycopy(timestamp.array(), 2, value, 0, 6);
+
+    // version and variant
+    value[6] = (byte) ((value[6] & 0x0F) | 0x70);
+    value[8] = (byte) ((value[8] & 0x3F) | 0x80);
+
+    return value;
+  }
+}
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java
index 4d536640af..5858727d34 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java
@@ -675,13 +675,10 @@ public void testListMultipartUploads() {
     uploadIds.add(uploadId1);
     String uploadId2 = initiateMultipartUpload(bucketName, multipartKey1, 
null, null, null);
     uploadIds.add(uploadId2);
-    // TODO: Currently, Ozone sorts based on uploadId instead of MPU init time 
within the same key.
-    //  Remove this sorting step once HDDS-11532 has been implemented
-    Collections.sort(uploadIds);
+
     String uploadId3 = initiateMultipartUpload(bucketName, multipartKey2, 
null, null, null);
     uploadIds.add(uploadId3);
 
-    // TODO: Add test for max uploads threshold and marker once HDDS-11530 has 
been implemented
     ListMultipartUploadsRequest listMultipartUploadsRequest = new 
ListMultipartUploadsRequest(bucketName);
 
     MultipartUploadListing result = 
s3Client.listMultipartUploads(listMultipartUploadsRequest);
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/util/OMMultipartUploadUtils.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/util/OMMultipartUploadUtils.java
index 3c42d50b2b..9bee8b1440 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/util/OMMultipartUploadUtils.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/util/OMMultipartUploadUtils.java
@@ -20,12 +20,12 @@
 import static org.apache.hadoop.ozone.OzoneConsts.OM_KEY_PREFIX;
 
 import java.io.IOException;
-import java.util.UUID;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hdds.utils.UniqueId;
 import org.apache.hadoop.ozone.om.OMMetadataManager;
 import org.apache.hadoop.ozone.om.helpers.BucketLayout;
 import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
+import org.apache.hadoop.ozone.util.UUIDv7;
 
 /**
  * Utility class related to OM Multipart Upload.
@@ -41,7 +41,7 @@ private OMMultipartUploadUtils() {
    * @return multipart upload ID
    */
   public static String getMultipartUploadId() {
-    return UUID.randomUUID() + "-" + UniqueId.next();
+    return UUIDv7.randomUUID() + "-" + UniqueId.next();
   }
 
   /**


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to