关于 TiKV 4.0 悲观事务的疑问

TiKV 版本: 4.0.6
场景如下:
我们的系统底层使用TiKV作为存储引擎,我们希望在计算层实现一个原子自增接口。在使用悲观锁实现过程中发现如下现相:

LockCtx 对象的设置如下:

&kv.LockCtx{ForUpdateTS: txn.startTS, WaitStartTime: time.Now(), LockWaitTime: kv.LockAlwaysWait}

假设事务T1成功锁定了Key a,事务T2在等待,此时假如T1更新了Key a,那么事务T2的LockKeys接口会返回Write Conflict错误。

请问下这种情况是正常的么?如果是,那么悲观锁是需要客户端重试的?也就是重启事务。TiDB中是如何处理的?能否给个TiDB的代码片段参考一下,谢谢!