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

Method metasyncHandler

ais/proxy.go:793–855  ·  view source on GitHub ↗

PUT /v1/metasync (compare with p.recvCluMeta and t.metasyncHandlerPut)

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

Source from the content-addressed store, hash-verified

791// PUT /v1/metasync
792// (compare with p.recvCluMeta and t.metasyncHandlerPut)
793func (p *proxy) metasyncHandler(w http.ResponseWriter, r *http.Request) {
794 var (
795 err = &errMsync{}
796 cii = &err.Cii
797 )
798 if r.Method != http.MethodPut {
799 cmn.WriteErr405(w, r, http.MethodPut)
800 return
801 }
802 smap := p.owner.smap.get()
803 if smap.isPrimary(p.si) {
804 const txt = "is primary, cannot be on the receiving side of metasync"
805 cii.fill(&p.htrun)
806 if xctn := voteInProgress(); xctn != nil {
807 err.Message = fmt.Sprintf("%s: %s [%s, %s]", p, txt, smap, xctn)
808 } else {
809 err.Message = fmt.Sprintf("%s: %s, %s", p, txt, smap)
810 }
811 p.writeErr(w, r, errors.New(cos.MustMarshalToString(err)), http.StatusConflict)
812 return
813 }
814 payload := make(msPayload)
815 if errP := payload.unmarshal(r.Body, "metasync put"); errP != nil {
816 cmn.WriteErr(w, r, errP)
817 return
818 }
819 // 1. extract
820 var (
821 caller = r.Header.Get(apc.HdrCallerName)
822 newConf, msgConf, errConf = p.extractConfig(payload, caller)
823 newSmap, msgSmap, errSmap = p.extractSmap(payload, caller)
824 newBMD, msgBMD, errBMD = p.extractBMD(payload, caller)
825 newRMD, msgRMD, errRMD = p.extractRMD(payload, caller)
826 newEtlMD, msgEtlMD, errEtlMD = p.extractEtlMD(payload, caller)
827 revokedTokens, errTokens = p.extractRevokedTokenList(payload, caller)
828 )
829 // 2. apply
830 if errConf == nil && newConf != nil {
831 errConf = p.receiveConfig(newConf, msgConf, payload, caller)
832 }
833 if errSmap == nil && newSmap != nil {
834 errSmap = p.receiveSmap(newSmap, msgSmap, payload, caller, p.smapOnUpdate)
835 }
836 if errBMD == nil && newBMD != nil {
837 errBMD = p.receiveBMD(newBMD, msgBMD, payload, caller)
838 }
839 if errRMD == nil && newRMD != nil {
840 errRMD = p.receiveRMD(newRMD, msgRMD, caller)
841 }
842 if errEtlMD == nil && newEtlMD != nil {
843 errEtlMD = p.receiveEtlMD(newEtlMD, msgEtlMD, payload, caller, nil)
844 }
845 if errTokens == nil && revokedTokens != nil {
846 _ = p.authn.updateRevokedList(revokedTokens)
847 }
848 // 3. respond
849 if errConf == nil && errSmap == nil && errBMD == nil && errRMD == nil && errTokens == nil && errEtlMD == nil {
850 return

Callers

nothing calls this directly

Calls 15

receiveBMDMethod · 0.95
receiveRMDMethod · 0.95
WriteErr405Function · 0.92
MustMarshalToStringFunction · 0.92
WriteErrFunction · 0.92
voteInProgressFunction · 0.85
fillMethod · 0.80
writeErrMethod · 0.80
extractConfigMethod · 0.80
extractSmapMethod · 0.80
extractBMDMethod · 0.80
extractRMDMethod · 0.80

Tested by

no test coverage detected