The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/7361

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Signed-off-by: Free Ekanayaka <free.ekanay...@canonical.com>
From 7f8ca6cd271bc001f0bc780a034ece192a203779 Mon Sep 17 00:00:00 2001
From: Free Ekanayaka <free.ekanay...@canonical.com>
Date: Wed, 13 May 2020 14:58:53 +0100
Subject: [PATCH] Don't run a connection proxy when connecting with the Go
 dqlite client

Signed-off-by: Free Ekanayaka <free.ekanay...@canonical.com>
---
 lxd/cluster/gateway.go | 79 ++++++++++++++++++++++--------------------
 1 file changed, 42 insertions(+), 37 deletions(-)

diff --git a/lxd/cluster/gateway.go b/lxd/cluster/gateway.go
index e46908a6fe..5e16628e32 100644
--- a/lxd/cluster/gateway.go
+++ b/lxd/cluster/gateway.go
@@ -374,7 +374,47 @@ func (g *Gateway) raftDial() client.DialFunc {
                        }
                        address = string(addr)
                }
-               return dqliteNetworkDial(ctx, address, g, false)
+               conn, err := dqliteNetworkDial(ctx, address, g, false)
+               if err != nil {
+                       return nil, err
+               }
+
+               listener, err := net.Listen("unix", "")
+               if err != nil {
+                       return nil, errors.Wrap(err, "Failed to create unix 
listener")
+               }
+
+               goUnix, err := net.Dial("unix", listener.Addr().String())
+               if err != nil {
+                       return nil, errors.Wrap(err, "Failed to connect to unix 
listener")
+               }
+
+               cUnix, err := listener.Accept()
+               if err != nil {
+                       return nil, errors.Wrap(err, "Failed to connect to unix 
listener")
+               }
+
+               listener.Close()
+
+               go func() {
+                       _, err := io.Copy(eagain.Writer{Writer: goUnix}, 
eagain.Reader{Reader: conn})
+                       if err != nil {
+                               logger.Warnf("Dqlite client proxy TLS -> Unix: 
%v", err)
+                       }
+                       goUnix.Close()
+                       conn.Close()
+               }()
+
+               go func() {
+                       _, err := io.Copy(eagain.Writer{Writer: conn}, 
eagain.Reader{Reader: goUnix})
+                       if err != nil {
+                               logger.Warnf("Dqlite client proxy Unix -> TLS: 
%v", err)
+                       }
+                       conn.Close()
+                       goUnix.Close()
+               }()
+
+               return cUnix, nil
        }
 }
 
@@ -888,41 +928,6 @@ func dqliteNetworkDial(ctx context.Context, addr string, g 
*Gateway, checkLeader
                return nil, fmt.Errorf("Missing or unexpected Upgrade header in 
response")
        }
 
-       listener, err := net.Listen("unix", "")
-       if err != nil {
-               return nil, errors.Wrap(err, "Failed to create unix listener")
-       }
-
-       goUnix, err := net.Dial("unix", listener.Addr().String())
-       if err != nil {
-               return nil, errors.Wrap(err, "Failed to connect to unix 
listener")
-       }
-
-       cUnix, err := listener.Accept()
-       if err != nil {
-               return nil, errors.Wrap(err, "Failed to connect to unix 
listener")
-       }
-
-       listener.Close()
-
-       go func() {
-               _, err := io.Copy(eagain.Writer{Writer: goUnix}, 
eagain.Reader{Reader: conn})
-               if err != nil {
-                       logger.Warnf("Dqlite client proxy TLS -> Unix: %v", err)
-               }
-               goUnix.Close()
-               conn.Close()
-       }()
-
-       go func() {
-               _, err := io.Copy(eagain.Writer{Writer: conn}, 
eagain.Reader{Reader: goUnix})
-               if err != nil {
-                       logger.Warnf("Dqlite client proxy Unix -> TLS: %v", err)
-               }
-               conn.Close()
-               goUnix.Close()
-       }()
-
        // We successfully established a connection with the leader. Maybe the
        // leader is ourselves, and we were recently elected. In that case
        // trigger a full heartbeat now: it will be a no-op if we aren't
@@ -931,7 +936,7 @@ func dqliteNetworkDial(ctx context.Context, addr string, g 
*Gateway, checkLeader
                go g.heartbeat(g.ctx, true)
        }
 
-       return cUnix, nil
+       return conn, nil
 }
 
 // Create a dial function that connects to the local dqlite.
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to