diff --git a/SHiNE-server/shine-server-db/src/main/java/shine/db/channels/ChannelNameRules.java b/SHiNE-server/shine-server-db/src/main/java/shine/db/channels/ChannelNameRules.java index c810da2c..84bc7807 100644 --- a/SHiNE-server/shine-server-db/src/main/java/shine/db/channels/ChannelNameRules.java +++ b/SHiNE-server/shine-server-db/src/main/java/shine/db/channels/ChannelNameRules.java @@ -10,8 +10,6 @@ public final class ChannelNameRules { Pattern.compile("^[A-Za-z0-9_-]+$"); private static final Pattern PUBLIC_CHANNEL_ALLOWED_PATTERN = Pattern.compile("^[A-Za-z0-9_-]+$"); - private static final Pattern DIGITS_ONLY_PATTERN = - Pattern.compile("^[0-9]+$"); private ChannelNameRules() {} @@ -43,9 +41,6 @@ public final class ChannelNameRules { if (!PUBLIC_CHANNEL_ALLOWED_PATTERN.matcher(normalized).matches()) { throw new IllegalArgumentException("channelName contains unsupported characters"); } - if (DIGITS_ONLY_PATTERN.matcher(normalized).matches()) { - throw new IllegalArgumentException("channelName must not contain only digits"); - } return normalized; } diff --git a/TODO/medium/2026-07-22_переход_с_sqlite_на_postgresql.md b/TODO/medium/2026-07-22_переход_с_sqlite_на_postgresql.md index 3be89265..95b90fc8 100644 --- a/TODO/medium/2026-07-22_переход_с_sqlite_на_postgresql.md +++ b/TODO/medium/2026-07-22_переход_с_sqlite_на_postgresql.md @@ -34,3 +34,26 @@ - Серверную документацию по БД и миграциям. - Инструкции по локальному запуску сервера. - Скрипты деплоя и настройки окружения. + +## Что временно отключено и что вернуть потом + +- В серверном runtime временно снята проверка `channelName must not contain only digits` + в `SHiNE-server/shine-server-db/src/main/java/shine/db/channels/ChannelNameRules.java`. +- Причина: на боевой истории уже есть блоки с числовыми именами каналов, и сервер + должен уметь с нуля восстановить `blockchain_state` и `.bch`, подтягивая старые + блоки от других sync-серверов. +- Что осталось как текущее поведение: + - UI по-прежнему не даёт создать новый канал только из цифр; + - сервер принимает такие имена, чтобы не ломать replay старых блоков. +- Что нужно сделать отдельным следующим шагом: + - вернуть серверное продуктовое правило для новых каналов; + - сделать это совместимо со старой историей, чтобы импорт/реплей существующих + блоков не падал на старых числовых channel name. +- Какие документы обновить при возврате: + - `docs/libs/shine-server-bd/POSTGRES_RUNTIME_SCHEMA_V1.md`; + - UI/серверные документы по правилам имён каналов, если появится отдельная спецификация. +- С какого сценария продолжать: + - повторить cold start тест на `t2`: пустая PostgreSQL schema, удалённые `.bch`, + новый запуск, ожидание полной синхронизации от `t1`/`t3`. +- Последняя полная рабочая точка с этим временным компромиссом: + - ветка `migration-postgres`, коммит будет создан после этой записи. diff --git a/VERSION.properties b/VERSION.properties index 3afb31a8..8e9a67ec 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ client.version=1.2.354 -server.version=1.2.330 +server.version=1.2.331 diff --git a/docs/libs/shine-server-bd/POSTGRES_RUNTIME_SCHEMA_V1.md b/docs/libs/shine-server-bd/POSTGRES_RUNTIME_SCHEMA_V1.md index 520038e0..dd5c441d 100644 --- a/docs/libs/shine-server-bd/POSTGRES_RUNTIME_SCHEMA_V1.md +++ b/docs/libs/shine-server-bd/POSTGRES_RUNTIME_SCHEMA_V1.md @@ -69,6 +69,19 @@ Это отдельные механические шаги поверх уже утверждённой схемы. +## Совместимость со старыми блоками каналов + +В runtime-сервере сознательно нет жёсткой серверной проверки +`channelName must not contain only digits`. + +Причина: в уже существующей истории блокчейна есть каналы с числовыми именами, +и при холодном восстановлении сервера с пустой БД и без `.bch` такие блоки должны +успешно переигрываться от других sync-серверов. + +Сейчас правило "новый публичный канал не должен состоять только из цифр" остаётся +на уровне UI/продуктовых требований и должно быть позже возвращено на сервере +отдельным совместимым способом, который не ломает replay исторических блоков. + ## Инициализация пустой БД Если сервер подключается к PostgreSQL через `db.url=jdbc:postgresql:...` и в выбранной БД ещё нет таблицы `db_schema_version`,