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

Журнал изменений

1.1.1 — 2026-09-04

Исправления

  • Устранена паника ZRANDMEMBER на слишком большом count
  • Исправлено поведение set get с ключом нестрокового типа
  • Исправлена обработка отрицательных таймаутов в блокирующих командах
  • Добавлено возвращение элементов при упавшей вставке в *lmove
  • Исправлен выбор ключа в *lmpop
  • Устранена паника BZPOPMIN на опустошённом ключе

Тестирование

  • Выбор слота переведён на все диапазоны мастера
  • Убран пропуск тестов pushx в тестсьюте Redis
  • Добавлен just-рецепт запуска тестов на версию resp-протокола

Прочее

  • Rust обновлён до 1.98.1
  • Пайплайн унифицирован с остальными плагинами
  • Исправлена генерация ченжлога для сообщения Бендера
  • Удалён ненужный префикс в ссылке Бендера

1.1.0 — 2026-08-26

Новая функциональность

  • Добавлена команда hello

Новая функциональность (CLI)

  • Добавлено подтверждение --overwrite именем picodata-кластера
  • Добавлена потоковая миграция больших коллекций

Исправления

  • Подсчёт длины списка переведён на чтение счётчика в метаданных
  • Исправлено поведение LPUSHX на ключе другого типа: теперь возвращается WRONGTYPE
  • Убрано требование наличия дефолтного юзера на старте плагина
  • Исправлен подсчет pubsub-подключений и перенаправление pubsub-запросов
  • Максимальный размер кортежа в локальном кластере выставлен в 512MB
  • Ограничty rank сверху и снизу в lpos
  • Убрана паника в srandmember при передаче больших чисел
  • Исправлено поведение hset с существующие полями
  • Исправлено поведение zincrby в случае, если ключ не существовал
  • Исправлено поведение zrank с флагом withscores в случае отсутствующего множества
  • Формат вывода bzmpop и zmpop приведён в соответствии с Redis
  • Исправлено поведение SMOVE в соответствии с тестами Redis
  • Исправлено сообщение ошибки при получении неизвестного флага в SET
  • Добавлена явная проверка на дефолтный пароль для md5 и chap-sha1
  • Исправлено создание веток на поддержку
  • Добавлена явная проверка на дефолтный пароль для md5 и chap-sha1
  • Исправлены различные ошибки в аутентификации и авторизации
  • Исправлен путь генерации файлов спецификации в radix-commands
  • Исправлен подсчет результата в del для хешей
  • Флаг о секции radix в info выставлен в false для compatible манифестов

Исправления (CLI)

  • Добавлена валидация SRC_URL/DST_URL при разборе аргументов

Производительность

  • LRANGE переведён на использование seek по TREE-индексу

Документация

  • Добавлен ADR о потоковой миграции больших коллекций
  • Исправлены неточности с AUTH в пользовательской документации
  • Добавлена пользовательская документация по AUTH в 1.0.5

Внутренние улучшения

  • Пользователь по умолчанию переименован в default
  • Логика auth в общей обработке команд вынесена в отдельные функции
  • Изменена сигнатура set_connection_user_name
  • Битовая маска доступа к БД вынесена в отдельное поле контекста подключения
  • Импорт redis-protocol унифицирован с другими членами воркспейса

Тестирование

  • Флакающий тест тестсьюта Redis linked lmoves пропущен
  • Добавлены ссылки на тикеты в тестсьют Redis
  • Отформатирован тестсьют для set'ов
  • Расширен тестсьют incr
  • Переписана система задания тестсьюта Redis на toml-конфиги
  • Тесты redis-protocol переведены на HSET с HMSET
  • Добавлен прогон тестов для redis-protocol
  • Исправлен выбор слота в тестах реплик
  • Обновлён список проходящих Redis-тестов
  • TestRedisMultiDiffBucket тест переведён на ту же модель, что и остальные multi-тесты

Тестирование (CLI)

  • Добавлены тесты подтверждения миграции

Прочее

  • Обновлена ссылка на апи Telegram
  • Добавлено сохранение артефактов для тестов миграции
  • Добавлен линтер сообщений коммитов
  • Версия локального redis унифицирована для кластера и одного инстанса
  • Исправлены правила автоматического повтора в Gitlab
  • Запуск Redis-тестов ограничен одним инстансом
  • Добавлена сборка под debian:trixie, ubuntu:resolute и fedora:44
  • Ограничен список ОС для джобы deploy-certified-build
  • Указана версия для главного крейта
  • Автоматизирован процесс релиза
  • Добавлен файл со списком авторов плагина
  • Унифицировали версии для всех компонент
  • Убран запрет на non-protected ветки в CI
  • Добавлена сборка всех таргетов в just build
  • Добавлена джоба, которая падает на указанных ветках, если код запушили вручную
  • Изменен рецепт бампа ченджлога для удобства
  • Возвращен just-рецепт для обновления Redis-тестов
  • Изменено правило запуска в CI сборки образа buildkit-jq:latest
  • Улучшены сообщения об ошибках в auth тестах
  • Удалено скачивание riot из нашего докер-образа redis
  • Удалена job'а, тестирующая миграцию с помощью RIOT
  • Добавлен кеш скомпилированных бинарей в CI
  • Rust обновлён до 1.97
  • Удалена сложная система фич из redis-protocol
  • Удалён неиспользуемый код из redis-protocol
  • Фаззинг redis-protocol перенесён в корень репозитория
  • Унифицированы номера версий всех крейтов Radix
  • Обновлены зависимости
  • Унифицировано управление зависимостями
  • Удалён неиспользуемый скрипт
  • В redis-protocol включены все необходимые фичи по умолчанию
  • Добавлена просьба не удалять автора redis-protocol
  • Удалён CI-конфиг redis-protocol
  • Выключены cargo-тесты redis-protocol
  • Удалена ошибочная генерация junit-тестов для интеграционных тестов
  • Обновлены сборочные образа до 26.1.5
  • Добавлена джоба для прогона Redis-тестов
  • Добавлены повторные прогоны CI джобов при ошибке раннера
  • Убрана часть переписанных схем генерации
  • Добавлена генерация команд из спеки Redis
  • Ветка release/1.0 добавлена в cargo-deny-scheduled
  • Исправлено создание веток на поддержку
  • Улучшена конфигурация окружения в .envrc
  • Изменены зависимости джобы deploy
  • Обновлены скрипты генерации журнала изменений
  • Добавлена джоба для регулярной проверки сборки докер-образов

