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

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


The following commit(s) were added to refs/heads/develop by this push:
     new bcc678de Lds basic (#417)
bcc678de is described below

commit bcc678deae99b6c22848b704b5d970dd37f4baba
Author: Mark4z <[email protected]>
AuthorDate: Tue May 10 09:34:25 2022 +0800

    Lds basic (#417)
    
    * basic
    
    * simple reload
    
    * simple reload
    
    * simple reload
    
    * simple reload
    
    * simple reload
    
    * http2_listener.go
    
    * fix ut
    
    * dubbo/triple done
    
    * dubbo/triple done
    
    * ut for lds
    
    * switch to github.com/dubbo-go-pixiu/pixiu-api
    
    * imports-formatter
    
    * fix ci
    
    * fix ci
    
    * mod fmt
    
    * mod fmt
    
    Co-authored-by: mark4z <[email protected]>
---
 cmd/pixiu/pixiu.go                                 |   2 +-
 go.mod                                             |   2 +-
 go.sum                                             |   4 +-
 pkg/adapter/dubboregistry/common/common.go         |   4 +-
 .../registry/base/baseregistry_test.go             |   2 +-
 .../registry/nacos/interface_listener.go           |   1 +
 .../registry/nacos/service_listener.go             |   4 +-
 pkg/adapter/dubboregistry/registry/registry.go     |   4 +-
 pkg/adapter/dubboregistry/registry/util.go         |   3 +-
 .../zookeeper/application_service_listener.go      |   3 +-
 .../registry/zookeeper/interface_listener.go       |   1 +
 .../registry/zookeeper/registry_test.go            |   4 +-
 .../registry/zookeeper/service_listener.go         |   2 +-
 pkg/adapter/dubboregistry/registrycenter.go        |   4 +-
 .../zookeeper/application_listener.go              |   1 +
 .../servicediscovery/zookeeper/service_listener.go |   1 +
 pkg/client/dubbo/default.go                        |   2 +-
 pkg/client/dubbo/dubbo.go                          |   2 +-
 pkg/client/dubbo/dubbo_test.go                     |   2 +-
 pkg/client/dubbo/mapper.go                         |   2 +-
 pkg/client/dubbo/mapper_test.go                    |   2 +-
 pkg/client/http/http_test.go                       |   2 +-
 pkg/client/http/mapper.go                          |   2 +-
 pkg/client/http/mapper_test.go                     |   2 +-
 pkg/client/mapper.go                               |   2 +-
 pkg/client/request.go                              |   4 +-
 pkg/common/extension/filter/filter.go              |   3 +-
 pkg/common/grpc/manager.go                         |   4 +-
 pkg/common/http/manager.go                         |   4 +-
 pkg/common/http/manager_test.go                    |   2 +-
 pkg/common/mock/router.go                          |   4 +-
 pkg/config/api_config.go                           |   2 +-
 pkg/config/xds/cds.go                              |  28 ++--
 pkg/config/xds/cds_test.go                         |  18 +--
 pkg/config/xds/lds.go                              |  51 ++++++--
 pkg/config/xds/lds_test.go                         | 144 ++++++++++++++++++++-
 pkg/config/xds/xds.go                              |   4 +-
 pkg/config/xds/xds_test.go                         |   2 +-
 pkg/context/http/context.go                        |   2 +-
 pkg/filter/header/header_test.go                   |   4 +-
 pkg/filter/http/apiconfig/api/discovery_service.go |   4 +-
 .../http/apiconfig/api/discovery_service_test.go   |   2 +-
 pkg/filter/http/apiconfig/api_config.go            |   4 +-
 pkg/filter/http/remote/call.go                     |   4 +-
 pkg/filter/network/dubboproxy/manager.go           |   2 +-
 pkg/filter/network/dubboproxy/plugin.go            |   4 +-
 pkg/filter/network/grpcconnectionmanager/plugin.go |   4 +-
 pkg/filter/network/httpconnectionmanager/plugin.go |   4 +-
 pkg/filter/seata/filter.go                         |   1 +
 .../circuitbreaker/circuit_breaker_test.go         |   1 +
 pkg/filter/sentinel/ratelimit/config.go            |   4 +-
 pkg/filterchain/network_filter_chain.go            |   4 +-
 pkg/listener/http/http_listener.go                 |  18 ++-
 pkg/listener/http2/http2_listener.go               |  26 +++-
 pkg/listener/listener.go                           |   7 +
 pkg/listener/tcp/tcp_listener.go                   |  19 ++-
 pkg/listener/triple/triple_listener.go             |  19 ++-
 pkg/model/base.go                                  |   2 +-
 pkg/pool/pool.go                                   |   2 +-
 pkg/remote/zookeeper/client.go                     |   1 +
 pkg/router/api.go                                  |   2 +-
 pkg/router/api_test.go                             |   4 +-
 pkg/router/route.go                                |   4 +-
 pkg/router/route_test.go                           |   4 +-
 pkg/server/api_config_manager.go                   |   4 +-
 pkg/server/controls/controls.go                    |   5 +-
 pkg/server/controls/mocks/mocks.go                 |   6 +-
 pkg/server/dynamic_resource_manager.go             |   2 +-
 pkg/server/listener_manager.go                     | 137 +++++++++++++++-----
 pkg/server/pixiu_start.go                          |   8 +-
 samples/dubbogo/multi/server/app/student.go        |   1 +
 samples/dubbogo/multi/server/app/teacher.go        |   1 +
 .../dubbogo/simple/benchmark/server/app/user.go    |   1 +
 samples/dubbogo/simple/jaeger/server/app/user.go   |   1 +
 samples/dubbogo/simple/mix/server/app/user.go      |   1 +
 samples/dubbogo/simple/proxy/server/app/user.go    |   1 +
 samples/dubbogo/simple/query/server/app/user.go    |   1 +
 samples/dubbogo/simple/resolve/server/app/user.go  |   1 +
 .../simple/triple/protobuf/api/helloworld.pb.go    |   2 +-
 .../dubbogo/simple/triple/server/app/greeter.go    |   5 +-
 .../triple/server/protobuf/api/samples_api.pb.go   |   2 +-
 samples/dubbogo/simple/uri/server/app/user.go      |   1 +
 samples/grpc/pixiu/conf.yaml                       |   1 -
 samples/grpc/test/pixiu_test.go                    |   1 +
 samples/xds/local-control-panel/server/app/go.sum  |   2 +-
 samples/xds/local-control-panel/server/app/main.go |   5 +-
 .../server/app/resoruce_pixiu2.go                  |   6 +-
 .../server/app/resource_pixiu.go                   |  15 ++-
 .../xds/local-control-panel/server/app/server.go   |  10 +-
 89 files changed, 535 insertions(+), 167 deletions(-)

diff --git a/cmd/pixiu/pixiu.go b/cmd/pixiu/pixiu.go
index f71a2cb9..76fe57b5 100644
--- a/cmd/pixiu/pixiu.go
+++ b/cmd/pixiu/pixiu.go
@@ -26,12 +26,12 @@ import (
 )
 
 import (
-       pxruntime "github.com/apache/dubbo-go-pixiu/pkg/common/runtime"
        "github.com/spf13/cobra"
 )
 
 import (
        "github.com/apache/dubbo-go-pixiu/pkg/common/constant"
+       pxruntime "github.com/apache/dubbo-go-pixiu/pkg/common/runtime"
        "github.com/apache/dubbo-go-pixiu/pkg/config"
        "github.com/apache/dubbo-go-pixiu/pkg/logger"
        "github.com/apache/dubbo-go-pixiu/pkg/model"
diff --git a/go.mod b/go.mod
index fbdba3b4..090ea8da 100644
--- a/go.mod
+++ b/go.mod
@@ -11,7 +11,7 @@ require (
        github.com/apache/dubbo-go-hessian2 v1.11.0
        github.com/cch123/supermonkey v1.0.1
        github.com/creasty/defaults v1.5.2
-       github.com/dubbogo/dubbo-go-pixiu-filter v0.1.5
+       github.com/dubbo-go-pixiu/pixiu-api v0.1.6-0.20220427143451-c0a68bf5b29a
        github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5
        github.com/dubbogo/gost v1.11.22
        github.com/dubbogo/grpc-go v1.42.7
diff --git a/go.sum b/go.sum
index 99e062ef..228f963a 100644
--- a/go.sum
+++ b/go.sum
@@ -198,8 +198,8 @@ github.com/denisenkom/go-mssqldb 
v0.0.0-20190707035753-2be1aa521ff4/go.mod h1:zA
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod 
h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod 
h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
 github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod 
h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
-github.com/dubbogo/dubbo-go-pixiu-filter v0.1.5 
h1:qwzUNqWdLjE3+in49/Ny1Vjfzrztzd3JcxdUenDe610=
-github.com/dubbogo/dubbo-go-pixiu-filter v0.1.5/go.mod 
h1:sZSi0hyl9rquVwHZQxNa8ARs85/gQAwzjYgbxFLP4yY=
+github.com/dubbo-go-pixiu/pixiu-api v0.1.6-0.20220427143451-c0a68bf5b29a 
h1:M4EqGQRk3jO+k50Wa9EtrOoCYlU/kXzbpYxVo4s4Wi0=
+github.com/dubbo-go-pixiu/pixiu-api 
v0.1.6-0.20220427143451-c0a68bf5b29a/go.mod 
h1:1l+6pDTdEHwCyyyJmfckOAdGp6f5PZ33ZVMgxso9q/U=
 github.com/dubbogo/go-zookeeper v1.0.3/go.mod 
h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
 github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 
h1:XoR8SSVziXe698dt4uZYDfsmHpKLemqAgFyndQsq5Kw=
 github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5/go.mod 
h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
diff --git a/pkg/adapter/dubboregistry/common/common.go 
b/pkg/adapter/dubboregistry/common/common.go
index d9bc9592..b597fda4 100644
--- a/pkg/adapter/dubboregistry/common/common.go
+++ b/pkg/adapter/dubboregistry/common/common.go
@@ -18,8 +18,8 @@
 package common
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 type RegistryEventListener interface {
diff --git a/pkg/adapter/dubboregistry/registry/base/baseregistry_test.go 
b/pkg/adapter/dubboregistry/registry/base/baseregistry_test.go
index 028022b5..bdd4c3e2 100644
--- a/pkg/adapter/dubboregistry/registry/base/baseregistry_test.go
+++ b/pkg/adapter/dubboregistry/registry/base/baseregistry_test.go
@@ -23,7 +23,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 import (
diff --git a/pkg/adapter/dubboregistry/registry/nacos/interface_listener.go 
b/pkg/adapter/dubboregistry/registry/nacos/interface_listener.go
index 563af980..a1a2de67 100644
--- a/pkg/adapter/dubboregistry/registry/nacos/interface_listener.go
+++ b/pkg/adapter/dubboregistry/registry/nacos/interface_listener.go
@@ -30,6 +30,7 @@ import (
        "dubbo.apache.org/dubbo-go/v3/common/constant"
        dubboConfig "dubbo.apache.org/dubbo-go/v3/config"
        dubboRegistry "dubbo.apache.org/dubbo-go/v3/registry"
+
        "github.com/nacos-group/nacos-sdk-go/clients/naming_client"
        nacosConstant "github.com/nacos-group/nacos-sdk-go/common/constant"
        "github.com/nacos-group/nacos-sdk-go/vo"
diff --git a/pkg/adapter/dubboregistry/registry/nacos/service_listener.go 
b/pkg/adapter/dubboregistry/registry/nacos/service_listener.go
index 10175401..aa272da6 100644
--- a/pkg/adapter/dubboregistry/registry/nacos/service_listener.go
+++ b/pkg/adapter/dubboregistry/registry/nacos/service_listener.go
@@ -29,7 +29,9 @@ import (
        dubboRegistry "dubbo.apache.org/dubbo-go/v3/registry"
        _ "dubbo.apache.org/dubbo-go/v3/registry/nacos"
        "dubbo.apache.org/dubbo-go/v3/remoting"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+
        "github.com/nacos-group/nacos-sdk-go/clients/naming_client"
        nacosModel "github.com/nacos-group/nacos-sdk-go/model"
 )
diff --git a/pkg/adapter/dubboregistry/registry/registry.go 
b/pkg/adapter/dubboregistry/registry/registry.go
index 327f16bf..cfcf17dc 100644
--- a/pkg/adapter/dubboregistry/registry/registry.go
+++ b/pkg/adapter/dubboregistry/registry/registry.go
@@ -25,8 +25,8 @@ import (
 import (
        "dubbo.apache.org/dubbo-go/v3/common"
 
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 
        "github.com/pkg/errors"
 )
diff --git a/pkg/adapter/dubboregistry/registry/util.go 
b/pkg/adapter/dubboregistry/registry/util.go
index 653eb087..fb8140db 100644
--- a/pkg/adapter/dubboregistry/registry/util.go
+++ b/pkg/adapter/dubboregistry/registry/util.go
@@ -19,7 +19,8 @@ package registry
 
 import (
        "dubbo.apache.org/dubbo-go/v3/common"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 )
 
 import (
diff --git 
a/pkg/adapter/dubboregistry/registry/zookeeper/application_service_listener.go 
b/pkg/adapter/dubboregistry/registry/zookeeper/application_service_listener.go
index 4f3ceba3..da4bf475 100644
--- 
a/pkg/adapter/dubboregistry/registry/zookeeper/application_service_listener.go
+++ 
b/pkg/adapter/dubboregistry/registry/zookeeper/application_service_listener.go
@@ -31,7 +31,8 @@ import (
        "dubbo.apache.org/dubbo-go/v3/metadata/definition"
        dr "dubbo.apache.org/dubbo-go/v3/registry"
        "dubbo.apache.org/dubbo-go/v3/remoting/zookeeper/curator_discovery"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/dubbogo/go-zookeeper/zk"
 )
diff --git a/pkg/adapter/dubboregistry/registry/zookeeper/interface_listener.go 
b/pkg/adapter/dubboregistry/registry/zookeeper/interface_listener.go
index 78f16dfb..bbf3f4ac 100644
--- a/pkg/adapter/dubboregistry/registry/zookeeper/interface_listener.go
+++ b/pkg/adapter/dubboregistry/registry/zookeeper/interface_listener.go
@@ -25,6 +25,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/common"
+
        "github.com/dubbogo/go-zookeeper/zk"
 )
 
diff --git a/pkg/adapter/dubboregistry/registry/zookeeper/registry_test.go 
b/pkg/adapter/dubboregistry/registry/zookeeper/registry_test.go
index c2864453..d5d61bf1 100644
--- a/pkg/adapter/dubboregistry/registry/zookeeper/registry_test.go
+++ b/pkg/adapter/dubboregistry/registry/zookeeper/registry_test.go
@@ -22,8 +22,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/adapter/dubboregistry/registry/zookeeper/service_listener.go 
b/pkg/adapter/dubboregistry/registry/zookeeper/service_listener.go
index 23fe25e8..b3c5a16e 100644
--- a/pkg/adapter/dubboregistry/registry/zookeeper/service_listener.go
+++ b/pkg/adapter/dubboregistry/registry/zookeeper/service_listener.go
@@ -26,7 +26,7 @@ import (
 import (
        "dubbo.apache.org/dubbo-go/v3/common"
 
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/dubbogo/go-zookeeper/zk"
 )
diff --git a/pkg/adapter/dubboregistry/registrycenter.go 
b/pkg/adapter/dubboregistry/registrycenter.go
index e7387ebf..3d24f9ae 100644
--- a/pkg/adapter/dubboregistry/registrycenter.go
+++ b/pkg/adapter/dubboregistry/registrycenter.go
@@ -22,8 +22,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 import (
diff --git 
a/pkg/adapter/springcloud/servicediscovery/zookeeper/application_listener.go 
b/pkg/adapter/springcloud/servicediscovery/zookeeper/application_listener.go
index faa22c9a..ae9e9a65 100644
--- a/pkg/adapter/springcloud/servicediscovery/zookeeper/application_listener.go
+++ b/pkg/adapter/springcloud/servicediscovery/zookeeper/application_listener.go
@@ -25,6 +25,7 @@ import (
 
 import (
        "github.com/dubbogo/go-zookeeper/zk"
+
        gzk "github.com/dubbogo/gost/database/kv/zk"
 )
 
diff --git 
a/pkg/adapter/springcloud/servicediscovery/zookeeper/service_listener.go 
b/pkg/adapter/springcloud/servicediscovery/zookeeper/service_listener.go
index 728726f8..8debc8a6 100644
--- a/pkg/adapter/springcloud/servicediscovery/zookeeper/service_listener.go
+++ b/pkg/adapter/springcloud/servicediscovery/zookeeper/service_listener.go
@@ -25,6 +25,7 @@ import (
 
 import (
        "github.com/dubbogo/go-zookeeper/zk"
+
        gzk "github.com/dubbogo/gost/database/kv/zk"
 )
 
diff --git a/pkg/client/dubbo/default.go b/pkg/client/dubbo/default.go
index 7ceb9e75..412dbf43 100644
--- a/pkg/client/dubbo/default.go
+++ b/pkg/client/dubbo/default.go
@@ -18,7 +18,7 @@
 package dubbo
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 )
 
 // defaultMappingParams default http to dubbo config
diff --git a/pkg/client/dubbo/dubbo.go b/pkg/client/dubbo/dubbo.go
index 87f70859..7640ac0e 100644
--- a/pkg/client/dubbo/dubbo.go
+++ b/pkg/client/dubbo/dubbo.go
@@ -41,7 +41,7 @@ import (
 
        hessian "github.com/apache/dubbo-go-hessian2"
 
-       fc "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       fc "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/pkg/errors"
 
diff --git a/pkg/client/dubbo/dubbo_test.go b/pkg/client/dubbo/dubbo_test.go
index 7f2b4142..354fae66 100644
--- a/pkg/client/dubbo/dubbo_test.go
+++ b/pkg/client/dubbo/dubbo_test.go
@@ -26,7 +26,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/client/dubbo/mapper.go b/pkg/client/dubbo/mapper.go
index d3a998e3..ac4e66e8 100644
--- a/pkg/client/dubbo/mapper.go
+++ b/pkg/client/dubbo/mapper.go
@@ -29,7 +29,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/pkg/errors"
 
diff --git a/pkg/client/dubbo/mapper_test.go b/pkg/client/dubbo/mapper_test.go
index b4c2049a..59c27d34 100644
--- a/pkg/client/dubbo/mapper_test.go
+++ b/pkg/client/dubbo/mapper_test.go
@@ -25,7 +25,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/client/http/http_test.go b/pkg/client/http/http_test.go
index 721e6bdd..4e176627 100644
--- a/pkg/client/http/http_test.go
+++ b/pkg/client/http/http_test.go
@@ -26,7 +26,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/client/http/mapper.go b/pkg/client/http/mapper.go
index ce02bd85..8c324964 100644
--- a/pkg/client/http/mapper.go
+++ b/pkg/client/http/mapper.go
@@ -29,7 +29,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/pkg/errors"
 )
diff --git a/pkg/client/http/mapper_test.go b/pkg/client/http/mapper_test.go
index 8f5fdde6..8a7c5354 100644
--- a/pkg/client/http/mapper_test.go
+++ b/pkg/client/http/mapper_test.go
@@ -26,7 +26,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/client/mapper.go b/pkg/client/mapper.go
index e6e9a9a0..0aa0279c 100644
--- a/pkg/client/mapper.go
+++ b/pkg/client/mapper.go
@@ -24,7 +24,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/pkg/errors"
 )
diff --git a/pkg/client/request.go b/pkg/client/request.go
index c8af1e65..39f01429 100644
--- a/pkg/client/request.go
+++ b/pkg/client/request.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 // Request request for endpoint
diff --git a/pkg/common/extension/filter/filter.go 
b/pkg/common/extension/filter/filter.go
index 9d7985dd..de19ab23 100644
--- a/pkg/common/extension/filter/filter.go
+++ b/pkg/common/extension/filter/filter.go
@@ -30,7 +30,6 @@ import (
 import (
        "github.com/apache/dubbo-go-pixiu/pkg/context/dubbo"
        "github.com/apache/dubbo-go-pixiu/pkg/context/http"
-       "github.com/apache/dubbo-go-pixiu/pkg/model"
 )
 
 type (
@@ -81,7 +80,7 @@ type (
                // Kind returns the unique kind name to represent itself.
                Kind() string
                // CreateFilterFactory return the filter callback
-               CreateFilter(config interface{}, bs *model.Bootstrap) 
(NetworkFilter, error)
+               CreateFilter(config interface{}) (NetworkFilter, error)
                // Config Expose the config so that Filter Manger can inject 
it, so it must be a pointer
                Config() interface{}
        }
diff --git a/pkg/common/grpc/manager.go b/pkg/common/grpc/manager.go
index 8d223ef2..bcd3a2ed 100644
--- a/pkg/common/grpc/manager.go
+++ b/pkg/common/grpc/manager.go
@@ -30,7 +30,9 @@ import (
 import (
        "github.com/dubbogo/grpc-go/codes"
        "github.com/dubbogo/grpc-go/status"
+
        "golang.org/x/net/http2"
+
        "google.golang.org/protobuf/proto"
 )
 
@@ -50,7 +52,7 @@ type GrpcConnectionManager struct {
 }
 
 // CreateGrpcConnectionManager create grpc connection manager
-func CreateGrpcConnectionManager(hcmc *model.GRPCConnectionManagerConfig, bs 
*model.Bootstrap) *GrpcConnectionManager {
+func CreateGrpcConnectionManager(hcmc *model.GRPCConnectionManagerConfig) 
*GrpcConnectionManager {
        hcm := &GrpcConnectionManager{config: hcmc}
        hcm.routerCoordinator = 
router2.CreateRouterCoordinator(&hcmc.RouteConfig)
        return hcm
diff --git a/pkg/common/http/manager.go b/pkg/common/http/manager.go
index 98d54b4b..dc09679a 100644
--- a/pkg/common/http/manager.go
+++ b/pkg/common/http/manager.go
@@ -50,7 +50,7 @@ type HttpConnectionManager struct {
 }
 
 // CreateHttpConnectionManager create http connection manager
-func CreateHttpConnectionManager(hcmc *model.HttpConnectionManagerConfig, bs 
*model.Bootstrap) *HttpConnectionManager {
+func CreateHttpConnectionManager(hcmc *model.HttpConnectionManagerConfig) 
*HttpConnectionManager {
        hcm := &HttpConnectionManager{config: hcmc}
        hcm.pool.New = func() interface{} {
                return hcm.allocateContext()
@@ -115,7 +115,7 @@ func (hcm *HttpConnectionManager) writeResponse(c 
*pch.HttpContext) {
                writer := c.Writer
                writer.WriteHeader(c.GetStatusCode())
                if _, err := writer.Write(c.TargetResp.Data); err != nil {
-                       panic(err)
+                       logger.Errorf("write response error: %s", err)
                }
        }
 }
diff --git a/pkg/common/http/manager_test.go b/pkg/common/http/manager_test.go
index 298dadf3..684dd2dd 100644
--- a/pkg/common/http/manager_test.go
+++ b/pkg/common/http/manager_test.go
@@ -126,7 +126,7 @@ func TestCreateHttpConnectionManager(t *testing.T) {
                IdleTimeoutStr:    "100",
        }
 
-       hcm := CreateHttpConnectionManager(&hcmc, nil)
+       hcm := CreateHttpConnectionManager(&hcmc)
        assert.Equal(t, len(hcm.filterManager.GetFactory()), 1)
        request, err := http.NewRequest("POST", 
"http://www.dubbogopixiu.com/api/v1?name=tc";, 
bytes.NewReader([]byte("{\"id\":\"12345\"}")))
        assert.NoError(t, err)
diff --git a/pkg/common/mock/router.go b/pkg/common/mock/router.go
index b3c61791..6302ecb4 100644
--- a/pkg/common/mock/router.go
+++ b/pkg/common/mock/router.go
@@ -18,8 +18,8 @@
 package mock
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 // GetMockAPI a mock util to create router.API
diff --git a/pkg/config/api_config.go b/pkg/config/api_config.go
index 040648b7..90b8fd03 100644
--- a/pkg/config/api_config.go
+++ b/pkg/config/api_config.go
@@ -26,7 +26,7 @@ import (
 )
 
 import (
-       fc "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       fc "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        etcdv3 "github.com/dubbogo/gost/database/kv/etcd/v3"
 
diff --git a/pkg/config/xds/cds.go b/pkg/config/xds/cds.go
index a8a8dff5..24a31210 100644
--- a/pkg/config/xds/cds.go
+++ b/pkg/config/xds/cds.go
@@ -18,8 +18,8 @@
 package xds
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api"
-       xdspb "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds/model"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api"
+       xdspb "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds/model"
 
        "github.com/pkg/errors"
 )
@@ -103,15 +103,17 @@ func (c *CdsManager) setupCluster(clusters 
[]*xdspb.Cluster) error {
        }
        for _, cluster := range clusters {
                delete(toRemoveHash, cluster.Name)
+
+               makeCluster := c.makeCluster(cluster)
                switch {
                case c.clusterMg.HasCluster(cluster.Name):
                        laterApplies = append(laterApplies, func() error {
-                               
c.clusterMg.UpdateCluster(c.makeCluster(cluster))
+                               c.clusterMg.UpdateCluster(makeCluster)
                                return nil
                        })
                default:
                        laterApplies = append(laterApplies, func() error {
-                               c.clusterMg.AddCluster(c.makeCluster(cluster))
+                               c.clusterMg.AddCluster(makeCluster)
                                return nil
                        })
                }
@@ -157,14 +159,16 @@ func (c *CdsManager) makeClusterType(cluster 
*xdspb.Cluster) model.DiscoveryType
        return model.DiscoveryTypeValue[cluster.TypeStr]
 }
 
-func (c *CdsManager) makeEndpoints(endpoint *xdspb.Endpoint) []*model.Endpoint 
{
-       r := make([]*model.Endpoint, 0, 1)
-       r = append(r, &model.Endpoint{
-               ID:       endpoint.Id,
-               Name:     endpoint.Name,
-               Address:  c.makeAddress(endpoint),
-               Metadata: endpoint.Metadata,
-       })
+func (c *CdsManager) makeEndpoints(endpoints []*xdspb.Endpoint) 
[]*model.Endpoint {
+       r := make([]*model.Endpoint, len(endpoints))
+       for i, endpoint := range endpoints {
+               r[i] = &model.Endpoint{
+                       ID:       endpoint.Id,
+                       Name:     endpoint.Name,
+                       Address:  c.makeAddress(endpoint),
+                       Metadata: endpoint.Metadata,
+               }
+       }
        return r
 }
 
diff --git a/pkg/config/xds/cds_test.go b/pkg/config/xds/cds_test.go
index c37e9d8f..71761a4d 100644
--- a/pkg/config/xds/cds_test.go
+++ b/pkg/config/xds/cds_test.go
@@ -25,8 +25,8 @@ import (
 import (
        "github.com/cch123/supermonkey"
 
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds"
-       pixiupb "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds/model"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds"
+       pixiupb "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds/model"
 
        core "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
 
@@ -50,13 +50,13 @@ func makeClusters() *pixiupb.PixiuExtensionClusters {
                        {
                                Name:    "http-baidu",
                                TypeStr: "http",
-                               Endpoints: &pixiupb.Endpoint{
+                               Endpoints: []*pixiupb.Endpoint{{
                                        Id: "backend",
                                        Address: &pixiupb.SocketAddress{
                                                Address: "httpbin.org",
                                                Port:    80,
                                        },
-                               },
+                               }},
                        },
                },
        }
@@ -69,13 +69,13 @@ func getCdsConfig() *core.TypedExtensionConfig {
                                {
                                        Name:    "http-baidu",
                                        TypeStr: "http",
-                                       Endpoints: &pixiupb.Endpoint{
+                                       Endpoints: []*pixiupb.Endpoint{{
                                                Id: "backend",
                                                Address: &pixiupb.SocketAddress{
                                                        Address: "httpbin.org",
                                                        Port:    80,
                                                },
-                                       },
+                                       }},
                                },
                        },
                }
@@ -198,7 +198,7 @@ func TestCdsManager_makeCluster(t *testing.T) {
        assert := require.New(t)
        assert.Equal(cluster.Name, modelCluster.Name)
        assert.Equal(cluster.TypeStr, modelCluster.TypeStr)
-       assert.Equal(cluster.Endpoints.Name, modelCluster.Endpoints[0].Name)
-       assert.Equal(cluster.Endpoints.Address.Address, 
modelCluster.Endpoints[0].Address.Address)
-       assert.Equal(cluster.Endpoints.Address.Port, 
int64(modelCluster.Endpoints[0].Address.Port))
+       assert.Equal(cluster.Endpoints[0].Name, modelCluster.Endpoints[0].Name)
+       assert.Equal(cluster.Endpoints[0].Address.Address, 
modelCluster.Endpoints[0].Address.Address)
+       assert.Equal(cluster.Endpoints[0].Address.Port, 
int64(modelCluster.Endpoints[0].Address.Port))
 }
diff --git a/pkg/config/xds/lds.go b/pkg/config/xds/lds.go
index 9a6d53e5..a0af0ae2 100644
--- a/pkg/config/xds/lds.go
+++ b/pkg/config/xds/lds.go
@@ -19,10 +19,11 @@ package xds
 
 import (
        "encoding/json"
+       "strconv"
 )
 
 import (
-       xdsModel "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds/model"
+       xdsModel "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds/model"
 
        "gopkg.in/yaml.v2"
 )
@@ -102,42 +103,68 @@ func (l *LdsManager) removeListeners(toRemoveHash 
map[string]struct{}) {
        names := make([]string, 0, len(toRemoveHash))
        for name := range toRemoveHash {
                names = append(names, name)
-               l.listenerMg.RemoveListener(names)
        }
+       l.listenerMg.RemoveListener(names)
 }
 
 // setupListeners setup listeners accord to dynamic resource
 func (l *LdsManager) setupListeners(listeners []*xdsModel.Listener) {
+       //Make sure each one has a unique name like "host-port-protocol"
+       for _, v := range listeners {
+               v.Name = resolveListenerName(v.Address.SocketAddress.Address, 
int(v.Address.SocketAddress.Port), v.Protocol.String())
+       }
+
        laterApplies := make([]func() error, 0, len(listeners))
        toRemoveHash := make(map[string]struct{}, len(listeners))
 
-       for _, listener := range listeners {
-               toRemoveHash[listener.Name] = struct{}{}
+       lm := l.listenerMg
+       activeListeners, err := lm.CloneXdsControlListener()
+       if err != nil {
+               logger.Errorf("Clone Xds Control Listener fail: %s", err)
+               return
+       }
+       //put all current listeners to $toRemoveHash
+       for _, v := range activeListeners {
+               //Make sure each one has a unique name like "host-port-protocol"
+               v.Name = resolveListenerName(v.Address.SocketAddress.Address, 
v.Address.SocketAddress.Port, v.ProtocolStr)
+               toRemoveHash[v.Name] = struct{}{}
        }
 
        for _, listener := range listeners {
                delete(toRemoveHash, listener.Name)
+
                modelListener := l.makeListener(listener)
                // add or update later after removes
-               laterApplies = append(laterApplies, func() error {
-                       err := l.listenerMg.AddOrUpdateListener(&modelListener)
-                       if err != nil {
-                               logger.Errorf("can not add/update listener 
config=> %v", modelListener)
-                       }
-                       return nil
-               })
+               switch {
+               case lm.HasListener(modelListener.Name):
+                       laterApplies = append(laterApplies, func() error {
+                               return lm.UpdateListener(&modelListener)
+                       })
+               default:
+                       laterApplies = append(laterApplies, func() error {
+                               return lm.AddListener(&modelListener)
+                       })
+               }
        }
+       // remove the listeners first to prevent tcp port conflict
        l.removeListeners(toRemoveHash)
-       for _, fn := range laterApplies { //do update and add new cluster.
+       //do update and add new cluster.
+       for _, fn := range laterApplies {
                if err := fn(); err != nil {
                        logger.Errorf("can not modify listener", err)
                }
        }
 }
 
+func resolveListenerName(host string, port int, protocol string) string {
+       return host + "-" + strconv.Itoa(port) + "-" + protocol
+}
+
 func (l *LdsManager) makeListener(listener *xdsModel.Listener) model.Listener {
        return model.Listener{
                Name:        listener.Name,
+               ProtocolStr: listener.Protocol.String(),
+               Protocol:    
model.ProtocolType(model.ProtocolTypeValue[listener.Protocol.String()]),
                Address:     l.makeAddress(listener.Address),
                FilterChain: l.makeFilterChain(listener.FilterChain),
                Config:      nil, // todo set the additional config
diff --git a/pkg/config/xds/lds_test.go b/pkg/config/xds/lds_test.go
index 8514a641..62dbb967 100644
--- a/pkg/config/xds/lds_test.go
+++ b/pkg/config/xds/lds_test.go
@@ -22,13 +22,20 @@ import (
 )
 
 import (
-       pixiupb "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds/model"
+       pixiupb "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds/model"
 
+       "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
 
+       "google.golang.org/protobuf/encoding/protojson"
+
        structpb2 "google.golang.org/protobuf/types/known/structpb"
 )
 
+import (
+       "github.com/apache/dubbo-go-pixiu/pkg/model"
+)
+
 func TestLdsManager_makeConfig(t *testing.T) {
        var httpManagerConfigYaml = `
 route_config:
@@ -138,3 +145,138 @@ http_filters:
                })
        }
 }
+
+func TestMakeListener(t *testing.T) {
+       lm := &LdsManager{}
+       json := `
+{
+      "name": "net/http",
+      "address": {
+        "socketAddress": {
+          "address": "0.0.0.0",
+          "port": "8080"
+        }
+      },
+      "filterChain": {
+        "filters": [
+          {
+            "name": "dgp.filter.httpconnectionmanager",
+            "struct": {
+              "http_filters": [
+                {
+                  "config": null,
+                  "name": "dgp.filter.http.httpproxy"
+                }
+              ],
+              "route_config": {
+                "routes": [
+                  {
+                    "match": {
+                      "prefix": "/"
+                    },
+                    "route": {
+                      "cluster": "http_bin",
+                      "cluster_not_found_response_code": 503
+                    }
+                  }
+                ]
+              }
+            }
+          }
+        ]
+      }
+    }
+`
+       l := &pixiupb.Listener{}
+       if err := protojson.Unmarshal([]byte(json), l); err != nil {
+               t.Fatal(err)
+       }
+       listener := lm.makeListener(l)
+       assert.NotNil(t, listener)
+       assert.Equal(t, "net/http", listener.Name)
+       assert.Equal(t, "0.0.0.0", listener.Address.SocketAddress.Address)
+       assert.Equal(t, 8080, listener.Address.SocketAddress.Port)
+       assert.Equal(t, 1, len(listener.FilterChain.Filters))
+}
+
+type mockListenerManager struct {
+       m map[string]*model.Listener
+}
+
+func (m *mockListenerManager) AddListener(l *model.Listener) error {
+       m.m[l.Name] = l
+       return nil
+}
+
+func (m *mockListenerManager) UpdateListener(l *model.Listener) error {
+       m.m[l.Name] = l
+       return nil
+}
+
+func (m *mockListenerManager) RemoveListener(names []string) {
+       for _, name := range names {
+               delete(m.m, name)
+       }
+}
+
+func (m *mockListenerManager) HasListener(name string) bool {
+       _, ok := m.m[name]
+       return ok
+}
+
+func (m *mockListenerManager) CloneXdsControlListener() ([]*model.Listener, 
error) {
+       var res []*model.Listener
+       for _, v := range m.m {
+               res = append(res, v)
+       }
+       return res, nil
+}
+
+func TestSetupListeners(t *testing.T) {
+       mock := &mockListenerManager{m: map[string]*model.Listener{}}
+       lm := &LdsManager{listenerMg: mock}
+
+       listeners := []*pixiupb.Listener{
+               {
+                       Protocol: pixiupb.Listener_HTTP,
+                       Address: &pixiupb.Address{
+                               SocketAddress: &pixiupb.SocketAddress{
+                                       Address: "0.0.0.0",
+                                       Port:    8080,
+                               },
+                       },
+                       FilterChain: &pixiupb.FilterChain{},
+               },
+               {
+                       Protocol: pixiupb.Listener_TRIPLE,
+                       Address: &pixiupb.Address{
+                               SocketAddress: &pixiupb.SocketAddress{
+                                       Address: "0.0.0.0",
+                                       Port:    8081,
+                               },
+                       },
+                       FilterChain: &pixiupb.FilterChain{},
+               },
+       }
+       lm.setupListeners(listeners)
+       for _, v := range listeners {
+               assert.Equal(t, v.Protocol.String(), 
model.ProtocolTypeName[int32(mock.m[v.Name].Protocol)])
+               assert.Equal(t, v.Address.SocketAddress.Address, 
mock.m[v.Name].Address.SocketAddress.Address)
+               assert.Equal(t, int(v.Address.SocketAddress.Port), 
mock.m[v.Name].Address.SocketAddress.Port)
+       }
+
+       newListeners := []*pixiupb.Listener{
+               {
+                       Protocol: pixiupb.Listener_HTTP,
+                       Address: &pixiupb.Address{
+                               SocketAddress: &pixiupb.SocketAddress{
+                                       Address: "0.0.0.0",
+                                       Port:    8080,
+                               },
+                       },
+                       FilterChain: &pixiupb.FilterChain{},
+               },
+       }
+       lm.setupListeners(newListeners)
+       assert.Equal(t, 1, len(mock.m))
+}
diff --git a/pkg/config/xds/xds.go b/pkg/config/xds/xds.go
index 62887692..9472570f 100644
--- a/pkg/config/xds/xds.go
+++ b/pkg/config/xds/xds.go
@@ -22,7 +22,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds"
 )
 
 import (
@@ -81,7 +81,7 @@ func (a *Xds) Start() {
                        DiscoverApi: 
a.createApiManager(a.dynamicResourceMg.GetLds(), a.dynamicResourceMg.GetNode(), 
xds.ListenerType),
                        listenerMg:  a.listenerMg,
                }
-               if err := a.lds.Fetch(); err != nil {
+               if err := a.lds.Delta(); err != nil {
                        logger.Errorf("can not fetch lds err is %+v", err)
                }
        }
diff --git a/pkg/config/xds/xds_test.go b/pkg/config/xds/xds_test.go
index dc2045ff..8588ddb3 100644
--- a/pkg/config/xds/xds_test.go
+++ b/pkg/config/xds/xds_test.go
@@ -26,7 +26,7 @@ import (
 import (
        monkey "github.com/cch123/supermonkey"
 
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds"
 
        "github.com/golang/mock/gomock"
 
diff --git a/pkg/context/http/context.go b/pkg/context/http/context.go
index 978ce689..6e7d7198 100644
--- a/pkg/context/http/context.go
+++ b/pkg/context/http/context.go
@@ -28,7 +28,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 import (
diff --git a/pkg/filter/header/header_test.go b/pkg/filter/header/header_test.go
index 5643a97d..6d3a9b7b 100644
--- a/pkg/filter/header/header_test.go
+++ b/pkg/filter/header/header_test.go
@@ -24,8 +24,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/filter/http/apiconfig/api/discovery_service.go 
b/pkg/filter/http/apiconfig/api/discovery_service.go
index c9f0c5ff..866e18da 100644
--- a/pkg/filter/http/apiconfig/api/discovery_service.go
+++ b/pkg/filter/http/apiconfig/api/discovery_service.go
@@ -24,8 +24,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       fr "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       fr "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 import (
diff --git a/pkg/filter/http/apiconfig/api/discovery_service_test.go 
b/pkg/filter/http/apiconfig/api/discovery_service_test.go
index d12dda85..2e82b9a7 100644
--- a/pkg/filter/http/apiconfig/api/discovery_service_test.go
+++ b/pkg/filter/http/apiconfig/api/discovery_service_test.go
@@ -23,7 +23,7 @@ import (
 )
 
 import (
-       fc "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       fc "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/filter/http/apiconfig/api_config.go 
b/pkg/filter/http/apiconfig/api_config.go
index 36c42433..52b3b8a6 100644
--- a/pkg/filter/http/apiconfig/api_config.go
+++ b/pkg/filter/http/apiconfig/api_config.go
@@ -22,8 +22,8 @@ import (
 )
 
 import (
-       fc "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       fc "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 
        "github.com/pkg/errors"
 )
diff --git a/pkg/filter/http/remote/call.go b/pkg/filter/http/remote/call.go
index 7deb2659..d40fcc02 100644
--- a/pkg/filter/http/remote/call.go
+++ b/pkg/filter/http/remote/call.go
@@ -27,8 +27,8 @@ import (
 )
 
 import (
-       apiConf "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       apiConf "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 import (
diff --git a/pkg/filter/network/dubboproxy/manager.go 
b/pkg/filter/network/dubboproxy/manager.go
index 971d1efe..534ace0e 100644
--- a/pkg/filter/network/dubboproxy/manager.go
+++ b/pkg/filter/network/dubboproxy/manager.go
@@ -56,7 +56,7 @@ type DubboProxyConnectionManager struct {
 }
 
 // CreateDubboProxyConnectionManager create dubbo proxy connection manager
-func CreateDubboProxyConnectionManager(config 
*model.DubboProxyConnectionManagerConfig, bs *model.Bootstrap) 
*DubboProxyConnectionManager {
+func CreateDubboProxyConnectionManager(config 
*model.DubboProxyConnectionManagerConfig) *DubboProxyConnectionManager {
        filterManager := NewDubboFilterManager(config.DubboFilters)
        hcm := &DubboProxyConnectionManager{config: config, codec: 
&dubbo.DubboCodec{}, filterManager: filterManager}
        hcm.routerCoordinator = 
router2.CreateRouterCoordinator(&config.RouteConfig)
diff --git a/pkg/filter/network/dubboproxy/plugin.go 
b/pkg/filter/network/dubboproxy/plugin.go
index bfa34cd8..cb033b2b 100644
--- a/pkg/filter/network/dubboproxy/plugin.go
+++ b/pkg/filter/network/dubboproxy/plugin.go
@@ -42,12 +42,12 @@ func (p *Plugin) Kind() string {
 }
 
 // CreateFilter create dubbo networkfilter
-func (p *Plugin) CreateFilter(config interface{}, bs *model.Bootstrap) 
(filter.NetworkFilter, error) {
+func (p *Plugin) CreateFilter(config interface{}) (filter.NetworkFilter, 
error) {
        hcmc, ok := config.(*model.DubboProxyConnectionManagerConfig)
        if !ok {
                panic("CreateFilter occur some exception for the type is not 
suitable one.")
        }
-       return CreateDubboProxyConnectionManager(hcmc, bs), nil
+       return CreateDubboProxyConnectionManager(hcmc), nil
 }
 
 // Config return DubboProxyConnectionManagerConfig
diff --git a/pkg/filter/network/grpcconnectionmanager/plugin.go 
b/pkg/filter/network/grpcconnectionmanager/plugin.go
index b20eabe4..c6002cf8 100644
--- a/pkg/filter/network/grpcconnectionmanager/plugin.go
+++ b/pkg/filter/network/grpcconnectionmanager/plugin.go
@@ -42,9 +42,9 @@ func (p *Plugin) Kind() string {
 }
 
 // CreateFilter create grpc network filter
-func (p *Plugin) CreateFilter(config interface{}, bs *model.Bootstrap) 
(filter.NetworkFilter, error) {
+func (p *Plugin) CreateFilter(config interface{}) (filter.NetworkFilter, 
error) {
        hcmc := config.(*model.GRPCConnectionManagerConfig)
-       return grpc.CreateGrpcConnectionManager(hcmc, bs), nil
+       return grpc.CreateGrpcConnectionManager(hcmc), nil
 }
 
 // Config return GRPCConnectionManagerConfig
diff --git a/pkg/filter/network/httpconnectionmanager/plugin.go 
b/pkg/filter/network/httpconnectionmanager/plugin.go
index dd1bee21..ce90f374 100644
--- a/pkg/filter/network/httpconnectionmanager/plugin.go
+++ b/pkg/filter/network/httpconnectionmanager/plugin.go
@@ -42,9 +42,9 @@ func (p *Plugin) Kind() string {
 }
 
 // CreateFilter create http network filter
-func (p *Plugin) CreateFilter(config interface{}, bs *model.Bootstrap) 
(filter.NetworkFilter, error) {
+func (p *Plugin) CreateFilter(config interface{}) (filter.NetworkFilter, 
error) {
        hcmc := config.(*model.HttpConnectionManagerConfig)
-       return http.CreateHttpConnectionManager(hcmc, bs), nil
+       return http.CreateHttpConnectionManager(hcmc), nil
 }
 
 // Config return HttpConnectionManagerConfig
diff --git a/pkg/filter/seata/filter.go b/pkg/filter/seata/filter.go
index c274d6ba..2103e99a 100644
--- a/pkg/filter/seata/filter.go
+++ b/pkg/filter/seata/filter.go
@@ -25,6 +25,7 @@ import (
 import (
        "github.com/opentrx/seata-golang/v2/pkg/apis"
        "github.com/opentrx/seata-golang/v2/pkg/util/runtime"
+
        "google.golang.org/grpc"
        "google.golang.org/grpc/credentials/insecure"
 )
diff --git a/pkg/filter/sentinel/circuitbreaker/circuit_breaker_test.go 
b/pkg/filter/sentinel/circuitbreaker/circuit_breaker_test.go
index f0ef7600..92c00bc1 100644
--- a/pkg/filter/sentinel/circuitbreaker/circuit_breaker_test.go
+++ b/pkg/filter/sentinel/circuitbreaker/circuit_breaker_test.go
@@ -24,6 +24,7 @@ import (
 
 import (
        "github.com/alibaba/sentinel-golang/core/circuitbreaker"
+
        "github.com/stretchr/testify/assert"
 )
 
diff --git a/pkg/filter/sentinel/ratelimit/config.go 
b/pkg/filter/sentinel/ratelimit/config.go
index 5dd913aa..fb19590e 100644
--- a/pkg/filter/sentinel/ratelimit/config.go
+++ b/pkg/filter/sentinel/ratelimit/config.go
@@ -18,11 +18,11 @@
 package ratelimit
 
 import (
-       pkgs "github.com/apache/dubbo-go-pixiu/pkg/filter/sentinel"
+       "github.com/alibaba/sentinel-golang/core/flow"
 )
 
 import (
-       "github.com/alibaba/sentinel-golang/core/flow"
+       pkgs "github.com/apache/dubbo-go-pixiu/pkg/filter/sentinel"
 )
 
 type (
diff --git a/pkg/filterchain/network_filter_chain.go 
b/pkg/filterchain/network_filter_chain.go
index 1bcd3ebc..cc6787ff 100644
--- a/pkg/filterchain/network_filter_chain.go
+++ b/pkg/filterchain/network_filter_chain.go
@@ -83,7 +83,7 @@ func (fc *NetworkFilterChain) OnTripleData(ctx 
context.Context, methodName strin
 }
 
 // CreateNetworkFilterChain create network filter chain
-func CreateNetworkFilterChain(config model.FilterChain, bs *model.Bootstrap) 
*NetworkFilterChain {
+func CreateNetworkFilterChain(config model.FilterChain) *NetworkFilterChain {
        var filters []filter.NetworkFilter
 
        for _, f := range config.Filters {
@@ -99,7 +99,7 @@ func CreateNetworkFilterChain(config model.FilterChain, bs 
*model.Bootstrap) *Ne
                        continue
                }
 
-               filter, err := p.CreateFilter(config, bs)
+               filter, err := p.CreateFilter(config)
                if err != nil {
                        logger.Error("CreateNetworkFilterChain %s createFilter 
error %s", f.Name, err)
                        continue
diff --git a/pkg/listener/http/http_listener.go 
b/pkg/listener/http/http_listener.go
index 6c0e4bf3..6f7d4cdd 100644
--- a/pkg/listener/http/http_listener.go
+++ b/pkg/listener/http/http_listener.go
@@ -57,7 +57,7 @@ type (
 )
 
 func newHttpListenerService(lc *model.Listener, bs *model.Bootstrap) 
(listener.ListenerService, error) {
-       fc := filterchain.CreateNetworkFilterChain(lc.FilterChain, bs)
+       fc := filterchain.CreateNetworkFilterChain(lc.FilterChain)
        return &HttpListenerService{
                BaseListenerService: listener.BaseListenerService{
                        Config:      lc,
@@ -80,6 +80,22 @@ func (ls *HttpListenerService) Start() error {
        return nil
 }
 
+func (ls *HttpListenerService) Close() error {
+       return ls.srv.Close()
+}
+
+func (ls *HttpListenerService) ShutDown() error {
+       //TODO implement me
+       panic("implement me")
+}
+
+func (ls *HttpListenerService) Refresh(c model.Listener) error {
+       // There is no need to lock here for now, as there is at most one 
NetworkFilter
+       fc := filterchain.CreateNetworkFilterChain(c.FilterChain)
+       ls.FilterChain = fc
+       return nil
+}
+
 func (ls *HttpListenerService) httpsListener() {
        hl := createDefaultHttpWorker(ls)
 
diff --git a/pkg/listener/http2/http2_listener.go 
b/pkg/listener/http2/http2_listener.go
index 5da0dbb7..13e457a0 100644
--- a/pkg/listener/http2/http2_listener.go
+++ b/pkg/listener/http2/http2_listener.go
@@ -68,7 +68,7 @@ func (h *handleWrapper) ServeHTTP(w http.ResponseWriter, r 
*http.Request) {
 }
 
 func newHttp2ListenerService(lc *model.Listener, bs *model.Bootstrap) 
(listener.ListenerService, error) {
-       fc := filterchain.CreateNetworkFilterChain(lc.FilterChain, bs)
+       fc := filterchain.CreateNetworkFilterChain(lc.FilterChain)
        return &Http2ListenerService{
                BaseListenerService: listener.BaseListenerService{
                        Config:      lc,
@@ -80,7 +80,7 @@ func newHttp2ListenerService(lc *model.Listener, bs 
*model.Bootstrap) (listener.
 }
 
 // Start start listen
-func (ls Http2ListenerService) Start() error {
+func (ls *Http2ListenerService) Start() error {
 
        sa := ls.Config.Address.SocketAddress
        addr := resolveAddress(sa.Address + ":" + strconv.Itoa(sa.Port))
@@ -105,12 +105,32 @@ func (ls Http2ListenerService) Start() error {
 
        go func() {
                if err := ls.server.Serve(ls.listener); err != nil {
-                       logger.Error("Http2ListenerService Start error %s", err)
+                       if err == http.ErrServerClosed {
+                               logger.Infof("Listener %s closed", 
ls.Config.Name)
+                               return
+                       }
+                       logger.Errorf("Http2ListenerService.Serve: %v", err)
                }
        }()
        return nil
 }
 
+func (ls *Http2ListenerService) Close() error {
+       return ls.server.Close()
+}
+
+func (ls *Http2ListenerService) ShutDown() error {
+       //TODO implement me
+       panic("implement me")
+}
+
+func (ls *Http2ListenerService) Refresh(c model.Listener) error {
+       // There is no need to lock here for now, as there is at most one 
NetworkFilter
+       fc := filterchain.CreateNetworkFilterChain(c.FilterChain)
+       ls.FilterChain = fc
+       return nil
+}
+
 func resolveAddress(addr string) string {
        if addr == "" {
                logger.Debug("Addr is undefined. Using port :8080 by default")
diff --git a/pkg/listener/listener.go b/pkg/listener/listener.go
index 5b9a76db..52403fcd 100644
--- a/pkg/listener/listener.go
+++ b/pkg/listener/listener.go
@@ -30,7 +30,14 @@ var factoryMap = make(map[model.ProtocolType]func(lc 
*model.Listener, bs *model.
 
 type (
        ListenerService interface {
+               // Start the listener service
                Start() error
+               // Close the listener service forcefully
+               Close() error
+               // ShutDown gracefully shuts down the listener.
+               ShutDown() error
+               // Refresh config
+               Refresh(model.Listener) error
        }
 
        BaseListenerService struct {
diff --git a/pkg/listener/tcp/tcp_listener.go b/pkg/listener/tcp/tcp_listener.go
index 004a4905..71c2f0fa 100644
--- a/pkg/listener/tcp/tcp_listener.go
+++ b/pkg/listener/tcp/tcp_listener.go
@@ -51,7 +51,7 @@ func newTcpListenerService(lc *model.Listener, bs 
*model.Bootstrap) (listener.Li
        // todo taskPoolMode
        server := getty.NewTCPServer(serverOpts...)
 
-       fc := filterchain.CreateNetworkFilterChain(lc.FilterChain, bs)
+       fc := filterchain.CreateNetworkFilterChain(lc.FilterChain)
        return &TcpListenerService{
                BaseListenerService: listener.BaseListenerService{
                        Config:      lc,
@@ -67,6 +67,23 @@ func (ls *TcpListenerService) Start() error {
        return nil
 }
 
+func (ls *TcpListenerService) Close() error {
+       ls.server.Close()
+       return nil
+}
+
+func (ls *TcpListenerService) ShutDown() error {
+       //TODO implement me
+       panic("implement me")
+}
+
+func (ls *TcpListenerService) Refresh(c model.Listener) error {
+       // There is no need to lock here for now, as there is at most one 
NetworkFilter
+       fc := filterchain.CreateNetworkFilterChain(c.FilterChain)
+       ls.FilterChain = fc
+       return nil
+}
+
 func (ls *TcpListenerService) newSession(session getty.Session) (err error) {
 
        tcpConn, ok := session.Conn().(*net.TCPConn)
diff --git a/pkg/listener/triple/triple_listener.go 
b/pkg/listener/triple/triple_listener.go
index a33e4c61..44312099 100644
--- a/pkg/listener/triple/triple_listener.go
+++ b/pkg/listener/triple/triple_listener.go
@@ -56,7 +56,7 @@ type (
 
 func newTripleListenerService(lc *model.Listener, bs *model.Bootstrap) 
(listener.ListenerService, error) {
 
-       fc := filterchain.CreateNetworkFilterChain(lc.FilterChain, bs)
+       fc := filterchain.CreateNetworkFilterChain(lc.FilterChain)
        ls := &TripleListenerService{
                BaseListenerService: listener.BaseListenerService{
                        Config:      lc,
@@ -88,6 +88,23 @@ func (ls *TripleListenerService) Start() error {
        return nil
 }
 
+func (ls *TripleListenerService) Close() error {
+       ls.server.Stop()
+       return nil
+}
+
+func (ls *TripleListenerService) ShutDown() error {
+       //TODO implement me
+       panic("implement me")
+}
+
+func (ls *TripleListenerService) Refresh(c model.Listener) error {
+       // There is no need to lock here for now, as there is at most one 
NetworkFilter
+       fc := filterchain.CreateNetworkFilterChain(c.FilterChain)
+       ls.FilterChain = fc
+       return nil
+}
+
 // GetReqParamsInterfaces get params
 func (d *ProxyService) GetReqParamsInterfaces(methodName string) 
([]interface{}, bool) {
        val, ok := d.reqTypeMap.Load(methodName)
diff --git a/pkg/model/base.go b/pkg/model/base.go
index d29bd98f..486fd00a 100644
--- a/pkg/model/base.go
+++ b/pkg/model/base.go
@@ -22,7 +22,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api"
 )
 
 type Metadata struct {
diff --git a/pkg/pool/pool.go b/pkg/pool/pool.go
index 0f7f61c7..92728751 100644
--- a/pkg/pool/pool.go
+++ b/pkg/pool/pool.go
@@ -23,7 +23,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
 )
 
 import (
diff --git a/pkg/remote/zookeeper/client.go b/pkg/remote/zookeeper/client.go
index 7d850d36..77794b6f 100644
--- a/pkg/remote/zookeeper/client.go
+++ b/pkg/remote/zookeeper/client.go
@@ -25,6 +25,7 @@ import (
 
 import (
        gxzookeeper "github.com/dubbogo/gost/database/kv/zk"
+
        perrors "github.com/pkg/errors"
 )
 
diff --git a/pkg/router/api.go b/pkg/router/api.go
index f6d9d602..28ac8986 100644
--- a/pkg/router/api.go
+++ b/pkg/router/api.go
@@ -23,7 +23,7 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 )
 
 import (
diff --git a/pkg/router/api_test.go b/pkg/router/api_test.go
index 0718e317..df9fabb1 100644
--- a/pkg/router/api_test.go
+++ b/pkg/router/api_test.go
@@ -23,8 +23,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/router/route.go b/pkg/router/route.go
index 0587f584..1bada518 100644
--- a/pkg/router/route.go
+++ b/pkg/router/route.go
@@ -24,8 +24,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 
        "github.com/pkg/errors"
 )
diff --git a/pkg/router/route_test.go b/pkg/router/route_test.go
index 9d70406c..a72faccb 100644
--- a/pkg/router/route_test.go
+++ b/pkg/router/route_test.go
@@ -22,8 +22,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 
        "github.com/stretchr/testify/assert"
 )
diff --git a/pkg/server/api_config_manager.go b/pkg/server/api_config_manager.go
index 81179d8c..1b7af1be 100644
--- a/pkg/server/api_config_manager.go
+++ b/pkg/server/api_config_manager.go
@@ -22,8 +22,8 @@ import (
 )
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/router"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api/config"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/router"
 
        "github.com/pkg/errors"
 )
diff --git a/pkg/server/controls/controls.go b/pkg/server/controls/controls.go
index 4bebfcc3..ade8adc7 100644
--- a/pkg/server/controls/controls.go
+++ b/pkg/server/controls/controls.go
@@ -31,8 +31,11 @@ type (
        }
 
        ListenerManager interface {
+               AddListener(m *model.Listener) error
+               UpdateListener(m *model.Listener) error
                RemoveListener(names []string)
-               AddOrUpdateListener(m *model.Listener) error
+               HasListener(name string) bool
+               CloneXdsControlListener() ([]*model.Listener, error)
        }
 
        DynamicResourceManager interface {
diff --git a/pkg/server/controls/mocks/mocks.go 
b/pkg/server/controls/mocks/mocks.go
index a91ab0e7..8d18d787 100644
--- a/pkg/server/controls/mocks/mocks.go
+++ b/pkg/server/controls/mocks/mocks.go
@@ -142,9 +142,9 @@ func (m *MockListenerManager) EXPECT() 
*MockListenerManagerMockRecorder {
 }
 
 // AddOrUpdateListener mocks base method.
-func (m_2 *MockListenerManager) AddOrUpdateListener(m *model.Listener) error {
+func (m_2 *MockListenerManager) AddListener(m *model.Listener) error {
        m_2.ctrl.T.Helper()
-       ret := m_2.ctrl.Call(m_2, "AddOrUpdateListener", m)
+       ret := m_2.ctrl.Call(m_2, "AddListener", m)
        ret0, _ := ret[0].(error)
        return ret0
 }
@@ -152,7 +152,7 @@ func (m_2 *MockListenerManager) AddOrUpdateListener(m 
*model.Listener) error {
 // AddOrUpdateListener indicates an expected call of AddOrUpdateListener.
 func (mr *MockListenerManagerMockRecorder) AddOrUpdateListener(m interface{}) 
*gomock.Call {
        mr.mock.ctrl.T.Helper()
-       return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, 
"AddOrUpdateListener", 
reflect.TypeOf((*MockListenerManager)(nil).AddOrUpdateListener), m)
+       return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddListener", 
reflect.TypeOf((*MockListenerManager)(nil).AddListener), m)
 }
 
 // RemoveListener mocks base method.
diff --git a/pkg/server/dynamic_resource_manager.go 
b/pkg/server/dynamic_resource_manager.go
index 51f82c68..039fdde6 100644
--- a/pkg/server/dynamic_resource_manager.go
+++ b/pkg/server/dynamic_resource_manager.go
@@ -18,7 +18,7 @@
 package server
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/api"
 
        "github.com/pkg/errors"
 )
diff --git a/pkg/server/listener_manager.go b/pkg/server/listener_manager.go
index 0b09aadc..6181b5b8 100644
--- a/pkg/server/listener_manager.go
+++ b/pkg/server/listener_manager.go
@@ -19,6 +19,14 @@ package server
 
 import (
        "runtime/debug"
+       "strconv"
+       "sync"
+)
+
+import (
+       "github.com/pkg/errors"
+
+       "gopkg.in/yaml.v2"
 )
 
 import (
@@ -30,63 +38,101 @@ import (
 // wrapListenerService wrap listener service and its configuration.
 type wrapListenerService struct {
        listener.ListenerService
-       cfg *model.Listener
+
+       config *model.Listener
 }
 
 // ListenerManager the listener manager
 type ListenerManager struct {
-       activeListener        []*model.Listener
-       bootstrap             *model.Bootstrap
-       activeListenerService []*wrapListenerService
+       bootstrap *model.Bootstrap
+
+       // name(host-port-protocol) -> wrapListenerService
+       activeListenerService map[string]*wrapListenerService
+       //readWriteLock
+       rwLock *sync.RWMutex
 }
 
 // CreateDefaultListenerManager create listener manager from config
 func CreateDefaultListenerManager(bs *model.Bootstrap) *ListenerManager {
+       listeners := map[string]*wrapListenerService{}
        sl := bs.GetStaticListeners()
-       var listeners []*wrapListenerService
-       for _, lsCof := range bs.StaticResources.Listeners {
+
+       for _, lsCof := range sl {
                ls, err := listener.CreateListenerService(lsCof, bs)
                if err != nil {
                        logger.Error("CreateDefaultListenerManager %s error: 
%v", lsCof.Name, err)
                }
-               listeners = append(listeners, &wrapListenerService{ls, lsCof})
+               listeners[resolveListenerName(lsCof)] = &wrapListenerService{
+                       config:          lsCof,
+                       ListenerService: ls,
+               }
        }
 
        return &ListenerManager{
-               activeListener:        sl,
                activeListenerService: listeners,
                bootstrap:             bs,
+               rwLock:                &sync.RWMutex{},
        }
 }
 
-func (lm *ListenerManager) AddOrUpdateListener(lsConf *model.Listener) error {
-       //todo add sync lock for concurrent using
-       if theListener := lm.getListener(lsConf.Name); theListener != nil {
-               lm.updateListener(theListener, lsConf)
-               return nil
-       }
+func resolveListenerName(c *model.Listener) string {
+       return c.Address.SocketAddress.Address + "-" + 
strconv.Itoa(c.Address.SocketAddress.Port) + "-" + c.ProtocolStr
+}
+
+func (lm *ListenerManager) AddListener(lsConf *model.Listener) error {
+       logger.Infof("Add Listener %s", lsConf.Name)
        ls, err := listener.CreateListenerService(lsConf, lm.bootstrap)
        if err != nil {
                return err
        }
-       lm.startListenerServiceAsync(ls)
        lm.addListenerService(ls, lsConf)
-       lm.activeListener = append(lm.activeListener, lsConf)
+       lm.startListenerServiceAsync(ls)
+       return nil
+}
+
+func (lm *ListenerManager) UpdateListener(m *model.Listener) error {
+       // lock
+       lm.rwLock.Lock()
+       defer lm.rwLock.Unlock()
+       ls, ok := lm.activeListenerService[m.Name]
+       if !ok {
+               return errors.New("ListenerManager UpdateListener error: 
listener not found")
+       }
+       logger.Infof("Update Listener %s", m.Name)
+       ls.config = m
+       err := ls.Refresh(*m)
+       if err != nil {
+               logger.Warnf("Update Listener %s error: %s", m.Name, err)
+               return err
+       }
        return nil
 }
 
-func (lm *ListenerManager) updateListener(listener *model.Listener, to 
*model.Listener) {
-       //todo update listener and service
-       panic("not implement")
+func (lm *ListenerManager) HasListener(name string) bool {
+       lm.rwLock.RLock()
+       defer lm.rwLock.RUnlock()
+       _, ok := lm.activeListenerService[name]
+       return ok
 }
 
-func (lm *ListenerManager) getListener(name string) *model.Listener {
-       for _, l := range lm.activeListener {
-               if l.Name == name {
-                       return l
-               }
+func (lm *ListenerManager) CloneXdsControlListener() ([]*model.Listener, 
error) {
+       lm.rwLock.RLock()
+       defer lm.rwLock.RUnlock()
+
+       var listeners []*model.Listener
+       for _, ls := range lm.activeListenerService {
+               listeners = append(listeners, ls.config)
        }
-       return nil
+       //deep copy
+       bytes, err := yaml.Marshal(listeners)
+       if err != nil {
+               return nil, err
+       }
+       var cloneListeners []*model.Listener
+       if err = yaml.Unmarshal(bytes, &cloneListeners); err != nil {
+               return nil, err
+       }
+       return cloneListeners, nil
 }
 
 func (lm *ListenerManager) StartListen() {
@@ -108,25 +154,52 @@ func (lm *ListenerManager) startListenerServiceAsync(s 
listener.ListenerService)
                }()
                err := s.Start()
                if err != nil {
-                       logger.Error("start listener service error.  %v", err)
+                       logger.Errorf("start listener service error.  %v", err)
                }
        }()
        return done
 }
 
 func (lm *ListenerManager) addListenerService(ls listener.ListenerService, 
lsConf *model.Listener) {
-       lm.activeListenerService = append(lm.activeListenerService, 
&wrapListenerService{ls, lsConf})
+       lm.rwLock.Lock()
+       defer lm.rwLock.Unlock()
+       lm.activeListenerService[resolveListenerName(lsConf)] = 
&wrapListenerService{
+               config:          lsConf,
+               ListenerService: ls,
+       }
 }
 
 func (lm *ListenerManager) GetListenerService(name string) 
listener.ListenerService {
-       for i := range lm.activeListenerService {
-               if lm.activeListenerService[i].cfg.Name == name {
-                       return lm.activeListenerService[i]
-               }
+       lm.rwLock.RLock()
+       defer lm.rwLock.RUnlock()
+
+       ls, ok := lm.activeListenerService[name]
+       if ok {
+               return ls
        }
        return nil
 }
 
 func (lm *ListenerManager) RemoveListener(names []string) {
-       //todo implement remove Listener and ListenerService
+       //close ListenerService
+       for _, name := range names {
+               logger.Infof("listener %s closing", name)
+               ls := lm.GetListenerService(name)
+               if ls == nil {
+                       logger.Warnf("listener %s not found", name)
+                       continue
+               }
+               if err := ls.Close(); err != nil {
+                       logger.Errorf("close listener %s service error.  %s", 
name, err)
+                       continue
+               }
+               logger.Infof("listener %s closed", name)
+       }
+
+       lm.rwLock.Lock()
+       defer lm.rwLock.Unlock()
+       //remove from activeListenerService
+       for _, name := range names {
+               delete(lm.activeListenerService, name)
+       }
 }
diff --git a/pkg/server/pixiu_start.go b/pkg/server/pixiu_start.go
index b1a80868..ade0e799 100644
--- a/pkg/server/pixiu_start.go
+++ b/pkg/server/pixiu_start.go
@@ -106,7 +106,13 @@ func (s *Server) Start() {
                if addr.Port == 0 {
                        addr.Port = constant.PprofDefaultPort
                }
-               go 
http.ListenAndServe(addr.Address+":"+strconv.Itoa(addr.Port), nil)
+               go func() {
+                       err := 
http.ListenAndServe(addr.Address+":"+strconv.Itoa(addr.Port), nil)
+                       if err != nil {
+                               logger.Warnf("Pprof server start failed, err: 
%v", err)
+                               return
+                       }
+               }()
                logger.Infof("[dubbopixiu go pprof] httpListener start by : 
%s", addr.Address+":"+strconv.Itoa(addr.Port))
        }
 }
diff --git a/samples/dubbogo/multi/server/app/student.go 
b/samples/dubbogo/multi/server/app/student.go
index 9dc470ec..e7b52ed3 100644
--- a/samples/dubbogo/multi/server/app/student.go
+++ b/samples/dubbogo/multi/server/app/student.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/dubbogo/multi/server/app/teacher.go 
b/samples/dubbogo/multi/server/app/teacher.go
index bf52943b..9524f7a3 100644
--- a/samples/dubbogo/multi/server/app/teacher.go
+++ b/samples/dubbogo/multi/server/app/teacher.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/dubbogo/simple/benchmark/server/app/user.go 
b/samples/dubbogo/simple/benchmark/server/app/user.go
index 9a11d63a..6df7c480 100644
--- a/samples/dubbogo/simple/benchmark/server/app/user.go
+++ b/samples/dubbogo/simple/benchmark/server/app/user.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/dubbogo/simple/jaeger/server/app/user.go 
b/samples/dubbogo/simple/jaeger/server/app/user.go
index 9a11d63a..6df7c480 100644
--- a/samples/dubbogo/simple/jaeger/server/app/user.go
+++ b/samples/dubbogo/simple/jaeger/server/app/user.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/dubbogo/simple/mix/server/app/user.go 
b/samples/dubbogo/simple/mix/server/app/user.go
index 9a11d63a..6df7c480 100644
--- a/samples/dubbogo/simple/mix/server/app/user.go
+++ b/samples/dubbogo/simple/mix/server/app/user.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/dubbogo/simple/proxy/server/app/user.go 
b/samples/dubbogo/simple/proxy/server/app/user.go
index 9a11d63a..6df7c480 100644
--- a/samples/dubbogo/simple/proxy/server/app/user.go
+++ b/samples/dubbogo/simple/proxy/server/app/user.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/dubbogo/simple/query/server/app/user.go 
b/samples/dubbogo/simple/query/server/app/user.go
index 9a11d63a..6df7c480 100644
--- a/samples/dubbogo/simple/query/server/app/user.go
+++ b/samples/dubbogo/simple/query/server/app/user.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/dubbogo/simple/resolve/server/app/user.go 
b/samples/dubbogo/simple/resolve/server/app/user.go
index 9a11d63a..6df7c480 100644
--- a/samples/dubbogo/simple/resolve/server/app/user.go
+++ b/samples/dubbogo/simple/resolve/server/app/user.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/dubbogo/simple/triple/protobuf/api/helloworld.pb.go 
b/samples/dubbogo/simple/triple/protobuf/api/helloworld.pb.go
index 661ea075..da178a60 100644
--- a/samples/dubbogo/simple/triple/protobuf/api/helloworld.pb.go
+++ b/samples/dubbogo/simple/triple/protobuf/api/helloworld.pb.go
@@ -45,7 +45,7 @@ import (
 )
 
 import (
-       proto "github.com/golang/protobuf/proto"
+       proto "github.com/golang/protobuf/proto" //nolint
 
        protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 
diff --git a/samples/dubbogo/simple/triple/server/app/greeter.go 
b/samples/dubbogo/simple/triple/server/app/greeter.go
index 079c476e..5edbf406 100644
--- a/samples/dubbogo/simple/triple/server/app/greeter.go
+++ b/samples/dubbogo/simple/triple/server/app/greeter.go
@@ -25,10 +25,13 @@ import (
 import (
        "dubbo.apache.org/dubbo-go/v3/common/logger"
 
-       triplepb 
"github.com/apache/dubbo-go-pixiu/samples/dubbogo/simple/triple/server/protobuf/api"
        tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
 )
 
+import (
+       triplepb 
"github.com/apache/dubbo-go-pixiu/samples/dubbogo/simple/triple/server/protobuf/api"
+)
+
 type GreeterProvider struct {
        triplepb.UnimplementedGreeterServer
 }
diff --git 
a/samples/dubbogo/simple/triple/server/protobuf/api/samples_api.pb.go 
b/samples/dubbogo/simple/triple/server/protobuf/api/samples_api.pb.go
index e6c897ce..5dc90940 100644
--- a/samples/dubbogo/simple/triple/server/protobuf/api/samples_api.pb.go
+++ b/samples/dubbogo/simple/triple/server/protobuf/api/samples_api.pb.go
@@ -29,7 +29,7 @@ import (
 )
 
 import (
-       proto "github.com/golang/protobuf/proto"
+       proto "github.com/golang/protobuf/proto" //nolint
 
        protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 
diff --git a/samples/dubbogo/simple/uri/server/app/user.go 
b/samples/dubbogo/simple/uri/server/app/user.go
index 9a11d63a..6df7c480 100644
--- a/samples/dubbogo/simple/uri/server/app/user.go
+++ b/samples/dubbogo/simple/uri/server/app/user.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "dubbo.apache.org/dubbo-go/v3/config"
+
        hessian "github.com/apache/dubbo-go-hessian2"
 )
 
diff --git a/samples/grpc/pixiu/conf.yaml b/samples/grpc/pixiu/conf.yaml
index 84fdad57..42044f78 100644
--- a/samples/grpc/pixiu/conf.yaml
+++ b/samples/grpc/pixiu/conf.yaml
@@ -47,7 +47,6 @@ static_resources:
         - socket_address:
             address: 127.0.0.1
             port: 50001
-            protocol_type: "GRPC"
   shutdown_config:
     timeout: "60s"
     step_timeout: "10s"
diff --git a/samples/grpc/test/pixiu_test.go b/samples/grpc/test/pixiu_test.go
index f75de9e8..d72fb486 100644
--- a/samples/grpc/test/pixiu_test.go
+++ b/samples/grpc/test/pixiu_test.go
@@ -27,6 +27,7 @@ import (
 
 import (
        "github.com/stretchr/testify/assert"
+
        "google.golang.org/grpc"
        "google.golang.org/grpc/credentials/insecure"
 )
diff --git a/samples/xds/local-control-panel/server/app/go.sum 
b/samples/xds/local-control-panel/server/app/go.sum
index 0a1a75e6..785857f4 100644
--- a/samples/xds/local-control-panel/server/app/go.sum
+++ b/samples/xds/local-control-panel/server/app/go.sum
@@ -113,7 +113,7 @@ github.com/bketelsen/crypt 
v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm
 github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod 
h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
 github.com/buger/jsonparser v1.1.1/go.mod 
h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
 github.com/casbin/casbin/v2 v2.1.2/go.mod 
h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
-github.com/cch123/supermonkey v1.0.0/go.mod 
h1:d5jXTCyG6nu/pu0vYmoC0P/l0eBGesv3oQQ315uNBOA=
+github.com/cch123/supermonkey v1.0.1/go.mod 
h1:d5jXTCyG6nu/pu0vYmoC0P/l0eBGesv3oQQ315uNBOA=
 github.com/cenkalti/backoff v2.2.1+incompatible/go.mod 
h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
 github.com/census-instrumentation/opencensus-proto v0.2.1 
h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod 
h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
diff --git a/samples/xds/local-control-panel/server/app/main.go 
b/samples/xds/local-control-panel/server/app/main.go
index d931f907..eb5c850e 100644
--- a/samples/xds/local-control-panel/server/app/main.go
+++ b/samples/xds/local-control-panel/server/app/main.go
@@ -20,10 +20,13 @@ package main
 import (
        "context"
        "flag"
+       "os"
+)
+
+import (
        "github.com/envoyproxy/go-control-plane/pkg/cache/v3"
        "github.com/envoyproxy/go-control-plane/pkg/server/v3"
        "github.com/envoyproxy/go-control-plane/pkg/test/v3"
-       "os"
 )
 
 var (
diff --git a/samples/xds/local-control-panel/server/app/resoruce_pixiu2.go 
b/samples/xds/local-control-panel/server/app/resoruce_pixiu2.go
index 10083aff..4ce4c740 100644
--- a/samples/xds/local-control-panel/server/app/resoruce_pixiu2.go
+++ b/samples/xds/local-control-panel/server/app/resoruce_pixiu2.go
@@ -18,12 +18,14 @@
 package main
 
 import (
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds"
-       pixiupb "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds/model"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds"
+       pixiupb "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds/model"
+
        core "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
        "github.com/envoyproxy/go-control-plane/pkg/cache/types"
        "github.com/envoyproxy/go-control-plane/pkg/cache/v3"
        "github.com/envoyproxy/go-control-plane/pkg/resource/v3"
+
        "google.golang.org/protobuf/types/known/anypb"
 )
 
diff --git a/samples/xds/local-control-panel/server/app/resource_pixiu.go 
b/samples/xds/local-control-panel/server/app/resource_pixiu.go
index 8adce5b3..df8c49e0 100644
--- a/samples/xds/local-control-panel/server/app/resource_pixiu.go
+++ b/samples/xds/local-control-panel/server/app/resource_pixiu.go
@@ -18,18 +18,23 @@
 package main
 
 import (
-       "github.com/apache/dubbo-go-pixiu/pkg/common/constant"
-       "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds"
-       pixiupb "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/xds/model"
+       "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds"
+       pixiupb "github.com/dubbo-go-pixiu/pixiu-api/pkg/xds/model"
+
        core "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
        "github.com/envoyproxy/go-control-plane/pkg/cache/types"
        "github.com/envoyproxy/go-control-plane/pkg/cache/v3"
        "github.com/envoyproxy/go-control-plane/pkg/resource/v3"
+
        "google.golang.org/protobuf/types/known/anypb"
        "google.golang.org/protobuf/types/known/structpb"
        structpb2 "google.golang.org/protobuf/types/known/structpb"
 )
 
+import (
+       "github.com/apache/dubbo-go-pixiu/pkg/common/constant"
+)
+
 var httpManagerConfigYaml = `
 route_config:
   routes:
@@ -92,9 +97,9 @@ func makeListeners() *pixiupb.PixiuExtensionListeners {
                                Address: &pixiupb.Address{
                                        SocketAddress: &pixiupb.SocketAddress{
                                                Address: "0.0.0.0",
-                                               Port:    8888,
+                                               Port:    8081,
                                        },
-                                       Name: "http_8888",
+                                       Name: "http_8081",
                                },
                                FilterChain: makeHttpFilter(),
                        },
diff --git a/samples/xds/local-control-panel/server/app/server.go 
b/samples/xds/local-control-panel/server/app/server.go
index a85ec05d..87ec66f1 100644
--- a/samples/xds/local-control-panel/server/app/server.go
+++ b/samples/xds/local-control-panel/server/app/server.go
@@ -20,22 +20,24 @@ package main
 import (
        "context"
        "fmt"
-       extensionpb 
"github.com/envoyproxy/go-control-plane/envoy/service/extension/v3"
        "log"
        "net"
        "time"
+)
 
-       "google.golang.org/grpc"
-       "google.golang.org/grpc/keepalive"
-
+import (
        clusterservice 
"github.com/envoyproxy/go-control-plane/envoy/service/cluster/v3"
        discoverygrpc 
"github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3"
        endpointservice 
"github.com/envoyproxy/go-control-plane/envoy/service/endpoint/v3"
+       extensionpb 
"github.com/envoyproxy/go-control-plane/envoy/service/extension/v3"
        listenerservice 
"github.com/envoyproxy/go-control-plane/envoy/service/listener/v3"
        routeservice 
"github.com/envoyproxy/go-control-plane/envoy/service/route/v3"
        runtimeservice 
"github.com/envoyproxy/go-control-plane/envoy/service/runtime/v3"
        secretservice 
"github.com/envoyproxy/go-control-plane/envoy/service/secret/v3"
        "github.com/envoyproxy/go-control-plane/pkg/server/v3"
+
+       "google.golang.org/grpc"
+       "google.golang.org/grpc/keepalive"
 )
 
 const (

Reply via email to