From 5588c2d3f7f88da7402c248198c5e9efd98a9342 Mon Sep 17 00:00:00 2001 From: Andriy Oblivantsev Date: Wed, 16 Sep 2026 21:47:37 +0000 Subject: [PATCH] =?UTF-8?q?fix(files):=20=D1=80=D0=B5=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20transient-=D0=BE=D1=82=D0=B2=D0=B5=D1=82?= =?UTF-8?q?=D1=8B=20=D0=BF=D1=80=D0=B8=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20(#6?= =?UTF-8?q?3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DeleteDavItems (через ApplyDedupGroups/DeleteFilesByDedupKey) ходил в deleteJSON напрямую и падал на 429/502/503/504. Теперь каждый delete идёт через DoRetry, как остальные bulk-пути. --- files_webdav.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/files_webdav.go b/files_webdav.go index 197c394..a38b732 100644 --- a/files_webdav.go +++ b/files_webdav.go @@ -243,18 +243,27 @@ func fileopsError(raw json.RawMessage) error { func (c *Client) DeleteDavItems(ctx context.Context, folderIDs, fileIDs []string) error { body := map[string]any{"DeleteAfter": true, "Immediately": true} for _, id := range folderIDs { - if _, err := c.deleteJSON(ctx, "/api/2.0/files/folder/"+url.PathEscape(id), body); err != nil { + if err := c.deleteDavItem(ctx, "/api/2.0/files/folder/"+url.PathEscape(id), body); err != nil { return err } } for _, id := range fileIDs { - if _, err := c.deleteJSON(ctx, "/api/2.0/files/file/"+url.PathEscape(id), body); err != nil { + if err := c.deleteDavItem(ctx, "/api/2.0/files/file/"+url.PathEscape(id), body); err != nil { return err } } return nil } +// deleteDavItem deletes one item, retrying transient 429/502/503/504 answers +// through DoRetry like every other bulk path (deletes are idempotent). +func (c *Client) deleteDavItem(ctx context.Context, path string, body any) error { + return DoRetry(ctx, DefaultRetryPolicy(), func() error { + _, err := c.deleteJSON(ctx, path, body) + return err + }) +} + // UploadDavFile uploads src (fileName) into folderID, streaming from src. // // Deprecated: use FileStore.Upload via Client.Files()/Client.FileStore.