We now report un-released locks in Behat tests, and when developer
debug is on, as well as in PHPunit.
The exception now has a full stack track, to help locate the problem.
PHPUnit removed the ability to mock a destructor, but our lock system
throws an exception if a lock has not been explicitly released in its
destructor.
Normally thhis is fine because the lock is released, and if not then we
want to know about it.
However, where we are mocking the lock, we do not actually obtain the
lock, and we may expect the test to fail.
This change moves the release and notification to a separate, reusable
public method, which is called from the destructor. This allows it to be
mocked at the appropriate time.
Show performance information about locks (time taken to acquire lock,
time lock is held for) in the 'perfinfo' display.
Also show existing information (that was already calculated but not
shown before) about the session lock, which is not a 'core\lock' type
lock, but the information is similarly useful.
* A couple of misc comment typo's
* Added missing $CFG required global in file_lock_factory::is_available
* Removed unused $CFG global from file_lock_factory::get_lock
* A couple of trivial phpdoc tweaks
* Removed unused $DB global from postgres_lock_factory::get_index_from_key
* Added global namespace \ to exceptions in get_index_from_key (tested and found they didn't resolve)
This locking system is designed to be used everywhere requiring
locking in Moodle. Each use of the locking system can be configured
to use a different type of locking (or the same type with a different
configuration).
The first supported lock types are memcache, memcached, file (flock),
db (specific handlers for pg, mysql and mariadb).