diff --git a/examples/dubbo/go-client/benchmark/benchmark.go b/examples/dubbo/go-client/benchmark/benchmark.go deleted file mode 100644 index 94bc864c294d8ba05b6067f1301f46cd311e2a34..0000000000000000000000000000000000000000 --- a/examples/dubbo/go-client/benchmark/benchmark.go +++ /dev/null @@ -1,197 +0,0 @@ -package main - -import ( - "context" - "errors" - "flag" - "fmt" - "log" - "net/http" - _ "net/http/pprof" - - "strconv" - "sync" - "sync/atomic" - "time" -) - -import ( - "github.com/AlexStocks/goext/net" - "github.com/dubbogo/hessian2" - "github.com/montanaflynn/stats" -) - -import ( - _ "github.com/dubbo/go-for-apache-dubbo/protocol/dubbo" - _ "github.com/dubbo/go-for-apache-dubbo/registry/protocol" - - _ "github.com/dubbo/go-for-apache-dubbo/filter/imp" - - _ "github.com/dubbo/go-for-apache-dubbo/cluster/loadbalance" - _ "github.com/dubbo/go-for-apache-dubbo/cluster/support" - "github.com/dubbo/go-for-apache-dubbo/config/support" - _ "github.com/dubbo/go-for-apache-dubbo/registry/zookeeper" -) - -// they are necessary: -// export CONF_CONSUMER_FILE_PATH="xxx" -// export APP_LOG_CONF_FILE="xxx" -var concurrency = flag.Int("c", 1, "concurrency") -var total = flag.Int("n", 1, "total requests for all clients") -var survivalTimeout int = 10e9 - -func main() { - initProfiling() - flag.Parse() - - conc, tn, err := checkArgs(*concurrency, *total) - if err != nil { - log.Printf("err: %v", err) - return - } - n := conc - m := tn / n - - log.Printf("concurrency: %d\nrequests per client: %d\n\n", n, m) - - var wg sync.WaitGroup - wg.Add(n * m) - - log.Printf("sent total %d messages, %d message per client", n*m, m) - - hessian.RegisterJavaEnum(Gender(MAN)) - hessian.RegisterJavaEnum(Gender(WOMAN)) - hessian.RegisterPOJO(&User{}) - - conMap, _ := support.Load() - if conMap == nil { - panic("conMap is nil") - } - - time.Sleep(3e9) - - var startWg sync.WaitGroup - startWg.Add(n) - - var trans uint64 - var transOK uint64 - - d := make([][]int64, n, n) - - //it contains warmup time but we can ignore it - totalT := time.Now().UnixNano() - for i := 0; i < n; i++ { - dt := make([]int64, 0, m) - d = append(d, dt) - - go func(i int) { - defer func() { - if r := recover(); r != nil { - log.Print("Recovered in f", r) - } - }() - - //warmup - //for j := 0; j < 5; j++ { - // user := &User{} - // err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser(context.TODO(), []interface{}{"A003"}, user) - // if err != nil { - // fmt.Println(err) - // } - //} - - startWg.Done() - startWg.Wait() - - for j := 0; j < m; j++ { - t := time.Now().UnixNano() - user := &User{} - err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser(context.TODO(), []interface{}{"A003"}, user) - - t = time.Now().UnixNano() - t - - d[i] = append(d[i], t) - - if err == nil && user.Id != "" { - atomic.AddUint64(&transOK, 1) - } - - if err != nil { - log.Printf("The benchmark request is err , err is %v", err.Error()) - } - - atomic.AddUint64(&trans, 1) - wg.Done() - } - }(i) - - } - - wg.Wait() - - totalT = time.Now().UnixNano() - totalT - log.Printf("took %f ms for %d requests\n", float64(totalT)/1000000, n*m) - - totalD := make([]int64, 0, n*m) - for _, k := range d { - totalD = append(totalD, k...) - } - totalD2 := make([]float64, 0, n*m) - for _, k := range totalD { - totalD2 = append(totalD2, float64(k)) - } - - mean, _ := stats.Mean(totalD2) - median, _ := stats.Median(totalD2) - max, _ := stats.Max(totalD2) - min, _ := stats.Min(totalD2) - p99, _ := stats.Percentile(totalD2, 99.9) - - log.Printf("sent requests : %d\n", n*m) - log.Printf("received requests : %d\n", atomic.LoadUint64(&trans)) - log.Printf("received requests_OK : %d\n", atomic.LoadUint64(&transOK)) - log.Printf("throughput (TPS) : %d\n", int64(n*m)*1000000000/totalT) - log.Printf("mean: %.f ns, median: %.f ns, max: %.f ns, min: %.f ns, p99.9: %.f ns\n", mean, median, max, min, p99) - log.Printf("mean: %d ms, median: %d ms, max: %d ms, min: %d ms, p99: %d ms\n", int64(mean/1000000), int64(median/1000000), int64(max/1000000), int64(min/1000000), int64(p99/1000000)) - -} - -// checkArgs check concurrency and total request count. -func checkArgs(c, n int) (int, int, error) { - if c < 1 { - log.Printf("c < 1 and reset c = 1") - c = 1 - } - if n < 1 { - log.Printf("n < 1 and reset n = 1") - n = 1 - } - if c > n { - return c, n, errors.New("c must be set <= n") - } - return c, n, nil -} - -func initProfiling() { - if !support.GetConsumerConfig().Pprof_Enabled { - return - } - const ( - PprofPath = "/debug/pprof/" - ) - var ( - err error - ip string - addr string - ) - - ip, err = gxnet.GetLocalIP() - if err != nil { - panic("can not get local ip!") - } - addr = ip + ":" + strconv.Itoa(support.GetConsumerConfig().Pprof_Port) - fmt.Println(addr) - go func() { - http.ListenAndServe(addr, nil) - }() -} diff --git a/examples/dubbo/go-client/benchmark/user.go b/examples/dubbo/go-client/benchmark/user.go deleted file mode 100644 index 4b805616b2ec3e59951b6309688b47d8271c8240..0000000000000000000000000000000000000000 --- a/examples/dubbo/go-client/benchmark/user.go +++ /dev/null @@ -1,92 +0,0 @@ -package main - -import ( - "context" - "fmt" - "strconv" - "time" -) - -import ( - "github.com/dubbogo/hessian2" -) - -import ( - "github.com/dubbo/go-for-apache-dubbo/config/support" -) - -type Gender hessian.JavaEnum - -func init() { - support.SetConService(new(UserProvider)) -} - -const ( - MAN hessian.JavaEnum = iota - WOMAN -) - -var genderName = map[hessian.JavaEnum]string{ - MAN: "MAN", - WOMAN: "WOMAN", -} - -var genderValue = map[string]hessian.JavaEnum{ - "MAN": MAN, - "WOMAN": WOMAN, -} - -func (g Gender) JavaClassName() string { - return "com.ikurento.user.Gender" -} - -func (g Gender) String() string { - s, ok := genderName[hessian.JavaEnum(g)] - if ok { - return s - } - - return strconv.Itoa(int(g)) -} - -func (g Gender) EnumValue(s string) hessian.JavaEnum { - v, ok := genderValue[s] - if ok { - return v - } - - return hessian.InvalidJavaEnum -} - -type User struct { - // !!! Cannot define lowercase names of variable - Id string - Name string - Age int32 - Time time.Time - Sex Gender // 娉ㄦ剰姝ゅ锛宩ava enum Object <--> go string -} - -func (u User) String() string { - return fmt.Sprintf( - "User{Id:%s, Name:%s, Age:%d, Time:%s, Sex:%s}", - u.Id, u.Name, u.Age, u.Time, u.Sex, - ) -} - -func (User) JavaClassName() string { - return "com.ikurento.user.User" -} - -type UserProvider struct { - GetUser func(ctx context.Context, req []interface{}, rsp *User) error - GetUser1 func(ctx context.Context, req []interface{}, rsp *User) error -} - -func (u *UserProvider) Service() string { - return "com.ikurento.user.UserProvider" -} - -func (u *UserProvider) Version() string { - return "" -} diff --git a/registry/protocol/protocol_test.go b/registry/protocol/protocol_test.go index 834aaf5544c146a26e389f86d2e2d01ac0c7c6b2..6f3786a60672e5cd590db05745a5e9afa88abaa5 100644 --- a/registry/protocol/protocol_test.go +++ b/registry/protocol/protocol_test.go @@ -96,7 +96,7 @@ func TestMultiRegAndMultiProtoExporter(t *testing.T) { exporterNormal(t, regProtocol) url2, _ := config.NewURL(context.TODO(), "mock://127.0.0.1:2222") - suburl2, _ := config.NewURL(context.TODO(), "dubbo://127.0.0.1:20000//", config.WithParamsValue(constant.CLUSTER_KEY, "mock")) + suburl2, _ := config.NewURL(context.TODO(), "jsonrpc://127.0.0.1:20000//", config.WithParamsValue(constant.CLUSTER_KEY, "mock")) url2.SubURL = &suburl2 invoker2 := protocol.NewBaseInvoker(url2) diff --git a/registry/zookeeper/registry_test.go b/registry/zookeeper/registry_test.go index 186e564e8148441ef18439b84ec8d4742726c380..c7214f1af7b3d5f9be2b404de73c863e0379c794 100644 --- a/registry/zookeeper/registry_test.go +++ b/registry/zookeeper/registry_test.go @@ -89,6 +89,5 @@ func Test_ProviderDestory(t *testing.T) { //listener.Close() time.Sleep(1e9) reg.Destroy() - time.Sleep(1e9) assert.Equal(t, false, reg.IsAvailable()) } diff --git a/registry/zookeeper/zk_client.go b/registry/zookeeper/zk_client.go index 42c6b5b271c51f17e187b3116c0c8d5ee11fbd4b..cb417729e30154b6ba2aaadd33c313d0683d5282 100644 --- a/registry/zookeeper/zk_client.go +++ b/registry/zookeeper/zk_client.go @@ -258,6 +258,10 @@ func (z *zookeeperClient) zkConnValid() bool { } func (z *zookeeperClient) Close() { + if z == nil { + return + } + z.stop() z.wait.Wait() z.Lock()