diff options
author | hor911 <hor911@ydb.tech> | 2022-09-01 15:48:26 +0300 |
---|---|---|
committer | hor911 <hor911@ydb.tech> | 2022-09-01 15:48:26 +0300 |
commit | 0a30ba9900ac6179d77eba071c45ccbb84f552ea (patch) | |
tree | 069c1a430d43856973137152438783c2203d8923 | |
parent | 1624cd16d8954612bd2614106dee31d99da0450d (diff) | |
download | ydb-0a30ba9900ac6179d77eba071c45ccbb84f552ea.tar.gz |
Log DB errors
7 files changed, 41 insertions, 21 deletions
diff --git a/ydb/core/yq/libs/control_plane_storage/internal/rate_limiter_resources.cpp b/ydb/core/yq/libs/control_plane_storage/internal/rate_limiter_resources.cpp index 0a44c1a1f39..128bc20f96b 100644 --- a/ydb/core/yq/libs/control_plane_storage/internal/rate_limiter_resources.cpp +++ b/ydb/core/yq/libs/control_plane_storage/internal/rate_limiter_resources.cpp @@ -318,7 +318,7 @@ void TYdbControlPlaneStorageActor::HandleRateLimiterImpl(TEventPtr& ev) { readQueryBuilder.AddText(text); const auto query = readQueryBuilder.Build(); - auto [readStatus, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [readStatus, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); readStatus.Subscribe( [resultSets = resultSets, actorSystem = NActors::TActivationContext::ActorSystem(), requestActor] (const TAsyncStatus& status) { actorSystem->Send(new IEventHandle(requestActor, requestActor, new TEvPrivate::TEvDbRequestResult(status, std::move(resultSets)))); diff --git a/ydb/core/yq/libs/control_plane_storage/internal/task_get.cpp b/ydb/core/yq/libs/control_plane_storage/internal/task_get.cpp index f91e89755d3..208a2646480 100644 --- a/ydb/core/yq/libs/control_plane_storage/internal/task_get.cpp +++ b/ydb/core/yq/libs/control_plane_storage/internal/task_get.cpp @@ -301,7 +301,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvGetTaskRequ }; const auto query = queryBuilder.Build(); - auto [readStatus, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo, TTxSettings::StaleRO()); + auto [readStatus, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo, TTxSettings::StaleRO()); auto result = readStatus.Apply( [=, resultSets=resultSets, diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp index 935f939ae45..e26f3c44577 100644 --- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp +++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage.cpp @@ -326,6 +326,7 @@ TAsyncStatus ExecDbRequest(TDbPool::TPtr dbPool, std::function<NYdb::TAsyncStatu } std::pair<TAsyncStatus, std::shared_ptr<TVector<NYdb::TResultSet>>> TYdbControlPlaneStorageActor::Read( + NActors::TActorSystem* actorSystem, const TString& query, const NYdb::TParams& params, const TRequestCountersPtr& requestCounters, @@ -343,13 +344,16 @@ std::pair<TAsyncStatus, std::shared_ptr<TVector<NYdb::TResultSet>>> TYdbControlP ++(*retryCount); CollectDebugInfo(query, params, session, debugInfo); auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx(transactionMode).CommitTx(), params, NYdb::NTable::TExecDataQuerySettings().KeepInQueryCache(true)); - return result.Apply([retryOnTli, resultSet] (const TFuture<TDataQueryResult>& future) { + return result.Apply([retryOnTli, resultSet, actorSystem, query] (const TFuture<TDataQueryResult>& future) { NYdb::NTable::TDataQueryResult result = future.GetValue(); *resultSet = result.GetResultSets(); auto status = static_cast<TStatus>(result); if (status.GetStatus() == EStatus::SCHEME_ERROR) { // retry if table does not exist return TStatus{EStatus::UNAVAILABLE, NYql::TIssues{status.GetIssues()}}; } + if (!status.IsSuccess()) { + CPS_LOG_AS_W(*actorSystem, "DB Error, Status: " << status.GetStatus() << ", Issues: " << status.GetIssues().ToOneLineString() << ", Query: " << query); + } if (!retryOnTli && status.GetStatus() == EStatus::ABORTED) { return TStatus{EStatus::GENERIC_ERROR, NYql::TIssues{status.GetIssues()}}; } @@ -363,6 +367,7 @@ std::pair<TAsyncStatus, std::shared_ptr<TVector<NYdb::TResultSet>>> TYdbControlP } TAsyncStatus TYdbControlPlaneStorageActor::Validate( + NActors::TActorSystem* actorSystem, std::shared_ptr<TMaybe<TTransaction>> transaction, size_t item, const TVector<TValidationQuery>& validators, @@ -378,7 +383,7 @@ TAsyncStatus TYdbControlPlaneStorageActor::Validate( const TValidationQuery& validatonItem = validators[item]; CollectDebugInfo(validatonItem.Query, validatonItem.Params, session, debugInfo); auto result = session.ExecuteDataQuery(validatonItem.Query, item == 0 ? TTxControl::BeginTx(transactionMode) : TTxControl::Tx(**transaction), validatonItem.Params, NYdb::NTable::TExecDataQuerySettings().KeepInQueryCache(true)); - return result.Apply([=, validator=validatonItem.Validator] (const TFuture<TDataQueryResult>& future) { + return result.Apply([=, validator=validatonItem.Validator, query=validatonItem.Query] (const TFuture<TDataQueryResult>& future) { NYdb::NTable::TDataQueryResult result = future.GetValue(); *transaction = result.GetTransaction(); auto status = static_cast<TStatus>(result); @@ -386,13 +391,14 @@ TAsyncStatus TYdbControlPlaneStorageActor::Validate( return MakeFuture(TStatus{EStatus::UNAVAILABLE, NYql::TIssues{status.GetIssues()}}); } if (!status.IsSuccess()) { + CPS_LOG_AS_W(*actorSystem, "DB Error, Status: " << status.GetStatus() << ", Issues: " << status.GetIssues().ToOneLineString() << ", Query: " << query); return MakeFuture(status); } *successFinish = validator(result); if (*successFinish) { return MakeFuture(TStatus{EStatus::SUCCESS, NYql::TIssues{}}); } - return Validate(transaction, item + 1, validators, session, successFinish, debugInfo); + return Validate(actorSystem, transaction, item + 1, validators, session, successFinish, debugInfo); }); } @@ -417,6 +423,9 @@ TAsyncStatus TYdbControlPlaneStorageActor::Write( if (status.GetStatus() == EStatus::SCHEME_ERROR) { // retry if table does not exist return TStatus{EStatus::UNAVAILABLE, NYql::TIssues{status.GetIssues()}}; } + if (!status.IsSuccess()) { + CPS_LOG_AS_W(*actorSystem, "DB Error, Status: " << status.GetStatus() << ", Issues: " << status.GetIssues().ToOneLineString() << ", Query: " << query); + } if (!retryOnTli && status.GetStatus() == EStatus::ABORTED) { return TStatus{EStatus::GENERIC_ERROR, NYql::TIssues{status.GetIssues()}}; } @@ -430,7 +439,7 @@ TAsyncStatus TYdbControlPlaneStorageActor::Write( } ++(*retryCount); std::shared_ptr<bool> successFinish = std::make_shared<bool>(); - return Validate(transaction, 0, validators, session, successFinish, debugInfo).Apply([=](const auto& future) { + return Validate(actorSystem, transaction, 0, validators, session, successFinish, debugInfo).Apply([=](const auto& future) { try { auto status = future.GetValue(); if (!status.IsSuccess()) { @@ -493,7 +502,7 @@ TAsyncStatus TYdbControlPlaneStorageActor::ReadModifyWrite( auto readModifyWriteHandler = [=](TSession session) { CollectDebugInfo(readQuery, readParams, session, debugInfo); auto readResult = session.ExecuteDataQuery(readQuery, validators ? TTxControl::Tx(**transaction) : TTxControl::BeginTx(transactionMode), readParams, NYdb::NTable::TExecDataQuerySettings().KeepInQueryCache(true)); - auto readResultStatus = readResult.Apply([resultSets, transaction] (const TFuture<TDataQueryResult>& future) { + auto readResultStatus = readResult.Apply([resultSets, transaction, actorSystem, readQuery] (const TFuture<TDataQueryResult>& future) { NYdb::NTable::TDataQueryResult result = future.GetValue(); *resultSets = result.GetResultSets(); *transaction = result.GetTransaction(); @@ -501,6 +510,9 @@ TAsyncStatus TYdbControlPlaneStorageActor::ReadModifyWrite( if (status.GetStatus() == EStatus::SCHEME_ERROR) { // retry if table does not exist return TStatus{EStatus::UNAVAILABLE, NYql::TIssues{status.GetIssues()}}; } + if (!status.IsSuccess()) { + CPS_LOG_AS_W(*actorSystem, "DB Error, Status: " << status.GetStatus() << ", Issues: " << status.GetIssues().ToOneLineString() << ", Query: " << readQuery); + } return status; }); @@ -508,7 +520,7 @@ TAsyncStatus TYdbControlPlaneStorageActor::ReadModifyWrite( return future.GetValue().IsSuccess() ? prepare(*resultSets) : make_pair(TString(""), NYdb::TParamsBuilder{}.Build()); }); - return resultPrepare.Apply([=](const auto& future) mutable { + return resultPrepare.Apply([=, actorSystem=actorSystem](const auto& future) mutable { if (!readResultStatus.GetValue().IsSuccess()) { return readResultStatus; } @@ -516,23 +528,29 @@ TAsyncStatus TYdbControlPlaneStorageActor::ReadModifyWrite( try { auto [writeQuery, params] = future.GetValue(); if (!writeQuery) { - return transaction->Get()->Commit().Apply([] (const auto& future) { + return transaction->Get()->Commit().Apply([actorSystem=actorSystem] (const auto& future) { auto result = future.GetValue(); auto status = static_cast<TStatus>(result); if (status.GetStatus() == EStatus::SCHEME_ERROR) { // retry if table does not exist return TStatus{EStatus::UNAVAILABLE, NYql::TIssues{status.GetIssues()}}; } + if (!status.IsSuccess()) { + CPS_LOG_AS_W(*actorSystem, "DB Error, Status: " << status.GetStatus() << ", Issues: " << status.GetIssues().ToOneLineString() << ", COMMIT"); + } return status; }); } CollectDebugInfo(writeQuery, params, session, debugInfo); auto writeResult = session.ExecuteDataQuery(writeQuery, TTxControl::Tx(**transaction).CommitTx(), params, NYdb::NTable::TExecDataQuerySettings().KeepInQueryCache(true)); - return writeResult.Apply([retryOnTli] (const TFuture<TDataQueryResult>& future) { + return writeResult.Apply([retryOnTli, actorSystem, writeQuery=writeQuery] (const TFuture<TDataQueryResult>& future) { NYdb::NTable::TDataQueryResult result = future.GetValue(); auto status = static_cast<TStatus>(result); if (status.GetStatus() == EStatus::SCHEME_ERROR) { // retry if table does not exist return TStatus{EStatus::UNAVAILABLE, NYql::TIssues{status.GetIssues()}}; } + if (!status.IsSuccess()) { + CPS_LOG_AS_W(*actorSystem, "DB Error, Status: " << status.GetStatus() << ", Issues: " << status.GetIssues().ToOneLineString() << ", Query: " << writeQuery); + } if (!retryOnTli && status.GetStatus() == EStatus::ABORTED) { return TStatus{EStatus::GENERIC_ERROR, NYql::TIssues{status.GetIssues()}}; } @@ -558,7 +576,7 @@ TAsyncStatus TYdbControlPlaneStorageActor::ReadModifyWrite( ++(*retryCount); std::shared_ptr<bool> successFinish = std::make_shared<bool>(); - return Validate(transaction, 0, validators, session, successFinish, debugInfo).Apply([=](const auto& future) { + return Validate(actorSystem, transaction, 0, validators, session, successFinish, debugInfo).Apply([=](const auto& future) { try { auto status = future.GetValue(); if (!status.IsSuccess()) { diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_bindings.cpp b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_bindings.cpp index d277f5b0708..7a290450a59 100644 --- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_bindings.cpp +++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_bindings.cpp @@ -225,7 +225,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvListBinding const auto query = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); auto prepare = [resultSets=resultSets, limit] { if (resultSets->size() != 1) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 1 but equal " << resultSets->size() << ". Please contact internal support"; @@ -329,7 +329,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvDescribeBin const auto query = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); auto prepare = [=, resultSets=resultSets] { if (resultSets->size() != 1) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 1 but equal " << resultSets->size() << ". Please contact internal support"; diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_connections.cpp b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_connections.cpp index 40a0aaa38d6..137d9c55d2a 100644 --- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_connections.cpp +++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_connections.cpp @@ -218,7 +218,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvListConnect const auto query = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); auto prepare = [resultSets=resultSets, limit] { if (resultSets->size() != 1) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 1 but equal " << resultSets->size() << ". Please contact internal support"; @@ -312,7 +312,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvDescribeCon const auto query = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); auto prepare = [=, resultSets=resultSets] { if (resultSets->size() != 1) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 1 but equal " << resultSets->size() << ". Please contact internal support"; diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h index 4b916803853..0c08f7235fb 100644 --- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h +++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_impl.h @@ -469,6 +469,7 @@ private: bool IsSuperUser(const TString& user); std::pair<TAsyncStatus, std::shared_ptr<TVector<NYdb::TResultSet>>> Read( + NActors::TActorSystem* actorSystem, const TString& query, const NYdb::TParams& params, const TRequestCountersPtr& requestCounters, @@ -477,6 +478,7 @@ private: bool retryOnTli = true); TAsyncStatus Validate( + NActors::TActorSystem* actorSystem, std::shared_ptr<TMaybe<TTransaction>> transaction, size_t item, const TVector<TValidationQuery>& validators, TSession session, diff --git a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp index a8be5b0cb4a..a431b8945f0 100644 --- a/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp +++ b/ydb/core/yq/libs/control_plane_storage/ydb_control_plane_storage_queries.cpp @@ -479,7 +479,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvListQueries const auto read = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(read.Sql, read.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), read.Sql, read.Params, requestCounters, debugInfo); auto prepare = [resultSets=resultSets, limit] { if (resultSets->size() != 1) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 1 but equal " << resultSets->size() << ". Please contact internal support"; @@ -569,7 +569,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvDescribeQue ); const auto query = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); auto prepare = [resultSets=resultSets, user,permissions] { if (resultSets->size() != 1) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 1 but equal " << resultSets->size() << ". Please contact internal support"; @@ -693,7 +693,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvGetQuerySta const auto read = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(read.Sql, read.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), read.Sql, read.Params, requestCounters, debugInfo); auto prepare = [resultSets=resultSets, user,permissions] { if (resultSets->size() != 1) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 1 but equal " << resultSets->size() << ". Please contact internal support"; @@ -1512,7 +1512,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvGetResultDa const auto query = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); auto prepare = [resultSets=resultSets, resultSetIndex, user, permissions] { if (resultSets->size() != 2) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 2 but equal " << resultSets->size() << ". Please contact internal support"; @@ -1670,7 +1670,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvListJobsReq const auto query = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); auto prepare = [resultSets=resultSets, limit] { if (resultSets->size() != 1) { ythrow TControlPlaneStorageException(TIssuesIds::INTERNAL_ERROR) << "Result set size is not equal to 1 but equal " << resultSets->size() << ". Please contact internal support"; @@ -1770,7 +1770,7 @@ void TYdbControlPlaneStorageActor::Handle(TEvControlPlaneStorage::TEvDescribeJob const auto query = queryBuilder.Build(); auto debugInfo = Config.Proto.GetEnableDebugMode() ? std::make_shared<TDebugInfo>() : TDebugInfoPtr{}; - auto [result, resultSets] = Read(query.Sql, query.Params, requestCounters, debugInfo); + auto [result, resultSets] = Read(NActors::TActivationContext::ActorSystem(), query.Sql, query.Params, requestCounters, debugInfo); auto prepare = [=, id=request.job_id(), resultSets=resultSets] { if (resultSets->size() != 1) { |