Сборка

  • Добавлена проверка всего кода redis-protocol
  • Убрана проверка наших лицензий в redis-protocol
  • Форкнут redis-protocol.rs

1.0.6 — 2026-07-21

Новая функциональность

  • Добавлена команда hello

Исправления

  • Добавлена явная проверка на дефолтный пароль для md5 и chap-sha1
  • Различные исправления и улучшения аутентификации и авторизации

Внутренние улучшения

  • Set_connection_user_name теперь принимает String
  • Битовая маска доступа к БД вынесена в отдельное поле контекста подключения

Тестирование

  • TestRedisMultiDiffBucket тест переведён на ту же модель, что и остальные multi-тесты

Прочее

  • Улучшены сообщения об ошибках в auth тестах
  • Удалено скачивание riot из нашего докер-образа redis
  • Удалена job'а, тестирующая миграцию с помощью RIOT
  • Rust обновлён до 1.97
  • 👷 ветка release/1.0 добавлена в cargo-deny-scheduled

1.0.5 — 2026-06-29

Новая функциональность

  • Реализованы команды LATENCY, SLOWLOG, CLIENT
  • Изменено поведение AUTH и ACL для большего соответствия Редису
  • Добавлен abi модулей

Новая функциональность (CLI)

  • Реализована команда migrate-down

Исправления

  • Информация о Radix и Picodata вынесена в отдельную секцию INFO
  • Исправлены индексы на _radix_ssubscriber в БД 8 и 9
  • Auth_password_enforce_lowercase выставляется в TRUE после создания пользователя
  • Исправлено поведение SET с флагами NX и GET
  • Блокирующие команды больше не создают локи в транзакциях
  • Поведение LRANGE приведено в соответствии с Redis
  • Поведение GETRANGE унифицированно с Redis
  • Добавлена проверка на переполнение в INCR-командах
  • Исправлено превращение nil в false в Lua-скриптах
  • Исправлен тип, возвращаемый redis.pcall
  • Исправлено сообщение об ошибке NotInteger
  • В Lua вынесена функция setmetatable
  • Добавлено превращение хеша в нижний регистр перед поиском в EVALSHA
  • Изменены RESP-типы в командах LPOP, RPOP
  • Команды LPOP/RPOP теперь выставляют мета-поле count в типе
  • Исправлено поведение hmget — теперь команда всегда возвращает список
  • Исправлена команда CLUSTER SHARDS
  • Увеличен response_timeout до 5с в CI-окружении
  • Исправлено получение cluster bus port
  • Исправлена работа с glab и jq

Производительность

  • ⚡ применён locally/globally-приём на flush и flushall

Документация

  • Добавлен ADR на команды категории geo

Внутренние улучшения

  • Clippy-правки в radix-acl и radix-cli
  • Рефакторинг слоя репозиториев

Тестирование

  • Типизированные хелперы изменения конфигурации
  • Заменён pgx на драйвер picodata-go
  • Добавлен тест на идентичность схем всех баз данных
  • Переписан тест на downgrade/upgrade
  • Helper.go выделен в отдельный модуль
  • Добавлена заглушка для команд config
  • Добавлена заглушка команды function flush для запуска редис-тестов
  • Добавлен рецепт запуска редис-тестов
  • Добавлен рецепт generate::redis-tests-update для вендоринга тестов Redis
  • Переработаны тесты на pubsub
  • Удалён дублирующий тест module_dict_api_selftest_passes
  • ✅ добавлена отладочная информация в тестирование миграций

Прочее

  • ✅ добавлен линтер на синхронность блоков install_sql в топологиях
  • Обновлены сборочные образа до 26.1.4
  • Добавлен таргет standalone_compatible
  • Обновлены хедеры лицензий
  • Временно убраны бенчмарки из CI
  • Исправлена ошибка из-за выбора RESP3 по умолчанию в тестах миграции
  • Выделили отдельные правила запуска проверок по расписанию
  • Исправлена джоба test-migration
  • Исправили авторизацию для glab

Build

  • 👷 добавлены проверки компилируемости тестов в ранние стадии CI
  • Добавлен отдельный integration рецепт в justfile
  • ⬆️ обновлены зависимости
  • Исправлено определение версий для тестов на даунгрейд

Vendor

  • 🤖 обновлены тесты Redis до 8.8.0

1.0.4 — 2026-05-27

Новая функциональность (CLI)

  • Добавлена миграция данных в radix-cli

Исправления

  • Исправлен неверный подсчет значения курсора в SCAN
  • Исправлен лишний пробел в выводе master в cluster shards

Документация

  • Добавлена документация к radix-cli
  • Добавлен АДР о совместной работе AUTH и подсистемы ACL
  • Добавлен раздел о работе с merge request'ами

