You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by la...@apache.org on 2021/08/26 09:45:06 UTC
[dubbo-go] branch config-enhance updated: merge 3.0 to ensure
samples runnable (#1414)
This is an automated email from the ASF dual-hosted git repository.
laurence pushed a commit to branch config-enhance
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
The following commit(s) were added to refs/heads/config-enhance by this push:
new 8ef173e merge 3.0 to ensure samples runnable (#1414)
8ef173e is described below
commit 8ef173e7a77b493d33f83cc779b7efcf792e1f21
Author: Laurence <45...@users.noreply.github.com>
AuthorDate: Thu Aug 26 17:44:58 2021 +0800
merge 3.0 to ensure samples runnable (#1414)
* fix: change register event chan to unbundent chan (#1330)
* fix: #1323 delete zk registry when set defualt consumer/provider config (#1324)
* Ftr: Generic invocation supports Generalizer (#1315)
* generic filter
* sync
* feat: get java name from POJO
* todo: unittests for generic filter
* unittests for generic filter
* map generalizer
* adjust import block
* generic service filter is ready for generalizer
* add unittests for GenericServiceFilter
* ReferenceConfig supports new format of generic key
* go fmt
* fix license
* fix license
* fix bugs encountering in integrated tests
* go fmt
* fix serialization bugs
* ftr: generic invocation supports protobuf-json
* go fmt
* go fmt
* disable protobuf-json
* go fmt
* update comments
* fix logging level (#1341)
* Ftr: add lumberjack log config (#1335)
* add lumberjack & union test
* fix go fmt error,modify go.sum file
* Ftr: add json generalizer (#1343)
* Ftr: add json generalizer
Fix: go fmt
* Fix: hessian pojo
* fix: restart ci
* Fix: imports format
* style(*): format imports with dubbogo/tools/imports-formatter (#1346)
* fix Fixed the problem that the timeout period of the original method level does not take effect (#1336)
* fix Fixed the problem that the timeout period of the original method level does not take effect
* fix Fixed the problem that the timeout period of the original method level does not take effect
Co-authored-by: 董振兴 <do...@xiaomi.com>
* fix:#1143 Feature/reduce etcd registry conn; wait group modify (#1297)
* modify map use in nacos service_discovery
* fix map double write bug
* modify etcd registry restart mechanism
* add sync.once for HandleClientRestart
* modify the logic when add() or done() of wait group in zk,etcd and k8s registry
* modify the logic when add() or done() of wait group in zk,etcd and k8s registry
* add handleClientRestart func
* add handleClientRestart func
* go fmt
* fix: update linter
Co-authored-by: yexiaobo <ye...@luojilab.com>
Co-authored-by: LaurenceLiZhixin <38...@qq.com>
* ftr: triple multi params support (#1344)
* ftr: triple multi params support
* fix: import
* fix: fix ci and gomod
* fix: fmt
* fix: add develop back to branch
* fix: remove unused getty import
* fix: mock zk registry (#1351)
* 优化Nacos下的ServiceName的命名风格 (#1352)
Co-authored-by: Changeden <ch...@unizone.tech>
* remove zk test (#1357)
* Use class name as the default reference name (#1339)
* build(deps): bump actions/cache from v2.1.4 to v2.1.5
Bumps [actions/cache](https://github.com/actions/cache) from v2.1.4 to v2.1.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.4...1a9e2138d905efd099035b49d8b7a3888c653ca8)
Signed-off-by: dependabot[bot] <su...@github.com>
* improve etcd version and change create to put (#1203)
* Remove RPC Service
* use type assertion before reflect
* modify comment
* modify comment of BaseMetadataService
* add the type alias of interface{}
* modify RPCService
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
Co-authored-by: Xin.Zh <dr...@foxmail.com>
Co-authored-by: AlexStocks <al...@foxmail.com>
Co-authored-by: randy <zt...@gmail.com>
* Feat/upgrade getty (#1345)
* feat(getty): upgrade getty version to 1.4.4
* feat(getty): delete outdated getty params
* delete time.Sleep in unit test
* upgrade getty version to 1.4.5
* style(getty): format package getty imports
Co-authored-by: dongjianhui03 <do...@meituan.com>
* support multi pb (#1361)
* 修复当getty的tcp read/write timeout小于1s时panic的问题
* TCP Read/Write最小值提取为全局变量,优化parseTimeDurationByRange逻辑
* logo (#1382)
* Change the key of a mock EchoFilter (#1381)
* build(deps): bump actions/cache from v2.1.4 to v2.1.5
Bumps [actions/cache](https://github.com/actions/cache) from v2.1.4 to v2.1.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.4...1a9e2138d905efd099035b49d8b7a3888c653ca8)
Signed-off-by: dependabot[bot] <su...@github.com>
* improve etcd version and change create to put (#1203)
* change the mock filter key
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
Co-authored-by: Xin.Zh <dr...@foxmail.com>
Co-authored-by: AlexStocks <al...@foxmail.com>
Co-authored-by: randy <zt...@gmail.com>
* Change the key of a mock EchoFilter (#1381)
* build(deps): bump actions/cache from v2.1.4 to v2.1.5
Bumps [actions/cache](https://github.com/actions/cache) from v2.1.4 to v2.1.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.4...1a9e2138d905efd099035b49d8b7a3888c653ca8)
Signed-off-by: dependabot[bot] <su...@github.com>
* improve etcd version and change create to put (#1203)
* change the mock filter key
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
Co-authored-by: Xin.Zh <dr...@foxmail.com>
Co-authored-by: AlexStocks <al...@foxmail.com>
Co-authored-by: randy <zt...@gmail.com>
* fix: nacos service disc error log bug (#1390)
* 优化代码逻辑
* fix:registry timeout not pars (#1392)
* fix:registry timeout not pars
* up:fmt
* up:统一超时时间key
* fix:修改测试顺序问题
* up:fmt
* change dependabot target branch
* build(deps): bump github.com/fsnotify/fsnotify from 1.4.9 to 1.5.0 (#1400)
* build(deps): bump actions/cache from v2.1.4 to v2.1.5
Bumps [actions/cache](https://github.com/actions/cache) from v2.1.4 to v2.1.5.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.4...1a9e2138d905efd099035b49d8b7a3888c653ca8)
Signed-off-by: dependabot[bot] <su...@github.com>
* improve etcd version and change create to put (#1203)
* build(deps): bump github.com/dubbogo/gost from 1.11.14 to 1.11.16 (#1387)
Bumps [github.com/dubbogo/gost](https://github.com/dubbogo/gost) from 1.11.14 to 1.11.16.
- [Release notes](https://github.com/dubbogo/gost/releases)
- [Commits](https://github.com/dubbogo/gost/compare/v1.11.14...v1.11.16)
---
updated-dependencies:
- dependency-name: github.com/dubbogo/gost
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <su...@github.com>
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
* build(deps): bump google.golang.org/protobuf from 1.26.0 to 1.27.1 (#1386)
Bumps [google.golang.org/protobuf](https://github.com/protocolbuffers/protobuf-go) from 1.26.0 to 1.27.1.
- [Release notes](https://github.com/protocolbuffers/protobuf-go/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf-go/blob/master/release.bash)
- [Commits](https://github.com/protocolbuffers/protobuf-go/compare/v1.26.0...v1.27.1)
---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <su...@github.com>
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
* build(deps): bump go.etcd.io/etcd/client/v3 from 3.5.0-alpha.0 to 3.5.0 (#1383)
Bumps [go.etcd.io/etcd/client/v3](https://github.com/etcd-io/etcd) from 3.5.0-alpha.0 to 3.5.0.
- [Release notes](https://github.com/etcd-io/etcd/releases)
- [Changelog](https://github.com/etcd-io/etcd/blob/main/CHANGELOG-3.5.md)
- [Commits](https://github.com/etcd-io/etcd/compare/v3.5.0-alpha.0...v3.5.0)
---
updated-dependencies:
- dependency-name: go.etcd.io/etcd/client/v3
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <su...@github.com>
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
* build(deps): bump github.com/fsnotify/fsnotify from 1.4.9 to 1.5.0
Bumps [github.com/fsnotify/fsnotify](https://github.com/fsnotify/fsnotify) from 1.4.9 to 1.5.0.
- [Release notes](https://github.com/fsnotify/fsnotify/releases)
- [Changelog](https://github.com/fsnotify/fsnotify/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fsnotify/fsnotify/compare/v1.4.9...v1.5.0)
---
updated-dependencies:
- dependency-name: github.com/fsnotify/fsnotify
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <su...@github.com>
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
Co-authored-by: Xin.Zh <dr...@foxmail.com>
Co-authored-by: AlexStocks <al...@foxmail.com>
Co-authored-by: randy <zt...@gmail.com>
* build(deps): bump github.com/emicklei/go-restful/v3 from 3.4.0 to 3.5.2 (#1403)
Bumps [github.com/emicklei/go-restful/v3](https://github.com/emicklei/go-restful) from 3.4.0 to 3.5.2.
- [Release notes](https://github.com/emicklei/go-restful/releases)
- [Changelog](https://github.com/emicklei/go-restful/blob/v3/CHANGES.md)
- [Commits](https://github.com/emicklei/go-restful/compare/v3.4.0...v3.5.2)
---
updated-dependencies:
- dependency-name: github.com/emicklei/go-restful/v3
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <su...@github.com>
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
* 更新TCP读写超时最小值命名;不再使用范围比较;
* del protoc-gen-dubbo3 & protoc-gen-dubbo (#1313)
Co-authored-by: Mulavar <97...@qq.com>
Co-authored-by: XavierNiu <a...@nxw.name>
Co-authored-by: 氕氘氚 <cj...@163.com>
Co-authored-by: EnableAsync <43...@users.noreply.github.com>
Co-authored-by: XX <45...@users.noreply.github.com>
Co-authored-by: 董振兴 <do...@xiaomi.com>
Co-authored-by: WilliamLeaves <wi...@gmail.com>
Co-authored-by: yexiaobo <ye...@luojilab.com>
Co-authored-by: ChangedenChan <ch...@gmail.com>
Co-authored-by: Changeden <ch...@unizone.tech>
Co-authored-by: YuDong Tang <58...@qq.com>
Co-authored-by: alchemy-lee <27...@qq.com>
Co-authored-by: dependabot[bot] <49...@users.noreply.github.com>
Co-authored-by: Xin.Zh <dr...@foxmail.com>
Co-authored-by: AlexStocks <al...@foxmail.com>
Co-authored-by: randy <zt...@gmail.com>
Co-authored-by: dongjianhui03 <do...@meituan.com>
Co-authored-by: gaoxinge <xg...@tianrang-inc.com>
Co-authored-by: wangxw666 <24...@qq.com>
Co-authored-by: zhaoyunxing <23...@qq.com>
Co-authored-by: Joe Zou <jo...@apache.org>
---
.github/PULL_REQUEST_TEMPLATE.md | 2 +-
.github/dependabot.yml | 4 +-
.github/workflows/github-actions.yml | 4 +-
.gitignore | 1 +
README.md | 5 +
README_CN.md | 5 +
.../cluster_impl/available_cluster_invoker_test.go | 1 +
cluster/cluster_impl/base_cluster_invoker.go | 1 +
.../cluster_impl/broadcast_cluster_invoker_test.go | 1 +
cluster/cluster_impl/failback_cluster_test.go | 2 +
cluster/cluster_impl/failfast_cluster_test.go | 2 +
cluster/cluster_impl/failover_cluster_test.go | 5 +-
cluster/cluster_impl/failsafe_cluster_test.go | 2 +
cluster/cluster_impl/forking_cluster_test.go | 1 +
.../zone_aware_cluster_invoker_test.go | 1 +
cluster/router/chain/chain.go | 1 +
.../judger/attachment_match_judger_test.go | 2 +-
.../v3router/judger/bool_match_judger_test.go | 5 +-
.../v3router/judger/double_match_judger_test.go | 5 +-
.../judger/double_range_match_judger_test.go | 5 +-
.../judger/list_double_match_judger_test.go | 5 +-
.../judger/list_string_match_judger_test.go | 5 +-
.../v3router/judger/method_match_judger_test.go | 2 +-
.../router/v3router/judger/string_match_judger.go | 5 +-
.../v3router/judger/string_match_judger_test.go | 5 +-
.../v3router/k8s_api/listener_handler_impl.go | 4 +-
cluster/router/v3router/k8s_crd/client.go | 3 +
.../router/v3router/k8s_crd/listener_handler.go | 1 +
cluster/router/v3router/router_chain.go | 2 +-
cluster/router/v3router/router_chain_test.go | 13 +-
cluster/router/v3router/uniform_rule.go | 2 +-
common/constant/default.go | 8 -
common/constant/key.go | 9 +
.../constant/{serializtion.go => serialization.go} | 0
common/host_util.go | 4 +-
common/logger/file_log.yml | 36 +
common/logger/logger.go | 62 +-
common/logger/logger_test.go | 54 +
common/proxy/proxy.go | 27 +-
common/proxy/proxy_factory/default.go | 9 +-
common/proxy/proxy_test.go | 1 +
common/rpc_service.go | 40 +-
common/rpc_service_test.go | 33 +
common/url.go | 22 +-
common/yaml/yaml.go | 1 +
config/application_config.go | 5 +-
config/config_center_config.go | 8 +-
config/config_loader.go | 34 +-
config/config_loader_options.go | 6 +-
config/config_loader_options_test.go | 4 +-
config/config_loader_test.go | 11 +-
config/config_utils.go | 8 +-
config/consumer_config.go | 6 +-
config/generic/generic_service.go | 4 +-
config/interfaces/config_reader.go | 4 +-
config/metadata_report_config.go | 7 +-
config/method_config.go | 5 +-
config/provider_config.go | 5 +-
config/reference_config.go | 25 +-
config/registry_config.go | 3 +-
config/remote_config.go | 7 +-
config/root_config.go | 2 +-
config/router_config.go | 5 +-
config/router_config_test.go | 10 +-
config/service.go | 6 +-
config/service_config.go | 5 +-
config/service_discovery_config.go | 4 +-
config/testdata/config/service/hello_service.go | 2 +-
config/testdata/config/service/order_service.go | 2 +-
config/testdata/consumer_config.yml | 1 -
.../testdata/consumer_config_with_configcenter.yml | 1 -
.../testdata/consumer_config_withoutProtocol.yml | 1 -
config/testdata/provider_config.yml | 1 -
.../testdata/provider_config_withoutProtocol.yml | 1 -
config/uniform_router_config.go | 1 +
config_center/apollo/impl.go | 2 +
config_center/apollo/impl_test.go | 3 +-
config_center/apollo/listener.go | 1 +
config_center/file/impl.go | 1 +
config_center/mock_dynamic_config.go | 1 +
config_center/nacos/client.go | 1 +
config_center/nacos/impl.go | 2 +
config_center/parser/configuration_parser.go | 2 +
config_center/zookeeper/impl.go | 1 +
config_center/zookeeper/impl_test.go | 232 -----
config_center/zookeeper/listener_test.go | 101 --
filter/accesslog/filter_test.go | 1 +
filter/active/filter_test.go | 1 +
filter/auth/consumer_sign_filter_test.go | 1 +
filter/auth/provider_auth_filter_test.go | 1 +
filter/generic/filter.go | 139 +--
filter/generic/filter_test.go | 175 ++--
filter/generic/generalizer/example.pb.go | 260 +++++
.../generic/generalizer/generalizer.go | 41 +-
filter/generic/generalizer/gson.go | 100 ++
filter/generic/generalizer/gson_test.go | 97 ++
filter/generic/generalizer/map.go | 208 ++++
.../{filter_test.go => generalizer/map_test.go} | 170 +++-
filter/generic/generalizer/protobuf_json.go | 92 ++
.../generic/generalizer/protobuf_json_test.go | 45 +-
filter/generic/service_filter.go | 134 +--
filter/generic/service_filter_test.go | 262 +++--
filter/generic/util.go | 80 ++
filter/hystrix/filter.go | 2 +
filter/hystrix/filter_test.go | 2 +
filter/sentinel/filter.go | 1 -
filter/sentinel/filter_test.go | 1 +
filter/tps/filter_test.go | 1 +
filter/tps/limiter/method_service_test.go | 3 +-
filter/tps/strategy/mock.go | 4 +-
go.mod | 29 +-
go.sum | 190 +++-
imports/imports.go | 6 -
metadata/mapping/dynamic/service_name_mapping.go | 3 +-
.../mapping/dynamic/service_name_mapping_test.go | 3 +-
metadata/mapping/memory/service_name_mapping.go | 2 +-
metadata/report/delegate/delegate_report.go | 2 +
metadata/report/delegate/delegate_report_test.go | 1 +
metadata/report/etcd/report.go | 3 +-
metadata/report/etcd/report_test.go | 1 +
metadata/report/nacos/report.go | 2 +
metadata/report/zookeeper/report.go | 1 +
metadata/report/zookeeper/report_test.go | 203 ----
metadata/service/exporter/configurable/exporter.go | 4 +-
.../service/exporter/configurable/exporter_test.go | 3 +-
metadata/service/local/service.go | 2 +-
metadata/service/local_service.go | 4 +-
protocol/dubbo/dubbo_codec.go | 1 +
protocol/dubbo/dubbo_invoker.go | 6 +-
protocol/dubbo/dubbo_invoker_test.go | 5 +-
protocol/dubbo/dubbo_protocol_test.go | 2 -
protocol/dubbo/hessian2/hessian_dubbo.go | 1 +
protocol/dubbo/hessian2/hessian_dubbo_test.go | 1 +
protocol/dubbo/hessian2/hessian_request.go | 96 +-
protocol/dubbo/hessian2/hessian_request_test.go | 1 +
protocol/dubbo/hessian2/hessian_response.go | 7 +-
protocol/dubbo/hessian2/hessian_response_test.go | 1 +
protocol/dubbo/hessian2/java_class.go | 201 ++++
protocol/dubbo/hessian2/java_class_test.go | 132 +++
protocol/dubbo/impl/codec.go | 1 +
protocol/dubbo/impl/const.go | 2 +
protocol/dubbo/impl/hessian.go | 1 +
protocol/dubbo3/common_test.go | 2 +-
protocol/dubbo3/dubbo3_protocol.go | 53 +-
protocol/dubbo3/dubbo3_protocol_test.go | 64 ++
protocol/dubbo3/internal/client.go | 5 +-
protocol/dubbo3/internal/helloworld.pb.go | 11 +-
.../protoc-gen-dubbo3/examples/helloworld.pb.go | 323 ------
.../protoc-gen-dubbo3/examples/helloworld.proto | 40 -
protocol/dubbo3/protoc-gen-dubbo3/go.mod | 9 -
protocol/dubbo3/protoc-gen-dubbo3/go.sum | 1034 --------------------
protocol/dubbo3/protoc-gen-dubbo3/main.go | 74 --
.../protoc-gen-dubbo3/plugin/dubbo3/dubbo3.go | 372 -------
protocol/grpc/client.go | 3 +
protocol/grpc/codec.go | 1 +
protocol/grpc/grpc_invoker.go | 2 +
protocol/grpc/grpc_protocol_test.go | 2 +-
protocol/grpc/internal/README.md | 1 +
protocol/grpc/internal/helloworld/client.go | 5 +-
protocol/grpc/internal/helloworld/helloworld.pb.go | 25 +-
.../internal/multiprotos}/Makefile | 38 +-
protocol/grpc/internal/multiprotos/first.pb.go | 308 ++++++
.../grpc/internal/multiprotos/first.proto | 20 +-
protocol/grpc/internal/multiprotos/second.pb.go | 590 +++++++++++
.../grpc/internal/multiprotos/second.proto | 28 +-
protocol/grpc/internal/routeguide/client.go | 5 +-
protocol/grpc/internal/routeguide/routeguide.pb.go | 52 +-
protocol/grpc/internal/routeguide/server.go | 1 +
protocol/grpc/protoc-gen-dubbo/main.go | 74 --
protocol/grpc/protoc-gen-dubbo/plugin/dubbo/doc.go | 19 -
.../grpc/protoc-gen-dubbo/plugin/dubbo/dubbo.go | 34 +-
protocol/grpc/server.go | 2 +
protocol/invocation/rpcinvocation.go | 4 -
protocol/invoker.go | 1 +
protocol/jsonrpc/http.go | 5 +-
protocol/jsonrpc/http_test.go | 2 +
protocol/jsonrpc/jsonrpc_protocol_test.go | 2 +-
protocol/jsonrpc/server.go | 1 +
.../protocol_filter_wrapper_test.go | 10 +-
protocol/rest/client/client_impl/resty_client.go | 1 +
protocol/rest/config/reader/rest_config_reader.go | 1 +
protocol/rest/rest_invoker_test.go | 3 +-
protocol/rest/rest_protocol_test.go | 2 +-
.../rest/server/server_impl/go_restful_server.go | 1 +
registry/base_registry.go | 6 +-
registry/directory/directory.go | 2 +-
registry/directory/directory_test.go | 2 +-
registry/etcdv3/listener.go | 11 +-
registry/etcdv3/listener_test.go | 6 +-
registry/etcdv3/registry.go | 18 +-
registry/etcdv3/service_discovery.go | 2 +
.../event_publishing_service_deiscovery_test.go | 3 +-
.../metadata_service_url_params_customizer_test.go | 1 +
registry/event/service_config_exported_event.go | 2 +-
registry/file/listener.go | 4 +-
registry/file/service_discovery.go | 1 +
registry/kubernetes/listener.go | 11 +-
registry/kubernetes/registry.go | 11 +-
registry/kubernetes/registry_test.go | 1 +
registry/nacos/listener.go | 17 +-
registry/nacos/registry.go | 6 +-
registry/nacos/registry_test.go | 1 +
registry/nacos/service_discovery.go | 5 +-
registry/nacos/service_discovery_test.go | 1 +
registry/protocol/protocol.go | 1 +
registry/protocol/protocol_test.go | 3 +-
registry/service_instance.go | 4 +-
registry/service_instances_changed_listener.go | 10 +-
.../servicediscovery/service_discovery_registry.go | 2 +
.../service_discovery_registry_test.go | 3 +-
registry/zookeeper/listener.go | 11 +-
registry/zookeeper/listener_test.go | 46 -
registry/zookeeper/registry.go | 11 +-
registry/zookeeper/registry_test.go | 185 ----
registry/zookeeper/service_discovery.go | 1 -
registry/zookeeper/service_discovery_test.go | 2 +
remoting/etcdv3/client.go | 1 +
remoting/etcdv3/facade.go | 53 +-
remoting/etcdv3/listener.go | 3 +
remoting/etcdv3/listener_test.go | 2 +
remoting/getty/config.go | 27 +-
remoting/getty/dubbo_codec_for_test.go | 1 +
remoting/getty/getty_client.go | 7 +-
remoting/getty/getty_client_test.go | 4 +-
remoting/getty/getty_server.go | 3 +
remoting/getty/listener.go | 6 +-
remoting/getty/listener_test.go | 1 +
remoting/getty/pool.go | 1 +
remoting/getty/readwriter.go | 14 +-
remoting/getty/readwriter_test.go | 3 +-
remoting/kubernetes/client.go | 2 +
remoting/kubernetes/facade.go | 4 +-
remoting/kubernetes/registry_controller.go | 7 +
remoting/nacos/builder.go | 7 +-
remoting/nacos/builder_test.go | 45 +-
remoting/zookeeper/client.go | 10 +-
.../curator_discovery/service_discovery.go | 2 +
remoting/zookeeper/facade.go | 1 +
remoting/zookeeper/facade_test.go | 125 ---
remoting/zookeeper/listener.go | 5 +-
remoting/zookeeper/listener_test.go | 104 --
test/integrate/dubbo/go-client/client.go | 2 +-
test/integrate/dubbo/go-client/client.yml | 2 -
test/integrate/dubbo/go-client/user.go | 6 +-
test/integrate/dubbo/go-server/server.go | 2 +-
test/integrate/dubbo/go-server/server.yml | 2 -
test/integrate/dubbo/go-server/user.go | 5 +-
247 files changed, 3745 insertions(+), 4009 deletions(-)
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 0c5d3e0..5ce1a14 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,5 +1,5 @@
<!-- Thanks for sending a pull request!
-Read https://github.com/apache/dubbo-go/blob/master/contributing.md before commit pull request.
+Read https://github.com/apache/dubbo-go/blob/master/CONTRIBUTING.md before commit pull request.
-->
**What this PR does**:
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 6ce0286..3bd8d9c 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -9,7 +9,7 @@ updates:
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
- target-branch: "develop"
+ target-branch: "3.0"
- package-ecosystem: "github-actions"
# Workflow files stored in the
@@ -17,4 +17,4 @@ updates:
directory: "/"
schedule:
interval: "weekly"
- target-branch: "develop"
\ No newline at end of file
+ target-branch: "3.0"
diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml
index 952e58d..0ffb5c6 100644
--- a/.github/workflows/github-actions.yml
+++ b/.github/workflows/github-actions.yml
@@ -2,7 +2,7 @@ name: CI
on:
push:
- branches: [master, develop]
+ branches: [master, develop, "1.5", "3.0"]
pull_request:
branches: "*"
@@ -59,7 +59,7 @@ jobs:
# diff -u <(echo -n) <(gofmt -d -s .)
- name: Install go ci lint
- run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.27.0
+ run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.41.1
- name: Run Linter
run: golangci-lint run --timeout=10m -v
diff --git a/.gitignore b/.gitignore
index 135b147..25cf086 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@
*.so
*.dylib
*.jar
+*.log
# Test binary, build with `go test -c`
*.test
diff --git a/README.md b/README.md
index 40e3a11..6d87c6e 100644
--- a/README.md
+++ b/README.md
@@ -151,6 +151,11 @@ If you are using [apache/dubbo-go](https://github.com/apache/dubbo-go) and think
<img width="222px" src="https://gw.alicdn.com/tfs/TB1HPATMrrpK1RjSZTEXXcWAVXa-260-74.png">
</a>
</td>
+ <td align="center" valign="middle">
+ <a href="https://www.autohome.com.cn" target="_blank">
+ <img width="222px" src="https://avatars.githubusercontent.com/u/18279051?s=200&v=4">
+ </a>
+ </td>
</tr>
<tr></tr>
</tbody>
diff --git a/README_CN.md b/README_CN.md
index be43e95..a2023f4 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -150,6 +150,11 @@ go get dubbo.apache.org/dubbo-go/v3
<img width="222px" src="https://gw.alicdn.com/tfs/TB1HPATMrrpK1RjSZTEXXcWAVXa-260-74.png">
</a>
</td>
+ <td align="center" valign="middle">
+ <a href="https://www.autohome.com.cn" target="_blank">
+ <img width="222px" src="https://avatars.githubusercontent.com/u/18279051?s=200&v=4">
+ </a>
+ </td>
</tr>
<tr></tr>
</tbody>
diff --git a/cluster/cluster_impl/available_cluster_invoker_test.go b/cluster/cluster_impl/available_cluster_invoker_test.go
index 2bb1119..c97f4f2 100644
--- a/cluster/cluster_impl/available_cluster_invoker_test.go
+++ b/cluster/cluster_impl/available_cluster_invoker_test.go
@@ -26,6 +26,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/cluster/cluster_impl/base_cluster_invoker.go b/cluster/cluster_impl/base_cluster_invoker.go
index 925a039..1d1f866 100644
--- a/cluster/cluster_impl/base_cluster_invoker.go
+++ b/cluster/cluster_impl/base_cluster_invoker.go
@@ -19,6 +19,7 @@ package cluster_impl
import (
perrors "github.com/pkg/errors"
+
"go.uber.org/atomic"
)
diff --git a/cluster/cluster_impl/broadcast_cluster_invoker_test.go b/cluster/cluster_impl/broadcast_cluster_invoker_test.go
index 78abcd9..678598e 100644
--- a/cluster/cluster_impl/broadcast_cluster_invoker_test.go
+++ b/cluster/cluster_impl/broadcast_cluster_invoker_test.go
@@ -26,6 +26,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/cluster/cluster_impl/failback_cluster_test.go b/cluster/cluster_impl/failback_cluster_test.go
index 93ee3b7..f730c9d 100644
--- a/cluster/cluster_impl/failback_cluster_test.go
+++ b/cluster/cluster_impl/failback_cluster_test.go
@@ -27,7 +27,9 @@ import (
import (
"github.com/golang/mock/gomock"
+
perrors "github.com/pkg/errors"
+
"github.com/stretchr/testify/assert"
)
diff --git a/cluster/cluster_impl/failfast_cluster_test.go b/cluster/cluster_impl/failfast_cluster_test.go
index 2c964fc..74d5707 100644
--- a/cluster/cluster_impl/failfast_cluster_test.go
+++ b/cluster/cluster_impl/failfast_cluster_test.go
@@ -25,7 +25,9 @@ import (
import (
"github.com/golang/mock/gomock"
+
perrors "github.com/pkg/errors"
+
"github.com/stretchr/testify/assert"
)
diff --git a/cluster/cluster_impl/failover_cluster_test.go b/cluster/cluster_impl/failover_cluster_test.go
index 743c51a..eb29270 100644
--- a/cluster/cluster_impl/failover_cluster_test.go
+++ b/cluster/cluster_impl/failover_cluster_test.go
@@ -26,6 +26,7 @@ import (
import (
perrors "github.com/pkg/errors"
+
"github.com/stretchr/testify/assert"
)
@@ -40,10 +41,6 @@ import (
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
)
-// ///////////////////////////
-// mock invoker
-// ///////////////////////////
-
// nolint
type MockInvoker struct {
url *common.URL
diff --git a/cluster/cluster_impl/failsafe_cluster_test.go b/cluster/cluster_impl/failsafe_cluster_test.go
index 2c46acc..de67fdd 100644
--- a/cluster/cluster_impl/failsafe_cluster_test.go
+++ b/cluster/cluster_impl/failsafe_cluster_test.go
@@ -25,7 +25,9 @@ import (
import (
"github.com/golang/mock/gomock"
+
perrors "github.com/pkg/errors"
+
"github.com/stretchr/testify/assert"
)
diff --git a/cluster/cluster_impl/forking_cluster_test.go b/cluster/cluster_impl/forking_cluster_test.go
index a5bc341..bbb12bb 100644
--- a/cluster/cluster_impl/forking_cluster_test.go
+++ b/cluster/cluster_impl/forking_cluster_test.go
@@ -28,6 +28,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/cluster/cluster_impl/zone_aware_cluster_invoker_test.go b/cluster/cluster_impl/zone_aware_cluster_invoker_test.go
index 49b46a7..62433f3 100644
--- a/cluster/cluster_impl/zone_aware_cluster_invoker_test.go
+++ b/cluster/cluster_impl/zone_aware_cluster_invoker_test.go
@@ -25,6 +25,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/cluster/router/chain/chain.go b/cluster/router/chain/chain.go
index 81839f7..250e183 100644
--- a/cluster/router/chain/chain.go
+++ b/cluster/router/chain/chain.go
@@ -24,6 +24,7 @@ import (
import (
perrors "github.com/pkg/errors"
+
"go.uber.org/atomic"
)
diff --git a/cluster/router/v3router/judger/attachment_match_judger_test.go b/cluster/router/v3router/judger/attachment_match_judger_test.go
index eabc312..26a8d5e 100644
--- a/cluster/router/v3router/judger/attachment_match_judger_test.go
+++ b/cluster/router/v3router/judger/attachment_match_judger_test.go
@@ -18,7 +18,6 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
@@ -27,6 +26,7 @@ import (
)
import (
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
)
diff --git a/cluster/router/v3router/judger/bool_match_judger_test.go b/cluster/router/v3router/judger/bool_match_judger_test.go
index fb7fc20..a86651e 100644
--- a/cluster/router/v3router/judger/bool_match_judger_test.go
+++ b/cluster/router/v3router/judger/bool_match_judger_test.go
@@ -18,7 +18,6 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
@@ -26,6 +25,10 @@ import (
"github.com/stretchr/testify/assert"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
func TestBoolMatchJudger(t *testing.T) {
assert.True(t, newBoolMatchJudger(&config.BoolMatch{
Exact: true,
diff --git a/cluster/router/v3router/judger/double_match_judger_test.go b/cluster/router/v3router/judger/double_match_judger_test.go
index f15f604..a2ba18b 100644
--- a/cluster/router/v3router/judger/double_match_judger_test.go
+++ b/cluster/router/v3router/judger/double_match_judger_test.go
@@ -18,7 +18,6 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
@@ -26,6 +25,10 @@ import (
"github.com/stretchr/testify/assert"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
func TestDoubleMatchJudger(t *testing.T) {
assert.True(t, newDoubleMatchJudger(&config.DoubleMatch{
Exact: 3.14159,
diff --git a/cluster/router/v3router/judger/double_range_match_judger_test.go b/cluster/router/v3router/judger/double_range_match_judger_test.go
index e8c6b6f..9487e40 100644
--- a/cluster/router/v3router/judger/double_range_match_judger_test.go
+++ b/cluster/router/v3router/judger/double_range_match_judger_test.go
@@ -18,7 +18,6 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
@@ -26,6 +25,10 @@ import (
"github.com/stretchr/testify/assert"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
func TestDoubleRangeMatchJudger(t *testing.T) {
assert.True(t, newDoubleRangeMatchJudger(&config.DoubleRangeMatch{
Start: 1.0,
diff --git a/cluster/router/v3router/judger/list_double_match_judger_test.go b/cluster/router/v3router/judger/list_double_match_judger_test.go
index 696be6b..bc84c78 100644
--- a/cluster/router/v3router/judger/list_double_match_judger_test.go
+++ b/cluster/router/v3router/judger/list_double_match_judger_test.go
@@ -18,7 +18,6 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
@@ -26,6 +25,10 @@ import (
"github.com/stretchr/testify/assert"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
func TestListDoubleMatchJudger_Judge(t *testing.T) {
assert.True(t, newListDoubleMatchJudger(&config.ListDoubleMatch{
Oneof: []*config.DoubleMatch{
diff --git a/cluster/router/v3router/judger/list_string_match_judger_test.go b/cluster/router/v3router/judger/list_string_match_judger_test.go
index 169ee57..1816b95 100644
--- a/cluster/router/v3router/judger/list_string_match_judger_test.go
+++ b/cluster/router/v3router/judger/list_string_match_judger_test.go
@@ -18,7 +18,6 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
@@ -26,6 +25,10 @@ import (
"github.com/stretchr/testify/assert"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
func TestListStringMatchJudger(t *testing.T) {
assert.True(t, newListStringMatchJudger(&config.ListStringMatch{
Oneof: []*config.StringMatch{{Exact: "abd"}},
diff --git a/cluster/router/v3router/judger/method_match_judger_test.go b/cluster/router/v3router/judger/method_match_judger_test.go
index d0f5023..71e90aa 100644
--- a/cluster/router/v3router/judger/method_match_judger_test.go
+++ b/cluster/router/v3router/judger/method_match_judger_test.go
@@ -18,7 +18,6 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"reflect"
"testing"
)
@@ -28,6 +27,7 @@ import (
)
import (
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
)
diff --git a/cluster/router/v3router/judger/string_match_judger.go b/cluster/router/v3router/judger/string_match_judger.go
index a502cc3..fae5278 100644
--- a/cluster/router/v3router/judger/string_match_judger.go
+++ b/cluster/router/v3router/judger/string_match_judger.go
@@ -18,11 +18,14 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"regexp"
"strings"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
// nolint
type StringMatchJudger struct {
config.StringMatch
diff --git a/cluster/router/v3router/judger/string_match_judger_test.go b/cluster/router/v3router/judger/string_match_judger_test.go
index c9da665..968eda9 100644
--- a/cluster/router/v3router/judger/string_match_judger_test.go
+++ b/cluster/router/v3router/judger/string_match_judger_test.go
@@ -18,7 +18,6 @@
package judger
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
@@ -26,6 +25,10 @@ import (
"github.com/stretchr/testify/assert"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
func TestNewStringMatchJudger(t *testing.T) {
assert.True(t, NewStringMatchJudger(&config.StringMatch{
Exact: "abc",
diff --git a/cluster/router/v3router/k8s_api/listener_handler_impl.go b/cluster/router/v3router/k8s_api/listener_handler_impl.go
index e6f660c..38f5748 100644
--- a/cluster/router/v3router/k8s_api/listener_handler_impl.go
+++ b/cluster/router/v3router/k8s_api/listener_handler_impl.go
@@ -18,16 +18,18 @@
package k8s_api
import (
- "dubbo.apache.org/dubbo-go/v3/config"
metav "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
+
"k8s.io/client-go/kubernetes/scheme"
+
"k8s.io/client-go/rest"
)
import (
"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router/k8s_crd"
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/config_center"
"dubbo.apache.org/dubbo-go/v3/remoting"
)
diff --git a/cluster/router/v3router/k8s_crd/client.go b/cluster/router/v3router/k8s_crd/client.go
index bfb7d1d..2dfe201 100644
--- a/cluster/router/v3router/k8s_crd/client.go
+++ b/cluster/router/v3router/k8s_crd/client.go
@@ -29,8 +29,11 @@ import (
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/watch"
+
"k8s.io/client-go/kubernetes/scheme"
+
"k8s.io/client-go/rest"
+
"k8s.io/client-go/tools/cache"
)
diff --git a/cluster/router/v3router/k8s_crd/listener_handler.go b/cluster/router/v3router/k8s_crd/listener_handler.go
index 2a52291..fa4272e 100644
--- a/cluster/router/v3router/k8s_crd/listener_handler.go
+++ b/cluster/router/v3router/k8s_crd/listener_handler.go
@@ -21,6 +21,7 @@ import (
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
+
"k8s.io/client-go/rest"
)
diff --git a/cluster/router/v3router/router_chain.go b/cluster/router/v3router/router_chain.go
index b677d8f..ce82694 100644
--- a/cluster/router/v3router/router_chain.go
+++ b/cluster/router/v3router/router_chain.go
@@ -18,7 +18,6 @@
package v3router
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"encoding/json"
"io"
"strings"
@@ -33,6 +32,7 @@ import (
"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router/k8s_api"
"dubbo.apache.org/dubbo-go/v3/common"
"dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/config_center"
"dubbo.apache.org/dubbo-go/v3/protocol"
"dubbo.apache.org/dubbo-go/v3/remoting"
diff --git a/cluster/router/v3router/router_chain_test.go b/cluster/router/v3router/router_chain_test.go
index e1af532..ac41769 100644
--- a/cluster/router/v3router/router_chain_test.go
+++ b/cluster/router/v3router/router_chain_test.go
@@ -18,27 +18,22 @@
package v3router
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"fmt"
"testing"
)
import (
+ "github.com/stretchr/testify/assert"
+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
import (
"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router/k8s_api"
- "dubbo.apache.org/dubbo-go/v3/config_center"
-)
-
-import (
- "github.com/stretchr/testify/assert"
-)
-
-import (
"dubbo.apache.org/dubbo-go/v3/common"
"dubbo.apache.org/dubbo-go/v3/common/yaml"
+ "dubbo.apache.org/dubbo-go/v3/config"
+ "dubbo.apache.org/dubbo-go/v3/config_center"
"dubbo.apache.org/dubbo-go/v3/protocol"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
)
diff --git a/cluster/router/v3router/uniform_rule.go b/cluster/router/v3router/uniform_rule.go
index ef4b16c..3b552b8 100644
--- a/cluster/router/v3router/uniform_rule.go
+++ b/cluster/router/v3router/uniform_rule.go
@@ -18,7 +18,6 @@
package v3router
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"math/rand"
"time"
)
@@ -31,6 +30,7 @@ import (
"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router/judger"
"dubbo.apache.org/dubbo-go/v3/common"
"dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/protocol"
)
diff --git a/common/constant/default.go b/common/constant/default.go
index 6e2bf84..e7de3e6 100644
--- a/common/constant/default.go
+++ b/common/constant/default.go
@@ -95,11 +95,3 @@ const (
DEFAULT_LOG_CONF_FILE_PATH = "../profiles/dev/log.yml"
DEFAULT_ROUTER_CONF_FILE_PATH = "../profiles/dev/router.yml"
)
-
-// default config value
-const (
- DEFAULT_REGISTRY_ZK_ID = "demoZK"
- DEFAULT_REGISTRY_ZK_PROTOCOL = ZOOKEEPER_KEY
- DEFAULT_REGISTRY_ZK_TIMEOUT = "3s"
- DEFAULT_REGISTRY_ZK_ADDRESS = "127.0.0.1:2181"
-)
diff --git a/common/constant/key.go b/common/constant/key.go
index de13fa4..5a5f9d6 100644
--- a/common/constant/key.go
+++ b/common/constant/key.go
@@ -313,3 +313,12 @@ const (
// SERVICE_DISCOVERY_KEY indicate which service discovery instance will be used
SERVICE_DISCOVERY_KEY = "service_discovery"
)
+
+// Generic Filter
+
+const (
+ GenericSerializationDefault = "true"
+ // disable "protobuf-json" temporarily
+ //GenericSerializationProtobuf = "protobuf-json"
+ GenericSerializationGson = "gson"
+)
diff --git a/common/constant/serializtion.go b/common/constant/serialization.go
similarity index 100%
rename from common/constant/serializtion.go
rename to common/constant/serialization.go
diff --git a/common/host_util.go b/common/host_util.go
index 9861c92..1f2c939 100644
--- a/common/host_util.go
+++ b/common/host_util.go
@@ -17,7 +17,9 @@
package common
-import gxnet "github.com/dubbogo/gost/net"
+import (
+ gxnet "github.com/dubbogo/gost/net"
+)
var localIp string
diff --git a/common/logger/file_log.yml b/common/logger/file_log.yml
new file mode 100644
index 0000000..75cc32c
--- /dev/null
+++ b/common/logger/file_log.yml
@@ -0,0 +1,36 @@
+lumberjackConfig:
+ filename: "logs.log"
+ maxSize: 1
+ maxAge: 3
+ maxBackups: 5
+ localTime: true
+ compress: false
+
+zapConfig:
+ level: "debug"
+ development: false
+ disableCaller: false
+ disableStacktrace: false
+ sampling:
+ encoding: "console"
+
+ # encoder
+ encoderConfig:
+ messageKey: "message"
+ levelKey: "level"
+ timeKey: "time"
+ nameKey: "logger"
+ callerKey: "caller"
+ stacktraceKey: "stacktrace"
+ lineEnding: ""
+ levelEncoder: "capitalColor"
+ timeEncoder: "iso8601"
+ durationEncoder: "seconds"
+ callerEncoder: "short"
+ nameEncoder: ""
+
+ outputPaths:
+ - "stderr"
+ errorOutputPaths:
+ - "stderr"
+ initialFields:
diff --git a/common/logger/logger.go b/common/logger/logger.go
index 0aa7410..8f67836 100644
--- a/common/logger/logger.go
+++ b/common/logger/logger.go
@@ -26,9 +26,14 @@ import (
import (
"github.com/apache/dubbo-getty"
+
+ "github.com/natefinch/lumberjack"
+
perrors "github.com/pkg/errors"
+
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
+
"gopkg.in/yaml.v2"
)
@@ -44,6 +49,11 @@ type DubboLogger struct {
dynamicLevel zap.AtomicLevel
}
+type Config struct {
+ LumberjackConfig *lumberjack.Logger `yaml:"lumberjackConfig"`
+ ZapConfig *zap.Config `yaml:"zapConfig"`
+}
+
// Logger is the interface for Logger types
type Logger interface {
Info(args ...interface{})
@@ -95,7 +105,7 @@ func InitLog(logConfFile string) error {
return perrors.Errorf("ioutil.ReadFile(file:%s) = error:%v", logConfFile, err)
}
- conf := &zap.Config{}
+ conf := &Config{}
err = yaml.Unmarshal(confFileStream, conf)
if err != nil {
InitLogger(nil)
@@ -108,9 +118,12 @@ func InitLog(logConfFile string) error {
}
// InitLogger use for init logger by @conf
-func InitLogger(conf *zap.Config) {
- var zapLoggerConfig zap.Config
- if conf == nil {
+func InitLogger(conf *Config) {
+ var (
+ zapLogger *zap.Logger
+ config = &Config{}
+ )
+ if conf == nil || conf.ZapConfig == nil {
zapLoggerEncoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
@@ -123,7 +136,7 @@ func InitLogger(conf *zap.Config) {
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
- zapLoggerConfig = zap.Config{
+ config.ZapConfig = &zap.Config{
Level: zap.NewAtomicLevelAt(zap.DebugLevel),
Development: false,
Encoding: "console",
@@ -132,10 +145,17 @@ func InitLogger(conf *zap.Config) {
ErrorOutputPaths: []string{"stderr"},
}
} else {
- zapLoggerConfig = *conf
+ config.ZapConfig = conf.ZapConfig
}
- zapLogger, _ := zapLoggerConfig.Build(zap.AddCallerSkip(1))
- logger = &DubboLogger{Logger: zapLogger.Sugar(), dynamicLevel: zapLoggerConfig.Level}
+
+ if conf == nil || conf.LumberjackConfig == nil {
+ zapLogger, _ = config.ZapConfig.Build(zap.AddCallerSkip(1))
+ } else {
+ config.LumberjackConfig = conf.LumberjackConfig
+ zapLogger = initZapLoggerWithSyncer(config)
+ }
+
+ logger = &DubboLogger{Logger: zapLogger.Sugar(), dynamicLevel: config.ZapConfig.Level}
// set getty log
getty.SetLogger(logger)
@@ -174,3 +194,29 @@ func (dl *DubboLogger) SetLoggerLevel(level string) {
dl.dynamicLevel.SetLevel(*l)
}
}
+
+// initZapLoggerWithSyncer init zap Logger with syncer
+func initZapLoggerWithSyncer(conf *Config) *zap.Logger {
+ core := zapcore.NewCore(
+ conf.getEncoder(),
+ conf.getLogWriter(),
+ zap.NewAtomicLevelAt(zap.DebugLevel),
+ )
+
+ return zap.New(core, zap.AddCallerSkip(1))
+}
+
+// getEncoder get encoder by config, zapcore support json and console encoder
+func (c *Config) getEncoder() zapcore.Encoder {
+ if c.ZapConfig.Encoding == "json" {
+ return zapcore.NewJSONEncoder(c.ZapConfig.EncoderConfig)
+ } else if c.ZapConfig.Encoding == "console" {
+ return zapcore.NewConsoleEncoder(c.ZapConfig.EncoderConfig)
+ }
+ return nil
+}
+
+// getLogWriter get Lumberjack writer by LumberjackConfig
+func (c *Config) getLogWriter() zapcore.WriteSyncer {
+ return zapcore.AddSync(c.LumberjackConfig)
+}
diff --git a/common/logger/logger_test.go b/common/logger/logger_test.go
index 6081f71..12d1ab8 100644
--- a/common/logger/logger_test.go
+++ b/common/logger/logger_test.go
@@ -81,3 +81,57 @@ func TestSetLevel(t *testing.T) {
Debug("debug")
Info("info")
}
+
+func TestInitLogWidthFile(t *testing.T) {
+ var (
+ err error
+ path string
+ )
+
+ err = InitLog("")
+ assert.EqualError(t, err, "log configure file name is nil")
+
+ path, err = filepath.Abs("./file_log.xml")
+ assert.NoError(t, err)
+ err = InitLog(path)
+ assert.EqualError(t, err, "log configure file name{"+path+"} suffix must be .yml")
+
+ path, err = filepath.Abs("./logger.yml")
+ assert.NoError(t, err)
+ err = InitLog(path)
+ var errMsg string
+ if runtime.GOOS == "windows" {
+ errMsg = fmt.Sprintf("open %s: The system cannot find the file specified.", path)
+ } else {
+ errMsg = fmt.Sprintf("open %s: no such file or directory", path)
+ }
+ assert.EqualError(t, err, fmt.Sprintf("ioutil.ReadFile(file:%s) = error:%s", path, errMsg))
+
+ err = InitLog("./file_log.yml")
+ assert.NoError(t, err)
+
+ Debug("debug")
+ Info("info")
+ Warn("warn")
+ Error("error")
+ Debugf("%s", "debug")
+ Infof("%s", "info")
+ Warnf("%s", "warn")
+ Errorf("%s", "error")
+}
+
+func TestSetLevelWidthFile(t *testing.T) {
+ err := InitLog("./file_log.yml")
+ assert.NoError(t, err)
+ Debug("debug")
+ Info("info")
+
+ assert.True(t, SetLoggerLevel("info"))
+ Debug("debug")
+ Info("info")
+
+ SetLogger(GetLogger().(*DubboLogger).Logger)
+ assert.False(t, SetLoggerLevel("debug"))
+ Debug("debug")
+ Info("info")
+}
diff --git a/common/proxy/proxy.go b/common/proxy/proxy.go
index 900ea18..819fe28 100644
--- a/common/proxy/proxy.go
+++ b/common/proxy/proxy.go
@@ -25,6 +25,7 @@ import (
import (
"github.com/apache/dubbo-go-hessian2/java_exception"
+
perrors "github.com/pkg/errors"
)
@@ -127,24 +128,25 @@ func DefaultProxyImplementFunc(p *Proxy, v common.RPCService) {
makeDubboCallProxy := func(methodName string, outs []reflect.Type) func(in []reflect.Value) []reflect.Value {
return func(in []reflect.Value) []reflect.Value {
var (
- err error
- inv *invocation_impl.RPCInvocation
- inIArr []interface{}
- inVArr []reflect.Value
- reply reflect.Value
+ err error
+ inv *invocation_impl.RPCInvocation
+ inIArr []interface{}
+ inVArr []reflect.Value
+ reply reflect.Value
+ replyEmptyFlag bool
)
if methodName == "Echo" {
methodName = "$echo"
}
- if len(outs) == 2 {
+ if len(outs) == 2 { // return (reply, error)
if outs[0].Kind() == reflect.Ptr {
reply = reflect.New(outs[0].Elem())
} else {
reply = reflect.New(outs[0])
}
- } else {
- reply = valueOf
+ } else { // only return error
+ replyEmptyFlag = true
}
start := 0
@@ -158,10 +160,6 @@ func DefaultProxyImplementFunc(p *Proxy, v common.RPCService) {
}
start += 1
}
- if len(outs) == 1 && in[end-1].Type().Kind() == reflect.Ptr {
- end -= 1
- reply = in[len(in)-1]
- }
}
if end-start <= 0 {
@@ -182,8 +180,11 @@ func DefaultProxyImplementFunc(p *Proxy, v common.RPCService) {
}
inv = invocation_impl.NewRPCInvocationWithOptions(invocation_impl.WithMethodName(methodName),
- invocation_impl.WithArguments(inIArr), invocation_impl.WithReply(reply.Interface()),
+ invocation_impl.WithArguments(inIArr),
invocation_impl.WithCallBack(p.callback), invocation_impl.WithParameterValues(inVArr))
+ if !replyEmptyFlag {
+ inv.SetReply(reply.Interface())
+ }
for k, value := range p.attachments {
inv.SetAttachments(k, value)
diff --git a/common/proxy/proxy_factory/default.go b/common/proxy/proxy_factory/default.go
index 2356b9d..f76bc38 100644
--- a/common/proxy/proxy_factory/default.go
+++ b/common/proxy/proxy_factory/default.go
@@ -136,10 +136,11 @@ func (pi *ProxyInvoker) Invoke(ctx context.Context, invocation protocol.Invocati
// prepare replyv
var replyv reflect.Value
- if method.ReplyType() == nil && len(method.ArgsType()) > 0 {
- replyv = reflect.New(method.ArgsType()[len(method.ArgsType())-1].Elem())
- in = append(in, replyv)
- }
+ //if method.ReplyType() == nil && len(method.ArgsType()) > 0 {
+ //
+ // replyv = reflect.New(method.ArgsType()[len(method.ArgsType())-1].Elem())
+ // in = append(in, replyv)
+ //}
returnValues := method.Method().Func.Call(in)
diff --git a/common/proxy/proxy_test.go b/common/proxy/proxy_test.go
index 2ff788d..e9bacd6 100644
--- a/common/proxy/proxy_test.go
+++ b/common/proxy/proxy_test.go
@@ -26,6 +26,7 @@ import (
import (
perrors "github.com/pkg/errors"
+
"github.com/stretchr/testify/assert"
)
diff --git a/common/rpc_service.go b/common/rpc_service.go
index 1bca7d9..1a7cbc8 100644
--- a/common/rpc_service.go
+++ b/common/rpc_service.go
@@ -34,15 +34,43 @@ import (
"dubbo.apache.org/dubbo-go/v3/common/logger"
)
-// RPCService
+// RPCService the type alias of interface{}
+type RPCService = interface{}
+
+// ReferencedRPCService
// rpc service interface
-type RPCService interface {
- //// Name rpc service id
- //Name() string
- // Reference rpc service reference
+type ReferencedRPCService interface {
+ // Reference:
+ // rpc service id or reference id
Reference() string
}
+// GetReference return the reference id of the service.
+// If the service implemented the ReferencedRPCService interface,
+// it will call the Reference method. If not, it will
+// return the struct name as the reference id.
+func GetReference(service RPCService) string {
+ if s, ok := service.(ReferencedRPCService); ok {
+ return s.Reference()
+ }
+
+ ref := ""
+ sType := reflect.TypeOf(service)
+ kind := sType.Kind()
+ switch kind {
+ case reflect.Struct:
+ ref = sType.Name()
+ case reflect.Ptr:
+ sName := sType.Elem().Name()
+ if sName != "" {
+ ref = sName
+ } else {
+ ref = sType.Elem().Field(0).Name
+ }
+ }
+ return ref
+}
+
// AsyncCallbackService callback interface for async
type AsyncCallbackService interface {
// Callback: callback
@@ -367,7 +395,7 @@ func suiteMethod(method reflect.Method) *MethodType {
// The latest return type of the method must be error.
if returnType := mtype.Out(outNum - 1); returnType != typeOfError {
- logger.Warnf("the latest return type %s of method %q is not error", returnType, mname)
+ logger.Debugf(`"%s" method will not be exported because its last return type %v doesn't have error`, mname, returnType)
return nil
}
diff --git a/common/rpc_service_test.go b/common/rpc_service_test.go
index 8dc984f..6143e47 100644
--- a/common/rpc_service_test.go
+++ b/common/rpc_service_test.go
@@ -218,3 +218,36 @@ func TestSuiteMethod(t *testing.T) {
methodType = suiteMethod(method)
assert.Nil(t, methodType)
}
+
+type ServiceWithoutRef struct{}
+
+func TestGetReference(t *testing.T) {
+ s0 := &TestService{}
+ ref0 := GetReference(s0)
+ assert.Equal(t, referenceTestPath, ref0)
+
+ //s1 := TestService{}
+ //ref1 := GetReference(s1)
+ //assert.Equal(t, referenceTestPath, ref1)
+
+ s2 := &struct {
+ TestService
+ }{}
+ ref2 := GetReference(s2)
+ assert.Equal(t, referenceTestPath, ref2)
+
+ expectedReference := "ServiceWithoutRef"
+ s3 := &ServiceWithoutRef{}
+ ref3 := GetReference(s3)
+ assert.Equal(t, expectedReference, ref3)
+
+ s4 := ServiceWithoutRef{}
+ ref4 := GetReference(s4)
+ assert.Equal(t, expectedReference, ref4)
+
+ s5 := &struct {
+ ServiceWithoutRef
+ }{}
+ ref5 := GetReference(s5)
+ assert.Equal(t, expectedReference, ref5)
+}
diff --git a/common/url.go b/common/url.go
index 7722762..26c4ebd 100644
--- a/common/url.go
+++ b/common/url.go
@@ -32,22 +32,21 @@ import (
import (
cm "github.com/Workiva/go-datastructures/common"
+
gxset "github.com/dubbogo/gost/container/set"
+
"github.com/jinzhu/copier"
+
perrors "github.com/pkg/errors"
+
"github.com/satori/go.uuid"
)
import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
- "dubbo.apache.org/dubbo-go/v3/common/logger"
)
-// ///////////////////////////////
-// dubbo role type
-// ///////////////////////////////
-
-// role constant
+// dubbo role type constant
const (
// CONSUMER is consumer role
CONSUMER = iota
@@ -211,11 +210,7 @@ func WithToken(token string) Option {
if len(token) > 0 {
value := token
if strings.ToLower(token) == "true" || strings.ToLower(token) == "default" {
- u, err := uuid.NewV4()
- if err != nil {
- logger.Errorf("could not generator UUID: %v", err)
- return
- }
+ u := uuid.NewV4()
value = u.String()
}
url.SetParam(constant.TOKEN_KEY, value)
@@ -871,10 +866,9 @@ func GetCompareURLEqualFunc() CompareURLEqualFunc {
return compareURLEqualFunc
}
-//GetParamDuration get duration if err return 3s
+//GetParamDuration get duration if param is invalid or missing will return 3s
func (c *URL) GetParamDuration(s string, d string) time.Duration {
- timeStr := c.GetParam(s, d)
- if t, err := time.ParseDuration(timeStr); err == nil {
+ if t, err := time.ParseDuration(c.GetParam(s, d)); err == nil {
return t
}
return 3 * time.Second
diff --git a/common/yaml/yaml.go b/common/yaml/yaml.go
index 7f61f72..1284395 100644
--- a/common/yaml/yaml.go
+++ b/common/yaml/yaml.go
@@ -24,6 +24,7 @@ import (
import (
perrors "github.com/pkg/errors"
+
"gopkg.in/yaml.v2"
)
diff --git a/config/application_config.go b/config/application_config.go
index 0f41e12..b9334ad 100644
--- a/config/application_config.go
+++ b/config/application_config.go
@@ -18,10 +18,13 @@
package config
import (
- "dubbo.apache.org/dubbo-go/v3/common/constant"
"github.com/creasty/defaults"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+)
+
// ApplicationConfig is a configuration for current applicationConfig, whether the applicationConfig is a provider or a consumer
type ApplicationConfig struct {
Organization string `default:"dubbo-go" yaml:"organization" json:"organization,omitempty" property:"organization"`
diff --git a/config/config_center_config.go b/config/config_center_config.go
index 6a03345..f83d32b 100644
--- a/config/config_center_config.go
+++ b/config/config_center_config.go
@@ -18,15 +18,17 @@
package config
import (
- "github.com/knadh/koanf"
- "github.com/knadh/koanf/parsers/yaml"
- "github.com/knadh/koanf/providers/rawbytes"
"net/url"
"strings"
)
import (
"github.com/creasty/defaults"
+
+ "github.com/knadh/koanf"
+ "github.com/knadh/koanf/parsers/yaml"
+ "github.com/knadh/koanf/providers/rawbytes"
+
"github.com/pkg/errors"
)
diff --git a/config/config_loader.go b/config/config_loader.go
index c9cd5b5..57b9d34 100644
--- a/config/config_loader.go
+++ b/config/config_loader.go
@@ -18,27 +18,30 @@
package config
import (
- "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/registry"
"errors"
"fmt"
- hessian "github.com/apache/dubbo-go-hessian2"
- perrors "github.com/pkg/errors"
"reflect"
"strconv"
)
+
import (
+ hessian "github.com/apache/dubbo-go-hessian2"
+
"github.com/knadh/koanf"
"github.com/knadh/koanf/parsers/json"
"github.com/knadh/koanf/parsers/toml"
"github.com/knadh/koanf/parsers/yaml"
"github.com/knadh/koanf/providers/file"
+
+ perrors "github.com/pkg/errors"
)
import (
+ "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/observer/dispatcher"
+ "dubbo.apache.org/dubbo-go/v3/registry"
)
var (
@@ -75,27 +78,11 @@ func check() error {
return nil
}
-//parseCommandLine parse command line
-//func parseCommandLine() {
-// flag.String("delim", ".", "config file delim")
-// flag.String("name", "conf_application.yaml", "config file name")
-// flag.String("genre", "yaml", "config file type")
-// flag.String("path", "./conf", "config file path default")
-//
-// pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
-// pflag.Parse()
-//
-// if err := viper.BindPFlags(pflag.CommandLine); err != nil {
-// panic(err)
-// }
-//}
-
func getKoanf(conf *loaderConf) *koanf.Koanf {
var (
k *koanf.Koanf
err error
)
-
k = koanf.New(conf.delim)
switch conf.genre {
@@ -460,7 +447,8 @@ func GetRPCService(name string) common.RPCService {
// RPCService create rpc service for consumer
func RPCService(service common.RPCService) {
- rootConfig.Consumer.References[service.Reference()].Implement(service)
+ ref := common.GetReference(service)
+ rootConfig.Consumer.References[ref].Implement(service)
}
// GetMetricConfig find the MetricConfig
diff --git a/config/config_loader_options.go b/config/config_loader_options.go
index 3688a87..e735b64 100644
--- a/config/config_loader_options.go
+++ b/config/config_loader_options.go
@@ -18,7 +18,6 @@
package config
import (
- "dubbo.apache.org/dubbo-go/v3/common/constant"
"fmt"
"os"
"path/filepath"
@@ -26,10 +25,15 @@ import (
"sort"
"strings"
)
+
import (
"github.com/pkg/errors"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+)
+
type loaderConf struct {
// loaderConf file type default yaml
genre string
diff --git a/config/config_loader_options_test.go b/config/config_loader_options_test.go
index 0004898..deb2f09 100644
--- a/config/config_loader_options_test.go
+++ b/config/config_loader_options_test.go
@@ -21,7 +21,9 @@ import (
"testing"
)
-import "github.com/stretchr/testify/assert"
+import (
+ "github.com/stretchr/testify/assert"
+)
func TestCheckGenre(t *testing.T) {
diff --git a/config/config_loader_test.go b/config/config_loader_test.go
index 51200e4..a96f60d 100644
--- a/config/config_loader_test.go
+++ b/config/config_loader_test.go
@@ -18,13 +18,17 @@
package config
import (
- "dubbo.apache.org/dubbo-go/v3/common/constant"
"testing"
)
-import "github.com/stretchr/testify/assert"
+import (
+ "github.com/stretchr/testify/assert"
+)
-import "dubbo.apache.org/dubbo-go/v3/config/testdata/config/service"
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/config/testdata/config/service"
+)
func init() {
SetProviderService(new(service.OrderService))
@@ -81,7 +85,6 @@ func TestLoadConfigCenter(t *testing.T) {
}
func TestGetRegistriesConfig(t *testing.T) {
-
t.Run("registry", func(t *testing.T) {
Load(WithPath("./testdata/config/registry/application.yaml"))
diff --git a/config/config_utils.go b/config/config_utils.go
index 868567f..13ae4d7 100644
--- a/config/config_utils.go
+++ b/config/config_utils.go
@@ -19,13 +19,17 @@ package config
import (
"fmt"
- "github.com/go-playground/validator/v10"
- "github.com/pkg/errors"
"regexp"
"strings"
)
import (
+ "github.com/go-playground/validator/v10"
+
+ "github.com/pkg/errors"
+)
+
+import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
)
diff --git a/config/consumer_config.go b/config/consumer_config.go
index e2ddfd8..38cd1c5 100644
--- a/config/consumer_config.go
+++ b/config/consumer_config.go
@@ -18,8 +18,6 @@
package config
import (
- "dubbo.apache.org/dubbo-go/v3/common/logger"
- "dubbo.apache.org/dubbo-go/v3/config/generic"
"fmt"
"time"
)
@@ -30,6 +28,8 @@ import (
import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/config/generic"
)
const (
@@ -84,7 +84,7 @@ func (cc *ConsumerConfig) Init(rc *RootConfig) error {
func (cc *ConsumerConfig) Load() {
for key, ref := range cc.References {
- if ref.Generic {
+ if ref.Generic != "" {
genericService := generic.NewGenericService(key)
SetConsumerService(genericService)
}
diff --git a/config/generic/generic_service.go b/config/generic/generic_service.go
index 34f2f7d..677f97e 100644
--- a/config/generic/generic_service.go
+++ b/config/generic/generic_service.go
@@ -17,7 +17,9 @@
package generic
-import "context"
+import (
+ "context"
+)
// GenericService uses for generic invoke for service call
type GenericService struct {
diff --git a/config/interfaces/config_reader.go b/config/interfaces/config_reader.go
index b23f989..b82d873 100644
--- a/config/interfaces/config_reader.go
+++ b/config/interfaces/config_reader.go
@@ -17,7 +17,9 @@
package interfaces
-import "bytes"
+import (
+ "bytes"
+)
// ConfigReader is used to read config from consumer or provider
type ConfigReader interface {
diff --git a/config/metadata_report_config.go b/config/metadata_report_config.go
index 1184f91..70ec753 100644
--- a/config/metadata_report_config.go
+++ b/config/metadata_report_config.go
@@ -18,14 +18,17 @@
package config
import (
- "dubbo.apache.org/dubbo-go/v3/common/constant"
- "dubbo.apache.org/dubbo-go/v3/common/extension"
"fmt"
+)
+
+import (
perrors "github.com/pkg/errors"
)
import (
"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/config/instance"
)
diff --git a/config/method_config.go b/config/method_config.go
index 990ff69..113f928 100644
--- a/config/method_config.go
+++ b/config/method_config.go
@@ -18,10 +18,13 @@
package config
import (
- "dubbo.apache.org/dubbo-go/v3/common/constant"
"github.com/creasty/defaults"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+)
+
// MethodConfig defines method config
type MethodConfig struct {
InterfaceId string
diff --git a/config/provider_config.go b/config/provider_config.go
index c5bc787..4a7adef 100644
--- a/config/provider_config.go
+++ b/config/provider_config.go
@@ -18,13 +18,16 @@
package config
import (
- "dubbo.apache.org/dubbo-go/v3/common/logger"
"fmt"
+)
+
+import (
"github.com/creasty/defaults"
)
import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
)
// ProviderConfig is the default configuration of service provider
diff --git a/config/reference_config.go b/config/reference_config.go
index ec6e945..2c42e4b 100644
--- a/config/reference_config.go
+++ b/config/reference_config.go
@@ -18,6 +18,19 @@
package config
import (
+ "fmt"
+ "net/url"
+ "strconv"
+ "time"
+)
+
+import (
+ "github.com/creasty/defaults"
+
+ gxstrings "github.com/dubbogo/gost/strings"
+)
+
+import (
"dubbo.apache.org/dubbo-go/v3/cluster/directory"
"dubbo.apache.org/dubbo-go/v3/common"
"dubbo.apache.org/dubbo-go/v3/common/constant"
@@ -26,12 +39,6 @@ import (
"dubbo.apache.org/dubbo-go/v3/config/generic"
"dubbo.apache.org/dubbo-go/v3/protocol"
"dubbo.apache.org/dubbo-go/v3/protocol/protocolwrapper"
- "fmt"
- "github.com/creasty/defaults"
- gxstrings "github.com/dubbogo/gost/strings"
- "net/url"
- "strconv"
- "time"
)
// ReferenceConfig is the configuration of service consumer
@@ -56,7 +63,7 @@ type ReferenceConfig struct {
Params map[string]string `yaml:"params" json:"params,omitempty" property:"params"`
invoker protocol.Invoker
urls []*common.URL
- Generic bool `yaml:"generic" json:"generic,omitempty" property:"generic"`
+ Generic string `yaml:"generic" json:"generic,omitempty" property:"generic"`
Sticky bool `yaml:"sticky" json:"sticky,omitempty" property:"sticky"`
RequestTimeout string `yaml:"timeout" json:"timeout,omitempty" property:"timeout"`
ForceTag bool `yaml:"force.tag" json:"force.tag,omitempty" property:"force.tag"`
@@ -235,7 +242,7 @@ func (rc *ReferenceConfig) getURLMap() url.Values {
urlMap.Set(constant.RETRIES_KEY, rc.Retries)
urlMap.Set(constant.GROUP_KEY, rc.Group)
urlMap.Set(constant.VERSION_KEY, rc.Version)
- urlMap.Set(constant.GENERIC_KEY, strconv.FormatBool(rc.Generic))
+ urlMap.Set(constant.GENERIC_KEY, rc.Generic)
urlMap.Set(constant.ROLE_KEY, strconv.Itoa(common.CONSUMER))
urlMap.Set(constant.PROVIDED_BY, rc.ProvidedBy)
urlMap.Set(constant.SERIALIZATION_KEY, rc.Serialization)
@@ -261,7 +268,7 @@ func (rc *ReferenceConfig) getURLMap() url.Values {
// filter
defaultReferenceFilter := constant.DEFAULT_REFERENCE_FILTERS
- if rc.Generic {
+ if rc.Generic != "" {
defaultReferenceFilter = constant.GENERIC_REFERENCE_FILTERS + "," + defaultReferenceFilter
}
//urlMap.Set(constant.REFERENCE_FILTER_KEY, config.mergeValue(config.consumerConfig.Filter, c.Filter, defaultReferenceFilter))
diff --git a/config/registry_config.go b/config/registry_config.go
index 4421fc7..fe33b17 100644
--- a/config/registry_config.go
+++ b/config/registry_config.go
@@ -18,7 +18,6 @@
package config
import (
- "dubbo.apache.org/dubbo-go/v3/registry"
"net/url"
"strconv"
"strings"
@@ -26,6 +25,7 @@ import (
import (
"github.com/creasty/defaults"
+
"github.com/pkg/errors"
)
@@ -34,6 +34,7 @@ import (
"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/registry"
)
// RegistryConfig is the configuration of the registry center
diff --git a/config/remote_config.go b/config/remote_config.go
index 292a89e..820f744 100644
--- a/config/remote_config.go
+++ b/config/remote_config.go
@@ -29,7 +29,6 @@ import (
import (
"dubbo.apache.org/dubbo-go/v3/common"
"dubbo.apache.org/dubbo-go/v3/common/constant"
- "dubbo.apache.org/dubbo-go/v3/common/logger"
)
// RemoteConfig: usually we need some middleware, including nacos, zookeeper
@@ -45,8 +44,8 @@ type RemoteConfig struct {
Params map[string]string `yaml:"params" json:"params,omitempty"`
}
-// Prefix
-func (c *RemoteConfig) Prefix() string {
+// Prefix dubbo.remote.
+func (rc *RemoteConfig) Prefix() string {
return constant.RemotePrefix
}
@@ -56,8 +55,6 @@ func (rc *RemoteConfig) Timeout() time.Duration {
if res, err := time.ParseDuration(rc.TimeoutStr); err == nil {
return res
}
- logger.Errorf("Could not parse the timeout string to Duration: %s, the default value will be returned",
- rc.TimeoutStr)
return 5 * time.Second
}
diff --git a/config/root_config.go b/config/root_config.go
index c581b83..d3d49af 100644
--- a/config/root_config.go
+++ b/config/root_config.go
@@ -19,11 +19,11 @@ package config
import (
"bytes"
- "dubbo.apache.org/dubbo-go/v3/common/logger"
)
import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
)
// RootConfig is the root config
diff --git a/config/router_config.go b/config/router_config.go
index 4b8230f..28cf7a0 100644
--- a/config/router_config.go
+++ b/config/router_config.go
@@ -18,9 +18,12 @@
package config
import (
+ "github.com/creasty/defaults"
+)
+
+import (
_ "dubbo.apache.org/dubbo-go/v3/cluster/router/chain"
"dubbo.apache.org/dubbo-go/v3/common/constant"
- "github.com/creasty/defaults"
)
// RouterConfig is the configuration of the router.
diff --git a/config/router_config_test.go b/config/router_config_test.go
index 007a611..bc43654 100644
--- a/config/router_config_test.go
+++ b/config/router_config_test.go
@@ -52,9 +52,9 @@ func TestString(t *testing.T) {
}
func TestRouterInit(t *testing.T) {
- err := RouterInit(testVirtualServiceYML, testDestinationRuleYML)
- assert.NoError(t, err)
-
- err = RouterInit(testVirtualServiceYML, errorTestDestinationRuleYML)
- assert.Error(t, err)
+ //err := RouterInit(testVirtualServiceYML, testDestinationRuleYML)
+ //assert.NoError(t, err)
+ //
+ //err = RouterInit(testVirtualServiceYML, errorTestDestinationRuleYML)
+ //assert.Error(t, err)
}
diff --git a/config/service.go b/config/service.go
index 3aa524d..8786867 100644
--- a/config/service.go
+++ b/config/service.go
@@ -28,12 +28,14 @@ var (
// SetConsumerService is called by init() of implement of RPCService
func SetConsumerService(service common.RPCService) {
- conServices[service.Reference()] = service
+ ref := common.GetReference(service)
+ conServices[ref] = service
}
// SetProviderService is called by init() of implement of RPCService
func SetProviderService(service common.RPCService) {
- proServices[service.Reference()] = service
+ ref := common.GetReference(service)
+ proServices[ref] = service
}
// GetConsumerService gets ConsumerService by @name
diff --git a/config/service_config.go b/config/service_config.go
index 1ca3e9e..dff4479 100644
--- a/config/service_config.go
+++ b/config/service_config.go
@@ -19,7 +19,6 @@ package config
import (
"container/list"
- "dubbo.apache.org/dubbo-go/v3/protocol/protocolwrapper"
"fmt"
"net/url"
"strconv"
@@ -30,8 +29,11 @@ import (
import (
"github.com/creasty/defaults"
+
gxnet "github.com/dubbogo/gost/net"
+
perrors "github.com/pkg/errors"
+
"go.uber.org/atomic"
)
@@ -41,6 +43,7 @@ import (
"dubbo.apache.org/dubbo-go/v3/common/extension"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"dubbo.apache.org/dubbo-go/v3/protocol"
+ "dubbo.apache.org/dubbo-go/v3/protocol/protocolwrapper"
)
// ServiceConfig is the configuration of the service provider
diff --git a/config/service_discovery_config.go b/config/service_discovery_config.go
index c902f95..2ba2bde 100644
--- a/config/service_discovery_config.go
+++ b/config/service_discovery_config.go
@@ -17,7 +17,9 @@
package config
-import "dubbo.apache.org/dubbo-go/v3/common/constant"
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+)
// ServiceDiscoveryConfig will be used to create
type ServiceDiscoveryConfig struct {
diff --git a/config/testdata/config/service/hello_service.go b/config/testdata/config/service/hello_service.go
index a4dff89..feb3346 100644
--- a/config/testdata/config/service/hello_service.go
+++ b/config/testdata/config/service/hello_service.go
@@ -11,4 +11,4 @@ type HelloService struct {
func (HelloService) Reference() string {
return "helloService"
-}
\ No newline at end of file
+}
diff --git a/config/testdata/config/service/order_service.go b/config/testdata/config/service/order_service.go
index 8c03c79..e19b5cd 100644
--- a/config/testdata/config/service/order_service.go
+++ b/config/testdata/config/service/order_service.go
@@ -11,4 +11,4 @@ type OrderService struct {
func (OrderService) Reference() string {
return "orderService"
-}
\ No newline at end of file
+}
diff --git a/config/testdata/consumer_config.yml b/config/testdata/consumer_config.yml
index 2034186..c011c9e 100644
--- a/config/testdata/consumer_config.yml
+++ b/config/testdata/consumer_config.yml
@@ -87,7 +87,6 @@ protocol_conf:
keep_alive_period: "120s"
tcp_r_buf_size: 262144
tcp_w_buf_size: 65536
- pkg_wq_size: 512
tcp_read_timeout: "1s"
tcp_write_timeout: "5s"
wait_timeout: "1s"
diff --git a/config/testdata/consumer_config_with_configcenter.yml b/config/testdata/consumer_config_with_configcenter.yml
index 89869dc..fe979da 100644
--- a/config/testdata/consumer_config_with_configcenter.yml
+++ b/config/testdata/consumer_config_with_configcenter.yml
@@ -36,7 +36,6 @@ protocol_conf:
keep_alive_period: "120s"
tcp_r_buf_size: 262144
tcp_w_buf_size: 65536
- pkg_wq_size: 512
tcp_read_timeout: "1s"
tcp_write_timeout: "5s"
wait_timeout: "1s"
diff --git a/config/testdata/consumer_config_withoutProtocol.yml b/config/testdata/consumer_config_withoutProtocol.yml
index f3d9265..6028a48 100644
--- a/config/testdata/consumer_config_withoutProtocol.yml
+++ b/config/testdata/consumer_config_withoutProtocol.yml
@@ -73,7 +73,6 @@ protocol_conf:
keep_alive_period: "120s"
tcp_r_buf_size: 262144
tcp_w_buf_size: 65536
- pkg_wq_size: 512
tcp_read_timeout: "1s"
tcp_write_timeout: "5s"
wait_timeout: "1s"
diff --git a/config/testdata/provider_config.yml b/config/testdata/provider_config.yml
index de22b79..3c081c0 100644
--- a/config/testdata/provider_config.yml
+++ b/config/testdata/provider_config.yml
@@ -92,7 +92,6 @@ protocol_conf:
keep_alive_period: "120s"
tcp_r_buf_size: 262144
tcp_w_buf_size: 65536
- pkg_wq_size: 512
tcp_read_timeout: "1s"
tcp_write_timeout: "5s"
wait_timeout: "1s"
diff --git a/config/testdata/provider_config_withoutProtocol.yml b/config/testdata/provider_config_withoutProtocol.yml
index 3fa8100..651c2f4 100644
--- a/config/testdata/provider_config_withoutProtocol.yml
+++ b/config/testdata/provider_config_withoutProtocol.yml
@@ -72,7 +72,6 @@ protocol_conf:
keep_alive_period: "120s"
tcp_r_buf_size: 262144
tcp_w_buf_size: 65536
- pkg_wq_size: 512
tcp_read_timeout: "1s"
tcp_write_timeout: "5s"
wait_timeout: "1s"
diff --git a/config/uniform_router_config.go b/config/uniform_router_config.go
index fa5d02d..3d6f728 100644
--- a/config/uniform_router_config.go
+++ b/config/uniform_router_config.go
@@ -19,6 +19,7 @@ package config
import (
"github.com/ghodss/yaml"
+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
)
diff --git a/config_center/apollo/impl.go b/config_center/apollo/impl.go
index 95c754e..4c1f107 100644
--- a/config_center/apollo/impl.go
+++ b/config_center/apollo/impl.go
@@ -26,7 +26,9 @@ import (
import (
gxset "github.com/dubbogo/gost/container/set"
+
perrors "github.com/pkg/errors"
+
"github.com/zouyx/agollo/v3"
agolloConstant "github.com/zouyx/agollo/v3/constant"
"github.com/zouyx/agollo/v3/env/config"
diff --git a/config_center/apollo/impl_test.go b/config_center/apollo/impl_test.go
index 02cc547..3bb20eb 100644
--- a/config_center/apollo/impl_test.go
+++ b/config_center/apollo/impl_test.go
@@ -17,7 +17,6 @@
package apollo
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"fmt"
"net/http"
"net/http/httptest"
@@ -34,6 +33,7 @@ import (
import (
"dubbo.apache.org/dubbo-go/v3/common"
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/config_center"
"dubbo.apache.org/dubbo-go/v3/config_center/parser"
"dubbo.apache.org/dubbo-go/v3/remoting"
@@ -110,7 +110,6 @@ var mockConfigRes = `{
"application.environment": "dev",
"services.UserProvider.protocol": "dubbo",
"application.organization": "ikurento.com",
- "protocol_conf.dubbo.getty_session_param.pkg_wq_size": "512",
"services.UserProvider.methods[0].loadbalance": "random"
},
"releaseKey": "20191104105242-0f13805d89f834a4"
diff --git a/config_center/apollo/listener.go b/config_center/apollo/listener.go
index e13e4d5..9080b73 100644
--- a/config_center/apollo/listener.go
+++ b/config_center/apollo/listener.go
@@ -20,6 +20,7 @@ package apollo
import (
"github.com/zouyx/agollo/v3"
"github.com/zouyx/agollo/v3/storage"
+
"gopkg.in/yaml.v2"
)
diff --git a/config_center/file/impl.go b/config_center/file/impl.go
index 81680b2..a3e2cdc 100644
--- a/config_center/file/impl.go
+++ b/config_center/file/impl.go
@@ -31,6 +31,7 @@ import (
import (
gxset "github.com/dubbogo/gost/container/set"
+
perrors "github.com/pkg/errors"
)
diff --git a/config_center/mock_dynamic_config.go b/config_center/mock_dynamic_config.go
index 546642c..f42b1dd 100644
--- a/config_center/mock_dynamic_config.go
+++ b/config_center/mock_dynamic_config.go
@@ -23,6 +23,7 @@ import (
import (
gxset "github.com/dubbogo/gost/container/set"
+
"gopkg.in/yaml.v2"
)
diff --git a/config_center/nacos/client.go b/config_center/nacos/client.go
index 908012b..08ba373 100644
--- a/config_center/nacos/client.go
+++ b/config_center/nacos/client.go
@@ -24,6 +24,7 @@ import (
import (
nacosClient "github.com/dubbogo/gost/database/kv/nacos"
+
perrors "github.com/pkg/errors"
)
diff --git a/config_center/nacos/impl.go b/config_center/nacos/impl.go
index 6d7326a..6d19fbd 100644
--- a/config_center/nacos/impl.go
+++ b/config_center/nacos/impl.go
@@ -25,7 +25,9 @@ import (
import (
gxset "github.com/dubbogo/gost/container/set"
nacosClient "github.com/dubbogo/gost/database/kv/nacos"
+
"github.com/nacos-group/nacos-sdk-go/vo"
+
perrors "github.com/pkg/errors"
)
diff --git a/config_center/parser/configuration_parser.go b/config_center/parser/configuration_parser.go
index 0d5d7d2..5e07f43 100644
--- a/config_center/parser/configuration_parser.go
+++ b/config_center/parser/configuration_parser.go
@@ -24,7 +24,9 @@ import (
import (
"github.com/magiconair/properties"
+
perrors "github.com/pkg/errors"
+
"gopkg.in/yaml.v2"
)
diff --git a/config_center/zookeeper/impl.go b/config_center/zookeeper/impl.go
index c57f66d..b4a500c 100644
--- a/config_center/zookeeper/impl.go
+++ b/config_center/zookeeper/impl.go
@@ -25,6 +25,7 @@ import (
import (
gxset "github.com/dubbogo/gost/container/set"
gxzookeeper "github.com/dubbogo/gost/database/kv/zk"
+
perrors "github.com/pkg/errors"
)
diff --git a/config_center/zookeeper/impl_test.go b/config_center/zookeeper/impl_test.go
deleted file mode 100644
index 6d33c5a..0000000
--- a/config_center/zookeeper/impl_test.go
+++ /dev/null
@@ -1,232 +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 zookeeper
-
-import (
- "fmt"
- "path"
- "strconv"
- "sync"
- "testing"
-)
-
-import (
- "github.com/dubbogo/go-zookeeper/zk"
- gxset "github.com/dubbogo/gost/container/set"
- "github.com/stretchr/testify/assert"
-)
-
-import (
- "dubbo.apache.org/dubbo-go/v3/common"
- "dubbo.apache.org/dubbo-go/v3/common/constant"
- "dubbo.apache.org/dubbo-go/v3/config_center"
- "dubbo.apache.org/dubbo-go/v3/config_center/parser"
-)
-
-const (
- dubboPropertyFileName = "dubbo.properties"
-)
-
-func initZkData(group string, t *testing.T) (*zk.TestCluster, *zookeeperDynamicConfiguration) {
- ts, err := zk.StartTestCluster(1, nil, nil, zk.WithRetryTimes(20))
- assert.NoError(t, err)
- assert.NotNil(t, ts.Servers[0])
- urlString := "registry://127.0.0.1:" + strconv.Itoa(ts.Servers[0].Port)
- regurl, err := common.NewURL(urlString)
- assert.NoError(t, err)
- regurl.AddParam(constant.REGISTRY_TIMEOUT_KEY, "15s")
- zkFactory := &zookeeperDynamicConfigurationFactory{}
- reg, err := zkFactory.GetDynamicConfiguration(regurl)
- zreg, ok := reg.(*zookeeperDynamicConfiguration)
- assert.True(t, ok)
- assert.NoError(t, err)
- assert.True(t, zreg.IsAvailable())
- assert.Equal(t, zreg.GetURL(), regurl)
- assert.True(t, zreg.RestartCallBack())
- zreg.SetParser(&parser.DefaultConfigurationParser{})
-
- data := `
- dubbo.consumer.request_timeout=5s
- dubbo.consumer.connect_timeout=5s
- dubbo.application.organization=ikurento.com
- dubbo.application.name=BDTService
- dubbo.application.module=dubbogo user-info server
- dubbo.application.version=0.0.1
- dubbo.application.owner=ZX
- dubbo.application.environment=dev
- dubbo.registries.hangzhouzk.protocol=zookeeper
- dubbo.registries.hangzhouzk.timeout=3s
- dubbo.registries.hangzhouzk.address=127.0.0.1:2181
- dubbo.registries.shanghaizk.protocol=zookeeper
- dubbo.registries.shanghaizk.timeout=3s
- dubbo.registries.shanghaizk.address=127.0.0.1:2182
- dubbo.service.com.ikurento.user.UserProvider.protocol=dubbo
- dubbo.service.com.ikurento.user.UserProvider.interface=com.ikurento.user.UserProvider
- dubbo.service.com.ikurento.user.UserProvider.loadbalance=random
- dubbo.service.com.ikurento.user.UserProvider.warmup=100
- dubbo.service.com.ikurento.user.UserProvider.cluster=failover
-`
- if group != "" {
- err = zreg.client.Create(path.Join(zreg.rootPath, group, dubboPropertyFileName))
- assert.NoError(t, err)
-
- _, err = zreg.client.Conn.Set(path.Join(zreg.rootPath, group, dubboPropertyFileName), []byte(data), 0)
- assert.NoError(t, err)
- } else {
- err = zreg.client.Create(path.Join(zreg.rootPath, dubboPropertyFileName))
- assert.NoError(t, err)
-
- _, err = zreg.client.Conn.Set(path.Join(zreg.rootPath, dubboPropertyFileName), []byte(data), 0)
- assert.NoError(t, err)
- }
-
- return ts, zreg
-}
-
-func TestGetConfig(t *testing.T) {
- ts, reg := initZkData("dubbo", t)
- defer func() {
- reg.client.Close()
- err := ts.Stop()
- assert.NoError(t, err)
- }()
- configs, err := reg.GetProperties(dubboPropertyFileName, config_center.WithGroup("dubbo"))
- assert.NoError(t, err)
- m, err := reg.Parser().Parse(configs)
- assert.NoError(t, err)
- assert.Equal(t, "5s", m["dubbo.consumer.request_timeout"])
- configs, err = reg.GetProperties(dubboPropertyFileName)
- assert.Error(t, err)
- assert.Equal(t, "", configs)
- configs, err = reg.GetInternalProperty(dubboPropertyFileName)
- assert.Error(t, err)
- assert.Equal(t, "", configs)
- configs, err = reg.GetRule(dubboPropertyFileName)
- assert.Error(t, err)
- assert.Equal(t, "", configs)
-}
-
-func TestAddListener(t *testing.T) {
- ts, reg := initZkData("", t)
- defer func() {
- reg.client.Close()
- err := ts.Stop()
- assert.NoError(t, err)
- }()
- listener := &mockDataListener{}
- reg.AddListener(dubboPropertyFileName, listener)
-
- listener.wg.Add(1)
- data := `
- dubbo.consumer.request_timeout=3s
- dubbo.consumer.connect_timeout=5s
- dubbo.application.organization=ikurento.com
- dubbo.application.name=BDTService
- dubbo.application.module=dubbogo user-info server
- dubbo.application.version=0.0.1
- dubbo.application.owner=ZX
- dubbo.application.environment=dev
- dubbo.registries.hangzhouzk.protocol=zookeeper
- dubbo.registries.hangzhouzk.timeout=3s
- dubbo.registries.hangzhouzk.address=127.0.0.1:2181
- dubbo.registries.shanghaizk.protocol=zookeeper
- dubbo.registries.shanghaizk.timeout=3s
- dubbo.registries.shanghaizk.address=127.0.0.1:2182
- dubbo.service.com.ikurento.user.UserProvider.protocol=dubbo
- dubbo.service.com.ikurento.user.UserProvider.interface=com.ikurento.user.UserProvider
- dubbo.service.com.ikurento.user.UserProvider.loadbalance=random
- dubbo.service.com.ikurento.user.UserProvider.warmup=100
- dubbo.service.com.ikurento.user.UserProvider.cluster=failover
-`
- _, err := reg.client.Conn.Set(path.Join(reg.rootPath, dubboPropertyFileName), []byte(data), 1)
- assert.NoError(t, err)
- listener.wg.Wait()
- assert.Equal(t, dubboPropertyFileName, listener.event)
-}
-
-func TestRemoveListener(t *testing.T) {
- ts, reg := initZkData("", t)
- defer func() {
- reg.client.Close()
- err := ts.Stop()
- assert.NoError(t, err)
- }()
- listener := &mockDataListener{}
- reg.AddListener(dubboPropertyFileName, listener)
- listener.wg.Add(1)
- data := `
- dubbo.consumer.request_timeout=3s
- dubbo.consumer.connect_timeout=5s
- dubbo.application.organization=ikurento.com
- dubbo.application.name=BDTService
- dubbo.application.module=dubbogo user-info server
- dubbo.application.version=0.0.1
- dubbo.application.owner=ZX
- dubbo.application.environment=dev
- dubbo.registries.hangzhouzk.protocol=zookeeper
- dubbo.registries.hangzhouzk.timeout=3s
- dubbo.registries.hangzhouzk.address=127.0.0.1:2181
- dubbo.registries.shanghaizk.protocol=zookeeper
- dubbo.registries.shanghaizk.timeout=3s
- dubbo.registries.shanghaizk.address=127.0.0.1:2182
- dubbo.service.com.ikurento.user.UserProvider.protocol=dubbo
- dubbo.service.com.ikurento.user.UserProvider.interface=com.ikurento.user.UserProvider
- dubbo.service.com.ikurento.user.UserProvider.loadbalance=random
- dubbo.service.com.ikurento.user.UserProvider.warmup=100
- dubbo.service.com.ikurento.user.UserProvider.cluster=failover
-`
- reg.RemoveListener(dubboPropertyFileName, listener)
- listener.wg.Done()
- _, err := reg.client.Conn.Set(path.Join(reg.rootPath, dubboPropertyFileName), []byte(data), 1)
- assert.NoError(t, err)
- listener.wg.Wait()
- assert.Equal(t, "", listener.event)
-}
-
-func TestZookeeperDynamicConfigurationPublishConfig(t *testing.T) {
- value := "Test Data"
- customGroup := "Custom Group"
- key := "myKey"
- ts, reg := initZkData(config_center.DEFAULT_GROUP, t)
- defer func() {
- reg.client.Close()
- err := ts.Stop()
- assert.NoError(t, err)
- }()
- err := reg.PublishConfig(key, customGroup, value)
- assert.Nil(t, err)
- result, err := reg.GetInternalProperty("myKey", config_center.WithGroup(customGroup))
- assert.Nil(t, err)
- assert.Equal(t, value, result)
-
- var keys *gxset.HashSet
- keys, err = reg.GetConfigKeysByGroup(customGroup)
- assert.Nil(t, err)
- assert.Equal(t, 1, keys.Size())
- assert.True(t, keys.Contains(key))
-}
-
-type mockDataListener struct {
- wg sync.WaitGroup
- event string
-}
-
-func (l *mockDataListener) Process(configType *config_center.ConfigChangeEvent) {
- fmt.Println("process!!!!!")
- l.wg.Done()
- l.event = configType.Key
-}
diff --git a/config_center/zookeeper/listener_test.go b/config_center/zookeeper/listener_test.go
deleted file mode 100644
index 56c2e1e..0000000
--- a/config_center/zookeeper/listener_test.go
+++ /dev/null
@@ -1,101 +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 zookeeper
-
-import (
- "path"
- "strconv"
- "testing"
-)
-
-import (
- "github.com/dubbogo/go-zookeeper/zk"
- "github.com/stretchr/testify/assert"
-)
-
-import (
- "dubbo.apache.org/dubbo-go/v3/common"
- "dubbo.apache.org/dubbo-go/v3/common/constant"
- "dubbo.apache.org/dubbo-go/v3/config_center/parser"
-)
-
-func initZkDynamicConfiguration(t *testing.T) (*zk.TestCluster, *zookeeperDynamicConfiguration) {
- ts, err := zk.StartTestCluster(1, nil, nil, zk.WithRetryTimes(20))
- assert.NoError(t, err)
- assert.NotNil(t, ts.Servers[0])
- urlString := "registry://127.0.0.1:" + strconv.Itoa(ts.Servers[0].Port)
- regurl, err := common.NewURL(urlString)
- assert.NoError(t, err)
- regurl.AddParam(constant.REGISTRY_TIMEOUT_KEY, "15s")
- zkFactory := &zookeeperDynamicConfigurationFactory{}
- reg, err := zkFactory.GetDynamicConfiguration(regurl)
- zreg, ok := reg.(*zookeeperDynamicConfiguration)
- assert.True(t, ok)
- assert.NoError(t, err)
- assert.True(t, zreg.IsAvailable())
- assert.Equal(t, zreg.GetURL(), regurl)
- assert.True(t, zreg.RestartCallBack())
- zreg.SetParser(&parser.DefaultConfigurationParser{})
-
- data := `
- dubbo.application.name=dubbogo
-`
- err = zreg.client.Create(path.Join(zreg.rootPath, dubboPropertyFileName))
- assert.NoError(t, err)
- _, err = zreg.client.Conn.Set(path.Join(zreg.rootPath, dubboPropertyFileName), []byte(data), 0)
- assert.NoError(t, err)
-
- return ts, zreg
-}
-
-func TestZookeeperDynamicConfigurationPathToKey(t *testing.T) {
- ts, reg := initZkDynamicConfiguration(t)
- defer func() {
- err := ts.Stop()
- assert.NoError(t, err)
- }()
- listener := &mockDataListener{}
- key := path.Join("dubbogoDemo" + constant.CONFIGURATORS_SUFFIX)
- reg.AddListener(key, listener)
- listener.wg.Add(1)
-
- data := `
-scope: application
-key: dubbogoDemo
-enabled: true
-configs:
- - addresses: [0.0.0.0:20880]
- side: provider
- parameters:
- weight: 60
- - addresses: [0.0.0.0:20881]
- side: provider
- parameters:
- weight: 40
-`
- zkPath := path.Join(reg.rootPath, "dubbo", key)
- exists, _, err := reg.client.Conn.Exists(zkPath)
- assert.NoError(t, err)
- if !exists {
- err = reg.client.Create(zkPath)
- assert.NoError(t, err)
- }
- _, err = reg.client.SetContent(zkPath, []byte(data), 0)
- assert.NoError(t, err)
- listener.wg.Wait()
- assert.Equal(t, key, listener.event)
-}
diff --git a/filter/accesslog/filter_test.go b/filter/accesslog/filter_test.go
index 45be9de..4bd6f2e 100644
--- a/filter/accesslog/filter_test.go
+++ b/filter/accesslog/filter_test.go
@@ -24,6 +24,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/filter/active/filter_test.go b/filter/active/filter_test.go
index 9a39bb6..964d18a 100644
--- a/filter/active/filter_test.go
+++ b/filter/active/filter_test.go
@@ -26,6 +26,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/filter/auth/consumer_sign_filter_test.go b/filter/auth/consumer_sign_filter_test.go
index 550eeef..ba024bd 100644
--- a/filter/auth/consumer_sign_filter_test.go
+++ b/filter/auth/consumer_sign_filter_test.go
@@ -24,6 +24,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/filter/auth/provider_auth_filter_test.go b/filter/auth/provider_auth_filter_test.go
index 288f56b..1f83501 100644
--- a/filter/auth/provider_auth_filter_test.go
+++ b/filter/auth/provider_auth_filter_test.go
@@ -26,6 +26,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/filter/generic/filter.go b/filter/generic/filter.go
index df435bb..4aa2d6e 100644
--- a/filter/generic/filter.go
+++ b/filter/generic/filter.go
@@ -19,9 +19,6 @@ package generic
import (
"context"
- "reflect"
- "strings"
- "time"
)
import (
@@ -31,6 +28,7 @@ import (
import (
"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/filter"
"dubbo.apache.org/dubbo-go/v3/protocol"
invocation2 "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
@@ -42,30 +40,52 @@ func init() {
})
}
-// when do a generic invoke, struct need to be map
-
-// nolint
+// Filter ensures the structs are converted to maps, this filter is for consumer
type Filter struct{}
// Invoke turns the parameters to map for generic method
func (f *Filter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
- if invocation.MethodName() == constant.GENERIC && len(invocation.Arguments()) == 3 {
- oldArguments := invocation.Arguments()
+ if isCallingToGenericService(invoker, invocation) {
+
+ mtdname := invocation.MethodName()
+ oldargs := invocation.Arguments()
+
+ types := make([]string, 0, len(oldargs))
+ args := make([]hessian.Object, 0, len(oldargs))
- if oldParams, ok := oldArguments[2].([]interface{}); ok {
- newParams := make([]hessian.Object, 0, len(oldParams))
- for i := range oldParams {
- newParams = append(newParams, hessian.Object(struct2MapAll(oldParams[i])))
+ // get generic info from attachments of invocation, the default value is "true"
+ generic := invocation.AttachmentsByKey(constant.GENERIC_KEY, constant.GenericSerializationDefault)
+ // get generalizer according to value in the `generic`
+ g := getGeneralizer(generic)
+
+ for _, arg := range oldargs {
+ // use the default generalizer(MapGeneralizer)
+ typ, err := g.GetType(arg)
+ if err != nil {
+ logger.Errorf("failed to get type, %v", err)
}
- newArguments := []interface{}{
- oldArguments[0],
- oldArguments[1],
- newParams,
+ obj, err := g.Generalize(arg)
+ if err != nil {
+ logger.Errorf("generalization failed, %v", err)
+ return invoker.Invoke(ctx, invocation)
}
- newInvocation := invocation2.NewRPCInvocation(invocation.MethodName(), newArguments, invocation.Attachments())
- newInvocation.SetReply(invocation.Reply())
- return invoker.Invoke(ctx, newInvocation)
+ types = append(types, typ)
+ args = append(args, obj)
+ }
+
+ // construct a new invocation for generic call
+ newargs := []interface{}{
+ mtdname,
+ types,
+ args,
}
+ newivc := invocation2.NewRPCInvocation(constant.GENERIC, newargs, invocation.Attachments())
+ newivc.SetReply(invocation.Reply())
+ newivc.Attachments()[constant.GENERIC_KEY] = invoker.GetURL().GetParam(constant.GENERIC_KEY, "")
+
+ return invoker.Invoke(ctx, newivc)
+ } else if isMakingAGenericCall(invoker, invocation) {
+ invocation.Attachments()[constant.GENERIC_KEY] = invoker.GetURL().GetParam(constant.GENERIC_KEY, "")
}
return invoker.Invoke(ctx, invocation)
}
@@ -75,84 +95,3 @@ func (f *Filter) OnResponse(_ context.Context, result protocol.Result, _ protoco
_ protocol.Invocation) protocol.Result {
return result
}
-
-func struct2MapAll(obj interface{}) interface{} {
- if obj == nil {
- return obj
- }
- t := reflect.TypeOf(obj)
- v := reflect.ValueOf(obj)
- if t.Kind() == reflect.Struct {
- result := make(map[string]interface{}, t.NumField())
- for i := 0; i < t.NumField(); i++ {
- field := t.Field(i)
- value := v.Field(i)
- kind := value.Kind()
- if kind == reflect.Struct || kind == reflect.Slice || kind == reflect.Map {
- if value.CanInterface() {
- tmp := value.Interface()
- if _, ok := tmp.(time.Time); ok {
- setInMap(result, field, tmp)
- continue
- }
- setInMap(result, field, struct2MapAll(tmp))
- }
- } else {
- if value.CanInterface() {
- setInMap(result, field, value.Interface())
- }
- }
- }
- return result
- } else if t.Kind() == reflect.Slice {
- value := reflect.ValueOf(obj)
- newTemps := make([]interface{}, 0, value.Len())
- for i := 0; i < value.Len(); i++ {
- newTemp := struct2MapAll(value.Index(i).Interface())
- newTemps = append(newTemps, newTemp)
- }
- return newTemps
- } else if t.Kind() == reflect.Map {
- newTempMap := make(map[interface{}]interface{}, v.Len())
- iter := v.MapRange()
- for iter.Next() {
- if !iter.Value().CanInterface() {
- continue
- }
- key := iter.Key()
- mapV := iter.Value().Interface()
- newTempMap[convertMapKey(key)] = struct2MapAll(mapV)
- }
- return newTempMap
- } else {
- return obj
- }
-}
-
-func convertMapKey(key reflect.Value) interface{} {
- switch key.Kind() {
- case reflect.Bool, reflect.Int, reflect.Int8,
- reflect.Int16, reflect.Int32, reflect.Int64,
- reflect.Uint, reflect.Uint8, reflect.Uint16,
- reflect.Uint32, reflect.Uint64, reflect.Float32,
- reflect.Float64, reflect.String:
- return key.Interface()
- default:
- return key.String()
- }
-}
-
-func setInMap(m map[string]interface{}, structField reflect.StructField, value interface{}) (result map[string]interface{}) {
- result = m
- if tagName := structField.Tag.Get("m"); tagName == "" {
- result[headerAtoa(structField.Name)] = value
- } else {
- result[tagName] = value
- }
- return
-}
-
-func headerAtoa(a string) (b string) {
- b = strings.ToLower(a[:1]) + a[1:]
- return
-}
diff --git a/filter/generic/filter_test.go b/filter/generic/filter_test.go
index 815a6ae..c8bf45a 100644
--- a/filter/generic/filter_test.go
+++ b/filter/generic/filter_test.go
@@ -18,120 +18,85 @@
package generic
import (
- "reflect"
+ "context"
+ "net/url"
"testing"
- "time"
)
import (
+ hessian "github.com/apache/dubbo-go-hessian2"
+
+ "github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
-func TestStruct2MapAll(t *testing.T) {
- var testData struct {
- AaAa string `m:"aaAa"`
- BaBa string
- CaCa struct {
- AaAa string
- BaBa string `m:"baBa"`
- XxYy struct {
- xxXx string `m:"xxXx"`
- Xx string `m:"xx"`
- } `m:"xxYy"`
- } `m:"caCa"`
- DaDa time.Time
- EeEe int
- }
- testData.AaAa = "1"
- testData.BaBa = "1"
- testData.CaCa.BaBa = "2"
- testData.CaCa.AaAa = "2"
- testData.CaCa.XxYy.xxXx = "3"
- testData.CaCa.XxYy.Xx = "3"
- testData.DaDa = time.Date(2020, 10, 29, 2, 34, 0, 0, time.Local)
- testData.EeEe = 100
- m := struct2MapAll(testData).(map[string]interface{})
- assert.Equal(t, "1", m["aaAa"].(string))
- assert.Equal(t, "1", m["baBa"].(string))
- assert.Equal(t, "2", m["caCa"].(map[string]interface{})["aaAa"].(string))
- assert.Equal(t, "3", m["caCa"].(map[string]interface{})["xxYy"].(map[string]interface{})["xx"].(string))
-
- assert.Equal(t, reflect.Map, reflect.TypeOf(m["caCa"]).Kind())
- assert.Equal(t, reflect.Map, reflect.TypeOf(m["caCa"].(map[string]interface{})["xxYy"]).Kind())
- assert.Equal(t, "2020-10-29 02:34:00", m["daDa"].(time.Time).Format("2006-01-02 15:04:05"))
- assert.Equal(t, 100, m["eeEe"].(int))
-}
+import (
+ "dubbo.apache.org/dubbo-go/v3/common"
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/protocol"
+ "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
+ "dubbo.apache.org/dubbo-go/v3/protocol/mock"
+)
-type testStruct struct {
- AaAa string
- BaBa string `m:"baBa"`
- XxYy struct {
- xxXx string `m:"xxXx"`
- Xx string `m:"xx"`
- } `m:"xxYy"`
-}
+// test isCallingToGenericService branch
+func TestFilter_Invoke(t *testing.T) {
+ invokeUrl := common.NewURLWithOptions(
+ common.WithParams(url.Values{}),
+ common.WithParamsValue(constant.GENERIC_KEY, constant.GenericSerializationDefault))
+ filter := &Filter{}
+
+ ctrl := gomock.NewController(t)
+ defer ctrl.Finish()
-func TestStruct2MapAllSlice(t *testing.T) {
- var testData struct {
- AaAa string `m:"aaAa"`
- BaBa string
- CaCa []testStruct `m:"caCa"`
- }
- testData.AaAa = "1"
- testData.BaBa = "1"
- var tmp testStruct
- tmp.BaBa = "2"
- tmp.AaAa = "2"
- tmp.XxYy.xxXx = "3"
- tmp.XxYy.Xx = "3"
- testData.CaCa = append(testData.CaCa, tmp)
- m := struct2MapAll(testData).(map[string]interface{})
-
- assert.Equal(t, "1", m["aaAa"].(string))
- assert.Equal(t, "1", m["baBa"].(string))
- assert.Equal(t, "2", m["caCa"].([]interface{})[0].(map[string]interface{})["aaAa"].(string))
- assert.Equal(t, "3", m["caCa"].([]interface{})[0].(map[string]interface{})["xxYy"].(map[string]interface{})["xx"].(string))
-
- assert.Equal(t, reflect.Slice, reflect.TypeOf(m["caCa"]).Kind())
- assert.Equal(t, reflect.Map, reflect.TypeOf(m["caCa"].([]interface{})[0].(map[string]interface{})["xxYy"]).Kind())
+ normalInvocation := invocation.NewRPCInvocation("Hello", []interface{}{"arg1"}, make(map[string]interface{}))
+
+ mockInvoker := mock.NewMockInvoker(ctrl)
+ mockInvoker.EXPECT().GetUrl().Return(invokeUrl).Times(2)
+ mockInvoker.EXPECT().Invoke(gomock.Not(normalInvocation)).DoAndReturn(
+ func(invocation protocol.Invocation) protocol.Result {
+ assert.Equal(t, constant.GENERIC, invocation.MethodName())
+ args := invocation.Arguments()
+ assert.Equal(t, "Hello", args[0])
+ assert.Equal(t, "java.lang.String", args[1].([]string)[0])
+ assert.Equal(t, "arg1", args[2].([]hessian.Object)[0].(string))
+ assert.Equal(t, constant.GenericSerializationDefault, invocation.AttachmentsByKey(constant.GENERIC_KEY, ""))
+ return &protocol.RPCResult{}
+ })
+
+ result := filter.Invoke(context.Background(), mockInvoker, normalInvocation)
+ assert.NotNil(t, result)
}
-func TestStruct2MapAllMap(t *testing.T) {
- var testData struct {
- AaAa string
- Baba map[string]interface{}
- CaCa map[string]string
- DdDd map[string]interface{}
- IntMap map[int]interface{}
- }
- testData.AaAa = "aaaa"
- testData.Baba = make(map[string]interface{})
- testData.CaCa = make(map[string]string)
- testData.DdDd = nil
- testData.IntMap = make(map[int]interface{})
-
- testData.Baba["kk"] = 1
- var structData struct {
- Str string
- }
- structData.Str = "str"
- testData.Baba["struct"] = structData
- testData.Baba["nil"] = nil
- testData.CaCa["k1"] = "v1"
- testData.CaCa["kv2"] = "v2"
- testData.IntMap[1] = 1
- m := struct2MapAll(testData)
-
- assert.Equal(t, reflect.Map, reflect.TypeOf(m).Kind())
- mappedStruct := m.(map[string]interface{})
- assert.Equal(t, reflect.String, reflect.TypeOf(mappedStruct["aaAa"]).Kind())
- assert.Equal(t, reflect.Map, reflect.TypeOf(mappedStruct["baba"]).Kind())
- assert.Equal(t, reflect.Map, reflect.TypeOf(mappedStruct["baba"].(map[interface{}]interface{})["struct"]).Kind())
- assert.Equal(t, "str", mappedStruct["baba"].(map[interface{}]interface{})["struct"].(map[string]interface{})["str"])
- assert.Equal(t, nil, mappedStruct["baba"].(map[interface{}]interface{})["nil"])
- assert.Equal(t, reflect.Map, reflect.TypeOf(mappedStruct["caCa"]).Kind())
- assert.Equal(t, reflect.Map, reflect.TypeOf(mappedStruct["ddDd"]).Kind())
- intMap := mappedStruct["intMap"]
- assert.Equal(t, reflect.Map, reflect.TypeOf(intMap).Kind())
- assert.Equal(t, 1, intMap.(map[interface{}]interface{})[1])
+// test isMakingAGenericCall branch
+func TestFilter_InvokeWithGenericCall(t *testing.T) {
+ invokeUrl := common.NewURLWithOptions(
+ common.WithParams(url.Values{}),
+ common.WithParamsValue(constant.GENERIC_KEY, constant.GenericSerializationDefault))
+ filter := &Filter{}
+
+ ctrl := gomock.NewController(t)
+ defer ctrl.Finish()
+
+ genericInvocation := invocation.NewRPCInvocation(constant.GENERIC, []interface{}{
+ "hello",
+ []string{"java.lang.String"},
+ []string{"arg1"},
+ }, make(map[string]interface{}))
+
+ mockInvoker := mock.NewMockInvoker(ctrl)
+ mockInvoker.EXPECT().GetUrl().Return(invokeUrl).Times(3)
+ mockInvoker.EXPECT().Invoke(gomock.Any()).DoAndReturn(
+ func(invocation protocol.Invocation) protocol.Result {
+ assert.Equal(t, constant.GENERIC, invocation.MethodName())
+ args := invocation.Arguments()
+ assert.Equal(t, "hello", args[0])
+ assert.Equal(t, "java.lang.String", args[1].([]string)[0])
+ assert.Equal(t, "arg1", args[2].([]string)[0])
+ assert.Equal(t, constant.GenericSerializationDefault, invocation.AttachmentsByKey(constant.GENERIC_KEY, ""))
+ return &protocol.RPCResult{}
+ })
+
+ result := filter.Invoke(context.Background(), mockInvoker, genericInvocation)
+ assert.NotNil(t, result)
}
diff --git a/filter/generic/generalizer/example.pb.go b/filter/generic/generalizer/example.pb.go
new file mode 100644
index 0000000..13bed21
--- /dev/null
+++ b/filter/generic/generalizer/example.pb.go
@@ -0,0 +1,260 @@
+/*
+ * 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.
+ */
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.26.0
+// protoc v3.17.3
+// source: example.proto
+
+package generalizer
+
+import (
+ reflect "reflect"
+ sync "sync"
+)
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type ResponseType struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Code int64 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
+ Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"`
+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+ Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"`
+}
+
+func (x *ResponseType) Reset() {
+ *x = ResponseType{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_example_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *ResponseType) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ResponseType) ProtoMessage() {}
+
+func (x *ResponseType) ProtoReflect() protoreflect.Message {
+ mi := &file_example_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ResponseType.ProtoReflect.Descriptor instead.
+func (*ResponseType) Descriptor() ([]byte, []int) {
+ return file_example_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *ResponseType) GetCode() int64 {
+ if x != nil {
+ return x.Code
+ }
+ return 0
+}
+
+func (x *ResponseType) GetId() int64 {
+ if x != nil {
+ return x.Id
+ }
+ return 0
+}
+
+func (x *ResponseType) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *ResponseType) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
+}
+
+type RequestType struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+}
+
+func (x *RequestType) Reset() {
+ *x = RequestType{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_example_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *RequestType) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RequestType) ProtoMessage() {}
+
+func (x *RequestType) ProtoReflect() protoreflect.Message {
+ mi := &file_example_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RequestType.ProtoReflect.Descriptor instead.
+func (*RequestType) Descriptor() ([]byte, []int) {
+ return file_example_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *RequestType) GetId() int64 {
+ if x != nil {
+ return x.Id
+ }
+ return 0
+}
+
+var File_example_proto protoreflect.FileDescriptor
+
+var file_example_proto_rawDesc = []byte{
+ 0x0a, 0x0d, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
+ 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x22, 0x60, 0x0a, 0x0c,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04,
+ 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65,
+ 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64,
+ 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+ 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x1d,
+ 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a,
+ 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x32, 0x52, 0x0a,
+ 0x0e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
+ 0x40, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x67,
+ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x19, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
+ 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70,
+ 0x65, 0x42, 0x10, 0x5a, 0x0e, 0x2e, 0x2f, 0x3b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x69,
+ 0x7a, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_example_proto_rawDescOnce sync.Once
+ file_example_proto_rawDescData = file_example_proto_rawDesc
+)
+
+func file_example_proto_rawDescGZIP() []byte {
+ file_example_proto_rawDescOnce.Do(func() {
+ file_example_proto_rawDescData = protoimpl.X.CompressGZIP(file_example_proto_rawDescData)
+ })
+ return file_example_proto_rawDescData
+}
+
+var file_example_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_example_proto_goTypes = []interface{}{
+ (*ResponseType)(nil), // 0: generalizer.ResponseType
+ (*RequestType)(nil), // 1: generalizer.RequestType
+}
+var file_example_proto_depIdxs = []int32{
+ 1, // 0: generalizer.ExampleService.QueryUser:input_type -> generalizer.RequestType
+ 0, // 1: generalizer.ExampleService.QueryUser:output_type -> generalizer.ResponseType
+ 1, // [1:2] is the sub-list for method output_type
+ 0, // [0:1] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_example_proto_init() }
+func file_example_proto_init() {
+ if File_example_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_example_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*ResponseType); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_example_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*RequestType); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_example_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_example_proto_goTypes,
+ DependencyIndexes: file_example_proto_depIdxs,
+ MessageInfos: file_example_proto_msgTypes,
+ }.Build()
+ File_example_proto = out.File
+ file_example_proto_rawDesc = nil
+ file_example_proto_goTypes = nil
+ file_example_proto_depIdxs = nil
+}
diff --git a/test/integrate/dubbo/go-client/user.go b/filter/generic/generalizer/generalizer.go
similarity index 57%
copy from test/integrate/dubbo/go-client/user.go
copy to filter/generic/generalizer/generalizer.go
index 75903f4..b3bd993 100644
--- a/test/integrate/dubbo/go-client/user.go
+++ b/filter/generic/generalizer/generalizer.go
@@ -15,40 +15,23 @@
* limitations under the License.
*/
-package main
+package generalizer
import (
- "context"
- "dubbo.apache.org/dubbo-go/v3/config"
- "time"
+ "reflect"
)
-import (
- hessian "github.com/apache/dubbo-go-hessian2"
-)
+type Generalizer interface {
-var userProvider = new(UserProvider)
+ // Generalize generalizes the object to a general struct.
+ // For example:
+ // map, the type of the `obj` allows a basic type, e.g. string, and a complicated type which is a POJO, see also
+ // `hessian.POJO` at [apache/dubbo-go-hessian2](github.com/apache/dubbo-go-hessian2).
+ Generalize(obj interface{}) (interface{}, error)
-func init() {
- config.SetConsumerService(userProvider)
- hessian.RegisterPOJO(&User{})
-}
-
-type User struct {
- ID string
- Name string
- Age int32
- Time time.Time
-}
-
-type UserProvider struct {
- GetUser func(ctx context.Context, req []interface{}, rsp *User) error
-}
-
-func (u *UserProvider) Reference() string {
- return "UserProvider"
-}
+ // Realize realizes a general struct, described in `obj`, to an object for Golang.
+ Realize(obj interface{}, typ reflect.Type) (interface{}, error)
-func (User) JavaClassName() string {
- return "com.ikurento.user.User"
+ // GetType returns the type of the `obj`
+ GetType(obj interface{}) (string, error)
}
diff --git a/filter/generic/generalizer/gson.go b/filter/generic/generalizer/gson.go
new file mode 100644
index 0000000..7896071
--- /dev/null
+++ b/filter/generic/generalizer/gson.go
@@ -0,0 +1,100 @@
+/*
+ * 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 generalizer
+
+import (
+ "encoding/json"
+ "reflect"
+ "sync"
+)
+
+import (
+ hessian "github.com/apache/dubbo-go-hessian2"
+
+ perrors "github.com/pkg/errors"
+)
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo/hessian2"
+)
+
+var (
+ jsonGeneralizer Generalizer
+ jsonGeneralizerOnce sync.Once
+)
+
+func GetGsonGeneralizer() Generalizer {
+ jsonGeneralizerOnce.Do(func() {
+ jsonGeneralizer = &GsonGeneralizer{}
+ })
+ return jsonGeneralizer
+}
+
+type GsonGeneralizer struct{}
+
+func (GsonGeneralizer) Generalize(obj interface{}) (interface{}, error) {
+ newObj, ok := obj.(hessian.POJO)
+ if !ok {
+ return nil, perrors.Errorf("unexpected type of obj(=%T), wanted is hessian pojo", obj)
+ }
+
+ jsonbytes, err := json.Marshal(newObj)
+ if err != nil {
+ return nil, err
+ }
+
+ return string(jsonbytes), nil
+}
+
+func (GsonGeneralizer) Realize(obj interface{}, typ reflect.Type) (interface{}, error) {
+ jsonbytes, ok := obj.(string)
+ if !ok {
+ return nil, perrors.Errorf("unexpected type of obj(=%T), wanted is string", obj)
+ }
+
+ // create the target object
+ ret, ok := reflect.New(typ).Interface().(hessian.POJO)
+ if !ok {
+ return nil, perrors.Errorf("the type of obj(=%s) should be hessian pojo", typ)
+ }
+
+ err := json.Unmarshal([]byte(jsonbytes), ret)
+ if err != nil {
+ return nil, err
+ }
+
+ return ret, nil
+}
+
+func (GsonGeneralizer) GetType(obj interface{}) (typ string, err error) {
+ typ, err = hessian2.GetJavaName(obj)
+ // no error or error is not NilError
+ if err == nil || err != hessian2.NilError {
+ return
+ }
+
+ typ = "java.lang.Object"
+ if err == hessian2.NilError {
+ logger.Debugf("the type of nil object couldn't be inferred, use the default value(\"%s\")", typ)
+ return
+ }
+
+ logger.Debugf("the type of object(=%T) couldn't be recognized as a POJO, use the default value(\"%s\")", obj, typ)
+ return
+}
diff --git a/filter/generic/generalizer/gson_test.go b/filter/generic/generalizer/gson_test.go
new file mode 100644
index 0000000..96006f0
--- /dev/null
+++ b/filter/generic/generalizer/gson_test.go
@@ -0,0 +1,97 @@
+/*
+ * 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 generalizer
+
+import (
+ "reflect"
+ "testing"
+)
+
+import (
+ "github.com/stretchr/testify/assert"
+)
+
+var mockGsonGeneralizer = GetGsonGeneralizer()
+
+type mockGsonParent struct {
+ Gender, Email, Name string
+ Age int
+ Child *mockGsonChild
+}
+
+func (p mockGsonParent) JavaClassName() string {
+ return "org.apache.dubbo.mockGsonParent"
+}
+
+type mockGsonChild struct {
+ Gender, Email, Name string
+ Age int
+}
+
+func (p mockGsonChild) JavaClassName() string {
+ return "org.apache.dubbo.mockGsonChild"
+}
+
+func TestGsonGeneralizer(t *testing.T) {
+ c := &mockGsonChild{
+ Age: 20,
+ Gender: "male",
+ Email: "childName@example.com",
+ Name: "childName",
+ }
+ p := mockGsonParent{
+ Age: 30,
+ Gender: "male",
+ Email: "enableasync@example.com",
+ Name: "enableasync",
+ Child: c,
+ }
+
+ m, err := mockGsonGeneralizer.Generalize(p)
+ assert.Nil(t, err)
+ assert.Equal(t, "{\"Gender\":\"male\",\"Email\":\"enableasync@example.com\",\"Name\":\"enableasync\",\"Age\":30,\"Child\":{\"Gender\":\"male\",\"Email\":\"childName@example.com\",\"Name\":\"childName\",\"Age\":20}}", m)
+
+ r, err := mockGsonGeneralizer.Realize(m, reflect.TypeOf(p))
+ assert.Nil(t, err)
+ rMockParent, ok := r.(*mockGsonParent)
+ assert.True(t, ok)
+ // parent
+ assert.Equal(t, "enableasync", rMockParent.Name)
+ assert.Equal(t, 30, rMockParent.Age)
+ // child
+ assert.Equal(t, "childName", rMockParent.Child.Name)
+ assert.Equal(t, 20, rMockParent.Child.Age)
+}
+
+func TestGsonPointer(t *testing.T) {
+ c := &mockGsonChild{
+ Age: 20,
+ Gender: "male",
+ Email: "childName@example.com",
+ Name: "childName",
+ }
+
+ m, err := mockMapGeneralizer.Generalize(c)
+ assert.Nil(t, err)
+ newC, err := mockMapGeneralizer.Realize(m, reflect.TypeOf(c))
+ assert.Nil(t, err)
+ rMockChild, ok := newC.(*mockGsonChild)
+ assert.True(t, ok)
+ assert.Equal(t, "childName", rMockChild.Name)
+ assert.Equal(t, 20, rMockChild.Age)
+}
diff --git a/filter/generic/generalizer/map.go b/filter/generic/generalizer/map.go
new file mode 100644
index 0000000..5aa573c
--- /dev/null
+++ b/filter/generic/generalizer/map.go
@@ -0,0 +1,208 @@
+/*
+ * 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 generalizer
+
+import (
+ "reflect"
+ "strings"
+ "sync"
+ "time"
+)
+
+import (
+ hessian "github.com/apache/dubbo-go-hessian2"
+
+ "github.com/mitchellh/mapstructure"
+
+ perrors "github.com/pkg/errors"
+)
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo/hessian2"
+)
+
+var (
+ mapGeneralizer Generalizer
+ mapGeneralizerOnce sync.Once
+)
+
+func GetMapGeneralizer() Generalizer {
+ mapGeneralizerOnce.Do(func() {
+ mapGeneralizer = &MapGeneralizer{}
+ })
+ return mapGeneralizer
+}
+
+type MapGeneralizer struct{}
+
+func (g *MapGeneralizer) Generalize(obj interface{}) (gobj interface{}, err error) {
+ gobj = objToMap(obj)
+ return
+}
+
+func (g *MapGeneralizer) Realize(obj interface{}, typ reflect.Type) (interface{}, error) {
+ newobj := reflect.New(typ).Interface()
+ err := mapstructure.Decode(obj, newobj)
+ if err != nil {
+ return nil, perrors.Errorf("realizing map failed, %v", err)
+ }
+
+ return reflect.ValueOf(newobj).Elem().Interface(), nil
+}
+
+func (g *MapGeneralizer) GetType(obj interface{}) (typ string, err error) {
+ typ, err = hessian2.GetJavaName(obj)
+ // no error or error is not NilError
+ if err == nil || err != hessian2.NilError {
+ return
+ }
+
+ typ = "java.lang.Object"
+ if err == hessian2.NilError {
+ logger.Debugf("the type of nil object couldn't be inferred, use the default value(\"%s\")", typ)
+ return
+ }
+
+ logger.Debugf("the type of object(=%T) couldn't be recognized as a POJO, use the default value(\"%s\")", obj, typ)
+ return
+}
+
+// objToMap converts an object(interface{}) to a map
+func objToMap(obj interface{}) interface{} {
+ if obj == nil {
+ return obj
+ }
+
+ t := reflect.TypeOf(obj)
+ v := reflect.ValueOf(obj)
+
+ // if obj is a POJO, get the struct from the pointer (if it is a pointer)
+ pojo, isPojo := obj.(hessian.POJO)
+ if isPojo {
+ for t.Kind() == reflect.Ptr {
+ t = t.Elem()
+ v = v.Elem()
+ }
+ }
+
+ switch t.Kind() {
+ case reflect.Struct:
+ result := make(map[string]interface{}, t.NumField())
+ if isPojo {
+ result["class"] = pojo.JavaClassName()
+ }
+ for i := 0; i < t.NumField(); i++ {
+ field := t.Field(i)
+ value := v.Field(i)
+ kind := value.Kind()
+ if !value.CanInterface() {
+ logger.Debugf("objToMap for %v is skipped because it couldn't be converted to interface", field)
+ continue
+ }
+ valueIface := value.Interface()
+ switch kind {
+ case reflect.Ptr:
+ if value.IsNil() {
+ setInMap(result, field, nil)
+ continue
+ }
+ setInMap(result, field, objToMap(valueIface))
+ case reflect.Struct, reflect.Slice, reflect.Map:
+ if isPrimitive(valueIface) {
+ logger.Warnf("\"%s\" is primitive. The application may crash if it's transferred between "+
+ "systems implemented by different languages, e.g. dubbo-go <-> dubbo-java. We recommend "+
+ "you represent the object by basic types, like string.", value.Type())
+ setInMap(result, field, valueIface)
+ continue
+ }
+
+ setInMap(result, field, objToMap(valueIface))
+ default:
+ setInMap(result, field, valueIface)
+ }
+ }
+ return result
+ case reflect.Array, reflect.Slice:
+ value := reflect.ValueOf(obj)
+ newTemps := make([]interface{}, 0, value.Len())
+ for i := 0; i < value.Len(); i++ {
+ newTemp := objToMap(value.Index(i).Interface())
+ newTemps = append(newTemps, newTemp)
+ }
+ return newTemps
+ case reflect.Map:
+ newTempMap := make(map[interface{}]interface{}, v.Len())
+ iter := v.MapRange()
+ for iter.Next() {
+ if !iter.Value().CanInterface() {
+ continue
+ }
+ key := iter.Key()
+ mapV := iter.Value().Interface()
+ newTempMap[mapKey(key)] = objToMap(mapV)
+ }
+ return newTempMap
+ case reflect.Ptr:
+ return objToMap(v.Elem().Interface())
+ default:
+ return obj
+ }
+}
+
+// mapKey converts the map key to interface type
+func mapKey(key reflect.Value) interface{} {
+ switch key.Kind() {
+ case reflect.Bool, reflect.Int, reflect.Int8,
+ reflect.Int16, reflect.Int32, reflect.Int64,
+ reflect.Uint, reflect.Uint8, reflect.Uint16,
+ reflect.Uint32, reflect.Uint64, reflect.Float32,
+ reflect.Float64, reflect.String:
+ return key.Interface()
+ default:
+ name := key.String()
+ if name == "class" {
+ panic(`"class" is a reserved keyword`)
+ }
+ return name
+ }
+}
+
+// setInMap sets the struct into the map using the tag or the name of the struct as the key
+func setInMap(m map[string]interface{}, structField reflect.StructField, value interface{}) (result map[string]interface{}) {
+ result = m
+ if tagName := structField.Tag.Get("m"); tagName == "" {
+ result[toUnexport(structField.Name)] = value
+ } else {
+ result[tagName] = value
+ }
+ return
+}
+
+// toUnexport is to lower the first letter
+func toUnexport(a string) string {
+ return strings.ToLower(a[:1]) + a[1:]
+}
+
+// isPrimitive determines if the object is primitive
+func isPrimitive(obj interface{}) bool {
+ if _, ok := obj.(time.Time); ok {
+ return true
+ }
+ return false
+}
diff --git a/filter/generic/filter_test.go b/filter/generic/generalizer/map_test.go
similarity index 50%
copy from filter/generic/filter_test.go
copy to filter/generic/generalizer/map_test.go
index 815a6ae..e90f679 100644
--- a/filter/generic/filter_test.go
+++ b/filter/generic/generalizer/map_test.go
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package generic
+package generalizer
import (
"reflect"
@@ -27,30 +27,32 @@ import (
"github.com/stretchr/testify/assert"
)
-func TestStruct2MapAll(t *testing.T) {
- var testData struct {
- AaAa string `m:"aaAa"`
- BaBa string
- CaCa struct {
- AaAa string
- BaBa string `m:"baBa"`
- XxYy struct {
- xxXx string `m:"xxXx"`
- Xx string `m:"xx"`
- } `m:"xxYy"`
- } `m:"caCa"`
- DaDa time.Time
- EeEe int
- }
- testData.AaAa = "1"
- testData.BaBa = "1"
- testData.CaCa.BaBa = "2"
- testData.CaCa.AaAa = "2"
- testData.CaCa.XxYy.xxXx = "3"
- testData.CaCa.XxYy.Xx = "3"
- testData.DaDa = time.Date(2020, 10, 29, 2, 34, 0, 0, time.Local)
- testData.EeEe = 100
- m := struct2MapAll(testData).(map[string]interface{})
+type testPlainObj struct {
+ AaAa string `m:"aaAa"`
+ BaBa string
+ CaCa struct {
+ AaAa string
+ BaBa string `m:"baBa"`
+ XxYy struct {
+ xxXx string `m:"xxXx"`
+ Xx string `m:"xx"`
+ } `m:"xxYy"`
+ } `m:"caCa"`
+ DaDa time.Time
+ EeEe int
+}
+
+func TestObjToMap(t *testing.T) {
+ obj := &testPlainObj{}
+ obj.AaAa = "1"
+ obj.BaBa = "1"
+ obj.CaCa.BaBa = "2"
+ obj.CaCa.AaAa = "2"
+ obj.CaCa.XxYy.xxXx = "3"
+ obj.CaCa.XxYy.Xx = "3"
+ obj.DaDa = time.Date(2020, 10, 29, 2, 34, 0, 0, time.Local)
+ obj.EeEe = 100
+ m := objToMap(obj).(map[string]interface{})
assert.Equal(t, "1", m["aaAa"].(string))
assert.Equal(t, "1", m["baBa"].(string))
assert.Equal(t, "2", m["caCa"].(map[string]interface{})["aaAa"].(string))
@@ -71,7 +73,7 @@ type testStruct struct {
} `m:"xxYy"`
}
-func TestStruct2MapAllSlice(t *testing.T) {
+func TestObjToMap_Slice(t *testing.T) {
var testData struct {
AaAa string `m:"aaAa"`
BaBa string
@@ -85,7 +87,7 @@ func TestStruct2MapAllSlice(t *testing.T) {
tmp.XxYy.xxXx = "3"
tmp.XxYy.Xx = "3"
testData.CaCa = append(testData.CaCa, tmp)
- m := struct2MapAll(testData).(map[string]interface{})
+ m := objToMap(testData).(map[string]interface{})
assert.Equal(t, "1", m["aaAa"].(string))
assert.Equal(t, "1", m["baBa"].(string))
@@ -96,7 +98,7 @@ func TestStruct2MapAllSlice(t *testing.T) {
assert.Equal(t, reflect.Map, reflect.TypeOf(m["caCa"].([]interface{})[0].(map[string]interface{})["xxYy"]).Kind())
}
-func TestStruct2MapAllMap(t *testing.T) {
+func TestObjToMap_Map(t *testing.T) {
var testData struct {
AaAa string
Baba map[string]interface{}
@@ -120,7 +122,7 @@ func TestStruct2MapAllMap(t *testing.T) {
testData.CaCa["k1"] = "v1"
testData.CaCa["kv2"] = "v2"
testData.IntMap[1] = 1
- m := struct2MapAll(testData)
+ m := objToMap(testData)
assert.Equal(t, reflect.Map, reflect.TypeOf(m).Kind())
mappedStruct := m.(map[string]interface{})
@@ -135,3 +137,113 @@ func TestStruct2MapAllMap(t *testing.T) {
assert.Equal(t, reflect.Map, reflect.TypeOf(intMap).Kind())
assert.Equal(t, 1, intMap.(map[interface{}]interface{})[1])
}
+
+var mockMapGeneralizer = GetMapGeneralizer()
+
+type mockParent struct {
+ Gender, Email, Name string
+ Age int
+ Child *mockChild
+}
+
+func (p mockParent) JavaClassName() string {
+ return "org.apache.dubbo.mockParent"
+}
+
+type mockChild struct {
+ Gender, Email, Name string
+ Age int
+}
+
+func (c *mockChild) JavaClassName() string {
+ return "org.apache.dubbo.mockChild"
+}
+
+func TestPOJOClassName(t *testing.T) {
+ c := &mockChild{
+ Age: 20,
+ Gender: "male",
+ Email: "lmc@example.com",
+ Name: "lmc",
+ }
+ p := mockParent{
+ Age: 30,
+ Gender: "male",
+ Email: "xavierniu@example.com",
+ Name: "xavierniu",
+ Child: c,
+ }
+
+ m, err := mockMapGeneralizer.Generalize(p)
+ assert.Nil(t, err)
+ // parent
+ assert.Equal(t, "xavierniu", m.(map[string]interface{})["name"].(string))
+ assert.Equal(t, 30, m.(map[string]interface{})["age"].(int))
+ assert.Equal(t, "org.apache.dubbo.mockParent", m.(map[string]interface{})["class"].(string))
+ // child
+ assert.Equal(t, 20, m.(map[string]interface{})["child"].(map[string]interface{})["age"].(int))
+ assert.Equal(t, "lmc", m.(map[string]interface{})["child"].(map[string]interface{})["name"].(string))
+ assert.Equal(t, "org.apache.dubbo.mockChild", m.(map[string]interface{})["child"].(map[string]interface{})["class"].(string))
+
+ r, err := mockMapGeneralizer.Realize(m, reflect.TypeOf(p))
+ assert.Nil(t, err)
+ rMockParent, ok := r.(mockParent)
+ assert.True(t, ok)
+ // parent
+ assert.Equal(t, "xavierniu", rMockParent.Name)
+ assert.Equal(t, 30, rMockParent.Age)
+ // child
+ assert.Equal(t, "lmc", rMockParent.Child.Name)
+ assert.Equal(t, 20, rMockParent.Child.Age)
+}
+
+func TestPOJOArray(t *testing.T) {
+ c1 := &mockChild{
+ Age: 20,
+ Gender: "male",
+ Email: "lmc@example.com",
+ Name: "lmc",
+ }
+ c2 := &mockChild{
+ Age: 21,
+ Gender: "male",
+ Email: "lmc1@example.com",
+ Name: "lmc1",
+ }
+
+ pojoArr := []*mockChild{c1, c2}
+
+ m, err := mockMapGeneralizer.Generalize(pojoArr)
+ assert.Nil(t, err)
+ assert.Equal(t, "lmc", m.([]interface{})[0].(map[string]interface{})["name"].(string))
+ assert.Equal(t, 20, m.([]interface{})[0].(map[string]interface{})["age"].(int))
+ assert.Equal(t, "lmc1", m.([]interface{})[1].(map[string]interface{})["name"].(string))
+ assert.Equal(t, 21, m.([]interface{})[1].(map[string]interface{})["age"].(int))
+
+ r, err := mockMapGeneralizer.Realize(m, reflect.TypeOf(pojoArr))
+ assert.Nil(t, err)
+ rPojoArr, ok := r.([]*mockChild)
+ assert.True(t, ok)
+ assert.Equal(t, "lmc", rPojoArr[0].Name)
+ assert.Equal(t, 20, rPojoArr[0].Age)
+ assert.Equal(t, "lmc1", rPojoArr[1].Name)
+ assert.Equal(t, 21, rPojoArr[1].Age)
+}
+
+func TestNullField(t *testing.T) {
+ p := mockParent{
+ Age: 30,
+ Gender: "male",
+ Email: "xavierniu@example.com",
+ Name: "xavierniu",
+ }
+
+ m, _ := mockMapGeneralizer.Generalize(p)
+ assert.Nil(t, m.(map[string]interface{})["child"])
+
+ r, err := mockMapGeneralizer.Realize(m, reflect.TypeOf(p))
+ assert.Nil(t, err)
+ rMockParent, ok := r.(mockParent)
+ assert.True(t, ok)
+ assert.Nil(t, rMockParent.Child)
+}
diff --git a/filter/generic/generalizer/protobuf_json.go b/filter/generic/generalizer/protobuf_json.go
new file mode 100644
index 0000000..200f649
--- /dev/null
+++ b/filter/generic/generalizer/protobuf_json.go
@@ -0,0 +1,92 @@
+/*
+ * 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 generalizer
+
+import (
+ "reflect"
+ "sync"
+)
+
+import (
+ perrors "github.com/pkg/errors"
+
+ "google.golang.org/protobuf/encoding/protojson"
+
+ "google.golang.org/protobuf/proto"
+)
+
+var (
+ protobufJsonGeneralizer Generalizer
+ protobufJsonGeneralizerOnce sync.Once
+)
+
+func GetProtobufJsonGeneralizer() Generalizer {
+ protobufJsonGeneralizerOnce.Do(func() {
+ protobufJsonGeneralizer = &ProtobufJsonGeneralizer{}
+ })
+ return protobufJsonGeneralizer
+}
+
+// ProtobufJsonGeneralizer generalizes an object to json and realizes an object from json using protobuf.
+// Currently, ProtobufJsonGeneralizer is disabled temporarily until the triple protocol is ready.
+type ProtobufJsonGeneralizer struct{}
+
+func (g *ProtobufJsonGeneralizer) Generalize(obj interface{}) (interface{}, error) {
+ message, ok := obj.(proto.Message)
+ if !ok {
+ return nil, perrors.Errorf("unexpected type of obj(=%T), wanted is proto.Message", obj)
+ }
+
+ jsonbytes, err := protojson.Marshal(message)
+ if err != nil {
+ return nil, err
+ }
+
+ return string(jsonbytes), nil
+}
+
+func (g *ProtobufJsonGeneralizer) Realize(obj interface{}, typ reflect.Type) (interface{}, error) {
+ jsonbytes, ok := obj.(string)
+ if !ok {
+ return nil, perrors.Errorf("unexpected type of obj(=%T), wanted is string", obj)
+ }
+
+ // typ represents a struct instead of a pointer
+ for typ.Kind() == reflect.Ptr {
+ typ = typ.Elem()
+ }
+
+ // create the target object
+ ret, ok := reflect.New(typ).Interface().(proto.Message)
+ if !ok {
+ return nil, perrors.Errorf("the type of obj(=%s) should be proto.Message", typ)
+ }
+
+ // get the values from json
+ err := protojson.Unmarshal([]byte(jsonbytes), ret)
+ if err != nil {
+ return nil, err
+ }
+
+ return ret, nil
+}
+
+// GetType returns empty string for "protobuf-json"
+func (g *ProtobufJsonGeneralizer) GetType(_ interface{}) (string, error) {
+ return "", nil
+}
diff --git a/cluster/router/v3router/judger/double_range_match_judger_test.go b/filter/generic/generalizer/protobuf_json_test.go
similarity index 50%
copy from cluster/router/v3router/judger/double_range_match_judger_test.go
copy to filter/generic/generalizer/protobuf_json_test.go
index e8c6b6f..7103141 100644
--- a/cluster/router/v3router/judger/double_range_match_judger_test.go
+++ b/filter/generic/generalizer/protobuf_json_test.go
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-package judger
+package generalizer
import (
- "dubbo.apache.org/dubbo-go/v3/config"
+ "reflect"
"testing"
)
@@ -26,19 +26,34 @@ import (
"github.com/stretchr/testify/assert"
)
-func TestDoubleRangeMatchJudger(t *testing.T) {
- assert.True(t, newDoubleRangeMatchJudger(&config.DoubleRangeMatch{
- Start: 1.0,
- End: 1.5,
- }).Judge(1.3))
+func TestProtobufJsonGeneralizer(t *testing.T) {
+ g := GetProtobufJsonGeneralizer()
- assert.False(t, newDoubleRangeMatchJudger(&config.DoubleRangeMatch{
- Start: 1.0,
- End: 1.5,
- }).Judge(1.9))
+ req := &RequestType{
+ Id: 1,
+ }
+ reqjson, err := g.Generalize(req)
+ assert.Nil(t, err)
+ rreq, err := g.Realize(reqjson, reflect.TypeOf(req))
+ assert.Nil(t, err)
+ reqobj, ok := rreq.(*RequestType)
+ assert.True(t, ok)
+ assert.Equal(t, req.Id, reqobj.GetId())
- assert.False(t, newDoubleRangeMatchJudger(&config.DoubleRangeMatch{
- Start: 1.0,
- End: 1.5,
- }).Judge(0.9))
+ resp := &ResponseType{
+ Code: 200,
+ Id: 1,
+ Name: "xavierniu",
+ Message: "Nice to meet you",
+ }
+ respjson, err := g.Generalize(resp)
+ assert.Nil(t, err)
+ rresp, err := g.Realize(respjson, reflect.TypeOf(resp))
+ assert.Nil(t, err)
+ respobj, ok := rresp.(*ResponseType)
+ assert.True(t, ok)
+ assert.Equal(t, resp.Code, respobj.GetCode())
+ assert.Equal(t, resp.Id, respobj.GetId())
+ assert.Equal(t, resp.Name, respobj.GetName())
+ assert.Equal(t, resp.Message, respobj.GetMessage())
}
diff --git a/filter/generic/service_filter.go b/filter/generic/service_filter.go
index 1bcd982..2b6f7e4 100644
--- a/filter/generic/service_filter.go
+++ b/filter/generic/service_filter.go
@@ -19,12 +19,11 @@ package generic
import (
"context"
- "reflect"
)
import (
hessian "github.com/apache/dubbo-go-hessian2"
- "github.com/mitchellh/mapstructure"
+
perrors "github.com/pkg/errors"
)
@@ -38,90 +37,95 @@ import (
invocation2 "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
)
-const (
- // nolint
- GENERIC_SERIALIZATION_DEFAULT = "true"
-)
-
func init() {
extension.SetFilter(constant.GenericServiceFilterKey, func() filter.Filter {
return &ServiceFilter{}
})
}
-// nolint
+// ServiceFilter is for Server
type ServiceFilter struct{}
-// Invoke is used to call service method by invocation
func (f *ServiceFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
- logger.Infof("invoking generic service filter.")
- logger.Debugf("generic service filter methodName:%v,args:%v", invocation.MethodName(), len(invocation.Arguments()))
-
- if invocation.MethodName() != constant.GENERIC || len(invocation.Arguments()) != 3 {
+ if !isGenericInvocation(invocation) {
return invoker.Invoke(ctx, invocation)
}
- var (
- ok bool
- err error
- methodName string
- newParams []interface{}
- genericKey string
- argsType []reflect.Type
- oldParams []hessian.Object
- )
-
- url := invoker.GetURL()
- methodName = invocation.Arguments()[0].(string)
- // get service
- svc := common.ServiceMap.GetServiceByServiceKey(url.Protocol, url.ServiceKey())
- // get method
- method := svc.Method()[methodName]
+ // get real invocation info from the generic invocation
+ mtdname := invocation.Arguments()[0].(string)
+ // types are not required in dubbo-go, for dubbo-go client to dubbo-go server, types could be nil
+ types := invocation.Arguments()[1]
+ args := invocation.Arguments()[2].([]hessian.Object)
+
+ logger.Debugf(`received a generic invocation:
+ MethodName: %s,
+ Types: %s,
+ Args: %s
+ `, mtdname, types, args)
+
+ // get the type of the argument
+ ivkUrl := invoker.GetURL()
+ svc := common.ServiceMap.GetServiceByServiceKey(ivkUrl.Protocol, ivkUrl.ServiceKey())
+ method := svc.Method()[mtdname]
if method == nil {
- logger.Errorf("[Generic Service Filter] Don't have this method: %s", methodName)
- return &protocol.RPCResult{}
- }
- argsType = method.ArgsType()
- genericKey = invocation.AttachmentsByKey(constant.GENERIC_KEY, GENERIC_SERIALIZATION_DEFAULT)
- if genericKey == GENERIC_SERIALIZATION_DEFAULT {
- oldParams, ok = invocation.Arguments()[2].([]hessian.Object)
- } else {
- logger.Errorf("[Generic Service Filter] Don't support this generic: %s", genericKey)
- return &protocol.RPCResult{}
- }
- if !ok {
- logger.Errorf("[Generic Service Filter] wrong serialization")
- return &protocol.RPCResult{}
+ return &protocol.RPCResult{
+ Err: perrors.Errorf("\"%s\" method is not found, service key: %s", mtdname, ivkUrl.ServiceKey()),
+ }
}
- if len(oldParams) != len(argsType) {
- logger.Errorf("[Generic Service Filter] method:%s invocation arguments number was wrong", methodName)
- return &protocol.RPCResult{}
+ argsType := method.ArgsType()
+
+ // get generic info from attachments of invocation, the default value is "true"
+ generic := invocation.AttachmentsByKey(constant.GENERIC_KEY, constant.GenericSerializationDefault)
+ // get generalizer according to value in the `generic`
+ g := getGeneralizer(generic)
+
+ //if strings.ToLower(generic) == constant.GenericSerializationProtobuf {
+ // if len(args) > 1 {
+ // logger.Warnf("\"%s\" only supports one argument, but we get %d arguments actually",
+ // constant.GenericSerializationProtobuf, len(args))
+ // }
+ //}
+
+ if len(args) != len(argsType) {
+ return &protocol.RPCResult{
+ Err: perrors.Errorf("the number of args(=%d) is not matched with \"%s\" method", len(args), mtdname),
+ }
}
- // oldParams convert to newParams
- newParams = make([]interface{}, len(oldParams))
- for i := range argsType {
- newParam := reflect.New(argsType[i]).Interface()
- err = mapstructure.Decode(oldParams[i], newParam)
- newParam = reflect.ValueOf(newParam).Elem().Interface()
+
+ // realize
+ newargs := make([]interface{}, len(argsType))
+ for i := 0; i < len(argsType); i++ {
+ newarg, err := g.Realize(args[i], argsType[i])
if err != nil {
- logger.Errorf("[Generic Service Filter] decode arguments map to struct wrong: error{%v}", perrors.WithStack(err))
- return &protocol.RPCResult{}
+ return &protocol.RPCResult{
+ Err: perrors.Errorf("realization failed, %v", err),
+ }
}
- newParams[i] = newParam
+ newargs[i] = newarg
}
- newInvocation := invocation2.NewRPCInvocation(methodName, newParams, invocation.Attachments())
- newInvocation.SetReply(invocation.Reply())
- return invoker.Invoke(ctx, newInvocation)
+
+ // build a normal invocation
+ newivc := invocation2.NewRPCInvocation(mtdname, newargs, invocation.Attachments())
+ newivc.SetReply(invocation.Reply())
+
+ return invoker.Invoke(ctx, newivc)
}
-// nolint
-func (f *ServiceFilter) OnResponse(ctx context.Context, result protocol.Result, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
- if invocation.MethodName() == constant.GENERIC && len(invocation.Arguments()) == 3 && result.Result() != nil {
- v := reflect.ValueOf(result.Result())
- if v.Kind() == reflect.Ptr {
- v = v.Elem()
+func (f *ServiceFilter) OnResponse(_ context.Context, result protocol.Result, _ protocol.Invoker, invocation protocol.Invocation) protocol.Result {
+ if isGenericInvocation(invocation) && result.Result() != nil {
+ // get generic info from attachments of invocation, the default value is "true"
+ generic := invocation.AttachmentsByKey(constant.GENERIC_KEY, constant.GenericSerializationDefault)
+ // get generalizer according to value in the `generic`
+ g := getGeneralizer(generic)
+
+ obj, err := g.Generalize(result.Result())
+ if err != nil {
+ err = perrors.Errorf("generalizaion failed, %v", err)
+ result.SetError(err)
+ result.SetResult(nil)
+ return result
}
- result.SetResult(struct2MapAll(v.Interface()))
+ result.SetResult(obj)
}
return result
}
diff --git a/filter/generic/service_filter_test.go b/filter/generic/service_filter_test.go
index f049b27..c6eb499 100644
--- a/filter/generic/service_filter_test.go
+++ b/filter/generic/service_filter_test.go
@@ -19,132 +19,196 @@ package generic
import (
"context"
- "errors"
- "reflect"
+ "fmt"
+ "net/url"
"testing"
)
import (
hessian "github.com/apache/dubbo-go-hessian2"
+
+ "github.com/golang/mock/gomock"
+
+ perrors "github.com/pkg/errors"
+
"github.com/stretchr/testify/assert"
)
import (
"dubbo.apache.org/dubbo-go/v3/common"
- "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/filter/generic/generalizer"
"dubbo.apache.org/dubbo-go/v3/protocol"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
+ "dubbo.apache.org/dubbo-go/v3/protocol/mock"
)
-type TestStruct struct {
- AaAa string
- BaBa string `m:"baBa"`
- XxYy struct {
- xxXx string `m:"xxXx"`
- Xx string `m:"xx"`
- } `m:"xxYy"`
-}
+type MockHelloService struct{}
-func (c *TestStruct) JavaClassName() string {
- return "com.test.testStruct"
+func (s *MockHelloService) Hello(who string) (string, error) {
+ return fmt.Sprintf("hello, %s", who), nil
}
-type TestService struct{}
-
-// nolint
-func (ts *TestService) MethodOne(_ context.Context, test1 *TestStruct, test2 []TestStruct,
- test3 interface{}, test4 []interface{}, test5 *string) (*TestStruct, error) {
- if test1 == nil {
- return nil, errors.New("param test1 is nil")
- }
- if test2 == nil {
- return nil, errors.New("param test2 is nil")
- }
- if test3 == nil {
- return nil, errors.New("param test3 is nil")
- }
- if test4 == nil {
- return nil, errors.New("param test4 is nil")
- }
- if test5 == nil {
- return nil, errors.New("param test5 is nil")
- }
- return &TestStruct{}, nil
+func (s *MockHelloService) JavaClassName() string {
+ return "org.apache.dubbo.hello"
}
-// nolint
-func (*TestService) Reference() string {
- return "com.test.Path"
+func (s *MockHelloService) Reference() string {
+ return "org.apache.dubbo.test"
}
-func TestGenericServiceFilterInvoke(t *testing.T) {
- hessian.RegisterPOJO(&TestStruct{})
- methodName := "$invoke"
- m := make(map[string]interface{})
- m["AaAa"] = "nihao"
- x := make(map[string]interface{})
- x["xxXX"] = "nihaoxxx"
- m["XxYy"] = x
- aurguments := []interface{}{
- "MethodOne",
- nil,
- []hessian.Object{
- hessian.Object(m),
- hessian.Object(append(make([]map[string]interface{}, 1), m)),
- hessian.Object("111"),
- hessian.Object(append(make([]map[string]interface{}, 1), m)),
- hessian.Object("222"),
- },
+func (s *MockHelloService) HelloPB(req *generalizer.RequestType) (*generalizer.ResponseType, error) {
+ if req.GetId() == 1 {
+ return &generalizer.ResponseType{
+ Code: 200,
+ Id: 1,
+ Name: "xavierniu",
+ Message: "Nice to meet you",
+ }, nil
}
- s := &TestService{}
- _, _ = common.ServiceMap.Register("com.test.Path", "testprotocol", "", "", s)
- rpcInvocation := invocation.NewRPCInvocation(methodName, aurguments, nil)
+ return nil, perrors.Errorf("people not found")
+}
+
+func TestServiceFilter_Invoke(t *testing.T) {
filter := &ServiceFilter{}
- url, _ := common.NewURL("testprotocol://127.0.0.1:20000/com.test.Path")
- result := filter.Invoke(context.Background(), &proxy_factory.ProxyInvoker{BaseInvoker: *protocol.NewBaseInvoker(url)}, rpcInvocation)
- assert.NotNil(t, result)
+
+ ctrl := gomock.NewController(t)
+ defer ctrl.Finish()
+
+ mockInvoker := mock.NewMockInvoker(ctrl)
+
+ // methodName is not "$invoke"
+ invocation1 := invocation.NewRPCInvocation("test", nil, nil)
+ mockInvoker.EXPECT().Invoke(gomock.Eq(invocation1))
+ _ = filter.Invoke(context.Background(), mockInvoker, invocation1)
+ // arguments are nil
+ invocation2 := invocation.NewRPCInvocation(constant.GENERIC, nil, nil)
+ mockInvoker.EXPECT().Invoke(gomock.Eq(invocation2))
+ _ = filter.Invoke(context.Background(), mockInvoker, invocation2)
+ // the number of arguments is not 3
+ invocation3 := invocation.NewRPCInvocation(constant.GENERIC, []interface{}{"hello"}, nil)
+ mockInvoker.EXPECT().Invoke(gomock.Eq(invocation3))
+ _ = filter.Invoke(context.Background(), mockInvoker, invocation3)
+
+ // hello service
+ service := &MockHelloService{}
+ // invoke URL
+ ivkUrl := common.NewURLWithOptions(
+ common.WithProtocol("test"),
+ common.WithParams(url.Values{}),
+ common.WithParamsValue(constant.INTERFACE_KEY, service.Reference()),
+ common.WithParamsValue(constant.GENERIC_KEY, constant.GenericSerializationDefault))
+ // registry RPC service
+ _, err := common.ServiceMap.Register(ivkUrl.GetParam(constant.INTERFACE_KEY, ""),
+ ivkUrl.Protocol,
+ "",
+ "",
+ service)
+ assert.Nil(t, err)
+
+ // mock
+ mockInvoker.EXPECT().GetUrl().Return(ivkUrl).Times(3)
+
+ // invoke a method without errors using default generalization
+ invocation4 := invocation.NewRPCInvocation(constant.GENERIC,
+ []interface{}{
+ "Hello",
+ []string{"java.lang.String"},
+ []hessian.Object{"world"},
+ }, map[string]interface{}{
+ constant.GENERIC_KEY: "true",
+ })
+ // invoke a non-existed method
+ invocation5 := invocation.NewRPCInvocation(constant.GENERIC,
+ []interface{}{
+ "hello11",
+ []string{"java.lang.String"},
+ []hessian.Object{"world"},
+ }, map[string]interface{}{
+ constant.GENERIC_KEY: "true",
+ })
+ // invoke a method with incorrect arguments
+ invocation6 := invocation.NewRPCInvocation(constant.GENERIC,
+ []interface{}{
+ "Hello",
+ []string{"java.lang.String", "java.lang.String"},
+ []hessian.Object{"world", "haha"},
+ }, map[string]interface{}{
+ constant.GENERIC_KEY: "true",
+ })
+ // invoke a method without errors using protobuf-json generalization
+ //invocation7 := invocation.NewRPCInvocation(constant.GENERIC,
+ // []interface{}{
+ // "HelloPB",
+ // []string{},
+ // []hessian.Object{"{\"id\":1}"},
+ // }, map[string]interface{}{
+ // constant.GENERIC_KEY: constant.GenericSerializationProtobuf,
+ // })
+
+ mockInvoker.EXPECT().Invoke(gomock.All(
+ gomock.Not(invocation1),
+ gomock.Not(invocation2),
+ gomock.Not(invocation3),
+ )).DoAndReturn(
+ func(invocation protocol.Invocation) protocol.Result {
+ switch invocation.MethodName() {
+ case "Hello":
+ who := invocation.Arguments()[0].(string)
+ result, _ := service.Hello(who)
+ return &protocol.RPCResult{
+ Rest: result,
+ }
+ case "HelloPB":
+ req := invocation.Arguments()[0].(*generalizer.RequestType)
+ result, _ := service.HelloPB(req)
+ return &protocol.RPCResult{
+ Rest: result,
+ }
+ default:
+ panic("this branch shouldn't be reached")
+ }
+ }).AnyTimes()
+
+ result := filter.Invoke(context.Background(), mockInvoker, invocation4)
assert.Nil(t, result.Error())
+ assert.Equal(t, "hello, world", result.Result())
+
+ result = filter.Invoke(context.Background(), mockInvoker, invocation5)
+ assert.Equal(t,
+ fmt.Sprintf("\"hello11\" method is not found, service key: %s", ivkUrl.ServiceKey()),
+ fmt.Sprintf("%v", result.Error().(error)))
+
+ result = filter.Invoke(context.Background(), mockInvoker, invocation6)
+ assert.Equal(t,
+ "the number of args(=2) is not matched with \"Hello\" method",
+ fmt.Sprintf("%v", result.Error().(error)))
+
+ //result = filter.Invoke(context.Background(), mockInvoker, invocation7)
+ //assert.Equal(t, int64(200), result.Result().(*generalizer.ResponseType).GetCode())
+ //assert.Equal(t, int64(1), result.Result().(*generalizer.ResponseType).GetId())
+ //assert.Equal(t, "xavierniu", result.Result().(*generalizer.ResponseType).GetName())
+ //assert.Equal(t, "Nice to meet you", result.Result().(*generalizer.ResponseType).GetMessage())
+
}
-func TestGenericServiceFilterResponseTestStruct(t *testing.T) {
- ts := &TestStruct{
- AaAa: "aaa",
- BaBa: "bbb",
- XxYy: struct {
- xxXx string `m:"xxXx"`
- Xx string `m:"xx"`
- }{},
- }
- result := &protocol.RPCResult{
- Rest: ts,
- }
- aurguments := []interface{}{
- "MethodOne",
- nil,
- []hessian.Object{nil},
- }
+func TestServiceFilter_OnResponse(t *testing.T) {
filter := &ServiceFilter{}
- methodName := "$invoke"
- rpcInvocation := invocation.NewRPCInvocation(methodName, aurguments, nil)
- r := filter.OnResponse(context.TODO(), result, nil, rpcInvocation)
- assert.NotNil(t, r.Result())
- assert.Equal(t, reflect.ValueOf(r.Result()).Kind(), reflect.Map)
-}
-func TestGenericServiceFilterResponseString(t *testing.T) {
- str := "111"
- result := &protocol.RPCResult{
- Rest: str,
- }
- aurguments := []interface{}{
- "MethodOne",
- nil,
- []hessian.Object{nil},
+ // invoke a method without errors
+ invocation1 := invocation.NewRPCInvocation(constant.GENERIC,
+ []interface{}{
+ "hello",
+ []interface{}{"java.lang.String"},
+ []interface{}{"world"},
+ }, map[string]interface{}{
+ constant.GENERIC_KEY: "true",
+ })
+
+ rpcResult := &protocol.RPCResult{
+ Rest: "result",
}
- filter := &ServiceFilter{}
- methodName := "$invoke"
- rpcInvocation := invocation.NewRPCInvocation(methodName, aurguments, nil)
- r := filter.OnResponse(context.TODO(), result, nil, rpcInvocation)
- assert.NotNil(t, r.Result())
- assert.Equal(t, reflect.ValueOf(r.Result()).Kind(), reflect.String)
+
+ result := filter.OnResponse(context.Background(), rpcResult, nil, invocation1)
+ assert.Equal(t, "result", result.Result())
}
diff --git a/filter/generic/util.go b/filter/generic/util.go
new file mode 100644
index 0000000..a7fe467
--- /dev/null
+++ b/filter/generic/util.go
@@ -0,0 +1,80 @@
+/*
+ * 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 generic
+
+import (
+ "strings"
+)
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/filter/generic/generalizer"
+ "dubbo.apache.org/dubbo-go/v3/protocol"
+)
+
+// isCallingToGenericService check if it calls to a generic service
+func isCallingToGenericService(invoker protocol.Invoker, invocation protocol.Invocation) bool {
+ return isGeneric(invoker.GetURL().GetParam(constant.GENERIC_KEY, "")) &&
+ invocation.MethodName() != constant.GENERIC
+}
+
+// isMakingAGenericCall check if it is making a generic call to a generic service
+func isMakingAGenericCall(invoker protocol.Invoker, invocation protocol.Invocation) bool {
+ return isGeneric(invoker.GetURL().GetParam(constant.GENERIC_KEY, "")) &&
+ invocation.MethodName() == constant.GENERIC &&
+ invocation.Arguments() != nil &&
+ len(invocation.Arguments()) == 3
+}
+
+// isGeneric receives a generic field from url of invoker to determine whether the service is generic or not
+func isGeneric(generic string) bool {
+ lowerGeneric := strings.ToLower(generic)
+ return lowerGeneric == constant.GenericSerializationDefault
+}
+
+// isGenericInvocation determines if the invocation has generic format
+func isGenericInvocation(invocation protocol.Invocation) bool {
+ return invocation.MethodName() == constant.GENERIC &&
+ invocation.Arguments() != nil &&
+ len(invocation.Arguments()) == 3
+}
+
+// toUnexport is to lower the first letter
+func toUnexport(a string) string {
+ return strings.ToLower(a[:1]) + a[1:]
+}
+
+// toExport is to upper the first letter
+func toExport(a string) string {
+ return strings.ToUpper(a[:1]) + a[1:]
+}
+
+func getGeneralizer(generic string) (g generalizer.Generalizer) {
+ switch strings.ToLower(generic) {
+ case constant.GenericSerializationDefault:
+ g = generalizer.GetMapGeneralizer()
+ case constant.GenericSerializationGson:
+ g = generalizer.GetGsonGeneralizer()
+
+ default:
+ logger.Debugf("\"%s\" is not supported, use the default generalizer(MapGeneralizer)", generic)
+ g = generalizer.GetMapGeneralizer()
+ }
+ return
+}
diff --git a/filter/hystrix/filter.go b/filter/hystrix/filter.go
index 39e0670..70dffcb 100644
--- a/filter/hystrix/filter.go
+++ b/filter/hystrix/filter.go
@@ -26,7 +26,9 @@ import (
import (
"github.com/afex/hystrix-go/hystrix"
+
perrors "github.com/pkg/errors"
+
"gopkg.in/yaml.v2"
)
diff --git a/filter/hystrix/filter_test.go b/filter/hystrix/filter_test.go
index fdf5e76..4718fa2 100644
--- a/filter/hystrix/filter_test.go
+++ b/filter/hystrix/filter_test.go
@@ -25,7 +25,9 @@ import (
import (
"github.com/afex/hystrix-go/hystrix"
+
"github.com/pkg/errors"
+
"github.com/stretchr/testify/assert"
)
diff --git a/filter/sentinel/filter.go b/filter/sentinel/filter.go
index 474ad2e..ceadb32 100644
--- a/filter/sentinel/filter.go
+++ b/filter/sentinel/filter.go
@@ -42,7 +42,6 @@ import (
// 1. Must initialize Sentinel Go run environment,
// refer to https://github.com/alibaba/sentinel-golang/blob/master/api/init.go
// 2. Register rules for resources user want to guard
-
func init() {
extension.SetFilter(constant.SentinelConsumerFilterKey, func() filter.Filter {
return &ConsumerFilter{}
diff --git a/filter/sentinel/filter_test.go b/filter/sentinel/filter_test.go
index 20710f1..521c42a 100644
--- a/filter/sentinel/filter_test.go
+++ b/filter/sentinel/filter_test.go
@@ -26,6 +26,7 @@ import (
import (
"github.com/alibaba/sentinel-golang/core/flow"
+
"github.com/stretchr/testify/assert"
)
diff --git a/filter/tps/filter_test.go b/filter/tps/filter_test.go
index 3c8cce5..8e0a529 100644
--- a/filter/tps/filter_test.go
+++ b/filter/tps/filter_test.go
@@ -25,6 +25,7 @@ import (
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
diff --git a/filter/tps/limiter/method_service_test.go b/filter/tps/limiter/method_service_test.go
index f392494..df79def 100644
--- a/filter/tps/limiter/method_service_test.go
+++ b/filter/tps/limiter/method_service_test.go
@@ -18,13 +18,13 @@
package limiter
import (
- "dubbo.apache.org/dubbo-go/v3/filter"
"net/url"
"testing"
)
import (
"github.com/golang/mock/gomock"
+
"github.com/stretchr/testify/assert"
)
@@ -32,6 +32,7 @@ import (
"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/filter"
"dubbo.apache.org/dubbo-go/v3/filter/tps/strategy"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
)
diff --git a/filter/tps/strategy/mock.go b/filter/tps/strategy/mock.go
index d9b45d4..154d78b 100644
--- a/filter/tps/strategy/mock.go
+++ b/filter/tps/strategy/mock.go
@@ -22,11 +22,11 @@
package strategy
import (
- gomock "github.com/golang/mock/gomock"
+ reflect "reflect"
)
import (
- reflect "reflect"
+ gomock "github.com/golang/mock/gomock"
)
// MockTpsLimitStrategy is a mock of TpsLimitStrategy interface
diff --git a/go.mod b/go.mod
index 4f3c85b..bcf2c42 100644
--- a/go.mod
+++ b/go.mod
@@ -7,15 +7,14 @@ require (
github.com/Workiva/go-datastructures v1.0.52
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5
github.com/alibaba/sentinel-golang v1.0.2
- github.com/apache/dubbo-getty v1.4.3
+ github.com/apache/dubbo-getty v1.4.5
github.com/apache/dubbo-go-hessian2 v1.9.2
github.com/creasty/defaults v1.5.1
github.com/dubbogo/go-zookeeper v1.0.3
github.com/dubbogo/gost v1.11.16
- github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df
- github.com/emicklei/go-restful/v3 v3.4.0
- github.com/frankban/quicktest v1.4.1 // indirect
- github.com/fsnotify/fsnotify v1.4.9
+ github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf
+ github.com/emicklei/go-restful/v3 v3.5.2
+ github.com/fsnotify/fsnotify v1.5.0
github.com/ghodss/yaml v1.0.0
github.com/go-co-op/gocron v0.1.1
github.com/go-playground/validator/v10 v10.7.0
@@ -23,30 +22,30 @@ require (
github.com/golang/mock v1.4.4
github.com/golang/protobuf v1.5.2
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645
- github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267
- github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8
+ github.com/hashicorp/vault/sdk v0.2.1
+ github.com/jinzhu/copier v0.3.2
github.com/knadh/koanf v1.1.1
github.com/magiconair/properties v1.8.5
github.com/mitchellh/mapstructure v1.4.1
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
github.com/nacos-group/nacos-sdk-go v1.0.8
+ github.com/natefinch/lumberjack v2.0.0+incompatible
github.com/opentracing/opentracing-go v1.2.0
- github.com/pierrec/lz4 v2.2.6+incompatible // indirect
github.com/pkg/errors v0.9.1
- github.com/prometheus/client_golang v1.9.0
- github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b
- github.com/stretchr/objx v0.2.0 // indirect
+ github.com/prometheus/client_golang v1.11.0
+ github.com/satori/go.uuid v1.2.0
github.com/stretchr/testify v1.7.0
github.com/zouyx/agollo/v3 v3.4.5
- go.etcd.io/etcd/api/v3 v3.5.0-alpha.0
- go.etcd.io/etcd/client/v3 v3.5.0-alpha.0
+ go.etcd.io/etcd/api/v3 v3.5.0
+ go.etcd.io/etcd/client/v3 v3.5.0
go.etcd.io/etcd/server/v3 v3.5.0-alpha.0
go.uber.org/atomic v1.7.0
- go.uber.org/zap v1.16.0
+ go.uber.org/zap v1.17.0
google.golang.org/grpc v1.38.0
+ google.golang.org/protobuf v1.27.1
+ gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.16.9
k8s.io/apimachinery v0.16.9
k8s.io/client-go v0.16.9
- k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a // indirect
)
diff --git a/go.sum b/go.sum
index 231e668..2c8159f 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,4 @@
+bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
@@ -11,6 +12,7 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
@@ -24,6 +26,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/Julusian/godocdown v0.0.0-20170816220326-6d19f8ff2df8/go.mod h1:INZr5t32rG59/5xeltqoCJoNY7e5x/3xoY9WSWVWg74=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
+github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
+github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
@@ -49,8 +53,8 @@ github.com/alibaba/sentinel-golang v1.0.2/go.mod h1:QsB99f/z35D2AiMrAWwgWE85kDTk
github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 h1:zOVTBdCKFd9JbCKz9/nt+FovbjPFmb7mUnp8nH9fQBA=
github.com/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/apache/dubbo-getty v1.4.3 h1:PCKpryDasKOxwT5MBC6MIMO+0NLOaHF6Xco9YXQw7HI=
-github.com/apache/dubbo-getty v1.4.3/go.mod h1:ansXgKxxyhCOiQL29nO5ce1MDcEKmCyZuNR9oMs3hek=
+github.com/apache/dubbo-getty v1.4.5 h1:MptKbjC0n2Mo/8eFPwirSInH2BfdNG4IZch43PdNvIM=
+github.com/apache/dubbo-getty v1.4.5/go.mod h1:mcDyiu7M/TVrYDyL8TxDemQkOdvEqqHSQ4jOuYejY1w=
github.com/apache/dubbo-go-hessian2 v1.9.1/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE=
github.com/apache/dubbo-go-hessian2 v1.9.2 h1:XuI8KvENSfKiAhiCBS4RNihmQDoPNmGWKT3gTui0p9A=
github.com/apache/dubbo-go-hessian2 v1.9.2/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE=
@@ -59,11 +63,14 @@ github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs=
+github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
@@ -98,6 +105,16 @@ github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoC
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY=
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
+github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
+github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
+github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
+github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
+github.com/containerd/continuity v0.0.0-20200709052629-daa8e1ccc0bc/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
+github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
+github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
+github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
+github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
@@ -106,8 +123,9 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg=
github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
+github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
+github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
@@ -123,11 +141,15 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
+github.com/docker/docker v1.4.2-0.20200319182547-c7ad2b866182/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
github.com/dubbogo/go-zookeeper v1.0.3 h1:UkuY+rBsxdT7Bs63QAzp9z7XqQ53W1j8E5rwl83me8g=
github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
-github.com/dubbogo/gost v1.10.1/go.mod h1:+mQGS51XQEUWZP2JeGZTxJwipjRKtJO7Tr+FOg+72rI=
+github.com/dubbogo/gost v1.11.12/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
github.com/dubbogo/gost v1.11.16 h1:fvOw8aKQ0BuUYuD+MaXAYFvT7tg2l7WAS5SL5gZJpFs=
github.com/dubbogo/gost v1.11.16/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI=
github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
@@ -135,6 +157,8 @@ github.com/dubbogo/net v0.0.3 h1:2k53mh+1U8h1gFjJ8ykzyP4wNdAdgjc5moD+xVHI/AE=
github.com/dubbogo/net v0.0.3/go.mod h1:B6/ka3g8VzcyrmdCH4VkHP1K0aHeI37FmclS+TCwIBU=
github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df h1:YSfvAnU0ebwLqWnD+5HTTsFhqA+aE4Si2c10zBsUW7c=
github.com/dubbogo/triple v1.0.6-0.20210822081945-0b88cc0d10df/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
+github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf h1:lj0hNwbjk7UpqyEYo6Kz4poTH4w5UfyqI4Gl6x3HEqo=
+github.com/dubbogo/triple v1.0.6-0.20210826093718-8b877016f3bf/go.mod h1:tCl0mV54+V8Br9z71sFbS1IQUG41QKZUrW6FGaLheM0=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
@@ -147,8 +171,8 @@ github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo
github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful/v3 v3.4.0 h1:IIDhql3oyWZj1ay2xBZGb4sTOWMad0HVW8rwhVxN/Yk=
-github.com/emicklei/go-restful/v3 v3.4.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.5.2 h1:RCNMSbcGIVafG4ZfgIXIEHTaV59ZRsi41IvZ7RC9+ls=
+github.com/emicklei/go-restful/v3 v3.5.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -166,11 +190,12 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTg
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
-github.com/frankban/quicktest v1.4.1 h1:Wv2VwvNn73pAdFIVUQRXYDFp31lXKbqblIXo/Q5GPSg=
-github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ=
+github.com/frankban/quicktest v1.10.0 h1:Gfh+GAJZOAoKZsIZeZbdn2JF10kN1XHNvjsvQK8gVkE=
+github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fsnotify/fsnotify v1.5.0 h1:NO5hkcB+srp1x6QmwvNZLeaOgbM8cmBTN32THzjvu2k=
+github.com/fsnotify/fsnotify v1.5.0/go.mod h1:BX0DCEr5pT4jm2CnQdVP1lFV521fcCNcyEeNp4DQQDk=
github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -188,8 +213,10 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8=
+github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
@@ -212,9 +239,13 @@ github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8w
github.com/go-resty/resty/v2 v2.3.0 h1:JOOeAvjSlapTT92p8xiS19Zxev1neGikoHsXJeOq8So=
github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
+github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
+github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
@@ -263,6 +294,7 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
@@ -287,6 +319,7 @@ github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORR
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -299,8 +332,9 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.14.6 h1:8ERzHx8aj1Sc47mu9n/AksaKCSWrMchFtkdrS4BIj5o=
github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
@@ -313,14 +347,20 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
+github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
+github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
+github.com/hashicorp/go-retryablehttp v0.6.2/go.mod h1:gEx6HMUGxYYhJScX7W1Il64m6cc2C1mDaW3NQ9sY1FY=
+github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
@@ -333,8 +373,9 @@ github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09
github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk=
+github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
@@ -342,9 +383,11 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
+github.com/hashicorp/vault/api v1.0.5-0.20200519221902-385fac77e20f/go.mod h1:euTFbi2YJgwcju3imEt919lhJKF68nN1cQPq3aA+kBE=
github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
-github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267 h1:e1ok06zGrWJW91rzRroyl5nRNqraaBe4d5hiKcVZuHM=
-github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
+github.com/hashicorp/vault/sdk v0.1.14-0.20200519221530-14615acda45f/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
+github.com/hashicorp/vault/sdk v0.2.1 h1:S4O6Iv/dyKlE9AUTXGa7VOvZmsCvg36toPKgV4f2P4M=
+github.com/hashicorp/vault/sdk v0.2.1/go.mod h1:WfUiO1vYzfBkz1TmoE4ZGU7HD0T0Cl/rZwaxjBkgN4U=
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
@@ -355,10 +398,11 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4=
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
-github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8 h1:mGIXW/lubQ4B+3bXTLxcTMTjUNDqoF6T/HUW9LbFx9s=
-github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
-github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
+github.com/jinzhu/copier v0.3.2 h1:QdBOCbaouLDYaIPFfi1bKv5F5tPpeTwXe4sD0jqtz5w=
+github.com/jinzhu/copier v0.3.2/go.mod h1:24xnZezI2Yqac9J61UC6/dG/k76ttpq0DdJI3QmUvro=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
+github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
@@ -371,8 +415,9 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
@@ -392,6 +437,7 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -415,6 +461,7 @@ github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
@@ -440,6 +487,7 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
@@ -452,6 +500,8 @@ github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lN
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM=
github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw=
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
@@ -460,6 +510,8 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/nacos-group/nacos-sdk-go v1.0.8 h1:8pEm05Cdav9sQgJSv5kyvlgfz0SzFUUGI3pWX6SiSnM=
github.com/nacos-group/nacos-sdk-go v1.0.8/go.mod h1:hlAPn3UdzlxIlSILAyOXKxjFSvDJ9oLzTJ9hLAK1KzA=
+github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
+github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
@@ -485,6 +537,13 @@ github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
+github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
+github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
+github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
@@ -507,9 +566,10 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
-github.com/pierrec/lz4 v2.2.6+incompatible h1:6aCX4/YZ9v8q69hTyiR7dNLnTA3fgtKHVVW5BCd5Znw=
-github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI=
+github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -524,10 +584,12 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
+github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.9.0 h1:Rrch9mh17XcxvEu9D9DEpb4isxjGBtcevQjKvxPRQIU=
github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU=
+github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -543,8 +605,10 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM=
github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
+github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -552,8 +616,9 @@ github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7z
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA=
@@ -566,14 +631,15 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
-github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM=
-github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/shirou/gopsutil v3.20.11-0.20201116082039-2fb5da2f2449+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty4DZO54I4FGqIpto=
github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
@@ -593,11 +659,13 @@ github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
@@ -610,15 +678,13 @@ github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
-github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
@@ -639,12 +705,14 @@ github.com/ugorji/go v1.2.6 h1:tGiWC9HENWE2tqYycIqFTNorMmFRVhNwCpDOpWqnk8E=
github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0=
github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ=
github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw=
+github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/zouyx/agollo/v3 v3.4.5 h1:7YCxzY9ZYaH9TuVUBvmI6Tk0mwMggikah+cfbYogcHQ=
github.com/zouyx/agollo/v3 v3.4.5/go.mod h1:LJr3kDmm23QSW+F1Ol4TMHDa7HvJvscMdVxJ2IpUTVc=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
@@ -653,12 +721,16 @@ go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0=
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
-go.etcd.io/etcd/api/v3 v3.5.0-alpha.0 h1:+e5nrluATIy3GP53znpkHMFzPTHGYyzvJGFCbuI6ZLc=
go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw=
+go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw=
+go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
+go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU=
+go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0-alpha.0 h1:jZepGpOeJATxsbMNBZczDS2jHdK/QVHM1iPe9jURJ8o=
go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU=
-go.etcd.io/etcd/client/v3 v3.5.0-alpha.0 h1:dr1EOILak2pu4Nf5XbRIOCNIBjcz6UmkQd7hHRXwxaM=
go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8=
+go.etcd.io/etcd/client/v3 v3.5.0 h1:62Eh0XOro+rDwkrypAGDfgmNh5Joq+z+W9HZdlXMzek=
+go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0 h1:3yLUEC0nFCxw/RArImOyRUI4OAFbg4PFpBbAhSNzKNY=
go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY=
go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0 h1:DvYJotxV9q1Lkn7pknzAbFO/CLtCVidCr2K9qRLJ8pA=
@@ -678,15 +750,17 @@ go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
-go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
+go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
+go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
-go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
+go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U=
+go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
+golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -697,6 +771,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -715,8 +790,8 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
@@ -724,8 +799,8 @@ golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -747,14 +822,17 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -768,6 +846,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -787,11 +867,13 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -805,26 +887,35 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201223074533-0d417f636930 h1:vRgIt+nup/B/BwIS0g2oC0haq0iqbV3ZA+u6+0TlNCo=
golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -844,6 +935,7 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -858,8 +950,8 @@ golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200928182047-19e03678916f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -892,8 +984,9 @@ google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfG
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92 h1:jOTk2Z6KYaWoptUFqZ167cS8peoUPjFEXrsqfVkkCGc=
google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -910,6 +1003,7 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
@@ -924,8 +1018,10 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -938,13 +1034,17 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
+gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
@@ -958,16 +1058,17 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
k8s.io/api v0.16.9 h1:3vCx0WX9qcg1Hv4aQ/G1tiIKectGVuimvPVTJU4VOCA=
k8s.io/api v0.16.9/go.mod h1:Y7dZNHs1Xy0mSwSlzL9QShi6qkljnN41yR8oWCRTDe8=
@@ -980,9 +1081,8 @@ k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUc
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
+k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf h1:EYm5AW/UUDbnmnI+gK0TJDVK9qPLhM+sRHYanNKw0EQ=
k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
-k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU=
-k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
k8s.io/utils v0.0.0-20190801114015-581e00157fb1 h1:+ySTxfHnfzZb9ys375PXNlLhkJPLKgHajBU0N62BDvE=
k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
diff --git a/imports/imports.go b/imports/imports.go
index d093efc..661269d 100644
--- a/imports/imports.go
+++ b/imports/imports.go
@@ -3,27 +3,21 @@ package imports
import (
_ "dubbo.apache.org/dubbo-go/v3/cluster/cluster_impl"
_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance"
-
_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
-
_ "dubbo.apache.org/dubbo-go/v3/config_center/apollo"
_ "dubbo.apache.org/dubbo-go/v3/config_center/nacos"
_ "dubbo.apache.org/dubbo-go/v3/config_center/zookeeper"
-
_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
-
_ "dubbo.apache.org/dubbo-go/v3/metadata/report/etcd"
_ "dubbo.apache.org/dubbo-go/v3/metadata/report/nacos"
_ "dubbo.apache.org/dubbo-go/v3/metadata/report/zookeeper"
_ "dubbo.apache.org/dubbo-go/v3/metadata/service/local"
_ "dubbo.apache.org/dubbo-go/v3/metadata/service/remote"
-
_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
_ "dubbo.apache.org/dubbo-go/v3/protocol/grpc"
_ "dubbo.apache.org/dubbo-go/v3/protocol/jsonrpc"
_ "dubbo.apache.org/dubbo-go/v3/protocol/rest"
-
_ "dubbo.apache.org/dubbo-go/v3/registry/etcdv3"
_ "dubbo.apache.org/dubbo-go/v3/registry/nacos"
_ "dubbo.apache.org/dubbo-go/v3/registry/protocol"
diff --git a/metadata/mapping/dynamic/service_name_mapping.go b/metadata/mapping/dynamic/service_name_mapping.go
index e1dbb7d..7839e07 100644
--- a/metadata/mapping/dynamic/service_name_mapping.go
+++ b/metadata/mapping/dynamic/service_name_mapping.go
@@ -18,7 +18,6 @@
package dynamic
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"strconv"
"sync"
"time"
@@ -26,6 +25,7 @@ import (
import (
"github.com/dubbogo/gost/container/set"
+
perrors "github.com/pkg/errors"
)
@@ -34,6 +34,7 @@ import (
"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/config"
"dubbo.apache.org/dubbo-go/v3/config_center"
"dubbo.apache.org/dubbo-go/v3/metadata/mapping"
)
diff --git a/metadata/mapping/dynamic/service_name_mapping_test.go b/metadata/mapping/dynamic/service_name_mapping_test.go
index 75aa80b..5124b30 100644
--- a/metadata/mapping/dynamic/service_name_mapping_test.go
+++ b/metadata/mapping/dynamic/service_name_mapping_test.go
@@ -18,17 +18,18 @@
package dynamic
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
import (
gxset "github.com/dubbogo/gost/container/set"
+
"github.com/stretchr/testify/assert"
)
import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/config_center"
)
diff --git a/metadata/mapping/memory/service_name_mapping.go b/metadata/mapping/memory/service_name_mapping.go
index 3175a50..cc10439 100644
--- a/metadata/mapping/memory/service_name_mapping.go
+++ b/metadata/mapping/memory/service_name_mapping.go
@@ -18,7 +18,6 @@
package memory
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"sync"
)
@@ -28,6 +27,7 @@ import (
import (
"dubbo.apache.org/dubbo-go/v3/common/extension"
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/metadata/mapping"
)
diff --git a/metadata/report/delegate/delegate_report.go b/metadata/report/delegate/delegate_report.go
index e1495d1..db6310e 100644
--- a/metadata/report/delegate/delegate_report.go
+++ b/metadata/report/delegate/delegate_report.go
@@ -26,7 +26,9 @@ import (
import (
"github.com/go-co-op/gocron"
+
perrors "github.com/pkg/errors"
+
"go.uber.org/atomic"
)
diff --git a/metadata/report/delegate/delegate_report_test.go b/metadata/report/delegate/delegate_report_test.go
index 41dd400..5d2b40b 100644
--- a/metadata/report/delegate/delegate_report_test.go
+++ b/metadata/report/delegate/delegate_report_test.go
@@ -25,6 +25,7 @@ import (
import (
"github.com/stretchr/testify/assert"
+
"go.uber.org/atomic"
)
diff --git a/metadata/report/etcd/report.go b/metadata/report/etcd/report.go
index 836b43b..2d83fa3 100644
--- a/metadata/report/etcd/report.go
+++ b/metadata/report/etcd/report.go
@@ -20,7 +20,6 @@ package etcd
import (
"encoding/json"
"strings"
- "time"
)
import (
@@ -146,7 +145,7 @@ type etcdMetadataReportFactory struct{}
// CreateMetadataReport get the MetadataReport instance of etcd
func (e *etcdMetadataReportFactory) CreateMetadataReport(url *common.URL) report.MetadataReport {
- timeout, _ := time.ParseDuration(url.GetParam(constant.REGISTRY_TIMEOUT_KEY, constant.DEFAULT_REG_TIMEOUT))
+ timeout := url.GetParamDuration(constant.CONFIG_TIMEOUT_KEY, constant.DEFAULT_REG_TIMEOUT)
addresses := strings.Split(url.Location, ",")
client, err := gxetcd.NewClient(gxetcd.MetadataETCDV3Client, addresses, timeout, 1)
if err != nil {
diff --git a/metadata/report/etcd/report_test.go b/metadata/report/etcd/report_test.go
index d0162eb..81eece0 100644
--- a/metadata/report/etcd/report_test.go
+++ b/metadata/report/etcd/report_test.go
@@ -26,6 +26,7 @@ import (
import (
"github.com/stretchr/testify/assert"
+
"go.etcd.io/etcd/server/v3/embed"
)
diff --git a/metadata/report/nacos/report.go b/metadata/report/nacos/report.go
index a351726..30f68b8 100644
--- a/metadata/report/nacos/report.go
+++ b/metadata/report/nacos/report.go
@@ -24,7 +24,9 @@ import (
import (
nacosClient "github.com/dubbogo/gost/database/kv/nacos"
+
"github.com/nacos-group/nacos-sdk-go/vo"
+
perrors "github.com/pkg/errors"
)
diff --git a/metadata/report/zookeeper/report.go b/metadata/report/zookeeper/report.go
index 8d4da70..68220c5 100644
--- a/metadata/report/zookeeper/report.go
+++ b/metadata/report/zookeeper/report.go
@@ -25,6 +25,7 @@ import (
import (
"github.com/dubbogo/go-zookeeper/zk"
+
gxzookeeper "github.com/dubbogo/gost/database/kv/zk"
)
diff --git a/metadata/report/zookeeper/report_test.go b/metadata/report/zookeeper/report_test.go
deleted file mode 100644
index 8d718db..0000000
--- a/metadata/report/zookeeper/report_test.go
+++ /dev/null
@@ -1,203 +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 zookeeper
-
-import (
- "encoding/json"
- "net/url"
- "strconv"
- "testing"
-)
-
-import (
- "github.com/dubbogo/go-zookeeper/zk"
- "github.com/stretchr/testify/assert"
-)
-
-import (
- "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/metadata/identifier"
- "dubbo.apache.org/dubbo-go/v3/metadata/report"
-)
-
-func newProviderRegistryUrl(host string, port int) *common.URL {
- return common.NewURLWithOptions(
- common.WithIp(host),
- common.WithPort(strconv.Itoa(port)),
- common.WithParams(url.Values{}),
- common.WithParamsValue(constant.ROLE_KEY, strconv.Itoa(common.PROVIDER)),
- )
-}
-
-func newBaseMetadataIdentifier(side string) *identifier.BaseMetadataIdentifier {
- return &identifier.BaseMetadataIdentifier{
- ServiceInterface: "org.apache.HelloWorld",
- Version: "1.0.0",
- Group: "group",
- Side: side,
- }
-}
-
-func newMetadataIdentifier(side string) *identifier.MetadataIdentifier {
- return &identifier.MetadataIdentifier{
- Application: "application",
- BaseMetadataIdentifier: *newBaseMetadataIdentifier(side),
- }
-}
-
-func newServiceMetadataIdentifier(side string) *identifier.ServiceMetadataIdentifier {
- return &identifier.ServiceMetadataIdentifier{
- Revision: "1.0",
- Protocol: "dubbo",
- BaseMetadataIdentifier: *newBaseMetadataIdentifier(side),
- }
-}
-
-func newSubscribeMetadataIdentifier() *identifier.SubscriberMetadataIdentifier {
- return &identifier.SubscriberMetadataIdentifier{
- Revision: "1.0",
- BaseApplicationMetadataIdentifier: identifier.BaseApplicationMetadataIdentifier{Application: "provider"},
- }
-}
-
-type zookeeperMetadataReportTestSuite struct {
- t *testing.T
- m report.MetadataReport
-}
-
-func newZookeeperMetadataReportTestSuite(t *testing.T, m report.MetadataReport) *zookeeperMetadataReportTestSuite {
- return &zookeeperMetadataReportTestSuite{t: t, m: m}
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testStoreProviderMetadata() {
- providerMi := newMetadataIdentifier("provider")
- providerMeta := "provider"
- err := suite.m.StoreProviderMetadata(providerMi, providerMeta)
- assert.NoError(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testStoreConsumerMetadata() {
- consumerMi := newMetadataIdentifier("consumer")
- consumerMeta := "consumer"
- err := suite.m.StoreProviderMetadata(consumerMi, consumerMeta)
- assert.NoError(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testSaveServiceMetadata(url *common.URL) {
- serviceMi := newServiceMetadataIdentifier("provider")
- err := suite.m.SaveServiceMetadata(serviceMi, url)
- assert.NoError(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testRemoveServiceMetadata() {
- serviceMi := newServiceMetadataIdentifier("provider")
- err := suite.m.RemoveServiceMetadata(serviceMi)
- assert.NoError(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testGetExportedURLs() {
- serviceMi := newServiceMetadataIdentifier("provider")
- urls, err := suite.m.GetExportedURLs(serviceMi)
- assert.Equal(suite.t, 1, len(urls))
- assert.NoError(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testSaveSubscribedData(url *common.URL) {
- subscribeMi := newSubscribeMetadataIdentifier()
- urls := []string{url.String()}
- bytes, _ := json.Marshal(urls)
- err := suite.m.SaveSubscribedData(subscribeMi, string(bytes))
- assert.Nil(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testGetSubscribedURLs() {
- subscribeMi := newSubscribeMetadataIdentifier()
- urls, err := suite.m.GetSubscribedURLs(subscribeMi)
- assert.Equal(suite.t, 1, len(urls))
- assert.NoError(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testGetServiceDefinition() {
- providerMi := newMetadataIdentifier("provider")
- providerMeta, err := suite.m.GetServiceDefinition(providerMi)
- assert.Equal(suite.t, "provider", providerMeta)
- assert.NoError(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testPublishAppMetadata() {
- subscribeMi := newSubscribeMetadataIdentifier()
- info := common.NewMetadataInfWithApp(subscribeMi.Application)
- err := suite.m.PublishAppMetadata(subscribeMi, info)
- assert.NoError(suite.t, err)
-}
-
-func (suite *zookeeperMetadataReportTestSuite) testGetAppMetadata() {
- subscribeMi := newSubscribeMetadataIdentifier()
- info, err := suite.m.GetAppMetadata(subscribeMi)
- assert.NoError(suite.t, err)
- assert.Equal(suite.t, "provider", info.App)
-}
-
-func testInterfaceMetadata(t *testing.T) {
- testCluster, err := zk.StartTestCluster(1, nil, nil, zk.WithRetryTimes(20))
- assert.NoError(t, err)
- defer func() {
- err := testCluster.Stop()
- assert.Nil(t, err)
- }()
-
- providerRegistryUrl := newProviderRegistryUrl("127.0.0.1", testCluster.Servers[0].Port)
- mf := extension.GetMetadataReportFactory("zookeeper")
- m := mf.CreateMetadataReport(providerRegistryUrl)
-
- suite := newZookeeperMetadataReportTestSuite(t, m)
- suite.testStoreProviderMetadata()
- suite.testStoreConsumerMetadata()
- suite.testSaveServiceMetadata(providerRegistryUrl)
- suite.testGetExportedURLs()
- suite.testRemoveServiceMetadata()
- suite.testSaveSubscribedData(providerRegistryUrl)
- suite.testGetSubscribedURLs()
- suite.testGetServiceDefinition()
-}
-
-func testAppMetadata(t *testing.T) {
- testCluster, err := zk.StartTestCluster(1, nil, nil, zk.WithRetryTimes(20))
- assert.NoError(t, err)
- defer func() {
- err := testCluster.Stop()
- assert.Nil(t, err)
- }()
-
- providerRegistryUrl := newProviderRegistryUrl("127.0.0.1", testCluster.Servers[0].Port)
- mf := extension.GetMetadataReportFactory("zookeeper")
- m := mf.CreateMetadataReport(providerRegistryUrl)
-
- suite := newZookeeperMetadataReportTestSuite(t, m)
- suite.testPublishAppMetadata()
- suite.testGetAppMetadata()
-}
-
-// TestZookeeperMetadataReport is dependent on zookeeper-*-fatjar.jar,
-// please execute `make -f ../../../Makefile prepare` before running unittest.
-func TestZookeeperMetadataReport(t *testing.T) {
- t.Run("testInterfaceMetadata", testInterfaceMetadata)
- t.Run("testAppMetadata", testAppMetadata)
-}
diff --git a/metadata/service/exporter/configurable/exporter.go b/metadata/service/exporter/configurable/exporter.go
index 65f9f8e..d43e8cf 100644
--- a/metadata/service/exporter/configurable/exporter.go
+++ b/metadata/service/exporter/configurable/exporter.go
@@ -27,11 +27,9 @@ import (
"dubbo.apache.org/dubbo-go/v3/common/constant"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"dubbo.apache.org/dubbo-go/v3/config"
+ _ "dubbo.apache.org/dubbo-go/v3/metadata/mapping/dynamic"
"dubbo.apache.org/dubbo-go/v3/metadata/service"
"dubbo.apache.org/dubbo-go/v3/metadata/service/exporter"
-
- // these three import is necessary for inmemory metadata service, export or refer.
- _ "dubbo.apache.org/dubbo-go/v3/metadata/mapping/dynamic"
_ "dubbo.apache.org/dubbo-go/v3/metadata/service/remote"
_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
)
diff --git a/metadata/service/exporter/configurable/exporter_test.go b/metadata/service/exporter/configurable/exporter_test.go
index f94aa12..ea5a74c 100644
--- a/metadata/service/exporter/configurable/exporter_test.go
+++ b/metadata/service/exporter/configurable/exporter_test.go
@@ -18,7 +18,6 @@
package configurable
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
)
@@ -29,6 +28,7 @@ import (
import (
"dubbo.apache.org/dubbo-go/v3/common"
_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
+ "dubbo.apache.org/dubbo-go/v3/config"
_ "dubbo.apache.org/dubbo-go/v3/filter/filter_impl"
"dubbo.apache.org/dubbo-go/v3/metadata/service/local"
_ "dubbo.apache.org/dubbo-go/v3/protocol/dubbo"
@@ -46,7 +46,6 @@ func TestConfigurableExporter(t *testing.T) {
KeepAlivePeriod: "120s",
TcpRBufSize: 262144,
TcpWBufSize: 65536,
- PkgWQSize: 512,
TcpReadTimeout: "1s",
TcpWriteTimeout: "5s",
WaitTimeout: "1s",
diff --git a/metadata/service/local/service.go b/metadata/service/local/service.go
index 2d92095..794d463 100644
--- a/metadata/service/local/service.go
+++ b/metadata/service/local/service.go
@@ -17,7 +17,6 @@
package local
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"sort"
"sync"
)
@@ -31,6 +30,7 @@ import (
"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/config"
"dubbo.apache.org/dubbo-go/v3/metadata/definition"
"dubbo.apache.org/dubbo-go/v3/metadata/service"
)
diff --git a/metadata/service/local_service.go b/metadata/service/local_service.go
index 135dae0..1230e3a 100644
--- a/metadata/service/local_service.go
+++ b/metadata/service/local_service.go
@@ -30,7 +30,7 @@ import (
// MetadataService is used to define meta data related behaviors
// usually the implementation should be singleton
type MetadataService interface {
- common.RPCService
+ common.ReferencedRPCService
// ServiceName will get the service's name in meta service , which is application name
ServiceName() (string, error)
// ExportURL will store the exported url in metadata
@@ -94,7 +94,7 @@ func (mts *BaseMetadataService) ServiceName() (string, error) {
return mts.serviceName, nil
}
-// Version will return the version of metadata service
+// Reference will return the reference id of metadata service
func (mts *BaseMetadataService) Reference() string {
return constant.SIMPLE_METADATA_SERVICE_NAME
}
diff --git a/protocol/dubbo/dubbo_codec.go b/protocol/dubbo/dubbo_codec.go
index df4f758..1ad4c37 100644
--- a/protocol/dubbo/dubbo_codec.go
+++ b/protocol/dubbo/dubbo_codec.go
@@ -24,6 +24,7 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
+
perrors "github.com/pkg/errors"
)
diff --git a/protocol/dubbo/dubbo_invoker.go b/protocol/dubbo/dubbo_invoker.go
index 0d65c88..7ae6723 100644
--- a/protocol/dubbo/dubbo_invoker.go
+++ b/protocol/dubbo/dubbo_invoker.go
@@ -165,7 +165,11 @@ func (di *DubboInvoker) Invoke(ctx context.Context, invocation protocol.Invocati
// get timeout including methodConfig
func (di *DubboInvoker) getTimeout(invocation *invocation_impl.RPCInvocation) time.Duration {
- timeout := di.GetURL().GetParam(strings.Join([]string{constant.METHOD_KEYS, invocation.MethodName(), constant.TIMEOUT_KEY}, "."), "")
+ methodName := invocation.MethodName()
+ if di.GetURL().GetParamBool(constant.GENERIC_KEY, false) {
+ methodName = invocation.Arguments()[0].(string)
+ }
+ timeout := di.GetURL().GetParam(strings.Join([]string{constant.METHOD_KEYS, methodName, constant.TIMEOUT_KEY}, "."), "")
if len(timeout) != 0 {
if t, err := time.ParseDuration(timeout); err == nil {
// config timeout into attachment
diff --git a/protocol/dubbo/dubbo_invoker_test.go b/protocol/dubbo/dubbo_invoker_test.go
index 901547f..7bbfb05 100644
--- a/protocol/dubbo/dubbo_invoker_test.go
+++ b/protocol/dubbo/dubbo_invoker_test.go
@@ -27,8 +27,11 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
+
"github.com/opentracing/opentracing-go"
+
perrors "github.com/pkg/errors"
+
"github.com/stretchr/testify/assert"
)
@@ -112,7 +115,6 @@ func InitTest(t *testing.T) (protocol.Protocol, *common.URL) {
KeepAlivePeriod: "120s",
TcpRBufSize: 262144,
TcpWBufSize: 65536,
- PkgWQSize: 512,
TcpReadTimeout: "4s",
TcpWriteTimeout: "5s",
WaitTimeout: "1s",
@@ -130,7 +132,6 @@ func InitTest(t *testing.T) (protocol.Protocol, *common.URL) {
KeepAlivePeriod: "120s",
TcpRBufSize: 262144,
TcpWBufSize: 65536,
- PkgWQSize: 512,
TcpReadTimeout: "1s",
TcpWriteTimeout: "5s",
WaitTimeout: "1s",
diff --git a/protocol/dubbo/dubbo_protocol_test.go b/protocol/dubbo/dubbo_protocol_test.go
index 72f5b11..30e985e 100644
--- a/protocol/dubbo/dubbo_protocol_test.go
+++ b/protocol/dubbo/dubbo_protocol_test.go
@@ -52,7 +52,6 @@ func initDubboInvokerTest() {
KeepAlivePeriod: "120s",
TcpRBufSize: 262144,
TcpWBufSize: 65536,
- PkgWQSize: 512,
TcpReadTimeout: "1s",
TcpWriteTimeout: "5s",
WaitTimeout: "1s",
@@ -71,7 +70,6 @@ func initDubboInvokerTest() {
KeepAlivePeriod: "120s",
TcpRBufSize: 262144,
TcpWBufSize: 65536,
- PkgWQSize: 512,
TcpReadTimeout: "4s",
TcpWriteTimeout: "5s",
WaitTimeout: "1s",
diff --git a/protocol/dubbo/hessian2/hessian_dubbo.go b/protocol/dubbo/hessian2/hessian_dubbo.go
index f61733f..5ae8b26 100644
--- a/protocol/dubbo/hessian2/hessian_dubbo.go
+++ b/protocol/dubbo/hessian2/hessian_dubbo.go
@@ -25,6 +25,7 @@ import (
import (
"github.com/apache/dubbo-go-hessian2"
+
perrors "github.com/pkg/errors"
)
diff --git a/protocol/dubbo/hessian2/hessian_dubbo_test.go b/protocol/dubbo/hessian2/hessian_dubbo_test.go
index e7f2458..fe09e4f 100644
--- a/protocol/dubbo/hessian2/hessian_dubbo_test.go
+++ b/protocol/dubbo/hessian2/hessian_dubbo_test.go
@@ -27,6 +27,7 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
+
"github.com/stretchr/testify/assert"
)
diff --git a/protocol/dubbo/hessian2/hessian_request.go b/protocol/dubbo/hessian2/hessian_request.go
index ab564b0..1a92b66 100644
--- a/protocol/dubbo/hessian2/hessian_request.go
+++ b/protocol/dubbo/hessian2/hessian_request.go
@@ -19,7 +19,6 @@ package hessian2
import (
"encoding/binary"
- "reflect"
"strconv"
"strings"
"time"
@@ -27,6 +26,7 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
+
perrors "github.com/pkg/errors"
)
@@ -34,100 +34,8 @@ import (
"dubbo.apache.org/dubbo-go/v3/common/logger"
)
-/////////////////////////////////////////
-// dubbo
-/////////////////////////////////////////
-
func getArgType(v interface{}) string {
- if v == nil {
- return "V"
- }
-
- switch v := v.(type) {
- // Serialized tags for base types
- case nil:
- return "V"
- case bool:
- return "Z"
- case []bool:
- return "[Z"
- case byte:
- return "B"
- case []byte:
- return "[B"
- case int8:
- return "B"
- case []int8:
- return "[B"
- case int16:
- return "S"
- case []int16:
- return "[S"
- case uint16: // Equivalent to Char of Java
- return "C"
- case []uint16:
- return "[C"
- // case rune:
- // return "C"
- case int:
- return "J"
- case []int:
- return "[J"
- case int32:
- return "I"
- case []int32:
- return "[I"
- case int64:
- return "J"
- case []int64:
- return "[J"
- case time.Time:
- return "java.util.Date"
- case []time.Time:
- return "[Ljava.util.Date"
- case float32:
- return "F"
- case []float32:
- return "[F"
- case float64:
- return "D"
- case []float64:
- return "[D"
- case string:
- return "java.lang.String"
- case []string:
- return "[Ljava.lang.String;"
- case []hessian.Object:
- return "[Ljava.lang.Object;"
- case map[interface{}]interface{}:
- // return "java.util.HashMap"
- return "java.util.Map"
- case hessian.POJOEnum:
- return v.(hessian.POJOEnum).JavaClassName()
- // Serialized tags for complex types
- default:
- t := reflect.TypeOf(v)
- if reflect.Ptr == t.Kind() {
- t = reflect.TypeOf(reflect.ValueOf(v).Elem())
- }
- switch t.Kind() {
- case reflect.Struct:
- return "java.lang.Object"
- case reflect.Slice, reflect.Array:
- if t.Elem().Kind() == reflect.Struct {
- return "[Ljava.lang.Object;"
- }
- // return "java.util.ArrayList"
- return "java.util.List"
- case reflect.Map: // Enter here, map may be map[string]int
- return "java.util.Map"
- default:
- return ""
- }
- }
-
- // unreachable
- // return "java.lang.RuntimeException"
+ return GetClassDesc(v)
}
func getArgsTypeList(args []interface{}) (string, error) {
diff --git a/protocol/dubbo/hessian2/hessian_request_test.go b/protocol/dubbo/hessian2/hessian_request_test.go
index 98d5f23..3e75502 100644
--- a/protocol/dubbo/hessian2/hessian_request_test.go
+++ b/protocol/dubbo/hessian2/hessian_request_test.go
@@ -26,6 +26,7 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
+
"github.com/stretchr/testify/assert"
)
diff --git a/protocol/dubbo/hessian2/hessian_response.go b/protocol/dubbo/hessian2/hessian_response.go
index 47dc866..df4aebd 100644
--- a/protocol/dubbo/hessian2/hessian_response.go
+++ b/protocol/dubbo/hessian2/hessian_response.go
@@ -22,16 +22,19 @@ import (
"reflect"
"strconv"
"strings"
-
- "dubbo.apache.org/dubbo-go/v3/common/logger"
)
import (
hessian "github.com/apache/dubbo-go-hessian2"
"github.com/apache/dubbo-go-hessian2/java_exception"
+
perrors "github.com/pkg/errors"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
+)
+
// DubboResponse dubbo response
type DubboResponse struct {
RspObj interface{}
diff --git a/protocol/dubbo/hessian2/hessian_response_test.go b/protocol/dubbo/hessian2/hessian_response_test.go
index 86c2e43..3daaa1a 100644
--- a/protocol/dubbo/hessian2/hessian_response_test.go
+++ b/protocol/dubbo/hessian2/hessian_response_test.go
@@ -24,6 +24,7 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
+
"github.com/stretchr/testify/assert"
)
diff --git a/protocol/dubbo/hessian2/java_class.go b/protocol/dubbo/hessian2/java_class.go
new file mode 100644
index 0000000..4f43161
--- /dev/null
+++ b/protocol/dubbo/hessian2/java_class.go
@@ -0,0 +1,201 @@
+/*
+ * 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 hessian2
+
+import (
+ "fmt"
+ "reflect"
+ "strings"
+ "time"
+)
+
+import (
+ hessian "github.com/apache/dubbo-go-hessian2"
+
+ perrors "github.com/pkg/errors"
+)
+
+var (
+ NilError = perrors.Errorf("object should not be nil")
+ UnexpectedTypeError = perrors.Errorf("object should be a POJO")
+ notBasicClassError = perrors.Errorf("object isn't a basic class")
+)
+
+// GetJavaName returns java name of an object
+func GetJavaName(obj interface{}) (string, error) {
+ if obj == nil {
+ return "", NilError
+ }
+
+ t := reflect.TypeOf(obj)
+
+ // basic types, e.g. bool, int, etc.
+ if jtype, err := getBasicJavaName(t); err == nil {
+ return jtype, nil
+ }
+
+ // complicated types, e.g. array, slice, etc.
+ switch t.Kind() {
+ case reflect.Array, reflect.Slice:
+ sb := &strings.Builder{}
+ itemtyp := t
+ for itemtyp.Kind() == reflect.Array || itemtyp.Kind() == reflect.Slice {
+ sb.WriteString("[]")
+ itemtyp = itemtyp.Elem()
+ }
+ var (
+ javaName string
+ err error
+ )
+ if javaName, err = getBasicJavaName(itemtyp); err != nil {
+ if javaName, err = GetJavaName(reflect.New(itemtyp).Elem().Interface()); err != nil {
+ return "", err
+ }
+ }
+ return fmt.Sprintf("%s%s", javaName, sb), nil
+ case reflect.Map:
+ return "java.util.Map", nil
+ default:
+ pojo, ok := obj.(hessian.POJO)
+ if !ok {
+ return "", UnexpectedTypeError
+ }
+ return pojo.JavaClassName(), nil
+ }
+}
+
+func getBasicJavaName(typ reflect.Type) (string, error) {
+ switch typ.Kind() {
+ case reflect.Bool:
+ return "boolean", nil
+ case reflect.Int, reflect.Int64: // in 64-bit processor, Int takes a 64-bit space
+ return "long", nil
+ case reflect.Int32:
+ return "int", nil
+ case reflect.Int8, reflect.Int16:
+ return "short", nil
+ case reflect.Uint, reflect.Uint64: // in 64-bit processor, Uint takes a 64-bit space
+ return "unsigned long", nil
+ case reflect.Uint32:
+ return "unsigned int", nil
+ case reflect.Uint16:
+ return "unsigned short", nil
+ case reflect.Uint8:
+ return "char", nil
+ case reflect.Float32:
+ return "float", nil
+ case reflect.Float64:
+ return "double", nil
+ case reflect.String:
+ return "java.lang.String", nil
+ }
+
+ return "", notBasicClassError
+}
+
+// GetClassDesc get class desc.
+// - boolean[].class => "[Z"
+// - Object.class => "Ljava/lang/Object;"
+func GetClassDesc(v interface{}) string {
+ if v == nil {
+ return "V"
+ }
+
+ switch v := v.(type) {
+ // Serialized tags for base types
+ case nil:
+ return "V"
+ case bool:
+ return "Z"
+ case []bool:
+ return "[Z"
+ case byte:
+ return "B"
+ case []byte:
+ return "[B"
+ case int8:
+ return "B"
+ case []int8:
+ return "[B"
+ case int16:
+ return "S"
+ case []int16:
+ return "[S"
+ case uint16: // Equivalent to Char of Java
+ return "C"
+ case []uint16:
+ return "[C"
+ // case rune:
+ // return "C"
+ case int:
+ return "J"
+ case []int:
+ return "[J"
+ case int32:
+ return "I"
+ case []int32:
+ return "[I"
+ case int64:
+ return "J"
+ case []int64:
+ return "[J"
+ case time.Time:
+ return "java.util.Date"
+ case []time.Time:
+ return "[Ljava.util.Date"
+ case float32:
+ return "F"
+ case []float32:
+ return "[F"
+ case float64:
+ return "D"
+ case []float64:
+ return "[D"
+ case string:
+ return "java.lang.String"
+ case []string:
+ return "[Ljava.lang.String;"
+ case []hessian.Object:
+ return "[Ljava.lang.Object;"
+ case map[interface{}]interface{}:
+ // return "java.util.HashMap"
+ return "java.util.Map"
+ case hessian.POJOEnum:
+ return v.(hessian.POJOEnum).JavaClassName()
+ // Serialized tags for complex types
+ default:
+ t := reflect.TypeOf(v)
+ if reflect.Ptr == t.Kind() {
+ t = reflect.TypeOf(reflect.ValueOf(v).Elem())
+ }
+ switch t.Kind() {
+ case reflect.Struct:
+ return "java.lang.Object"
+ case reflect.Slice, reflect.Array:
+ if t.Elem().Kind() == reflect.Struct {
+ return "[Ljava.lang.Object;"
+ }
+ // return "java.util.ArrayList"
+ return "java.util.List"
+ case reflect.Map: // Enter here, map may be map[string]int
+ return "java.util.Map"
+ default:
+ return ""
+ }
+ }
+}
diff --git a/protocol/dubbo/hessian2/java_class_test.go b/protocol/dubbo/hessian2/java_class_test.go
new file mode 100644
index 0000000..246f139
--- /dev/null
+++ b/protocol/dubbo/hessian2/java_class_test.go
@@ -0,0 +1,132 @@
+/*
+ * 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 hessian2
+
+import (
+ "testing"
+)
+
+import (
+ "github.com/stretchr/testify/assert"
+)
+
+func TestGetJavaName(t *testing.T) {
+ _, err := GetJavaName(nil)
+ assert.Equal(t, NilError, err)
+
+ typ, err := GetJavaName(true)
+ assert.Equal(t, "boolean", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(1)
+ assert.Equal(t, "long", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName(int64(1))
+ assert.Equal(t, "long", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(int32(1))
+ assert.Equal(t, "int", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(int16(1))
+ assert.Equal(t, "short", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName(int8(1))
+ assert.Equal(t, "short", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(uint(1))
+ assert.Equal(t, "unsigned long", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName(uint64(1))
+ assert.Equal(t, "unsigned long", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(uint32(1))
+ assert.Equal(t, "unsigned int", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(uint16(1))
+ assert.Equal(t, "unsigned short", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName(byte('a'))
+ assert.Equal(t, "char", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(float32(1.0))
+ assert.Equal(t, "float", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(1.0)
+ assert.Equal(t, "double", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName("hello")
+ assert.Equal(t, "java.lang.String", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName([]string{"hello"})
+ assert.Equal(t, "java.lang.String[]", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName([]*mockPOJOPtr{{}})
+ assert.Equal(t, "org.apache.dubbo.mockPOJOPtr[]", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName([]mockPOJO{{}})
+ assert.Equal(t, "org.apache.dubbo.mockPOJO[]", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName([][]string{{"hello"}})
+ assert.Equal(t, "java.lang.String[][]", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName([][]*mockPOJOPtr{{&mockPOJOPtr{}}})
+ assert.Equal(t, "org.apache.dubbo.mockPOJOPtr[][]", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName([1]string{"hello"})
+ assert.Equal(t, "java.lang.String[]", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(map[string]string{"key1": "value1"})
+ assert.Equal(t, "java.util.Map", typ)
+ assert.Nil(t, err)
+
+ typ, err = GetJavaName(mockPOJO{})
+ assert.Equal(t, "org.apache.dubbo.mockPOJO", typ)
+ assert.Nil(t, err)
+ typ, err = GetJavaName(&mockPOJOPtr{})
+ assert.Equal(t, "org.apache.dubbo.mockPOJOPtr", typ)
+ assert.Nil(t, err)
+
+ _, err = GetJavaName(&mockNonPOJO{})
+ assert.Equal(t, UnexpectedTypeError, err)
+}
+
+type mockPOJOPtr struct {
+ TestField string
+}
+
+func (m *mockPOJOPtr) JavaClassName() string {
+ return "org.apache.dubbo.mockPOJOPtr"
+}
+
+type mockPOJO struct{}
+
+func (m mockPOJO) JavaClassName() string {
+ return "org.apache.dubbo.mockPOJO"
+}
+
+type mockNonPOJO struct{}
diff --git a/protocol/dubbo/impl/codec.go b/protocol/dubbo/impl/codec.go
index 682d5d9..0f9e26d 100644
--- a/protocol/dubbo/impl/codec.go
+++ b/protocol/dubbo/impl/codec.go
@@ -24,6 +24,7 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
+
perrors "github.com/pkg/errors"
)
diff --git a/protocol/dubbo/impl/const.go b/protocol/dubbo/impl/const.go
index c9b92ba..6bc2c93 100644
--- a/protocol/dubbo/impl/const.go
+++ b/protocol/dubbo/impl/const.go
@@ -20,7 +20,9 @@ package impl
import (
"reflect"
"regexp"
+)
+import (
"github.com/pkg/errors"
)
diff --git a/protocol/dubbo/impl/hessian.go b/protocol/dubbo/impl/hessian.go
index 25d536e..756650f 100644
--- a/protocol/dubbo/impl/hessian.go
+++ b/protocol/dubbo/impl/hessian.go
@@ -28,6 +28,7 @@ import (
import (
hessian "github.com/apache/dubbo-go-hessian2"
"github.com/apache/dubbo-go-hessian2/java_exception"
+
perrors "github.com/pkg/errors"
)
diff --git a/protocol/dubbo3/common_test.go b/protocol/dubbo3/common_test.go
index 27150db..f137e84 100644
--- a/protocol/dubbo3/common_test.go
+++ b/protocol/dubbo3/common_test.go
@@ -19,7 +19,6 @@ package dubbo3
import (
"context"
- "dubbo.apache.org/dubbo-go/v3/config"
"fmt"
)
@@ -28,6 +27,7 @@ import (
)
import (
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/protocol"
"dubbo.apache.org/dubbo-go/v3/protocol/dubbo3/internal"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
diff --git a/protocol/dubbo3/dubbo3_protocol.go b/protocol/dubbo3/dubbo3_protocol.go
index df90c3b..d8f27ff 100644
--- a/protocol/dubbo3/dubbo3_protocol.go
+++ b/protocol/dubbo3/dubbo3_protocol.go
@@ -14,11 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package dubbo3
import (
"context"
- "dubbo.apache.org/dubbo-go/v3/config"
"fmt"
"reflect"
"sync"
@@ -28,6 +28,7 @@ import (
tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
triConfig "github.com/dubbogo/triple/pkg/config"
"github.com/dubbogo/triple/pkg/triple"
+
"google.golang.org/grpc"
)
@@ -36,6 +37,7 @@ import (
"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/config"
"dubbo.apache.org/dubbo-go/v3/protocol"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
)
@@ -99,18 +101,18 @@ func (dp *DubboProtocol) Export(invoker protocol.Invoker) protocol.Exporter {
valueOf := reflect.ValueOf(service)
typeOf := valueOf.Type()
numField := valueOf.NumMethod()
- tripleService := &Dubbo3HessianService{proxyImpl: invoker}
+ tripleService := &UnaryService{proxyImpl: invoker}
for i := 0; i < numField; i++ {
ft := typeOf.Method(i)
if ft.Name == "Reference" {
continue
}
- // num out is checked in common/rpc_service.go
- if ft.Type.NumIn() != 3 {
- panic(fmt.Sprintf("function %s input params num = %d not supported, which should be 2", ft.Name, ft.Type.NumIn()-1))
+ // get all method params type
+ typs := make([]reflect.Type, 0)
+ for j := 2; j < ft.Type.NumIn(); j++ {
+ typs = append(typs, ft.Type.In(j))
}
- typ := ft.Type.In(2)
- tripleService.setReqParamsInterface(ft.Name, typ)
+ tripleService.setReqParamsTypes(ft.Name, typs)
}
service = tripleService
triSerializationType = tripleConstant.CodecType(serializationType)
@@ -164,55 +166,56 @@ type Dubbo3GrpcService interface {
ServiceDesc() *grpc.ServiceDesc
}
-type Dubbo3HessianService struct {
+type UnaryService struct {
proxyImpl protocol.Invoker
reqTypeMap sync.Map
}
-func (d *Dubbo3HessianService) setReqParamsInterface(methodName string, typ reflect.Type) {
+func (d *UnaryService) setReqParamsTypes(methodName string, typ []reflect.Type) {
d.reqTypeMap.Store(methodName, typ)
}
-func (d *Dubbo3HessianService) GetReqParamsInteface(methodName string) (interface{}, bool) {
+func (d *UnaryService) GetReqParamsInterfaces(methodName string) ([]interface{}, bool) {
val, ok := d.reqTypeMap.Load(methodName)
if !ok {
return nil, false
}
- typ := val.(reflect.Type)
- return reflect.New(typ).Interface(), true
+ typs := val.([]reflect.Type)
+ reqParamsInterfaces := make([]interface{}, 0, len(typs))
+ for _, typ := range typs {
+ reqParamsInterfaces = append(reqParamsInterfaces, reflect.New(typ).Interface())
+ }
+ return reqParamsInterfaces, true
}
-func (d *Dubbo3HessianService) InvokeWithArgs(ctx context.Context, methodName string, arguments []interface{}) (interface{}, error) {
+func (d *UnaryService) InvokeWithArgs(ctx context.Context, methodName string, arguments []interface{}) (interface{}, error) {
res := d.proxyImpl.Invoke(ctx, invocation.NewRPCInvocation(methodName, arguments, nil))
return res.Result(), res.Error()
}
// openServer open a dubbo3 server, if there is already a service using the same protocol, it returns directly.
func (dp *DubboProtocol) openServer(url *common.URL, tripleCodecType tripleConstant.CodecType) {
- _, ok := dp.serverMap[url.Location]
- if ok {
- return
- }
- _, ok = dp.ExporterMap().Load(url.ServiceKey())
- if !ok {
- panic("[DubboProtocol]" + url.Key() + "is not existing")
- }
-
dp.serverLock.Lock()
defer dp.serverLock.Unlock()
- _, ok = dp.serverMap[url.Location]
+ _, ok := dp.serverMap[url.Location]
+
if ok {
+ dp.serverMap[url.Location].RefreshService()
return
}
-
triOption := triConfig.NewTripleOption(
triConfig.WithCodecType(tripleCodecType),
triConfig.WithLocation(url.Location),
triConfig.WithLogger(logger.GetLogger()),
)
+
+ _, ok = dp.ExporterMap().Load(url.ServiceKey())
+ if !ok {
+ panic("[DubboProtocol]" + url.Key() + "is not existing")
+ }
+
srv := triple.NewTripleServer(dp.serviceMap, triOption)
dp.serverMap[url.Location] = srv
-
srv.Start()
}
diff --git a/protocol/dubbo3/dubbo3_protocol_test.go b/protocol/dubbo3/dubbo3_protocol_test.go
index 627b730..f924bf8 100644
--- a/protocol/dubbo3/dubbo3_protocol_test.go
+++ b/protocol/dubbo3/dubbo3_protocol_test.go
@@ -18,11 +18,15 @@
package dubbo3
import (
+ "context"
+ "reflect"
"testing"
"time"
)
import (
+ hessian "github.com/apache/dubbo-go-hessian2"
+
"github.com/stretchr/testify/assert"
)
@@ -85,3 +89,63 @@ func TestDubboProtocolRefer(t *testing.T) {
invokersLen = len(proto.(*DubboProtocol).Invokers())
assert.Equal(t, 0, invokersLen)
}
+
+type MockUser struct {
+ Name string
+}
+
+func (m *MockUser) JavaClassName() string {
+ return "mockuser"
+}
+
+type MockService struct {
+}
+
+func (m *MockService) GetUser(ctx context.Context, user, user2 *MockUser) (*MockUser, error) {
+ return user, nil
+}
+
+func TestDubbo3UnaryService_GetReqParamsInterfaces(t *testing.T) {
+ hessian.RegisterPOJO(&MockUser{})
+ srv := UnaryService{}
+ valueOf := reflect.ValueOf(&MockService{})
+ typeOf := valueOf.Type()
+ numField := valueOf.NumMethod()
+ for i := 0; i < numField; i++ {
+ ft := typeOf.Method(i)
+ // num in/out is checked in common/rpc_service.go
+ typs := make([]reflect.Type, 0)
+ for j := 2; j < ft.Type.NumIn(); j++ {
+ typs = append(typs, ft.Type.In(j))
+ }
+ srv.setReqParamsTypes("GetUser", typs)
+ }
+ paramsInterfaces, ok := srv.GetReqParamsInterfaces("GetUser")
+ assert.True(t, ok)
+ enc := hessian.NewEncoder()
+ err := enc.Encode(&MockUser{
+ Name: "laurence",
+ })
+ assert.Nil(t, err)
+ data := enc.Buffer()
+ decoder := hessian.NewDecoder(data)
+ val, err := decoder.Decode()
+ assert.Nil(t, err)
+ assert.Equal(t, 2, len(paramsInterfaces))
+ subTest(t, val, paramsInterfaces)
+ args := make([]interface{}, 0, 1)
+ for _, v := range paramsInterfaces {
+ tempParamObj := reflect.ValueOf(v).Elem().Interface()
+ args = append(args, tempParamObj)
+ }
+ assert.Equal(t, "laurence", args[0].(*MockUser).Name)
+ assert.Equal(t, "laurence", args[1].(*MockUser).Name)
+}
+
+func subTest(t *testing.T, val, paramsInterfaces interface{}) {
+ list := paramsInterfaces.([]interface{})
+ for k, _ := range list {
+ err := hessian.ReflectResponse(val, list[k])
+ assert.Nil(t, err)
+ }
+}
diff --git a/protocol/dubbo3/internal/client.go b/protocol/dubbo3/internal/client.go
index d85662c..2b1d8e0 100644
--- a/protocol/dubbo3/internal/client.go
+++ b/protocol/dubbo3/internal/client.go
@@ -19,13 +19,16 @@ package internal
import (
"context"
- "dubbo.apache.org/dubbo-go/v3/config"
)
import (
"github.com/dubbogo/triple/pkg/triple"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
func init() {
config.SetConsumerService(&GrpcGreeterImpl{})
}
diff --git a/protocol/dubbo3/internal/helloworld.pb.go b/protocol/dubbo3/internal/helloworld.pb.go
index 796eb9f..404d7e3 100644
--- a/protocol/dubbo3/internal/helloworld.pb.go
+++ b/protocol/dubbo3/internal/helloworld.pb.go
@@ -23,19 +23,24 @@ package internal
import (
context "context"
fmt "fmt"
+ math "math"
+)
+
+import (
+ tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
+ dubbo3 "github.com/dubbogo/triple/pkg/triple"
+
proto "github.com/golang/protobuf/proto"
+
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
- math "math"
)
import (
"dubbo.apache.org/dubbo-go/v3/protocol"
dgrpc "dubbo.apache.org/dubbo-go/v3/protocol/grpc"
"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
- tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
- dubbo3 "github.com/dubbogo/triple/pkg/triple"
)
// Reference imports to suppress errors if they are not otherwise used.
diff --git a/protocol/dubbo3/protoc-gen-dubbo3/examples/helloworld.pb.go b/protocol/dubbo3/protoc-gen-dubbo3/examples/helloworld.pb.go
deleted file mode 100644
index 3c695d7..0000000
--- a/protocol/dubbo3/protoc-gen-dubbo3/examples/helloworld.pb.go
+++ /dev/null
@@ -1,323 +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.
- */
-
-// Code generated by protoc-gen-go. DO NOT EDIT.
-// source: helloworld.proto
-
-package main
-
-import (
- context "context"
- fmt "fmt"
- proto "github.com/golang/protobuf/proto"
- grpc "google.golang.org/grpc"
- codes "google.golang.org/grpc/codes"
- status "google.golang.org/grpc/status"
- math "math"
-)
-
-import (
- "dubbo.apache.org/dubbo-go/v3/protocol"
- dgrpc "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
- "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
- tripleConstant "github.com/dubbogo/triple/pkg/common/constant"
- dubbo3 "github.com/dubbogo/triple/pkg/triple"
-)
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
-
-// The request message containing the user's name.
-type HelloRequest struct {
- Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *HelloRequest) Reset() { *m = HelloRequest{} }
-func (m *HelloRequest) String() string { return proto.CompactTextString(m) }
-func (*HelloRequest) ProtoMessage() {}
-func (*HelloRequest) Descriptor() ([]byte, []int) {
- return fileDescriptor_17b8c58d586b62f2, []int{0}
-}
-
-func (m *HelloRequest) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_HelloRequest.Unmarshal(m, b)
-}
-func (m *HelloRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_HelloRequest.Marshal(b, m, deterministic)
-}
-func (m *HelloRequest) XXX_Merge(src proto.Message) {
- xxx_messageInfo_HelloRequest.Merge(m, src)
-}
-func (m *HelloRequest) XXX_Size() int {
- return xxx_messageInfo_HelloRequest.Size(m)
-}
-func (m *HelloRequest) XXX_DiscardUnknown() {
- xxx_messageInfo_HelloRequest.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_HelloRequest proto.InternalMessageInfo
-
-func (m *HelloRequest) GetName() string {
- if m != nil {
- return m.Name
- }
- return ""
-}
-
-// The response message containing the greetings
-type HelloReply struct {
- Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
- XXX_NoUnkeyedLiteral struct{} `json:"-"`
- XXX_unrecognized []byte `json:"-"`
- XXX_sizecache int32 `json:"-"`
-}
-
-func (m *HelloReply) Reset() { *m = HelloReply{} }
-func (m *HelloReply) String() string { return proto.CompactTextString(m) }
-func (*HelloReply) ProtoMessage() {}
-func (*HelloReply) Descriptor() ([]byte, []int) {
- return fileDescriptor_17b8c58d586b62f2, []int{1}
-}
-
-func (m *HelloReply) XXX_Unmarshal(b []byte) error {
- return xxx_messageInfo_HelloReply.Unmarshal(m, b)
-}
-func (m *HelloReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
- return xxx_messageInfo_HelloReply.Marshal(b, m, deterministic)
-}
-func (m *HelloReply) XXX_Merge(src proto.Message) {
- xxx_messageInfo_HelloReply.Merge(m, src)
-}
-func (m *HelloReply) XXX_Size() int {
- return xxx_messageInfo_HelloReply.Size(m)
-}
-func (m *HelloReply) XXX_DiscardUnknown() {
- xxx_messageInfo_HelloReply.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_HelloReply proto.InternalMessageInfo
-
-func (m *HelloReply) GetMessage() string {
- if m != nil {
- return m.Message
- }
- return ""
-}
-
-func init() {
- proto.RegisterType((*HelloRequest)(nil), "main.HelloRequest")
- proto.RegisterType((*HelloReply)(nil), "main.HelloReply")
-}
-
-func init() { proto.RegisterFile("helloworld.proto", fileDescriptor_17b8c58d586b62f2) }
-
-var fileDescriptor_17b8c58d586b62f2 = []byte{
- // 185 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xc8, 0x48, 0xcd, 0xc9,
- 0xc9, 0x2f, 0xcf, 0x2f, 0xca, 0x49, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0xc9, 0x4d,
- 0xcc, 0xcc, 0x53, 0x52, 0xe2, 0xe2, 0xf1, 0x00, 0xc9, 0x04, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97,
- 0x08, 0x09, 0x71, 0xb1, 0xe4, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x81,
- 0xd9, 0x4a, 0x6a, 0x5c, 0x5c, 0x50, 0x35, 0x05, 0x39, 0x95, 0x42, 0x12, 0x5c, 0xec, 0xb9, 0xa9,
- 0xc5, 0xc5, 0x89, 0xe9, 0x30, 0x45, 0x30, 0xae, 0x91, 0x2d, 0x17, 0xbb, 0x7b, 0x51, 0x6a, 0x6a,
- 0x49, 0x6a, 0x91, 0x90, 0x11, 0x17, 0x47, 0x70, 0x62, 0x25, 0x58, 0x97, 0x90, 0x90, 0x1e, 0xc8,
- 0x26, 0x3d, 0x64, 0x6b, 0xa4, 0x04, 0x50, 0xc4, 0x0a, 0x72, 0x2a, 0x95, 0x18, 0x9c, 0xcc, 0xb8,
- 0xa4, 0x33, 0xf3, 0xf5, 0xd2, 0x8b, 0x0a, 0x92, 0xf5, 0x52, 0x2b, 0x12, 0x73, 0x0b, 0x72, 0x52,
- 0x8b, 0xf5, 0x10, 0xae, 0x76, 0xe2, 0x07, 0x2b, 0x0e, 0x07, 0xb1, 0x03, 0x40, 0x1e, 0x08, 0x60,
- 0x5c, 0xc4, 0xc4, 0xec, 0xe1, 0x13, 0x9e, 0xc4, 0x06, 0xf6, 0x8f, 0x31, 0x20, 0x00, 0x00, 0xff,
- 0xff, 0xd2, 0x16, 0x5f, 0x34, 0xe3, 0x00, 0x00, 0x00,
-}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConnInterface
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion6
-
-// GreeterClient is the client API for Greeter service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type GreeterClient interface {
- // Sends a greeting
- SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error)
-}
-
-type greeterClient struct {
- cc grpc.ClientConnInterface
-}
-
-func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient {
- return &greeterClient{cc}
-}
-
-func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) {
- out := new(HelloReply)
- err := c.cc.Invoke(ctx, "/main.Greeter/SayHello", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// GreeterServer is the server API for Greeter service.
-type GreeterServer interface {
- // Sends a greeting
- SayHello(context.Context, *HelloRequest) (*HelloReply, error)
-}
-
-// UnimplementedGreeterServer can be embedded to have forward compatible implementations.
-type UnimplementedGreeterServer struct {
-}
-
-func (*UnimplementedGreeterServer) SayHello(ctx context.Context, req *HelloRequest) (*HelloReply, error) {
- return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented")
-}
-
-func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
- s.RegisterService(&_Greeter_serviceDesc, srv)
-}
-
-func _Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(HelloRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(GreeterServer).SayHello(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/main.Greeter/SayHello",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(GreeterServer).SayHello(ctx, req.(*HelloRequest))
- }
- return interceptor(ctx, in, info, handler)
-}
-
-var _Greeter_serviceDesc = grpc.ServiceDesc{
- ServiceName: "main.Greeter",
- HandlerType: (*GreeterServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "SayHello",
- Handler: _Greeter_SayHello_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "helloworld.proto",
-}
-
-type greeterDubbo3Client struct {
- cc *dubbo3.TripleConn
-}
-
-func NewGreeterDubbo3Client(cc *dubbo3.TripleConn) GreeterClient {
- return &greeterDubbo3Client{cc}
-}
-func (c *greeterDubbo3Client) SayHello(ctx context.Context, in *HelloRequest, opt ...grpc.CallOption) (*HelloReply, error) {
- out := new(HelloReply)
- interfaceKey := ctx.Value(tripleConstant.InterfaceKey).(string)
- err := c.cc.Invoke(ctx, "/"+interfaceKey+"/SayHello", in, out)
- if err != nil {
- return nil, err
- }
- return out, nil
-}
-
-// GreeterClientImpl is the client API for Greeter service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type GreeterClientImpl struct {
- // Sends a greeting
- SayHello func(ctx context.Context, in *HelloRequest, out *HelloReply) error
-}
-
-func (c *GreeterClientImpl) Reference() string {
- return "greeterImpl"
-}
-
-func (c *GreeterClientImpl) GetDubboStub(cc *dubbo3.TripleConn) GreeterClient {
- return NewGreeterDubbo3Client(cc)
-}
-
-type GreeterProviderBase struct {
- proxyImpl protocol.Invoker
-}
-
-func (s *GreeterProviderBase) SetProxyImpl(impl protocol.Invoker) {
- s.proxyImpl = impl
-}
-
-func (s *GreeterProviderBase) GetProxyImpl() protocol.Invoker {
- return s.proxyImpl
-}
-
-func (c *GreeterProviderBase) Reference() string {
- return "greeterImpl"
-}
-
-func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(HelloRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- base := srv.(dgrpc.Dubbo3GrpcService)
- args := []interface{}{}
- args = append(args, in)
- invo := invocation.NewRPCInvocation("SayHello", args, nil)
- if interceptor == nil {
- result := base.GetProxyImpl().Invoke(ctx, invo)
- return result.Result(), result.Error()
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/main.Greeter/SayHello",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- result := base.GetProxyImpl().Invoke(context.Background(), invo)
- return result.Result(), result.Error()
- }
- return interceptor(ctx, in, info, handler)
-}
-
-func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
- return &grpc.ServiceDesc{
- ServiceName: "main.Greeter",
- HandlerType: (*GreeterServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "SayHello",
- Handler: _DUBBO_Greeter_SayHello_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "helloworld.proto",
- }
-}
diff --git a/protocol/dubbo3/protoc-gen-dubbo3/examples/helloworld.proto b/protocol/dubbo3/protoc-gen-dubbo3/examples/helloworld.proto
deleted file mode 100644
index 81817e8..0000000
--- a/protocol/dubbo3/protoc-gen-dubbo3/examples/helloworld.proto
+++ /dev/null
@@ -1,40 +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.
- */
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "io.grpc.examples.helloworld";
-option java_outer_classname = "HelloWorldProto";
-option objc_class_prefix = "HLW";
-
-package main;
-
-// The greeting service definition.
-service Greeter {
- // Sends a greeting
- rpc SayHello (HelloRequest) returns (HelloReply) {}
-}
-
-// The request message containing the user's name.
-message HelloRequest {
- string name = 1;
-}
-
-// The response message containing the greetings
-message HelloReply {
- string message = 1;
-}
diff --git a/protocol/dubbo3/protoc-gen-dubbo3/go.mod b/protocol/dubbo3/protoc-gen-dubbo3/go.mod
deleted file mode 100644
index d094046..0000000
--- a/protocol/dubbo3/protoc-gen-dubbo3/go.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-module github.com/apache/dubbo-go/protocol/dubbo3/protoc-gen-dubbo3
-
-go 1.15
-
-require (
- github.com/dubbogo/triple v1.0.0
- github.com/golang/protobuf v1.5.2
- google.golang.org/grpc v1.36.0
-)
diff --git a/protocol/dubbo3/protoc-gen-dubbo3/go.sum b/protocol/dubbo3/protoc-gen-dubbo3/go.sum
deleted file mode 100644
index 135c8be..0000000
--- a/protocol/dubbo3/protoc-gen-dubbo3/go.sum
+++ /dev/null
@@ -1,1034 +0,0 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
-cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
-cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
-cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
-cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
-cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
-cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/Azure/azure-sdk-for-go v40.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
-github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0=
-github.com/Azure/go-autorest/autorest v0.10.0/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630=
-github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
-github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc=
-github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
-github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
-github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM=
-github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw=
-github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
-github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
-github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
-github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA=
-github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI=
-github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
-github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
-github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
-github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
-github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
-github.com/Microsoft/go-winio v0.4.3/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
-github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
-github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
-github.com/NYTimes/gziphandler v1.0.1/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
-github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
-github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/RoaringBitmap/roaring v0.6.1 h1:O36Tdaj1Fi/zyr25shTHwlQPGdq53+u4WkM08AOEjiE=
-github.com/RoaringBitmap/roaring v0.6.1/go.mod h1:WZ83fjBF/7uBHi6QoFyfGL4+xuV4Qn+xFkm4+vSzrhE=
-github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
-github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
-github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
-github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
-github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
-github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
-github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI=
-github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA=
-github.com/abdullin/seq v0.0.0-20160510034733-d5467c17e7af/go.mod h1:5Jv4cbFiHJMsVxt52+i0Ha45fjshj6wxYr1r19tB9bw=
-github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw=
-github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alibaba/sentinel-golang v1.0.2 h1:Acopq74hOtZN4MV1v811MQ6QcqPFLDSczTrRXv9zpIg=
-github.com/alibaba/sentinel-golang v1.0.2/go.mod h1:QsB99f/z35D2AiMrAWwgWE85kDTkBUIkcmPrRt+61NI=
-github.com/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk=
-github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/apache/dubbo-getty v1.4.3 h1:PCKpryDasKOxwT5MBC6MIMO+0NLOaHF6Xco9YXQw7HI=
-github.com/apache/dubbo-getty v1.4.3/go.mod h1:ansXgKxxyhCOiQL29nO5ce1MDcEKmCyZuNR9oMs3hek=
-github.com/apache/dubbo-go-hessian2 v1.9.1 h1:ceSsU/9z/gv3hzUpl8GceEhQvF3i0BionfdHUGMmjHU=
-github.com/apache/dubbo-go-hessian2 v1.9.1/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE=
-github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
-github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
-github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
-github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
-github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
-github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg=
-github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs=
-github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
-github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
-github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go v1.25.41/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
-github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
-github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
-github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s=
-github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
-github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
-github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
-github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
-github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
-github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
-github.com/coredns/coredns v1.1.2/go.mod h1:zASH/MVDgR6XZTbxvOnsZfffS+31vg6Ackf/wo1+AM0=
-github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
-github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
-github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
-github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
-github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/creasty/defaults v1.5.1 h1:j8WexcS3d/t4ZmllX4GEkl4wIB/trOr035ajcLHCISM=
-github.com/creasty/defaults v1.5.1/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY=
-github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/denverdino/aliyungo v0.0.0-20170926055100-d3308649c661/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
-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/digitalocean/godo v1.1.1/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU=
-github.com/digitalocean/godo v1.10.0/go.mod h1:h6faOIcZ8lWIwNQ+DN7b3CgX4Kwby5T+nbpNqkUIozU=
-github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
-github.com/dnaeon/go-vcr v0.0.0-20180814043457-aafff18a5cc2/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
-github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
-github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
-github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
-github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
-github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
-github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
-github.com/dubbogo/gost v1.10.1/go.mod h1:+mQGS51XQEUWZP2JeGZTxJwipjRKtJO7Tr+FOg+72rI=
-github.com/dubbogo/gost v1.11.8 h1:OPTG4qIyNQ949GbdgHvpvYiVNno/X/YBozOVBLuNkS4=
-github.com/dubbogo/gost v1.11.8/go.mod h1:2nB8jSrxVPwW5DBsRu3FZQH1+Ual3wnRHwFqjG9+4PY=
-github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU=
-github.com/dubbogo/net v0.0.2-0.20210326124702-e6a866993192 h1:CBEicrrVwR6u8ty+kL68ItxXVk1jaVYThrsx5ARhxUc=
-github.com/dubbogo/net v0.0.2-0.20210326124702-e6a866993192/go.mod h1:B6/ka3g8VzcyrmdCH4VkHP1K0aHeI37FmclS+TCwIBU=
-github.com/dubbogo/triple v1.0.0 h1:mbFU078PmyjO8OywtrNsTZW0RSYIImVGyXE4wLO3Vm0=
-github.com/dubbogo/triple v1.0.0/go.mod h1:duJFWIYOE+Ajxxvk+AOBpEBePFNnviJ52fveZ3vYA04=
-github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
-github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
-github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
-github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/elazarl/go-bindata-assetfs v0.0.0-20160803192304-e1a2a7ec64b0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
-github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
-github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful/v3 v3.4.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
-github.com/envoyproxy/go-control-plane v0.8.0/go.mod h1:GSSbY9P1neVhdY7G4wu+IK1rk/dqhiCC/4ExuWJZVuk=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
-github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
-github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
-github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
-github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
-github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
-github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
-github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2 h1:Ujru1hufTHVb++eG6OuNDKMxZnGIvF6o/u8q/8h2+I4=
-github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
-github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31 h1:gclg6gY70GLy3PbkQ1AERPfmLMMagS60DKF78eWwLn8=
-github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
-github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
-github.com/go-co-op/gocron v0.1.1/go.mod h1:Y9PWlYqDChf2Nbgg7kfS+ZsXHDTZbMZYPEQ0MILqH+M=
-github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
-github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
-github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
-github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
-github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
-github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
-github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
-github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
-github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
-github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
-github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
-github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
-github.com/go-resty/resty/v2 v2.3.0/go.mod h1:UpN9CgLZNsv4e9XG50UU8xdI0F43UQ4HmxLBDwaroHU=
-github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
-github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
-github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
-github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc=
-github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
-github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
-github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
-github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
-github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
-github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/tcpproxy v0.0.0-20180808230851-dfa16c61dad2/go.mod h1:DavVbd41y+b7ukKDmlnPR4nGYmkWXR6vHUkjQNiHPBs=
-github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
-github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
-github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw=
-github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
-github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
-github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
-github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
-github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
-github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
-github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
-github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw=
-github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
-github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
-github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/go-bexpr v0.1.2/go.mod h1:ANbpTX1oAql27TZkKVeW8p1w8NTdnyzPe/0qqPCKohU=
-github.com/hashicorp/go-checkpoint v0.0.0-20171009173528-1545e56e46de/go.mod h1:xIwEieBHERyEvaeKF/TcHh1Hu+lxPM+n2vT1+g9I4m4=
-github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
-github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
-github.com/hashicorp/go-connlimit v0.2.0/go.mod h1:OUj9FGL1tPIhl/2RCfzYHrIiWj+VVPGNyVPnUX8AqS0=
-github.com/hashicorp/go-discover v0.0.0-20200501174627-ad1e96bde088/go.mod h1:vZu6Opqf49xX5lsFAu7iFNewkcVF1sn/wyapZh5ytlg=
-github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
-github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
-github.com/hashicorp/go-hclog v0.9.1/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
-github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
-github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
-github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
-github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
-github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g=
-github.com/hashicorp/go-memdb v1.0.3/go.mod h1:LWQ8R70vPrS4OEY9k28D2z8/Zzyu34NVzeRibGAzHO0=
-github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
-github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
-github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
-github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
-github.com/hashicorp/go-raftchunking v0.6.1/go.mod h1:cGlg3JtDy7qy6c/3Bu660Mic1JF+7lWqIwCFSb08fX0=
-github.com/hashicorp/go-raftchunking v0.6.3-0.20191002164813-7e9e8525653a/go.mod h1:xbXnmKqX9/+RhPkJ4zrEx4738HacP72aaUPlT2RZ4sU=
-github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
-github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
-github.com/hashicorp/go-retryablehttp v0.6.2/go.mod h1:gEx6HMUGxYYhJScX7W1Il64m6cc2C1mDaW3NQ9sY1FY=
-github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
-github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
-github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
-github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
-github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
-github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
-github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-uuid v1.0.2-0.20191001231223-f32f5fe8d6a8/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
-github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
-github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hashicorp/hil v0.0.0-20160711231837-1e86c6b523c5/go.mod h1:KHvg/R2/dPtaePb16oW4qIyzkMxXOL38xjRN64adsts=
-github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
-github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
-github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
-github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
-github.com/hashicorp/memberlist v0.2.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
-github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
-github.com/hashicorp/net-rpc-msgpackrpc v0.0.0-20151116020338-a14192a58a69/go.mod h1:/z+jUGRBlwVpUZfjute9jWaF6/HuhjuFQuL1YXzVD1Q=
-github.com/hashicorp/raft v1.1.1/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8=
-github.com/hashicorp/raft v1.1.2-0.20191002163536-9c6bd3e3eb17/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8=
-github.com/hashicorp/raft v1.1.2/go.mod h1:vPAJM8Asw6u8LxC3eJCUZmRP/E4QmUGE1R7g7k8sG/8=
-github.com/hashicorp/raft-boltdb v0.0.0-20171010151810-6e5ba93211ea/go.mod h1:pNv7Wc3ycL6F5oOWn+tPGo2gWD4a5X+yp/ntwdKLjRk=
-github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
-github.com/hashicorp/serf v0.9.0/go.mod h1:YL0HO+FifKOW2u1ke99DGVu1zhcpZzNwrLIqBC7vbYU=
-github.com/hashicorp/serf v0.9.2/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
-github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q=
-github.com/hashicorp/vault/api v1.0.5-0.20191108163347-bdd38fca2cff/go.mod h1:Uf8LaHyrYsgVgHzO2tMZKhqRGlL3UJ6XaSwW2EA1Iqo=
-github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M=
-github.com/hashicorp/vault/sdk v0.1.14-0.20191108161836-82f2b5571044/go.mod h1:PcekaFGiPJyHnFy+NZhP6ll650zEw51Ag7g/YEa+EOU=
-github.com/hashicorp/vault/sdk v0.1.14-0.20200519221838-e0cfd64bc267/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10=
-github.com/hashicorp/vic v1.5.1-0.20190403131502-bbfe86ec9443/go.mod h1:bEpDU35nTu0ey1EXjwNwPjI9xErAsoOCmcMb9GKvyxo=
-github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
-github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
-github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
-github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
-github.com/jackc/pgx v3.3.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
-github.com/jarcoal/httpmock v0.0.0-20180424175123-9c70cfe4a1da/go.mod h1:ks+b9deReOc7jgqp+e7LuFiCBH6Rm5hL32cLcEAArb4=
-github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
-github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8 h1:mGIXW/lubQ4B+3bXTLxcTMTjUNDqoF6T/HUW9LbFx9s=
-github.com/jinzhu/copier v0.0.0-20190625015134-976e0346caa8/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s=
-github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
-github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
-github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
-github.com/joyent/triton-go v0.0.0-20180628001255-830d2b111e62/go.mod h1:U+RSyWxWd04xTqnuOQxnai7XGS2PrPY2cfGoDKtMHjA=
-github.com/joyent/triton-go v1.7.1-0.20200416154420-6801d15b779f/go.mod h1:KDSfL7qe5ZfQqvlDMkVjCztbmcpp/c8M77vhQP8ZPvk=
-github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
-github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM=
-github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
-github.com/k0kubun/pp v3.0.1+incompatible h1:3tqvf7QgUnZ5tXO6pNAZlrvHgl6DvifjDrd9g2S9Z40=
-github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg=
-github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
-github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE=
-github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8=
-github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0=
-github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
-github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
-github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
-github.com/linode/linodego v0.7.1/go.mod h1:ga11n3ivecUrPCHN0rANxKmfWBJVkOXfLMZinAbj2sY=
-github.com/linode/linodego v0.10.0/go.mod h1:cziNP7pbvE3mXIPneHj0oRY8L1WtGEIKlZ8LANE4eXA=
-github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
-github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
-github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
-github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
-github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
-github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw=
-github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
-github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
-github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
-github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
-github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
-github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
-github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
-github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
-github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
-github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
-github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
-github.com/mitchellh/go-testing-interface v1.14.0/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
-github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
-github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
-github.com/mitchellh/hashstructure v0.0.0-20170609045927-2bca23e0e452/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ=
-github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ=
-github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
-github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v1.2.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
-github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/pointerstructure v1.0.0/go.mod h1:k4XwG94++jLVsSiTxo7qdIfXA9pj9EAeo0QsNNJOLZ8=
-github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae h1:VeRdUYdCw49yizlSbMEn2SZ+gT+3IUKx8BqxyQdz+BY=
-github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
-github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
-github.com/nacos-group/nacos-sdk-go v1.0.7/go.mod h1:hlAPn3UdzlxIlSILAyOXKxjFSvDJ9oLzTJ9hLAK1KzA=
-github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
-github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
-github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
-github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
-github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
-github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
-github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
-github.com/nicolai86/scaleway-sdk v1.10.2-0.20180628010248-798f60e20bb2/go.mod h1:TLb2Sg7HQcgGdloNxkrmtgDNR9uVYF3lfdFIN4Ro6Sk=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
-github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
-github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
-github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
-github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/olekukonko/tablewriter v0.0.0-20180130162743-b8a9be070da4/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
-github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
-github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
-github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=
-github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
-github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
-github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
-github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
-github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
-github.com/packethost/packngo v0.1.1-0.20180711074735-b9cb5096f54c/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M=
-github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
-github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
-github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
-github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
-github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
-github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
-github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
-github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
-github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
-github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
-github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
-github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
-github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
-github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
-github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
-github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
-github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
-github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
-github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
-github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
-github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
-github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
-github.com/rboyer/safeio v0.2.1/go.mod h1:Cq/cEPK+YXFn622lsQ0K4KsPZSPtaptHHEldsy7Fmig=
-github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
-github.com/renier/xmlrpc v0.0.0-20170708154548-ce4a1a486c03/go.mod h1:gRAiPF5C5Nd0eyyRdqIu9qTiFSoZzpTq727b5B8fkkU=
-github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
-github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rs/zerolog v1.4.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU=
-github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
-github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
-github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
-github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
-github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
-github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM=
-github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/sean-/conswriter v0.0.0-20180208195008-f5ae3917a627/go.mod h1:7zjs06qF79/FKAJpBvFx3P8Ww4UTIMAe+lpNXDHziac=
-github.com/sean-/pager v0.0.0-20180208200047-666be9bf53b5/go.mod h1:BeybITEsBEg6qbIiqJ6/Bqeq25bCLbL7YFmpaFfJDuM=
-github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/shirou/gopsutil v0.0.0-20181107111621-48177ef5f880/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
-github.com/shirou/gopsutil v3.20.11-0.20201116082039-2fb5da2f2449+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
-github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty4DZO54I4FGqIpto=
-github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
-github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
-github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
-github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
-github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/softlayer/softlayer-go v0.0.0-20180806151055-260589d94c7d/go.mod h1:Cw4GTlQccdRGSEf6KiMju767x0NEHE0YIVPJSaXjlsw=
-github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
-github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
-github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
-github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
-github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
-github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
-github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
-github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
-github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
-github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
-github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
-github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
-github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
-github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
-github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
-github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
-github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
-github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ=
-github.com/tencentcloud/tencentcloud-sdk-go v3.0.83+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4=
-github.com/tent/http-link-go v0.0.0-20130702225549-ac974c61c2f9/go.mod h1:RHkNRtSLfOK7qBTHaeSX1D6BNpI3qw7NTxsmNr4RvN8=
-github.com/tevid/gohamcrest v1.1.1 h1:ou+xSqlIw1xfGTg1uq1nif/htZ2S3EzRqLm2BP+tYU0=
-github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3/go.mod h1:QDlpd3qS71vYtakd2hmdpqhJ9nwv6mD6A30bQ1BPBFE=
-github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
-github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
-github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
-github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
-github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-github.com/vmware/govmomi v0.18.0/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU=
-github.com/willf/bitset v1.1.10 h1:NotGKqX0KwQ72NUzqrjZq5ipPNDQex9lo3WpaS8L2sc=
-github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
-github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
-github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/zouyx/agollo/v3 v3.4.5 h1:7YCxzY9ZYaH9TuVUBvmI6Tk0mwMggikah+cfbYogcHQ=
-github.com/zouyx/agollo/v3 v3.4.5/go.mod h1:LJr3kDmm23QSW+F1Ol4TMHDa7HvJvscMdVxJ2IpUTVc=
-go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
-go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
-go.etcd.io/etcd v0.0.0-20200402134248-51bdeb39e698/go.mod h1:YoUyTScD3Vcv2RBm3eGVOq7i1ULiz3OuXoQFWOirmAM=
-go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
-go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
-go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
-go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
-go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A=
-go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
-go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
-go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
-go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
-go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
-go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
-go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM=
-go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
-golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw=
-golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190508220229-2d0786266e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190523142557-0e01d883c5c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201223074533-0d417f636930 h1:vRgIt+nup/B/BwIS0g2oC0haq0iqbV3ZA+u6+0TlNCo=
-golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200928182047-19e03678916f h1:VwGa2Wf+rHGIxvsssCkUNIyFv8jQY0VCBCNWtikoWq0=
-golang.org/x/tools v0.0.0-20200928182047-19e03678916f/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
-google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
-google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
-google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92 h1:jOTk2Z6KYaWoptUFqZ167cS8peoUPjFEXrsqfVkkCGc=
-google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
-google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
-google.golang.org/grpc v1.36.0 h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As=
-google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
-google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
-gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
-gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
-gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
-gopkg.in/resty.v1 v1.9.1/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc=
-gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
-gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
-gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
-gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
-honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-istio.io/gogo-genproto v0.0.0-20190124151557-6d926a6e6feb/go.mod h1:eIDJ6jNk/IeJz6ODSksHl5Aiczy5JUq6vFhJWI5OtiI=
-k8s.io/api v0.16.9/go.mod h1:Y7dZNHs1Xy0mSwSlzL9QShi6qkljnN41yR8oWCRTDe8=
-k8s.io/apimachinery v0.16.9 h1:ESUZ4hMBUKF2kn2HBFL5zM/wQv4j/0uRbR7AjgqGJ4o=
-k8s.io/apimachinery v0.16.9/go.mod h1:Xk2vD2TRRpuWYLQNM6lT9R7DSFZUYG03SarNkbGrnKE=
-k8s.io/client-go v0.16.9/go.mod h1:ThjPlh7Kx+XoBFOCt775vx5J7atwY7F/zaFzTco5gL0=
-k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
-k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
-k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
-k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
-k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
-launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM=
-rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
-sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
-sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
-sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
-sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
diff --git a/protocol/dubbo3/protoc-gen-dubbo3/main.go b/protocol/dubbo3/protoc-gen-dubbo3/main.go
deleted file mode 100644
index b57ee8b..0000000
--- a/protocol/dubbo3/protoc-gen-dubbo3/main.go
+++ /dev/null
@@ -1,74 +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 main
-
-import (
- "io/ioutil"
- "os"
-)
-
-import (
- "github.com/golang/protobuf/proto"
- "github.com/golang/protobuf/protoc-gen-go/generator"
- _ "github.com/golang/protobuf/protoc-gen-go/grpc"
-)
-
-import (
- _ "github.com/apache/dubbo-go/protocol/dubbo3/protoc-gen-dubbo3/plugin/dubbo3"
-)
-
-func main() {
- // Begin by allocating a generate. The request and response structures are stored there
- // so we can do error handling easily - the response structure contains the field to
- // report failure.
- g := generator.New()
-
- data, err := ioutil.ReadAll(os.Stdin)
- if err != nil {
- g.Error(err, "reading input")
- }
-
- if err := proto.Unmarshal(data, g.Request); err != nil {
- g.Error(err, "parsing input proto")
- }
-
- if len(g.Request.FileToGenerate) == 0 {
- g.Fail("no files to generate")
- }
-
- g.CommandLineParameters(g.Request.GetParameter())
-
- // Create a wrapped version of the Descriptors and EnumDescriptors that
- // point to the file that defines them.
- g.WrapTypes()
-
- g.SetPackageNames()
- g.BuildTypeNameMap()
-
- g.GenerateAllFiles()
-
- // Send back the results.
- data, err = proto.Marshal(g.Response)
- if err != nil {
- g.Error(err, "failed to marshal output proto")
- }
- _, err = os.Stdout.Write(data)
- if err != nil {
- g.Error(err, "failed to write output proto")
- }
-}
diff --git a/protocol/dubbo3/protoc-gen-dubbo3/plugin/dubbo3/dubbo3.go b/protocol/dubbo3/protoc-gen-dubbo3/plugin/dubbo3/dubbo3.go
deleted file mode 100644
index 7315664..0000000
--- a/protocol/dubbo3/protoc-gen-dubbo3/plugin/dubbo3/dubbo3.go
+++ /dev/null
@@ -1,372 +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 dubbo
-
-import (
- "fmt"
- "strconv"
- "strings"
-)
-
-import (
- pb "github.com/golang/protobuf/protoc-gen-go/descriptor"
- "github.com/golang/protobuf/protoc-gen-go/generator"
-)
-
-// generatedCodeVersion indicates a version of the generated codes.
-// It is incremented whenever an incompatibility between the generated codes and
-// the grpc package is introduced; the generated codes references
-// a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion).
-const generatedCodeVersion = 4
-
-// Paths for packages used by codes generated in this file,
-// relative to the import_prefix of the generator.Generator.
-const (
- contextPkgPath = "context"
- grpcPkgPath = "google.golang.org/grpc"
- codePkgPath = "google.golang.org/grpc/codes"
- statusPkgPath = "google.golang.org/grpc/status"
-)
-
-func init() {
- generator.RegisterPlugin(new(dubboGrpc))
-}
-
-// grpc is an implementation of the Go protocol buffer compiler's
-// plugin architecture. It generates bindings for gRPC-dubbo support.
-type dubboGrpc struct {
- gen *generator.Generator
-}
-
-// Name returns the name of this plugin, "grpc".
-func (g *dubboGrpc) Name() string {
- return "dubbo"
-}
-
-// The names for packages imported in the generated codes.
-// They may vary from the final path component of the import path
-// if the name is used by other packages.
-var (
- contextPkg string
- grpcPkg string
-)
-
-// Init initializes the plugin.
-func (g *dubboGrpc) Init(gen *generator.Generator) {
- g.gen = gen
-}
-
-// Given a type name defined in a .proto, return its object.
-// Also record that we're using it, to guarantee the associated import.
-func (g *dubboGrpc) objectNamed(name string) generator.Object {
- g.gen.RecordTypeUse(name)
- return g.gen.ObjectNamed(name)
-}
-
-// Given a type name defined in a .proto, return its name as we will print it.
-func (g *dubboGrpc) typeName(str string) string {
- return g.gen.TypeName(g.objectNamed(str))
-}
-
-// P forwards to g.gen.P.
-func (g *dubboGrpc) P(args ...interface{}) { g.gen.P(args...) }
-
-// Generate generates codes for the services in the given file.
-// be consistent with grpc plugin
-func (g *dubboGrpc) Generate(file *generator.FileDescriptor) {
- if len(file.FileDescriptorProto.Service) == 0 {
- return
- }
-
- contextPkg = string(g.gen.AddImport(contextPkgPath))
- grpcPkg = string(g.gen.AddImport(grpcPkgPath))
-
- for i, service := range file.FileDescriptorProto.Service {
- g.generateService(file, service, i)
- }
-}
-
-// GenerateImports generates the import declaration for this file.
-func (g *dubboGrpc) GenerateImports(file *generator.FileDescriptor) {
- g.P("import (")
- g.P(`dgrpc "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"`)
- g.P(`"dubbo.apache.org/dubbo-go/v3/protocol/invocation"`)
- g.P(`"dubbo.apache.org/dubbo-go/v3/protocol"`)
- g.P(`dubbo3 "github.com/dubbogo/triple/pkg/triple"`)
- g.P(`tripleConstant "github.com/dubbogo/triple/pkg/common/constant"`)
- g.P(` ) `)
-}
-
-func unexport(s string) string { return strings.ToLower(s[:1]) + s[1:] }
-
-// deprecationComment is the standard comment added to deprecated
-// messages, fields, enums, and enum values.
-var deprecationComment = "// Deprecated: Do not use."
-
-// generateService generates all the codes for the named service.
-func (g *dubboGrpc) generateService(file *generator.FileDescriptor, service *pb.ServiceDescriptorProto, index int) {
- path := fmt.Sprintf("6,%d", index) // 6 means service.
-
- origServName := service.GetName()
- fullServName := origServName
- if pkg := file.GetPackage(); pkg != "" {
- fullServName = pkg + "." + fullServName
- }
- servName := generator.CamelCase(origServName)
- lowerServName := strings.ToLower(servName)
- lowerFrontServeName := strings.ToLower(servName[:1]) + servName[1:]
- g.P(fmt.Sprintf("type %sDubbo3Client struct {", lowerServName))
- g.P(fmt.Sprintf("cc *dubbo3.TripleConn"))
- g.P("}")
-
- g.P(fmt.Sprintf("func New%sDubbo3Client (cc *dubbo3.TripleConn) %sClient {", servName, servName))
- g.P(fmt.Sprintf("return &%sDubbo3Client{cc}", lowerServName))
- g.P(fmt.Sprintf("}"))
-
- for _, method := range service.Method {
- inputTypeNames := strings.Split(method.GetInputType(), ".")
- inputTypeName := inputTypeNames[len(inputTypeNames)-1]
- outputTypeNames := strings.Split(method.GetOutputType(), ".")
- outputTypeName := outputTypeNames[len(outputTypeNames)-1]
- if method.GetServerStreaming() || method.GetClientStreaming() {
- //now we only support two way streaming
- g.P(fmt.Sprintf("func (c *%sDubbo3Client) %s(ctx %s.Context,opt ...grpc.CallOption) (%s, error) {",
- lowerServName, method.GetName(), contextPkg, servName+"_"+method.GetName()+"Client"))
- g.P(fmt.Sprintf("interfaceKey := ctx.Value(tripleConstant.InterfaceKey).(string)"))
- g.P(fmt.Sprintf("stream, err := c.cc.NewStream(ctx, \"/\" + interfaceKey + \"/%s\", opt...)", method.GetName()))
- g.P("if err != nil {")
- g.P("return nil, err")
- g.P("}")
- g.P(fmt.Sprintf("x := &%s%sClient{stream}", lowerFrontServeName, method.GetName()))
- g.P("return x, nil")
- g.P("}")
- continue
- }
- // unary rpc method client
- g.P(fmt.Sprintf("func (c *%sDubbo3Client) %s(ctx %s.Context, in *%s, opt ...grpc.CallOption) (*%s, error) {",
- lowerServName, method.GetName(), contextPkg, inputTypeName, outputTypeName))
- g.P(fmt.Sprintf("out := new(%s)", outputTypeName))
- g.P(fmt.Sprintf("interfaceKey := ctx.Value(tripleConstant.InterfaceKey).(string)"))
- g.P(fmt.Sprintf("err := c.cc.Invoke(ctx, \"/\" + interfaceKey + \"/%s\", in, out)", method.GetName()))
- g.P("if err != nil {")
- g.P("return nil, err")
- g.P("}")
- g.P("return out, nil")
- g.P("}")
- }
-
- deprecated := service.GetOptions().GetDeprecated()
-
- g.P()
- g.P(fmt.Sprintf(`// %sClientImpl is the client API for %s service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.`, servName, servName))
-
- // Client interface.
- if deprecated {
- g.P("//")
- g.P(deprecationComment)
- }
- dubboSrvName := servName + "ClientImpl"
- g.P("type ", dubboSrvName, " struct {")
- for i, method := range service.Method {
- g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service.
- if method.GetOptions().GetDeprecated() {
- g.P("//")
- g.P(deprecationComment)
- }
- g.P(g.generateClientSignature(servName, method))
- }
- g.P("}")
- g.P()
-
- // NewClient factory.
- if deprecated {
- g.P(deprecationComment)
- }
-
- // add Reference method
- //func (u *GrpcGreeterImpl) Reference() string {
- // return "GrpcGreeterImpl"
- //}
- g.P("func (c *", dubboSrvName, ") ", " Reference() string ", "{")
- g.P(`return "`, unexport(servName), `Impl"`)
- g.P("}")
- g.P()
-
- // add GetDubboStub method
- // func (u *GrpcGreeterImpl) GetDubboStub(cc *dubbo3.TripleConn) GreeterClient {
- // return NewGreeterClient(cc)
- //}
- g.P("func (c *", dubboSrvName, ") ", " GetDubboStub(cc *dubbo3.TripleConn) ", servName, "Client {")
- g.P(`return New`, servName, `Dubbo3Client(cc)`)
- g.P("}")
- g.P()
-
- // Server interface.
- serverType := servName + "ProviderBase"
- g.P("type ", serverType, " struct {")
- g.P("proxyImpl protocol.Invoker")
- g.P("}")
- g.P()
-
- // add set method
- //func (g *GreeterProviderBase) SetProxyImpl(impl protocol.Invoker) {
- // g.proxyImpl = impl
- //}
- g.P("func (s *", serverType, ") SetProxyImpl(impl protocol.Invoker) {")
- g.P(`s.proxyImpl = impl`)
- g.P("}")
- g.P()
-
- // return get method
- g.P("func (s *", serverType, ") GetProxyImpl() protocol.Invoker {")
- g.P(`return s.proxyImpl`)
- g.P("}")
- g.P()
-
- // return reference
- g.P("func (c *", serverType, ") ", " Reference() string ", "{")
- g.P(`return "`, unexport(servName), `Impl"`)
- g.P("}")
- g.P()
-
- // add handler
- var handlerNames []string
- for _, method := range service.Method {
- hname := g.generateServerMethod(servName, fullServName, method)
- handlerNames = append(handlerNames, hname)
- }
-
- grpcserverType := servName + "Server"
- // return service desc
- g.P("func (s *", serverType, ") ServiceDesc() *grpc.ServiceDesc {")
- g.P(`return &grpc.ServiceDesc{`)
- g.P("ServiceName: ", strconv.Quote(fullServName), ",")
- g.P("HandlerType: (*", grpcserverType, ")(nil),")
- g.P("Methods: []", grpcPkg, ".MethodDesc{")
- for i, method := range service.Method {
- if method.GetServerStreaming() || method.GetClientStreaming() {
- continue
- }
- g.P("{")
- g.P("MethodName: ", strconv.Quote(method.GetName()), ",")
- g.P("Handler: ", handlerNames[i], ",")
- g.P("},")
- }
- g.P("},")
- g.P("Streams: []", grpcPkg, ".StreamDesc{")
- for i, method := range service.Method {
- if !method.GetClientStreaming() && !method.GetServerStreaming() {
- continue
- }
- g.P("{")
- g.P("StreamName: ", strconv.Quote(method.GetName()), ",")
- g.P("Handler: ", handlerNames[i], ",")
- if method.GetServerStreaming() {
- g.P("ServerStreams: true,")
- }
- if method.GetClientStreaming() {
- g.P("ClientStreams: true,")
- }
- g.P("},")
- }
- g.P("},")
- g.P("Metadata: \"", file.GetName(), "\",")
- g.P("}")
- g.P("}")
- g.P()
-}
-
-// generateClientSignature returns the client-side signature for a method.
-func (g *dubboGrpc) generateClientSignature(servName string, method *pb.MethodDescriptorProto) string {
- origMethName := method.GetName()
- methName := generator.CamelCase(origMethName)
- //if reservedClientName[methName] {
- // methName += "_"
- //}
- reqArg := ", in *" + g.typeName(method.GetInputType())
- if method.GetClientStreaming() {
- reqArg = ""
- }
- respName := "out *" + g.typeName(method.GetOutputType())
- if method.GetServerStreaming() || method.GetClientStreaming() {
- respName = servName + "_" + generator.CamelCase(origMethName) + "Client"
- return fmt.Sprintf("%s func(ctx %s.Context%s) (%s, error)", methName, contextPkg, reqArg, respName)
- }
- return fmt.Sprintf("%s func(ctx %s.Context%s, %s) error", methName, contextPkg, reqArg, respName)
-}
-
-func (g *dubboGrpc) generateClientMethod(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string) {
-}
-
-func (g *dubboGrpc) generateServerMethod(servName, fullServName string, method *pb.MethodDescriptorProto) string {
- methName := generator.CamelCase(method.GetName())
- hname := fmt.Sprintf("_DUBBO_%s_%s_Handler", servName, methName)
- inType := g.typeName(method.GetInputType())
-
- if !method.GetServerStreaming() && !method.GetClientStreaming() {
- g.P("func ", hname, "(srv interface{}, ctx ", contextPkg, ".Context, dec func(interface{}) error, interceptor ", grpcPkg, ".UnaryServerInterceptor) (interface{}, error) {")
- g.P("in := new(", inType, ")")
- g.P("if err := dec(in); err != nil { return nil, err }")
-
- g.P("base := srv.(dgrpc.Dubbo3GrpcService)")
- g.P("args := []interface{}{}")
- g.P("args = append(args, in)")
- g.P(`invo := invocation.NewRPCInvocation("`, methName, `", args, nil)`)
-
- g.P("if interceptor == nil {")
- g.P("result := base.GetProxyImpl().Invoke(ctx, invo)")
- g.P("return result.Result(), result.Error()")
- g.P("}")
-
- g.P("info := &", grpcPkg, ".UnaryServerInfo{")
- g.P("Server: srv,")
- g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", fullServName, methName)), ",")
- g.P("}")
-
- g.P("handler := func(ctx ", contextPkg, ".Context, req interface{}) (interface{}, error) {")
- g.P("result := base.GetProxyImpl().Invoke(context.Background(), invo)")
- g.P("return result.Result(), result.Error()")
- g.P("}")
-
- g.P("return interceptor(ctx, in, info, handler)")
- g.P("}")
- g.P()
- return hname
- }
- // streaming rpc
- streamType := unexport(servName) + methName + "Server"
- g.P("func ", hname, "(srv interface{}, stream ", grpcPkg, ".ServerStream) error {")
- g.P("_, ok := srv.(dgrpc.Dubbo3GrpcService)")
- g.P(`invo := invocation.NewRPCInvocation("`, methName, `", nil, nil)`)
- g.P("if !ok {")
- g.P("fmt.Println(invo)")
- g.P("}")
- if !method.GetClientStreaming() {
- g.P("m := new(", inType, ")")
- g.P("if err := stream.RecvMsg(m); err != nil { return err }")
- g.P("return srv.(", servName, "Server).", methName, "(m, &", streamType, "{stream})")
- } else {
- g.P("return srv.(", servName, "Server).", methName, "(&", streamType, "{stream})")
- }
- g.P("}")
- g.P()
-
- return hname
-}
diff --git a/protocol/grpc/client.go b/protocol/grpc/client.go
index bf9e5b9..1d37eb1 100644
--- a/protocol/grpc/client.go
+++ b/protocol/grpc/client.go
@@ -25,8 +25,11 @@ import (
import (
"github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc"
+
"github.com/opentracing/opentracing-go"
+
"google.golang.org/grpc"
+
"gopkg.in/yaml.v2"
)
diff --git a/protocol/grpc/codec.go b/protocol/grpc/codec.go
index 7235a39..488b923 100644
--- a/protocol/grpc/codec.go
+++ b/protocol/grpc/codec.go
@@ -25,6 +25,7 @@ import (
import (
"github.com/golang/protobuf/jsonpb"
"github.com/golang/protobuf/proto"
+
"google.golang.org/grpc/encoding"
)
diff --git a/protocol/grpc/grpc_invoker.go b/protocol/grpc/grpc_invoker.go
index a9a711b..8c535c5 100644
--- a/protocol/grpc/grpc_invoker.go
+++ b/protocol/grpc/grpc_invoker.go
@@ -25,7 +25,9 @@ import (
import (
hessian2 "github.com/apache/dubbo-go-hessian2"
+
"github.com/pkg/errors"
+
"google.golang.org/grpc/connectivity"
)
diff --git a/protocol/grpc/grpc_protocol_test.go b/protocol/grpc/grpc_protocol_test.go
index d5ac9ff..d2d59a5 100644
--- a/protocol/grpc/grpc_protocol_test.go
+++ b/protocol/grpc/grpc_protocol_test.go
@@ -18,7 +18,6 @@
package grpc
import (
- "dubbo.apache.org/dubbo-go/v3/config"
"testing"
"time"
)
@@ -29,6 +28,7 @@ import (
import (
"dubbo.apache.org/dubbo-go/v3/common"
+ "dubbo.apache.org/dubbo-go/v3/config"
"dubbo.apache.org/dubbo-go/v3/protocol"
"dubbo.apache.org/dubbo-go/v3/protocol/grpc/internal/helloworld"
)
diff --git a/protocol/grpc/internal/README.md b/protocol/grpc/internal/README.md
index 5dbf318..7465013 100644
--- a/protocol/grpc/internal/README.md
+++ b/protocol/grpc/internal/README.md
@@ -11,3 +11,4 @@ This internal package is for test. So don't use internal in production.
- [helloworld](./helloworld): test unary process
- [routeguide](./routeguide): test stream process
+- [multiprotos](./multiprotos): use multi pb to generate multi pb.go
diff --git a/protocol/grpc/internal/helloworld/client.go b/protocol/grpc/internal/helloworld/client.go
index 3c6fc9c..ec45dd5 100644
--- a/protocol/grpc/internal/helloworld/client.go
+++ b/protocol/grpc/internal/helloworld/client.go
@@ -19,13 +19,16 @@ package helloworld
import (
"context"
- "dubbo.apache.org/dubbo-go/v3/config"
)
import (
"google.golang.org/grpc"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/config"
+)
+
func init() {
config.SetConsumerService(&GrpcGreeterImpl{})
}
diff --git a/protocol/grpc/internal/helloworld/helloworld.pb.go b/protocol/grpc/internal/helloworld/helloworld.pb.go
index 8f6f922..a9992d3 100644
--- a/protocol/grpc/internal/helloworld/helloworld.pb.go
+++ b/protocol/grpc/internal/helloworld/helloworld.pb.go
@@ -23,11 +23,15 @@ package helloworld
import (
context "context"
fmt "fmt"
+ math "math"
+)
+
+import (
proto "github.com/golang/protobuf/proto"
+
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
- math "math"
)
import (
@@ -247,16 +251,6 @@ func (c *GreeterClientImpl) GetDubboStub(cc *grpc.ClientConn) GreeterClient {
return NewGreeterClient(cc)
}
-// DubboGrpcService is gRPC service
-type DubboGrpcService interface {
- // SetProxyImpl sets proxy.
- SetProxyImpl(impl protocol.Invoker)
- // GetProxyImpl gets proxy.
- GetProxyImpl() protocol.Invoker
- // ServiceDesc gets an RPC service's specification.
- ServiceDesc() *grpc.ServiceDesc
-}
-
type GreeterProviderBase struct {
proxyImpl protocol.Invoker
}
@@ -278,6 +272,15 @@ func _DUBBO_Greeter_SayHello_Handler(srv interface{}, ctx context.Context, dec f
if err := dec(in); err != nil {
return nil, err
}
+ // DubboGrpcService is gRPC service
+ type DubboGrpcService interface {
+ // SetProxyImpl sets proxy.
+ SetProxyImpl(impl protocol.Invoker)
+ // GetProxyImpl gets proxy.
+ GetProxyImpl() protocol.Invoker
+ // ServiceDesc gets an RPC service's specification.
+ ServiceDesc() *grpc.ServiceDesc
+ }
base := srv.(DubboGrpcService)
args := []interface{}{}
args = append(args, in)
diff --git a/protocol/dubbo3/protoc-gen-dubbo3/examples/Makefile b/protocol/grpc/internal/multiprotos/Makefile
similarity index 82%
rename from protocol/dubbo3/protoc-gen-dubbo3/examples/Makefile
rename to protocol/grpc/internal/multiprotos/Makefile
index b84a6da..31ce744 100644
--- a/protocol/dubbo3/protoc-gen-dubbo3/examples/Makefile
+++ b/protocol/grpc/internal/multiprotos/Makefile
@@ -1,19 +1,19 @@
-# 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.
-
-grpc-gen:
- protoc -I ./ helloworld.proto --go_out=plugins=grpc:.
-dubbo3-gen:
- protoc -I ./ helloworld.proto --dubbo3_out=plugins=grpc+dubbo:.
+# 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.
+
+grpc-gen:
+ protoc -I ./ first.proto second.proto --go_out=plugins=grpc:.
+dubbo-gen:
+ protoc -I ./ first.proto second.proto --dubbo_out=plugins=grpc+dubbo:.
diff --git a/protocol/grpc/internal/multiprotos/first.pb.go b/protocol/grpc/internal/multiprotos/first.pb.go
new file mode 100644
index 0000000..3759074
--- /dev/null
+++ b/protocol/grpc/internal/multiprotos/first.pb.go
@@ -0,0 +1,308 @@
+/*
+ * 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.
+ */
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: first.proto
+
+package multiprotos
+
+import (
+ context "context"
+ fmt "fmt"
+ math "math"
+)
+
+import (
+ proto "github.com/golang/protobuf/proto"
+
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/protocol"
+ "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type FirstRequest struct {
+ Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *FirstRequest) Reset() { *m = FirstRequest{} }
+func (m *FirstRequest) String() string { return proto.CompactTextString(m) }
+func (*FirstRequest) ProtoMessage() {}
+func (*FirstRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_55120e8023d656fd, []int{0}
+}
+
+func (m *FirstRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FirstRequest.Unmarshal(m, b)
+}
+func (m *FirstRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FirstRequest.Marshal(b, m, deterministic)
+}
+func (m *FirstRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FirstRequest.Merge(m, src)
+}
+func (m *FirstRequest) XXX_Size() int {
+ return xxx_messageInfo_FirstRequest.Size(m)
+}
+func (m *FirstRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_FirstRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FirstRequest proto.InternalMessageInfo
+
+func (m *FirstRequest) GetMessage() string {
+ if m != nil {
+ return m.Message
+ }
+ return ""
+}
+
+type FirstResponse struct {
+ Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *FirstResponse) Reset() { *m = FirstResponse{} }
+func (m *FirstResponse) String() string { return proto.CompactTextString(m) }
+func (*FirstResponse) ProtoMessage() {}
+func (*FirstResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_55120e8023d656fd, []int{1}
+}
+
+func (m *FirstResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_FirstResponse.Unmarshal(m, b)
+}
+func (m *FirstResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_FirstResponse.Marshal(b, m, deterministic)
+}
+func (m *FirstResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_FirstResponse.Merge(m, src)
+}
+func (m *FirstResponse) XXX_Size() int {
+ return xxx_messageInfo_FirstResponse.Size(m)
+}
+func (m *FirstResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_FirstResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_FirstResponse proto.InternalMessageInfo
+
+func (m *FirstResponse) GetMessage() string {
+ if m != nil {
+ return m.Message
+ }
+ return ""
+}
+
+func init() {
+ proto.RegisterType((*FirstRequest)(nil), "multiprotos.FirstRequest")
+ proto.RegisterType((*FirstResponse)(nil), "multiprotos.FirstResponse")
+}
+
+func init() { proto.RegisterFile("first.proto", fileDescriptor_55120e8023d656fd) }
+
+var fileDescriptor_55120e8023d656fd = []byte{
+ // 137 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4e, 0xcb, 0x2c, 0x2a,
+ 0x2e, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0xce, 0x2d, 0xcd, 0x29, 0xc9, 0x04, 0xb3,
+ 0x8b, 0x95, 0x34, 0xb8, 0x78, 0xdc, 0x40, 0x72, 0x41, 0xa9, 0x85, 0xa5, 0xa9, 0xc5, 0x25, 0x42,
+ 0x12, 0x5c, 0xec, 0xb9, 0xa9, 0xc5, 0xc5, 0x89, 0xe9, 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c,
+ 0x41, 0x30, 0xae, 0x92, 0x26, 0x17, 0x2f, 0x54, 0x65, 0x71, 0x41, 0x7e, 0x5e, 0x71, 0x2a, 0x6e,
+ 0xa5, 0x46, 0x41, 0x5c, 0x3c, 0x6e, 0x45, 0x99, 0xc5, 0x25, 0xc1, 0xa9, 0x45, 0x65, 0x99, 0xc9,
+ 0xa9, 0x42, 0x4e, 0x5c, 0xec, 0x30, 0xa6, 0xa4, 0x1e, 0x92, 0xed, 0x7a, 0xc8, 0x56, 0x4b, 0x49,
+ 0x61, 0x93, 0x82, 0xd8, 0xa5, 0xc4, 0x90, 0xc4, 0x06, 0x16, 0x37, 0x06, 0x04, 0x00, 0x00, 0xff,
+ 0xff, 0x83, 0xb7, 0xe6, 0xc5, 0xcb, 0x00, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// FristServiceClient is the client API for FristService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FristServiceClient interface {
+ Service(ctx context.Context, in *FirstRequest, opts ...grpc.CallOption) (*FirstResponse, error)
+}
+
+type fristServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewFristServiceClient(cc grpc.ClientConnInterface) FristServiceClient {
+ return &fristServiceClient{cc}
+}
+
+func (c *fristServiceClient) Service(ctx context.Context, in *FirstRequest, opts ...grpc.CallOption) (*FirstResponse, error) {
+ out := new(FirstResponse)
+ err := c.cc.Invoke(ctx, "/multiprotos.FristService/Service", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// FristServiceServer is the server API for FristService service.
+type FristServiceServer interface {
+ Service(context.Context, *FirstRequest) (*FirstResponse, error)
+}
+
+// UnimplementedFristServiceServer can be embedded to have forward compatible implementations.
+type UnimplementedFristServiceServer struct {
+}
+
+func (*UnimplementedFristServiceServer) Service(ctx context.Context, req *FirstRequest) (*FirstResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Service not implemented")
+}
+
+func RegisterFristServiceServer(s *grpc.Server, srv FristServiceServer) {
+ s.RegisterService(&_FristService_serviceDesc, srv)
+}
+
+func _FristService_Service_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(FirstRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(FristServiceServer).Service(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/multiprotos.FristService/Service",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(FristServiceServer).Service(ctx, req.(*FirstRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _FristService_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "multiprotos.FristService",
+ HandlerType: (*FristServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Service",
+ Handler: _FristService_Service_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "first.proto",
+}
+
+// FristServiceClientImpl is the client API for FristService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type FristServiceClientImpl struct {
+ Service func(ctx context.Context, in *FirstRequest, out *FirstResponse) error
+}
+
+func (c *FristServiceClientImpl) Reference() string {
+ return "fristServiceImpl"
+}
+
+func (c *FristServiceClientImpl) GetDubboStub(cc *grpc.ClientConn) FristServiceClient {
+ return NewFristServiceClient(cc)
+}
+
+type FristServiceProviderBase struct {
+ proxyImpl protocol.Invoker
+}
+
+func (s *FristServiceProviderBase) SetProxyImpl(impl protocol.Invoker) {
+ s.proxyImpl = impl
+}
+
+func (s *FristServiceProviderBase) GetProxyImpl() protocol.Invoker {
+ return s.proxyImpl
+}
+
+func (c *FristServiceProviderBase) Reference() string {
+ return "fristServiceImpl"
+}
+
+func _DUBBO_FristService_Service_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(FirstRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ // DubboGrpcService is gRPC service
+ type DubboGrpcService interface {
+ // SetProxyImpl sets proxy.
+ SetProxyImpl(impl protocol.Invoker)
+ // GetProxyImpl gets proxy.
+ GetProxyImpl() protocol.Invoker
+ // ServiceDesc gets an RPC service's specification.
+ ServiceDesc() *grpc.ServiceDesc
+ }
+ base := srv.(DubboGrpcService)
+ args := []interface{}{}
+ args = append(args, in)
+ invo := invocation.NewRPCInvocation("Service", args, nil)
+ if interceptor == nil {
+ result := base.GetProxyImpl().Invoke(ctx, invo)
+ return result.Result(), result.Error()
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/multiprotos.FristService/Service",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ result := base.GetProxyImpl().Invoke(ctx, invo)
+ return result.Result(), result.Error()
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func (s *FristServiceProviderBase) ServiceDesc() *grpc.ServiceDesc {
+ return &grpc.ServiceDesc{
+ ServiceName: "multiprotos.FristService",
+ HandlerType: (*FristServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Service",
+ Handler: _DUBBO_FristService_Service_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "first.proto",
+ }
+}
diff --git a/common/host_util.go b/protocol/grpc/internal/multiprotos/first.proto
similarity index 78%
copy from common/host_util.go
copy to protocol/grpc/internal/multiprotos/first.proto
index 9861c92..497cc11 100644
--- a/common/host_util.go
+++ b/protocol/grpc/internal/multiprotos/first.proto
@@ -15,16 +15,18 @@
* limitations under the License.
*/
-package common
+syntax = "proto3";
-import gxnet "github.com/dubbogo/gost/net"
+package multiprotos;
-var localIp string
+message FirstRequest {
+ string message = 1;
+}
+
+message FirstResponse {
+ string message = 1;
+}
-func GetLocalIp() string {
- if len(localIp) != 0 {
- return localIp
- }
- localIp, _ = gxnet.GetLocalIP()
- return localIp
+service FristService {
+ rpc Service (FirstRequest) returns (FirstResponse) {}
}
diff --git a/protocol/grpc/internal/multiprotos/second.pb.go b/protocol/grpc/internal/multiprotos/second.pb.go
new file mode 100644
index 0000000..ed2cb50
--- /dev/null
+++ b/protocol/grpc/internal/multiprotos/second.pb.go
@@ -0,0 +1,590 @@
+/*
+ * 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.
+ */
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: second.proto
+
+package multiprotos
+
+import (
+ context "context"
+ fmt "fmt"
+ math "math"
+)
+
+import (
+ proto "github.com/golang/protobuf/proto"
+
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/protocol"
+ "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+type SecondRequest struct {
+ Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SecondRequest) Reset() { *m = SecondRequest{} }
+func (m *SecondRequest) String() string { return proto.CompactTextString(m) }
+func (*SecondRequest) ProtoMessage() {}
+func (*SecondRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_83c4a0a7b0d4882f, []int{0}
+}
+
+func (m *SecondRequest) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SecondRequest.Unmarshal(m, b)
+}
+func (m *SecondRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SecondRequest.Marshal(b, m, deterministic)
+}
+func (m *SecondRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SecondRequest.Merge(m, src)
+}
+func (m *SecondRequest) XXX_Size() int {
+ return xxx_messageInfo_SecondRequest.Size(m)
+}
+func (m *SecondRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_SecondRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SecondRequest proto.InternalMessageInfo
+
+func (m *SecondRequest) GetMessage() string {
+ if m != nil {
+ return m.Message
+ }
+ return ""
+}
+
+type SecondResponse struct {
+ Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+ XXX_NoUnkeyedLiteral struct{} `json:"-"`
+ XXX_unrecognized []byte `json:"-"`
+ XXX_sizecache int32 `json:"-"`
+}
+
+func (m *SecondResponse) Reset() { *m = SecondResponse{} }
+func (m *SecondResponse) String() string { return proto.CompactTextString(m) }
+func (*SecondResponse) ProtoMessage() {}
+func (*SecondResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_83c4a0a7b0d4882f, []int{1}
+}
+
+func (m *SecondResponse) XXX_Unmarshal(b []byte) error {
+ return xxx_messageInfo_SecondResponse.Unmarshal(m, b)
+}
+func (m *SecondResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ return xxx_messageInfo_SecondResponse.Marshal(b, m, deterministic)
+}
+func (m *SecondResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_SecondResponse.Merge(m, src)
+}
+func (m *SecondResponse) XXX_Size() int {
+ return xxx_messageInfo_SecondResponse.Size(m)
+}
+func (m *SecondResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_SecondResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SecondResponse proto.InternalMessageInfo
+
+func (m *SecondResponse) GetMessage() string {
+ if m != nil {
+ return m.Message
+ }
+ return ""
+}
+
+func init() {
+ proto.RegisterType((*SecondRequest)(nil), "multiprotos.SecondRequest")
+ proto.RegisterType((*SecondResponse)(nil), "multiprotos.SecondResponse")
+}
+
+func init() { proto.RegisterFile("second.proto", fileDescriptor_83c4a0a7b0d4882f) }
+
+var fileDescriptor_83c4a0a7b0d4882f = []byte{
+ // 163 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x4e, 0x4d, 0xce,
+ 0xcf, 0x4b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0xce, 0x2d, 0xcd, 0x29, 0xc9, 0x04,
+ 0xb3, 0x8b, 0x95, 0x34, 0xb9, 0x78, 0x83, 0xc1, 0x92, 0x41, 0xa9, 0x85, 0xa5, 0xa9, 0xc5, 0x25,
+ 0x42, 0x12, 0x5c, 0xec, 0xb9, 0xa9, 0xc5, 0xc5, 0x89, 0xe9, 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a,
+ 0x9c, 0x41, 0x30, 0xae, 0x92, 0x16, 0x17, 0x1f, 0x4c, 0x69, 0x71, 0x41, 0x7e, 0x5e, 0x71, 0x2a,
+ 0x6e, 0xb5, 0x46, 0x9b, 0x99, 0x60, 0xe6, 0x06, 0xa7, 0x16, 0x95, 0x65, 0x26, 0xa7, 0x0a, 0xb9,
+ 0x72, 0x71, 0x40, 0x99, 0x86, 0x42, 0x52, 0x7a, 0x48, 0x4e, 0xd0, 0x43, 0xb1, 0x5f, 0x4a, 0x1a,
+ 0xab, 0x1c, 0xc4, 0x42, 0x25, 0x06, 0x21, 0x77, 0xb8, 0x31, 0x46, 0x14, 0x18, 0x63, 0xc0, 0x88,
+ 0x64, 0x90, 0x31, 0x05, 0x06, 0x69, 0x30, 0x0a, 0x79, 0xc2, 0x0d, 0x32, 0xa1, 0xc8, 0x20, 0x03,
+ 0xc6, 0x24, 0x36, 0xb0, 0xa4, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xd3, 0xba, 0xd2, 0x28, 0xb0,
+ 0x01, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConnInterface
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion6
+
+// SecondServiceClient is the client API for SecondService service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type SecondServiceClient interface {
+ Service1(ctx context.Context, in *SecondRequest, opts ...grpc.CallOption) (*SecondResponse, error)
+ Service2(ctx context.Context, in *SecondRequest, opts ...grpc.CallOption) (SecondService_Service2Client, error)
+ Service3(ctx context.Context, opts ...grpc.CallOption) (SecondService_Service3Client, error)
+ Service4(ctx context.Context, opts ...grpc.CallOption) (SecondService_Service4Client, error)
+}
+
+type secondServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewSecondServiceClient(cc grpc.ClientConnInterface) SecondServiceClient {
+ return &secondServiceClient{cc}
+}
+
+func (c *secondServiceClient) Service1(ctx context.Context, in *SecondRequest, opts ...grpc.CallOption) (*SecondResponse, error) {
+ out := new(SecondResponse)
+ err := c.cc.Invoke(ctx, "/multiprotos.SecondService/Service1", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *secondServiceClient) Service2(ctx context.Context, in *SecondRequest, opts ...grpc.CallOption) (SecondService_Service2Client, error) {
+ stream, err := c.cc.NewStream(ctx, &_SecondService_serviceDesc.Streams[0], "/multiprotos.SecondService/Service2", opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &secondServiceService2Client{stream}
+ if err := x.ClientStream.SendMsg(in); err != nil {
+ return nil, err
+ }
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ return x, nil
+}
+
+type SecondService_Service2Client interface {
+ Recv() (*SecondResponse, error)
+ grpc.ClientStream
+}
+
+type secondServiceService2Client struct {
+ grpc.ClientStream
+}
+
+func (x *secondServiceService2Client) Recv() (*SecondResponse, error) {
+ m := new(SecondResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+func (c *secondServiceClient) Service3(ctx context.Context, opts ...grpc.CallOption) (SecondService_Service3Client, error) {
+ stream, err := c.cc.NewStream(ctx, &_SecondService_serviceDesc.Streams[1], "/multiprotos.SecondService/Service3", opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &secondServiceService3Client{stream}
+ return x, nil
+}
+
+type SecondService_Service3Client interface {
+ Send(*SecondRequest) error
+ CloseAndRecv() (*SecondResponse, error)
+ grpc.ClientStream
+}
+
+type secondServiceService3Client struct {
+ grpc.ClientStream
+}
+
+func (x *secondServiceService3Client) Send(m *SecondRequest) error {
+ return x.ClientStream.SendMsg(m)
+}
+
+func (x *secondServiceService3Client) CloseAndRecv() (*SecondResponse, error) {
+ if err := x.ClientStream.CloseSend(); err != nil {
+ return nil, err
+ }
+ m := new(SecondResponse)
+ if err := x.ClientStream.RecvMsg(m); err != nil {
+ return nil, err
+ }
+ return m, nil
+}
+
+func (c *secondServiceClient) Service4(ctx context.Context, opts ...grpc.CallOption) (SecondService_Service4Client, error) {
+ stream, err := c.cc.NewStream(ctx, &_SecondService_serviceDesc.Streams[2], "/multiprotos.SecondService/Service4", opts...)
+ if err != nil {
+ return nil, err
+ }
+ x := &secondServiceService4Client{stream}
+ return x, nil
+}
+
+type SecondService_Service4Client interface {
+ Send(*SecondRequest) error
+ Recv() (*SecondResponse, error)
+ grpc.ClientStream
... 2952 lines suppressed ...