-
Notifications
You must be signed in to change notification settings - Fork 929
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Imp: refactor the network transport layer #495
Imp: refactor the network transport layer #495
Conversation
@Patrick0308 有时间看看 |
@flycash OK |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can the current program run through the closed-loop state?
return exchangeClient | ||
} | ||
|
||
func (client *ExchangeClient) Request(invocation *protocol.Invocation, url common.URL, timeout time.Duration, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
超时时间等需要每次请求再计算下 因为有method维度的配置
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
参考:protocol/dubbo/dubbo_invoker.go:137
remoting/exchange_client.go
Outdated
client: client, | ||
} | ||
client.SetExchangeClient(exchangeClient) | ||
client.Connect(url) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
client.Connect需要返回是否成功吧
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已修改
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
如果连接不上,这个ip不能创建invoker。
以增加测试用例。
remoting/exchange_server.go
Outdated
} | ||
|
||
func (server *ExchangeServer) Start() { | ||
(server.Server).Start() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
是否必要加(server.Server)中的()
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已删除,原来定义成指针,现在不需要了。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please remove useless file and code making easier to review.
@cvictory If u completed ur work and need review, pls give us ur request for review. |
Codecov Report
@@ Coverage Diff @@
## feature/dubbo-protocol-restructure #495 +/- ##
======================================================================
- Coverage 67.20% 66.25% -0.95%
======================================================================
Files 174 174
Lines 9261 9330 +69
======================================================================
- Hits 6224 6182 -42
- Misses 2432 2530 +98
- Partials 605 618 +13
Continue to review full report at Codecov.
|
please review it again. |
@Patrick0308 @pantianying pls review this pr. |
protocol/dubbo/dubbo_codec.go
Outdated
remoting.NewCodec("dubbo", codec) | ||
} | ||
|
||
// DubboPackage ... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pls add comment for the public structs/funcs
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已改。
protocol/dubbo/dubbo_codec.go
Outdated
return fmt.Sprintf("DubboPackage: Header-%v, Path-%v, Body-%v", p.Header, p.Service, p.Body) | ||
} | ||
|
||
// Marshal ... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add comment.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已改。
protocol/dubbo/dubbo_codec.go
Outdated
return bytes.NewBuffer(pkg), nil | ||
} | ||
|
||
// Unmarshal ... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已改。
"github.com/apache/dubbo-go/common" | ||
) | ||
|
||
type Server interface { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add comment for the public structs/funcs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已改。
"strconv" | ||
"time" | ||
|
||
hessian "github.com/apache/dubbo-go-hessian2" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pls using anther import block.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已改。
return bytes.NewBuffer(pkg), nil | ||
} | ||
|
||
// Unmarshal ... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add comment for public strucs/funcs.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it is unit test.
remoting/getty/getty_client.go
Outdated
"math/rand" | ||
"time" | ||
|
||
"github.com/apache/dubbo-go/remoting" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pls using three import import blocks as other dubbo-go files.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已改。
remoting/getty/getty_client.go
Outdated
rand.Seed(time.Now().UnixNano()) | ||
} | ||
|
||
// SetClientConf ... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pls add comment for public funcs/structs in this file.
pls add some ut. The ut coverage is lower. |
remoting/codec.go
Outdated
codec = make(map[string]Codec, 2) | ||
} | ||
|
||
func NewCodec(protocol string, codecTmp Codec) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe It would be better to replace new with register?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
改了。
remoting/codec.go
Outdated
codec map[string]Codec | ||
) | ||
|
||
func init() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need to initialize in init
example:
var codec=make( map[string]Codec)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
改了
remoting/exchange_client.go
Outdated
client.SetExchangeClient(exchangeClient) | ||
if client.Connect(url) != nil { | ||
//retry for a while | ||
time.Sleep(1 * time.Second) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If it's necessary to try again, there's no need to wait for a while
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
连接有可能瞬时的网络问题,所以sleep了100ms
|
||
if pendingResponse.Callback == nil { | ||
pendingResponse.Err = pendingResponse.response.Error | ||
pendingResponse.Done <- struct{}{} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
use close(pendingResponse.Done)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个和原来是一致的。为什么要直接关闭?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
一般chan 作为一次性关闭使用都是close,可以让全部协程<-Done 都触发。只发送一个信号,如果该Done在多个协程使用了,只能关闭一个协程。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个只有一个地方使用,这个地方就是接受相应请求。后续可以考虑。
remoting/getty/getty_client.go
Outdated
if session == nil { | ||
return errSessionNotExist | ||
} | ||
defer func() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这样的写法有点奇怪,这里没有必要用defer吧。。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
删除了。
@@ -141,6 +141,29 @@ func (r *RPCInvocation) SetCallBack(c interface{}) { | |||
r.callBack = c | |||
} | |||
|
|||
func (r *RPCInvocation) ServiceKey() string { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why add ServiceKey here? is url.servicekey
wrong?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
因为回来的时候,所有参数放到了rpcInvocation中。按照dubbo java做法,其实invocation下会有invoker,再通过invoker获取url。这里暂时不去完全适配。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个invocation里面不是有invoker吗?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
invoker需要去获取,暂时还没有。 原来逻辑里是通过构建一个url,通过url.ServiceKey来获取服务标识。
requestTimeout = t | ||
exchangeClient := getExchangeClient(url) | ||
if exchangeClient == nil { | ||
return nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
when get nil exchangeClient, if we should throw a error?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
type Protocol interface {
Export(invoker Invoker) Exporter
Refer(url common.URL) Invoker
Destroy()
}
这个接口的Refer接口,没有error返回值,所以要么只能panic,要么只能返回nil.
因为连接不上认为是比较常见的问题,所以返回nil来支持。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
java中是往上抛异常。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so add warning log?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
加一句日志会更好一点。不过我们后面应该考虑一下要不要修改这个返回值,支持返回error。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我增加一个warning的log吧。
Codecov Report
@@ Coverage Diff @@
## feature/dubbo-protocol-restructure #495 +/- ##
======================================================================
- Coverage 67.20% 66.09% -1.12%
======================================================================
Files 174 174
Lines 9261 9343 +82
======================================================================
- Hits 6224 6175 -49
- Misses 2432 2544 +112
- Partials 605 624 +19
Continue to review full report at Codecov.
|
config/application_config.go
Outdated
@@ -40,7 +37,7 @@ func (*ApplicationConfig) Prefix() string { | |||
return constant.DUBBO + ".application." | |||
} | |||
|
|||
// Id ... | |||
// ID ... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if u do not wanna add comment here, pls add // nolint
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok. It is keep the same as before.
config/application_config.go
Outdated
import ( | ||
"github.com/apache/dubbo-go/common/constant" | ||
"github.com/creasty/defaults" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
split
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok
protocol/dubbo/dubbo_invoker.go
Outdated
@@ -19,7 +19,10 @@ package dubbo | |||
|
|||
import ( | |||
"context" | |||
"github.com/apache/dubbo-go/config" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
split
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok
protocol/dubbo/dubbo_invoker.go
Outdated
@@ -48,21 +51,31 @@ var ( | |||
attachmentKey = []string{constant.INTERFACE_KEY, constant.GROUP_KEY, constant.TOKEN_KEY, constant.TIMEOUT_KEY} | |||
) | |||
|
|||
// DubboInvoker ... | |||
// DubboInvoker. It is implement of protocol.Invoker. One dubboInvoker refer to one service and ip. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
DubboInvoker is implement of protocol.Invoker, a DubboInvoker refer to one service and ip.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok
protocol/dubbo/dubbo_invoker.go
Outdated
@@ -83,6 +96,9 @@ func (di *DubboInvoker) Invoke(ctx context.Context, invocation protocol.Invocati | |||
defer atomic.AddInt64(&(di.reqNum), -1) | |||
|
|||
inv := invocation.(*invocation_impl.RPCInvocation) | |||
// init param | |||
inv.SetAttachments(constant.PATH_KEY, di.GetUrl().GetParam(constant.INTERFACE_KEY, "")) | |||
inv.SetAttachments(constant.VERSION_KEY, di.GetUrl().GetParam(constant.VERSION_KEY, "")) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add to attachmentKey?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
because there params are removed in previous process.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
好主意。
protocol/dubbo/dubbo_invoker.go
Outdated
} | ||
} | ||
if result.Err == nil { | ||
result.Rest = inv.Reply() | ||
result.Attrs = response.atta | ||
result.Attrs = result.Attachments() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do you set attachments to result?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我的意思是,result.Attachments() 取出来的就是result.Attrs,你这里取自己给自己赋值?而且没看到result的attrs有被赋值,response.atta 原来的这个内容在哪里呢?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
en, 取错对象了,应用用rest.
protocol/dubbo/dubbo_invoker_test.go
Outdated
@@ -58,7 +57,9 @@ func TestDubboInvoker_Invoke(t *testing.T) { | |||
res := invoker.Invoke(context.Background(), inv) | |||
assert.NoError(t, res.Error()) | |||
assert.Equal(t, User{Id: "1", Name: "username"}, *res.Result().(*User)) | |||
assert.Equal(t, "test_value", res.Attachments()["test_key"]) // test attachments for request/response | |||
//result will not contain attachment | |||
// attachment in result it is useless. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
useless?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Have removed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
requestTimeout = t | ||
exchangeClient := getExchangeClient(url) | ||
if exchangeClient == nil { | ||
return nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
加一句日志会更好一点。不过我们后面应该考虑一下要不要修改这个返回值,支持返回error。
|
||
func getExchangeClient(url common.URL) *remoting.ExchangeClient { | ||
clientTmp, ok := exchangeClientMap.Load(url.Location) | ||
if !ok { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这一步实际上存在并发隐患。如果多线程进来,同时发现没有,就会同时进来这里,于是创建多个,而后者覆盖前者Store
调用的结果。修改的建议是使用double-check在发现!ok之后加锁再尝试取一次,取不到则创建。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
增加了一层锁,可以看下:用了syncMap
return exchangeClientTmp | ||
} | ||
exchangeClient, ok := clientTmp.(*remoting.ExchangeClient) | ||
if !ok { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
什么情况下会执行到!ok里面?我有点没看懂……
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
没有情形,会走到这个里面。 默认放进去的都是这个类型。
protocol/jsonrpc/jsonrpc_invoker.go
Outdated
@@ -54,7 +53,7 @@ func (ji *JsonrpcInvoker) Invoke(ctx context.Context, invocation protocol.Invoca | |||
url := ji.GetUrl() | |||
req := ji.client.NewRequest(url, inv.MethodName(), inv.Arguments()) | |||
ctxNew := context.WithValue(ctx, constant.DUBBOGO_CTX_KEY, map[string]string{ | |||
"X-Proxy-Id": "dubbogo", | |||
"X-Proxy-ID": "dubbogo", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里修改之后,是否会出现新版本的jsonrpc客户端调过去老版本的jsonrpc服务端失败的问题?因为老版本的可能只能识别"X-Proxy-Id"。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
+1
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
恢复。
remoting/exchange.go
Outdated
} | ||
|
||
func SequenceId() uint64 { | ||
// increse 2 for every request. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
最好把为什么+2而不是+1这个讲清楚。这是一个很tricky的事情=。=
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
加了注释,client-》 server期望用偶数,server-》client用奇数。 这个没有强制,只是为了更加方便区分。
remoting/exchange.go
Outdated
// NewRequest | ||
func NewRequest(version string) *Request { | ||
return &Request{ | ||
ID: int64(SequenceId()), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这里看来,为什么sequenceId不直接生成64位?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
之前想用uint表示,后面想了下,还是用int64吧。 和java之类的通信,会溢出。
p.Service.Method = invocation.MethodName() | ||
|
||
timeout, err := strconv.Atoi(invocation.AttachmentsByKey(constant.TIMEOUT_KEY, "3000")) | ||
if err != nil { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You would better define a constant like default timeout for 3000.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已改
if err != nil { | ||
// it will be wrapped in readwrite.Write . | ||
return nil, err | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
perrors.WithStack(err)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
已改
Event: pkg.Header.Type&hessian.PackageHeartbeat != 0x00, | ||
} | ||
if pkg.Header.Type&hessian.PackageHeartbeat == 0x00 { | ||
// convert params of request |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No go fmt? '&' 前后应该有空格才对。建议ide调成自动format
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
有的,主要是有优先级比较的缘故(& 和 ==)吧。加了个括号就好了。。。
argBuf := new(bytes.Buffer) | ||
for i := 0; i < 400; i++ { | ||
argBuf.WriteString("击鼓其镗,踊跃用兵。土国城漕,我独南行。从孙子仲,平陈与宋。不我以归,忧心有忡。爰居爰处?爰丧其马?于以求之?于林之下。死生契阔,与子成说。执子之手,与子偕老。于嗟阔兮,不我活兮。于嗟洵兮,不我信兮。") | ||
argBuf.WriteString("击鼓其镗,踊跃用兵。土国城漕,我独南行。从孙子仲,平陈与宋。不我以归,忧心有忡。爰居爰处?爰丧其马?于以求之?于林之下。死生契阔,与子成说。执子之手,与子偕老。于嗟阔兮,不我活兮。于嗟洵兮,不我信兮。") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do not think Chinese is ok. Pls mod to English...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个是之前的用例,我移动了个地方。 中文也测试下,可以吧。 我加个注释?
|
||
func doHandleRequest(rpcInvocation *invocation.RPCInvocation) protocol.RPCResult { | ||
exporter, _ := dubboProtocol.ExporterMap().Load(rpcInvocation.ServiceKey()) | ||
result := protocol.RPCResult{} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is dubboProtocol.ExporterMap() may be nil?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
除非是非法流量。
处理的逻辑统一在export == nil 里进行处理。
} | ||
} | ||
//FIXME atomic operation | ||
cl.init = true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
need atomic.Bool
return er | ||
} | ||
request := NewRequest("2.0.2") | ||
request.Data = invocation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2.0.2 means what?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2.0.2 means what?
Pls use constant.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2.0.2是协议版本
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
这个pr太大了,不做调整了。 我去社区提个issue吧,很多地方都有。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
现在dubbo和getty耦合度很高,所以先进行第一轮抽象,部分逻辑后续待优化。
做的改动:
5.requestId变成全局,PendingResponse也变成全局
待优化的小的功能点:
代码主干流程完成,部分异常和分支流程待完善,单元测试待完善。 先提交给大家看下