From 6e2a2f0011fb785949d197cc835908316c0f5c84 Mon Sep 17 00:00:00 2001 From: evgeny Date: Mon, 21 Sep 2026 19:16:27 +0300 Subject: [PATCH] =?UTF-8?q?media=5Fdownload:=20=D1=81=D0=B1=D1=80=D0=BE?= =?UTF-8?q?=D1=81=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B5=D1=80=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D1=81=D1=82=D0=BE=D1=8F=20=D0=BF=D1=80=D0=B8=20CON?= =?UTF-8?q?N=E2=86=92REQ=20+=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD=D0=BE=D1=81=D1=82=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - md_dl_conn_cb: обнулять last_progress_tb при переходе CONN→REQ, иначе время установки indirect-соединения (~2с) засчитывается как простой блока и вызывал преждевременный фейловер с держателя, реально имеющего блок - STALL-лог: печатать миллисекунды корректно (значение в единицах 0.1мс /10) - media_index: INSERT OR IGNORE — повторная регистрация блока как servable больше не шумит как ERROR (UNIQUE constraint) --- src/media_delivery/media_download.c | 3 ++- src/media_delivery/media_index.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/media_delivery/media_download.c b/src/media_delivery/media_download.c index 0a172d8b..20e009d7 100644 --- a/src/media_delivery/media_download.c +++ b/src/media_delivery/media_download.c @@ -264,7 +264,7 @@ int md_dl_check_stall(struct media_download* dl, uint64_t now_tb) { if (b->state != MD_BLK_REQ && b->state != MD_BLK_RECV) continue; if (now_tb - b->last_progress_tb >= stall) { DEBUG_WARN(DEBUG_CATEGORY_GENERAL, "%s: STALL blk=%d state=%d no progress %llums", - MDL_ID, bi, b->state, (unsigned long long)(now_tb - b->last_progress_tb)); + MDL_ID, bi, b->state, (unsigned long long)((now_tb - b->last_progress_tb) / 10)); if (md_dl_failover_block(dl, bi, now_tb) < 0) return -1; } } @@ -354,6 +354,7 @@ void md_dl_conn_cb(struct CONN_MGR_HANDLE* h, uint64_t node_id, uint64_t group_i if (b->state == MD_BLK_CONN && b->holder_idx >= 0 && b->holder_idx < b->num_holders && b->holders[b->holder_idx] == node_id) { b->state = MD_BLK_REQ; + b->last_progress_tb = get_time_tb(); /* соединение только поднялось — обнуляем простой */ md_dl_send_block_req(dl->inst, node_id, dl, bi); } } diff --git a/src/media_delivery/media_index.c b/src/media_delivery/media_index.c index c8a5bf54..e5e143d5 100644 --- a/src/media_delivery/media_index.c +++ b/src/media_delivery/media_index.c @@ -24,7 +24,7 @@ static int mi_insert(sqlite3* db, int64_t timestamp, int64_t file_size, int64_t chunk_size, int chunk, int64_t offset) { const char* sql = - "INSERT INTO media_files(media_id,block_id,content_hash,chat_id,location," + "INSERT OR IGNORE INTO media_files(media_id,block_id,content_hash,chat_id,location," "node_id,node_sign,timestamp,file_size,chunk_size,chunk,offset)" " VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";