@ astram/ 引擎
Astram铺面道路:一个固定的、交易式的写字管(型号为前门-取回-记录-)
校正 校正 校正 校正 校正 校正 校正 校正 特性
代码只接收 RecordEngine 外观( e)RECORD_ENGINE 编号 : RecordsService从不游泳池.
许可门和审计阶段是强制性的。 消费者指南是:
@astram/guide (单位:千美元)CAPABILITIES.md) (中文(简体) ).
复制密钥 : UniqueConflictError
记录 create, (中文(简体) ), update, (中文(简体) ), createMany 点击 UNIQUE 索引的行或操作写入创建
(司机错误1062) UniqueConflictError (GAPS#58,
docs/features/unique-conflict-error/SPEC.md) (中文(简体) ). Guard 的全局过滤器以
409 { statusCode: 409, code: 'unique_conflict', message: 'This record conflicts with an existing one.' }。 。 。 .
- 字段 :
typeKey, (中文(简体) ),constraint(索引名称,例如:.uq_site_code,或null当驾驶员 信件无法安全读取 ,rowIndex(创建 Many: 以 0 为主的行; 整个批次滚动) )和只读errno: 1062编号 :code: 'ER_DUP_ENTRY'旧的捕捉码. - 和它比对
isUniqueConflict(err, '<constraint>')驱动程序sqlMessage信息为 未曝光: 它们命名值并携带 SQL 参数 。 错误从不包含值 没有cause。 。 。 . - 内部
transaction(fn)失败的写入使交易只回滚: 抓取 错误和再次写入EngineUnavailableError(503),而且没有任何承诺。 给 偶能接答,接取后再以一新交易再读. - 被围住的类型. 非根创建于类型
readScope(无)create: 'unscoped'谁 输入位于角色的写范围解答之外create_outside_write_scope(403) 即使当 值是重复的,与新值完全一样(没有关于行为者无法触及的值的预告). 对复制件的瞄准镜检查精确地比较了输入字节,所以一个案例或后继的空间变体 在对大小写不敏感字符串列上显示范围值,也可回答403(未关闭); uuid 范围 柱子总是有条理的 提供的主要密钥与一行相撞 演员不能 到达时还回答403,从未有确认身份的409。 如果范围检查无法运行,则 创建失败EngineUnavailableError(503) (英语). - 租户类型:与租户列一起领导每个UNIQUE指数 (例如:.
UNIQUE (s_tenant, s_code)) (中文(简体) ). 一个指数没有它横跨租户,所以一个409告诉打电话者,另一个租户持有这个价值.
lockForUpdate 并锁定取自: 被墙锁
lockForUpdate(typeKey, id) (内部) transaction(fn)页:1
tx.authorize(typeKey, id, action) 只有在角色可以时, 交易会锁定一行
写它: 与一个 update (单位:千美元)whereById:主键+演员的房客+
readScope 写入壁; root: 仅主键). 在此之前 FOR UPDATE引擎检查
中,该行存在于该演员的正键读取并仅指壁柱
交易和必要时的专用 锁定探测池 (每个工人2个连接,相同)
作为引擎池的账户和设置,每个探测器的READ COMMITED,获得超时2000毫秒)。 A 类
缺少,外国租户 或范围外的id 不取行锁.
行为变化(0.19)
在这个版本之前, lockForUpdate 失踪的、外国的或超出范围的身份 却无声无息
锁上(一个外国身份证被它的主键锁上)。 从这个版本,它发出同样的否认
a 一个 update 其中的id获得: AuthorizationDeniedError 有理无据 no_record_permit (一个答复)
三者,无存在信号. 代码,首先锁定,然后检查丢失的一行
或先检查存在( n)get 那么在交易中 lockForUpdate)或抓住那个
否认。 拒绝在任何锁定声明之前, 所以一个呼叫者抓住它可能会继续下去
进行交易.
EngineUnavailableError从lockForUpdate或者锁定的接取意味着锁定的检测池没有 回答(需要超时、连接或查询出错)。 没有取出锁;让它传播(503). 失败被计算在内(MariaDbUnitOfWork.lockProbeStats(), (中文(简体) ),@astram/engine/internal)和登录 作为每分钟一个警告 与计数,从来没有id.- 找不到其他交易插入但尚未执行的行( 旧的主键) 锁等.
- 如果在存在检查和锁之间删除一行,则
FOR UPDATE打开一个缺口锁 在主键范围 周围的ID,直到交易结束。 它锁住没有现有的行 什么都没有. - 应用程序的ADR -0018 连接预算 计算每个工人增加2个连接
(单位:千美元)
@astram/guardENGINE_LOCK_PROBE_POOL_CONNECTIONS),在两个数据库布局中.
谱: docs/features/agent-proposals/SPEC.md 第5 J条(GAPS #51).