{"record":{"id":"a6d584ab3fc7be9c","repo":"AlistGo/alist","slug":"renames-is-required","errorCode":null,"errorMessage":"renames is required","messagePattern":"renames is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"drivers/123_open/other.go","lineNumber":269,"sourceCode":"\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := d.client.File.RecoverTo(ctx, fileIDs, req.ParentFileID); err != nil {\n\t\treturn nil, err\n\t}\n\treturn okResult{Success: true}, nil\n}\n\nfunc otherBatchRename(d *Open123, ctx context.Context, args model.OtherArgs) (interface{}, error) {\n\t// JSON object keys are strings, so the id keys are parsed here.\n\tvar req struct {\n\t\tRenames map[string]string `json:\"renames\"`\n\t}\n\tif err := decodeOtherArgs(args.Data, &req); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(req.Renames) == 0 {\n\t\treturn nil, errors.New(\"renames is required\")\n\t}\n\trenames := make(map[int64]string, len(req.Renames))\n\tfor id, name := range req.Renames {\n\t\tfileID, err := parseFileID(id)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\trenames[fileID] = name\n\t}\n\treturn d.client.File.BatchRename(ctx, renames)\n}\n\nfunc otherListV1(d *Open123, ctx context.Context, args model.OtherArgs) (interface{}, error) {\n\tvar req struct {\n\t\tParentFileID   int64  `json:\"parent_file_id\"`\n\t\tPage           int    `json:\"page\"`\n\t\tLimit          int    `json:\"limit\"`\n\t\tOrderBy        string `json:\"order_by\"`","sourceCodeStart":251,"sourceCodeEnd":287,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/123_open/other.go#L251-L287","documentation":"Returned by Terabox getFiles (drivers/terabox/util.go:155) when a paginated /api/list call reports errno 9000: the same regional-availability block as at Init, but surfacing mid-use during List() of a directory. The storage initialized earlier but the egress region is now being treated as unsupported.","triggerScenarios":"Browsing a Terabox folder while the server's IP is classified into a blocked region (VPN changed, ISP re-routed, new datacenter IP range classification); intermittent geo-fencing on some list shards.","commonSituations":"Long-running mounts that worked at Init and later start failing every List; failover or proxy changes moving traffic to a different region; Terabox expanding its geo-block.","solutions":["Restore egress through a supported region (VPN/proxy) and retry the listing.","If persistent, re-verify with Init — a consistent 9000 means the whole storage is affected, not one folder.","Track driver/upstream announcements: region handling sometimes moves to a different domain/variant requiring a driver update."],"exampleFix":"// before\nfiles, err := d.getFiles(dir.GetPath()) // errno 9000 mid-session\n\n// after\nfiles, err := d.getFiles(dir.GetPath())\nif err != nil && strings.Contains(err.Error(), \"not yet available in this area\") {\n\treturn nil, fmt.Errorf(\"%w (egress region changed; route via supported region)\", err)\n}","handlingStrategy":"fallback","validationCode":null,"typeGuard":"func isTeraboxAreaErr(err error) bool {\n\treturn err != nil && strings.Contains(err.Error(), \"not yet available in this area\")\n}","tryCatchPattern":"files, err := d.getFiles(path)\nif isTeraboxAreaErr(err) {\n\t// fall back to cached listing if available; alert operator to fix egress region\n}","preventionTips":["Pin server egress to a supported-region proxy so classification cannot drift.","Cache listings so a transient 9000 does not blank the UI.","Alert on this error — it indicates an environment change, not a data problem."],"tags":["terabox","geo-block","list","network"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}