fix(delete): fix delete handler to add org filter for bucket lookup (#17834)

pull/17843/head
Lyon Hill 2020-04-23 08:32:50 -06:00 committed by GitHub
parent d82aa62fff
commit 50b51e14b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 9 deletions

View File

@ -148,7 +148,7 @@ func decodeDeleteRequest(ctx context.Context, r *http.Request, orgSvc influxdb.O
return nil, err
}
if dr.Bucket, err = queryBucket(ctx, r, bucketSvc); err != nil {
if dr.Bucket, err = queryBucket(ctx, dr.Org.ID, r, bucketSvc); err != nil {
return nil, err
}
return dr, nil

View File

@ -53,8 +53,8 @@ func queryOrganization(ctx context.Context, r *http.Request, svc platform.Organi
// This will try to find the bucket using an ID string or
// the name. It interprets the &bucket= parameter as either the name
// or the ID.
func queryBucket(ctx context.Context, r *http.Request, svc platform.BucketService) (b *platform.Bucket, err error) {
filter := platform.BucketFilter{}
func queryBucket(ctx context.Context, orgID platform.ID, r *http.Request, svc platform.BucketService) (b *platform.Bucket, err error) {
filter := platform.BucketFilter{OrganizationID: &orgID}
if bucket := r.URL.Query().Get(Bucket); bucket != "" {
if id, err := platform.IDFromString(bucket); err == nil {
filter.ID = id

View File

@ -161,7 +161,7 @@ func Test_queryBucket(t *testing.T) {
},
},
{
name: "org name finds organization",
name: "bucket name finds bucket",
want: &platform.Bucket{
ID: platform.ID(1),
Name: "bucket1",
@ -208,10 +208,32 @@ func Test_queryBucket(t *testing.T) {
},
},
},
}
{
name: "invalid orgID fails to return bucket",
want: &platform.Bucket{
ID: platform.ID(1),
},
args: args{
ctx: context.Background(),
r: httptest.NewRequest(http.MethodPost, "/api/v2/query?bucket=0000000000000001", nil),
svc: &mock.BucketService{
FindBucketFn: func(ctx context.Context, filter platform.BucketFilter) (*platform.Bucket, error) {
if *filter.OrganizationID == platform.ID(1) {
return &platform.Bucket{
ID: platform.ID(1),
}, nil
}
return nil, &platform.Error{
Code: platform.EInvalid,
Msg: "unknown bucket",
}
},
},
},
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := queryBucket(tt.args.ctx, tt.args.r, tt.args.svc)
got, err := queryBucket(tt.args.ctx, platform.ID(1), tt.args.r, tt.args.svc)
if (err != nil) != tt.wantErr {
t.Errorf("queryBucket() error = %v, wantErr %v", err, tt.wantErr)
return

View File

@ -2,7 +2,6 @@ package tenant
import (
"context"
"errors"
"github.com/influxdata/influxdb/v2"
"github.com/influxdata/influxdb/v2/kv"
@ -57,8 +56,8 @@ func (s *Service) FindBucket(ctx context.Context, filter influxdb.BucketFilter)
return nil, err
}
if len(buckets) != 1 {
return nil, errors.New("unkown error")
if len(buckets) < 1 {
return nil, ErrBucketNotFound
}
return buckets[0], nil
@ -108,6 +107,11 @@ func (s *Service) FindBuckets(ctx context.Context, filter influxdb.BucketFilter,
return nil, 0, err
}
if len(opt) > 0 && len(buckets) >= opt[0].Limit {
// if we have reached the limit we will not add system buckets
return buckets, len(buckets), nil
}
// NOTE: this is a remnant of the old system.
// There are org that do not have system buckets stored, but still need to be displayed.
needsSystemBuckets := true