Put object extend attribute (xattr)
(w http.ResponseWriter, r *http.Request)
| 1921 | |
| 1922 | // Put object extend attribute (xattr) |
| 1923 | func (o *ObjectNode) putObjectXAttrHandler(w http.ResponseWriter, r *http.Request) { |
| 1924 | var ( |
| 1925 | err error |
| 1926 | errorCode *ErrorCode |
| 1927 | ) |
| 1928 | |
| 1929 | span := trace.SpanFromContextSafe(r.Context()) |
| 1930 | defer func() { |
| 1931 | o.errorResponse(w, r, err, errorCode) |
| 1932 | }() |
| 1933 | |
| 1934 | param := ParseRequestParam(r) |
| 1935 | if len(param.Bucket()) == 0 { |
| 1936 | errorCode = InvalidBucketName |
| 1937 | return |
| 1938 | } |
| 1939 | if len(param.Object()) == 0 { |
| 1940 | errorCode = InvalidKey |
| 1941 | return |
| 1942 | } |
| 1943 | var vol *Volume |
| 1944 | if vol, err = o.getVol(param.bucket); err != nil { |
| 1945 | log.LogErrorf("pubObjectXAttrHandler: load volume fail: requestID(%v) err(%v)", |
| 1946 | GetRequestID(r), err) |
| 1947 | return |
| 1948 | } |
| 1949 | |
| 1950 | // QPS and Concurrency Limit |
| 1951 | rateLimit := o.AcquireRateLimiter() |
| 1952 | if err = rateLimit.AcquireLimitResource(vol.owner, param.apiName); err != nil { |
| 1953 | return |
| 1954 | } |
| 1955 | defer rateLimit.ReleaseLimitResource(vol.owner, param.apiName) |
| 1956 | |
| 1957 | _, errorCode = VerifyContentLength(r, BodyLimit) |
| 1958 | if errorCode != nil { |
| 1959 | return |
| 1960 | } |
| 1961 | var requestBody []byte |
| 1962 | if requestBody, err = io.ReadAll(r.Body); err != nil { |
| 1963 | errorCode = &ErrorCode{ |
| 1964 | ErrorCode: "BadRequest", |
| 1965 | ErrorMessage: err.Error(), |
| 1966 | StatusCode: http.StatusBadRequest, |
| 1967 | } |
| 1968 | return |
| 1969 | } |
| 1970 | putXAttrRequest := PutXAttrRequest{} |
| 1971 | if err = xml.Unmarshal(requestBody, &putXAttrRequest); err != nil { |
| 1972 | errorCode = &ErrorCode{ |
| 1973 | ErrorCode: "BadRequest", |
| 1974 | ErrorMessage: err.Error(), |
| 1975 | StatusCode: http.StatusBadRequest, |
| 1976 | } |
| 1977 | return |
| 1978 | } |
| 1979 | key, value := putXAttrRequest.XAttr.Key, putXAttrRequest.XAttr.Value |
| 1980 | if len(key) == 0 { |
nothing calls this directly
no test coverage detected