Перейти к содержанию

Архитектура

TDBCluster

Основным интерфейсом для работы с кластером TarantoolDB в рамках testcontainers является TDBCluster:

«interface»AutoCloseableclose(): void«interface»Startablestop(): voidgetDependencies(): Set<Startable>close(): voidstart(): void«interface»TDBClusterclusterName(): StringtcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerrouters(): Map<String, TarantoolContainer<?>>restart(long, TimeUnit): voidnodes(): Map<String, TarantoolContainer<?>>
«interface»AutoCloseableclose(): void«interface»Startablestop(): voidgetDependencies(): Set<Startable>close(): voidstart(): void«interface»TDBClusterclusterName(): StringtcmContainer(): TCMContainerstorages(): Map<String, TarantoolContainer<?>>etcdContainer(): EtcdContainerrouters(): Map<String, TarantoolContainer<?>>restart(long, TimeUnit): voidnodes(): Map<String, TarantoolContainer<?>>

Требования к реализациям интерфейса

Компоненты кластера TDB

В зависимости от версии TarantoolDB(TDB) в кластере могут присутствовать различные компоненты (контейнеры), необходимые для его работы:

TDBClusterTarantool NodesRoutersReplicasetsreplicaset-1replicaset-2TarantoolDB 2.x onlyRouter-1Router-2replica-1 (master)replica-2replica-Nreplica-1 (master)replica-2replica-NetcdTCMИспользуется длявзаимодействия скластером через UI(подключение ковсем узлам кластера)Распределенное хранилищеконфигурации и миграцийкластера TarantoolDB.(подключение ковсем узлам кластера)
TDBClusterTarantool NodesRoutersReplicasetsreplicaset-1replicaset-2TarantoolDB 2.x onlyRouter-1Router-2replica-1 (master)replica-2replica-Nreplica-1 (master)replica-2replica-NetcdTCMИспользуется длявзаимодействия скластером через UI(подключение ковсем узлам кластера)Распределенное хранилищеконфигурации и миграцийкластера TarantoolDB.(подключение ковсем узлам кластера)

Перезапуск кластера

Перезапуск кластера осуществляется с помощью метода void restart(long delay, TimeUnit unit), где delay - длительность ожидания, unit - определяет единицу измерения delay. Реализации должны обеспечить сохранение монтируемых данных при использовании этого метода.

Остановка кластера

Остановка кластера с закрытием всех ресурсов производится с помощью методов stop(), close():

import org.junit.Test;
import org.testcontainers.containers.tdb.TDBCluster;
import org.testcontainers.utility.DockerImageName;

public class TestClass {

  @Test
  public void method() {
    final DockerImageName image = DockerImageName.parse("tarantooldb:2.2.1");

    try (TDBCluster cluster = new SomeTDBClusterImplementation()) {
      cluster.start();
      cluster.start(); //valid. idempotency

    } // call `close()` method of AutoCloseable interface
  }
}
import org.junit.Test;
import org.testcontainers.containers.tdb.TDBCluster;
import org.testcontainers.utility.DockerImageName;

public class TestClass {

  @Test
  public void method() {
    final DockerImageName image = DockerImageName.parse("tarantooldb:2.1.1");

    try (TDBCluster cluster = new SomeTDBClusterImplementation()) {
      cluster.start();

      cluster.stop();
      cluster.stop(); // valid. idempotency

      // Uncomment to see the exception
      // cluster.start(); // invalid. Throws `already closed` exception
    }
  }
}

Привязка портов

После запуска кластера, каждому компоненту TDBCluster (контейнерам) выделяется свободный внешний порт. Реализации должны гарантировать, что присвоенные порты будут сохранены за контейнерами до момента вызова методов close() или stop().