Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UUID package improvements #792

Merged
merged 3 commits into from
Jul 31, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cmd/registry/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
_ "github.com/docker/distribution/registry/storage/driver/middleware/cloudfront"
_ "github.com/docker/distribution/registry/storage/driver/s3"
_ "github.com/docker/distribution/registry/storage/driver/swift"
"github.com/docker/distribution/uuid"
"github.com/docker/distribution/version"
gorhandlers "github.com/gorilla/handlers"
"github.com/yvasiyarov/gorelic"
Expand Down Expand Up @@ -62,6 +63,10 @@ func main() {
fatalf("error configuring logger: %v", err)
}

// inject a logger into the uuid library. warns us if there is a problem
// with uuid generation under low entropy.
uuid.Loggerf = context.GetLogger(ctx).Warnf

app := handlers.NewApp(ctx, *config)
handler := configureReporting(app)
handler = panicHandler(handler)
Expand Down
13 changes: 11 additions & 2 deletions context/context.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package context

import (
"sync"

"github.com/docker/distribution/uuid"
"golang.org/x/net/context"
)
Expand All @@ -14,11 +16,19 @@ type Context interface {
// provided as the main background context.
type instanceContext struct {
Context
id string // id of context, logged as "instance.id"
id string // id of context, logged as "instance.id"
once sync.Once // once protect generation of the id
}

func (ic *instanceContext) Value(key interface{}) interface{} {
if key == "instance.id" {
ic.once.Do(func() {
// We want to lazy initialize the UUID such that we don't
// call a random generator from the package initialization
// code. For various reasons random could not be available
// https://github.com/docker/distribution/issues/782
ic.id = uuid.Generate().String()
})
return ic.id
}

Expand All @@ -27,7 +37,6 @@ func (ic *instanceContext) Value(key interface{}) interface{} {

var background = &instanceContext{
Context: context.Background(),
id: uuid.Generate().String(),
}

// Background returns a non-nil, empty Context. The background context
Expand Down
7 changes: 0 additions & 7 deletions context/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ package context
import (
"fmt"

"github.com/docker/distribution/uuid"

"github.com/Sirupsen/logrus"
)

Expand Down Expand Up @@ -101,8 +99,3 @@ func getLogrusLogger(ctx Context, keys ...interface{}) *logrus.Entry {

return logger.WithFields(fields)
}

func init() {
// inject a logger into the uuid library.
uuid.Loggerf = GetLogger(Background()).Warnf
}
3 changes: 1 addition & 2 deletions uuid/uuid.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"crypto/rand"
"fmt"
"io"
"log"
"os"
"syscall"
"time"
Expand All @@ -30,7 +29,7 @@ var (

// Loggerf can be used to override the default logging destination. Such
// log messages in this library should be logged at warning or higher.
Loggerf = log.Printf
Loggerf = func(format string, args ...interface{}) {}
)

// UUID represents a UUID value. UUIDs can be compared and set to other values
Expand Down