diff --git a/daemon/daemon.go b/daemon/daemon.go index 2da69bc..144d0c4 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -3,6 +3,7 @@ package daemon import ( "context" "fmt" + "math/rand" "os" "os/signal" "strings" @@ -38,6 +39,12 @@ func Run(ctx context.Context, conf *config.Config) error { cancel() }() + // The math/rand package is used presently for generating trace IDs, we + // seed it with the current time and pid so that the IDs are mostly + // unique. + rand.Seed(time.Now().UnixNano()) + rand.Seed(int64(os.Getpid())) + outlets, err := logging.OutletsFromConfig(*conf.Global.Logging) if err != nil { return errors.Wrap(err, "cannot build logging from config") diff --git a/daemon/logging/trace/trace_genID.go b/daemon/logging/trace/trace_genID.go index 0fcd043..908e3bd 100644 --- a/daemon/logging/trace/trace_genID.go +++ b/daemon/logging/trace/trace_genID.go @@ -3,20 +3,11 @@ package trace import ( "encoding/base64" "math/rand" - "os" "strings" - "time" "github.com/zrepl/zrepl/util/envconst" ) -var genIdPRNG = rand.New(rand.NewSource(1)) - -func init() { - genIdPRNG.Seed(time.Now().UnixNano()) - genIdPRNG.Seed(int64(os.Getpid())) -} - var genIdNumBytes = envconst.Int("ZREPL_TRACE_ID_NUM_BYTES", 3) func init() { @@ -30,7 +21,7 @@ func genID() string { enc := base64.NewEncoder(base64.RawStdEncoding, &out) buf := make([]byte, genIdNumBytes) for i := 0; i < len(buf); { - n, err := genIdPRNG.Read(buf[i:]) + n, err := rand.Read(buf[i:]) if err != nil { panic(err) }