[ 
https://issues.apache.org/jira/browse/SLING-3758?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Julian Sedding updated SLING-3758:
----------------------------------

    Attachment: SLING-3758-jsedding.patch

> [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
>         Attachments: SLING-3758-jsedding.patch
>
>
> 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