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 - +