PUT /v1/metasync (compare with p.recvCluMeta and t.metasyncHandlerPut)
(w http.ResponseWriter, r *http.Request)
| 791 | // PUT /v1/metasync |
| 792 | // (compare with p.recvCluMeta and t.metasyncHandlerPut) |
| 793 | func (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 |
nothing calls this directly
no test coverage detected