MCPcopy Create free account
hub / github.com/IceFireDB/IceFireDB / onConn

Method onConn

IceFireDB-SQLProxy/internal/mysql/proxy.go:75–116  ·  view source on GitHub ↗
(c net.Conn)

Source from the content-addressed store, hash-verified

73}
74
75func (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
118func (m *mysqlProxy) popAdminConn() (*client.Conn, error) {
119 return m.popConn(m.adminPool)

Callers 1

RunFunction · 0.45

Calls 6

popAdminConnMethod · 0.95
pushAdminConnMethod · 0.95
NewClientConnFunction · 0.92
CloseMethod · 0.65
ClosedMethod · 0.45
HandleCommandMethod · 0.45

Tested by

no test coverage detected