Martijn Dashorst created WICKET-7002:
----------------------------------------

             Summary: Application metadata access should not require 
synchronization
                 Key: WICKET-7002
                 URL: https://issues.apache.org/jira/browse/WICKET-7002
             Project: Wicket
          Issue Type: Improvement
          Components: wicket-core
    Affects Versions: 9.11.0, 8.14.0
            Reporter: Martijn Dashorst
         Attachments: Screenshot 2022-09-02 at 17.18.44.png

The methods getMetaData and setMetaData from Application have synchronized 
modifiers applied to them such that they block on the application instance.

This can cause blocking issues. When I looked at the monitor usage in our 
application running in production the Application metadata locks are 
responsible for 57% of all monitor usage.

I've included a screenshot of the monitor usage reverse call stacks.

The implementation should be changed to a ConcurrentHashMap so we can remove 
the synchronization from the getter and setter, and just use the hashmap's O(1) 
lookup rather than MetaDataKey's O(n) lookup. This will eliminate the blocking 
and (possibly) long lookups of metadata in the Application instance.

Note this does not involve modifying the component, session or requestcycle 
metadata implementations (yet).

IMO this should be backported to at least 9, as this is a semver compatible 
change.



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

Reply via email to