raducotescu commented on a change in pull request #17:
URL: 
https://github.com/apache/sling-org-apache-sling-graphql-core/pull/17#discussion_r562705372



##########
File path: 
src/main/java/org/apache/sling/graphql/core/engine/DefaultQueryExecutor.java
##########
@@ -289,4 +332,71 @@ private String getDirectiveArgumentValue(Directive d, 
String name) {
             throw up;
         }
     }
+
+    GraphQLSchema getSchema(@NotNull String sdl, @NotNull Resource 
currentResource, @NotNull String[] selectors) {
+        readLock.lock();
+        String newHash = SHA256Hasher.getHash(sdl);
+        String resourceToHashMapKey = getCacheKey(currentResource, selectors);
+        String oldHash = resourceToHashMap.get(resourceToHashMapKey);
+        if (!newHash.equals(oldHash)) {
+            readLock.unlock();
+            writeLock.lock();
+            try {
+                oldHash = resourceToHashMap.get(resourceToHashMapKey);
+                if (!newHash.equals(oldHash)) {
+                    resourceToHashMap.put(resourceToHashMapKey, newHash);
+                    TypeDefinitionRegistry typeRegistry = new 
SchemaParser().parse(sdl);
+                    Iterable<GraphQLScalarType> scalars = 
scalarsProvider.getCustomScalars(typeRegistry.scalars());
+                    RuntimeWiring runtimeWiring = buildWiring(typeRegistry, 
scalars, currentResource);
+                    SchemaGenerator schemaGenerator = new SchemaGenerator();

Review comment:
       With the code written like it is, we're only doing those costly 
operations _iff_ the current thread has to update the value. Moving this code 
outside of the lock will lead to it being called concurrently, defeating the 
purpose of the whole cache. The expensive operation is done by `new 
SchemaParser().parse(sdl);`.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to