Skip to content

Standard Implementation

This page describes the standard implementation of the TDBCluster interface for TDB 2.x.

Class Diagram

«interface»AutoCloseableclose(): voidBuilderwithMigrationsDirectory(Path): BuilderwithShardCount(int): BuilderwithStartupTimeout(Duration): BuilderwithRouterCount(int): BuilderwithTDB2Configuration(Tarantool3Configuration): Builderbuild(): TDB2ClusterImplwithReplicaCount(int): Builder«interface»Startablestop(): voidgetDependencies(): Set<Startable>close(): voidstart(): voidTDB2ClusterImpltcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>nodes(): Map<String, TarantoolContainer<?>>clusterName(): Stringstart(): voidrouters(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerstop(): voidbuilder(String): Builder«interface»TDBClusterclusterName(): StringtcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerrouters(): Map<String, TarantoolContainer<?>>restart(long, TimeUnit): voidnodes(): Map<String, TarantoolContainer<?>>
«interface»AutoCloseableclose(): voidBuilderwithMigrationsDirectory(Path): BuilderwithShardCount(int): BuilderwithStartupTimeout(Duration): BuilderwithRouterCount(int): BuilderwithTDB2Configuration(Tarantool3Configuration): Builderbuild(): TDB2ClusterImplwithReplicaCount(int): Builder«interface»Startablestop(): voidgetDependencies(): Set<Startable>close(): voidstart(): voidTDB2ClusterImpltcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>nodes(): Map<String, TarantoolContainer<?>>clusterName(): Stringstart(): voidrouters(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerstop(): voidbuilder(String): Builder«interface»TDBClusterclusterName(): StringtcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerrouters(): Map<String, TarantoolContainer<?>>restart(long, TimeUnit): voidnodes(): Map<String, TarantoolContainer<?>>

The TDB2ClusterImpl class allows you to create an object managing the lifecycle of a TDB 2.x cluster, satisfying the contract of TDBCluster.

Implementation Description

Cluster Configuration

The implementation follows the following algorithm when configuring the cluster:

CallingTDB2ClusterImpl::start()Create a temporary directoryfor theTDB2ClusterImplinstanceGenerate configurationbased on the passedrouterCount,shardCount,replicaCountWrite the configuration filebased on the configuration object toa temporary directoryCreate and configureetcd,TCMcontainersThrow an exceptionPublish the clusterconfiguration viaTCMtoetcdStart the containerswithTarantoolnodesInitializethe clusterApply migrationsComplete startupConfiguration passed viaTarantool3Configuration?noyesSuccessfullystarted?noyesConfigurationtransferred?noyesContainersstarted?noyesClusterinitialized?noyesMigrationsapplied?noyes
CallingTDB2ClusterImpl::start()Create a temporary directoryfor theTDB2ClusterImplinstanceGenerate configurationbased on the passedrouterCount,shardCount,replicaCountWrite the configuration filebased on the configuration object toa temporary directoryCreate and configureetcd,TCMcontainersThrow an exceptionPublish the clusterconfiguration viaTCMtoetcdStart the containerswithTarantoolnodesInitializethe clusterApply migrationsComplete startupConfiguration passed viaTarantool3Configuration?noyesSuccessfullystarted?noyesConfigurationtransferred?noyesContainersstarted?noyesClusterinitialized?noyesMigrationsapplied?noyes

Ensuring Mounted Data Preservation

According to the TDBCluster contract, when calling the TDBCluster::restart(...) method, the mounted data must be preserved. TDB2ClusterImpl implements this mechanism by using the TarantoolContainer::stopWithSafeMount() contract:

CallingTDB2ClusterImpl::restart(...)TDB2ClusterImpl::restartCallTarantool3Container::stopWithSafeMount()for eachTarantoolnode in the clusterWait for the specified delayCallTarantool3Container::start()for eachTarantoolnode in the cluster
CallingTDB2ClusterImpl::restart(...)TDB2ClusterImpl::restartCallTarantool3Container::stopWithSafeMount()for eachTarantoolnode in the clusterWait for the specified delayCallTarantool3Container::start()for eachTarantoolnode in the cluster

Mounted directories are deleted only when calling the TDB2ClusterImpl::stop() method. Container configuration occurs only once during the first call to TDB2ClusterImpl::start().

Port Binding

External port binding to cluster components (containers) occurs at the TDB2ClusterImpl instance startup stage.