pub(crate) async fn lock_assets_by_path(
tx: &Transaction<'_>,
paths: &[String],
) -> Result<LockedAssets, AppError>Expand description
按相对路径锁定素材行,供随后在同一事务内写入引用。
paths 须已去重。FOR KEY SHARE 与素材删除/清理的 FOR UPDATE 互斥:
READ COMMITTED 下若等锁期间删除已提交,本语句重读后跳过该行,计入 missing;
反之拿到锁后,删除方须等本事务提交,其引用复核是加锁之后的另一条语句、
取新快照,能看到本事务刚提交的引用行。按 id 升序加锁,与删除方加锁顺序一致,
避免多图评论与批量删除互相死锁。