aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlnaz Nizametdinov <i.nizametdinov@gmail.com>2022-03-16 13:29:46 +0300
committerIlnaz Nizametdinov <i.nizametdinov@gmail.com>2022-03-16 13:29:46 +0300
commitae686a55ca68128bcd0a99823796b5c8b0bb38c7 (patch)
treee5f80ad5fa8166559a4ed6fdca5a875441d67e77
parent85c7cbf3d4a8929b676f73e7d885400112d245dd (diff)
downloadydb-ae686a55ca68128bcd0a99823796b5c8b0bb38c7.tar.gz
Enrich issues with object's path YDB-1562
ref:c9c5588370b3adcd37ac6ecb2d72a588fedf2922
-rw-r--r--ydb/public/lib/ydb_cli/dump/dump_impl.cpp2
-rw-r--r--ydb/public/lib/ydb_cli/dump/restore_impl.cpp26
-rw-r--r--ydb/public/lib/ydb_cli/dump/util/util.h23
3 files changed, 34 insertions, 17 deletions
diff --git a/ydb/public/lib/ydb_cli/dump/dump_impl.cpp b/ydb/public/lib/ydb_cli/dump/dump_impl.cpp
index a02f7facae5..96a439a6115 100644
--- a/ydb/public/lib/ydb_cli/dump/dump_impl.cpp
+++ b/ydb/public/lib/ydb_cli/dump/dump_impl.cpp
@@ -18,7 +18,7 @@ TDumpResult TDumpClient::Dump(const TString& dbPath, const TString& fsPath, cons
Y_UNUSED(TableClient);
Y_UNUSED(fsPath);
Y_UNUSED(settings);
- return Result<TDumpResult>(EStatus::CLIENT_CALL_UNIMPLEMENTED);
+ return Result<TDumpResult>(EStatus::CLIENT_CALL_UNIMPLEMENTED, "Not implemented");
}
} // NDump
diff --git a/ydb/public/lib/ydb_cli/dump/restore_impl.cpp b/ydb/public/lib/ydb_cli/dump/restore_impl.cpp
index 74f4ffd18c9..39ba3a6c699 100644
--- a/ydb/public/lib/ydb_cli/dump/restore_impl.cpp
+++ b/ydb/public/lib/ydb_cli/dump/restore_impl.cpp
@@ -230,7 +230,7 @@ TRestoreResult TRestoreClient::RestoreFolder(const TFsPath& fsPath, const TStrin
}
if (!result) {
- return Result<TRestoreResult>(EStatus::SUCCESS);
+ return Result<TRestoreResult>();
}
return *result;
@@ -273,7 +273,7 @@ TRestoreResult TRestoreClient::CheckSchema(const TString& dbPath, const TTableDe
TMaybe<TTableDescription> actualDesc;
auto descResult = DescribeTable(TableClient, dbPath, actualDesc);
if (!descResult.IsSuccess()) {
- return Result<TRestoreResult>(std::move(descResult));
+ return Result<TRestoreResult>(dbPath, std::move(descResult));
}
auto unorderedColumns = [](const TVector<TColumn>& orderedColumns) {
@@ -293,19 +293,19 @@ TRestoreResult TRestoreClient::CheckSchema(const TString& dbPath, const TTableDe
};
if (unorderedColumns(desc.GetColumns()) != unorderedColumns(actualDesc->GetColumns())) {
- return Result<TRestoreResult>(EStatus::SCHEME_ERROR, TStringBuilder() << "Columns differ"
+ return Result<TRestoreResult>(dbPath, EStatus::SCHEME_ERROR, TStringBuilder() << "Columns differ"
<< ": dumped# " << JoinSeq(", ", desc.GetColumns())
<< ", actual# " << JoinSeq(", ", actualDesc->GetColumns()));
}
if (desc.GetPrimaryKeyColumns() != actualDesc->GetPrimaryKeyColumns()) {
- return Result<TRestoreResult>(EStatus::SCHEME_ERROR, TStringBuilder() << "Primary key columns differ"
+ return Result<TRestoreResult>(dbPath, EStatus::SCHEME_ERROR, TStringBuilder() << "Primary key columns differ"
<< ": dumped# " << JoinSeq(", ", desc.GetPrimaryKeyColumns())
<< ", actual# " << JoinSeq(", ", actualDesc->GetPrimaryKeyColumns()));
}
if (unorderedIndexes(desc.GetIndexDescriptions()) != unorderedIndexes(actualDesc->GetIndexDescriptions())) {
- return Result<TRestoreResult>(EStatus::SCHEME_ERROR, TStringBuilder() << "Indexes differ"
+ return Result<TRestoreResult>(dbPath, EStatus::SCHEME_ERROR, TStringBuilder() << "Indexes differ"
<< ": dumped# " << JoinSeq(", ", desc.GetIndexDescriptions())
<< ", actual# " << JoinSeq(", ", actualDesc->GetIndexDescriptions()));
}
@@ -323,7 +323,7 @@ TRestoreResult TRestoreClient::RestoreData(const TFsPath& fsPath, const TString&
TCreateTableSettings().RequestType(DOC_API_REQUEST_TYPE)).GetValueSync();
});
if (!createResult.IsSuccess()) {
- return Result<TRestoreResult>(std::move(createResult));
+ return Result<TRestoreResult>(dbPath, std::move(createResult));
}
THolder<NPrivate::IDataAccumulator> accumulator;
@@ -342,7 +342,7 @@ TRestoreResult TRestoreClient::RestoreData(const TFsPath& fsPath, const TString&
TMaybe<TTableDescription> actualDesc;
auto descResult = DescribeTable(TableClient, dbPath, actualDesc);
if (!descResult.IsSuccess()) {
- return Result<TRestoreResult>(std::move(descResult));
+ return Result<TRestoreResult>(dbPath, std::move(descResult));
}
accumulator.Reset(CreateImportDataAccumulator(desc, *actualDesc, settings));
@@ -362,18 +362,18 @@ TRestoreResult TRestoreClient::RestoreData(const TFsPath& fsPath, const TString&
while (input.ReadLine(line)) {
while (!accumulator->Fits(line)) {
if (!accumulator->Ready(true)) {
- return Result<TRestoreResult>(EStatus::INTERNAL_ERROR, "Data is not ready");
+ return Result<TRestoreResult>(dbPath, EStatus::INTERNAL_ERROR, "Data is not ready");
}
if (!writer->Push(accumulator->GetData(true))) {
- return Result<TRestoreResult>(EStatus::GENERIC_ERROR, "Cannot write data #1");
+ return Result<TRestoreResult>(dbPath, EStatus::GENERIC_ERROR, "Cannot write data #1");
}
}
accumulator->Feed(std::move(line));
if (accumulator->Ready()) {
if (!writer->Push(accumulator->GetData())) {
- return Result<TRestoreResult>(EStatus::GENERIC_ERROR, "Cannot write data #2");
+ return Result<TRestoreResult>(dbPath, EStatus::GENERIC_ERROR, "Cannot write data #2");
}
}
}
@@ -383,7 +383,7 @@ TRestoreResult TRestoreClient::RestoreData(const TFsPath& fsPath, const TString&
while (accumulator->Ready(true)) {
if (!writer->Push(accumulator->GetData(true))) {
- return Result<TRestoreResult>(EStatus::GENERIC_ERROR, "Cannot write data #3");
+ return Result<TRestoreResult>(dbPath, EStatus::GENERIC_ERROR, "Cannot write data #3");
}
}
@@ -405,7 +405,7 @@ TRestoreResult TRestoreClient::RestoreIndexes(const TString& dbPath, const TTabl
if (!actualDesc) {
auto descResult = DescribeTable(TableClient, dbPath, actualDesc);
if (!descResult.IsSuccess()) {
- return Result<TRestoreResult>(std::move(descResult));
+ return Result<TRestoreResult>(dbPath, std::move(descResult));
}
}
@@ -418,7 +418,7 @@ TRestoreResult TRestoreClient::RestoreIndexes(const TString& dbPath, const TTabl
return session.AlterTableLong(dbPath, settings).GetValueSync().Status();
});
if (!status.IsSuccess() && status.GetStatus() != EStatus::STATUS_UNDEFINED) {
- return Result<TRestoreResult>(std::move(status));
+ return Result<TRestoreResult>(dbPath, std::move(status));
}
// wait for expected index build
diff --git a/ydb/public/lib/ydb_cli/dump/util/util.h b/ydb/public/lib/ydb_cli/dump/util/util.h
index d5e8fc3b97d..ae3635431f1 100644
--- a/ydb/public/lib/ydb_cli/dump/util/util.h
+++ b/ydb/public/lib/ydb_cli/dump/util/util.h
@@ -5,13 +5,22 @@
#include <ydb/public/sdk/cpp/client/ydb_table/table.h>
#include <util/generic/maybe.h>
+#include <util/string/builder.h>
namespace NYdb {
namespace NDump {
+inline void AddPath(NYql::TIssues& issues, const TString& path) {
+ issues.AddIssue(NYql::TIssue(TStringBuilder() << "Path: " << path)
+ .SetCode(NYql::DEFAULT_ERROR, NYql::TSeverityIds::S_INFO));
+}
+
template <typename TResult>
-inline TResult Result(EStatus code = EStatus::SUCCESS, const TString& error = {}) {
+inline TResult Result(const TMaybe<TString>& path = Nothing(), EStatus code = EStatus::SUCCESS, const TString& error = {}) {
NYql::TIssues issues;
+ if (path) {
+ AddPath(issues, *path);
+ }
if (error) {
issues.AddIssue(NYql::TIssue(error));
}
@@ -19,8 +28,16 @@ inline TResult Result(EStatus code = EStatus::SUCCESS, const TString& error = {}
}
template <typename TResult>
-inline TResult Result(TStatus&& status) {
- return TResult(std::move(status));
+inline TResult Result(EStatus code, const TString& error) {
+ return Result<TResult>(Nothing(), code, error);
+}
+
+template <typename TResult>
+inline TResult Result(const TString& path, TStatus&& status) {
+ NYql::TIssues issues;
+ AddPath(issues, path);
+ issues.AddIssues(status.GetIssues());
+ return TResult(TStatus(status.GetStatus(), std::move(issues)));
}
TStatus DescribeTable(NTable::TTableClient& tableClient, const TString& path, TMaybe<NTable::TTableDescription>& out);