@@ -31,10 +31,14 @@ public QueryServiceExecutorExt(YdbContext ctx, int transactionLevel, boolean aut
3131 }
3232
3333 private Status upsertAndCommit (QueryTransaction localTx ) {
34- String sql = "DECLARE $trans_id AS Text; "
34+ String sql = "DECLARE $trans_hash AS Int32; DECLARE $ trans_id AS Text; "
3535 + "UPSERT INTO `" + processUndeterminedTable
36- + "` (trans_id, trans_tv) VALUES ($trans_id, CurrentUtcTimestamp());" ;
37- Params params = Params .of ("$trans_id" , PrimitiveValue .newText (localTx .getId ()));
36+ + "` (trans_hash, trans_id, trans_tv) "
37+ + "VALUES ($trans_hash, $trans_id, CurrentUtcTimestamp());" ;
38+ Params params = Params .of (
39+ "$trans_id" , PrimitiveValue .newText (localTx .getId ()),
40+ "$trans_hash" , PrimitiveValue .newInt32 (localTx .getId ().hashCode ())
41+ );
3842 return localTx .createQueryWithCommit (sql , params )
3943 .execute ()
4044 .join ()
@@ -43,10 +47,13 @@ private Status upsertAndCommit(QueryTransaction localTx) {
4347
4448 private boolean checkTransaction (YdbContext ctx , String transId ,
4549 YdbValidator validator , YdbTracer tracer ) throws SQLException {
46- String sql = "DECLARE $trans_id AS Text; "
50+ String sql = "DECLARE $trans_hash AS Int32; DECLARE $ trans_id AS Text; "
4751 + "SELECT trans_id, trans_tv FROM `" + processUndeterminedTable
48- + "` WHERE trans_id=$trans_id;" ;
49- Params params = Params .of ("$trans_id" , PrimitiveValue .newText (transId ));
52+ + "` WHERE trans_hash=$trans_hash AND trans_id=$trans_id;" ;
53+ Params params = Params .of (
54+ "$trans_id" , PrimitiveValue .newText (transId ),
55+ "$trans_hash" , PrimitiveValue .newInt32 (transId .hashCode ())
56+ );
5057 Result <DataQueryResult > result = ctx .getRetryCtx ().supplyResult (
5158 session -> session .executeDataQuery (sql , TxControl .onlineRo (), params ))
5259 .join ();
0 commit comments