Просмотр исходного кода

Fix gcplogs memory/connection leak

The cloud logging client should be closed when the log driver is closed. Otherwise dockerd will keep a gRPC connection to the logging endpoint open indefinitely.

This results in a slow leak of tcp sockets (1) and memory (~200Kb) any time that a container using `--log-driver=gcplogs` is terminates.

Signed-off-by: Patrick Haas <patrickhaas@google.com>
Patrick Haas 4 лет назад
Родитель
Сommit
ef553e14a4
1 измененных файлов с 3 добавлено и 1 удалено
  1. 3 1
      daemon/logger/gcplogs/gcplogging.go

+ 3 - 1
daemon/logger/gcplogs/gcplogging.go

@@ -54,6 +54,7 @@ func init() {
 }
 }
 
 
 type gcplogs struct {
 type gcplogs struct {
+	client    *logging.Client
 	logger    *logging.Logger
 	logger    *logging.Logger
 	instance  *instanceInfo
 	instance  *instanceInfo
 	container *containerInfo
 	container *containerInfo
@@ -170,6 +171,7 @@ func New(info logger.Info) (logger.Logger, error) {
 	}
 	}
 
 
 	l := &gcplogs{
 	l := &gcplogs{
+		client: c,
 		logger: lg,
 		logger: lg,
 		container: &containerInfo{
 		container: &containerInfo{
 			Name:      info.ContainerName,
 			Name:      info.ContainerName,
@@ -237,7 +239,7 @@ func (l *gcplogs) Log(m *logger.Message) error {
 
 
 func (l *gcplogs) Close() error {
 func (l *gcplogs) Close() error {
 	l.logger.Flush()
 	l.logger.Flush()
-	return nil
+	return l.client.Close()
 }
 }
 
 
 func (l *gcplogs) Name() string {
 func (l *gcplogs) Name() string {