{"record":{"id":"8ab353164b3be2e5","repo":"juicedata/juicefs","slug":"upload-s-w","errorCode":null,"errorMessage":"upload %s: %w","messagePattern":"upload (.+?): %w","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/object/storj.go","lineNumber":168,"sourceCode":"\tif err != nil {\n\t\treturn fmt.Errorf(\"capture read position %s: %w\", key, err)\n\t}\n\treturn storjBackoff(ctx, func() error {\n\t\tif _, err := rs.Seek(startPos, io.SeekStart); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn s.putOnce(ctx, key, rs)\n\t})\n}\n\nfunc (s *storjClient) putOnce(ctx context.Context, key string, in io.Reader) error {\n\tupload, err := s.project.UploadObject(ctx, s.bucket, key, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"begin upload %s: %w\", key, err)\n\t}\n\tif _, err = io.Copy(upload, in); err != nil {\n\t\t_ = upload.Abort()\n\t\treturn fmt.Errorf(\"upload %s: %w\", key, err)\n\t}\n\tif err = upload.Commit(); err != nil {\n\t\t_ = upload.Abort()\n\t\treturn fmt.Errorf(\"commit upload %s: %w\", key, err)\n\t}\n\treturn nil\n}\n\nfunc (s *storjClient) Copy(ctx context.Context, dst, src string) error {\n\treturn storjBackoff(ctx, func() error {\n\t\t_, err := s.project.CopyObject(ctx, s.bucket, src, s.bucket, dst, nil)\n\t\treturn err\n\t})\n}\n\nfunc (s *storjClient) Delete(ctx context.Context, key string, getters ...AttrGetter) error {\n\treturn storjBackoff(ctx, func() error {\n\t\t_, err := s.project.DeleteObject(ctx, s.bucket, key)","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/juicedata/juicefs/blob/c9a67b23e8e08ec23ec331aa6f1675e2319e921c/pkg/object/storj.go#L150-L186","documentation":"Streaming data into the Storj uplink upload object failed mid-transfer (io.Copy error) for the given key; the upload is aborted immediately. Fires on network interruption, reader failure, or the uplink rejecting segment data.","triggerScenarios":"Thrown at pkg/object/storj.go:168 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify UFile credentials and part numbering is continuous from 0","Retry the multipart upload; part PUTs may fail transiently"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}