SHA256
5.0 KiB
5.0 KiB
Проверка и эксплуатация Archive Publisher
Перед ночным тестом
- Новый
shine_usersуже развёрнут на том Solana-кластере, который использует сервер. - Серверный JAR собран из этого пакета.
- БД забэкаплена.
archive.publish.enabled=true.archive.publish.time=00:00.archive.publish.zoneIdсоответствует желаемой локальной полуночи.server.SHiNE.loginсоответствует root/client keys.- Arweave JWK читается пользователем процесса.
- На Arweave wallet достаточно AR.
data/archiveдоступна на запись.- В логе есть
Archive publisher включёни точное время следующего запуска.
Во время job
Нормальная последовательность логов/статусов:
SNAPSHOT_CREATED
FILE_BUILT
ARWEAVE_UPLOADED
ARWEAVE_CONFIRMED
SOLANA_SUBMITTED
SOLANA_FINALIZED
CURSORS_COMMITTED
После FILE_BUILT существует .tmp.SHiNE-archive.
После полного Arweave upload имя уже содержит настоящий TX ID.
После успешного первого job
Проверить:
find data/archive -maxdepth 1 -type f -name '*.SHiNE-archive' -ls
SELECT big_block_number, status, local_archive_path, arweave_confirmations
FROM archive_publish_job ORDER BY id DESC LIMIT 1;
SELECT count(*) AS archived_blockchains FROM archive_chain_cursor;
SELECT login, archive_head_tx_id, archive_head_hash
FROM solana_user_pda_current
WHERE login='<SERVER_LOGIN>';
Проверка второй публикации
До следующей полуночи добавить несколько новых SHiNE records только в часть blockchain. После следующего job:
- в новый big block должны попасть только изменившиеся blockchain;
- одна blockchain в новом big block должна иметь один chunk независимо от числа новых records;
- cursor blockchain, которая не изменилась, должен остаться на старом big block/chunk;
- backlink изменившегося chunk должен указывать на предыдущий chunk этой же blockchain;
- FULL reference table нового big block должна содержать все предыдущие finalized big blocks.
Crash/restart сценарии
Restart после FILE_BUILT
Должен использоваться тот же frozen job и тот же локальный файл.
Restart после ARWEAVE_UPLOADED
Не должно быть повторной оплаты/upload. Если TX сохранён, но rename не успел произойти, recovery переименует .tmp в имя с TX ID.
Restart после SOLANA_FINALIZED
При совпадении PDA head с job сервер должен только commit cursors.
Обычный сервер без публикации
Проверить отдельно:
archive.publish.enabled=false
Сервер должен запускаться без Arweave/root/client archive key files и не создавать archive_publish_job.
Проверка trusted importer
- На принимающем сервере указать только тестовый publisher:
archive.import.allowedPublishers=<publisher-login>
- Перезапустить сервер.
- Дождаться Solana PDA sync и цикла importer-а.
- Проверить, что у publisher в
solana_user_pda_currentпосле успешного циклаarchive_imported=true, аarchive_last_imported_tx_id=archive_head_tx_id. - Проверить
archive_blockchain_location. - Для blockchain, которой локально не хватало блоков, убедиться, что
blockchain_state.last_block_numberвырос. - Для уже существующих блоков importer должен пропускать совпадающий hash, а не создавать дубликат.
- Временно удалить publisher из whitelist и убедиться, что новые archive heads больше не скачиваются.
Проверка Viewer
Открыть Настройки → Архив блокчейна, получить ссылку и проверить:
tx,offset,size,blockchainприсутствуют;- Viewer собирает несколько chunks по backlink;
- неправильный
blockchainв URL приводит к ошибке проверки; channelоткрывает нужный канал;messageпрокручивает к нужному block number.