MCPcopy
hub / github.com/NVIDIA/aistore / httpobjput

Method httpobjput

ais/target.go:1020–1115  ·  view source on GitHub ↗

PUT /v1/objects/bucket-name/object-name

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

Source from the content-addressed store, hash-verified

1018
1019// PUT /v1/objects/bucket-name/object-name
1020func (t *target) httpobjput(w http.ResponseWriter, r *http.Request) {
1021 apireq := apiReqAlloc(2, apc.URLPathObjects.L, true /*dpq*/)
1022 defer apiReqFree(apireq)
1023 if err := t.parseReq(w, r, apireq); err != nil {
1024 return
1025 }
1026
1027 // prep and check
1028 var (
1029 config = cmn.GCO.Get()
1030 objName = apireq.items[1]
1031 started = time.Now()
1032 t2tput = isT2TPut(r.Header)
1033 )
1034 if apireq.dpq.ptime == "" {
1035 if !t2tput {
1036 t.writeErrf(w, r, "%s: %s(obj) is expected to be redirected or replicated", t.si, r.Method)
1037 return
1038 }
1039 } else if redelta := ptLatency(started.UnixNano(), apireq.dpq.ptime); redelta != 0 {
1040 t.statsT.Add(stats.PutRedirLatency, redelta)
1041 }
1042 if cs := fs.GetCapStatus(); cs.Err != nil || cs.PctMax > int32(config.Space.CleanupWM) {
1043 cs = t.OOS(nil)
1044 if cs.OOS {
1045 // fail this write
1046 t.writeErr(w, r, cs.Err, http.StatusInsufficientStorage)
1047 return
1048 }
1049 }
1050
1051 // init
1052 lom := cluster.AllocLOM(objName)
1053 defer cluster.FreeLOM(lom)
1054 if err := lom.InitBck(apireq.bck.Bucket()); err != nil {
1055 if cmn.IsErrRemoteBckNotFound(err) {
1056 t.BMDVersionFixup(r)
1057 err = lom.InitBck(apireq.bck.Bucket())
1058 }
1059 if err != nil {
1060 t.writeErr(w, r, err)
1061 return
1062 }
1063 }
1064
1065 // load (maybe)
1066 var (
1067 errdb error
1068 skipVC = cmn.Features.IsSet(feat.SkipVC) || cos.IsParseBool(apireq.dpq.skipVC) // apc.QparamSkipVC
1069 )
1070 if skipVC {
1071 errdb = lom.AllowDisconnectedBackend(false)
1072 } else if lom.Load(true, false) == nil {
1073 errdb = lom.AllowDisconnectedBackend(true)
1074 }
1075 if errdb != nil {
1076 t.writeErr(w, r, errdb)
1077 return

Callers 1

objectHandlerMethod · 0.95

Calls 15

OOSMethod · 0.95
BMDVersionFixupMethod · 0.95
doAppendArchMethod · 0.95
doAppendMethod · 0.95
fsErrMethod · 0.95
GetCapStatusFunction · 0.92
AllocLOMFunction · 0.92
FreeLOMFunction · 0.92
IsErrRemoteBckNotFoundFunction · 0.92
IsParseBoolFunction · 0.92
apiReqAllocFunction · 0.85
apiReqFreeFunction · 0.85

Tested by

no test coverage detected