Skip to content

Commit 6a3a98c

Browse files
committed
YQ-3684 fix screts not found error handling (ydb-platform#9501)
1 parent ebd95e6 commit 6a3a98c

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

ydb/core/kqp/gateway/kqp_metadata_loader.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,11 @@ NThreading::TFuture<TTableMetadataResult> TKqpTableMetadataLoader::LoadTableMeta
841841
.Subscribe([promise, externalDataSourceMetadata, settings](const TFuture<TEvDescribeSecretsResponse::TDescription>& result) mutable
842842
{
843843
UpdateExternalDataSourceSecretsValue(externalDataSourceMetadata, result.GetValue());
844+
if (!externalDataSourceMetadata.Success()) {
845+
promise.SetValue(externalDataSourceMetadata);
846+
return;
847+
}
848+
844849
NExternalSource::IExternalSource::TPtr externalSource;
845850
if (settings.ExternalSourceFactory) {
846851
externalSource = settings.ExternalSourceFactory->GetOrCreate(externalDataSourceMetadata.Metadata->ExternalSource.Type);

ydb/core/kqp/ut/federated_query/common/common.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ namespace NKikimr::NKqp::NFederatedQueryTest {
2727
NKikimrConfig::TFeatureFlags featureFlags;
2828
featureFlags.SetEnableExternalDataSources(true);
2929
featureFlags.SetEnableScriptExecutionOperations(true);
30+
featureFlags.SetEnableExternalSourceSchemaInference(true);
3031
if (!appConfig) {
3132
appConfig.emplace();
3233
}

ydb/core/kqp/ut/federated_query/s3/kqp_federated_query_ut.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,6 +1898,48 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
18981898
UNIT_ASSERT_STRING_CONTAINS(readyOp.Status().GetIssues().ToString(), "File pattern '{' contains invalid wildcard:");
18991899
}
19001900
}
1901+
1902+
Y_UNIT_TEST(TestSecretsExistingValidation) {
1903+
const TString bucket = "test_bucket14";
1904+
1905+
CreateBucket(bucket);
1906+
1907+
NKikimrConfig::TAppConfig appConfig;
1908+
appConfig.MutableFeatureFlags()->SetEnableExternalSourceSchemaInference(true);
1909+
auto kikimr = NTestUtils::MakeKikimrRunner(appConfig);
1910+
1911+
auto tc = kikimr->GetTableClient();
1912+
auto session = tc.CreateSession().GetValueSync().GetSession();
1913+
const TString query = fmt::format(R"(
1914+
GRANT ALL ON `/Root` TO `test@builtin`;
1915+
CREATE OBJECT TestSecret (TYPE SECRET) WITH value = `test_value`;
1916+
CREATE EXTERNAL DATA SOURCE `/Root/external_data_source` WITH (
1917+
SOURCE_TYPE="ObjectStorage",
1918+
LOCATION="{location}",
1919+
AUTH_METHOD="SERVICE_ACCOUNT",
1920+
SERVICE_ACCOUNT_ID="TestSa",
1921+
SERVICE_ACCOUNT_SECRET_NAME="TestSecret"
1922+
);)",
1923+
"location"_a = GetBucketLocation(bucket)
1924+
);
1925+
auto result = session.ExecuteSchemeQuery(query).GetValueSync();
1926+
UNIT_ASSERT_C(result.GetStatus() == NYdb::EStatus::SUCCESS, result.GetIssues().ToString());
1927+
1928+
auto db = kikimr->GetQueryClient(NYdb::NQuery::TClientSettings().AuthToken("test@builtin"));
1929+
1930+
const TString sql = R"(
1931+
SELECT * FROM `/Root/external_data_source`.`/` WITH (
1932+
SCHEMA = (data String),
1933+
FORMAT = "csv_with_names"
1934+
))";
1935+
1936+
auto scriptExecutionOperation = db.ExecuteScript(sql).ExtractValueSync();
1937+
UNIT_ASSERT_VALUES_EQUAL_C(scriptExecutionOperation.Status().GetStatus(), EStatus::SUCCESS, scriptExecutionOperation.Status().GetIssues().ToString());
1938+
1939+
NYdb::NQuery::TScriptExecutionOperation readyOp = WaitScriptExecutionOperation(scriptExecutionOperation.Id(), kikimr->GetDriver());
1940+
UNIT_ASSERT_EQUAL_C(readyOp.Metadata().ExecStatus, EExecStatus::Failed, readyOp.Status().GetIssues().ToString());
1941+
UNIT_ASSERT_STRING_CONTAINS(readyOp.Status().GetIssues().ToString(), "secret with name 'TestSecret' not found");
1942+
}
19011943
}
19021944

19031945
} // namespace NKikimr::NKqp

0 commit comments

Comments
 (0)