⚡️ #yiisoftMutex
Реализована обработка ошибок в пользовательском коде при использовании класса
• В мьютексе всегда будет снята блокировка, даже если во время выполнения callback-функции было брошено исключение.
• Если во время выполнения пользовательского кода произошла ошибка (не исключение, например
Спасибо Антону @faqphp за обнаруженную проблему 👍
Реализована обработка ошибок в пользовательском коде при использовании класса
Synchronizer
из пакета Yii Mutex (PR).• В мьютексе всегда будет снята блокировка, даже если во время выполнения callback-функции было брошено исключение.
• Если во время выполнения пользовательского кода произошла ошибка (не исключение, например
E_WARNING
), то такая ошибка будет преобразована в исключение ErrorException
, что позволит перехватить её.Спасибо Антону @faqphp за обнаруженную проблему 👍
⚡️ #yiisoftMutex
В документации к Yii Mutex добавлено предупреждение об особенностях использования деструкторов и shutdown-функций (PR).
—————
Выдержки из документации PHP
•
•
—————
Если в пользовательском коде или в других пакетах внутри деструктора или shutdown-функции работа скрипта будет остановлена с помощью
В документации к Yii Mutex добавлено предупреждение об особенностях использования деструкторов и shutdown-функций (PR).
—————
Выдержки из документации PHP
•
register_shutdown_function()
: "Возможна регистрация нескольких подобных функций с помощью register_shutdown_function(), при этом функции будут выполняться в том порядке, в каком они были зарегистрированы. Если вы вызовете exit() в одной из зарегистрированных завершающих функций, процесс будет полностью остановлен и последующие завершающие функции не будут вызваны."•
__destruct()
: "Деструктор будет вызываться даже в том случае, если скрипт был остановлен с помощью функции exit(). Вызов exit() в деструкторе предотвратит запуск всех последующих функций завершения."—————
Если в пользовательском коде или в других пакетах внутри деструктора или shutdown-функции работа скрипта будет остановлена с помощью
die()
или exit()
, то автоматическое снятие блокировки в мьютексе может не сработать.⚡️ #yiisoftMutex
В классе
В классе
SimpleMutex
из Yii Mutex реализовано автоматические удаление объекта мьютекса после снятия блокировки (PR).⚡️ #yiisoftMutex
Небольшой рефакторинг тестов в Yii Mutex: удалён трейт
Небольшой рефакторинг тестов в Yii Mutex: удалён трейт
MutexTestTrait
, а все тесты из него перенесены в сам класс с тестами (PR).⚡️ #yiisoftMutex
В пакете Yii Mutex добавлен абстрактный класс
В пакете Yii Mutex добавлен абстрактный класс
Mutex
(реализует MutexInterface
), предоставляющий базовый функционал для создания драйверов (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
⚡️ #yiisoftMutex
В пакете Yii Mutex исправлены описания опциональных зависимостей в
В пакете Yii Mutex исправлены описания опциональных зависимостей в
composer.json
(PR).⚡️ Практически во всех пакетах добавлен ежедневный запуск тестов через 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)
#yiisoftMutex #ПатчРелиз #Релиз
🎁 Yii Mutex 1.1.1
Добавлена проверка на корректность значения, передаваемого в метод
🎁 Yii Mutex 1.1.1
Добавлена проверка на корректность значения, передаваемого в метод
RetryAcquireTrait::withRetryDelay()
. Если задержка менее 1 миллисекунды, то будет выброшено исключение InvalidArgumentException
(PR).👍1
⚡️ #yiisoftAccess #yiisoftErrorHandler #yiisoftEventDispatcher #yiisoftFactory #yiisoftHttp #yiisoftI18n #yiisoftAliases #yiisoftJson #yiisoftProfiler #yiisoftInjector #yiisoftMailerSymfony #yiisoftMutex #yiisoftRateLimiter #yiisoftNetworkUtilities #yiisoftSession #yiisoftRouter #yiisoftStrings #yiisoftRouterFastroute #yiisoftRequestBodyParser #yiisoftTranslatorMessageGettext #yiisoftTranslatorExtractor #yiisoftTranslatorFormatterSimple #yiisoftTranslator #yiisoftTranslatorFormatterIntl #yiisoftTranslatorMessageDb #yiisoftUser #yiisoftVarDumper #yiisoftViewTwig #yiisoftYiiEvent #yiisoftTranslatorMessagePhp #yiisoftDataResponse #yiisoftCacheFile #yiisoftCookies #yiisoftCsrf #yiisoftAssets #yiisoftAuthJwt #yiisoftLog #yiisoftArrays #yiisoftYiiFilesystem #yiisoftYiiHttp #yiisoftYiiRunnerHttp #yiisoftLogTargetFile #yiisoftLogTargetEmail #yiisoftYiiRunnerRoadrunner #yiisoftSecurity #yiisoftYiiSwagger #yiisoftYiiSentry #yiisoftMutexFile #yiisoftMiddlewareDispatcher #yiisoftTestSupport #yiisoftYiiDebug #yiisoftYiiDebugViewer #yiisoftCacheApcu #yiisoftYiiDataview #yiisoftLogTargetSyslog #yiisoftAuth #yiisoftDefinitions #yiisoftRbacPhp #yiisoftDataDb #yiisoftData #yiisoftRequestModel #yiisoftDi #yiisoftConfig #yiisoftRbacRulesContainer
Продолжаем заменять рабочие процессы на переиспользуемые из Yii GitHub Actions:
- Yii Access (PR)
- Yii Error Handler (PR)
- Yii Event Dispatcher (PR)
- Yii Factory (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Aliases (PR)
- Yii JSON (PR)
- Yii Profiler (PR)
- Yii Injector (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Mutex (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Network Utilities (PR)
- Yii Session (PR)
- Yii Router (PR)
- Yii Strings (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Request Body Parser (PR)
- Yii Translator gettext Message Storage (PR)
- Yii Message Extractor (PR)
- Yii Translator Simple Message Formatter (PR)
- Yii Message Translator (PR)
- Yii Translator intl Message Formatter (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii VarDumper (PR)
- Yii View Twig Renderer (PR)
- Yii Event (PR)
- Yii Translator PHP Message Storage (PR)
- Yii Data Response (PR)
- Yii Cache File Handler (PR)
- Yii Cookies (PR)
- Yii CSRF Protection Library (PR)
- Yii Assets (PR)
- Yii Auth JWT (PR)
- Yii Logging Library (PR)
- Yii Arrays (PR)
- Yii Filesystem (PR)
- Yii HTTP Application (PR)
- Yii HTTP Runner (PR)
- Yii Logging File Target (PR)
- Yii Logging Email Target (PR)
- Yii RoadRunner Runner (PR)
- Yii Security (PR)
- Yii Swagger (PR)
- Yii Sentry (PR)
- Yii Mutex File Driver (PR)
- Yii Middleware Dispatcher (PR)
Продолжаем заменять рабочие процессы на переиспользуемые из Yii GitHub Actions:
- Yii Access (PR)
- Yii Error Handler (PR)
- Yii Event Dispatcher (PR)
- Yii Factory (PR)
- Yii HTTP (PR)
- Yii Internationalization Library (PR)
- Yii Aliases (PR)
- Yii JSON (PR)
- Yii Profiler (PR)
- Yii Injector (PR)
- Yii Mailer Symfony Mailer Extension (PR)
- Yii Mutex (PR)
- Yii Rate Limiter Middleware (PR)
- Yii Network Utilities (PR)
- Yii Session (PR)
- Yii Router (PR)
- Yii Strings (PR)
- Yii Router FastRoute Adapter (PR)
- Yii Request Body Parser (PR)
- Yii Translator gettext Message Storage (PR)
- Yii Message Extractor (PR)
- Yii Translator Simple Message Formatter (PR)
- Yii Message Translator (PR)
- Yii Translator intl Message Formatter (PR)
- Yii Translator DB Message Storage (PR)
- Yii User (PR)
- Yii VarDumper (PR)
- Yii View Twig Renderer (PR)
- Yii Event (PR)
- Yii Translator PHP Message Storage (PR)
- Yii Data Response (PR)
- Yii Cache File Handler (PR)
- Yii Cookies (PR)
- Yii CSRF Protection Library (PR)
- Yii Assets (PR)
- Yii Auth JWT (PR)
- Yii Logging Library (PR)
- Yii Arrays (PR)
- Yii Filesystem (PR)
- Yii HTTP Application (PR)
- Yii HTTP Runner (PR)
- Yii Logging File Target (PR)
- Yii Logging Email Target (PR)
- Yii RoadRunner Runner (PR)
- Yii Security (PR)
- Yii Swagger (PR)
- Yii Sentry (PR)
- Yii Mutex File Driver (PR)
- Yii Middleware Dispatcher (PR)
🤯6👍5
⚡️ #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