# [Critical bug] 关于PointGet算法的并发安全性的通知

## Issue

最近发现 PointGet 算子在并发情况下会有比较严重的正确性问题

Panic：<https://github.com/pingcap/tidb/issues/16817>

结果不稳定：<https://internal.pingcap.net/jira/browse/ONCALL-1725>

PointGet/Batch PointGet 算子和其他能并发执行的算子组合时，可能出现上述的 panic 或者结果不稳定的行为。

该问题由 <https://github.com/pingcap/tidb/pull/14775> 引入用于优化 TPC-C 性能，受影响的版本仅限 4.0.x，包括：v4.0.0-beta.2 ~ v4.0.1 之间的所有版本

## Root Cause

当上层算子能够并发执行时，可能会并发的修改 PointGet/Batch PointGet 算子使用的事务状态，导致 PointGet/Batch PointGet 执行过程中 panic 或者返回错误结果。详细的根因分析见这个 comment：<https://github.com/pingcap/tidb/issues/16817#issuecomment-620969926>

## Diagnostic Steps

N/A

## Resolution

PointGet/Batch PointGet 作为能够并发执行的算子的孩子节点时，可能触发该问题。这些算子包括：Hash Aggregate、Hash Join、Index Merge Join、Index Hash Join、Index Join、Projection 等

PointGet/Batch PointGet 单独使用时不会触发该问题，即 select * from t where unique_key/primary_key = x 这种类型的查询不会受到影响

该问题修复于：v4.0.2

## Workaround