MCPcopy
hub / github.com/etcd-io/bbolt / DeleteBucket

Method DeleteBucket

bucket.go:273–328  ·  view source on GitHub ↗

DeleteBucket deletes a bucket at the given key. Returns an error if the bucket does not exist, or if the key represents a non-bucket value.

(key []byte)

Source from the content-addressed store, hash-verified

271// DeleteBucket deletes a bucket at the given key.
272// Returns an error if the bucket does not exist, or if the key represents a non-bucket value.
273func (b *Bucket) DeleteBucket(key []byte) (err error) {
274 if lg := b.tx.db.Logger(); lg != discardLogger {
275 lg.Debugf("Deleting bucket %q", key)
276 defer func() {
277 if err != nil {
278 lg.Errorf("Deleting bucket %q failed: %v", key, err)
279 } else {
280 lg.Debugf("Deleting bucket %q successfully", key)
281 }
282 }()
283 }
284
285 if b.tx.db == nil {
286 return errors.ErrTxClosed
287 } else if !b.Writable() {
288 return errors.ErrTxNotWritable
289 }
290
291 newKey := cloneBytes(key)
292
293 // Move cursor to correct position.
294 c := b.Cursor()
295 k, _, flags := c.seek(newKey)
296
297 // Return an error if bucket doesn't exist or is not a bucket.
298 if !bytes.Equal(newKey, k) {
299 return errors.ErrBucketNotFound
300 } else if (flags & common.BucketLeafFlag) == 0 {
301 return errors.ErrIncompatibleValue
302 }
303
304 // Recursively delete all child buckets.
305 child := b.Bucket(newKey)
306 err = child.ForEachBucket(func(k []byte) error {
307 if err := child.DeleteBucket(k); err != nil {
308 return fmt.Errorf("delete bucket: %s", err)
309 }
310 return nil
311 })
312 if err != nil {
313 return err
314 }
315
316 // Remove cached copy.
317 delete(b.buckets, string(newKey))
318
319 // Release all bucket pages to freelist.
320 child.nodes = nil
321 child.rootNode = nil
322 child.free()
323
324 // Delete the node if we have a matching key.
325 c.node().del(newKey)
326
327 return nil
328}
329
330// MoveBucket moves a sub-bucket from the source bucket to the destination bucket.

Callers

nothing calls this directly

Calls 12

WritableMethod · 0.95
CursorMethod · 0.95
BucketMethod · 0.95
cloneBytesFunction · 0.85
LoggerMethod · 0.80
seekMethod · 0.80
ForEachBucketMethod · 0.80
delMethod · 0.80
DebugfMethod · 0.65
ErrorfMethod · 0.65
freeMethod · 0.45
nodeMethod · 0.45

Tested by

no test coverage detected