diff options
author | ilnaz <[email protected]> | 2023-09-06 12:38:08 +0300 |
---|---|---|
committer | ilnaz <[email protected]> | 2023-09-06 13:14:25 +0300 |
commit | 06ac3179abd374710a51ff065185329771ea801b (patch) | |
tree | 67bbd03b5485d185ea750fc1e4c20fce52c4fdf2 | |
parent | e369652514d1de8e1b6b361631158a95385f11dd (diff) |
BAD_REQUEST on empty data KIKIMR-19109
-rw-r--r-- | ydb/core/grpc_services/rpc_import_data.cpp | 8 | ||||
-rw-r--r-- | ydb/services/ydb/ydb_import_ut.cpp | 30 |
2 files changed, 38 insertions, 0 deletions
diff --git a/ydb/core/grpc_services/rpc_import_data.cpp b/ydb/core/grpc_services/rpc_import_data.cpp index 88021a1b58d..660d1b7c205 100644 --- a/ydb/core/grpc_services/rpc_import_data.cpp +++ b/ydb/core/grpc_services/rpc_import_data.cpp @@ -228,6 +228,10 @@ class TImportDataRPC: public TRpcRequestActor<TImportDataRPC, TEvImportDataReque void ProcessData() { const auto& request = *GetProtoRequest(); + if (request.data().empty()) { + return Reply(StatusIds::BAD_REQUEST, TIssuesIds::DEFAULT_ERROR, "Empty data"); + } + auto ev = MakeHolder<TEvDataShard::TEvUploadRowsRequest>(); ev->Record.SetTableId(KeyDesc->TableId.PathId.LocalPathId); @@ -351,6 +355,10 @@ class TImportDataRPC: public TRpcRequestActor<TImportDataRPC, TEvImportDataReque row.SetValueColumns(TSerializedCellVec::Serialize(values)); } + if (!shardId) { + Reply(StatusIds::INTERNAL_ERROR, TIssuesIds::DEFAULT_ERROR, "Empty shard id"); + } + return shardId; } diff --git a/ydb/services/ydb/ydb_import_ut.cpp b/ydb/services/ydb/ydb_import_ut.cpp index 02a6061e052..961cd9679c8 100644 --- a/ydb/services/ydb/ydb_import_ut.cpp +++ b/ydb/services/ydb/ydb_import_ut.cpp @@ -97,4 +97,34 @@ Y_UNIT_TEST_SUITE(YdbImport) { Cerr << "count returned " << count << " rows" << Endl; UNIT_ASSERT_VALUES_EQUAL(count, BATCH_COUNT * BATCH_SIZE); } + + Y_UNIT_TEST(EmptyData) { + TKikimrWithGrpcAndRootSchema server; + auto driver = TDriver(TDriverConfig().SetEndpoint(TStringBuilder() + << "localhost:" << server.GetPort())); + + { + NYdb::NTable::TTableClient client(driver); + auto session = client.GetSession().ExtractValueSync().GetSession(); + + auto builder = NYdb::NTable::TTableBuilder() + .AddNullableColumn("Key", EPrimitiveType::Uint64) + .AddNullableColumn("Value", EPrimitiveType::String) + .SetPrimaryKeyColumn("Key"); + + auto result = session.CreateTable("/Root/Table", builder.Build()).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + } + + { + NYdb::NImport::TImportClient client(driver); + NYdb::NImport::TImportYdbDumpDataSettings settings; + settings.AppendColumns("Key"); + settings.AppendColumns("Value"); + + auto result = client.ImportData("/Root/Table", "", settings).ExtractValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::BAD_REQUEST, result.GetIssues().ToString()); + } + } + } |