wazum/transactional-data-handler

将TYPO3 CMS DataHandler处理封装在数据库事务中

安装: 8

依赖: 0

建议者: 0

安全性: 0

星标: 1

关注者: 3

分支: 0

开放问题: 2

类型:typo3-cms-extension

1.0.0 2023-06-07 20:26 UTC

This package is auto-updated.

Last update: 2024-09-09 13:48:21 UTC


README

此扩展将所有DataHandler过程调用(process_datamapprocess_cmdmap)封装在一个数据库事务中,以便在处理过程中发生错误(下面将说明是什么意思)时,所有更改都将回滚。

当然,如果发生超时(例如PHP),这也适用,因为在这种情况下,数据库不会将更改提交到表。

风险自负!

安装

使用已安装的Composer要求该包

composer require "wazum/transactional-data-handler"

如果您在TYPO3 CMS日志文件中收到错误消息,表明无法实例化合适的连接,请将以下设置添加到您的全局设置中(AdditionalConfiguration.php

$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['wrapperClass'] = \Wazum\TransactionalDataHandler\Database\Connection::class;

错误和异常

如果设置了相应的设置(见下文),则处理过程中发生的任何DataHandler错误日志条目都会导致数据库回滚。

否则,只有真正的PHP异常才会导致数据库回滚。

扩展设置

在DataHandler错误日志条目上抛出异常

# cat=basic/enable; type=boolean; label=Throw exception when DataHandler's error log is not empty after processing
throw_exception_on_error_log_entries = 0

如果您想始终在DataHandler的错误日志包含任何内容时回滚事务,请更改此设置。

默认值为0(仅在实际上抛出(而不是先前捕获)的PHP异常的情况下重置事务)。

可能的问题

错误日志

在出现问题时,请查看TYPO3 CMS错误日志。

数据库锁定

如果您遇到任何数据库锁定错误,请查看下文的事务设置部分。同时检查您的表是否有缺失的索引,这会减慢任何数据库事务的速度。

扩展DataHandler

此扩展扩展了核心DataHandler类(XCLASS)。如果您使用任何其他执行相同操作的扩展,您必须自己解决此问题。

$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][DataHandler::class] = [
    'className' => TransactionalDataHandler::class
];

MySQL存储引擎和事务设置

InnoDB支持事务,这意味着您可以提交和回滚。MyISAM不支持(即使您没有收到错误)!

如果您期望在遇到InnoDB锁定等待错误时自动回滚事务,请将以下设置设置为MySQL/MariaDB配置中:

innodb_rollback_on_timeout=1

在服务器重启后验证

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_rollback_on_timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| innodb_rollback_on_timeout | ON    |
+----------------------------+-------+

您还可以降低innodb_lock_wait_timeout的值,您可以在此处了解更多信息:这里

另一个要考虑的配置更改是将事务隔离级别设置为READ COMMITTED,您可以在此处了解更多信息:这里

[mysqld] 
transaction-isolation = READ-COMMITTED

有关InnoDB错误处理的更多信息,请参阅这里

有关InnoDB错误处理的更多信息,请参阅这里

隐式提交

某些SQL语句会导致当前打开的事务隐式提交(例如TRUNCATE)。此扩展已经处理了TRUNCATE情况(语句将在事务成功提交后执行)。

检查您的代码和使用的扩展的代码,确保即使在发生失败异常的情况下,事务也已提交而不是回滚。

不影响数据库的更改

如果任何DataHandler钩子或相关部分在文件系统中更改任何内容(例如移动文件)或通过API,这些更改显然不会被回滚。

说谢谢!并支持我

你喜欢这个扩展吗?从我的愿望清单上为我(惊喜!惊喜!)买点东西吧,愿望清单请访问亚马逊帮助我支付下一顿披萨或越南河粉(mjam)。非常感谢!