Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

API хранилища

Публичный API хранилища

vshard.storage.cfg(cfg, instance_uuid)

Настройка базы данных и запуск шардирования для указанного экземпляра storage.

Параметры:

  • cfg — конфигурация storage

  • instance_uuid — UUID экземпляра

vshard.storage.info({options})

Возвращает информацию об экземпляре хранилища. Начиная с vshard v.0.1.22, функция также принимает параметры, которые можно использовать для получения дополнительной информации.

  • options — none
  • with_services — логическое значение. Если установлено значение true, функция возвращает информацию о фоновых службах (таких как сборщик мусора, балансировщик, восстановление или аппликатор маршрутов), работающих на текущем экземпляре. Подробное описание см. в vshard.router.info.

Пример:

tarantool> vshard.storage.info()---- replicasets:    c862545d-d966-45ff-93ad-763dce4a9723:      uuid: c862545d-d966-45ff-93ad-763dce4a9723      master:        uri: admin@localhost:3302    1990be71-f06e-4d9a-bcf9-4514c4e0c889:      uuid: 1990be71-f06e-4d9a-bcf9-4514c4e0c889      master:        uri: admin@localhost:3304  bucket:    receiving: 0    active: 15000    total: 15000    garbage: 0    pinned: 0    sending: 0  status: 0  replication:    status: master  alerts: ...

vshard.storage.call(bucket_id, mode, function_name, {argument_list})

Вызывает указанную функцию на текущем экземпляре storage.

  • bucket_id — идентификатор бакета
  • mode — тип функции: 'read' или 'write'
  • function_name — функция для выполнения
  • argument_list — массив аргументов функции

Возвращает

Исходное возвращаемое значение выполненной функции или nil и объект ошибки.

vshard.storage.sync(timeout)

Ожидает синхронизации набора данных на репликах.

  • timeout — время ожидания в секундах

Возвращает

true при успешной синхронизации набора данных; иначе nil и err с описанием причины, по которой набор данных не удалось синхронизировать.

vshard.storage.bucket_pin(bucket_id)

Закрепляет бакет за набором реплик. Закрепленный бакет нельзя переместить, даже если это нарушит балансировку кластера.

  • bucket_id — идентификатор бакета

Возвращает

true при успешном закреплении бакета; иначе nil и err с описанием причины, по которой бакет не удалось закрепить

vshard.storage.bucket_unpin(bucket_id)

Возвращает закрепленный бакет в активное состояние.

  • bucket_id — идентификатор бакета

Возвращает

true при успешном откреплении бакета; иначе nil и err с описанием причины, по которой бакет не удалось открепить

vshard.storage.bucket_ref(bucket_id, mode)

Создает ссылку RO или RW.

  • bucket_id — идентификатор бакета

  • mode — 'read' или 'write'

Возвращает

true при успешном создании ссылки на бакет; иначе nil и err с описанием причины, по которой не удалось создать ссылку

vshard.storage.bucket_refro(bucket_id)

Псевдоним для vshard.storage.bucket_ref в режиме чтения.

  • bucket_id — идентификатор бакета

Возвращает

true при успешном создании ссылки на бакет; иначе nil и err с описанием причины, по которой не удалось создать ссылку

vshard.storage.bucket_refrw(bucket_id)

Псевдоним для vshard.storage.bucket_ref в режиме записи.

  • bucket_id — идентификатор бакета

Возвращает

true при успешном создании ссылки на бакет; иначе nil и err с описанием причины, по которой не удалось создать ссылку

vshard.storage.bucket_unref(bucket_id, mode)

Удаляет ссылку RO/RW.

  • bucket_id — идентификатор бакета
  • mode — 'read' или 'write'

Возвращает

true при успешном удалении ссылки на бакет; иначе nil и err с описанием причины, по которой не удалось удалить ссылку

vshard.storage.bucket_unrefro(bucket_id)

Псевдоним для vshard.storage.bucket_unref в режиме чтения.

  • bucket_id — идентификатор бакета

Возвращает

true при успешном удалении ссылки на бакет; иначе nil и err с описанием причины, по которой не удалось удалить ссылку

vshard.storage.bucket_unrefrw(bucket_id)

Псевдоним для vshard.storage.bucket_unref в режиме записи.

  • bucket_id — идентификатор бакета

Возвращает

true при успешном удалении ссылки на бакет; иначе nil и err с описанием причины, по которой не удалось удалить ссылку

vshard.storage.find_garbage_bucket(bucket_index, control)

Находит бакет, у которого есть данные в спейсе, но он не хранится в спейсе _bucket; либо находится в состоянии GARBAGE.

  • bucket_index — индекс спейса с частью идентификатора бакета
  • control — контроллер сборщика мусора. Если поколение бакетов увеличилось, поиск следует прервать.

Возвращает

идентификатор бакета в состоянии GARBAGE, если найден; иначе nil

vshard.storage.buckets_info()

Возвращает информацию о каждом бакете, расположенном в хранилище.

Например:

tarantool> vshard.storage.buckets_info(1)---- 1:    status: active    ref_rw: 1    ref_ro: 1    ro_lock: true    rw_lock: true    id: 1

vshard.storage.buckets_count()

Возвращает количество бакетов, расположенных в хранилище.

vshard.storage.recovery_wakeup()

Немедленно будит файбер восстановления, если он существует.

