Skip to content

Commit 48b70d0

Browse files
authored
fix: handle application error between client and server, Close #249
* update to LRUTokenStore(10, 5) * update debug output, Close T-68 * update debug output, Close T-81 * update debug output, Close T-82 * update debug output, Close T-67 * different Close() error code * update debug info
1 parent c639456 commit 48b70d0

3 files changed

Lines changed: 23 additions & 20 deletions

File tree

internal/core/client.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,14 @@ func (c *Client) Connect(ctx context.Context, addr string) error {
6161

6262
quicConf := &quic.Config{
6363
Versions: []quic.VersionNumber{quic.Version1, quic.VersionDraft29},
64-
MaxIdleTimeout: time.Second * 3,
64+
MaxIdleTimeout: time.Second * 10,
6565
KeepAlive: true,
66-
MaxIncomingStreams: 10000,
67-
MaxIncomingUniStreams: 10000,
66+
MaxIncomingStreams: 1000,
67+
MaxIncomingUniStreams: 1000,
6868
HandshakeIdleTimeout: time.Second * 3,
6969
InitialStreamReceiveWindow: 1024 * 1024 * 2,
7070
InitialConnectionReceiveWindow: 1024 * 1024 * 2,
71-
TokenStore: quic.NewLRUTokenStore(1, 1),
71+
TokenStore: quic.NewLRUTokenStore(10, 5),
7272
DisablePathMTUDiscovery: true,
7373
}
7474

@@ -104,7 +104,7 @@ func (c *Client) Connect(ctx context.Context, addr string) error {
104104
go c.handleFrame()
105105

106106
c.state = ConnStateConnected
107-
logger.Printf("%s[%s] is connected to YoMo-Zipper %s", ClientLogPrefix, c.token, addr)
107+
logger.Printf("%s has connected to %s (%s)", ClientLogPrefix, c.token, addr)
108108

109109
return nil
110110
}
@@ -119,12 +119,12 @@ func (c *Client) handleFrame() {
119119
f, err := fs.ReadFrame()
120120
if err != nil {
121121
defer c.stream.Close()
122-
defer c.session.CloseWithError(0xCC, err.Error())
122+
defer c.session.CloseWithError(0xD0, err.Error())
123123
defer c.setState(ConnStateDisconnected)
124124

125125
logger.Errorf("%shandleFrame.ReadFrame(): %T %v", ClientLogPrefix, err, err)
126126
if e, ok := err.(*quic.IdleTimeoutError); ok {
127-
logger.Errorf("%sconnection timeout, err=%v", ClientLogPrefix, e)
127+
logger.Errorf("%sconnection timeout, err=%v, zipper=%s", ClientLogPrefix, e, c.addr)
128128
} else if e, ok := err.(*quic.ApplicationError); ok {
129129
logger.Errorf("%sapplication error, err=%v, errcode=%v", ClientLogPrefix, e, e.ErrorCode)
130130
if e.ErrorCode == 0xCC {
@@ -219,10 +219,10 @@ func (c *Client) WriteFrame(frm frame.Frame) error {
219219
defer c.mu.Unlock()
220220
n, err := c.stream.Write(data)
221221
// TODO: move partial logging as a utility
222-
if len(data) > 256 {
223-
logger.Debugf("%sWriteFrame() wrote n=%d, len(data)=%d", ClientLogPrefix, n, len(data))
222+
if len(data) > 16 {
223+
logger.Debugf("%sWriteFrame() wrote n=%d, len(data)=%d, data[:16]=%# x ...", ClientLogPrefix, n, len(data), data[:16])
224224
} else {
225-
logger.Debugf("%sWriteFrame() wrote n=%d, data=%# x", ClientLogPrefix, n, data)
225+
logger.Debugf("%sWriteFrame() wrote n=%d, len(data)=%d, data=%# x", ClientLogPrefix, n, len(data), data)
226226
}
227227
if err != nil {
228228
if e, ok := err.(*quic.IdleTimeoutError); ok {
@@ -258,9 +258,11 @@ func (c *Client) reconnect(ctx context.Context, addr string) {
258258
t := time.NewTicker(3 * time.Second)
259259
for range t.C {
260260
if c.state == ConnStateDisconnected {
261-
fmt.Printf("%s[%s] is retring to YoMo-Zipper %s...\n", ClientLogPrefix, c.token, addr)
261+
fmt.Printf("%s[%s] is retrying to YoMo-Zipper %s...\n", ClientLogPrefix, c.token, addr)
262262
err := c.Connect(ctx, addr)
263-
logger.Errorf("%s reconnect error:%v", ClientLogPrefix, err)
263+
if err != nil {
264+
logger.Errorf("%s reconnect to %s error:%v", ClientLogPrefix, addr, err)
265+
}
264266
}
265267
}
266268
}

internal/core/server.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ func NewServer(name string) *Server {
4141
func (s *Server) ListenAndServe(ctx context.Context, endpoint string) error {
4242
qconf := &quic.Config{
4343
Versions: []quic.VersionNumber{quic.Version1, quic.VersionDraft29},
44-
MaxIdleTimeout: time.Second * 3,
44+
MaxIdleTimeout: time.Second * 10,
4545
KeepAlive: true,
46-
MaxIncomingStreams: 10000,
47-
MaxIncomingUniStreams: 10000,
46+
MaxIncomingStreams: 1000,
47+
MaxIncomingUniStreams: 1000,
4848
HandshakeIdleTimeout: time.Second * 3,
4949
InitialStreamReceiveWindow: 1024 * 1024 * 2,
5050
InitialConnectionReceiveWindow: 1024 * 1024 * 2,
@@ -124,18 +124,19 @@ func (s *Server) handleSession(session quic.Session, mainStream quic.Stream) {
124124
logger.Debugf("%shandleSession 💚 waiting read next...", ServerLogPrefix)
125125
f, err := fs.ReadFrame()
126126
if err != nil {
127-
logger.Errorf("%s%T %v", ServerLogPrefix, err, err)
127+
logger.Errorf("%s [ERR] %T %v", ServerLogPrefix, err, err)
128128
if errors.Is(err, net.ErrClosed) {
129129
// if client close the connection, net.ErrClosed will be raise
130130
// by quic-go IdleTimeoutError after connection's KeepAlive config.
131-
// logger.Infof("[ERR] on [ParseFrame] %v", net.ErrClosed)
131+
logger.Warnf("%s [ERR] net.ErrClosed on [handleSession] %v", ServerLogPrefix, net.ErrClosed)
132+
session.CloseWithError(0xC1, "net.ErrClosed")
132133
break
133134
}
134135
// any error occurred, we should close the session
135136
// after this, session.AcceptStream() will raise the error
136137
// which specific in session.CloseWithError()
137138
mainStream.Close()
138-
session.CloseWithError(0xCC, err.Error())
139+
session.CloseWithError(0xC0, err.Error())
139140
logger.Warnf("%ssession.Close()", ServerLogPrefix)
140141
break
141142
}
@@ -183,7 +184,7 @@ func (s *Server) handleHandshakeFrame(stream quic.Stream, session quic.Session,
183184
// unknown client type
184185
logger.Errorf("%sClientType=%# x, ilegal!", ServerLogPrefix, f.ClientType)
185186
stream.Close()
186-
session.CloseWithError(0xCC, "Unknown ClientType, illegal!")
187+
session.CloseWithError(0xCD, "Unknown ClientType, illegal!")
187188
return errors.New("core.server: Unknown ClientType, illegal")
188189
}
189190
return nil

zipper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ func (z *zipper) AddDownstreamZipper(downstream Zipper) error {
193193
logger.Debugf("%sAddDownstreamZipper: %v", zipperLogPrefix, downstream)
194194
z.downstreamZippers = append(z.downstreamZippers, downstream)
195195
z.hasDownstreams = true
196-
logger.Debugf("%scurrent downstreams: %v", zipperLogPrefix, z.downstreamZippers)
196+
logger.Debugf("%scurrent downstreams: %d", zipperLogPrefix, len(z.downstreamZippers))
197197
return nil
198198
}
199199

0 commit comments

Comments
 (0)