diff --git a/ydb/core/kqp/common/kqp_tx.cpp b/ydb/core/kqp/common/kqp_tx.cpp index 50ac4a55fcac..730798b321f7 100644 --- a/ydb/core/kqp/common/kqp_tx.cpp +++ b/ydb/core/kqp/common/kqp_tx.cpp @@ -157,7 +157,8 @@ bool NeedSnapshot(const TKqpTransactionContext& txCtx, const NYql::TKikimrConfig { Y_UNUSED(config); - if (*txCtx.EffectiveIsolationLevel != NKikimrKqp::ISOLATION_LEVEL_SERIALIZABLE) + if (*txCtx.EffectiveIsolationLevel != NKikimrKqp::ISOLATION_LEVEL_SERIALIZABLE && + *txCtx.EffectiveIsolationLevel != NKikimrKqp::ISOLATION_LEVEL_SNAPSHOT_RO) return false; if (txCtx.GetSnapshot().IsValid()) diff --git a/ydb/core/kqp/common/kqp_tx.h b/ydb/core/kqp/common/kqp_tx.h index ae355f3dc36d..85458667575f 100644 --- a/ydb/core/kqp/common/kqp_tx.h +++ b/ydb/core/kqp/common/kqp_tx.h @@ -256,8 +256,7 @@ class TKqpTransactionContext : public NYql::TKikimrTransactionContextBase { break; case Ydb::Table::TransactionSettings::kSnapshotReadOnly: - // TODO: (KIKIMR-3374) Use separate isolation mode to avoid optimistic locks. - EffectiveIsolationLevel = NKikimrKqp::ISOLATION_LEVEL_SERIALIZABLE; + EffectiveIsolationLevel = NKikimrKqp::ISOLATION_LEVEL_SNAPSHOT_RO; Readonly = true; break; diff --git a/ydb/core/kqp/executer_actor/kqp_planner.cpp b/ydb/core/kqp/executer_actor/kqp_planner.cpp index 1ec9dc84415f..929a3f01863a 100644 --- a/ydb/core/kqp/executer_actor/kqp_planner.cpp +++ b/ydb/core/kqp/executer_actor/kqp_planner.cpp @@ -187,8 +187,8 @@ std::unique_ptr TKqpPlanner::SerializeReque request.SetTxId(TxId); if (LockTxId) { request.SetLockTxId(*LockTxId); + request.SetLockNodeId(LockNodeId); } - request.SetLockNodeId(LockNodeId); ActorIdToProto(ExecuterId, request.MutableExecuterActorId()); if (Deadline) { diff --git a/ydb/core/protos/kqp.proto b/ydb/core/protos/kqp.proto index 45f35e5404dd..bc1280648e3e 100644 --- a/ydb/core/protos/kqp.proto +++ b/ydb/core/protos/kqp.proto @@ -64,6 +64,7 @@ enum EIsolationLevel { ISOLATION_LEVEL_READ_COMMITTED = 2; ISOLATION_LEVEL_READ_UNCOMMITTED = 3; ISOLATION_LEVEL_READ_STALE = 4; + ISOLATION_LEVEL_SNAPSHOT_RO = 5; }; enum EQueryReplyFlags {