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)