
Neo SPCC опублікувала скоординовану хвилю релізів NeoFS, очолювану NeoFS Node v0.51.0, яка містить зміни на рівні протоколу, зокрема змінні контейнери NEP-11, синхронні операції з контейнерами та впровадження токена сеансу v2. Супровідний NeoFS SDK Go v1.0.0-rc.17 забезпечує базову бібліотечну підтримку цих функцій, тоді як XK6-NeoFS v0.2.1 містить виправлення стабільності та оновлення залежностей розширення для навантажувального тестування. Оновлення TestNet вже завершено, а MainNet очікується найближчими днями.
Вузол NeoFS версії 0.51.0
Випуск NeoFS Node версії 0.51.0 містить низку важливих змін у протоколі. Контейнери тепер представлені як змінні токени NEP-11 у ланцюжку, причому як вузли сховища, так і вузли внутрішнього кільця підтримують нові методи контрактів контейнерів, включаючи createV2 та getInfo, а також методи керування атрибутами setAttribute та removeAttribute, що забезпечує багатший API керування контейнерами в ланцюжку. Відповідні команди CLI для встановлення та видалення атрибутів було додано до розділу контейнера.
Операції з контейнерами Put, Delete та SetExtendedACL тепер обробляються вузлами сховища синхронно, замінюючи попередній асинхронний потік. Ця зміна спрощує логіку на стороні клієнта, усуваючи необхідність опитування або очікування на остаточну узгодженість. Контейнери також можна заблокувати від видалення, встановивши атрибут __NEOFS__LOCK_UNTIL, при цьому вузли сховища повертатимуть новий статус CONTAINER_LOCKED під час спроби видалення заблокованого контейнера.
Токен сесії версії 2 впроваджено в стеку. Як вузли Inner Ring, так і вузли сховища тепер приймають новий формат токенів для операцій з контейнерами та об'єктами, а також доступна нова команда CLI для генерації токенів версії 2. Об'єкти блокування та об'єкти tombstone, що використовують версії API старіші за 2.18, більше не приймаються.
Що стосується продуктивності, оптимізація метабази забезпечує швидше видалення об'єктів шляхом переробки схеми блокування інформації та видалення застарілої структури “кладовища”. Покращення служби об'єктів спрямовані, зокрема, на контейнери зі стираним кодом: частини EC тепер розміщуються одночасно, порядок сегментів узгоджений між операціями читання та запису, а запити на необроблені дані підтримуються в контейнерах EC. Також виправлено продовження запиту RANGE у сценаріях EC з кількома правилами. Тепер підтримується отримання об'єктів $LINK у контейнерах EC, а об'єкти з розділенням за розміром залишаються доступними, навіть коли об'єкт $LINK недоступний. Розміщення об'єкта в сегменті було оптимізовано, а об'єкти, запитувані на видалення через службу керування, тепер видаляються негайно, а не ставляться в чергу на збирання сміття.
Кілька застарілих параметрів конфігурації Inner Ring було видалено, зокрема fschain_autodeploy, without_mainnet, governance.disable, fee.main_chain та contracts. Оператори вузлів, які оновлюються з версії 0.50.2, повинні видалити ці параметри зі своїх файлів конфігурації IR, оскільки їхня присутність перешкоджатиме запуску вузла. Автоматичні міграції метабази з версій 3 та 4 також було видалено; оператори, які все ще використовують ці версії, повинні повторно синхронізуватися або мігрувати за допомогою NeoFS Node v0.50.2 перед оновленням.
Виправлення помилок вирішують проблему паніки внутрішнього кільця під час коректного завершення роботи, неправильного зберігання списку вузлів IR через контракт netmap замість RoleManagement, блокування на виході з вузла сховища в рідкісних сценаріях збирання сміття та неправильного збереження прострочених частин EC на вузлах сховища.
NeoFS SDK Go версії 1.0.0-rc.17
Випуск SDK забезпечує основу на рівні бібліотеки для змін протоколу в Node v0.51.0 та сумісний з NeoFS API 2.21. Повністю реалізована підтримка сесійного токену версії 2, що дозволяє клієнтам створювати та використовувати новий формат токенів як для контейнерних, так і для об'єктних операцій.
Новий API керування атрибутами контейнера впроваджує методи для встановлення та видалення атрибутів контейнера, а також набір нових відомих імен атрибутів. Сам API контейнера став синхронним, що відповідає змінам у поведінці вузла. Пул підключень тепер використовує ковзне вікно для підрахунку помилок, що покращує рішення щодо балансування навантаження в умовах періодичних збоїв.
API створення об'єктів було рефакторовано таким чином, що object.New більше адаптовано для створення нових об'єктів, а попередній метод InitCreation було видалено. Для типів OID, CID та Address було додано методи тристороннього порівняння, що забезпечує більш виразні операції сортування та впорядкування.
У цьому випуску також виправлено неправильну обробку статусу для неповних відповідей та оновлено залежність NeoGo до версії 0.116.0.
XK6-NeoFS версії 0.2.1
Розширення NeoFS для навантажувального тестування k6 отримало випуск обслуговування, що стосується стабільності та справедливості. Вирішено проблему, що виникала під час тестів S3, а також усунено помилкові попередження про контрольну суму, що з'являлися під час виконання тесту.
Розподіл навантаження між цільовими вузлами тепер більш справедливий, що зменшує ефекти гарячих точок під час бенчмаркінгу. Вимоги до збірки підвищено до Go 1.24, а залежності оновлено по всій платі, включаючи оновлення NeoFS SDK Go до версії 1.0.0-rc.17, AWS SDK до версії 1.39.0 та сам фреймворк k6 з версії 0.51.0 до версії 1.3.0.
Інструкції з оновлення
Операторам вузлів слід дотримуватися оновлення TestNet та готуватися до розгортання MainNet, яке очікується найближчим часом. Оператори Inner Ring повинні перевірити свої файли конфігурації та видалити застарілі опції, перелічені вище, перед оновленням до версії 0.51.0. Операторам вузлів зберігання даних, які все ще використовують метабазу версії 3 або 4, слід завершити міграцію через версію 0.50.2 перед цим оновленням, оскільки автоматичні шляхи міграції було видалено.
Повні журнали змін та матеріали релізу можна знайти за посиланнями нижче:
https://github.com/nspcc-dev/neofs-node/releases/tag/v0.51.0
https://github.com/nspcc-dev/neofs-sdk-go/releases/tag/v1.0.0-rc.17
https://github.com/nspcc-dev/xk6-neofs/releases/tag/v0.2.1
