Nuevo en Symfony 4.1: Locks dinámicos
El componente Lock se introdujo en Symfony 3.4 para simplificar el manejo de locks locales o remotos que garantizan un acceso único a un determinado recurso. Aunque es uno de los componentes más recientes, ya se usa en proyectos como el CMS Contao y el Google Cloud SDK.
Una de sus principales funcionalidades son los locks que expiran automáticamente
después de que haya pasado un determinado tiempo llamado TTL (time to live).
El problema es que para las tareas complejas es difícil elegir un buen TTL, así
que es habitual empezar con un TTL no muy grande y después llamar al método
refresh()
para mantener el lock durante TTL segundos otra vez:
$lock->acquire(); try { while (!$finished) { // hacer aquí una parte del trabajo... $lock->refresh(); } } finally { $lock->release(); }
El problema de refresh()
es que cuando realizas tareas diferentes, el TTL puede
no ser suficiente para las tareas más complejas. Así que en Symfony 4.1 hemos
mejorado el método refresh()
para que acepte como argumento un TTL que se
utiliza solamente para ese refresco del lock y no para los siguientes:
// el TTL original son 30 segundos $lock = $factory->createLock('nombre-del-lock', 30); // ... $lock->acquire(); // mantiene el lock durante 30 segundos más $lock->refresh(); // ... // mantiene el lock durante 10 minutos (600 segundos) porque se va a hacer // una tarea compleja que no se completa en los 30 segundos originales $lock->refresh(600); // ... // el nuevo refresco mantiene el lock durante 30 segundos otra vez $lock->refresh(); // ...
Esta funcionalidad fue contribuida por Jérémy Derussé en el pull request #26232.
Fuente: New in Symfony 4.1: Dynamic lock refresh
Comentarios
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.