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

Method createBucket

ais/prxtxn.go:139–207  ·  view source on GitHub ↗

cp transactions (the proxy part) A typical control-plane transaction will execute, with minor variations, the same 6 (plus/minus) steps as shown below: - notice a certain symmetry between the client and the server sides whetreby the control flow looks as follows: txnClientCtx => (POST to /v1/tx

(msg *apc.ActionMsg, bck *cluster.Bck, remoteHeader ...http.Header)

Source from the content-addressed store, hash-verified

137
138// create-bucket: { check non-existence -- begin -- create locally -- metasync -- commit }
139func (p *proxy) createBucket(msg *apc.ActionMsg, bck *cluster.Bck, remoteHeader ...http.Header) error {
140 var (
141 bucketProps *cmn.BucketProps
142 nlp = bck.GetNameLockPair()
143 bmd = p.owner.bmd.get()
144 )
145 if bck.Props != nil {
146 bucketProps = bck.Props
147 }
148 if len(remoteHeader) != 0 && len(remoteHeader[0]) > 0 {
149 remoteProps := defaultBckProps(bckPropsArgs{bck: bck, hdr: remoteHeader[0]})
150 if bucketProps == nil {
151 bucketProps = remoteProps
152 } else {
153 bucketProps.Versioning.Enabled = remoteProps.Versioning.Enabled // always takes precedence
154 }
155 } else if backend := bck.Backend(); backend != nil {
156 if bucketProps == nil {
157 bucketProps = defaultBckProps(bckPropsArgs{bck: bck})
158 }
159 cloudProps, present := bmd.Get(backend)
160 debug.Assert(present)
161 bucketProps.Versioning.Enabled = cloudProps.Versioning.Enabled // always takes precedence
162 } else if bck.IsHTTP() {
163 return errors.New("creating bucket for HTTP provider is not supported")
164 } else if bck.IsCloud() {
165 return fmt.Errorf("creating bucket for %q (cloud) provider is not supported", bck.Provider)
166 } else if bucketProps == nil {
167 bucketProps = defaultBckProps(bckPropsArgs{bck: bck})
168 }
169
170 nlp.Lock()
171 defer nlp.Unlock()
172
173 // 1. try add
174 if _, present := bmd.Get(bck); present {
175 return cmn.NewErrBckAlreadyExists(bck.Bucket())
176 }
177
178 // 2. begin
179 var (
180 waitmsync = true // commit blocks behind metasync
181 c = p.prepTxnClient(msg, bck, waitmsync)
182 )
183 if err := c.begin(bck); err != nil {
184 return err
185 }
186
187 // 3. update BMD locally & metasync updated BMD
188 ctx := &bmdModifier{
189 pre: _createBMDPre,
190 final: p._syncBMDFinal,
191 wait: waitmsync,
192 msg: &c.msg.ActionMsg,
193 txnID: c.uuid,
194 bcks: []*cluster.Bck{bck},
195 setProps: bucketProps,
196 }

Callers 4

hpostBucketMethod · 0.95
hpostCreateBucketMethod · 0.95
putBckS3Method · 0.95
_tryMethod · 0.45

Calls 15

prepTxnClientMethod · 0.95
undoCreateBucketMethod · 0.95
AssertFunction · 0.92
NewErrBckAlreadyExistsFunction · 0.92
GetNameLockPairMethod · 0.80
bcastAbortMethod · 0.80
cmtToutMethod · 0.80
defaultBckPropsFunction · 0.70
getMethod · 0.65
BackendMethod · 0.65
GetMethod · 0.65
NewMethod · 0.65

Tested by

no test coverage detected