Прочее

  • Упаковка radix-cli по аналогии с ouroboros-cli
  • Разрешена лицензия BSL-1.0
  • Исправлен python → python3 в lint.just, обновлены метаданные сертификации
  • Возвращена явная сборка radix-cli перед упаковкой плагина
  • Добавлен CI для radix-cli
  • Обновлены cliff конфиги под radix-cli
  • Добавлена джоба для очистки веток
  • Джоба с тикетом на документацию переведена на glab
  • Автоматизировано создание веток поддержки
  • Замёржили авторизацию гитлаба и основного репозитория для докера
  • Перевели CI с событий на ветках на события на MR'ах

1.0.2 — 2026-05-13

Прочее

  • В test-unlogged добавлен -failfast
  • Мигрировали сборку Docker-образов с Kaniko на BuildKit rootless

Build

  • Выделили версию плагина в Dockerfile
  • Исправили детект версии для теста даунгрейда

1.0.1 — 2026-05-13

Исправления

  • Команды PING и INCRBYFLOAT приведены в соответствие с Redis
  • Поправлено превращение структур из Lua в RESP2
  • Исправлена интерполяция переменных в ошибках в migration_controller
  • Исправлено использование стореджей в транзакциях
  • Исправлен учет шард подписок с реплики
  • Исправлено обновление статистики по ключам при обращениях к виртуальной БД
  • Исправлено ожидание уже завершенных файберов при дропе листенера
  • Поправлен вывод списков в командах EVAL

Документация

  • Добавлены полные скрипты для примеров в документации
  • Добавлена информация по поводу несовместимости старых конфигурационных файлов в пользовательской документации

Внутренние улучшения

  • Обновлена логика Lua-скриптов

Тестирование

  • Добавлены тесты на статистику spubsub

Прочее

  • Добавили детектор сломанных записей в поставку
  • 👷 добавили standalone-докер образ для быстрого тестирования

Build

  • ⬆ добавили детектор коррапченных данных

Lint

  • Исправили заголовки лицензий в детекторе

1.0.0 — 2026-04-30

Новая функциональность

  • Добавлена генерация и валидация ACL-категорий
  • Добавлена статика eviction
  • Убрано разделение на acl и auth, теперь включение авторизации подразумевает включение ACL
  • Добавили сборку докер-образа на релизе
  • Поправили работу выключенного вытеснения, теперь это noop
  • Реализована проверка доступа по ACL
  • Используем машинерию Picodata для tcp
  • Добавлена проверка локальности кода и данных сервиса Radix
  • Добавлена возможность читать метаданные о сервисах плагинов
  • Добавлен валидатор контекста миграции и настройка журналируемости системных таблиц
  • Добавлена настройка scatter_gather
  • Убрано двойное чтение таблицы types при вытеснении
  • Добавлено обращение к LFU кешу при вытеснении
  • На TTL индексах включена exclude_null настройка
  • Улучшен алгоритм выбора БД для вытеснения
  • Реализовано вытеснение с мягким ограничением по памяти
  • Добавлена инфраструктура для вытеснения устаревших данных
  • Закеширован список баз данных с признаком локальности
  • Добавлена no-op реализация CLIENT
  • Добавлена поддержка команд getdel и append
  • Добавлена проверка на несовместимые изменения через git-cliff для тестов на даунгрейд
  • Добавлена совместимость с будущими версиями Picodata
  • Добавлена статистика ACL
  • 📈 добавлены метрики request_buffer_expands и request_buffer_shrinks

Ломающие изменения

  • Внесли bucket_id в PK во всех таблицах

Исправления

  • ⚡ команда INFO ускорена
  • Не выходить из listener без отмены файбера
  • Исправлены тесты после включения флага push_result_includes_popped_items
  • Исправлен запуск теста с tls downgrade
  • Реализован правильный учет активных подписок
  • Unsubscribe без аргументов отписывает от всех существующих подписок
  • Исправили баг в декременте счётчика ключа при вытеснения
  • Исправили возвращаемое значение hmset
  • Исправлено сохранение правил ACL
  • Исправлена паника при использовании ref cell в транзакциях
  • Идентификаторы соединений теперь являются целочисленными и соответствуют Redis
  • Исправлено удаление нескольких ключей через unlink
  • Незнакомые команды теперь не отображаются в статистике
  • Подкоманды в статистике форматируются через символ |
  • Исправлена некорректная работа счетчиков в статистике
  • Usec и usec_per_call теперь считаются корректно
  • Исправлен пустой вывод в INFO commandstats
  • Исправлена неверная конвертация в секунды в INFO
  • Улучшена совместимость с будущими версиями Picodata
  • Исправлена конфигурация кластеров разработчиков
  • Исправил некорректный вывод TYPE для zset
  • 🔒 обновлена библиотека bytes
  • Исправлена запись нулевых данных cluster info
  • Изменена сериализация ответов GET/SET/TYPE в lua
  • Исправлено хранение строк
  • Исправлена некорректная десериализация из lua-скрипта
  • Убрано состояние Reader из публичного контракта
  • 🧵 добавлен RefCell к Crc16Hasher
  • 🩹 изменён алгоритм расширения входящего буфера
  • 🩹 изменён алгоритм определения активности бакета
  • Исправлен алгоритм уменьшения входящего буфера

Ломающие изменения

  • 💥 исправлен алгоритм вычисления RedisBucketId по ключу

Производительность

  • Применение ACL при миграции больше не ожидается глобально
  • ⚡ удалён реестр отложенных действий
  • Исправлена отправка ответов на пакетный запрос

Ломающие изменения - Добавлена оптимизация списков при помощи использования дробных чисел для индексов

Документация

  • Добавлена инструкция по настройке адресов и TLS
  • Добавили описание ситуации с пустыми паролями
  • Актуализирована пользовательская документация
  • Добавлена инструкция по экспорту метрик через redis_exporter и Prometheus
  • Добавлена инструкция по настройке Grafana с Redis Data Source
  • Добавлена статья по переносу данных с помощью RIOT
  • Изменена формулировка о неприменимости ACL к команде SELECT
  • Дополнен перечень поддерживаемых ACL команд
  • Исправлено описание вычисления актуальных прав
  • Исправлена опечатка
  • Описана разница в доступе к базам Redis vs Radix
  • Написан ADR для ACL

