Julian Sedding created SLING-3758:
-------------------------------------

             Summary: [i18n][Performance] Optimize initialization of 
ResourceBundle cache
                 Key: SLING-3758
                 URL: https://issues.apache.org/jira/browse/SLING-3758
             Project: Sling
          Issue Type: Improvement
          Components: Extensions
    Affects Versions: i18n 2.2.8
            Reporter: Julian Sedding


I ran into the performance issue described in SLING-2881 
(JcrResourceBundleProvider clears the cache on mix:language changes) and 
updated the SLing I18N bundle to version 2.2.8.

However, with the preloadBundles flag set to false (the default), the system 
stalled after being put under load.

According to my analysis there were lots of cuncurrent HTTP requests, all 
requesting the i18n ResourceBundle. Because the cache was not yet initialized, 
each of them started loading it from the repository. The system practically 
came to a hold, and did not recover after removing the load (I waited ~10min). 
I believe it might have eventually recovered, as I could not identify a 
deadlock in a series of thred-dumps.

I suggest three improvements:

# Change the default of preloadBundles to "true". This should avoid having HTTP 
requests waiting for the cache to be initialized.
# Ensure each ResourceBundle is only loaded into cache once (when the cache is 
empty), in order to limit I/O.
# Adjust the queries for languageRootPaths to only return nodes that have a 
@jcr:language property.

The attached patch implements points 2 and 3. It includes a test that verifies 
correct concurrent behaviour. The test can be run against the current 
implementation and should fail (it did reliably fail on my machine).

Additionally, I verified the fix on a local Sling instance using Apache Bench 
(ab) and finally on a production system. The production system loaded the 
ResourceBundles for four languages and recovered from that load after a few 
seconds.

Could you kindly review the patch and apply the changes. Thank you.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to