Hello, TinkerPop developers!

I’m the user of JanusGraph, as you may know, which is the graph database on top 
of the gremlin server.
Recently on the investigation of why the gremlin-server uses UUID as its 
request id,
I saw that the Builder class of 
org.apache.tinkerpop.gremlin.driver.message.RequestMessage class sets its 
requestId field as UUID.randomUUID() by default.

But I think it should be fixed not to be set by default. The reasons are below;

- UUID.randomUUID() uses SecureRandom which grabs the lock at JVM level,
    which means whole threads calling this API compete against each other.
- Getting random value from SecureRandom is somewhat CPU-intensive job.
- If a gremlin client sends requestId by itself, the costs above are useless.


If you guys think my suggestion is reasonable, I will make this as git pull 
request.


Regards,
Eugene



p.s. Here’s my diff.

Index: 
gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/message/RequestMessage.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- 
gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/message/RequestMessage.java
        (revision fa0a0ee64331bb1e67248137bd97fe001554ac10)
+++ 
gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/message/RequestMessage.java
        (date 1512465656000)
@@ -112,7 +112,7 @@
      */
     public static final class Builder {
         public static final String OP_PROCESSOR_NAME = "";
-        private UUID requestId = UUID.randomUUID();
+        private UUID requestId;
         private String op;
         private String processor = OP_PROCESSOR_NAME;
         private Map<String, Object> args = new HashMap<>();
@@ -155,7 +155,7 @@
          * Create the request message given the settings provided to the 
{@link Builder}.
          */
         public RequestMessage create() {
-            return new RequestMessage(requestId, op, processor, args);
+            return new RequestMessage(requestId == null ? UUID.randomUUID() : 
requestId, op, processor, args);
         }
     }
 

Reply via email to