Skip to content

Commit 7d51dea

Browse files
committed
YQ-3684 fix screts not found error handling (ydb-platform#9501)
1 parent e93ca94 commit 7d51dea

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
@@ -833,6 +833,11 @@ NThreading::TFuture<TTableMetadataResult> TKqpTableMetadataLoader::LoadTableMeta
833833
.Subscribe([promise, externalDataSourceMetadata, settings](const TFuture<TEvDescribeSecretsResponse::TDescription>& result) mutable
834834
{
835835
UpdateExternalDataSourceSecretsValue(externalDataSourceMetadata, result.GetValue());
836+
if (!externalDataSourceMetadata.Success()) {
837+
promise.SetValue(externalDataSourceMetadata);
838+
return;
839+
}
840+
836841
NExternalSource::IExternalSource::TPtr externalSource;
837842
if (settings.ExternalSourceFactory) {
838843
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
@@ -25,6 +25,7 @@ namespace NKikimr::NKqp::NFederatedQueryTest {
2525
NKikimrConfig::TFeatureFlags featureFlags;
2626
featureFlags.SetEnableExternalDataSources(true);
2727
featureFlags.SetEnableScriptExecutionOperations(true);
28+
featureFlags.SetEnableExternalSourceSchemaInference(true);
2829
if (!appConfig) {
2930
appConfig.emplace();
3031
}

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
@@ -1886,6 +1886,48 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
18861886
UNIT_ASSERT_STRING_CONTAINS(readyOp.Status().GetIssues().ToString(), "File pattern '{' contains invalid wildcard:");
18871887
}
18881888
}
1889+
1890+
Y_UNIT_TEST(TestSecretsExistingValidation) {
1891+
const TString bucket = "test_bucket14";
1892+
1893+
CreateBucket(bucket);
1894+
1895+
NKikimrConfig::TAppConfig appConfig;
1896+
appConfig.MutableFeatureFlags()->SetEnableExternalSourceSchemaInference(true);
1897+
auto kikimr = NTestUtils::MakeKikimrRunner(appConfig);
1898+
1899+
auto tc = kikimr->GetTableClient();
1900+
auto session = tc.CreateSession().GetValueSync().GetSession();
1901+
const TString query = fmt::format(R"(
1902+
GRANT ALL ON `/Root` TO `test@builtin`;
1903+
CREATE OBJECT TestSecret (TYPE SECRET) WITH value = `test_value`;
1904+
CREATE EXTERNAL DATA SOURCE `/Root/external_data_source` WITH (
1905+
SOURCE_TYPE="ObjectStorage",
1906+
LOCATION="{location}",
1907+
AUTH_METHOD="SERVICE_ACCOUNT",
1908+
SERVICE_ACCOUNT_ID="TestSa",
1909+
SERVICE_ACCOUNT_SECRET_NAME="TestSecret"
1910+
);)",
1911+
"location"_a = GetBucketLocation(bucket)
1912+
);
1913+
auto result = session.ExecuteSchemeQuery(query).GetValueSync();
1914+
UNIT_ASSERT_C(result.GetStatus() == NYdb::EStatus::SUCCESS, result.GetIssues().ToString());
1915+
1916+
auto db = kikimr->GetQueryClient(NYdb::NQuery::TClientSettings().AuthToken("test@builtin"));
1917+
1918+
const TString sql = R"(
1919+
SELECT * FROM `/Root/external_data_source`.`/` WITH (
1920+
SCHEMA = (data String),
1921+
FORMAT = "csv_with_names"
1922+
))";
1923+
1924+
auto scriptExecutionOperation = db.ExecuteScript(sql).ExtractValueSync();
1925+
UNIT_ASSERT_VALUES_EQUAL_C(scriptExecutionOperation.Status().GetStatus(), EStatus::SUCCESS, scriptExecutionOperation.Status().GetIssues().ToString());
1926+
1927+
NYdb::NQuery::TScriptExecutionOperation readyOp = WaitScriptExecutionOperation(scriptExecutionOperation.Id(), kikimr->GetDriver());
1928+
UNIT_ASSERT_EQUAL_C(readyOp.Metadata().ExecStatus, EExecStatus::Failed, readyOp.Status().GetIssues().ToString());
1929+
UNIT_ASSERT_STRING_CONTAINS(readyOp.Status().GetIssues().ToString(), "secret with name 'TestSecret' not found");
1930+
}
18891931
}
18901932

18911933
} // namespace NKikimr::NKqp

0 commit comments

Comments
 (0)