MCPcopy Index your code
hub / github.com/cubefs/cubefs / putObjectXAttrHandler

Method putObjectXAttrHandler

objectnode/api_handler_object.go:1923–1995  ·  view source on GitHub ↗

Put object extend attribute (xattr)

(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

1921
1922// Put object extend attribute (xattr)
1923func (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 {

Callers

nothing calls this directly

Calls 15

errorResponseMethod · 0.95
getVolMethod · 0.95
AcquireRateLimiterMethod · 0.95
SetXAttrMethod · 0.95
SpanFromContextSafeFunction · 0.92
LogErrorfFunction · 0.92
ParseRequestParamFunction · 0.85
GetRequestIDFunction · 0.85
VerifyContentLengthFunction · 0.85
ObjectMethod · 0.80
AcquireLimitResourceMethod · 0.65
ReleaseLimitResourceMethod · 0.65

Tested by

no test coverage detected