Ultimate Lock

Component ID

2409505

Component name

Ultimate Lock

Component type

module

Maintenance status

Development status

Component security advisory coverage

not-covered

Component created

Component changed

Component body

The Ultimate Lock module provides an OOP based framework for handling locks
in a robust, extensible and feature-rich way.

Configuration

To use as a default lock backend, configure settings.php

Basic/simple configuration

<?php
 $conf['lock_inc'] = 'sites/all/modules/contrib/ultimate_lock.lock.inc';
?>

Adding eventhandler support through queues

<?php
 $conf['lock_inc'] = 'sites/all/modules/contrib/ultimate_lock.lock.inc';
 $conf['ultimate_lock_service_options_UltimateLockServiceDatabase'] = array(
   'ItemClass' => 'UltimateLockItemQueue',
 );
?>

Using memcache

<?php
 $conf['lock_inc'] = 'sites/all/modules/contrib/ultimate_lock.lock.inc';
 $conf['ultimate_lock_default_service'] = 'UltimateLockServiceMemcache';
?>

Using memcache with redis queues

<?php
 $conf['lock_inc'] = 'sites/all/modules/contrib/ultimate_lock.lock.inc';
 $conf['ultimate_lock_default_service'] = 'UltimateLockServiceMemcache';
 $conf['ultimate_lock_service_options_UltimateLockServiceMemcache'] = array(
   'ItemClass' => 'UltimateLockItemQueue',
 );
 $conf['ultimate_lock_item_options_UltimateLockItemQueue'] = array(
   'class' => 'DrupalRedisQueue',
 );
?>

Usage

Acquire lock

<?php
 $lock = UltimateLock::service(
   'UltimateLockServiceDatabase',
   array('ItemClass' => 'UltimateLockItemQueue')
 )->acquire('mylockname', 20);
 if ($lock) {
   // We got the lock!
   $lock->addEventHandler('release', 'mycallback');
   // Lock is released when object is destroyed (out-of-scope)
   // $lock->release()
 }
?>

Persist lock

<?php
 $lock = UltimateLock::acquire('mylockname', 20);
 if ($lock) {
   // We got the lock! Don't release upon end of request.
   $lock->persist();
 }
?>

Re-acquire lock from other request

<?php
 $lock = UltimateLock::reAcquire('mylockname', 20);
 if ($lock) {
   // We got the lock! 
   // Lock is released when object is destroyed (out-of-scope)
   // $lock->release()
 }
?>