diff --git a/doc/member_files.txt b/doc/member_files.txt index fb11cfb5..f61ba5bf 100644 --- a/doc/member_files.txt +++ b/doc/member_files.txt @@ -136,6 +136,7 @@ Windows удерживает родительские каталоги без SH 9 RENAME: owner/path/target/version. Только внутри UID/группы, без замены существующего назначения. Активная загрузка в затрагиваемом пути — BUSY. 10 REMOVE: owner/path/version. Файл или пустой каталог, без рекурсивного удаления. + Непустой каталог возвращает DIRECTORY_NOT_EMPTY. 11 STREAM_WRITE: открытие потоковой загрузки; поля как BEGIN_WRITE, cursor — ненулевой ID потока. Ответ подтверждает готовность temp и конечный размер. @@ -164,8 +165,9 @@ Windows удерживает родительские каталоги без SH При закрытии/перезапуске router-канала его handles завершаются с IO_ERROR; байты разных эпох не смешиваются. Возобновление через новую эпоху пока не реализовано. -Статусы (0..13): OK, ACCESS_DENIED, NOT_FOUND, INVALID_PATH, INVALID_RANGE, -EXISTS, BUSY, STALE, NO_SPACE, IO_ERROR, BAD_PACKET, HASH_MISMATCH, CANCELLED, TIMEOUT. +Статусы (0..14): OK, ACCESS_DENIED, NOT_FOUND, INVALID_PATH, INVALID_RANGE, +EXISTS, BUSY, STALE, NO_SPACE, IO_ERROR, BAD_PACKET, HASH_MISMATCH, CANCELLED, TIMEOUT, +DIRECTORY_NOT_EMPTY. Мутации COMMIT/MKDIR/RENAME/REMOVE сохраняют успешный ответ на 120 секунд (64 квитанции); тот же request_id с другим содержимым — BAD_PACKET. COMMIT дополнительно узнаётся по upload UUID. При заполнении квитанций новая @@ -355,11 +357,14 @@ tests/test_member_files_network: настоящие A/B/M, подписанна Также проверяются чужая запись, виртуальный корень и подписанное удаление читателя. QUOTA проверяется на настоящем подписанном/зашифрованном канале; удалённый читатель не получает счётчики. test_services — stop/start общего чат-сервиса. -Текущая диагностика выделена в категорию debug. Настройка для полного трасса: +Диагностика файлового сервиса — категория media, маршрутизатора — etcp_route. +Настройка для полного трасса этих модулей: [debug] - debug=trace -debug=debug показывает запрос/ответ, ACL, очереди, маршрут, ACK, crypto-решения, -I/O, fd idle и состояние браузера. trace дополнительно показывает каждый + media=trace + etcp_route=trace +media=debug показывает запрос/ответ, ACL, очереди файлового сервиса, I/O и fd idle. +etcp_route=debug добавляет выбор маршрута, состояния канала и ретрансмиты. +Уровень trace дополнительно показывает каждый read/write и передачу задач/завершений между дисковым потоком и uasync. stream progress раз в секунду показывает ID/направление, done/total, число блоков в кольце, активность I/O, причину ожидания и скорость B/s. Router логирует переходы diff --git a/src/media_delivery/media_download.h b/src/media_delivery/media_download.h index 64b3a9fe..3d1867fd 100644 --- a/src/media_delivery/media_download.h +++ b/src/media_delivery/media_download.h @@ -1,5 +1,6 @@ /* media_download — загрузка канального файла по media_index_result: QUERY держателей → блоки → проверка/сборка. - * Состояние хранит inst->media_delivery; каждый подключённый держатель удерживается через CM handle. + * Состояние хранит inst->md. При открытии подключения через conn_mgr загрузчик получает CM handle. + * Найденный ETCP_CONN используется без нового handle; при отсутствии conn_mgr запрос отправляется best-effort без handle. * Старт копирует метаданные result; callbacks и обработчики — uasync-поток, файловая проверка — media_async. * Failover/таймер простоя ограничивают повторы; done сообщает результат, а не гарантирует доставку другим участникам. */ #ifndef MEDIA_DOWNLOAD_H @@ -118,7 +119,8 @@ void md_dl_conn_cb(struct CONN_MGR_HANDLE* h, uint64_t node_id, uint64_t group_i /* ── тестовые хуки (для детерминированных юнит-тестов с «фейковым» временем) ── * md_dl_check_stall — проверка простоя: возвращает 0 (активна) / -1 (провал, нужно finish). - * md_dl_failover_block — фейловер одного блока на следующий держатель: 0 / -1 (попытки исчерпаны). + * md_dl_failover_block — переход блока к следующему держателю: 0, включая DONE/FAILED и ожидание новых держателей; + * -1 — исчерпаны попытки или не удалось начать запрос (лимит peers, ошибка conn_mgr_open). * md_dl_dump — дамп состояния загрузки в лог (DEBUG_CATEGORY_MEDIA). */ int md_dl_check_stall(struct media_download* dl, uint64_t now_tb); int md_dl_failover_block(struct media_download* dl, int bi, uint64_t now_tb); diff --git a/src/member_files/member_files.h b/src/member_files/member_files.h index 2b111bef..e00d6e03 100644 --- a/src/member_files/member_files.h +++ b/src/member_files/member_files.h @@ -59,7 +59,9 @@ void member_files_gui_request(void* arg); struct mf_transfer_request { struct UTUN_INSTANCE* inst; // ядро с работающим чат-сервисом uint64_t id, group, server, owner; // ID операции (0=авто), CHAT-группа, storage-узел и UID владельца каталога - uint64_t max_bytes; // 0 — без лимита; проверяется до открытия локального файла и передачи данных. + // Дополнительный лимит размера; 0 — без него. Upload: после открытия источника, до хеширования; + // download: по ответу STAT, до открытия локального temp и передачи данных. + uint64_t max_bytes; int upload; // ненулевой — загрузить local на сервер, 0 — скачать remote uint8_t version[16]; // версия из STAT; нули при создании нового серверного файла char remote[MF_PATH_MAX + 1], local[MF_PATH_MAX + 1]; // путь в каталоге owner и локальный путь приложения