(c net.Conn)
| 73 | } |
| 74 | |
| 75 | func (m *mysqlProxy) onConn(c net.Conn) { |
| 76 | // Default to admin connection for direct connections |
| 77 | clientConn, err := m.popAdminConn() |
| 78 | if err != nil { |
| 79 | logrus.Errorf("get remote conn err: %v", err) |
| 80 | return |
| 81 | } |
| 82 | defer func() { |
| 83 | m.pushAdminConn(clientConn, err) |
| 84 | }() |
| 85 | h := &Handle{conn: clientConn} |
| 86 | |
| 87 | conn, err := server.NewClientConn(c, m.server, m.credential, h) |
| 88 | if err != nil { |
| 89 | return |
| 90 | } |
| 91 | defer func() { |
| 92 | err := recover() |
| 93 | if err != nil { |
| 94 | const size = 4096 |
| 95 | buf := make([]byte, size) |
| 96 | buf = buf[:runtime.Stack(buf, false)] |
| 97 | logrus.Errorf("panic %s", string(buf)) |
| 98 | } |
| 99 | |
| 100 | if !conn.Closed() { |
| 101 | conn.Close() |
| 102 | } |
| 103 | }() |
| 104 | |
| 105 | for { |
| 106 | err = conn.HandleCommand() |
| 107 | if err != nil { |
| 108 | if errors.Is(err, net.ErrClosed) { |
| 109 | err = nil |
| 110 | return |
| 111 | } |
| 112 | logrus.Warningf("command error: %v", err) |
| 113 | return |
| 114 | } |
| 115 | } |
| 116 | } |
| 117 | |
| 118 | func (m *mysqlProxy) popAdminConn() (*client.Conn, error) { |
| 119 | return m.popConn(m.adminPool) |
no test coverage detected