SHA256
Сервер: разрешить replay старых числовых каналов
This commit is contained in:
@@ -10,8 +10,6 @@ public final class ChannelNameRules {
|
|||||||
Pattern.compile("^[A-Za-z0-9_-]+$");
|
Pattern.compile("^[A-Za-z0-9_-]+$");
|
||||||
private static final Pattern PUBLIC_CHANNEL_ALLOWED_PATTERN =
|
private static final Pattern PUBLIC_CHANNEL_ALLOWED_PATTERN =
|
||||||
Pattern.compile("^[A-Za-z0-9_-]+$");
|
Pattern.compile("^[A-Za-z0-9_-]+$");
|
||||||
private static final Pattern DIGITS_ONLY_PATTERN =
|
|
||||||
Pattern.compile("^[0-9]+$");
|
|
||||||
|
|
||||||
private ChannelNameRules() {}
|
private ChannelNameRules() {}
|
||||||
|
|
||||||
@@ -43,9 +41,6 @@ public final class ChannelNameRules {
|
|||||||
if (!PUBLIC_CHANNEL_ALLOWED_PATTERN.matcher(normalized).matches()) {
|
if (!PUBLIC_CHANNEL_ALLOWED_PATTERN.matcher(normalized).matches()) {
|
||||||
throw new IllegalArgumentException("channelName contains unsupported characters");
|
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;
|
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
@@ -1,2 +1,2 @@
|
|||||||
client.version=1.2.354
|
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`,
|
Если сервер подключается к PostgreSQL через `db.url=jdbc:postgresql:...` и в выбранной БД ещё нет таблицы `db_schema_version`,
|
||||||
|
|||||||
Reference in New Issue
Block a user