Сервер: разрешить replay старых числовых каналов

This commit is contained in:
AidarKC
2026-07-26 16:57:04 +04:00
parent 91e7239866
commit b5116474c7
4 changed files with 37 additions and 6 deletions
@@ -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;
}
@@ -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`, коммит будет создан после этой записи.
+1 -1
View File
@@ -1,2 +1,2 @@
client.version=1.2.354
server.version=1.2.330
server.version=1.2.331
@@ -69,6 +69,19 @@
Это отдельные механические шаги поверх уже утверждённой схемы.
## Совместимость со старыми блоками каналов
В runtime-сервере сознательно нет жёсткой серверной проверки
`channelName must not contain only digits`.
Причина: в уже существующей истории блокчейна есть каналы с числовыми именами,
и при холодном восстановлении сервера с пустой БД и без `.bch` такие блоки должны
успешно переигрываться от других sync-серверов.
Сейчас правило "новый публичный канал не должен состоять только из цифр" остаётся
на уровне UI/продуктовых требований и должно быть позже возвращено на сервере
отдельным совместимым способом, который не ломает replay исторических блоков.
## Инициализация пустой БД
Если сервер подключается к PostgreSQL через `db.url=jdbc:postgresql:...` и в выбранной БД ещё нет таблицы `db_schema_version`,