Browse Source

etcdserver/api/v3rpc: set grpclog once

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
Gyuho Lee 8 years ago
parent
commit
5b2f5150d9
1 changed files with 15 additions and 8 deletions
  1. 15 8
      etcdserver/api/v3rpc/grpc.go

+ 15 - 8
etcdserver/api/v3rpc/grpc.go

@@ -19,6 +19,7 @@ import (
 	"io/ioutil"
 	"io/ioutil"
 	"math"
 	"math"
 	"os"
 	"os"
+	"sync"
 
 
 	"github.com/coreos/etcd/etcdserver"
 	"github.com/coreos/etcd/etcdserver"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
@@ -37,6 +38,9 @@ const (
 	maxSendBytes      = math.MaxInt32
 	maxSendBytes      = math.MaxInt32
 )
 )
 
 
+// integration tests call this multiple times, which is racey in gRPC side
+var grpclogOnce sync.Once
+
 func Server(s *etcdserver.EtcdServer, tls *tls.Config, gopts ...grpc.ServerOption) *grpc.Server {
 func Server(s *etcdserver.EtcdServer, tls *tls.Config, gopts ...grpc.ServerOption) *grpc.Server {
 	var opts []grpc.ServerOption
 	var opts []grpc.ServerOption
 	opts = append(opts, grpc.CustomCodec(&codec{}))
 	opts = append(opts, grpc.CustomCodec(&codec{}))
@@ -67,13 +71,16 @@ func Server(s *etcdserver.EtcdServer, tls *tls.Config, gopts ...grpc.ServerOptio
 	// set zero values for metrics registered for this grpc server
 	// set zero values for metrics registered for this grpc server
 	grpc_prometheus.Register(grpcServer)
 	grpc_prometheus.Register(grpcServer)
 
 
-	if s.Cfg.Debug {
-		grpc.EnableTracing = true
-		// enable info, warning, error
-		grpclog.SetLoggerV2(grpclog.NewLoggerV2(os.Stderr, os.Stderr, os.Stderr))
-	} else {
-		// only discard info
-		grpclog.SetLoggerV2(grpclog.NewLoggerV2(ioutil.Discard, os.Stderr, os.Stderr))
-	}
+	grpclogOnce.Do(func() {
+		if s.Cfg.Debug {
+			grpc.EnableTracing = true
+			// enable info, warning, error
+			grpclog.SetLoggerV2(grpclog.NewLoggerV2(os.Stderr, os.Stderr, os.Stderr))
+		} else {
+			// only discard info
+			grpclog.SetLoggerV2(grpclog.NewLoggerV2(ioutil.Discard, os.Stderr, os.Stderr))
+		}
+	})
+
 	return grpcServer
 	return grpcServer
 }
 }