summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorilnaz <[email protected]>2023-09-06 12:38:08 +0300
committerilnaz <[email protected]>2023-09-06 13:14:25 +0300
commit06ac3179abd374710a51ff065185329771ea801b (patch)
tree67bbd03b5485d185ea750fc1e4c20fce52c4fdf2
parente369652514d1de8e1b6b361631158a95385f11dd (diff)
BAD_REQUEST on empty data KIKIMR-19109
-rw-r--r--ydb/core/grpc_services/rpc_import_data.cpp8
-rw-r--r--ydb/services/ydb/ydb_import_ut.cpp30
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());
+ }
+ }
+
}