diff --git a/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/FastUUIDGenerator.java b/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/FastUUIDGenerator.java
new file mode 100644
index 0000000..c2853cf
--- /dev/null
+++ b/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/FastUUIDGenerator.java
@@ -0,0 +1,25 @@
+package org.hypertrace.core.grpcutils.context;
+
+import java.util.UUID;
+import java.util.concurrent.ThreadLocalRandom;
+
+public class FastUUIDGenerator {
+ /**
+ * This function generates UUIDs using ThreadLocalRandom, which is faster and doesn't block like
+ * the default randomUUID method that relies on /dev/random. It's suitable for most random UUID
+ * needs.
+ */
+ public static UUID randomUUID() {
+ long mostSigBits = ThreadLocalRandom.current().nextLong();
+ long leastSigBits = ThreadLocalRandom.current().nextLong();
+
+ // Set the version (4) For random UUID
+ mostSigBits &= 0xFFFFFFFFFFFF0FFFL;
+ mostSigBits |= 0x0000000000004000L;
+ // Set variant to RFC 4122
+ leastSigBits &= 0x3FFFFFFFFFFFFFFFL;
+ leastSigBits |= 0x8000000000000000L;
+
+ return new UUID(mostSigBits, leastSigBits);
+ }
+}
diff --git a/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContext.java b/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContext.java
index 120c99e..74f094f 100644
--- a/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContext.java
+++ b/grpc-context-utils/src/main/java/org/hypertrace/core/grpcutils/context/RequestContext.java
@@ -18,7 +18,6 @@
import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
@@ -34,7 +33,9 @@ public class RequestContext {
public static RequestContext forTenantId(String tenantId) {
return new RequestContext()
.put(RequestContextConstants.TENANT_ID_HEADER_KEY, tenantId)
- .put(RequestContextConstants.REQUEST_ID_HEADER_KEY, UUID.randomUUID().toString());
+ .put(
+ RequestContextConstants.REQUEST_ID_HEADER_KEY,
+ FastUUIDGenerator.randomUUID().toString());
}
public static RequestContext fromMetadata(Metadata metadata) {
diff --git a/owasp-suppressions.xml b/owasp-suppressions.xml
index cf17423..36dbfa1 100644
--- a/owasp-suppressions.xml
+++ b/owasp-suppressions.xml
@@ -7,7 +7,7 @@
^pkg:maven/org\.hypertrace\..*@.*$
cpe:/a:grpc:grpc
-
+