diff options
| author | mdartemenko <[email protected]> | 2022-09-12 15:11:27 +0300 | 
|---|---|---|
| committer | mdartemenko <[email protected]> | 2022-09-12 15:11:27 +0300 | 
| commit | 71cbed4fa838d7e7a4bebf535d71d382af05113c (patch) | |
| tree | 9f7f321b06004af7ab884604c701ebf98ff55ff1 | |
| parent | d03166a35c18b8c63294a8c8f4b124553b24c755 (diff) | |
replace guid with ulid
| -rw-r--r-- | ydb/core/kqp/kqp_session_actor.cpp | 57 | 
1 files changed, 40 insertions, 17 deletions
diff --git a/ydb/core/kqp/kqp_session_actor.cpp b/ydb/core/kqp/kqp_session_actor.cpp index afb8c28f328..ae5e3cdabf8 100644 --- a/ydb/core/kqp/kqp_session_actor.cpp +++ b/ydb/core/kqp/kqp_session_actor.cpp @@ -13,6 +13,8 @@  #include <ydb/core/kqp/provider/yql_kikimr_results.h>  #include <ydb/core/kqp/rm/kqp_snapshot_manager.h> +#include <ydb/core/util/ulid.h> +  #include <ydb/core/actorlib_impl/long_timer.h>  #include <ydb/core/base/appdata.h>  #include <ydb/core/base/cputime.h> @@ -91,7 +93,8 @@ struct TKqpQueryState {      NLWTrace::TOrbit Orbit;      NWilson::TSpan KqpSessionSpan; -    TString TxId; // User tx +    TULID TxId; // User tx +    TString TxId_Human = "";      bool Commit = false;      NTopic::TOffsetsInfo Offsets; @@ -206,7 +209,7 @@ public:          Cleanup();      } -    TIntrusivePtr<TKqpTransactionContext> FindTransaction(const TString& id) { +    TIntrusivePtr<TKqpTransactionContext> FindTransaction(const TULID& id) {          auto it = ExplicitTransactions.Find(id);          if (it != ExplicitTransactions.End()) {              auto& value = it.Value(); @@ -217,7 +220,7 @@ public:          return {};      } -    void RemoveTransaction(const TString& txId) { +    void RemoveTransaction(const TULID& txId) {          auto it = ExplicitTransactions.FindWithoutPromote(txId);          if (it != ExplicitTransactions.End()) {              ExplicitTransactions.Erase(it); @@ -230,11 +233,12 @@ public:                  "Can't perform ROLLBACK_TX: TxControl isn't set in TQueryRequest");          const auto& txControl = queryRequest.GetTxControl();          QueryState->Commit = txControl.commit_tx(); -        const auto& txId = txControl.tx_id(); +        TULID txId; +        txId.ParseString(txControl.tx_id());          auto txCtx = FindTransaction(txId);          if (!txCtx) {              std::vector<TIssue> issues{YqlIssue(TPosition(), TIssuesIds::KIKIMR_TRANSACTION_NOT_FOUND, -                TStringBuilder() << "Transaction not found: " << QueryState->TxId)}; +                TStringBuilder() << "Transaction not found: " << txControl.tx_id())};              ReplyQueryError(requestInfo, Ydb::StatusIds::NOT_FOUND, "", MessageFromIssues(issues));          } else {              QueryState->TxCtx = txCtx; @@ -257,18 +261,20 @@ public:          QueryState->Commit = txControl.commit_tx(); -        const auto& txId = txControl.tx_id(); +        TULID txId; +        txId.ParseString(txControl.tx_id());          auto txCtx = FindTransaction(txId);          LOG_D("queryRequest TxControl: " << txControl.DebugString() << " txCtx: " << (void*)txCtx.Get());          if (!txCtx) {              std::vector<TIssue> issues{YqlIssue(TPosition(), TIssuesIds::KIKIMR_TRANSACTION_NOT_FOUND, -                TStringBuilder() << "Transaction not found: " << QueryState->TxId)}; +                TStringBuilder() << "Transaction not found: " << txControl.tx_id())};              auto requestInfo = TKqpRequestInfo(QueryState->TraceId, SessionId);              ReplyQueryError(requestInfo, Ydb::StatusIds::NOT_FOUND, "", MessageFromIssues(issues));              return;          }          QueryState->TxCtx = std::move(txCtx);          QueryState->TxId = txId; +        QueryState->TxId_Human = txControl.tx_id();          bool replied = ExecutePhyTx(/*query*/ nullptr, /*tx*/ nullptr, /*commit*/ true);          if (!replied) { @@ -656,7 +662,8 @@ public:      }      void BeginTx(const Ydb::Table::TransactionSettings& settings) { -        QueryState->TxId = CreateGuidAsString(); +        QueryState->TxId = UlidGen.Next(); +        QueryState->TxId_Human = QueryState->TxId.ToString();          QueryState->TxCtx = MakeIntrusive<TKqpTransactionContext>(false);          SetIsolationLevel(settings);          CreateNewTx(); @@ -687,16 +694,18 @@ public:              QueryState->Commit = txControl.commit_tx();              switch (txControl.tx_selector_case()) {                  case Ydb::Table::TransactionControl::kTxId: { -                    TString txId = txControl.tx_id(); +                    TULID txId; +                    txId.ParseString(txControl.tx_id());                      auto it = ExplicitTransactions.Find(txId);                      if (it == ExplicitTransactions.End()) {                          std::vector<TIssue> issues{YqlIssue(TPosition(), TIssuesIds::KIKIMR_TRANSACTION_NOT_FOUND, -                            TStringBuilder() << "Transaction not found: " << QueryState->TxId)}; +                            TStringBuilder() << "Transaction not found: " << txControl.tx_id())};                          ReplyQueryError(requestInfo, Ydb::StatusIds::NOT_FOUND, "", MessageFromIssues(issues));                          return false;                      }                      QueryState->TxCtx = *it;                      QueryState->TxId = txId; +                    QueryState->TxId_Human = txControl.tx_id();                      break;                  }                  case Ydb::Table::TransactionControl::kBeginTx: { @@ -1364,9 +1373,10 @@ public:          YQL_ENSURE(QueryState);          if (QueryState->Commit) {              RemoveTransaction(QueryState->TxId); -            QueryState->TxId = ""; +            QueryState->TxId = CreateEmptyULID(); +            QueryState->TxId_Human = "";          } -        response->MutableTxMeta()->set_id(QueryState->TxId); +        response->MutableTxMeta()->set_id(QueryState->TxId_Human);          if (QueryState->TxCtx) {              auto txInfo = QueryState->TxCtx->GetInfo(); @@ -1513,23 +1523,26 @@ public:          FillCompileStatus(compileResult, QueryResponse->Record);          auto& queryRequest = QueryState->Request; -        TString txId = ""; +        TULID txId = CreateEmptyULID(); +        TString txId_Human = "";          if (queryRequest.HasTxControl()) {              auto& txControl = queryRequest.GetTxControl();              if (txControl.tx_selector_case() == Ydb::Table::TransactionControl::kTxId) { -                txId = txControl.tx_id(); +                txId.ParseString(txControl.tx_id()); +                txId_Human = txControl.tx_id();              }          } -        LOG_W("ReplyQueryCompileError, status" << compileResult->Status << " remove tx with tx_id: " << txId); +        LOG_W("ReplyQueryCompileError, status" << compileResult->Status << " remove tx with tx_id: " << txId_Human);          auto txCtx = FindTransaction(txId);          if (txCtx) {              txCtx->Invalidate();              TransactionsToBeAborted.emplace_back(txCtx);              RemoveTransaction(txId);          } -        txId = ""; +        txId = CreateEmptyULID(); +        txId_Human = "";          auto* record = &QueryResponse->Record.GetRef();          FillTxInfo(record->MutableResponse()); @@ -2153,6 +2166,14 @@ private:      }  private: + +    TULID CreateEmptyULID() { +        TULID next; +        memset(next.Data, 0, sizeof(next.Data)); +        return next; +    } + +private:      TActorId Owner;      TString SessionId; @@ -2169,7 +2190,7 @@ private:      std::unique_ptr<TKqpCleanupCtx> CleanupCtx;      ui32 QueryId = 0;      TKikimrConfiguration::TPtr Config; -    TLRUCache<TString, TIntrusivePtr<TKqpTransactionContext>> ExplicitTransactions; +    TLRUCache<TULID, TIntrusivePtr<TKqpTransactionContext>> ExplicitTransactions;      std::vector<TIntrusivePtr<TKqpTransactionContext>> TransactionsToBeAborted;      ui64 EvictedTx = 0;      std::unique_ptr<TEvKqp::TEvQueryResponse> QueryResponse; @@ -2177,6 +2198,8 @@ private:      TActorId IdleTimerActorId;      ui32 IdleTimerId = 0;      std::optional<TSessionShutdownState> ShutdownState; + +    TULIDGenerator UlidGen;  };  } // namespace  | 