Внутренние улучшения

  • Удален channel-индекс на шард-подписки
  • Упрощена логика очистки подписок при обрыве соединения
  • Переписан макрос retry! с дефолтами
  • Pubsub-ы теперь используют глобальные таблицы
  • Убрали ручную сериализацию LockType и Type
  • Переименовали методы декодирования данных из Picodata
  • Переименовали в коде oset в zset
  • Заменили префикс N на суффикс Record
  • Привели имена методов к Rust naming convention
  • ToEntityKey удалён
  • Добавили отдельную структуру для первичного ключа типов
  • Добавили отдельную структуру для первичного ключа Lua-скриптов
  • Добавили отдельную структуру для первичного ключа строк
  • Добавили отдельную структуру для первичного ключа каналов
  • Добавили отдельную структуру для первичного ключа подписчиков по шаблону
  • Добавили отдельную структуру для первичного ключа подписчиков
  • Добавили отдельные структуры для первичных ключей блокировок сортированных множеств
  • Добавили отдельные структуры для первичных ключей блокировок списков
  • Добавили отдельную структуру для первичного ключа списков
  • Добавили отдельную структуру для первичного ключа упорядоченных множеств
  • Добавили отдельную структуру для первичного ключа множеств
  • Добавили отдельную структуру для первичного ключа хешей
  • Вернули Display вместо Debug для наших сущностей
  • Изменили сериализацию типа сущности или блокировки на u8
  • Реализовано zero-copy чтение строковых полей из Tuple
  • Унифицировали десериализацию сущностей
  • Реализовали ToEntityKey для всех сущностей
  • Реализована возможность ленивой десериализации сортированных множеств
  • Реализована возможность ленивой десериализации множеств
  • Реализована возможность ленивой десериализации списков
  • Сортированные множества переведены на трейты с отдельных типов
  • Множества переведены на трейты с отдельных типов
  • Списки переведены на трейты с отдельных типов
  • Реализована возможность ленивой десериализации блокировок упорядоченных множеств
  • Реализована возможность ленивой десериализации блокировок списков
  • Реализована возможность ленивой десериализации хешей
  • Реализована возможность ленивой десериализации каналов
  • Реализована возможность ленивой десериализации lua скриптов
  • Реализована возможность ленивой десериализации подписок по шаблону
  • Реализована возможность ленивой десериализации подписок
  • Реализована возможность ленивой десериализации типов
  • Реализована возможность ленивой десериализации строк
  • rtype вынесен в отдельный модуль
  • Снизим уровень логирования в вытеснении
  • В крейте Radix-picodata код разделён на мелкие модули
  • Код в крейте Radix разделён на несколько модулей
  • Использовали inspect_err вместо map_err
  • Удалены устаревшие аргументы в локах
  • Добавлена роль pico_metadata_reader
  • Миграции упрощены к релизу 1.0
  • Мутабельные ссылки трейта Cmd изменены на иммутабельные
  • calculate_sha1 унифицирован
  • Удалены абстракции над BytesMut
  • Удалены пробелы в конце строк в sql запросах
  • Убран избыточный pattern-matching
  • Добавлена реализация Drop для Reader и Writer
  • 🎨 упрощён код обработки входящих запросов
  • 🎨 упрощён код Shrinker
  • ♻️ добавлена обработку смены состояния бакетов
  • 🚚 lua вынесен из строковых констант в *.lua файлы
  • 💥 переписан алгоритм определения репликасета по бакету
  • ♻️ закешировано id соединения в функции его обработки
  • ⚡ закешированы инстансы Crc16Hasher
  • ⚡ изменён алгоритм вычисления репликасета по bucket_id
  • Переписан основной цикл обработки команд
  • ⬆️ крейт redis-protocol обновлён до 6.0.0
  • ⚗️ параметр соединения tcp_no_delay явно выставляется в true

Тестирование

  • Добавлены тесты на багфиксы
  • Добавлены тесты на удаление множеств и отсортированных множеств в FLUSH-командах
  • Обновлены тесты в связи с новым поведением authorization_mode и default пользователя
  • Убрали использование устаревшей настройки addr
  • Понизили watermark для более стабильной работы тестов
  • Добавлены тесты на вытеснение на кластерном режиме
  • Обновлена конфигурация тестовых стендов согласно новой валидации
  • Добавлены интеграционные тесты на eviction
  • Sentinel-тесты теперь сами накатывают конфиг, в дефолтном конфиге sentinel_enabled выставлен в false
  • Исправлено чтение ответа редиса для кастомных команд в тестах
  • Добавлен тест на status reply
  • Добавлен тест на eval целого числа

