in proxy/protocol/dubbo/proxy/dubbo_proxy_ouput.go [143:178]
func handleDubboRequest(inv *invocation.Invocation, ctx *dubbo.InvokeContext, ir *invocation.Response) error {
if ir != nil {
if ir.Err != nil {
switch ir.Err.(type) {
case hystrix.FallbackNullError:
ctx.Rsp.SetStatus(dubbo.Ok)
case hystrix.CircuitError:
ctx.Rsp.SetStatus(dubbo.ServiceError)
case loadbalancer.LBError:
ctx.Rsp.SetStatus(dubbo.ServiceNotFound)
default:
ctx.Rsp.SetStatus(dubbo.ServerError)
}
ctx.Rsp.SetErrorMsg(ir.Err.Error())
return ir.Err
}
if inv.Endpoint == "" {
ctx.Rsp.SetStatus(dubbo.ServerError)
ctx.Rsp.SetErrorMsg(protocol.ErrUnknown.Error())
return protocol.ErrUnknown
}
} else {
ctx.Rsp.SetStatus(dubbo.ServerError)
ctx.Rsp.SetErrorMsg(protocol.ErrUnExpectedHandlerChainResponse.Error())
return protocol.ErrUnExpectedHandlerChainResponse
}
if ir.Result != nil {
ctx.Rsp = ir.Result.(*dubboclient.WrapResponse).Resp
} else {
err := protocol.ErrNilResult
openlog.Error("CAll Chain failed: " + err.Error())
return err
}
return nil
}