Перейти к основному содержимому

Поля и коды ошибок методов хранения

Когда применять​

Когда пишете интеграцию или разбираете ответ: нужно знать точный набор полей, тип параметра, уровень роли, границу ВЦОД (Виртуальный Центр Обработки Данных) и смысл кода ошибки. Пошаговые сценарии — в инструкциях по просмотру пулов и по свойствам датасета; модель — в «Пулы хранения».

Сводка группы​

МетодРежимПараметрыДоступЧто возвращает
pool-mapсинхронный, из базынетCluster master, Resource Viewerпулы, сгруппированные по node_id
pool-map-by-guidсинхронный, из базынетв каноне API не указанпулы, сгруппированные по guid, с ёмкостью
pools-listасинхронный, ретрансляцияnodeIdCluster masterпулы, обслуживаемые узлом, со свойствами ZFS
pools-getасинхронный, ретрансляцияnodeId, nameCluster masterполные свойства одного пула
filesystems-getасинхронный, ретрансляцияguidроль <= 2, свой ВЦОДсвойства датасета
filesystems-setасинхронный, ретрансляцияguid, propertiesроль <= 2, свой ВЦОДобновлённые свойства датасета

Асинхронные методы отвечают дважды: промежуточным {"message": "relayed"} и финальным обратным вызовом от Storage-агента.

Методы​

pool-map​

Карта пулов кластера, сгруппированная по node_id — номеру обслуживающего узла. Параметров нет.