Прочее

  • 👷 исправлена сборка релизного докер-образа
  • Добавлен тест на невалидный сценарий tls
  • Выставили push_result_includes_popped_items по умолчанию в true
  • Уменьшили количество повторяемого кода в пайплайне
  • Обновили образа для тестов миграции данных
  • Изменим версию Pike в бенчмарках на 5.0.0
  • Обновили rust-edition до 2024
  • Обновили pike до 5.0.0
  • Обновим Picodata в CI до 26.1.2
  • Обновили зависимости для включения последних исправлений
  • Перевели bench джобу на unlogged таблицы
  • Обновили rust до 1.95
  • Обновили rand до 0.10.1
  • Поправим версию крейта eviction
  • Запуск всех тестов с tls
  • Исправлен запуск бенчмарков
  • Обновлён крейт unicode-segmentation до 1.13.2
  • Test-migration сохраняет артефакты после запуска
  • Все тесты в рамках CI работают с -failfast
  • Sdk обновлен до 26.1.1
  • Внесены небольшие исправления в документацию к observability
  • В гайд по observability добавлены Dockerfile и docker-compose.yml
  • Переструктурирована документация по observability
  • Увеличен интервал сбора метрик до 1 минуты
  • Удален полуживой compose в корне
  • Добавлены dev-контейнеры для сбора метрик в Redis и Radix
  • Добавлен контейнер для локальной работы с Grafana
  • Обновлён Rust до 1.94, исправлены замечания clippy
  • Обновили версии зависимостей в SBOM-файлах
  • Обновили Picodata до 25.5.9 и Pike до 3.2.1
  • Добавлена возможность запуска deploy-certified-build для ручных пайплайнов
  • Добавлена генерация SBOM-файлов для ФСТЭК-сертификации
  • 📌 зависимости обновлены до последних версий
  • Исправлен запуск бенчмарков на main
  • Улучшено использование gitlab cache для cargo
  • Добавлены контроли для ФСТЭК-сертификации
  • Добавлен пайплайн для проверки переноса данных с помощью RIOT
  • Обновлен docker-compose.yml для Redis
  • Обновлены Dockerfile в репозитории с учётом новых образов
  • Убраны лишние операции при обработке клиентского буфера
  • Явно указан идентификатор лицензии крейта colog
  • Добавлена проверка cargo deny для ФСТЭК-сертификации
  • Добавлен тир arbiter в кластер по умолчанию
  • Исключено время записи ошибки через логгер в бенчмарках
  • Добавлена сортировка результатов по имени команды в бенчмарках
  • 👷 добавлена команда lint::fix
  • 📄 обновлены лицензионные заголовки в связи с новым годом
  • Исправлен CI для ветки main
  • 📄 обновлены лицензионные заголовки в связи с новым годом

Ломающие изменения

  • Удалена очень старая настройка addr

Build

  • Исправили детектор ломающих изменений для релиза
  • Добавлена проверка на ломающие изменения в тестовые скрипты
  • Заменили луашный костыль ожидания ребаланса на Pike
  • 📦 добавлена поддержка fedora:43, alt:p11 и osnova onyx:3
  • 📦 удалена поддержка fedora:41 в связи с её EOL
  • Исправлен скрипт, ожидающий конца ребаланса
  • 📦 добавлена поддержка redos:8.0
  • Добавлен простенький детектор завершения ребаланса стораджей

0.14.1 — 2026-02-18

Исправления

  • Добавлена совместимость с будущими версиями для системных таблиц

Тестирование

  • Из TCP-сокета в случае массива вычитываются все данные

Прочее

  • Обновлены Dockerfile в репозитории с учётом новых образов
  • Обновил лицензионные заголовки в связи с новым годом

Build

  • добавлена поддержка fedora:43, alt:p11 и osnova onyx:3
  • удалена поддержка fedora:41 в связи с её EOL

0.14.0 — 2025-12-23

Новая функциональность

  • Добавлена статистика использования памяти

Исправления

  • Исправлено поведение флага push_result_includes_popped_items — теперь он влияет только на вывод
  • Исправлен вывод результата команды pico lua — теперь он включает в себя все элементы таблиц
  • Исправлен вывод ошибки pico sql — теперь выводятся все строчки, вместо только первой

Внутренние улучшения

  • Поправили заголовки лицензий в файлах и добавили в утилиту

Тестирование

  • Исправлен вывод ошибок теста на даунгрейд плагина

Прочее

  • Бенчи надо для удобства катать и на мейне
  • добавим по тесткейсу на каждый процент перформанса
  • выставим RUST_LIB_BACKTRACE в 0
  • добавил утилиту для генерации ключей в каждый слот

Build

  • вернул команды для обновления ченжлога
  • перевели сборку Radix на just

0.13.0 — 2025-11-20

Новая функциональность

  • Добавлена команда QUIT
  • Добавлены команды pico для дебага
  • Добавлена секция latency в info
  • Добавлена поддержка шардированного пабсаб
  • Добавлена поддержка rpoplpush и brpoplpush
  • Добавлены команды со структурой данных set

Исправления

  • Добавлена повторная попытка отправить запрос обновления подписчика паттерна через cas
  • Exec всегда помечает соединение как нетранзакционное
  • Исправлено поведение флага PUSH_RESULT_INCLUDES_POPPED_ITEMS: теперь он считает элементы, даже если они все улетели в блокирующую команду
  • Убрана паника при отсутствии аргументов pubsub shardnumsub
  • Исправлены команды zremrangeby*: теперь они удаляют ключ, если были удалены все его элементы
  • Исправлены команды z*store: теперь они заменяют значение ключа вне зависимости от типа
  • Исправлены команды s*store: теперь они заменяют значение ключа вне зависимости от типа
  • Исправлено удаление patsubscriber
  • Исправлена команда mset — теперь она перезаписывает значение ключа вне зависимости от типа
  • Исправлен расчёт бакета для z*store команд
  • Исправлено поведение флага ch команды zadd
  • Исправлена передача аргументов начала и конца поиска в командах zrevrange*
  • Исправлено сообщение об ошибке значения первого и последнего индексов поиска команды zrange
  • Исправлены команды eval и eval_ro — теперь они не сохраняют скрипт
  • Исправлено поведение команды lrange с отрицательными индексами
  • Добавлена сортировка значений в команде lpos и правильная обработка аргумента COUNT
  • Исправлен порядок элементов в блокирующих командах над списками при удалении справа
  • Исправлена команда hincrby — теперь она создаёт тип, если ключа не было в базе данных
  • Исправлены команды ttl и pttl — теперь их результаты округляются вверх
  • Исправлены команды set, psetex, setex, setnx — теперь они перезаписывают ключ вне зависимости от типа
  • Инплейс проверки для defer модуля
  • Детализация ошибок записи в Picodata
  • Игнорирование expelled-узлов при определении режима работы
  • Запрещены команды в контексте пабсаб кроме пабсаб команд
  • Добавлена передача адреса при возврате moved ошибки
  • Исправлено поведение zrandmember в соответствии с документацией redis

