|
16 | 16 |
|
17 | 17 | package rpcinfo |
18 | 18 |
|
| 19 | +import "github.com/cloudwego/kitex/pkg/kerrors" |
| 20 | + |
19 | 21 | type plainRPCInfo struct { |
20 | 22 | // use anonymous structs to force objects to be read-only |
21 | 23 | from struct{ EndpointInfo } |
@@ -82,17 +84,34 @@ func copyInvocation(i Invocation) Invocation { |
82 | 84 | if i == nil { |
83 | 85 | return nil |
84 | 86 | } |
85 | | - ink := i.(*invocation) |
86 | | - nink := &invocation{ |
87 | | - packageName: ink.PackageName(), |
88 | | - serviceName: ink.ServiceName(), |
89 | | - methodName: ink.MethodName(), |
90 | | - methodInfo: ink.MethodInfo(), |
91 | | - streamingMode: ink.StreamingMode(), |
92 | | - seqID: ink.SeqID(), |
93 | | - // ignore extra info to users |
| 87 | + var nink *invocation |
| 88 | + var bizErr kerrors.BizStatusErrorIface |
| 89 | + // fast-path, calling function of struct directly |
| 90 | + if ink, ok := i.(*invocation); ok { |
| 91 | + nink = &invocation{ |
| 92 | + packageName: ink.PackageName(), |
| 93 | + serviceName: ink.ServiceName(), |
| 94 | + methodName: ink.MethodName(), |
| 95 | + methodInfo: ink.MethodInfo(), |
| 96 | + streamingMode: ink.StreamingMode(), |
| 97 | + seqID: ink.SeqID(), |
| 98 | + // ignore extra info to users |
| 99 | + } |
| 100 | + bizErr = ink.BizStatusErr() |
| 101 | + } else { |
| 102 | + nink = &invocation{ |
| 103 | + packageName: i.PackageName(), |
| 104 | + serviceName: i.ServiceName(), |
| 105 | + methodName: i.MethodName(), |
| 106 | + methodInfo: i.MethodInfo(), |
| 107 | + streamingMode: i.StreamingMode(), |
| 108 | + seqID: i.SeqID(), |
| 109 | + // ignore extra info to users |
| 110 | + } |
| 111 | + bizErr = i.BizStatusErr() |
94 | 112 | } |
95 | | - nink.SetBizStatusErr(ink.BizStatusErr()) |
| 113 | + |
| 114 | + nink.SetBizStatusErr(bizErr) |
96 | 115 | return nink |
97 | 116 | } |
98 | 117 |
|
|
0 commit comments