{"record":{"id":"03bfc05a1c341d4b","repo":"juicedata/juicefs","slug":"put-encode-file-failed-s","errorCode":null,"errorMessage":"put encode file failed: %s","messagePattern":"put encode file failed: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/objbench.go","lineNumber":980,"sourceCode":"\t\t}()\n\n\t\tif objs, err := listAll(ctx, blob, \"hashKey\", \"\", int64(keyTotal)); err != nil {\n\t\t\treturn fmt.Errorf(\"list failed: %s\", err)\n\t\t} else {\n\t\t\tfor i := 0; i < keyTotal; i++ {\n\t\t\t\tif objs[i].Key() != sortedKeys[i] {\n\t\t\t\t\treturn fmt.Errorf(\"the result for list is incorrect\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t})\n\n\trunCase(\"special key\", func(blob object.ObjectStorage) error {\n\t\tkey := \"测试编码文件\" + `{\"name\":\"juicefs\"}` + string('\\u001F') + \"%uFF081%uFF09.jpg\"\n\t\tdefer blob.Delete(ctx, key) //nolint:errcheck\n\t\tif err := blob.Put(ctx, key, bytes.NewReader([]byte(\"1\"))); err != nil {\n\t\t\treturn fmt.Errorf(\"put encode file failed: %s\", err)\n\t\t} else {\n\t\t\tif resp, _, _, err := blob.List(ctx, \"\", \"测试编码文件\", \"\", \"\", 1, true); err != nil && err != utils.ErrNotSUP {\n\t\t\t\treturn fmt.Errorf(\"list encode file failed %s\", err)\n\t\t\t} else if len(resp) == 1 && resp[0].Key() != key {\n\t\t\t\treturn fmt.Errorf(\"list encode file failed: expect key %s, but got %s\", key, resp[0].Key())\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t})\n\n\trunCase(\"put a big object\", func(blob object.ObjectStorage) error {\n\t\tfsize := 256 << 20\n\t\tbuffL := 4 << 20\n\t\tbuff := make([]byte, buffL)\n\t\tutils.RandRead(buff)\n\t\tcount := int(math.Floor(float64(fsize) / float64(buffL)))\n\t\tcontent := make([]byte, fsize)\n\t\tfor i := 0; i < count; i++ {","sourceCodeStart":962,"sourceCodeEnd":998,"githubUrl":"https://github.com/juicedata/juicefs/blob/c9a67b23e8e08ec23ec331aa6f1675e2319e921c/cmd/objbench.go#L962-L998","documentation":"objbench's 'special key' case puts an object whose key contains UTF-8 multibyte characters, JSON braces, a unit-separator (\\u001F) and percent-encoded text, wrapping any Put failure with this message. It verifies the backend can store keys that need special encoding.","triggerScenarios":"`blob.Put(ctx, \"测试编码文件{...}\\u001F%uFF081%uFF09.jpg\", ...)` returns an error — the backend rejects the key characters or the request fails.","commonSituations":"Backends that reject unicode/control characters in keys; misconfigured endpoints that mangle URL encoding; drivers that don't escape keys properly.","solutions":["Read the wrapped backend error for the root cause","Verify the backend supports arbitrary UTF-8 (and control-char) key encodings","Check the driver's key URL-escaping implementation","If the backend genuinely can't support such keys, treat this case as an expected limitation"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// check key for characters the backend may reject\nkey := \"测试编码文件\" + `{\"name\":\"juicefs\"}` + string('\\u001F') + \"%uFF081%uFF09.jpg\"\n// probe put before real usage\nif err := blob.Put(ctx, key, bytes.NewReader(nil)); err != nil { /* unsupported key */ }\n_ = blob.Delete(ctx, key)","typeGuard":null,"tryCatchPattern":"if err := blob.Put(ctx, key, r); err != nil {\n    return fmt.Errorf(\"put encode file failed: %s\", err)\n}","preventionTips":["Confirm the backend accepts UTF-8 and control characters in keys","Check drivers escape keys correctly before sending requests","Avoid proxies that rewrite URL paths"],"tags":["object-storage","encoding","utf-8","key-encoding"],"backgroundTag":"invalid-argument-value","analyzedSha":"c9a67b23e8e08ec23ec331aa6f1675e2319e921c","analyzedAt":"2026-09-06T17:55:48.476Z","contentChangedAt":"2026-09-06T17:55:48.476Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}