{"record":{"id":"0c177842dd61e7e2","repo":"AlistGo/alist","slug":"deldir-failed-task-status-is-s","errorCode":null,"errorMessage":"DelDir failed, task status is %s","messagePattern":"DelDir failed, task status is (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/search/meilisearch/search.go","lineNumber":166,"sourceCode":"func (m *Meilisearch) DelDirChild(ctx context.Context, prefix string) error {\n\tdfs, err := m.getParentsByPrefix(ctx, utils.FixAndCleanPath(prefix))\n\tif err != nil {\n\t\treturn err\n\t}\n\tutils.SliceReplace(dfs, func(src string) string {\n\t\treturn \"'\" + strings.ReplaceAll(src, \"'\", \"\\\\'\") + \"'\"\n\t})\n\ts := fmt.Sprintf(\"parent IN [%s]\", strings.Join(dfs, \",\"))\n\ttask, err := m.Client.Index(m.IndexUid).DeleteDocumentsByFilter(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\ttaskStatus, err := m.getTaskStatus(ctx, task.TaskUID)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif taskStatus != meilisearch.TaskStatusSucceeded {\n\t\treturn fmt.Errorf(\"DelDir failed, task status is %s\", taskStatus)\n\t}\n\treturn nil\n}\n\nfunc (m *Meilisearch) Del(ctx context.Context, prefix string) error {\n\tprefix = utils.FixAndCleanPath(prefix)\n\tdir, name := path.Split(prefix)\n\tget, err := m.getDocumentsByParent(ctx, dir[:len(dir)-1])\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar document *searchDocument\n\tfor _, v := range get {\n\t\tif v.Name == name {\n\t\t\tdocument = v\n\t\t\tbreak\n\t\t}\n\t}","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/internal/search/meilisearch/search.go#L148-L184","documentation":"Meilisearch DelDir builds a filter 'parent IN [...]' and calls DeleteDocumentsByFilter; the submitted task is polled via getTaskStatus and finished with a status other than succeeded, so the directory delete is reported as failed.","triggerScenarios":"Deleting a directory that contains indexed files while Meilisearch tasks fail — malformed filter expression (unescaped quotes in parent paths), server resource exhaustion, or a read-only/degraded Meilisearch node.","commonSituations":"Paths containing single quotes or special characters that break the filter syntax after escaping; Meilisearch restart mid-task; version mismatch between client and server filter API.","solutions":["Inspect the failed task in Meilisearch's /tasks endpoint for the concrete error","If the filter is malformed (quotes/backslashes in directory names), fix the escaping or rename the directory","Ensure Meilisearch is healthy and has disk/memory headroom, then retry the delete","As a last resort run Clear on the index and rebuild it"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := searcher.DelDir(ctx, dir); err != nil {\n    if strings.Contains(err.Error(), \"task status is\") {\n        // transient task failure: wait, verify task outcome, retry once; on repeat failure inspect Meilisearch /tasks and consider index rebuild\n    }\n}","preventionTips":["Keep Meilisearch healthy and resourced before bulk deletes","Avoid directory names with quote/backslash characters that stress filter escaping","Monitor failed task counts in Meilisearch"],"tags":["go","meilisearch","search","delete","tasks"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}