Skip to content

Commit 6883f80

Browse files
committed
a broken AP change: extend PreWriteResponse
1 parent 013342a commit 6883f80

File tree

4 files changed

+16
-9
lines changed

4 files changed

+16
-9
lines changed

server/gateway.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func (s *Server) handleGatewayRequest(w http.ResponseWriter, r *http.Request, pa
8080
ctx := context.WithValue(context.Background(), StartRequestContextKey, time.Now().UnixNano())
8181
err = s.auth(ctx, req)
8282
if err != nil {
83-
s.Plugins.DoPreWriteResponse(ctx, req)
83+
s.Plugins.DoPreWriteResponse(ctx, req, nil)
8484
wh.Set(XMessageStatusType, "Error")
8585
wh.Set(XErrorMessage, err.Error())
8686
w.WriteHeader(401)
@@ -103,7 +103,7 @@ func (s *Server) handleGatewayRequest(w http.ResponseWriter, r *http.Request, pa
103103
return
104104
}
105105

106-
s.Plugins.DoPreWriteResponse(newCtx, req)
106+
s.Plugins.DoPreWriteResponse(newCtx, req, nil)
107107
if len(resMetadata) > 0 { //copy meta in context to request
108108
meta := res.Metadata
109109
if meta == nil {

server/plugin.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type PluginContainer interface {
2323
DoPreReadRequest(ctx context.Context) error
2424
DoPostReadRequest(ctx context.Context, r *protocol.Message, e error) error
2525

26-
DoPreWriteResponse(context.Context, *protocol.Message) error
26+
DoPreWriteResponse(context.Context, *protocol.Message, *protocol.Message) error
2727
DoPostWriteResponse(context.Context, *protocol.Message, *protocol.Message, error) error
2828

2929
DoPreWriteRequest(ctx context.Context) error
@@ -64,7 +64,7 @@ type (
6464

6565
//PreWriteResponsePlugin represents .
6666
PreWriteResponsePlugin interface {
67-
PreWriteResponse(context.Context, *protocol.Message) error
67+
PreWriteResponse(context.Context, *protocol.Message, *protocol.Message) error
6868
}
6969

7070
//PostWriteResponsePlugin represents .
@@ -193,10 +193,10 @@ func (p *pluginContainer) DoPostReadRequest(ctx context.Context, r *protocol.Mes
193193
}
194194

195195
// DoPreWriteResponse invokes PreWriteResponse plugin.
196-
func (p *pluginContainer) DoPreWriteResponse(ctx context.Context, req *protocol.Message) error {
196+
func (p *pluginContainer) DoPreWriteResponse(ctx context.Context, req *protocol.Message, res *protocol.Message) error {
197197
for i := range p.plugins {
198198
if plugin, ok := p.plugins[i].(PreWriteResponsePlugin); ok {
199-
err := plugin.PreWriteResponse(ctx, req)
199+
err := plugin.PreWriteResponse(ctx, req, res)
200200
if err != nil {
201201
return err
202202
}

server/server.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -314,15 +314,18 @@ func (s *Server) serveConn(conn net.Conn) {
314314
ctx = context.WithValue(ctx, StartRequestContextKey, time.Now().UnixNano())
315315
err = s.auth(ctx, req)
316316
if err != nil {
317-
s.Plugins.DoPreWriteResponse(ctx, req)
317+
318318
if !req.IsOneway() {
319319
res := req.Clone()
320320
res.SetMessageType(protocol.Response)
321321
handleError(res, err)
322322
data := res.Encode()
323+
s.Plugins.DoPreWriteResponse(ctx, req, res)
323324
conn.Write(data)
324325
s.Plugins.DoPostWriteResponse(ctx, req, res, err)
325326
protocol.FreeMsg(res)
327+
} else {
328+
s.Plugins.DoPreWriteResponse(ctx, req, nil)
326329
}
327330

328331
protocol.FreeMsg(req)
@@ -346,7 +349,7 @@ func (s *Server) serveConn(conn net.Conn) {
346349
log.Warnf("rpcx: failed to handle request: %v", err)
347350
}
348351

349-
s.Plugins.DoPreWriteResponse(newCtx, req)
352+
s.Plugins.DoPreWriteResponse(newCtx, req, res)
350353
if !req.IsOneway() {
351354
if len(resMetadata) > 0 { //copy meta in context to request
352355
meta := res.Metadata

serverplugin/alias.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (p *AliasPlugin) PostReadRequest(ctx context.Context, r *protocol.Message,
5959
}
6060

6161
// PreWriteResponse restore servicePath and serviceMethod.
62-
func (p *AliasPlugin) PreWriteResponse(ctx context.Context, r *protocol.Message) error {
62+
func (p *AliasPlugin) PreWriteResponse(ctx context.Context, r *protocol.Message, res *protocol.Message) error {
6363
if r.Metadata[aliasAppliedKey] != "true" {
6464
return nil
6565
}
@@ -72,6 +72,10 @@ func (p *AliasPlugin) PreWriteResponse(ctx context.Context, r *protocol.Message)
7272
r.ServicePath = pm.servicePath
7373
r.ServiceMethod = pm.serviceMethod
7474
delete(r.Metadata, aliasAppliedKey)
75+
if res != nil {
76+
res.ServicePath = pm.servicePath
77+
res.ServiceMethod = pm.serviceMethod
78+
}
7579
}
7680
}
7781
return nil

0 commit comments

Comments
 (0)