{"jsonrpc": "2.0", "method": "pool-map", "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

pool-map-by-guid​

Детальная карта пулов кластера, сгруппированная по guid. Параметров нет.

{"jsonrpc": "2.0", "method": "pool-map-by-guid", "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

pools-list​

Список пулов, которые обслуживает узел из nodeId.

ПараметрТипОбязательныйОграничения
nodeIdnumberдадиапазон 1–99
{"jsonrpc": "2.0", "method": "pools-list", "params": {"nodeId": 5}, "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

pools-get​

Детальная информация о пуле, который обслуживает узел из nodeId.

ПараметрТипОбязательныйОграничения
nodeIdnumberдадиапазон 1–99
namestringдаимя пула
{"jsonrpc": "2.0", "method": "pools-get", "params": {"nodeId": 5, "name": "pool-a"}, "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

filesystems-get​

Свойства файловой системы ZFS по GUID диска.

ПараметрТипОбязательныйОграничения
guidstring | numberдадлина не меньше 1, числовое значение
{"jsonrpc": "2.0", "method": "filesystems-get", "params": {"guid": "12345"}, "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

filesystems-set​

Изменение свойств файловой системы ZFS по GUID диска. Требует включённой фичи filesystem_options.

ПараметрТипОбязательныйОграничения
guidstring | numberдадлина не меньше 1, числовое значение
propertiesobjectдаобъект с изменяемыми свойствами ZFS
{"jsonrpc": "2.0", "method": "filesystems-set", "params": {"guid": "12345", "properties": {"compression": "zstd"}}, "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

Поля карты пулов​

Оба метода карты отвечают из базы vStack Center. Наборы полей у них разные — колонка показывает, какой метод отдаёт поле.

Полеpool-mappool-map-by-guidСмысл
guidдадапостоянный идентификатор пула
nameдадаимя пула
healthдадасостояние пула, у здорового ONLINE
consumingдадапул принят кластером как рабочий носитель
capacity_pctдадазаполнение пула в процентах
sizeдадаполезная ёмкость, за вычетом доли избыточности
node_idда—номер текущего обслуживающего узла пула
nodeid—дато же поле без подчёркивания в имени
size_raw—дасырая ёмкость, сумма дисков пула
used—дазанято данными
free—даостаток полезной ёмкости
provisioned—дасумма заявленных размеров датасетов пула
provisioned_pct—даотношение provisioned к полезной ёмкости
scrubbing—даидёт проверка целостности
resilvering—даидёт восстановление избыточности
lif—дасетевой адрес, по которому доступен пул

Разница в имени поля узла (node_id против nodeid) — свойство ответов, а не опечатка документации: клиент, разбирающий оба метода, должен знать оба имени.

Состав ответа живых методов​

Пулы узла: pools-list​

Ключ объекта data — имя пула. Поля записи:

allocated capacity checkpoint comment dedupditto dedupratio expandsize
fragmentation freeing guid health leaked nodeId readonly size

Смысл ключевых полей: allocated — занято, capacity — заполнение в процентах, fragmentation — фрагментация в процентах, dedupratio — коэффициент дедупликации, expandsize — доступное расширение, readonly — режим только чтения, freeing — объём в процессе освобождения, leaked — потерянные блоки.

Свойства пула: pools-get​

Объект data отдаёт полный набор свойств пула ZFS:

allocated altroot ashift autoexpand autoreplace autotrim bootfs cachefile
capacity checkpoint comment compatibility consuming dedupditto dedupratio
delegation expandsize failmode fragmentation free freeing guid health
leaked listsnapshots load_guid maxblocksize maxdnodesize multihost name
readonly resilvering scrubbing size tname version

К полям карты здесь добавляются свойства самого пула: ashift — размер блока пула, autoexpand, autoreplace, autotrim — автоматические расширение, замена диска и TRIM, failmode — поведение при отказе, version — версия пула, load_guid — идентификатор текущей загрузки пула.

Свойства датасета: filesystems-get и filesystems-set​

Ответ filesystems-get содержит fs_name — полное имя датасета вида pool-a/vm-100-disk-0 — и объект properties. В ответе filesystems-set диспетчер поле fs_name вырезает, остаётся только properties. Поле result.code тоже разное. У filesystems-get диспетчер проставляет 1, у filesystems-set код приходит от Storage-агента без изменений.

Состав properties:

available checksum compression compressratio context copies createtxg
creation dedup defcontext encryption fscontext guid inconsistent keyformat
keylocation logbias logicalreferenced logicalused mlslabel objsetid
pbkdf2iters pbkdf2salt primarycache readonly redacted redundant_metadata
refcompressratio referenced refreservation reservation rootcontext
secondarycache snapdev snapshot_count snapshot_limit unique used
usedbychildren usedbydataset usedbyrefreservation usedbysnapshots
useraccounting volblocksize volsize written

Поля, по которым чаще всего идёт разбор:

ПолеСмысл
volsizeзаявленный размер тома — то, что видит гостевая система
volblocksizeразмер блока тома
usedсколько датасет занимает в пуле сейчас
usedbydatasetиз этого — доля самих данных
usedbysnapshotsиз этого — доля, которую держат снимки
snapshot_countчисло снимков датасета
snapshot_limitпредел числа снимков, -1 — без предела
logicalusedобъём данных до сжатия
compressionалгоритм компрессии, например lz4 или zstd
compressratioчто дало сжатие
dedupдедупликация датасета
encryptionшифрование датасета
availableдоступный датасету остаток
readonlyрежим только чтения
reservationзарезервированный объём
refreservationрезерв под собственные данные датасета

Коды ошибок​

КодСообщениеМетодыЧто означает
-403Access deniedвсе методы группыуровня роли не хватает либо запрошен чужой ВЦОД
-21ошибка базыpool-mapдиспетчер не прочитал карту из базы
-29Unable to obtain pool map datapool-map-by-guidошибка базы либо в кластере нет ни одного пула
-23текст ошибки ретрансляцииpools-listзапрос не ушёл на узел
-24nodeId is not present in the clusterpools-listузла с таким номером в кластере нет
-25Pool is not present on the requested nodepools-listузел ответил без данных о пулах
-33текст ошибки ретрансляцииpools-getзапрос не ушёл на узел
-34nodeId is not present in the clusterpools-getузла с таким номером в кластере нет
-35Pool is not present on the requested nodepools-getузел ответил без данных о пуле
-57param guid has bad valuefilesystems-getнегодный guid либо сбой ретрансляции
-58Dataset does not exist at users scopefilesystems-getдатасета нет либо он принадлежит другому ВЦОД
-53Unable to locate the datasetfilesystems-getв базе диспетчера у строки датасета пусто имя
-54Unable to locate the pool of the datasetfilesystems-getпулу датасета не назначен обслуживающий узел
-86param guid has bad valuefilesystems-setнегодный guid либо сбой ретрансляции
-87Filesystems methods has not been enabledfilesystems-setфича filesystem_options в кластере выключена
-88Dataset does not exist at users scopefilesystems-setдатасета нет либо он принадлежит другому ВЦОД
-83Unable to locate the datasetfilesystems-setв базе диспетчера у строки датасета пусто имя
-84Unable to locate the pool of the datasetfilesystems-setпулу датасета не назначен обслуживающий узел

Негодный nodeId отсекает валидатор параметров. Клиент получает -32602 Invalid params раньше, чем запрос дойдёт до обработчика метода.

Две пары кодов покрывают по два разных случая каждая: -57 и -86 — негодный guid и сбой ретрансляции; -58 и -88 — отсутствующий и чужой датасет. Последняя пара такова намеренно: существование датасета другого ВЦОД не раскрывается.

Соответствие колонок интерфейса​

Таблица ZFS pools на табе Storage Resources повторяет поля карты пулов. Точную привязку колонок держит интерфейс; ниже — поле, которое несёт ту же величину.

КолонкаПоле карты
GUIDguid
Namename
Healthhealth
Consumingconsuming
Scrubbingscrubbing
Resilveringresilvering
Current nodenodeid
Capacity (RAW)size_raw и capacity_pct

Пример​

Сквозной проход: снять карту, взять из неё пул, спуститься до свойств его датасета.

{"jsonrpc": "2.0", "method": "pool-map-by-guid", "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

Из ответа взяты "nodeid": 5 и "name": "pool-a". Запрашиваем свойства пула:

{"jsonrpc": "2.0", "method": "pools-get", "params": {"nodeId": 5, "name": "pool-a"}, "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

Затем свойства датасета диска, лежащего в этом пуле:

{"jsonrpc": "2.0", "method": "filesystems-get", "params": {"guid": "12345"}, "id": "cbf4478c-84b5-45ac-97cd-0390d7190585"}

Ожидаемо: в финальном ответе fs_name начинается с pool-a/ — датасет действительно лежит в запрошенном пуле.