vshard.storage.rebalancing_is_in_progress()

Возвращает флаг, указывающий, выполняется ли ребалансировка. Результат равен true, если узел в данный момент применяет маршруты, полученные от узла-балансировщика, в специальном файбере.

vshard.storage.is_locked()

Возвращает флаг, указывающий, скрыто ли хранилище от балансировщика.

vshard.storage.rebalancer_disable()

Отключает ребалансировку. Отключенный балансировщик находится в спящем режиме, пока не будет снова включен с помощью vshard.storage.rebalancer_enable().

vshard.storage.rebalancer_enable()

Включает ребалансировку.

vshard.storage.sharded_spaces()

Показывает спейсы, видимые для файберов балансировщика и сборщика мусора.

tarantool> vshard.storage.sharded_spaces()---- 513:    engine: memtx    before_replace: 'function: 0x010e50e738'    field_count: 0    id: 513    on_replace: 'function: 0x010e50e700'    temporary: false    index:      0: &0        unique: true        parts:        - type: number          fieldno: 1          is_nullable: false        id: 0        type: TREE        name: primary        space_id: 513      1: &1        unique: false        parts:        - type: number          fieldno: 2          is_nullable: false        id: 1        type: TREE        name: bucket_id        space_id: 513      primary: *0      bucket_id: *1    is_local: false    enabled: true    name: actors    ck_constraint: ...

vshard.storage.on_bucket_event([trigger-function[, old-trigger-function]])

Начиная с vshard v.0.1.22. Определяет триггер для выполнения при изменении (удалении или вставке) данных в пользовательских спейсах в процессе ребалансировки. Триггер вызывается при каждом изменении пакета данных.

  • trigger-function (function) — функция, которая станет функцией-триггером.
  • old-trigger-function (function) — существующая функция-триггер, которая будет заменена на trigger-function.

Возвращает

nil или указатель на функцию

Функция trigger-function может принимать до трех параметров:

  • event_type (string) – чтобы различать события, можно сравнить этот аргумент с поддерживаемыми типами событий: bucket_data_recv_txn и bucket_data_gc_txn.
  • bucket_id (unsigned) – идентификатор бакета.
  • data (table) – дополнительная информация о транзакции изменения данных. В настоящее время она включает только массив всех спейсов (data.spaces), затронутых транзакцией, в которой выполняется функция-триггер.

Пример:

vshard.storage.on_bucket_event(function(event, bucket_id, data)    if event == 'bucket_data_recv_txn' then        -- Handle it.        for idx, space in ipairs(data.spaces) do            ...        end    elseif event == 'bucket_data_gc_txn' then        -- Handle it.        ...    endend)

Внутренний API хранилища

vshard.storage.bucket_recv(bucket_id, from, data)

Принимает бакет, идентифицированный идентификатором бакета, от удаленного набора реплик.

  • bucket_id — идентификатор бакета
  • from — UUID исходного набора реплик
  • data — данные, логически хранящиеся в бакете, идентифицированном bucket_id, в том же формате, что и возвращаемое значение bucket_collect() <storage_api-bucket_collect>

vshard.storage.bucket_stat(bucket_id)

Возвращает информацию об идентификаторе бакета:

tarantool> vshard.storage.bucket_stat(1)---- 0- status: active  id: 1...
  • bucket_id — идентификатор бакета

vshard.storage.bucket_delete_garbage(bucket_id)

Принудительно запускает сборку мусора для бакета, идентифицированного bucket_id, в случае, если бакет был перенесен в другой набор реплик.

  • bucket_id — идентификатор бакета

vshard.storage.bucket_collect(bucket_id)

Собирает все данные, логически хранящиеся в бакете, идентифицированном bucket_id:

tarantool> vshard.storage.bucket_collect(1)---- 0- - - 514    - - [10, 1, 1, 100, 'Account 10']      - [11, 1, 1, 100, 'Account 11']      - [12, 1, 1, 100, 'Account 12']      - [50, 5, 1, 100, 'Account 50']      - [51, 5, 1, 100, 'Account 51']      - [52, 5, 1, 100, 'Account 52']  - - 513    - - [1, 1, 'Customer 1']      - [5, 1, 'Customer 5']...
  • bucket_id — идентификатор бакета

vshard.storage.bucket_force_create(first_bucket_id, count)

Принудительно создает бакеты (один или несколько) в текущем наборе реплик. Используйте только для ручного аварийного восстановления или для начальной загрузки.

  • first_bucket_id — идентификатор первого бакета в диапазоне
  • count — количество бакетов для вставки (по умолчанию = 1)

vshard.storage.bucket_force_drop(bucket_id)

Удаляет бакет вручную для тестов или в экстренных случаях.

  • bucket_id — идентификатор бакета

vshard.storage.bucket_send(bucket_id, to)

Отправляет указанный бакет из текущего набора реплик в удаленный набор реплик.

  • bucket_id — идентификатор бакета
  • to — UUID удаленного набора реплик

vshard.storage.rebalancer_request_state()

Проверяет все бакеты хранилища-источника, находящиеся в состоянии SENT или ACTIVE, и возвращает количество активных бакетов.

Возвращает

количество бакетов в активном состоянии, если они найдены; иначе nil

vshard.storage.buckets_discovery()

Собирает массив идентификаторов активных бакетов для обнаружения.