⚡️ #yiisoftMutex #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle
Полностью переосмыслен и переписан код пакета Yii Mutex (PR, PR, PR), обеспечивающий взаимное исключение исполнения критических участков кода в «состоянии гонки».
—————
Основные интерфейсы и классы
Пакет предоставляет интерфейсы и классы, которые уже используются в конкретных реализациях.
•
•
-
-
•
•
В общем случае есть два варианта использования:
Класс SimpleMutex
Предоставляет альтернативный вариант работы с мьютексами. Пример:
Класс Synchronizer
Позволяет запускать callback-функции в синхронизированном режиме (в один момент времени выполняется только один экземпляр callback-функции). Пример:
Соответствующие изменение внесены в мьютекс-драйверы:
- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).
Полностью переосмыслен и переписан код пакета Yii Mutex (PR, PR, PR), обеспечивающий взаимное исключение исполнения критических участков кода в «состоянии гонки».
—————
Основные интерфейсы и классы
Пакет предоставляет интерфейсы и классы, которые уже используются в конкретных реализациях.
•
MutexInterface
— интерфейс мьютекс-объекта с методами acquire()
(включает блокировку) и release()
(отключает блокировку).•
MutexFactoryInterface
— интерфейс фабрики, создающей экземпляр мьютекс-объекта с двумя методами: -
create()
— создание мьютекс-объекта;-
createAndAcquire()
— создание мьютекс-объекта и включение блокировки. При неудачном включении блокировки будет брошено исключение.•
MutexFactory
— абстрактный класс фабрики, реализующй интерфейс MutexFactoryInterface
, с уже реализованным методом createAndAcquire()
.•
RetryAcquireTrait
— трейт, позволяющий выполнить несколько попыток блокировки в течение заданного времени.В общем случае есть два варианта использования:
$mutexFactory = new MyMutexFactory();и
$mutex = $mutexFactory->create('critical_logic');
if (!$mutex->acquire(1000)) {
throw new \RuntimeException('Unable to acquire "critical_logic" mutex.');
}
// business logic execution
$mutex->release();
$mutexFactory = new MyMutexFactory();—————
// При неудачной блокировке будет
// брошено исключение
$mutex = $mutexFactory->createAndAcquire('critical_logic', 1000);
// business logic execution
$mutex->release();
Класс SimpleMutex
Предоставляет альтернативный вариант работы с мьютексами. Пример:
$mutex = new SimpleMutex(new MyMutexFactory());—————
if (!$mutex->acquire('critical_logic', 1000)) {
throw new \RuntimeException('Unable to acquire "critical_logic" mutex.');
}
// business logic execution
$mutex->release();
Класс Synchronizer
Позволяет запускать callback-функции в синхронизированном режиме (в один момент времени выполняется только один экземпляр callback-функции). Пример:
$synchronizer = new Synchronizer(new MyMutexFactory());—————
$newCount = $synchronizer->execute('critical_logic', function () {
return $counter->increase();
}, 10);
Соответствующие изменение внесены в мьютекс-драйверы:
- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).
⚡️ #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle
В мьютекс-драйверах удалена опция
- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).
Спасибо kafkiansky за идею 👍
В мьютекс-драйверах удалена опция
autoRelease
(теперь она всегда включена), а автоматическое снятие блокировки выполняется с помощью деструктора класса (__desctruct()
) вместо регистрации функции, которая будет выполнена при завершении скрипта (register_shutdown_function()
):- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).
Спасибо kafkiansky за идею 👍
⚡️ #yiisoftMutexPdoMysql
Навели порядок в пакете Yii Mutex MySQL PDO Driver (PR):
- подчищен код, улучшены doc-блоки;
- обновлены dev-зависимости;
- уровень psalm повышен до 1;
- добавлены тесты;
- в файле
- исключены все служебные файлы при создании архива репозитория;
- актуализирован readme;
- улучшены конфигурация GitHub Workflow и другие служебные файлы.
Навели порядок в пакете Yii Mutex MySQL PDO Driver (PR):
- подчищен код, улучшены doc-блоки;
- обновлены dev-зависимости;
- уровень psalm повышен до 1;
- добавлены тесты;
- в файле
.editorconfig
добавлена секция *.yml
;- исключены все служебные файлы при создании архива репозитория;
- актуализирован readme;
- улучшены конфигурация GitHub Workflow и другие служебные файлы.
⚡️ #yiisoftMutexPdoMysql
В пакете Yii Mutex MySQL PDO Driver мьютекс теперь наследуется от абстрактного
В пакете Yii Mutex MySQL PDO Driver мьютекс теперь наследуется от абстрактного
Mutex
из основного пакета + в работе драйвера удалена проверка с использованием MySQL-функции IS_FREE_LOCK()
(PR).⚡️ #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle
В мьютекс-драйверах в readme добавлена документация по использованию:
- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).
В мьютекс-драйверах в readme добавлена документация по использованию:
- File Driver (PR),
- MySQL PDO Driver (PR),
- Postgres PDO Driver (PR),
- Oracle PDO Driver (PR).
🎁 #yiisoftMutex #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle #yiisoftMutexRedis #Релиз #ПервыйРелиз
Первый релиз Yii Mutex 1.0.0 (новость на yiiframework.com).
Этот пакет, используя механизм блокировки, обеспечивает взаимное исключение исполнения критических участков кода в «состоянии гонки». Доступны несколько вариантов использования.
1) Запуск callback-функции в синхронизированном режиме (в один момент времени выполняется только один экземпляр callback-функции) с помощью класса
- File Driver 1.0.0
- MySQL PDO Driver 1.0.0
- Postgres PDO Driver 1.0.0
- Oracle PDO Driver 1.0.0
- Redis Driver 1.0.0
Первый релиз Yii Mutex 1.0.0 (новость на yiiframework.com).
Этот пакет, используя механизм блокировки, обеспечивает взаимное исключение исполнения критических участков кода в «состоянии гонки». Доступны несколько вариантов использования.
1) Запуск callback-функции в синхронизированном режиме (в один момент времени выполняется только один экземпляр callback-функции) с помощью класса
Synchronizer
:/** @var \Yiisoft\Mutex\Synchronizer $synchronizer */2) Установка и снятие блокировки вручную с помощью класса
$newCount = $synchronizer->execute('critical_logic', function () {
return $counter->increase();
}, 10);
SimpleMutex
:/** @var \Yiisoft\Mutex\SimpleMutex $simpleMutex */3) Ручное создание мьютекса и управление им:
if (!$simpleMutex->acquire('critical_logic', 1000)) {
throw new \RuntimeException('Unable to acquire "critical_logic" mutex.');
}
$newCount = $counter->increase();
$simpleMutex->release();
/** @var \Yiisoft\Mutex\MutexFactoryInterface $mutexFactory */или вариант с полным контролем:
$mutex = $mutexFactory->createAndAcquire('critical', 10);
$newCount = $counter->increase();
$mutex->release();
/** @var \Yiisoft\Mutex\MutexFactoryInterface $mutexFactory */Вместе с основным пакетом зарелизены мьютекс-драйвера:
$mutex = $mutexFactory->create('critical');
if (!$mutex->acquire(10)) {
throw new \RuntimeException('Unable to acquire mutex "critical".');
}
$newCount = $counter->increase();
$mutex->release();
- File Driver 1.0.0
- MySQL PDO Driver 1.0.0
- Postgres PDO Driver 1.0.0
- Oracle PDO Driver 1.0.0
- Redis Driver 1.0.0
⚡️ Практически во всех пакетах добавлен ежедневный запуск тестов через GitHub Workflow.
#yiisoftCacheWincache #yiisoftView #yiisoftDi #yiisoftStrings #yiisoftRbacPhp #yiisoftYiiConsole #yiisoftCache #yiisoftDb #yiisoftRbac #yiisoftYiiAuthClient #yiisoftYiiGii #yiisoftViewTwig #yiisoftYiiWeb #yiisoftDbMssql #yiisoftDbOracle #yiisoftLog #yiisoftYiiDebug #yiisoftDbSqlite #yiisoftDbPgsql #yiisoftDbMysql #yiisoftEventDispatcher #yiisoftI18n #yiisoftYiiEvent #yiisoftYiiDbMigration #yiisoftValidator #yiisoftUser #yiisoftTranslatorMessageGettext #yiisoftSecurity #yiisoftMiddlewareDispatcher #yiisoftMutex #yiisoftNetworkUtilities #yiisoftProfiler #yiisoftProxy #yiisoftRequestBodyParser #yiisoftRouterFastroute #yiisoftInjector #yiisoftCacheApcu #yiisoftAuthJwt #yiisoftAuth #yiisoftAssets #yiisoftArrays #yiisoftAliases #yiisoftDemoApi #yiisoftDemo #yiisoftDataResponse #yiisoftData #yiisoftCsrf #yiisoftCookies #yiisoftConfig #yiisoftCacheMemcached #yiisoftCacheFile #yiisoftHttp #yiisoftHtml #yiisoftFiles #yiisoftFactory #yiisoftErrorHandler #yiisoftLogTargetDb #yiisoftLogTargetEmail #yiisoftLogTargetFile #yiisoftRequestModel #yiisoftRbacSpiralDb #yiisoftRateLimiter #yiisoftPackageTemplate #yiisoftMutexRedis #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftTranslatorFormatterSimple #yiisoftTranslatorFormatterIntl #yiisoftTranslatorExtractor #yiisoftTranslator #yiisoftTestSupport #yiisoftSession #yiisoftRouter #yiisoftRequirements #yiisoftTranslatorMessageDb #yiisoftTranslatorMessagePhp #yiisoftVarDumper #yiisoftWidget #yiisoftYiiBootstrap5 #yiisoftYiiBulma #yiisoftYiiCycle #yiisoftYiiDataview #yiisoftYiiDebugApi #yiisoftYiiDebugViewer #yiisoftMailerSwiftmailer #yiisoftMailer #yiisoftLogTargetSyslog #yiisoftJson #yiisoftForm #yiisoftYiiWidgets #yiisoftYiiView #yiisoftYiiSwagger #yiisoftYiiSentry
#yiisoftCacheWincache #yiisoftView #yiisoftDi #yiisoftStrings #yiisoftRbacPhp #yiisoftYiiConsole #yiisoftCache #yiisoftDb #yiisoftRbac #yiisoftYiiAuthClient #yiisoftYiiGii #yiisoftViewTwig #yiisoftYiiWeb #yiisoftDbMssql #yiisoftDbOracle #yiisoftLog #yiisoftYiiDebug #yiisoftDbSqlite #yiisoftDbPgsql #yiisoftDbMysql #yiisoftEventDispatcher #yiisoftI18n #yiisoftYiiEvent #yiisoftYiiDbMigration #yiisoftValidator #yiisoftUser #yiisoftTranslatorMessageGettext #yiisoftSecurity #yiisoftMiddlewareDispatcher #yiisoftMutex #yiisoftNetworkUtilities #yiisoftProfiler #yiisoftProxy #yiisoftRequestBodyParser #yiisoftRouterFastroute #yiisoftInjector #yiisoftCacheApcu #yiisoftAuthJwt #yiisoftAuth #yiisoftAssets #yiisoftArrays #yiisoftAliases #yiisoftDemoApi #yiisoftDemo #yiisoftDataResponse #yiisoftData #yiisoftCsrf #yiisoftCookies #yiisoftConfig #yiisoftCacheMemcached #yiisoftCacheFile #yiisoftHttp #yiisoftHtml #yiisoftFiles #yiisoftFactory #yiisoftErrorHandler #yiisoftLogTargetDb #yiisoftLogTargetEmail #yiisoftLogTargetFile #yiisoftRequestModel #yiisoftRbacSpiralDb #yiisoftRateLimiter #yiisoftPackageTemplate #yiisoftMutexRedis #yiisoftMutexPdoPgsql #yiisoftMutexPdoOracle #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftTranslatorFormatterSimple #yiisoftTranslatorFormatterIntl #yiisoftTranslatorExtractor #yiisoftTranslator #yiisoftTestSupport #yiisoftSession #yiisoftRouter #yiisoftRequirements #yiisoftTranslatorMessageDb #yiisoftTranslatorMessagePhp #yiisoftVarDumper #yiisoftWidget #yiisoftYiiBootstrap5 #yiisoftYiiBulma #yiisoftYiiCycle #yiisoftYiiDataview #yiisoftYiiDebugApi #yiisoftYiiDebugViewer #yiisoftMailerSwiftmailer #yiisoftMailer #yiisoftLogTargetSyslog #yiisoftJson #yiisoftForm #yiisoftYiiWidgets #yiisoftYiiView #yiisoftYiiSwagger #yiisoftYiiSentry
🎁 #yiisoftMutex #yiisoftMutexFile #yiisoftMutexPdoMysql #yiisoftMutexPdoOracle #yiisoftMutexPdoPgsql #yiisoftMutexRedis #МинорныйРелиз #Релиз
Минорный релиз Yii Mutex 1.1.0
• Добавлены два новых исключения
Соответствующие изменения внесены и в пакеты-адаптеры:
Yii Mutex File Driver 1.1.0 (PR)
Yii Mutex MySQL PDO Driver 1.1.0 (PR)
Yii Mutex Oracle PDO Driver 1.1.0 (PR)
Yii Mutex PostgreSQL PDO Driver 1.1.0 (PR)
Yii Mutex Redis Driver 1.1.0 (PR)
Минорный релиз Yii Mutex 1.1.0
• Добавлены два новых исключения
MutexLockedException
и MutexReleaseException
, вызываемые вместо RuntimeException
(PR)Соответствующие изменения внесены и в пакеты-адаптеры:
Yii Mutex File Driver 1.1.0 (PR)
Yii Mutex MySQL PDO Driver 1.1.0 (PR)
Yii Mutex Oracle PDO Driver 1.1.0 (PR)
Yii Mutex PostgreSQL PDO Driver 1.1.0 (PR)
Yii Mutex Redis Driver 1.1.0 (PR)
⚡️ #yiisoftMailer #yiisoftLogTargetSyslog #yiisoftHttp #yiisoftI18n #yiisoftLog #yiisoftLogTargetDb #yiisoftLogTargetEmail #yiisoftMailerSymfony #yiisoftMiddlewareDispatcher #yiisoftMutexPdoOracle #yiisoftMutexRedis #yiisoftRbac #yiisoftRbacDb #yiisoftRbacPhp #yiisoftRequestBodyParser #yiisoftRateLimiter #yiisoftProxy #yiisoftProfiler #yiisoftMutexPdoPgsql #yiisoftMutexPdoMysql #yiisoftMailerSwiftmailer #yiisoftHtml #yiisoftRequestModel #yiisoftRequirements #yiisoftRouter #yiisoftRouterFastroute #yiisoftSession #yiisoftStrings #yiisoftTestSupport #yiisoftTranslator #yiisoftTranslatorMessageDb #yiisoftUser #yiisoftView #yiisoftViewTwig #yiisoftWidget #yiisoftYiiConsole
Сделали изменения в стили кода. Методы, вызываемые «цепочкой», перенесли на новую строку:
- Yii Mailer Library (PR)
- Yii Logging Syslog Target (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Logging Library (PR)
- Yii Logging DB Target (PR)
- Yii Logging Email Target (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Middleware Dispatcher (PR)
- Yii Mutex Oracle PDO Driver (PR)
- Yii Mutex Redis Driver (PR)
- Yii Role-Based Access Control (PR)
- Yii RBAC Database (PR)
- Yii RBAC PHP File Storage (PR)
- Yii Request Body Parser (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Proxy (PR)
- Yii Profiler (PR)
- Yii Mutex PostgreSQL PDO Driver (PR)
- Yii Mutex MySQL PDO Driver (PR)
- Yii Mailer SwiftMailer Extension (PR)
- Yii HTML (PR)
- Yii Request Model (PR)
- Yii Requirements Checker (PR)
- Yii Router (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Session (PR)
- Yii Strings (PR)
- Yii Test Support (PR)
- Yii Message Translator (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii View (PR)
- Yii View Twig Renderer (PR)
- Yii Widget (PR)
- Yii Console (PR)
Сделали изменения в стили кода. Методы, вызываемые «цепочкой», перенесли на новую строку:
- Yii Mailer Library (PR)
- Yii Logging Syslog Target (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Logging Library (PR)
- Yii Logging DB Target (PR)
- Yii Logging Email Target (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Middleware Dispatcher (PR)
- Yii Mutex Oracle PDO Driver (PR)
- Yii Mutex Redis Driver (PR)
- Yii Role-Based Access Control (PR)
- Yii RBAC Database (PR)
- Yii RBAC PHP File Storage (PR)
- Yii Request Body Parser (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Proxy (PR)
- Yii Profiler (PR)
- Yii Mutex PostgreSQL PDO Driver (PR)
- Yii Mutex MySQL PDO Driver (PR)
- Yii Mailer SwiftMailer Extension (PR)
- Yii HTML (PR)
- Yii Request Model (PR)
- Yii Requirements Checker (PR)
- Yii Router (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Session (PR)
- Yii Strings (PR)
- Yii Test Support (PR)
- Yii Message Translator (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii View (PR)
- Yii View Twig Renderer (PR)
- Yii Widget (PR)
- Yii Console (PR)
🔥4👍3
⚡️ #yiisoftRbac #yiisoftMutex #yiisoftMutexPdoOracle #yiisoftMutexPdoPgsql #yiisoftMutexPdoMysql #yiisoftDataResponse
Обновили версию
- Yii Mutex (PR),
- Yii Mutex Oracle PDO Driver (PR),
- Yii Mutex PostgreSQL PDO Driver (PR),
- Yii Mutex MySQL PDO Driver (PR),
- Yii Role-Based Access Control (PR),
- Yii Data Response (PR).
Обновили версию
vimeo/psalm
до ^4.30|^5.3
в пакетах:- Yii Mutex (PR),
- Yii Mutex Oracle PDO Driver (PR),
- Yii Mutex PostgreSQL PDO Driver (PR),
- Yii Mutex MySQL PDO Driver (PR),
- Yii Role-Based Access Control (PR),
- Yii Data Response (PR).
👍4