diff --git a/cmd/zed/use/command.go b/cmd/zed/use/command.go index 2547556451..2bbb5c80c9 100644 --- a/cmd/zed/use/command.go +++ b/cmd/zed/use/command.go @@ -107,12 +107,9 @@ func (c *Command) Run(args []string) error { if err != nil { return err } - poolID, err := lakeparse.ParseID(commitish.Pool) + poolID, err := lake.PoolID(ctx, commitish.Pool) if err != nil { - poolID, err = lake.PoolID(ctx, commitish.Pool) - if err != nil { - return err - } + return err } if _, err = lake.CommitObject(ctx, poolID, commitish.Branch); err != nil { return err diff --git a/lake/api/local.go b/lake/api/local.go index ed0cf39c24..bffb699208 100644 --- a/lake/api/local.go +++ b/lake/api/local.go @@ -128,6 +128,11 @@ func (l *local) PoolID(ctx context.Context, poolName string) (ksuid.KSUID, error if poolName == "" { return ksuid.Nil, errors.New("no pool name provided") } + if id, err := lakeparse.ParseID(poolName); err == nil { + if _, err := l.root.OpenPool(ctx, id); err == nil { + return id, nil + } + } return l.root.PoolID(ctx, poolName) } diff --git a/lake/api/remote.go b/lake/api/remote.go index d764320963..57fd1be941 100644 --- a/lake/api/remote.go +++ b/lake/api/remote.go @@ -33,6 +33,11 @@ func (l *remote) Root() *lake.Root { } func (r *remote) PoolID(ctx context.Context, poolName string) (ksuid.KSUID, error) { + if id, err := lakeparse.ParseID(poolName); err == nil { + if _, err := LookupPoolByID(ctx, r, id); err == nil { + return id, nil + } + } config, err := LookupPoolByName(ctx, r, poolName) if err != nil { return ksuid.Nil, err diff --git a/lake/root.go b/lake/root.go index 95a2096f8e..3133935242 100644 --- a/lake/root.go +++ b/lake/root.go @@ -238,16 +238,10 @@ func (r *Root) PoolID(ctx context.Context, poolName string) (ksuid.KSUID, error) if poolName == "" { return ksuid.Nil, errors.New("no pool name given") } - poolID, err := ksuid.Parse(poolName) - var poolRef *pools.Config - if err != nil { - poolRef = r.pools.LookupByName(ctx, poolName) - if poolRef == nil { - return ksuid.Nil, fmt.Errorf("%s: %w", poolName, pools.ErrNotFound) - } - poolID = poolRef.ID + if poolRef := r.pools.LookupByName(ctx, poolName); poolRef != nil { + return poolRef.ID, nil } - return poolID, nil + return ksuid.Nil, fmt.Errorf("%s: %w", poolName, pools.ErrNotFound) } func (r *Root) CommitObject(ctx context.Context, poolID ksuid.KSUID, branchName string) (ksuid.KSUID, error) { diff --git a/lake/ztests/create-ksuid-name.yaml b/lake/ztests/create-ksuid-name.yaml new file mode 100644 index 0000000000..9198c41068 --- /dev/null +++ b/lake/ztests/create-ksuid-name.yaml @@ -0,0 +1,11 @@ +# Test that a pool can be given a ksuid name and everything still works. +script: | + export ZED_LAKE=test + zed init -q + zed create 2WwyVrZdEITo5WkKu1YsJC4dMjU + zed use 2WwyVrZdEITo5WkKu1YsJC4dMjU +outputs: + - name: stdout + regexp: | + pool created: 2WwyVrZdEITo5WkKu1YsJC4dMjU \w{27} + Switched to branch "main" on pool "2WwyVrZdEITo5WkKu1YsJC4dMjU" diff --git a/service/request.go b/service/request.go index d79801449c..ec83afa0bf 100644 --- a/service/request.go +++ b/service/request.go @@ -84,18 +84,20 @@ func (r *Request) PoolID(w *ResponseWriter, root *lake.Root) (ksuid.KSUID, bool) if !ok { return ksuid.Nil, false } - id, err := lakeparse.ParseID(s) - if err != nil { - id, err = root.PoolID(r.Context(), s) - if errors.Is(err, pools.ErrNotFound) { - w.Error(err) - return ksuid.Nil, false - } - if err != nil { - w.Error(srverr.ErrInvalid("invalid path param %q: %w", s, err)) - return ksuid.Nil, false + if id, err := lakeparse.ParseID(s); err == nil { + if _, err = root.OpenPool(r.Context(), id); err == nil { + return id, true } } + id, err := root.PoolID(r.Context(), s) + if errors.Is(err, pools.ErrNotFound) { + w.Error(err) + return ksuid.Nil, false + } + if err != nil { + w.Error(srverr.ErrInvalid("invalid path param %q: %w", s, err)) + return ksuid.Nil, false + } return id, true } diff --git a/service/ztests/create-ksuid-name.yaml b/service/ztests/create-ksuid-name.yaml new file mode 100644 index 0000000000..b01594c2f1 --- /dev/null +++ b/service/ztests/create-ksuid-name.yaml @@ -0,0 +1,12 @@ +# Test that a pool can be given a ksuid name and everything still works. +script: | + source service.sh + zed create 2WwyVrZdEITo5WkKu1YsJC4dMjU + zed use 2WwyVrZdEITo5WkKu1YsJC4dMjU +inputs: + - name: service.sh +outputs: + - name: stdout + regexp: | + pool created: 2WwyVrZdEITo5WkKu1YsJC4dMjU \w{27} + Switched to branch "main" on pool "2WwyVrZdEITo5WkKu1YsJC4dMjU"