Its sole user was deleted in 02cafbe1ca.
And it has no public users: https://pkg.go.dev/tailscale.com/util/fastuuid?tab=importedby
And nothing in other Tailsale repos that I can find.
Updates tailscale/corp#24721
Change-Id: I8755770a255a91c6c99f596e6d10c303b3ddf213
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
main
parent
02cafbe1ca
commit
70d1241ca6
@ -1,56 +0,0 @@ |
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
// Package fastuuid implements a UUID construction using an in process CSPRNG.
|
||||
package fastuuid |
||||
|
||||
import ( |
||||
crand "crypto/rand" |
||||
"encoding/binary" |
||||
"io" |
||||
"math/rand/v2" |
||||
"sync" |
||||
|
||||
"github.com/google/uuid" |
||||
) |
||||
|
||||
// NewUUID returns a new UUID using a pool of generators, good for highly
|
||||
// concurrent use.
|
||||
func NewUUID() uuid.UUID { |
||||
g := pool.Get().(*generator) |
||||
defer pool.Put(g) |
||||
return g.newUUID() |
||||
} |
||||
|
||||
var pool = sync.Pool{ |
||||
New: func() any { |
||||
return newGenerator() |
||||
}, |
||||
} |
||||
|
||||
type generator struct { |
||||
rng rand.ChaCha8 |
||||
} |
||||
|
||||
func seed() [32]byte { |
||||
var r [32]byte |
||||
if _, err := io.ReadFull(crand.Reader, r[:]); err != nil { |
||||
panic(err) |
||||
} |
||||
return r |
||||
} |
||||
|
||||
func newGenerator() *generator { |
||||
return &generator{ |
||||
rng: *rand.NewChaCha8(seed()), |
||||
} |
||||
} |
||||
|
||||
func (g *generator) newUUID() uuid.UUID { |
||||
var u uuid.UUID |
||||
binary.NativeEndian.PutUint64(u[:8], g.rng.Uint64()) |
||||
binary.NativeEndian.PutUint64(u[8:], g.rng.Uint64()) |
||||
u[6] = (u[6] & 0x0f) | 0x40 // Version 4
|
||||
u[8] = (u[8] & 0x3f) | 0x80 // Variant 10
|
||||
return u |
||||
} |
||||
@ -1,72 +0,0 @@ |
||||
// Copyright (c) Tailscale Inc & AUTHORS
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
package fastuuid |
||||
|
||||
import ( |
||||
"testing" |
||||
|
||||
"github.com/google/uuid" |
||||
) |
||||
|
||||
func TestNewUUID(t *testing.T) { |
||||
g := pool.Get().(*generator) |
||||
defer pool.Put(g) |
||||
u := g.newUUID() |
||||
if u[6] != (u[6]&0x0f)|0x40 { |
||||
t.Errorf("version bits are incorrect") |
||||
} |
||||
if u[8] != (u[8]&0x3f)|0x80 { |
||||
t.Errorf("variant bits are incorrect") |
||||
} |
||||
} |
||||
|
||||
func BenchmarkBasic(b *testing.B) { |
||||
b.Run("NewUUID", func(b *testing.B) { |
||||
for range b.N { |
||||
NewUUID() |
||||
} |
||||
}) |
||||
|
||||
b.Run("uuid.New-unpooled", func(b *testing.B) { |
||||
uuid.DisableRandPool() |
||||
for range b.N { |
||||
uuid.New() |
||||
} |
||||
}) |
||||
|
||||
b.Run("uuid.New-pooled", func(b *testing.B) { |
||||
uuid.EnableRandPool() |
||||
for range b.N { |
||||
uuid.New() |
||||
} |
||||
}) |
||||
} |
||||
|
||||
func BenchmarkParallel(b *testing.B) { |
||||
b.Run("NewUUID", func(b *testing.B) { |
||||
b.RunParallel(func(pb *testing.PB) { |
||||
for pb.Next() { |
||||
NewUUID() |
||||
} |
||||
}) |
||||
}) |
||||
|
||||
b.Run("uuid.New-unpooled", func(b *testing.B) { |
||||
uuid.DisableRandPool() |
||||
b.RunParallel(func(pb *testing.PB) { |
||||
for pb.Next() { |
||||
uuid.New() |
||||
} |
||||
}) |
||||
}) |
||||
|
||||
b.Run("uuid.New-pooled", func(b *testing.B) { |
||||
uuid.EnableRandPool() |
||||
b.RunParallel(func(pb *testing.PB) { |
||||
for pb.Next() { |
||||
uuid.New() |
||||
} |
||||
}) |
||||
}) |
||||
} |
||||
Loading…
Reference in new issue