Документация

  • детализировал описание настройки enforce_one_slot_transactions
  • добавили описание особенностей некоторых команд
  • добавили таймаут в 20 минут на все команды из README

Внутренние улучшения

  • исправили предупреждения rust 1.91

Тестирование

  • Добавлен тест команды quit на редисе
  • Обновлены ключи в тесте TestRedisPExpireBusyMainLoop — теперь они уникальны между клиентами
  • Добавили реакцию на PICODATA_WRITE_ERROR — переподключение
  • Обновили зависимости в тестах
  • Добавлен запуск интеграционных тестов на Redis Cluster, Redis Standalone, Radix Standalone и Radix в режиме совместимости с Redis
  • Добавил вывод отчёта о бенчмарках в гитлаб
  • Добавлена проверка одновременной работы sentinel и deprecated команд
  • Добавлен режим тестирования на реплике для чтения
  • Тест на downgrade плагина

Прочее

  • исправил сообщения на колбеках: info при успехе, warn при ошибке
  • добавлено логирование на плагин хуках
  • сделаем отдельный образ для тестов редиса
  • унифицировали установку го и версию Picodata для тестов
  • обновлён темплейт issue — теперь правильно выставляется лейбл бага

Chore

  • Удалено разделение команд на сабкоманды

0.12.0 — 2025-10-29

Новая функциональность

  • Implement cluster info
  • Добавлена команда mget

Исправления

  • Вывод значения настройки max_clients в info (498d8e9)
  • В вывод команды info server добавлены имя и uuid инстанса Picodata (417d62b)

Документация

📝 обновлена документация о процессе разработки (4713cfe)

Внутренние улучшения

Упорядочено чтение настроек на старте Radix (ec23336)

Тестирование

  • Добавлен тест вывода параметра maxclients (761fcf8)
  • Передача пути к Picodata в установке пароля в Makefile (8e86a40)

Прочее

  • Обновили SDK до 25.4.3 (8d9514e)
  • 👷 исправлен CI для ветки main (a5ff0e1)
  • Bump picodata version to 25.4.1 (cd5cd2d)

0.11.0 — 2025-09-25

Новая функциональность

  • Implement master cond
  • Echo
  • Script flush

Исправления

  • Add zset commands into eval_ro ban
  • Script flush and echo comments/panic messages
  • Set log regarding any fails (adb41a0)
  • Make the "unknown command" error message match redis'

Документация

  • 📝 улучшим конфиг для генерации ченжлога на публику

Тестирование

  • Add script flush async test (24980d7)

Прочее

  • Curlf.sh теперь в $PATH
  • 👷 бенчмарки должны запускаться автоматически
  • 👷 добавим таймстемпы в логи CI
  • 👷 не надо бенчи на тегах запускать
  • 👷 улучшим вывод сообщения о релизе в телеграм
  • Benchmark some commands in ci
  • Update the benchmarks
  • Add ci benchmarks
  • Remove debug logging

0.10.0 — 2025-09-02

Новая функциональность

  • FLUSHDB должен очищать и ordered set спейсы
  • By default auth should be disabled
  • Remove chrono
  • Implement auth method
  • Implement mset
  • Add sentinel section to info
  • Introduce sentinel
  • Introduce ordered sets
  • Implement flush && flushall
  • Split RADIX_ADDR into listen/advertise
  • Add hmget/hmset, readonly, reset, unlink cmds

Исправления

  • Явно прописываем WAIT APPLIED LOCALLY для асинхронного FLUSHDB
  • Pubsub should work with su
  • Обрабатывать ошибку "доступа нет" от ядра
  • Remove key type if the last list element was popped
  • Do not block in scripts
  • Rename timeout func
  • Reschedule list lock remove action if there are pending actions
  • Use defer
  • Remove locks if command went into a timeout (only blpop rn)
  • Do not reverse values and scores for zscan, add tests for new behaviour
  • Zscan
  • Fail on decode bucket in `get_buckets`
  • Final fixes in auth method
  • Create type on zdiffstore
  • Use instance name for replica
  • Use the original redis error for evalsha
  • Close conn on client handle return
  • Use box.info.replication to check replication status in INFO REPLICATION
  • Use cas for patsub dml ops

Производительность

  • ⚡ move debug logs to debug and raise default level to info

Документация

  • Авторизация, описание и примеры использования
  • Исправим документацию по сентинелю
  • Добавим документацию по конфигурации клиента sentinel
  • Добавим скрипт для автоматического обновления списка поддерживаемых команд

Внутренние улучшения

  • Переименуем миграции, чтобы была нумерация последовательная
  • Stringify the field name of a stat for a subtraction warning

Тестирование

  • Перепишем тесты с шелла и пайпов на psql

Прочее

  • Remove docs from gamayun scan
  • Обновим список поддерживаемых команд
  • Review fix
  • Добавим лицензию в файлы
  • Удалим docker-compose.yml из анализа гамаюна
  • License update
  • Remove unneeded dirs for gamayun
  • 📄 опечатку исправим
  • Add license-check job
  • 📄 добавил лицензию на плагин
  • Do not build in ci pipeline, block tests, until linting is done

