Coordination Service

Warning

Coordination Service API is experimental and may contain bugs and may change in future releases.

All examples in this section are parts of coordination example.

Create node

driver.coordination_client.create_node("/local/my_node")

Create node with config

from ydb import NodeConfig, ConsistencyMode, RateLimiterCountersMode

config = NodeConfig(
    attach_consistency_mode=ConsistencyMode.STRICT,
    read_consistency_mode=ConsistencyMode.STRICT,
    rate_limiter_counters_mode=RateLimiterCountersMode.AGGREGATED,
    self_check_period_millis=1000,
    session_grace_period_millis=10000
)

driver.coordination_client.create_node("/local/my_node", config)

Describe node

config = driver.coordination_client.describe_node("/local/my_node")

Alter node

new_config = NodeConfig(
    attach_consistency_mode=ConsistencyMode.RELAXED,
    read_consistency_mode=ConsistencyMode.RELAXED,
    rate_limiter_counters_mode=RateLimiterCountersMode.DETAILED,
    self_check_period_millis=2000,
    session_grace_period_millis=15000
)
driver.coordination_client.alter_node("/local/my_node", new_config)

Delete node

driver.coordination_client.delete_node("/local/my_node")

Create session

with driver.coordination_client.session("/local/my_node") as session:
    pass

Use semaphore manually

with driver.coordination_client.session("/local/my_node") as session:
    semaphore = session.semaphore("my_semaphore", limit=2)  # limit is optional, default is 1
    semaphore.acquire(count=2) # count is optional, default is 1
    try:
        pass
    finally:
        semaphore.release()

Use semaphore with context manager

with driver.coordination_client.session("/local/my_node") as session:
    with session.semaphore("my_semaphore"):
        pass

Async usage

async with driver.coordination_client.session("/local/my_node") as session:
    async with session.semaphore("my_semaphore"):
        pass