Skip to content

Commit f6e7d8e

Browse files
authored
YQ-3684 fix screts not found error handling (#9501)
1 parent c3abe60 commit f6e7d8e

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
@@ -842,6 +842,11 @@ NThreading::TFuture<TTableMetadataResult> TKqpTableMetadataLoader::LoadTableMeta
842842
.Subscribe([promise, externalDataSourceMetadata, settings](const TFuture<TEvDescribeSecretsResponse::TDescription>& result) mutable
843843
{
844844
UpdateExternalDataSourceSecretsValue(externalDataSourceMetadata, result.GetValue());
845+
if (!externalDataSourceMetadata.Success()) {
846+
promise.SetValue(externalDataSourceMetadata);
847+
return;
848+
}
849+
845850
NExternalSource::IExternalSource::TPtr externalSource;
846851
if (settings.ExternalSourceFactory) {
847852
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
@@ -2264,6 +2264,48 @@ Y_UNIT_TEST_SUITE(KqpFederatedQuery) {
22642264
UNIT_ASSERT_STRING_CONTAINS(readyOp.Status().GetIssues().ToString(), "File pattern '{' contains invalid wildcard:");
22652265
}
22662266
}
2267+
2268+
Y_UNIT_TEST(TestSecretsExistingValidation) {
2269+
const TString bucket = "test_bucket14";
2270+
2271+
CreateBucket(bucket);
2272+
2273+
NKikimrConfig::TAppConfig appConfig;
2274+
appConfig.MutableFeatureFlags()->SetEnableExternalSourceSchemaInference(true);
2275+
auto kikimr = NTestUtils::MakeKikimrRunner(appConfig);
2276+
2277+
auto tc = kikimr->GetTableClient();
2278+
auto session = tc.CreateSession().GetValueSync().GetSession();
2279+
const TString query = fmt::format(R"(
2280+
GRANT ALL ON `/Root` TO `test@builtin`;
2281+
CREATE OBJECT TestSecret (TYPE SECRET) WITH value = `test_value`;
2282+
CREATE EXTERNAL DATA SOURCE `/Root/external_data_source` WITH (
2283+
SOURCE_TYPE="ObjectStorage",
2284+
LOCATION="{location}",
2285+
AUTH_METHOD="SERVICE_ACCOUNT",
2286+
SERVICE_ACCOUNT_ID="TestSa",
2287+
SERVICE_ACCOUNT_SECRET_NAME="TestSecret"
2288+
);)",
2289+
"location"_a = GetBucketLocation(bucket)
2290+
);
2291+
auto result = session.ExecuteSchemeQuery(query).GetValueSync();
2292+
UNIT_ASSERT_C(result.GetStatus() == NYdb::EStatus::SUCCESS, result.GetIssues().ToString());
2293+
2294+
auto db = kikimr->GetQueryClient(NYdb::NQuery::TClientSettings().AuthToken("test@builtin"));
2295+
2296+
const TString sql = R"(
2297+
SELECT * FROM `/Root/external_data_source`.`/` WITH (
2298+
SCHEMA = (data String),
2299+
FORMAT = "csv_with_names"
2300+
))";
2301+
2302+
auto scriptExecutionOperation = db.ExecuteScript(sql).ExtractValueSync();
2303+
UNIT_ASSERT_VALUES_EQUAL_C(scriptExecutionOperation.Status().GetStatus(), EStatus::SUCCESS, scriptExecutionOperation.Status().GetIssues().ToString());
2304+
2305+
NYdb::NQuery::TScriptExecutionOperation readyOp = WaitScriptExecutionOperation(scriptExecutionOperation.Id(), kikimr->GetDriver());
2306+
UNIT_ASSERT_EQUAL_C(readyOp.Metadata().ExecStatus, EExecStatus::Failed, readyOp.Status().GetIssues().ToString());
2307+
UNIT_ASSERT_STRING_CONTAINS(readyOp.Status().GetIssues().ToString(), "secret with name 'TestSecret' not found");
2308+
}
22672309
}
22682310

22692311
} // namespace NKikimr::NKqp

0 commit comments

Comments
 (0)