bdelacretaz commented on a change in pull request #17:
URL:
https://github.com/apache/sling-org-apache-sling-graphql-core/pull/17#discussion_r562640156
##########
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:
how about calling these costly things before acquiring the write lock?
To mininize the locked section
----------------------------------------------------------------
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]