Joerg Hoh created SLING-12471:
---------------------------------

             Summary: DependencyResolver can return null values
                 Key: SLING-12471
                 URL: https://issues.apache.org/jira/browse/SLING-12471
             Project: Sling
          Issue Type: Improvement
          Components: HTL, Scripting
    Affects Versions: Scripting HTL Engine 1.4.24-1.4.0
            Reporter: Joerg Hoh


With caching enabled, under concurrency the ScriptDependencyResolver.resolve 
can return null values.

Context: 
[Github|https://github.com/apache/sling-org-apache-sling-scripting-sightly/blob/06194b90ac5316f8c44ccd95e46948a8aa440ed8/src/main/java/org/apache/sling/scripting/sightly/impl/utils/ScriptDependencyResolver.java#L122]

# Multiple threads are trying to resolve the same {{scriptIdentifier}}
# They all proceed to [line 
133|https://github.com/apache/sling-org-apache-sling-scripting-sightly/blob/06194b90ac5316f8c44ccd95e46948a8aa440ed8/src/main/java/org/apache/sling/scripting/sightly/impl/utils/ScriptDependencyResolver.java#L136]
 because the resolutionCache is not yet populated.
# One thread gets the writeLock, resolves the result, stores it back into the 
resolutionCache, and eventually releases the write lock.
# now all the other threads waiting on line 133 lock on the writelock 
one-by-one; and when checking the resolutionCache on [line 
136|https://github.com/apache/sling-org-apache-sling-scripting-sightly/blob/06194b90ac5316f8c44ccd95e46948a8aa440ed8/src/main/java/org/apache/sling/scripting/sightly/impl/utils/ScriptDependencyResolver.java#L136],
 the resolutionCache is already populated; and then they just release the 
writelock and proceed. But during this time {{result}} is never read from the 
resolutionCache, so it's still {{null}} and returned as such.

This normally happens immediately after startup, when the resolutionCache is 
still empty.





--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to