Skip to content

Commit 67ad158

Browse files
authored
Merge pull request #24 from ydb-platform/support-balancer
support session balancer feature
2 parents c6aad3f + e2d5f0c commit 67ad158

File tree

4 files changed

+44
-2
lines changed

4 files changed

+44
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
* allow to refer endpoints by node id
44
* support null type in queries
5+
* support session balancer feature
56

67
## 2.1.0 ##
78

ydb/connection.py

+1
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ def _construct_metadata(driver_config, settings):
146146
metadata.append((YDB_TRACE_ID_HEADER, settings.trace_id))
147147
if settings.request_type is not None:
148148
metadata.append((YDB_REQUEST_TYPE_HEADER, settings.request_type))
149+
metadata.extend(getattr(settings, "headers", []))
149150

150151
metadata.append(_utilities.x_ydb_sdk_build_info_header())
151152
return metadata

ydb/settings.py

+28
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class BaseRequestSettings(object):
1010
"operation_timeout",
1111
"tracer",
1212
"compression",
13+
"headers",
1314
)
1415

1516
def __init__(self):
@@ -22,11 +23,38 @@ def __init__(self):
2223
self.cancel_after = None
2324
self.operation_timeout = None
2425
self.compression = None
26+
self.headers = []
27+
28+
def make_copy(self):
29+
return (
30+
BaseRequestSettings()
31+
.with_trace_id(self.trace_id)
32+
.with_request_type(self.request_type)
33+
.with_timeout(self.timeout)
34+
.with_cancel_after(self.cancel_after)
35+
.with_operation_timeout(self.operation_timeout)
36+
.with_compression(self.compression)
37+
)
2538

2639
def with_compression(self, compression):
40+
"""
41+
Enables compression for the specific RPC
42+
:param compression: An RPCCompression enum value.
43+
:return The self instance.
44+
"""
2745
self.compression = compression
2846
return self
2947

48+
def with_header(self, key, value):
49+
"""
50+
Adds a key-value pair to the request headers.
51+
:param key: A string with a header key.
52+
:param value: A string with a header value.
53+
:return The self instance.
54+
"""
55+
self.headers.append((key, value))
56+
return self
57+
3058
def with_trace_id(self, trace_id):
3159
"""
3260
Includes trace id for RPC headers

ydb/table.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -1602,12 +1602,18 @@ def keep_alive(self, settings=None):
16021602
def create(self, settings=None):
16031603
if self._state.session_id is not None:
16041604
return self
1605+
create_settings = settings_impl.BaseRequestSettings()
1606+
if settings is not None:
1607+
create_settings = settings.make_copy()
1608+
create_settings = create_settings.with_header(
1609+
"x-ydb-client-capabilities", "session-balancer"
1610+
)
16051611
return self._driver(
16061612
_apis.ydb_table.CreateSessionRequest(),
16071613
_apis.TableService.Stub,
16081614
_apis.TableService.CreateSession,
16091615
_session_impl.initialize_session,
1610-
settings,
1616+
create_settings,
16111617
(self._state, self),
16121618
self._state.endpoint,
16131619
)
@@ -1860,12 +1866,18 @@ def async_keep_alive(self, settings=None):
18601866
def async_create(self, settings=None):
18611867
if self._state.session_id is not None:
18621868
return _utilities.wrap_result_in_future(self)
1869+
create_settings = settings_impl.BaseRequestSettings()
1870+
if settings is not None:
1871+
create_settings = settings.make_copy()
1872+
create_settings = create_settings.with_header(
1873+
"x-ydb-client-capabilities", "session-balancer"
1874+
)
18631875
return self._driver.future(
18641876
_apis.ydb_table.CreateSessionRequest(),
18651877
_apis.TableService.Stub,
18661878
_apis.TableService.CreateSession,
18671879
_session_impl.initialize_session,
1868-
settings,
1880+
create_settings,
18691881
(self._state, self),
18701882
self._state.endpoint,
18711883
)

0 commit comments

Comments
 (0)