Browse Source

BAD_REQUEST on empty data KIKIMR-19109

ilnaz 1 year ago
parent
commit
06ac3179ab
2 changed files with 38 additions and 0 deletions
  1. 8 0
      ydb/core/grpc_services/rpc_import_data.cpp
  2. 30 0
      ydb/services/ydb/ydb_import_ut.cpp

+ 8 - 0
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;
     }
 

+ 30 - 0
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());
+        }
+    }
+
 }