{"record":{"id":"6a9a5f262a9a9386","repo":"thanos-io/thanos","slug":"upload-v-to-target-bucket","errorCode":null,"errorMessage":"upload %v to target bucket","messagePattern":"upload (.+?) to target bucket","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/replicate/scheme.go","lineNumber":304,"sourceCode":"\t}\n\n\t// skip if already exists.\n\tif exists {\n\t\tlevel.Debug(rs.logger).Log(\"msg\", \"skipping object as already replicated\", \"object\", objectName)\n\t\treturn nil\n\t}\n\n\tlevel.Debug(rs.logger).Log(\"msg\", \"object not present in target bucket, replicating\", \"object\", objectName)\n\n\tr, err := rs.fromBkt.Get(ctx, objectName)\n\tif err != nil {\n\t\treturn errors.Wrapf(err, \"get %v from origin bucket\", objectName)\n\t}\n\n\tdefer r.Close()\n\n\tif err = rs.toBkt.Upload(ctx, objectName, r); err != nil {\n\t\treturn errors.Wrapf(err, \"upload %v to target bucket\", objectName)\n\t}\n\n\tlevel.Info(rs.logger).Log(\"msg\", \"object replicated\", \"object\", objectName)\n\trs.metrics.objectsReplicated.Inc()\n\n\treturn nil\n}\n","sourceCodeStart":286,"sourceCodeEnd":312,"githubUrl":"https://github.com/thanos-io/thanos/blob/35b8b991177def87ed52dcf10f9b6d87f07282c8/pkg/replicate/scheme.go#L286-L312","documentation":"In ensureObjectReplicated, the objstore Upload of an object (block file) from the origin bucket to the target bucket failed after confirming the object was missing on the target — network or object-store error — so block replication is incomplete and the object must be retried.","triggerScenarios":"toBkt.Upload returns an error: target bucket does not exist, write permission denied, quota exceeded, network interruption mid-stream, or context canceled during the transfer.","commonSituations":"Target bucket misconfigured or not pre-created; IAM role on target lacks putObject; storage quota/billing limits hit; transient S3/GCS 5xx or throttling during large object copy.","solutions":["Verify the target bucket exists and the credentials have write permission","Retry replication — ensureObjectReplicated is idempotent (skips objects already present)","Check target storage quota and rate limits","Confirm network connectivity to the target endpoint"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// verify target bucket is writable before starting replication\nctx, cancel := context.WithTimeout(ctx, 10*time.Second)\nprobe := \"__replication_probe__\"\nerr := toBkt.Upload(ctx, probe, strings.NewReader(\"ok\"))\n_ = toBkt.Delete(ctx, probe)\ncancel()\nif err != nil { return fmt.Errorf(\"target bucket not writable: %w\", err) }","typeGuard":null,"tryCatchPattern":"if err := rs.toBkt.Upload(ctx, objectName, r); err != nil {\n    if errors.Is(err, context.DeadlineExceeded) {\n        // large object: retry with backoff\n    }\n    return errors.Wrapf(err, \"upload %v to target bucket\", objectName)\n}","preventionTips":["Pre-create the target bucket and grant write IAM permissions","Set generous timeouts for large-object uploads","Monitor target bucket quota and rate-limit metrics"],"tags":["object-storage","replication","upload"],"backgroundTag":"api-request-failed","analyzedSha":"35b8b991177def87ed52dcf10f9b6d87f07282c8","analyzedAt":"2026-09-07T01:49:59.689Z","contentChangedAt":"2026-09-07T01:49:59.689Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}