{"record":{"id":"ed71ff5c13a0c3ee","repo":"juicedata/juicefs","slug":"please-create-bucket-s-manually","errorCode":null,"errorMessage":"please create bucket %s manually","messagePattern":"please create bucket (.+?) manually","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/object/oos.go","lineNumber":56,"sourceCode":"}\n\nfunc (s *oos) String() string {\n\treturn fmt.Sprintf(\"oos://%s/\", s.s3client.bucket)\n}\n\nfunc (s *oos) Limits() Limits {\n\treturn Limits{\n\t\tIsSupportMultipartUpload: true,\n\t\tMinPartSize:              5 << 20,\n\t\tMaxPartSize:              5 << 30,\n\t\tMaxPartCount:             10000,\n\t}\n}\n\nfunc (s *oos) Create(ctx context.Context) error {\n\t_, _, _, err := s.List(ctx, \"\", \"\", \"\", \"\", 1, true)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"please create bucket %s manually\", s.s3client.bucket)\n\t}\n\treturn err\n}\n\nfunc (s *oos) List(ctx context.Context, prefix, start, token, delimiter string, limit int64, followLink bool) ([]Object, bool, string, error) {\n\tif limit > 1000 {\n\t\tlimit = 1000\n\t}\n\tobjs, hasMore, nextMarker, err := s.s3client.List(ctx, prefix, start, token, delimiter, limit, followLink)\n\tif start != \"\" && len(objs) > 0 && objs[0].Key() == start {\n\t\tobjs = objs[1:]\n\t}\n\treturn objs, hasMore, nextMarker, err\n}\n\nfunc newOOS(endpoint, accessKey, secretKey, token string) (ObjectStorage, error) {\n\tif !strings.Contains(endpoint, \"://\") {\n\t\tendpoint = fmt.Sprintf(\"https://%s\", endpoint)","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/juicedata/juicefs/blob/c9a67b23e8e08ec23ec331aa6f1675e2319e921c/pkg/object/oos.go#L38-L74","documentation":"oos.Create() probes the bucket by issuing a List request; if that probe returns any error it reports that the OOS bucket does not exist and cannot be auto-created. The OOS storage driver has no CreateBucket capability, so the user must provision the bucket out-of-band (OOS is compatible with S3 APIs, so any S3 tool works). Note the returned error is generic and swallows the underlying probe error.","triggerScenarios":"Calling Create on an oos ObjectStorage whose bucket was never created in the OOS console/API, or when the probe List fails for any reason (bad credentials, wrong endpoint, network error, no permission) — the message is returned for all of these because the underlying error is discarded.","commonSituations":"Fresh JuiceFS volume setup pointing at a not-yet-created OOS bucket; typo in bucket name; access key lacking ListBucket permission; wrong region/endpoint configured so the List call fails and is misreported as 'bucket missing'.","solutions":["Create the bucket manually in the OOS console or via an S3-compatible CLI/tool with the exact name configured.","Verify access key/secret key and endpoint are correct and the credentials have ListBucket permission (the probe List error is hidden, so test with an S3 client).","Check network reachability to the OOS endpoint from the client host."],"exampleFix":"// before\n_, _, _, err := s.List(ctx, \"\", \"\", \"\", \"\", 1, true)\nif err != nil {\n    return fmt.Errorf(\"please create bucket %s manually\", s.s3client.bucket)\n}\n// after (surface the cause)\n_, _, _, err := s.List(ctx, \"\", \"\", \"\", \"\", 1, true)\nif err != nil {\n    return fmt.Errorf(\"please create bucket %s manually (probe failed: %w)\", s.s3client.bucket, err)\n}","handlingStrategy":"validation","validationCode":"_, err := s3Client.HeadBucket(&s3.HeadBucketInput{Bucket: aws.String(bucket)})\nif err != nil {\n    return fmt.Errorf(\"bucket %q does not exist or is not accessible: create it first\", bucket)\n}","typeGuard":null,"tryCatchPattern":"if err := store.Create(ctx); err != nil {\n    if strings.Contains(err.Error(), \"please create bucket\") {\n        // verify bucket name/credentials, then create bucket via OOS console or s3 tool\n    }\n    return err\n}","preventionTips":["Pre-create the bucket before formatting/mounting the volume.","Verify credentials with an independent S3 client (aws s3 ls) since this error hides the real cause.","Double-check bucket name spelling and endpoint/region pairing."],"tags":["object-storage","bucket","s3-compatible"],"backgroundTag":"resource-not-found","analyzedSha":"c9a67b23e8e08ec23ec331aa6f1675e2319e921c","analyzedAt":"2026-09-06T17:55:48.476Z","contentChangedAt":"2026-09-06T17:55:48.476Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}