{"record":{"id":"bdb950b3101a8871","repo":"dgraph-io/dgraph","slug":"cannot-get-backup-manifests","errorCode":null,"errorMessage":"cannot get backup manifests","messagePattern":"cannot get backup manifests","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"worker/online_restore.go","lineNumber":250,"sourceCode":"\t// Reset tablets and set correct tablets to match the restored backup.\n\tcreds := &x.MinioCredentials{\n\t\tAccessKey:    req.AccessKey,\n\t\tSecretKey:    req.SecretKey,\n\t\tSessionToken: req.SessionToken,\n\t\tAnonymous:    req.Anonymous,\n\t}\n\turi, err := url.Parse(req.Location)\n\tif err != nil {\n\t\treturn errors.Wrapf(err, \"cannot parse backup location\")\n\t}\n\thandler, err := NewUriHandler(uri, creds)\n\tif err != nil {\n\t\treturn errors.Wrapf(err, \"cannot create backup handler\")\n\t}\n\n\tmanifests, err := getManifestsToRestore(handler, uri, req)\n\tif err != nil {\n\t\treturn errors.Wrapf(err, \"cannot get backup manifests\")\n\t}\n\n\t// filter manifests that needs to be restored\n\tmfsToRestore := manifests[:0]\n\tfor _, m := range manifests {\n\t\tif (req.BackupNum == 0 || m.BackupNum <= req.BackupNum) &&\n\t\t\t(req.IncrementalFrom == 0 || m.BackupNum >= req.IncrementalFrom) {\n\n\t\t\tmfsToRestore = append(mfsToRestore, m)\n\t\t}\n\t}\n\tmanifests = mfsToRestore\n\n\tif len(manifests) == 0 {\n\t\treturn errors.Errorf(\"no backup manifests found at location %s\", req.Location)\n\t}\n\n\tlastManifest := manifests[0]","sourceCodeStart":232,"sourceCodeEnd":268,"githubUrl":"https://github.com/dgraph-io/dgraph/blob/759e242be62c91f8d084da06ad0c8d21256d9c07/worker/online_restore.go#L232-L268","documentation":"Wrapped by handleRestoreProposal (worker/online_restore.go:250) when getManifestsToRestore fails. This walks the backup location through the URI handler and reads the manifest files (manifest.json per backup) that describe each full/incremental backup; failure means the manifests could not be listed, downloaded, or decoded.","triggerScenarios":"Bucket/object not accessible with the given credentials (403/404 from S3/GCS); backup folder path wrong so no manifest at that prefix; corrupted or truncated manifest.json; network failure reaching the object store.","commonSituations":"Typo in bucket or folder prefix; S3 bucket in a different region or VPC endpoint not reachable from Alpha; IAM policy lacking s3:GetObject/s3:ListBucket; backups produced by an incompatible Dgraph version with a changed manifest format.","solutions":["Verify the location prefix actually contains the backup manifests (aws s3 ls s3://bucket/prefix/).","Fix credentials/IAM so the Alpha can list and read objects (s3:GetObject, s3:ListBucket, or GCS storage.objects.get/list).","Confirm network reachability from Alphas to the object store (region, proxy, VPC endpoints).","Check the wrapped error in Alpha logs; if manifests are corrupted, re-run dgraph backup."],"exampleFix":"# before\n{\"location\": \"s3://my-bucket/wrong-prefix\"}\n# after (verify manifests exist first)\naws s3 ls s3://my-bucket/backups/  # shows manifest.json entries\n{\"location\": \"s3://my-bucket/backups\"}","handlingStrategy":"validation","validationCode":"// Verify manifests are listable and readable before restore\nout, _ := exec.Command(\"aws\", \"s3\", \"ls\", \"s3://bucket/backups/\").Output()\nif !strings.Contains(string(out), \"manifest\") {\n    return errors.New(\"no manifests visible at backup location\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Grant Alphas object-store read permissions (s3:GetObject, s3:ListBucket / GCS equivalents).","Point the location at the backup-set root, not a subfolder.","Confirm network/region reachability from Alphas to the object store.","Keep backup and restore Dgraph versions compatible."],"tags":["dgraph","restore","manifest","s3","permissions"],"backgroundTag":"backup-manifest-unreadable","analyzedSha":"759e242be62c91f8d084da06ad0c8d21256d9c07","analyzedAt":"2026-09-01T14:42:12.034Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}