Skip to content

Commit 75be1ab

Browse files
authored
Merge e4778d3 into 8605b41
2 parents 8605b41 + e4778d3 commit 75be1ab

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

ydb/core/grpc_services/ydb_over_fq/list_directory.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ class ListDirectoryRPC
5858
self.set_type(Ydb::Scheme::Entry::DIRECTORY);
5959

6060
for (const auto& binding : Bindings_) {
61+
if (binding.type() == FederatedQuery::BindingSetting::DATA_STREAMS) {
62+
continue;
63+
}
64+
6165
auto& destEntry = *result.add_children();
6266
destEntry.set_name(binding.name());
6367
destEntry.set_owner(binding.meta().created_by());

ydb/tests/fq/s3/test_ydb_over_fq.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import boto3
55
import json
66
import logging
7+
import os
78
import pytest
89
import typing
910
import ydb
@@ -44,9 +45,13 @@ def read_scan_rows(it) -> typing.List[ydb_pb.Value]:
4445
return scanned_rows
4546

4647

48+
def make_columns(columns: typing.List[typing.Tuple[str, str]]) -> typing.List[ydb_pb.Column]:
49+
return [ydb_pb.Column(name=name, type=ydb_pb.Type(type_id=ydb_pb.Type.PrimitiveTypeId.Value(type))) for name, type in columns]
50+
51+
4752
class TestYdbOverFq(TestYdsBase):
4853
def make_binding(self, client: FederatedQueryClient, name: str, path: str, connection_id: str, columns: typing.List[typing.Tuple[str, str]]):
49-
columns = [ydb_pb.Column(name=name, type=ydb_pb.Type(type_id=ydb_pb.Type.PrimitiveTypeId.Value(type))) for name, type in columns]
54+
columns = make_columns(columns)
5055
client.create_object_storage_binding(name, path, "csv_with_names", connection_id, columns=columns)
5156

5257
def make_yq_driver(self, endpoint: str, folder_id: str, token: str) -> ydb.Driver:
@@ -130,6 +135,32 @@ def test_list_directory_v2(self, kikimr, s3, client):
130135
def test_list_directory_v1(self, kikimr, s3, client):
131136
self.list_directory_test_body(kikimr, s3, client)
132137

138+
@yq_all
139+
@pytest.mark.parametrize("client", [{"folder_id": "list_without_streams"}], indirect=True)
140+
def test_list_without_streams(self, kikimr, s3, client, yq_version):
141+
self.init_topics(f"topic_to_not_list_{yq_version}")
142+
143+
connection_response = client.create_yds_connection("yds_conn", os.getenv("YDB_DATABASE"), os.getenv("YDB_ENDPOINT"))
144+
145+
logging.debug("connection_response: " + str(connection_response.result))
146+
assert not connection_response.issues, str(connection_response.issues)
147+
148+
binding_response = client.create_yds_binding(name="yds_bind",
149+
stream=self.input_topic,
150+
format="json_each_row",
151+
connection_id=connection_response.result.connection_id,
152+
columns=make_columns([("Data", "STRING")]))
153+
154+
logging.debug("binding_response: " + str(binding_response.result))
155+
assert not binding_response.issues, str(binding_response.issues)
156+
157+
driver = self.make_yq_driver(kikimr.endpoint(), client.folder_id, "root@builtin")
158+
ls_res = driver.scheme_client.list_directory("/")
159+
assert ls_res.is_directory()
160+
# as long as ANALYTICS requests can't process streams, don't list them in ydb_over_fq
161+
# can't check len(children), because other tests' interference
162+
assert list(map(lambda ch: ch.name, ls_res.children)).count("yds_bind") == 0
163+
133164
@yq_all
134165
@pytest.mark.parametrize("client", [{"folder_id": "my_folder"}], indirect=True)
135166
def test_execute_data_query(self, kikimr, s3, client, unique_prefix, yq_version):

0 commit comments

Comments
 (0)