Build

  • Remove PIKE_DATA_DIR
  • Remove TARGET_ROOT, remove unused parameters in the cluster config
  • Pack old migrations, use new migrations locally
  • Update dependencies
  • Update the makefile to use new pike features

Deps

  • Обновим Picodata до 25.3.2

0.9.0 — 2025-06-25

Новая функциональность

  • Watch empty keys too
  • Add picodata's cluster_name and cluster_uuid to server info
  • Add a config option to enforce same-slot transactions

Исправления

  • Handle all commands in transactions, even if they have no bucket_id
  • TYPE должна возвращать "none" на ключах, которых нет
  • Don't panic on empty del cmd call
  • Conn dead lock while receive on drop

Производительность

  • Implement partial list deserialization

Внутренние улучшения

  • ⬆ запускаю cargo update для обновления токио
  • ⬆ обновляю picodata-plugin до 25.2.2
  • 🚨 будем в бенчмарке использовать crypto/rand вместо math/rand

Тестирование

  • 🩹 грязный трюк с прогоном теста на тире с 1 репликасетом
  • Увеличиваем таймаут в тесте пабсаба
  • 🩹 добавить небольшой таймаут после старта кластера, чтобы он закончил с ребалансом

Прочее

  • Fetch tags for gamayun
  • Останавливаю кластер перед тем, как забрать артефакты
  • Пробуем запустить тесты ещё и на альте
  • Передадим прошлую версию в Гамаюн
  • ➖ удаляю неиспользуемые dev-dependencies
  • Wait for quality gate
  • Подставим версию 3 в Cargo.lock, ничего не сломается.
  • Удалим пароль для админского юзера из топологии
  • ⚰ удалим старые неиспользуемые луашки
  • 👷 добавляю Гамаюна

0.8.0 — 2025-06-04

Новая функциональность

  • Add more script telemetry

Исправления

  • Don't panic when downstream is not in the follow state or upstream's fiber is invalid

Документация

  • Add redis_compatibility user documentation

0.7.0 — 2025-05-28

Новая функциональность

  • Add deprecated set commands
  • Use non-blocking variants of commands in transactions
  • Implement more expire commands
  • Add expiretime
  • Make scripts transactional
  • Implement hvals

Исправления

  • Correctly close client connections on listener drop
  • 🐛 используем правильный запрос для получения информации о репликасете
  • Rust 1.87.0
  • Pop crash

Документация

  • Создаём тикет на обновление доков Radix, а не Argus
  • Обновим пользовательскую документацию

Прочее

  • ⬆ обновим плагин для Picodata до 25.2.1
  • 🔨 обновим редис до 8.0 в кластере для тестов
  • 👷 при релизе создаём тикет в Picodata на обновление документации
  • 🐛 исправим пути файлов в релизе и приложим файл от бендера всегда

Build

  • ⬆ picodata 25.1.2

0.6.1 — 2025-04-28

Документация

  • 📝 обновим документацию

Прочее

  • 👷 вернём redos

0.6.0 — 2025-04-18

Новая функциональность

  • ✨ add functions to the redis object in lua scripts, add SCRIPT LOAD, SCRIPT EXISTS commands
  • Use custom radix string type
  • Use negative indexing for lists
  • Introduce transactions

Исправления

  • 🐛 удалим падающую миграцию
  • Command processed metric
  • Deadlocks for blocking commands on same bucket
  • 🐛 бакеты из другого тира всегда удаленные
  • 🧑‍💻 исправим упаковку релиза после мержа пики
  • 🧑‍💻 исправим сообщение
  • Mem stat
  • 🚑 fix the plugin file layout for pike
  • 🚑 provide replication_factor setting in picodata.yaml

Производительность

  • Try to optimize list op

Документация

  • Опишем конфигурацию миграций в пользовательской документации

Внутренние улучшения

  • 🔊 поправим сообщение для лога, в случае ошибки

Прочее

  • 🔥 удалить лишние файлы
  • Fix path to cargo2junit
  • Fix clippy format warnings
  • 🚨 rust 1.86.0
  • 👷 используем новые образа для упаковки
  • 👷 поправим бендера в мейне
  • 👷 добавим новые ОС в процесс сборки
  • 🔨 положим редис-кластер в репу с командой для запуска
  • 🩹 match the topology with the main branch's, move env variables to topology.toml

Build

  • Используем Pike 2.1.0 для билда
  • 🩹 сделал по два репликасета на каждый тир как и в оригинальном кластере
  • ⬆ introduce pike 2.0.0

0.5.2 — 2025-03-19

Прочее

  • 🧑‍💻 добавим отлаженного Бендера

0.5.1 — 2025-03-13

Исправления

  • 🩹 проверяем на андерфлоу при вычитании на статистике

Производительность

  • ⚡ если бакет локальный, то не ходить по рпц

Документация

  • 📝 исправим разметку в readme

Тестирование

  • 👷 исправим `make test_ci`, чтобы совпадало с реальностью
  • ✅ переведём бенч на кластерный клиент

Прочее

  • 👷 отсылаем нотификацию о релизе в спецчат в телеге

0.5.0 — 2025-03-06

Новая функциональность

  • ✨ реализуем новую команду `dbsize` для проверки состояния кластера
  • 🏗 используем CRC16/XMODEM для сегментирования
  • 👷 теперь паники будут в файловых логах
  • Allow multitier mode
  • Eval

Исправления

  • Deadlock on single mode for blocking ops
  • 🐛 cluster getkeysinslot исправлена
  • 🐛 используем UUID узла и репликасета в ответе на myid, myshardid
  • 🗃 fix migrations
  • Tests data cleanup
  • Eval ptr propagation
  • Eval ptr propagation
  • Parse timeout arguments to f64 not i64

Документация

  • 📝 обновим документацию для пользователя
  • 📝 ADR для мультитирного (многорядного?) Radix

