MCPcopy
hub / github.com/lxc/incus / storagePoolBucketGet

Function storagePoolBucketGet

cmd/incusd/storage_buckets.go:495–555  ·  view source on GitHub ↗

swagger:operation GET /1.0/storage-pools/{poolName}/buckets/{bucketName} storage storage_pool_bucket_get Get the storage pool bucket Gets a specific storage pool bucket. --- produces: - application/json parameters: - in: path name: poolName description: Storage pool name

(d *Daemon, r *http.Request)

Source from the content-addressed store, hash-verified

493// "500":
494// $ref: "#/responses/InternalServerError"
495func storagePoolBucketGet(d *Daemon, r *http.Request) response.Response {
496 s := d.State()
497
498 resp := forwardedResponseIfTargetIsRemote(s, r)
499 if resp != nil {
500 return resp
501 }
502
503 bucketProjectName, err := project.StorageBucketProject(r.Context(), s.DB.Cluster, request.ProjectParam(r))
504 if err != nil {
505 return response.SmartError(err)
506 }
507
508 poolName, err := pathVar(r, "poolName")
509 if err != nil {
510 return response.SmartError(err)
511 }
512
513 pool, err := storagePools.LoadByName(s, poolName)
514 if err != nil {
515 return response.SmartError(fmt.Errorf("Failed loading storage pool: %w", err))
516 }
517
518 if !pool.Driver().Info().Buckets {
519 return response.BadRequest(errors.New("Storage pool does not support buckets"))
520 }
521
522 bucketName, err := pathVar(r, "bucketName")
523 if err != nil {
524 return response.SmartError(err)
525 }
526
527 targetMember := request.QueryParam(r, "target")
528 memberSpecific := targetMember != ""
529
530 var bucket *db.StorageBucket
531 err = s.DB.Cluster.Transaction(r.Context(), func(ctx context.Context, tx *db.ClusterTx) error {
532 bucket, err = tx.GetStoragePoolBucket(ctx, pool.ID(), bucketProjectName, memberSpecific, bucketName)
533 return err
534 })
535 if err != nil {
536 return response.SmartError(err)
537 }
538
539 u := pool.GetBucketURL(bucket.Name)
540 if u != nil {
541 bucket.S3URL = u.String()
542 }
543
544 // Prepare the response.
545 if localUtil.IsRecursionRequest(r) {
546 bucketFull, err := getBucketFull(r.Context(), s, pool, bucket.ID, bucket.StorageBucket)
547 if err != nil {
548 return response.InternalError(err)
549 }
550
551 return response.SyncResponseETag(true, bucketFull, bucket.Etag())
552 }

Callers

nothing calls this directly

Calls 15

EtagMethod · 0.95
StorageBucketProjectFunction · 0.92
ProjectParamFunction · 0.92
SmartErrorFunction · 0.92
BadRequestFunction · 0.92
QueryParamFunction · 0.92
InternalErrorFunction · 0.92
SyncResponseETagFunction · 0.92
pathVarFunction · 0.85
getBucketFullFunction · 0.85
ContextMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…