This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 893bfb5  fix: add arch picture in readme and delete unused router 
field. (#1279)
893bfb5 is described below

commit 893bfb5020a9e53861f87d20663c1ebdedfa9217
Author: Laurence <[email protected]>
AuthorDate: Sun Jun 27 21:18:35 2021 +0800

    fix: add arch picture in readme and delete unused router field. (#1279)
    
    * fix
    
    * fix: delete notify
---
 README.md                                    |  2 +-
 README_CN.md                                 |  2 +-
 cluster/router/chain.go                      |  2 -
 cluster/router/chain/chain.go                | 62 ++--------------------
 cluster/router/chain/invoker_cache.go        | 78 ----------------------------
 cluster/router/router.go                     |  2 +-
 cluster/router/rule.go                       | 31 -----------
 cluster/router/v3router/factory.go           |  4 +-
 cluster/router/v3router/factory_test.go      |  2 +-
 cluster/router/v3router/router_chain.go      | 13 +++--
 cluster/router/v3router/router_chain_test.go |  6 +--
 cluster/router/v3router/uniform_route.go     |  4 +-
 12 files changed, 21 insertions(+), 187 deletions(-)

diff --git a/README.md b/README.md
index c3031e8..7b35696 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@ Apache Dubbo-go, a Dubbo implementation written in Golang, is 
born to bridge the
 
 ## Architecture
 
-![dubbo go extend](https://dubbogo.github.io/img/doc/dubbo-go-arch.png)
+![dubbo go extend](https://dubbogo.github.io/img/doc/dubbo-go3.0-arch.jpg)
 
 Dubbo-go has been implemented most layers of Dubbo, like protocol layer, 
registry layer, etc. An extension module is applied to Dubbo-go in order to 
achieve a more flexible architecture. Developers are allowed to implement a 
customized layer conformed to the layer interface and use then in Dubbo-go via 
`extension.Set` method without modifying the source code.
 
diff --git a/README_CN.md b/README_CN.md
index 2f7963f..d6b5dcb 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -14,7 +14,7 @@ Apache Dubbo Go 语言实现,架起 Java 和 Golang 之间的桥梁,与 gRPC
 
 ## 架构
 
-![dubbo go extend](https://dubbogo.github.io/img/doc/dubbo-go-arch.png)
+![dubbo go extend](https://dubbogo.github.io/img/doc/dubbo-go3.0-arch.jpg)
 
 Dubbo-go已经实现了Dubbo的大部分层级,包括协议层(protocol layer)、注册层(registry 
layer))等等。在Dubbo-go中使用了拓展模块(extension 
module)以实现更灵活的系统架构,开发者可以根据层接口实现一个自定义的层,并在不改动源代码的前提下通过`extension.Set`方法将它应用到Dubbo-go中。
 
diff --git a/cluster/router/chain.go b/cluster/router/chain.go
index bde5aec..6c7c034 100644
--- a/cluster/router/chain.go
+++ b/cluster/router/chain.go
@@ -29,6 +29,4 @@ type Chain interface {
        SetInvokers([]protocol.Invoker)
        // AddRouters Add routers
        AddRouters([]PriorityRouter)
-       // GetNotifyChan get notify channel of this chain
-       GetNotifyChan() chan struct{}
 }
diff --git a/cluster/router/chain/chain.go b/cluster/router/chain/chain.go
index 9268baf..616909a 100644
--- a/cluster/router/chain/chain.go
+++ b/cluster/router/chain/chain.go
@@ -20,7 +20,6 @@ package chain
 import (
        "sort"
        "sync"
-       "time"
 )
 
 import (
@@ -31,7 +30,6 @@ import (
 import (
        "dubbo.apache.org/dubbo-go/v3/cluster/router"
        "dubbo.apache.org/dubbo-go/v3/common"
-       "dubbo.apache.org/dubbo-go/v3/common/constant"
        "dubbo.apache.org/dubbo-go/v3/common/extension"
        "dubbo.apache.org/dubbo-go/v3/common/logger"
        "dubbo.apache.org/dubbo-go/v3/protocol"
@@ -53,21 +51,6 @@ type RouterChain struct {
        builtinRouters []router.PriorityRouter
 
        mutex sync.RWMutex
-
-       url *common.URL
-
-       // The times of address notification since last update for address cache
-       count int64
-       // The timestamp of last update for address cache
-       last time.Time
-       // Channel for notify to update the address cache
-       notify chan struct{}
-       // Address cache
-       cache atomic.Value
-}
-
-func (c *RouterChain) GetNotifyChan() chan struct{} {
-       return c.notify
 }
 
 // Route Loop routers in RouterChain and call Route method to determine the 
target invokers list.
@@ -91,9 +74,6 @@ func (c *RouterChain) AddRouters(routers 
[]router.PriorityRouter) {
        c.mutex.Lock()
        defer c.mutex.Unlock()
        c.routers = newRouters
-       go func() {
-               c.notify <- struct{}{}
-       }()
 }
 
 // SetInvokers receives updated invokers from registry center. If the times of 
notification exceeds countThreshold and
@@ -102,10 +82,6 @@ func (c *RouterChain) SetInvokers(invokers 
[]protocol.Invoker) {
        c.mutex.Lock()
        c.invokers = invokers
        c.mutex.Unlock()
-
-       go func() {
-               c.notify <- struct{}{}
-       }()
 }
 
 // copyRouters make a snapshot copy from RouterChain's router list.
@@ -142,18 +118,13 @@ func NewRouterChain(url *common.URL) (*RouterChain, 
error) {
                return nil, perrors.Errorf("No routerFactory exits , create one 
please")
        }
 
-       chain := &RouterChain{
-               last:   time.Now(),
-               notify: make(chan struct{}),
-       }
-
        routers := make([]router.PriorityRouter, 0, len(routerFactories))
 
        for key, routerFactory := range routerFactories {
                if virtualServiceConfigByte == nil || destinationRuleConfigByte 
== nil {
                        logger.Warnf("virtual Service Config or destinationRule 
Confi Byte may be empty, pls check your CONF_VIRTUAL_SERVICE_FILE_PATH and 
CONF_DEST_RULE_FILE_PATH env is correctly point to your yaml file\n")
                }
-               r, err := 
routerFactory().NewPriorityRouter(virtualServiceConfigByte, 
destinationRuleConfigByte, chain.notify)
+               r, err := 
routerFactory().NewPriorityRouter(virtualServiceConfigByte, 
destinationRuleConfigByte)
                if r == nil || err != nil {
                        logger.Errorf("router chain build router fail! 
routerFactories key:%s  error:%vv", key, err)
                        continue
@@ -168,36 +139,13 @@ func NewRouterChain(url *common.URL) (*RouterChain, 
error) {
 
        routerNeedsUpdateInit := atomic.Bool{}
        routerNeedsUpdateInit.Store(false)
-       chain.routers = newRouters
-       chain.builtinRouters = routers
-       if url != nil {
-               chain.url = url
-       }
 
-       return chain, nil
-}
-
-// isInvokersChanged compares new invokers on the right changes, compared with 
the old invokers on the left.
-func isInvokersChanged(left []protocol.Invoker, right []protocol.Invoker) bool 
{
-       if len(right) != len(left) {
-               return true
+       chain := &RouterChain{
+               routers:        newRouters,
+               builtinRouters: routers,
        }
 
-       for _, r := range right {
-               found := false
-               rurl := r.GetURL()
-               for _, l := range left {
-                       lurl := l.GetURL()
-                       if common.GetCompareURLEqualFunc()(lurl, rurl, 
constant.TIMESTAMP_KEY, constant.REMOTE_TIMESTAMP_KEY) {
-                               found = true
-                               break
-                       }
-               }
-               if !found {
-                       return true
-               }
-       }
-       return false
+       return chain, nil
 }
 
 // sortRouter Sort router instance by priority with stable algorithm
diff --git a/cluster/router/chain/invoker_cache.go 
b/cluster/router/chain/invoker_cache.go
deleted file mode 100644
index 8fde0dd..0000000
--- a/cluster/router/chain/invoker_cache.go
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package chain
-
-import (
-       "github.com/RoaringBitmap/roaring"
-)
-
-import (
-       "dubbo.apache.org/dubbo-go/v3/cluster/router"
-       "dubbo.apache.org/dubbo-go/v3/protocol"
-)
-
-// Cache caches all addresses relevant info for a snapshot of received 
invokers. It keeps a snapshot of the received
-// address list, and also keeps address pools and address metadata from 
routers based on the same address snapshot, if
-// the router implements Poolable.
-type InvokerCache struct {
-       // The snapshot of invokers
-       invokers []protocol.Invoker
-
-       // The bitmap representation for invokers snapshot
-       bitmap *roaring.Bitmap
-
-       // Address pool from routers which implement Poolable
-       pools map[string]router.AddrPool
-
-       // Address metadata from routers which implement Poolable
-       metadatas map[string]router.AddrMetadata
-}
-
-// BuildCache builds address cache from the given invokers.
-func BuildCache(invokers []protocol.Invoker) *InvokerCache {
-       return &InvokerCache{
-               invokers:  invokers,
-               pools:     make(map[string]router.AddrPool, 8),
-               metadatas: make(map[string]router.AddrMetadata, 8),
-       }
-}
-
-// GetInvokers get invokers snapshot.
-func (c *InvokerCache) GetInvokers() []protocol.Invoker {
-       return c.invokers
-}
-
-// FindAddrPool finds address pool for a poolable router.
-func (c *InvokerCache) FindAddrPool(p router.Poolable) router.AddrPool {
-       return c.pools[p.Name()]
-}
-
-// FindAddrMeta finds address metadata for a poolable router.
-func (c *InvokerCache) FindAddrMeta(p router.Poolable) router.AddrMetadata {
-       return c.metadatas[p.Name()]
-}
-
-// SetAddrPool sets address pool for a poolable router, for unit test only
-func (c *InvokerCache) SetAddrPool(name string, pool router.AddrPool) {
-       c.pools[name] = pool
-}
-
-// SetAddrMeta sets address metadata for a poolable router, for unit test only
-func (c *InvokerCache) SetAddrMeta(name string, meta router.AddrMetadata) {
-       c.metadatas[name] = meta
-}
diff --git a/cluster/router/router.go b/cluster/router/router.go
index 5d653cd..d3d2fe5 100644
--- a/cluster/router/router.go
+++ b/cluster/router/router.go
@@ -30,7 +30,7 @@ import (
 // PriorityRouterFactory creates creates priority router with url
 type PriorityRouterFactory interface {
        // NewPriorityRouter creates router instance with URL
-       NewPriorityRouter([]byte, []byte, chan struct{}) (PriorityRouter, error)
+       NewPriorityRouter([]byte, []byte) (PriorityRouter, error)
 }
 
 // Router
diff --git a/cluster/router/rule.go b/cluster/router/rule.go
deleted file mode 100644
index 42c08a7..0000000
--- a/cluster/router/rule.go
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package router
-
-// BaseRouterRule
-type BaseRouterRule struct {
-       RawRule  string
-       Runtime  bool
-       Force    bool
-       Valid    bool
-       Enabled  bool
-       Priority int
-       Dynamic  bool
-       Scope    string
-       Key      string
-}
diff --git a/cluster/router/v3router/factory.go 
b/cluster/router/v3router/factory.go
index 0b164e7..afd14af 100644
--- a/cluster/router/v3router/factory.go
+++ b/cluster/router/v3router/factory.go
@@ -30,6 +30,6 @@ func NewUniformRouterFactory() router.PriorityRouterFactory {
 }
 
 // NewPriorityRouter construct a new UniformRouteFactory as PriorityRouter
-func (f *UniformRouteFactory) NewPriorityRouter(vsConfigBytes, distConfigBytes 
[]byte, notify chan struct{}) (router.PriorityRouter, error) {
-       return NewUniformRouterChain(vsConfigBytes, distConfigBytes, notify)
+func (f *UniformRouteFactory) NewPriorityRouter(vsConfigBytes, distConfigBytes 
[]byte) (router.PriorityRouter, error) {
+       return NewUniformRouterChain(vsConfigBytes, distConfigBytes)
 }
diff --git a/cluster/router/v3router/factory_test.go 
b/cluster/router/v3router/factory_test.go
index 365d755..a5ea415 100644
--- a/cluster/router/v3router/factory_test.go
+++ b/cluster/router/v3router/factory_test.go
@@ -29,7 +29,7 @@ import (
 func TestUniformRouterFacotry(t *testing.T) {
        factory := NewUniformRouterFactory()
        assert.NotNil(t, factory)
-       router, err := factory.NewPriorityRouter([]byte{}, []byte{}, make(chan 
struct{}))
+       router, err := factory.NewPriorityRouter([]byte{}, []byte{})
        assert.Nil(t, err)
        assert.NotNil(t, router)
 }
diff --git a/cluster/router/v3router/router_chain.go 
b/cluster/router/v3router/router_chain.go
index dc14c73..ce82694 100644
--- a/cluster/router/v3router/router_chain.go
+++ b/cluster/router/v3router/router_chain.go
@@ -48,9 +48,9 @@ type RouterChain struct {
 }
 
 // NewUniformRouterChain return
-func NewUniformRouterChain(virtualServiceConfig, destinationRuleConfig []byte, 
notify chan struct{}) (router.PriorityRouter, error) {
+func NewUniformRouterChain(virtualServiceConfig, destinationRuleConfig []byte) 
(router.PriorityRouter, error) {
        fromFileConfig := true
-       uniformRouters, err := parseFromConfigToRouters(virtualServiceConfig, 
destinationRuleConfig, notify)
+       uniformRouters, err := parseFromConfigToRouters(virtualServiceConfig, 
destinationRuleConfig)
        if err != nil {
                fromFileConfig = false
                logger.Warnf("parse router config form local file failed, error 
= %+v", err)
@@ -59,7 +59,6 @@ func NewUniformRouterChain(virtualServiceConfig, 
destinationRuleConfig []byte, n
                virtualServiceConfigBytes:  virtualServiceConfig,
                destinationRuleConfigBytes: destinationRuleConfig,
                routers:                    uniformRouters,
-               notify:                     notify,
        }
        if err := k8s_api.SetK8sEventListener(r); err != nil {
                logger.Warnf("try listen K8s router config failed, error = 
%+v", err)
@@ -110,7 +109,7 @@ func (r *RouterChain) Process(event 
*config_center.ConfigChangeEvent) {
                                logger.Error("Process change of virtual 
service: event.Value marshal error:", err)
                                return
                        }
-                       r.routers, err = parseFromConfigToRouters(data, 
r.destinationRuleConfigBytes, r.notify)
+                       r.routers, err = parseFromConfigToRouters(data, 
r.destinationRuleConfigBytes)
                        if err != nil {
                                logger.Error("Process change of virtual 
service: parseFromConfigToRouters:", err)
                                return
@@ -142,7 +141,7 @@ func (r *RouterChain) Process(event 
*config_center.ConfigChangeEvent) {
                                logger.Error("Process change of dest rule: 
event.Value marshal error:", err)
                                return
                        }
-                       r.routers, err = 
parseFromConfigToRouters(r.virtualServiceConfigBytes, data, r.notify)
+                       r.routers, err = 
parseFromConfigToRouters(r.virtualServiceConfigBytes, data)
                        if err != nil {
                                logger.Error("Process change of dest rule: 
parseFromConfigToRouters:", err)
                                return
@@ -174,7 +173,7 @@ func (r *RouterChain) URL() *common.URL {
 }
 
 // parseFromConfigToRouters parse virtualService and destinationRule yaml file 
bytes to target router list
-func parseFromConfigToRouters(virtualServiceConfig, destinationRuleConfig 
[]byte, notify chan struct{}) ([]*UniformRouter, error) {
+func parseFromConfigToRouters(virtualServiceConfig, destinationRuleConfig 
[]byte) ([]*UniformRouter, error) {
        var virtualServiceConfigList []*config.VirtualServiceConfig
        destRuleConfigsMap := make(map[string]map[string]map[string]string)
 
@@ -234,7 +233,7 @@ func parseFromConfigToRouters(virtualServiceConfig, 
destinationRuleConfig []byte
                        logger.Error("Parse config to uniform rule err = ", err)
                        return nil, err
                }
-               rtr, err := NewUniformRouter(newRule, notify)
+               rtr, err := NewUniformRouter(newRule)
                if err != nil {
                        logger.Error("new uniform router err = ", err)
                        return nil, err
diff --git a/cluster/router/v3router/router_chain_test.go 
b/cluster/router/v3router/router_chain_test.go
index 4ce4eef..9e12da1 100644
--- a/cluster/router/v3router/router_chain_test.go
+++ b/cluster/router/v3router/router_chain_test.go
@@ -51,7 +51,7 @@ const (
 func TestNewUniformRouterChain(t *testing.T) {
        vsBytes, _ := yaml.LoadYMLConfig(mockVSConfigPath)
        drBytes, _ := yaml.LoadYMLConfig(mockDRConfigPath)
-       rc, err := NewUniformRouterChain(vsBytes, drBytes, make(chan struct{}))
+       rc, err := NewUniformRouterChain(vsBytes, drBytes)
        assert.Nil(t, err)
        assert.NotNil(t, rc)
 }
@@ -72,7 +72,7 @@ type ruleTestItemStruct struct {
 func TestParseConfigFromFile(t *testing.T) {
        vsBytes, _ := yaml.LoadYMLConfig(mockVSConfigPath)
        drBytes, _ := yaml.LoadYMLConfig(mockDRConfigPath)
-       routers, err := parseFromConfigToRouters(vsBytes, drBytes, make(chan 
struct{}, 1))
+       routers, err := parseFromConfigToRouters(vsBytes, drBytes)
        fmt.Println(routers, err)
        assert.Equal(t, len(routers), 1)
        assert.NotNil(t, routers[0].dubboRouter)
@@ -199,7 +199,7 @@ func TestParseConfigFromFile(t *testing.T) {
 func TestRouterChain_Route(t *testing.T) {
        vsBytes, _ := yaml.LoadYMLConfig(mockVSConfigPath)
        drBytes, _ := yaml.LoadYMLConfig(mockDRConfigPath)
-       rc, err := NewUniformRouterChain(vsBytes, drBytes, make(chan struct{}))
+       rc, err := NewUniformRouterChain(vsBytes, drBytes)
        assert.Nil(t, err)
        assert.NotNil(t, rc)
        newGoodURL, _ := 
common.NewURL("dubbo://127.0.0.1:20000/com.ikurento.user.UserProvider?interface=com.ikurento.user.UserProvider&group=&version=2.6.0")
diff --git a/cluster/router/v3router/uniform_route.go 
b/cluster/router/v3router/uniform_route.go
index f44eff1..9ea12dd 100644
--- a/cluster/router/v3router/uniform_route.go
+++ b/cluster/router/v3router/uniform_route.go
@@ -30,14 +30,12 @@ const (
 // UniformRouter have
 type UniformRouter struct {
        dubboRouter *DubboRouterRule
-       notify      chan struct{}
 }
 
 // NewUniformRouter construct an NewConnCheckRouter via url
-func NewUniformRouter(dubboRouter *DubboRouterRule, notify chan struct{}) 
(*UniformRouter, error) {
+func NewUniformRouter(dubboRouter *DubboRouterRule) (*UniformRouter, error) {
        r := &UniformRouter{
                dubboRouter: dubboRouter,
-               notify:      notify,
        }
        return r, nil
 }

Reply via email to