Внутренние улучшения

  • ♻ зафиксируем, что работаем только с 16384 бакетами
  • ♻ вынесем `RedisBucketId` и `PicodataBucketId` в отдельные файлы
  • ♻ режим выполнения команды не отделим от бакета выполнения команды
  • ♻ типизируем айдишники бакетов
  • ♻ переименовываем ID в Name, потому что мы использовали имена
  • ♻ адаптировал запуск к запуску в нескольких тирах

Структура кода

  • 🚨 отформатировал код
  • ♻ поправил комменты и ошибку к методу insert_patsubscriber

Тестирование

  • ✅ исправил тест на cluster nodes

Прочее

  • 👷 переедем на образ с явно выставленным стабильным растом
  • 💚 укажем полный путь до cargo2junit, пока его нет в базовом образе
  • Add warn log for attempting sub from 0 value to stat macro
  • 👷 поправим пути к карго
  • 👷 попробуем новый базовый образ для Picodata
  • Fix lints for rust 1.85
  • Rename radix nodes migration in manifest
  • Add deploy to EE repo (pdg)
  • 👷 временно разрешим тестам падать
  • ✅ запускаем тесты в ci теперь
  • 🧑‍💻 делаем удобный запуск кластера Picodata
  • Rename replace_patsubscriber to insert_patsubscriber

Bench

  • List

Build

  • `make pico_radix_release` для запуска релизного Radix
  • ⬆ обновимся до Picodata 25.1
  • На `pico_stop` убиваем Picodata из `PICODATA_BINARY_PATH`, а не просто `picodata`
  • 👷 можно запускать тесты как на CI, но локально

0.4.4 — 2025-01-13

Исправления

  • Lpop and rpop are used to panic

Прочее

  • Bump version
  • Fix lints for rust 1.84
  • Reduce unsafe usage
  • More benches
  • Stress test

Bench

  • Add benches for hash commands

0.4.3 — 2024-12-24

Новая функциональность

  • Implement incrs

0.4.1 — 2024-12-18

Новая функциональность

  • Implement writeln_crlf
  • Support expire for hash and list

Исправления

  • 🐛 исправим всё-таки 62, надо возвращать в протоколе правильно ошибку
  • Declare dummy RUSAGE_THREAD for macos

Структура кода

  • Melformed -> malformed

Build

  • Добавим возможность запустить вторую копию

0.4.0 — 2024-12-10

Новая функциональность

  • 🔊 фильтрация логов для бедных
  • Добавил версию Picodata в вывод `info server`
  • Implements cluster ids commands
  • Implement getkeysinslot
  • Implement cluster keyslot
  • Reduce size of persistence section
  • Use migrations for redis db creation
  • Implement keyspace info section
  • Implement replication info section
  • Change Astralinux from Orel to 1.7, 1.8 version added
  • Collect memory stat
  • Add cmdstat to info
  • Add client configuration. support input/output buffer shrinks, preallocate and reuse client output buffer
  • Add redis insight support
  • Use subkey in bucket calculation
  • Implement info stub
  • Implement missing list commands
  • Implement (b)lmpop
  • Implement (b)lmove
  • Implement rpush
  • Implement lpop and rpop
  • Implement basic list commands
  • Use borrowed string in a stored type

Исправления

  • RESP is using CRLF as line ending
  • Delete type on del call

Производительность

  • Мелкая оптимизация при создании хешсета
  • Fetch replicasets only for broadcasted commands
  • Increase performance for hset command

Документация

  • 📝 актуализируем документацию

Внутренние улучшения

  • ♻ сделали более явным клонирование
  • 🎨 разбил либу инфо на более мелкие и локализованные файлы
  • 🎨 перенес отдельные части `info` на уровень модуля этой команды
  • 🚨 удовлетворил требования нового стабильного раста

Прочее

  • 🔖 нарежем 0.3.0 релиз
  • Change type error message
  • Log improvements
  • 👷 используем шаблонный CI
  • Add perf results in commands docs

Build

  • 👷 поправил докерфайлы для установки всегда новой Picodata
  • ➕ переводим плагин на picodata-plugin сдк

0.2.0 — 2024-10-04

Новая функциональность

  • Nonblocking gather executor
  • Write to pubsub locally if possible
  • Implement pubsub commands
  • Reuse user connection buffer in command decode

Исправления

  • 🩹 добавил скрипт по умолчанию для Picodata

Производительность

  • ⚗ add scripts for running performance tests

Документация

  • 💬 save supported commands into docs
  • 🔨 good enough Readme

Структура кода

  • 🎨 добавил символ конца строки в конец моих файлов
  • 🎨 add checks module to make code readable

Прочее

  • ✨ Заливаем артефакты в нексус.
  • Init python tests
  • Rename redisproto to radix
  • Change name of package
  • 🔨 set up docker compose for every artifact

0.1.1 — 2024-09-13

Новая функциональность

  • Support single node mode

Исправления

  • Execute set on master
  • Replicaset decode
  • Connection fibers leak

Документация

  • 🔨 good enough Readme

Прочее

  • Add pack for all supported by picodata OS

0.1.0 — 2024-09-09

Новая функциональность

  • Support eval command without enabling it
  • Use bytes crate to use views in original clients buffer
  • Implement scan and hscan command
  • Redisproto

Исправления

  • Decode tests

Внутренние улучшения

  • Fix rust toolchain to stable
  • Clippy warnings

Прочее

  • Proper layout again, let's hope, it's final version.
  • Fix folder layout of artifacts.
  • Fix artifacts collection
  • Skip everything on main branch, because we use fast-forward only.
  • Main should build artifacts always
  • Init
  • Lints
  • Remove useless clusters dir
  • Basic Makefile