From 6bb0079e1abc21fa08d326c4300737591c122023 Mon Sep 17 00:00:00 2001 From: andrewshan Date: Thu, 29 Jul 2021 23:40:58 +0800 Subject: [PATCH] polaris first commit --- .github/workflows/testing.yml | 40 + .gitignore | 11 + CONTRIBUTING.md | 26 + Code-of-Conduct.md | 5 + LICENSE | 892 +++++ README-zh.md | 85 + README.md | 86 +- apiserver/README.md | 1 + apiserver/apiserver.go | 111 + apiserver/grpcserver/client_access.go | 193 ++ apiserver/grpcserver/default.go | 29 + apiserver/grpcserver/server.go | 450 +++ apiserver/httpserver/admin.go | 41 + apiserver/httpserver/client_access.go | 198 ++ apiserver/httpserver/console_access.go | 1065 ++++++ apiserver/httpserver/default.go | 29 + apiserver/httpserver/handler.go | 127 + apiserver/httpserver/maintain_access.go | 234 ++ apiserver/httpserver/proto.go | 135 + apiserver/httpserver/server.go | 468 +++ apiserver/l5pbserver/default.go | 29 + apiserver/l5pbserver/naming.go | 212 ++ apiserver/l5pbserver/server.go | 178 + bootstrap/config.go | 18 + bootstrap/run_linux.go | 54 + bootstrap/run_windows.go | 45 + bootstrap/server.go | 414 +++ build.sh | 27 + build_cmdb.sh | 30 + cmd/config.go | 27 + cmd/root.go | 47 + cmd/start.go | 43 + cmd/version.go | 44 + common/api/l5/cl5.pb.go | 1271 +++++++ common/api/l5/cl5.proto | 179 + common/api/protoc/bin/protoc | Bin 0 -> 4969752 bytes common/api/protoc/bin/protoc-gen-go | Bin 0 -> 6476953 bytes .../protoc/include/google/protobuf/any.proto | 155 + .../protoc/include/google/protobuf/api.proto | 210 ++ .../google/protobuf/compiler/plugin.proto | 168 + .../include/google/protobuf/descriptor.proto | 885 +++++ .../include/google/protobuf/duration.proto | 116 + .../include/google/protobuf/empty.proto | 52 + .../include/google/protobuf/field_mask.proto | 245 ++ .../google/protobuf/source_context.proto | 48 + .../include/google/protobuf/struct.proto | 95 + .../include/google/protobuf/timestamp.proto | 138 + .../protoc/include/google/protobuf/type.proto | 187 ++ .../include/google/protobuf/wrappers.proto | 123 + common/api/protoc/readme.txt | 15 + common/api/v1/build.sh | 23 + common/api/v1/circuitbreaker.pb.go | 1081 ++++++ common/api/v1/circuitbreaker.proto | 191 ++ common/api/v1/client.pb.go | 134 + common/api/v1/client.proto | 22 + common/api/v1/codeinfo.go | 277 ++ common/api/v1/configrelease.pb.go | 155 + common/api/v1/configrelease.proto | 20 + common/api/v1/grpcapi.pb.go | 290 ++ common/api/v1/grpcapi.proto | 24 + common/api/v1/model.pb.go | 209 ++ common/api/v1/model.proto | 28 + common/api/v1/platform.pb.go | 166 + common/api/v1/platform.proto | 28 + common/api/v1/ratelimit.pb.go | 1160 +++++++ common/api/v1/ratelimit.proto | 179 + common/api/v1/request.pb.go | 130 + common/api/v1/request.proto | 22 + common/api/v1/response.go | 376 +++ common/api/v1/response.pb.go | 588 ++++ common/api/v1/response.proto | 82 + common/api/v1/routing.pb.go | 368 ++ common/api/v1/routing.proto | 69 + common/api/v1/service.pb.go | 761 +++++ common/api/v1/service.proto | 97 + common/ckv/ckv_test.go | 114 + common/ckv/ckvpool.go | 357 ++ common/ckv/conn.go | 74 + common/connlimit/api.go | 65 + common/connlimit/config.go | 74 + common/connlimit/config_test.go | 44 + common/connlimit/conn.go | 83 + common/connlimit/listener.go | 413 +++ common/connlimit/listener_test.go | 448 +++ common/connlimit/mock_net/mock_conn.go | 200 ++ common/connlimit/stats.go | 28 + common/log/config.go | 339 ++ common/log/default.go | 173 + common/log/options.go | 295 ++ common/log/scope.go | 317 ++ common/model/instance.go | 302 ++ common/model/l5.go | 99 + common/model/naming.go | 416 +++ common/redispool/redisPool.go | 356 ++ common/timewheel/README.md | 52 + common/timewheel/timewheel.go | 191 ++ common/timewheel/timewheel_test.go | 215 ++ common/utils/cl5.go | 65 + common/utils/const.go | 24 + common/utils/context.go | 44 + common/utils/funcs.go | 90 + common/utils/ptypes.go | 37 + common/version/version.go | 43 + config/README.md | 1 + config/config.go | 114 + go.mod | 39 + go.sum | 190 ++ images/polaris_logo_white.png | Bin 0 -> 77652 bytes main.go | 29 + naming/README.md | 1 + naming/auth/api.go | 46 + naming/auth/authority.go | 179 + naming/auth/mock/api_mock.go | 131 + naming/batch/batch.go | 114 + naming/batch/batch_test.go | 162 + naming/batch/config.go | 82 + naming/batch/future.go | 83 + naming/batch/instance.go | 460 +++ naming/batch/utils.go | 50 + naming/cache/cache.go | 394 +++ naming/cache/cache_test.go | 192 ++ naming/cache/circuitbreaker_config.go | 162 + naming/cache/circuitbreaker_config_test.go | 235 ++ naming/cache/config.go | 45 + naming/cache/instance.go | 312 ++ naming/cache/instance_test.go | 256 ++ naming/cache/l5.go | 434 +++ naming/cache/ratelimit_config.go | 261 ++ naming/cache/ratelimit_config_test.go | 285 ++ naming/cache/routing_config.go | 150 + naming/cache/service.go | 328 ++ naming/cache/service_test.go | 256 ++ naming/cache/type1rule.yaml | 26 + naming/cache/type2rule.yaml | 51 + naming/circuitbreaker_config.go | 1268 +++++++ naming/circuitbreaker_config_test.go | 144 + naming/client.go | 417 +++ naming/healthcheck.go | 478 +++ naming/instance.go | 1206 +++++++ naming/l5service.go | 621 ++++ naming/namespace.go | 488 +++ naming/platform.go | 573 ++++ naming/ratelimit_config.go | 570 ++++ naming/ratelimit_config_test.go | 64 + naming/routing_config.go | 440 +++ naming/server.go | 312 ++ naming/service.go | 996 ++++++ naming/service_alias.go | 556 ++++ naming/test/README.md | 13 + naming/test/circuitbreaker_config_test.go | 1308 ++++++++ naming/test/client_test.go | 302 ++ naming/test/healthcheck_test.go | 636 ++++ naming/test/instance_test.go | 1696 ++++++++++ naming/test/l5service_test.go | 306 ++ naming/test/main_test.go | 1406 ++++++++ naming/test/namespace_test.go | 237 ++ naming/test/platform_test.go | 457 +++ naming/test/ratelimit_config_test.go | 537 +++ naming/test/routing_config_test.go | 316 ++ naming/test/run.sh | 5 + naming/test/service_alias_test.go | 684 ++++ naming/test/service_test.go | 1076 ++++++ naming/test/test.yaml | 83 + .../testdata/mesh/invalid-virtualService.yaml | 25 + naming/test/testdata/mesh/normal-gateway.yaml | 51 + .../mesh/normal-virtualService-nometa.yaml | 24 + .../testdata/mesh/normal-virtualService.yaml | 26 + .../testdata/mesh/update-virtualService.yaml | 26 + .../circuitbreaker_config_test.go | 412 +++ naming/testAuthPlugin/instance_test.go | 565 ++++ naming/testAuthPlugin/main_test.go | 198 ++ .../testAuthPlugin/ratelimit_config_test.go | 413 +++ naming/testAuthPlugin/routing_config_test.go | 362 ++ naming/testAuthPlugin/service_test.go | 254 ++ naming/testAuthPlugin/test.yaml | 54 + naming/utils.go | 469 +++ plugin.go | 39 + plugin/auth.go | 61 + plugin/auth/platform/platform.go | 277 ++ plugin/cmdb.go | 66 + plugin/cmdb/memory/memeory.go | 78 + plugin/discoverStatis/discoverLocal/README.md | 21 + .../discoverLocal/discovercall.go | 71 + plugin/discoverStatis/discoverLocal/local.go | 96 + .../discoverLocal/local_test.go | 87 + plugin/discoverStatis/discoverLocal/logger.go | 50 + plugin/discoverstatis.go | 59 + plugin/history.go | 54 + plugin/history/README.md | 1 + plugin/history/logger/history_logger.go | 103 + plugin/parsePassword.go | 52 + plugin/parsePassword/README.md | 1 + plugin/parsePassword/parse.go | 53 + plugin/plugin.go | 78 + plugin/ratelimit.go | 84 + plugin/ratelimit/README.md | 1 + plugin/ratelimit/lrurate/base.go | 79 + plugin/ratelimit/lrurate/lrurate.go | 148 + plugin/ratelimit/lrurate/lrurate_test.go | 267 ++ plugin/ratelimit/tokenBucket/api_limit.go | 179 + .../ratelimit/tokenBucket/api_limit_test.go | 205 ++ plugin/ratelimit/tokenBucket/config.go | 121 + plugin/ratelimit/tokenBucket/implement.go | 72 + plugin/ratelimit/tokenBucket/invoke.go | 48 + plugin/ratelimit/tokenBucket/invoke_test.go | 126 + plugin/ratelimit/tokenBucket/limiter.go | 23 + plugin/ratelimit/tokenBucket/register.go | 29 + .../ratelimit/tokenBucket/resource_limiter.go | 116 + .../tokenBucket/resource_limiter_test.go | 166 + plugin/statis.go | 59 + plugin/statis/local/README.md | 1 + plugin/statis/local/apicall.go | 110 + plugin/statis/local/local.go | 108 + plugin/statis/local/logger.go | 52 + polaris-server.yaml | 182 + store/api.go | 406 +++ store/defaultStore/base_db.go | 192 ++ store/defaultStore/base_db_test.go | 146 + store/defaultStore/business.go | 202 ++ store/defaultStore/circuitbreaker_config.go | 686 ++++ store/defaultStore/common.go | 153 + store/defaultStore/default.go | 245 ++ store/defaultStore/instance.go | 1154 +++++++ store/defaultStore/l5.go | 365 ++ store/defaultStore/meta_task.go | 227 ++ store/defaultStore/namespace.go | 292 ++ store/defaultStore/platform.go | 231 ++ store/defaultStore/polaris_server.sql | 584 ++++ store/defaultStore/ratelimit_config.go | 436 +++ store/defaultStore/routing_config.go | 293 ++ store/defaultStore/service.go | 1282 +++++++ store/defaultStore/sql.go | 304 ++ store/defaultStore/sql_test.go | 32 + store/defaultStore/transaction.go | 255 ++ store/memory/memory.go | 18 + store/mock/README.md | 7 + store/mock/api_mock.go | 2960 +++++++++++++++++ store/sql.go | 24 + store/status.go | 109 + store/store.go | 89 + test/circuitbreaker_config_test.go | 164 + test/client_grpc_test.go | 124 + test/common_test.go | 24 + test/grpc/client.go | 59 + test/grpc/discover.go | 113 + test/grpc/heartbeat.go | 51 + test/grpc/register.go | 74 + test/grpc/report_client.go | 51 + test/http/circuitbreaker_config.go | 590 ++++ test/http/client.go | 188 ++ test/http/instance.go | 307 ++ test/http/namespace.go | 266 ++ test/http/platform.go | 265 ++ test/http/ratelimit_config.go | 307 ++ test/http/service.go | 291 ++ test/instance_test.go | 117 + test/namespace_test.go | 76 + test/platform_test.go | 75 + test/ratelimit_config_test.go | 120 + test/resource/circuitbreaker_config.go | 165 + test/resource/client.go | 40 + test/resource/instance.go | 77 + test/resource/namespace.go | 61 + test/resource/platform.go | 61 + test/resource/ratelimit_config.go | 114 + test/resource/service.go | 76 + test/service_test.go | 99 + tool/check.sh | 25 + tool/include | 84 + tool/install-standalone.sh | 576 ++++ tool/install.sh | 28 + tool/p.sh | 21 + tool/reload.sh | 22 + tool/start.sh | 26 + tool/stop.sh | 22 + tool/uninstall.sh | 23 + version | 1 + vert.sh | 120 + 278 files changed, 64876 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/testing.yml create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md create mode 100644 Code-of-Conduct.md create mode 100644 LICENSE create mode 100644 README-zh.md create mode 100644 apiserver/README.md create mode 100644 apiserver/apiserver.go create mode 100644 apiserver/grpcserver/client_access.go create mode 100644 apiserver/grpcserver/default.go create mode 100644 apiserver/grpcserver/server.go create mode 100644 apiserver/httpserver/admin.go create mode 100644 apiserver/httpserver/client_access.go create mode 100644 apiserver/httpserver/console_access.go create mode 100644 apiserver/httpserver/default.go create mode 100644 apiserver/httpserver/handler.go create mode 100644 apiserver/httpserver/maintain_access.go create mode 100644 apiserver/httpserver/proto.go create mode 100644 apiserver/httpserver/server.go create mode 100644 apiserver/l5pbserver/default.go create mode 100644 apiserver/l5pbserver/naming.go create mode 100644 apiserver/l5pbserver/server.go create mode 100644 bootstrap/config.go create mode 100644 bootstrap/run_linux.go create mode 100644 bootstrap/run_windows.go create mode 100644 bootstrap/server.go create mode 100644 build.sh create mode 100644 build_cmdb.sh create mode 100644 cmd/config.go create mode 100644 cmd/root.go create mode 100644 cmd/start.go create mode 100644 cmd/version.go create mode 100644 common/api/l5/cl5.pb.go create mode 100644 common/api/l5/cl5.proto create mode 100644 common/api/protoc/bin/protoc create mode 100644 common/api/protoc/bin/protoc-gen-go create mode 100644 common/api/protoc/include/google/protobuf/any.proto create mode 100644 common/api/protoc/include/google/protobuf/api.proto create mode 100644 common/api/protoc/include/google/protobuf/compiler/plugin.proto create mode 100644 common/api/protoc/include/google/protobuf/descriptor.proto create mode 100644 common/api/protoc/include/google/protobuf/duration.proto create mode 100644 common/api/protoc/include/google/protobuf/empty.proto create mode 100644 common/api/protoc/include/google/protobuf/field_mask.proto create mode 100644 common/api/protoc/include/google/protobuf/source_context.proto create mode 100644 common/api/protoc/include/google/protobuf/struct.proto create mode 100644 common/api/protoc/include/google/protobuf/timestamp.proto create mode 100644 common/api/protoc/include/google/protobuf/type.proto create mode 100644 common/api/protoc/include/google/protobuf/wrappers.proto create mode 100644 common/api/protoc/readme.txt create mode 100644 common/api/v1/build.sh create mode 100644 common/api/v1/circuitbreaker.pb.go create mode 100644 common/api/v1/circuitbreaker.proto create mode 100644 common/api/v1/client.pb.go create mode 100644 common/api/v1/client.proto create mode 100644 common/api/v1/codeinfo.go create mode 100644 common/api/v1/configrelease.pb.go create mode 100644 common/api/v1/configrelease.proto create mode 100644 common/api/v1/grpcapi.pb.go create mode 100644 common/api/v1/grpcapi.proto create mode 100644 common/api/v1/model.pb.go create mode 100644 common/api/v1/model.proto create mode 100644 common/api/v1/platform.pb.go create mode 100644 common/api/v1/platform.proto create mode 100644 common/api/v1/ratelimit.pb.go create mode 100644 common/api/v1/ratelimit.proto create mode 100644 common/api/v1/request.pb.go create mode 100644 common/api/v1/request.proto create mode 100644 common/api/v1/response.go create mode 100644 common/api/v1/response.pb.go create mode 100644 common/api/v1/response.proto create mode 100644 common/api/v1/routing.pb.go create mode 100644 common/api/v1/routing.proto create mode 100644 common/api/v1/service.pb.go create mode 100644 common/api/v1/service.proto create mode 100644 common/ckv/ckv_test.go create mode 100644 common/ckv/ckvpool.go create mode 100644 common/ckv/conn.go create mode 100644 common/connlimit/api.go create mode 100644 common/connlimit/config.go create mode 100644 common/connlimit/config_test.go create mode 100644 common/connlimit/conn.go create mode 100644 common/connlimit/listener.go create mode 100644 common/connlimit/listener_test.go create mode 100644 common/connlimit/mock_net/mock_conn.go create mode 100644 common/connlimit/stats.go create mode 100644 common/log/config.go create mode 100644 common/log/default.go create mode 100644 common/log/options.go create mode 100644 common/log/scope.go create mode 100644 common/model/instance.go create mode 100644 common/model/l5.go create mode 100644 common/model/naming.go create mode 100644 common/redispool/redisPool.go create mode 100644 common/timewheel/README.md create mode 100644 common/timewheel/timewheel.go create mode 100644 common/timewheel/timewheel_test.go create mode 100644 common/utils/cl5.go create mode 100644 common/utils/const.go create mode 100644 common/utils/context.go create mode 100644 common/utils/funcs.go create mode 100644 common/utils/ptypes.go create mode 100644 common/version/version.go create mode 100644 config/README.md create mode 100644 config/config.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 images/polaris_logo_white.png create mode 100644 main.go create mode 100644 naming/README.md create mode 100644 naming/auth/api.go create mode 100644 naming/auth/authority.go create mode 100644 naming/auth/mock/api_mock.go create mode 100644 naming/batch/batch.go create mode 100644 naming/batch/batch_test.go create mode 100644 naming/batch/config.go create mode 100644 naming/batch/future.go create mode 100644 naming/batch/instance.go create mode 100644 naming/batch/utils.go create mode 100644 naming/cache/cache.go create mode 100644 naming/cache/cache_test.go create mode 100644 naming/cache/circuitbreaker_config.go create mode 100644 naming/cache/circuitbreaker_config_test.go create mode 100644 naming/cache/config.go create mode 100644 naming/cache/instance.go create mode 100644 naming/cache/instance_test.go create mode 100644 naming/cache/l5.go create mode 100644 naming/cache/ratelimit_config.go create mode 100644 naming/cache/ratelimit_config_test.go create mode 100644 naming/cache/routing_config.go create mode 100644 naming/cache/service.go create mode 100644 naming/cache/service_test.go create mode 100644 naming/cache/type1rule.yaml create mode 100644 naming/cache/type2rule.yaml create mode 100644 naming/circuitbreaker_config.go create mode 100644 naming/circuitbreaker_config_test.go create mode 100644 naming/client.go create mode 100644 naming/healthcheck.go create mode 100644 naming/instance.go create mode 100644 naming/l5service.go create mode 100644 naming/namespace.go create mode 100644 naming/platform.go create mode 100644 naming/ratelimit_config.go create mode 100644 naming/ratelimit_config_test.go create mode 100644 naming/routing_config.go create mode 100644 naming/server.go create mode 100644 naming/service.go create mode 100644 naming/service_alias.go create mode 100644 naming/test/README.md create mode 100644 naming/test/circuitbreaker_config_test.go create mode 100644 naming/test/client_test.go create mode 100644 naming/test/healthcheck_test.go create mode 100644 naming/test/instance_test.go create mode 100644 naming/test/l5service_test.go create mode 100644 naming/test/main_test.go create mode 100644 naming/test/namespace_test.go create mode 100644 naming/test/platform_test.go create mode 100644 naming/test/ratelimit_config_test.go create mode 100644 naming/test/routing_config_test.go create mode 100644 naming/test/run.sh create mode 100644 naming/test/service_alias_test.go create mode 100644 naming/test/service_test.go create mode 100644 naming/test/test.yaml create mode 100644 naming/test/testdata/mesh/invalid-virtualService.yaml create mode 100644 naming/test/testdata/mesh/normal-gateway.yaml create mode 100644 naming/test/testdata/mesh/normal-virtualService-nometa.yaml create mode 100644 naming/test/testdata/mesh/normal-virtualService.yaml create mode 100644 naming/test/testdata/mesh/update-virtualService.yaml create mode 100644 naming/testAuthPlugin/circuitbreaker_config_test.go create mode 100644 naming/testAuthPlugin/instance_test.go create mode 100644 naming/testAuthPlugin/main_test.go create mode 100644 naming/testAuthPlugin/ratelimit_config_test.go create mode 100644 naming/testAuthPlugin/routing_config_test.go create mode 100644 naming/testAuthPlugin/service_test.go create mode 100644 naming/testAuthPlugin/test.yaml create mode 100644 naming/utils.go create mode 100644 plugin.go create mode 100644 plugin/auth.go create mode 100644 plugin/auth/platform/platform.go create mode 100644 plugin/cmdb.go create mode 100644 plugin/cmdb/memory/memeory.go create mode 100644 plugin/discoverStatis/discoverLocal/README.md create mode 100644 plugin/discoverStatis/discoverLocal/discovercall.go create mode 100644 plugin/discoverStatis/discoverLocal/local.go create mode 100644 plugin/discoverStatis/discoverLocal/local_test.go create mode 100644 plugin/discoverStatis/discoverLocal/logger.go create mode 100644 plugin/discoverstatis.go create mode 100644 plugin/history.go create mode 100644 plugin/history/README.md create mode 100644 plugin/history/logger/history_logger.go create mode 100644 plugin/parsePassword.go create mode 100644 plugin/parsePassword/README.md create mode 100644 plugin/parsePassword/parse.go create mode 100644 plugin/plugin.go create mode 100644 plugin/ratelimit.go create mode 100644 plugin/ratelimit/README.md create mode 100644 plugin/ratelimit/lrurate/base.go create mode 100644 plugin/ratelimit/lrurate/lrurate.go create mode 100644 plugin/ratelimit/lrurate/lrurate_test.go create mode 100644 plugin/ratelimit/tokenBucket/api_limit.go create mode 100644 plugin/ratelimit/tokenBucket/api_limit_test.go create mode 100644 plugin/ratelimit/tokenBucket/config.go create mode 100644 plugin/ratelimit/tokenBucket/implement.go create mode 100644 plugin/ratelimit/tokenBucket/invoke.go create mode 100644 plugin/ratelimit/tokenBucket/invoke_test.go create mode 100644 plugin/ratelimit/tokenBucket/limiter.go create mode 100644 plugin/ratelimit/tokenBucket/register.go create mode 100644 plugin/ratelimit/tokenBucket/resource_limiter.go create mode 100644 plugin/ratelimit/tokenBucket/resource_limiter_test.go create mode 100644 plugin/statis.go create mode 100644 plugin/statis/local/README.md create mode 100644 plugin/statis/local/apicall.go create mode 100644 plugin/statis/local/local.go create mode 100644 plugin/statis/local/logger.go create mode 100644 polaris-server.yaml create mode 100644 store/api.go create mode 100644 store/defaultStore/base_db.go create mode 100644 store/defaultStore/base_db_test.go create mode 100644 store/defaultStore/business.go create mode 100644 store/defaultStore/circuitbreaker_config.go create mode 100644 store/defaultStore/common.go create mode 100644 store/defaultStore/default.go create mode 100644 store/defaultStore/instance.go create mode 100644 store/defaultStore/l5.go create mode 100644 store/defaultStore/meta_task.go create mode 100644 store/defaultStore/namespace.go create mode 100644 store/defaultStore/platform.go create mode 100644 store/defaultStore/polaris_server.sql create mode 100644 store/defaultStore/ratelimit_config.go create mode 100644 store/defaultStore/routing_config.go create mode 100644 store/defaultStore/service.go create mode 100644 store/defaultStore/sql.go create mode 100644 store/defaultStore/sql_test.go create mode 100644 store/defaultStore/transaction.go create mode 100644 store/memory/memory.go create mode 100644 store/mock/README.md create mode 100644 store/mock/api_mock.go create mode 100644 store/sql.go create mode 100644 store/status.go create mode 100644 store/store.go create mode 100644 test/circuitbreaker_config_test.go create mode 100644 test/client_grpc_test.go create mode 100644 test/common_test.go create mode 100644 test/grpc/client.go create mode 100644 test/grpc/discover.go create mode 100644 test/grpc/heartbeat.go create mode 100644 test/grpc/register.go create mode 100644 test/grpc/report_client.go create mode 100644 test/http/circuitbreaker_config.go create mode 100644 test/http/client.go create mode 100644 test/http/instance.go create mode 100644 test/http/namespace.go create mode 100644 test/http/platform.go create mode 100644 test/http/ratelimit_config.go create mode 100644 test/http/service.go create mode 100644 test/instance_test.go create mode 100644 test/namespace_test.go create mode 100644 test/platform_test.go create mode 100644 test/ratelimit_config_test.go create mode 100644 test/resource/circuitbreaker_config.go create mode 100644 test/resource/client.go create mode 100644 test/resource/instance.go create mode 100644 test/resource/namespace.go create mode 100644 test/resource/platform.go create mode 100644 test/resource/ratelimit_config.go create mode 100644 test/resource/service.go create mode 100644 test/service_test.go create mode 100644 tool/check.sh create mode 100644 tool/include create mode 100644 tool/install-standalone.sh create mode 100644 tool/install.sh create mode 100644 tool/p.sh create mode 100644 tool/reload.sh create mode 100644 tool/start.sh create mode 100644 tool/stop.sh create mode 100644 tool/uninstall.sh create mode 100644 version create mode 100644 vert.sh diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 000000000..3fdff2572 --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,40 @@ +name: Go + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: write + +# Always force the use of Go modules +env: + GO111MODULE: on + +jobs: + + build: + runs-on: ubuntu-latest + steps: + # Setup the environment. + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: 1.15 + # Checkout latest code + - name: Checkout repo + uses: actions/checkout@v2 + + # Execute vert check + - name: vert check + run: bash vert.sh -install && bash vert.sh + + # Run tests + - name: run tests + run: | + cd ./test + go test + + # TODO: Examine coverage \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..cc2d03228 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +polaris-server +polaris-server-release +polaris-server-release.tar.gz + +/log +/statis + +*.swp +*.code-workspace + +.idea diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..d915636a2 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,26 @@ +# Contributing +--- +If you have good comments or suggestions, welcome to create [Issues](https://github.com/Tencent/polaris/issues) or [Pull Requests](https://github.com/Tencent/polaris/pulls),contribute to the polaris open source community. Polaris continues to recruit contributors, even if it is answering questions in the issue, or doing some simple bugfixes, it will be of great help to polaris. + +[Tencent Open Source Incentive Program](https://opensource.tencent.com/contribution) Encourage developers to participate and contribute, and look forward to your joining. + +## Issue +#### For contributors + +Please ensure that the following conditions are met before submitting an issue: + +* Must be a bug or new feature +* Have searched in the issue, and did not find a similar issue or solution +* When creating a new issue, please provide a detailed description, screenshot or short video to help us locate the problem + +## Pull Request +We welcome everyone to contribute code to make our product more powerful. The code team will monitor all pull requests, and we will do the corresponding code inspection and testing. After the test passes, we will accept the PR, but will not immediately merge into the master branch. + +Please confirm before completing a PR: + +1. Fork your own branch from the master branch. +2. Please modify the corresponding documents and comments after modifying the code. +3. Please add License and Copyright declarations in the newly created file. +4. Ensure a consistent code style. +5. Do adequate testing. +6. Then, you can submit your code to the dev branch. \ No newline at end of file diff --git a/Code-of-Conduct.md b/Code-of-Conduct.md new file mode 100644 index 000000000..99d510964 --- /dev/null +++ b/Code-of-Conduct.md @@ -0,0 +1,5 @@ +# PolarisMesh Community Code of Conduct +PolarisMesh follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). + + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the PolarisMesh Code of Conduct Committee via email: PolarisMesh_Community@qq.com \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..6b631df66 --- /dev/null +++ b/LICENSE @@ -0,0 +1,892 @@ +Tencent is pleased to support the open source community by making polaris available. + +Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved. + +A polaris is licensed under the BSD 3-Clause License. A copy of the BSD 3-Clause License is included in this file. + + +Terms of BSD 3-Clause License +--------------------------------------------------- +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Other dependencies and licenses: + + +Open Source Software Licensed under the BSD 2-Clause License: +-------------------------------------------------------------------- +1. errors +Copyright (c) 2015, Dave Cheney + +2. go-check +Copyright (c) 2010-2013 Gustavo Niemeyer + +Terms of the BSD 2-Clause License: +-------------------------------------------------------------------- +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +Open Source Software Licensed under the BSD 3-Clause License: +-------------------------------------------------------------------- +1. protobuf +Copyright (c) 2013, The GoGo Authors. All rights reserved. + +2. protobuf +Copyright 2010 The Go Authors. All rights reserved. + +3. uuid +Copyright (c) 2009,2014 Google Inc. All rights reserved. + +4. Go Networking +Copyright (c) 2009 The Go Authors. All rights reserved. + +5. Go Time +Copyright (c) 2009 The Go Authors. All rights reserved. + +6. Gonum Stat +Copyright ©2013 The Gonum Authors. All rights reserved. + +7. murmur3 +Copyright 2013, Sébastien Paolacci. +All rights reserved. + +8. protobuf +Copyright 2014, Google Inc. All rights reserved. + +The BSD 3-Clause license applies to all parts of Protocol Buffers except the following: + +- Atomicops support for generic gcc, located in + src/google/protobuf/stubs/atomicops_internals_generic_gcc.h. + This file is copyrighted by Red Hat Inc. + +- Atomicops support for AIX/POWER, located in + src/google/protobuf/stubs/atomicops_internals_power.h. + This file is copyrighted by Bloomberg Finance LP. + +9. re2 +Copyright (c) 2009 The RE2 Authors. All rights reserved. + +10. googletest +Copyright 2008, Google Inc. + + + +Terms of the BSD 3-Clause License: +-------------------------------------------------------------------- +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +Open Source Software Licensed under the Permissive Type License: +-------------------------------------------------------------------- +1. GoConvey +Copyright (c) 2016 SmartyStreets, LLC + +Terms of the Permissive Type License: +-------------------------------------------------------------------- +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +NOTE: Various optional and subordinate components carry their own licensing requirements and restrictions. Use of those components is subject to the terms and conditions outlined the respective license of each component. + + +Open Source Software Licensed under the Apache License Version 2.0: +-------------------------------------------------------------------- +1. gomock +Copyright (c) gomock authors and contributors + +2. Redigo +Copyright (c) Redigo authors and contributors + +3. Cobra +Copyright (c) Cobra authors and contributors + +4. YAML +Copyright (c) YAML authors and contributors + +5. reflect2 +Copyright (c) reflect2 authors and contributors + +6. gRPC-Go +Copyright (c) gRPC-Go authors and contributors + +7. gRPC-Java +Copyright (c) gRPC-Java authors and contributors + +8. Log4J +Copyright 1999-2005 The Apache Software Foundation + +9. benchmark +Copyright (c) benchmark authors and contributors. + +10. spring-boot +Copyright (c) spring-boot authors and contributors. + +11. spring-framework +Copyright (c) spring-framework authors and contributors. + +12. spring-cloud-netflix +Copyright (c) spring-cloud-netflix authors and contributors. + +13. spring-cloud config +Copyright (c) spring-cloud-config authors and contributors. + +14. guava +Copyright (c) guava authors and contributors. + +15. reactor +Copyright (c) reactor authors and contributors. + +16. powermock +Copyright 2007-2017 PowerMock Contributors + + +Terms of the Apache v2.0 License: +-------------------------------------------------------------------- +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + + +Open Source Software Licensed Under the MIT License: +The below software in this distribution may have been modified by THL A29 Limited +-------------------------------------------------------------------- +1. go-restful +Copyright (c) 2012,2013 Ernest Micklei + +2. mapstructure +Copyright (c) 2013 Mitchell Hashimoto + +3. lumberjack +Copyright (c) 2014 Nate Finch + +4. Testify +Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. + +5. zap +Copyright (c) 2016-2017 Uber Technologies, Inc. + +6. gomonkey +Copyright (c) 2018 Zhang Xiaolong + +7. go-homedir +Copyright (c) 2013 Mitchell Hashimoto + +8. SLF4J +Copyright (c) 2004-2017 QOS.ch + +9. nghttp2 +Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa +Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors + +10. yaml-cpp +Copyright (c) 2008 Jesse Beder. + +11. murmurhash +Copyright murmurhash authors and contributors + +Terms of the MIT License: +--------------------------------------------------- +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Open Source Software Licensed under the Mozilla Public License, version 2.0 License: +-------------------------------------------------------------------- +1. Go-MySQL-Driver +Copyright (c) 2013, The GoGo Authors. All rights reserved. + +2. golang-lru +Copyright (c) golang-lru authors and contributors + +3. go-multierror +go-multierror (c) authors and contributors + +Terms of the Mozilla Public License, version 2.0 License: +--------------------------------------------------- +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. “Contributor” + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. “Contributor Version” + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor’s Contribution. + +1.3. “Contribution” + + means Covered Software of a particular Contributor. + +1.4. “Covered Software” + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. “Incompatible With Secondary Licenses” + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of version + 1.1 or earlier of the License, but not also under the terms of a + Secondary License. + +1.6. “Executable Form” + + means any form of the work other than Source Code Form. + +1.7. “Larger Work” + + means a work that combines Covered Software with other material, in a separate + file or files, that is not Covered Software. + +1.8. “License” + + means this document. + +1.9. “Licensable” + + means having the right to grant, to the maximum extent possible, whether at the + time of the initial grant or subsequently, any and all of the rights conveyed by + this License. + +1.10. “Modifications” + + means any of the following: + + a. any file in Source Code Form that results from an addition to, deletion + from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. “Patent Claims” of a Contributor + + means any patent claim(s), including without limitation, method, process, + and apparatus claims, in any patent Licensable by such Contributor that + would be infringed, but for the grant of the License, by the making, + using, selling, offering for sale, having made, import, or transfer of + either its Contributions or its Contributor Version. + +1.12. “Secondary License” + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. “Source Code Form” + + means the form of the work preferred for making modifications. + +1.14. “You” (or “Your”) + + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, “control” means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or as + part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its Contributions + or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution become + effective for each Contribution on the date the Contributor first distributes + such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under this + License. No additional rights or licenses will be implied from the distribution + or licensing of Covered Software under this License. Notwithstanding Section + 2.1(b) above, no patent license is granted by a Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party’s + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of its + Contributions. + + This License does not grant any rights in the trademarks, service marks, or + logos of any Contributor (except as may be necessary to comply with the + notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this License + (see Section 10.2) or under the terms of a Secondary License (if permitted + under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its Contributions + are its original creation(s) or it has sufficient rights to grant the + rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under applicable + copyright doctrines of fair use, fair dealing, or other equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under the + terms of this License. You must inform recipients that the Source Code Form + of the Covered Software is governed by the terms of this License, and how + they can obtain a copy of this License. You may not attempt to alter or + restrict the recipients’ rights in the Source Code Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this License, + or sublicense it under different terms, provided that the license for + the Executable Form does not attempt to limit or alter the recipients’ + rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for the + Covered Software. If the Larger Work is a combination of Covered Software + with a work governed by one or more Secondary Licenses, and the Covered + Software is not Incompatible With Secondary Licenses, this License permits + You to additionally distribute such Covered Software under the terms of + such Secondary License(s), so that the recipient of the Larger Work may, at + their option, further distribute the Covered Software under the terms of + either this License or such Secondary License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices (including + copyright notices, patent notices, disclaimers of warranty, or limitations + of liability) contained within the Source Code Form of the Covered + Software, except that You may alter any license notices to the extent + required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on behalf + of any Contributor. You must make it absolutely clear that any such + warranty, support, indemnity, or liability obligation is offered by You + alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, judicial + order, or regulation then You must: (a) comply with the terms of this License + to the maximum extent possible; and (b) describe the limitations and the code + they affect. Such description must be placed in a text file included with all + distributions of the Covered Software under this License. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing basis, + if such Contributor fails to notify You of the non-compliance by some + reasonable means prior to 60 days after You have come back into compliance. + Moreover, Your grants from a particular Contributor are reinstated on an + ongoing basis if such Contributor notifies You of the non-compliance by + some reasonable means, this is the first time You have received notice of + non-compliance with this License from such Contributor, and You become + compliant prior to 30 days after Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, counter-claims, + and cross-claims) alleging that a Contributor Version directly or + indirectly infringes any patent, then the rights granted to You by any and + all Contributors for the Covered Software under Section 2.1 of this License + shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an “as is” basis, without + warranty of any kind, either expressed, implied, or statutory, including, + without limitation, warranties that the Covered Software is free of defects, + merchantable, fit for a particular purpose or non-infringing. The entire + risk as to the quality and performance of the Covered Software is with You. + Should any Covered Software prove defective in any respect, You (not any + Contributor) assume the cost of any necessary servicing, repair, or + correction. This disclaimer of warranty constitutes an essential part of this + License. No use of any Covered Software is authorized under this License + except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from such + party’s negligence to the extent applicable law prohibits such limitation. + Some jurisdictions do not allow the exclusion or limitation of incidental or + consequential damages, so this exclusion and limitation may not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts of + a jurisdiction where the defendant maintains its principal place of business + and such litigation shall be governed by laws of that jurisdiction, without + reference to its conflict-of-law provisions. Nothing in this Section shall + prevent a party’s ability to bring cross-claims or counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject matter + hereof. If any provision of this License is held to be unenforceable, such + provision shall be reformed only to the extent necessary to make it + enforceable. Any law or regulation which provides that the language of a + contract shall be construed against the drafter shall not be used to construe + this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version of + the License under which You originally received the Covered Software, or + under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a modified + version of this License if you rename the license and remove any + references to the name of the license steward (except to note that such + modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, then +You may include the notice in a location (such as a LICENSE file in a relevant +directory) where a recipient would be likely to look for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is “Incompatible + With Secondary Licenses”, as defined by + the Mozilla Public License, v. 2.0. + + +Open Source Software Licensed under the Eclipse Public License, version 1.0 License: +-------------------------------------------------------------------- +1. Junit4 +Copyright (c) junit4 authors and contributors + + +Terms of the Eclipse Public License, version 1.0 License: +--------------------------------------------------- +Eclipse Public License - v 1.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC +LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM +CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial code and + documentation distributed under this Agreement, and + b) in the case of each subsequent Contributor: + + i) changes to the Program, and + + ii) additions to the Program; + + where such changes and/or additions to the Program originate from and are +distributed by that particular Contributor. A Contribution 'originates' from a +Contributor if it was added to the Program by such Contributor itself or anyone +acting on such Contributor's behalf. Contributions do not include additions to +the Program which: (i) are separate modules of software distributed in +conjunction with the Program under their own license agreement, and (ii) are +not derivative works of the Program. + +"Contributor" means any person or entity that distributes the Program. + +"Licensed Patents " mean patent claims licensable by a Contributor which are +necessarily infringed by the use or sale of its Contribution alone or when +combined with the Program. + +"Program" means the Contributions distributed in accordance with this Agreement. + +"Recipient" means anyone who receives the Program under this Agreement, +including all Contributors. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free copyright license to +reproduce, prepare derivative works of, publicly display, publicly perform, +distribute and sublicense the Contribution of such Contributor, if any, and +such derivative works, in source code and object code form. + + b) Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free patent license under +Licensed Patents to make, use, sell, offer to sell, import and otherwise +transfer the Contribution of such Contributor, if any, in source code and +object code form. This patent license shall apply to the combination of the +Contribution and the Program if, at the time the Contribution is added by the +Contributor, such addition of the Contribution causes such combination to be +covered by the Licensed Patents. The patent license shall not apply to any +other combinations which include the Contribution. No hardware per se is +licensed hereunder. + + c) Recipient understands that although each Contributor grants the +licenses to its Contributions set forth herein, no assurances are provided by +any Contributor that the Program does not infringe the patent or other +intellectual property rights of any other entity. Each Contributor disclaims +any liability to Recipient for claims brought by any other entity based on +infringement of intellectual property rights or otherwise. As a condition to +exercising the rights and licenses granted hereunder, each Recipient hereby +assumes sole responsibility to secure any other intellectual property rights +needed, if any. For example, if a third party patent license is required to +allow Recipient to distribute the Program, it is Recipient's responsibility to +acquire that license before distributing the Program. + + d) Each Contributor represents that to its knowledge it has sufficient +copyright rights in its Contribution, if any, to grant the copyright license +set forth in this Agreement. + +3. REQUIREMENTS + +A Contributor may choose to distribute the Program in object code form under +its own license agreement, provided that: + + a) it complies with the terms and conditions of this Agreement; and + + b) its license agreement: + + i) effectively disclaims on behalf of all Contributors all warranties and +conditions, express and implied, including warranties or conditions of title +and non-infringement, and implied warranties or conditions of merchantability +and fitness for a particular purpose; + + ii) effectively excludes on behalf of all Contributors all liability for +damages, including direct, indirect, special, incidental and consequential +damages, such as lost profits; + + iii) states that any provisions which differ from this Agreement are +offered by that Contributor alone and not by any other party; and + + iv) states that source code for the Program is available from such +Contributor, and informs licensees how to obtain it in a reasonable manner on +or through a medium customarily used for software exchange. + +When the Program is made available in source code form: + + a) it must be made available under this Agreement; and + + b) a copy of this Agreement must be included with each copy of the +Program. + +Contributors may not remove or alter any copyright notices contained within the +Program. + +Each Contributor must identify itself as the originator of its Contribution, if +any, in a manner that reasonably allows subsequent Recipients to identify the +originator of the Contribution. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities with +respect to end users, business partners and the like. While this license is +intended to facilitate the commercial use of the Program, the Contributor who +includes the Program in a commercial product offering should do so in a manner +which does not create potential liability for other Contributors. Therefore, if +a Contributor includes the Program in a commercial product offering, such +Contributor ("Commercial Contributor") hereby agrees to defend and indemnify +every other Contributor ("Indemnified Contributor") against any losses, damages +and costs (collectively "Losses") arising from claims, lawsuits and other legal +actions brought by a third party against the Indemnified Contributor to the +extent caused by the acts or omissions of such Commercial Contributor in +connection with its distribution of the Program in a commercial product +offering. The obligations in this section do not apply to any claims or Losses +relating to any actual or alleged intellectual property infringement. In order +to qualify, an Indemnified Contributor must: a) promptly notify the Commercial +Contributor in writing of such claim, and b) allow the Commercial Contributor +to control, and cooperate with the Commercial Contributor in, the defense and +any related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial product +offering, Product X. That Contributor is then a Commercial Contributor. If that +Commercial Contributor then makes performance claims, or offers warranties +related to Product X, those performance claims and warranties are such +Commercial Contributor's responsibility alone. Under this section, the +Commercial Contributor would have to defend claims against the other +Contributors related to those performance claims and warranties, and if a court +requires any other Contributor to pay any damages as a result, the Commercial +Contributor must pay those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, +NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each +Recipient is solely responsible for determining the appropriateness of using +and distributing the Program and assumes all risks associated with its exercise +of rights under this Agreement, including but not limited to the risks and +costs of program errors, compliance with applicable laws, damage to or loss of +data, programs or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY +CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS +GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under applicable +law, it shall not affect the validity or enforceability of the remainder of the +terms of this Agreement, and without further action by the parties hereto, such +provision shall be reformed to the minimum extent necessary to make such +provision valid and enforceable. + +If Recipient institutes patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software or +hardware) infringes such Recipient's patent(s), then such Recipient's rights +granted under Section 2(b) shall terminate as of the date such litigation is +filed. + +All Recipient's rights under this Agreement shall terminate if it fails to +comply with any of the material terms or conditions of this Agreement and does +not cure such failure in a reasonable period of time after becoming aware of +such noncompliance. If all Recipient's rights under this Agreement terminate, +Recipient agrees to cease use and distribution of the Program as soon as +reasonably practicable. However, Recipient's obligations under this Agreement +and any licenses granted by Recipient relating to the Program shall continue +and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in +order to avoid inconsistency the Agreement is copyrighted and may only be +modified in the following manner. The Agreement Steward reserves the right to +publish new versions (including revisions) of this Agreement from time to time. +No one other than the Agreement Steward has the right to modify this Agreement. +The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to +serve as the Agreement Steward to a suitable separate entity. Each new version +of the Agreement will be given a distinguishing version number. The Program +(including Contributions) may always be distributed subject to the version of +the Agreement under which it was received. In addition, after a new version of +the Agreement is published, Contributor may elect to distribute the Program +(including its Contributions) under the new version. Except as expressly stated +in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to +the intellectual property of any Contributor under this Agreement, whether +expressly, by implication, estoppel or otherwise. All rights in the Program not +expressly granted under this Agreement are reserved. + +This Agreement is governed by the laws of the State of New York and the +intellectual property laws of the United States of America. No party to this +Agreement will bring a legal action under this Agreement more than one year +after the cause of action arose. Each party waives its rights to a jury trial +in any resulting litigation. \ No newline at end of file diff --git a/README-zh.md b/README-zh.md new file mode 100644 index 000000000..53ca0b0f1 --- /dev/null +++ b/README-zh.md @@ -0,0 +1,85 @@ + + +___ +# 北极星服务治理中心 +北极星是一个支持多种开发语言、兼容主流开发框架的服务治理中心。支持嵌入式和非嵌入式两种使用方式,嵌入式使用服务治理SDK,非嵌入式使用流量代理Sidecar + +## 概述 +北极星的治理功能是基于服务维度来提供的,北极星的服务可对应到业界主流的框架/平台服务的实现,如[gRPC],[SPRING CLOUD],以及[Kubernetes Service]。基于这些框架/平台开发的应用可以快速接入北极星服务治理。 + +北极星服务端提供以下主流功能特性: + +* ** 服务数据管理 + + 执行可视化控制台或者管理员基于HTTP管理端接口对于服务数据(标签,健康状态,实例信息,治理规则)进行读写操作。 + +* ** 服务注册发现 + + 提供多协议(HTTP,gRPC)接口供被调端服务进行自注册,以及主调端应用发现并拉取其他被调端服务的服务数据,以便接下来进行服务调用。 + +* ** 健康检查 + + 提供多协议(HTTP,gRPC)接口供被调端进行心跳上报,服务端会实时监测心跳记录,对超时的实例进行健康状态变更。 + +## 快速入门 + +### 前置准备 + +#### 准备数据库 + +需要下载并安装MySQL,版本号要求>=5.7,可以在这里进行下载:https://dev.mysql.com/downloads/mysql/5.7.html + +#### 导入数据库建表脚本 + +建表脚本为./store/defaultStore/polaris_server.sql,可通过mysql命令或者admin客户端进行导入 + +#### 准备golang编译环境 + +北极星服务端编译需要golang编译环境,版本号要求>=1.12,可以在这里进行下载:https://golang.org/dl/#featured + +### 编译构建 + +````shell script +chmod +x build.sh +./build.sh +```` +构建完后,可以在当前目录看到polaris-server-release_${version}.tar.gz的软件包。 + +### 安装 + +#### 解压软件包 + +获取polaris-server-release_${version}.tar.gz,并解压 + +#### 修改数据库配置 + +进入解压后的目录,打开polaris-server.yaml,替换DB配置相关的几个变量为实际的数据库参数;##DB_USER##(数据库用户名),##DB_PWD##(数据库密码),##DB_ADDR##(数据库地址),##DB_NAME##(数据库名称) + +#### 执行安装脚本 + +````shell script +chmod +x ./tool/*.sh +#进行安装 +./tool/install.sh +#测试进程是否启动成功 +./tool/p.sh +```` +最后一步运行p.sh后,返回Polaris Server,证明启动成功。 + +#### 验证安装 + +````shell script +curl http://127.0.0.1:8080 +```` +返回Polaris Server,证明功能正常 + +## License + +The polaris is licensed under the BSD 3-Clause License. Copyright and license information can be found in the file [LICENSE](LICENSE) + + + + + + + diff --git a/README.md b/README.md index 7d9450e11..f8d2453ac 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,83 @@ -# polaris - -test + + +___ +# Polaris +Polaris is an operation centre that supports multiple programming languages, with high compatibility to different application framework. +It supports accessing with SDK or sidecar proxy. + +## Overview +Polaris's operation features provided are based on the dimension of the service, +Polaris's service can actualize industry standard framework and service platform, like [gRPC],[SPRING CLOUD],and [Kubernetes Service]. +These applications can switch in Polaris with no downtime. + +Polaris provide features listed as below: + +* ** Service Data Management + + Bringing visibility to the control panel, admin can configure HTTP port (label, health status, instance information, policy). + +* ** Registration and Discovery + + Provide multi-protocol(HTTP,gRPC), self-registration, and caller server's ability to discover and distribute other server end's data for invocation. + +* ** Health Check + + Provide multi-protocol(HTTP,gRPC), provide heartbeat report, server end will monitor heartbeat record, configure overtime health status. + +## Quick Guide + +### Preconditions + +#### Prepare database + +Please download and install MySQL, version requirement >=5.7, download available here: +https://dev.mysql.com/downloads/mysql/5.7.html + +#### Import SQL script + +Point Script: ./store/defaultStore/polaris_server.sql, one can import through mysql admin or console. + +#### Prepare golang compile environment + +Polaris server end needs golang compile environment, version number needs >=1.12, download available here: https://golang.org/dl/#featured. + +### Build + +````shell script +chmod +x build.sh +./build.sh +```` +After built, one can see 'polaris-server-release_${version}.tar.gz' package from the list. + +### Installation + +#### Unzip package + +Obtain polaris-server-release_${version}.tar.gz, and unzip. + +#### Change polaris configuration + +After unzipped, vi polaris-server.yaml, replace DB configuration's variable to real database information +: ##DB_USER## (database username), ##DB_PWD##(database password), ##DB_ADDR##(database address), ##DB_NAME##(database name) + +#### Execute Installation Script + +````shell script +chmod +x ./tool/*.sh +# install +./tool/install.sh +# test whether the process is successful +./tool/p.sh +```` +After all, run ./p.sh, prompt Polaris Server, proof the installation is successful + +#### Verify installation + +````shell script +curl http://127.0.0.1:8080 +```` +Return text is 'Polaris Server', proof features run smoothly + +## License + +The polaris is licensed under the BSD 3-Clause License. Copyright and license information can be found in the file [LICENSE](LICENSE) \ No newline at end of file diff --git a/apiserver/README.md b/apiserver/README.md new file mode 100644 index 000000000..9eec8f6d0 --- /dev/null +++ b/apiserver/README.md @@ -0,0 +1 @@ +# API Server diff --git a/apiserver/apiserver.go b/apiserver/apiserver.go new file mode 100644 index 000000000..3fb0e447b --- /dev/null +++ b/apiserver/apiserver.go @@ -0,0 +1,111 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 apiserver + +import ( + "context" + "errors" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "strings" +) + +const ( + DiscoverAccess string = "discover" + RegisterAccess string = "register" + HealthcheckAccess string = "healthcheck" +) + +/** + * @brief API服务器配置 + */ +type Config struct { + Name string + Option map[string]interface{} + API map[string]APIConfig +} + +/** + * @brief API配置 + */ +type APIConfig struct { + Enable bool + Include []string +} + +/** + * @brief API服务器接口 + */ +type Apiserver interface { + GetProtocol() string + GetPort() uint32 + Initialize(ctx context.Context, option map[string]interface{}, api map[string]APIConfig) error + Run(errCh chan error) + Stop() + Restart(option map[string]interface{}, api map[string]APIConfig, errCh chan error) error +} + +var ( + Slots = make(map[string]Apiserver) +) + +/** + * @brief 注册API服务器 + */ +func Register(name string, server Apiserver) error { + if _, exist := Slots[name]; exist { + err := errors.New("apiserver name exist") + return err + } + + Slots[name] = server + + return nil +} + +/** + * @brief 获取客户端openMethod + */ +func GetClientOpenMethod(include []string, protocol string) (map[string]bool, error) { + clientAccess := make(map[string][]string) + clientAccess[DiscoverAccess] = []string{"Discover", "ReportClient"} + clientAccess[RegisterAccess] = []string{"RegisterInstance", "DeregisterInstance"} + clientAccess[HealthcheckAccess] = []string{"Heartbeat"} + + openMethod := make(map[string]bool) + // 如果为空,开启全部接口 + if len(include) == 0 { + for key := range clientAccess { + include = append(include, key) + } + } + + for _, item := range include { + if methods, ok := clientAccess[item]; ok { + for _, method := range methods { + method = "/v1.Polaris" + strings.ToUpper(protocol) + "/" + method + openMethod[method] = true + } + } else { + log.Errorf("method %s does not exist in %sserver client access", item, protocol) + return nil, fmt.Errorf("method %s does not exist in %sserver client access", item, protocol) + } + } + + return openMethod, nil +} diff --git a/apiserver/grpcserver/client_access.go b/apiserver/grpcserver/client_access.go new file mode 100644 index 000000000..e56c30c62 --- /dev/null +++ b/apiserver/grpcserver/client_access.go @@ -0,0 +1,193 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 grpcserver + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "go.uber.org/zap" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" + "io" + "strings" +) + +/** + * @brief 客户端上报 + */ +func (g *Grpcserver) ReportClient(ctx context.Context, in *api.Client) (*api.Response, error) { + out := g.namingServer.ReportClient(convertContext(ctx), in) + return out, nil +} + +/** + * @brief 注册服务实例 + */ +func (g *Grpcserver) RegisterInstance(ctx context.Context, in *api.Instance) (*api.Response, error) { + // 需要记录操作来源,提高效率,只针对特殊接口添加operator + rCtx := convertContext(ctx) + operator := ParseGrpcOperator(ctx) + rCtx = context.WithValue(rCtx, utils.StringContext("operator"), operator) + out := g.namingServer.CreateInstance(rCtx, in) + return out, nil +} + +/** + * @brief 反注册服务实例 + */ +func (g *Grpcserver) DeregisterInstance(ctx context.Context, in *api.Instance) (*api.Response, error) { + // 需要记录操作来源,提高效率,只针对特殊接口添加operator + rCtx := convertContext(ctx) + operator := ParseGrpcOperator(ctx) + rCtx = context.WithValue(rCtx, utils.StringContext("operator"), operator) + out := g.namingServer.DeleteInstance(rCtx, in) + return out, nil +} + +/** + * @brief 统一发现接口 + */ +func (g *Grpcserver) Discover(server api.PolarisGRPC_DiscoverServer) error { + ctx := convertContext(server.Context()) + clientIP, _ := ctx.Value(utils.StringContext("client-ip")).(string) + clientAddress, _ := ctx.Value(utils.StringContext("client-address")).(string) + requestID, _ := ctx.Value(utils.StringContext("request-id")).(string) + userAgent, _ := ctx.Value(utils.StringContext("user-agent")).(string) + method, _ := grpc.MethodFromServerStream(server) + + for { + in, err := server.Recv() + if nil != err { + if io.EOF == err { + return nil + } + return err + } + + var msg string + msg = fmt.Sprintf("receive grpc discover request: %s", in.Service.String()) + log.Info(msg, + zap.String("type", api.DiscoverRequest_DiscoverRequestType_name[int32(in.Type)]), + zap.String("client-address", clientAddress), + zap.String("user-agent", userAgent), + zap.String("request-id", requestID), + ) + + // 是否允许访问 + if ok := g.allowAccess(method); !ok { + resp := api.NewDiscoverResponse(api.ClientAPINotOpen) + if sendErr := server.Send(resp); sendErr != nil { + return sendErr + } + continue + } + + // stream模式,需要对每个包进行检测 + if code := g.enterRatelimit(clientIP, method); code != api.ExecuteSuccess { + resp := api.NewDiscoverResponse(code) + if err = server.Send(resp); err != nil { + return err + } + continue + } + + var out *api.DiscoverResponse + switch in.Type { + case api.DiscoverRequest_INSTANCE: + out = g.namingServer.ServiceInstancesCache(ctx, in.Service) + case api.DiscoverRequest_ROUTING: + out = g.namingServer.GetRoutingConfigWithCache(ctx, in.Service) + case api.DiscoverRequest_RATE_LIMIT: + out = g.namingServer.GetRateLimitWithCache(ctx, in.Service) + case api.DiscoverRequest_CIRCUIT_BREAKER: + out = g.namingServer.GetCircuitBreakerWithCache(ctx, in.Service) + case api.DiscoverRequest_SERVICES: + out = g.namingServer.GetServiceWithCache(ctx, in.Service) + default: + out = api.NewDiscoverRoutingResponse(api.InvalidDiscoverResource, in.Service) + } + + err = server.Send(out) + if err != nil { + return err + } + } +} + +/** + * @brief 上报心跳 + */ +func (g *Grpcserver) Heartbeat(ctx context.Context, in *api.Instance) (*api.Response, error) { + out := g.namingServer.Heartbeat(convertContext(ctx), in) + return out, nil +} + +/** + * @brief 将GRPC上下文转换成内部上下文 + */ +func convertContext(ctx context.Context) context.Context { + requestID := "" + userAgent := "" + meta, exist := metadata.FromIncomingContext(ctx) + if exist { + ids := meta["request-id"] + if len(ids) > 0 { + requestID = ids[0] + } + agents := meta["user-agent"] + if len(agents) > 0 { + userAgent = agents[0] + } + } + + clientIP := "" + address := "" + if pr, ok := peer.FromContext(ctx); ok && pr.Addr != nil { + address = pr.Addr.String() + addrSlice := strings.Split(address, ":") + if len(addrSlice) == 2 { + clientIP = addrSlice[0] + } + } + + ctx = context.Background() + ctx = context.WithValue(ctx, utils.StringContext("request-id"), requestID) + ctx = context.WithValue(ctx, utils.StringContext("client-ip"), clientIP) + ctx = context.WithValue(ctx, utils.StringContext("client-address"), address) + ctx = context.WithValue(ctx, utils.StringContext("user-agent"), userAgent) + return ctx +} + +// 构造请求源 +func ParseGrpcOperator(ctx context.Context) string { + // 获取请求源 + operator := "GRPC" + if pr, ok := peer.FromContext(ctx); ok && pr.Addr != nil { + address := pr.Addr.String() + addrSlice := strings.Split(address, ":") + if len(addrSlice) == 2 { + operator += ":" + addrSlice[0] + } + } + + return operator +} diff --git a/apiserver/grpcserver/default.go b/apiserver/grpcserver/default.go new file mode 100644 index 000000000..1cac51e30 --- /dev/null +++ b/apiserver/grpcserver/default.go @@ -0,0 +1,29 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 grpcserver + +import ( + "github.com/polarismesh/polaris-server/apiserver" +) + +/** + * @brief 自注册到API服务器插槽 + */ +func init() { + _ = apiserver.Register("grpcserver", &Grpcserver{}) +} diff --git a/apiserver/grpcserver/server.go b/apiserver/grpcserver/server.go new file mode 100644 index 000000000..9ce97b5c2 --- /dev/null +++ b/apiserver/grpcserver/server.go @@ -0,0 +1,450 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 grpcserver + +import ( + "context" + "fmt" + "github.com/polarismesh/polaris-server/apiserver" + "io" + "net" + "net/http" + "strings" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/connlimit" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/naming" + "github.com/polarismesh/polaris-server/plugin" + "go.uber.org/zap" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" +) + +/** + * @brief GRPC API服务器 + */ +type Grpcserver struct { + listenIP string + listenPort uint32 + connLimitConfig *connlimit.Config + start bool + restart bool + exitCh chan struct{} + + server *grpc.Server + namingServer *naming.Server + statis plugin.Statis + ratelimit plugin.Ratelimit + + openAPI map[string]apiserver.APIConfig + openMethod map[string]bool +} + +/** + * @brief 获取端口 + */ +func (g *Grpcserver) GetPort() uint32 { + return g.listenPort +} + +/** + * @brief 获取Server的协议 + */ +func (g *Grpcserver) GetProtocol() string { + return "grpc" +} + +/** + * @brief 初始化GRPC API服务器 + */ +func (g *Grpcserver) Initialize(ctx context.Context, option map[string]interface{}, + api map[string]apiserver.APIConfig) error { + g.listenIP = option["listenIP"].(string) + g.listenPort = uint32(option["listenPort"].(int)) + g.openAPI = api + + if raw, _ := option["connLimit"].(map[interface{}]interface{}); raw != nil { + connConfig, err := connlimit.ParseConnLimitConfig(raw) + if err != nil { + return err + } + g.connLimitConfig = connConfig + } + if ratelimit := plugin.GetRatelimit(); ratelimit != nil { + log.Infof("grpc server open the ratelimit") + g.ratelimit = ratelimit + } + + return nil +} + +/** + * @brief 启动GRPC API服务器 + */ +func (g *Grpcserver) Run(errCh chan error) { + log.Infof("start grpcserver") + g.exitCh = make(chan struct{}) + g.start = true + defer func() { + close(g.exitCh) + g.start = false + }() + + address := fmt.Sprintf("%v:%v", g.listenIP, g.listenPort) + listener, err := net.Listen("tcp", address) + if err != nil { + log.Errorf("%v", err) + errCh <- err + return + } + defer listener.Close() + + // 如果设置最大连接数 + if g.connLimitConfig != nil && g.connLimitConfig.OpenConnLimit { + log.Infof("grpc server use max connection limit: %d, grpc max limit: %d", + g.connLimitConfig.MaxConnPerHost, g.connLimitConfig.MaxConnLimit) + listener, err = connlimit.NewListener(listener, g.GetProtocol(), g.connLimitConfig) + if err != nil { + log.Errorf("conn limit init err: %s", err.Error()) + errCh <- err + return + } + + } + + server := grpc.NewServer( + grpc.UnaryInterceptor(g.unaryInterceptor), + grpc.StreamInterceptor(g.streamInterceptor), + ) + + for name, config := range g.openAPI { + switch name { + case "client": + if config.Enable { + api.RegisterPolarisGRPCServer(server, g) + openMethod, getErr := apiserver.GetClientOpenMethod(config.Include, g.GetProtocol()) + if getErr != nil { + errCh <- getErr + return + } + g.openMethod = openMethod + } + default: + log.Errorf("api %s does not exist in grpcserver", name) + errCh <- fmt.Errorf("api %s does not exist in grpcserver", name) + return + } + } + g.server = server + + // 引入功能模块和插件 + g.namingServer, err = naming.GetServer() + if err != nil { + log.Errorf("%v", err) + errCh <- err + return + } + g.statis = plugin.GetStatis() + + if err := server.Serve(listener); err != nil { + log.Errorf("%v", err) + errCh <- err + return + } + + log.Infof("grpcserver stop") +} + +// 关闭GRPC +func (g *Grpcserver) Stop() { + connlimit.RemoteLimitListener(g.GetProtocol()) + if g.server != nil { + g.server.Stop() + } +} + +// restart +func (g *Grpcserver) Restart(option map[string]interface{}, api map[string]apiserver.APIConfig, + errCh chan error) error { + log.Infof("restart grpc server with new config: %+v", option) + + g.restart = true + g.Stop() + if g.start { + <-g.exitCh + } + + log.Infof("old grpc server has stopped, begin restarting it") + if err := g.Initialize(context.Background(), option, api); err != nil { + log.Errorf("restart grpc server err: %s", err.Error()) + return err + } + + log.Infof("init grpc server successfully, restart it") + g.restart = false + go g.Run(errCh) + + return nil +} + +/** + * @brief 虚拟Stream + * @note 继承ServerStream + */ +type VirtualStream struct { + Method string + ClientAddress string + ClientIP string + UserAgent string + RequestID string + + grpc.ServerStream + Code int + + preprocess PreProcessFunc + postprocess PostProcessFunc + + StartTime time.Time +} + +/** + * @brief VirtualStream接收消息函数 + * @note 拦截ServerSteam接收消息函数 + */ +func (v *VirtualStream) RecvMsg(m interface{}) error { + err := v.ServerStream.RecvMsg(m) + if err == io.EOF { + return err + } + + if err == nil { + err = v.preprocess(v, false) + } else { + v.Code = -1 + } + + return err +} + +/** + * @brief VirtualStream发送消息函数 + * @note 拦截ServerSteam发送消息函数 + */ +func (v *VirtualStream) SendMsg(m interface{}) error { + v.postprocess(v, m) + + err := v.ServerStream.SendMsg(m) + if err != nil { + v.Code = -2 + } + + return err +} + +/** + * @brief 创建VirtualStream + */ +func newVirtualStream(ctx context.Context, method string, stream grpc.ServerStream, + preprocess PreProcessFunc, postprocess PostProcessFunc) *VirtualStream { + var clientAddress string + var clientIP string + var userAgent string + var requestID string + + peer, exist := peer.FromContext(ctx) + if exist { + clientAddress = peer.Addr.String() + // 解析获取clientIP + items := strings.Split(clientAddress, ":") + if len(items) == 2 { + clientIP = items[0] + } + } + + meta, exist := metadata.FromIncomingContext(ctx) + if exist { + agents := meta["user-agent"] + if len(agents) > 0 { + userAgent = agents[0] + } + + ids := meta["request-id"] + if len(ids) > 0 { + requestID = ids[0] + } + } + + return &VirtualStream{ + Method: method, + ClientAddress: clientAddress, + ClientIP: clientIP, + UserAgent: userAgent, + RequestID: requestID, + ServerStream: stream, + Code: 0, + preprocess: preprocess, + postprocess: postprocess, + } +} + +/** + * @brief 在接收和回复请求时统一处理 + */ +func (g *Grpcserver) unaryInterceptor(ctx context.Context, req interface{}, + info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (rsp interface{}, err error) { + + stream := newVirtualStream(ctx, info.FullMethod, nil, g.preprocess, g.postprocess) + + func() { + if err := g.preprocess(stream, true); err != nil { + return + } + + // 判断是否允许访问 + if ok := g.allowAccess(stream.Method); !ok { + rsp = api.NewResponse(api.ClientAPINotOpen) + return + } + + // handler执行前,限流 + if code := g.enterRatelimit(stream.ClientIP, stream.Method); code != api.ExecuteSuccess { + rsp = api.NewResponse(code) + return + } + rsp, err = handler(ctx, req) + }() + + g.postprocess(stream, rsp) + + return +} + +/** + * @brief 在接收和回复请求时统一处理 + */ +func (g *Grpcserver) streamInterceptor(srv interface{}, ss grpc.ServerStream, + info *grpc.StreamServerInfo, handler grpc.StreamHandler) (err error) { + + stream := newVirtualStream(ss.Context(), info.FullMethod, ss, g.preprocess, g.postprocess) + + err = handler(srv, stream) + if err != nil { // 存在非EOF读错误或者写错误 + log.Error(err.Error(), + zap.String("client-address", stream.ClientAddress), + zap.String("user-agent", stream.UserAgent), + zap.String("request-id", stream.RequestID), + zap.String("method", stream.Method), + ) + + g.statis.AddAPICall(stream.Method, stream.Code, 0) + } + + return +} + +// 请求预处理函数定义 +type PreProcessFunc func(stream *VirtualStream, isPrint bool) error + +/** + * @brief 请求预处理 + */ +func (g *Grpcserver) preprocess(stream *VirtualStream, isPrint bool) error { + // 设置开始时间 + stream.StartTime = time.Now() + + if isPrint { + // 打印请求 + log.Info("receive request", + zap.String("client-address", stream.ClientAddress), + zap.String("user-agent", stream.UserAgent), + zap.String("request-id", stream.RequestID), + zap.String("method", stream.Method), + ) + } + + return nil +} + +// 请求后处理函数定义 +type PostProcessFunc func(stream *VirtualStream, m interface{}) + +/** + * @brief 请求后处理 + */ +func (g *Grpcserver) postprocess(stream *VirtualStream, m interface{}) { + response := m.(api.ResponseMessage) + code := api.CalcCode(response) + + // 打印回复 + if code != http.StatusOK { + log.Error(response.String(), + zap.String("client-address", stream.ClientAddress), + zap.String("user-agent", stream.UserAgent), + zap.String("request-id", stream.RequestID), + zap.String("method", stream.Method), + ) + } + + // 接口调用统计 + now := time.Now() + diff := now.Sub(stream.StartTime) + + // 打印耗时超过1s的请求 + if diff > time.Second { + log.Info("handling time > 1s", + zap.String("client-address", stream.ClientAddress), + zap.String("user-agent", stream.UserAgent), + zap.String("request-id", stream.RequestID), + zap.String("method", stream.Method), + zap.Duration("handling-time", diff), + ) + } + + _ = g.statis.AddAPICall(stream.Method, int(response.GetCode().GetValue()), diff.Nanoseconds()) +} + +// 限流 +func (g *Grpcserver) enterRatelimit(ip string, method string) uint32 { + if g.ratelimit == nil { + return api.ExecuteSuccess + } + + //ipRatelimit + if ok := g.ratelimit.Allow(plugin.IPRatelimit, ip); !ok { + log.Error("[grpc] ip ratelimit is not allow", zap.String("client-ip", ip), + zap.String("method", method)) + return api.IPRateLimit + } + // apiRatelimit + if ok := g.ratelimit.Allow(plugin.APIRatelimit, method); !ok { + log.Error("[grpc] api rate limit is not allow", zap.String("client-ip", ip), + zap.String("method", method)) + return api.APIRateLimit + } + + return api.ExecuteSuccess +} + +// 限制访问 +func (g *Grpcserver) allowAccess(method string) bool { + _, ok := g.openMethod[method] + return ok +} diff --git a/apiserver/httpserver/admin.go b/apiserver/httpserver/admin.go new file mode 100644 index 000000000..5a8ea01d3 --- /dev/null +++ b/apiserver/httpserver/admin.go @@ -0,0 +1,41 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 httpserver + +import ( + "github.com/emicklei/go-restful" + "io" +) + +/** + * @brief 注册接口 + */ +func (h *Httpserver) GetAdminServer() *restful.WebService { + ws := new(restful.WebService) + + ws.Route(ws.GET("/").To(h.index)) + + return ws +} + +/** + * @brief URL: "/" + */ +func (h *Httpserver) index(req *restful.Request, rsp *restful.Response) { + io.WriteString(rsp, "Polaris Server") +} diff --git a/apiserver/httpserver/client_access.go b/apiserver/httpserver/client_access.go new file mode 100644 index 000000000..4a06bd8b4 --- /dev/null +++ b/apiserver/httpserver/client_access.go @@ -0,0 +1,198 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 httpserver + +import ( + "fmt" + + "github.com/polarismesh/polaris-server/apiserver" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/emicklei/go-restful" + "go.uber.org/zap" +) + +/** + * @brief 注册客户端接口 + */ +func (h *Httpserver) GetClientAccessServer(include []string) (*restful.WebService, error) { + clientAccess := []string{apiserver.DiscoverAccess, apiserver.RegisterAccess, apiserver.HealthcheckAccess} + + ws := new(restful.WebService) + + ws.Path("/v1").Consumes(restful.MIME_JSON).Produces(restful.MIME_JSON) + + // 如果为空,则开启全部接口 + if len(include) == 0 { + include = clientAccess + } + + // 客户端接口:增删改请求操作存储层,查请求访问缓存 + for _, item := range include { + switch item { + case apiserver.DiscoverAccess: + h.addDiscoverAccess(ws) + case apiserver.RegisterAccess: + h.addRegisterAccess(ws) + case apiserver.HealthcheckAccess: + h.addHealthCheckAccess(ws) + default: + log.Errorf("method %s does not exist in httpserver client access", item) + return nil, fmt.Errorf("method %s does not exist in httpserver client access", item) + } + } + + return ws, nil +} + +/** + * @brief 增加服务发现接口 + */ +func (h *Httpserver) addDiscoverAccess(ws *restful.WebService) { + ws.Route(ws.POST("/ReportClient").To(h.ReportClient)) + ws.Route(ws.POST("/Discover").To(h.Discover)) +} + +/** + * @brief 增加注册/反注册接口 + */ +func (h *Httpserver) addRegisterAccess(ws *restful.WebService) { + ws.Route(ws.POST("/RegisterInstance").To(h.RegisterInstance)) + ws.Route(ws.POST("/DeregisterInstance").To(h.DeregisterInstance)) +} + +/** + * @brief 增加健康检查接口 + */ +func (h *Httpserver) addHealthCheckAccess(ws *restful.WebService) { + ws.Route(ws.POST("/Heartbeat").To(h.Heartbeat)) +} + +/** + * @brief 客户端上报信息 + */ +func (h *Httpserver) ReportClient(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + client := &api.Client{} + context, err := handler.Parse(client) + if context == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.ReportClient(context, client) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 注册服务实例 + */ +func (h *Httpserver) RegisterInstance(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + instance := &api.Instance{} + context, err := handler.Parse(instance) + if context == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreateInstance(context, instance) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 反注册服务实例 + */ +func (h *Httpserver) DeregisterInstance(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + instance := &api.Instance{} + context, err := handler.Parse(instance) + if context == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.DeleteInstance(context, instance) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 统一发现接口 + */ +func (h *Httpserver) Discover(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + discoverRequest := &api.DiscoverRequest{} + context, err := handler.Parse(discoverRequest) + if context == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + var msg string + msg = fmt.Sprintf("receive http discover request: %s", discoverRequest.Service.String()) + log.Info(msg, + zap.String("type", api.DiscoverRequest_DiscoverRequestType_name[int32(discoverRequest.Type)]), + zap.String("client-address", req.Request.RemoteAddr), + zap.String("user-agent", req.HeaderParameter("User-Agent")), + zap.String("request-id", req.HeaderParameter("Request-Id")), + ) + + var ret *api.DiscoverResponse + switch discoverRequest.Type { + case api.DiscoverRequest_INSTANCE: + ret = h.namingServer.ServiceInstancesCache(context, discoverRequest.Service) + case api.DiscoverRequest_ROUTING: + ret = h.namingServer.GetRoutingConfigWithCache(context, discoverRequest.Service) + case api.DiscoverRequest_RATE_LIMIT: + ret = h.namingServer.GetRateLimitWithCache(context, discoverRequest.Service) + case api.DiscoverRequest_CIRCUIT_BREAKER: + ret = h.namingServer.GetCircuitBreakerWithCache(context, discoverRequest.Service) + case api.DiscoverRequest_SERVICES: + ret = h.namingServer.GetServiceWithCache(context, discoverRequest.Service) + default: + ret = api.NewDiscoverRoutingResponse(api.InvalidDiscoverResource, discoverRequest.Service) + } + + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 服务实例心跳 + */ +func (h *Httpserver) Heartbeat(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + instance := &api.Instance{} + context, err := handler.Parse(instance) + if context == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.Heartbeat(context, instance) + handler.WriteHeaderAndProto(ret) +} diff --git a/apiserver/httpserver/console_access.go b/apiserver/httpserver/console_access.go new file mode 100644 index 000000000..71d25e644 --- /dev/null +++ b/apiserver/httpserver/console_access.go @@ -0,0 +1,1065 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 httpserver + +import ( + "context" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "net/http" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/emicklei/go-restful" +) + +const ( + defaultReadAccess string = "default-read" + defaultAccess string = "default" +) + +/** + * @brief 注册管理端接口 + */ +func (h *Httpserver) GetConsoleAccessServer(include []string) (*restful.WebService, error) { + consoleAccess := []string{defaultAccess} + + ws := new(restful.WebService) + + ws.Path("/naming/v1").Consumes(restful.MIME_JSON).Produces(restful.MIME_JSON) + + // 如果为空,则开启全部接口 + if len(include) == 0 { + include = consoleAccess + } + + var hasDefault = false + for _, item := range include { + if item == defaultAccess { + hasDefault = true + break + } + } + for _, item := range include { + switch item { + case defaultReadAccess: + if !hasDefault { + h.addDefaultReadAccess(ws) + } + case defaultAccess: + h.addDefaultAccess(ws) + default: + log.Errorf("method %s does not exist in httpserver console access", item) + return nil, fmt.Errorf("method %s does not exist in httpserver console access", item) + } + } + return ws, nil +} + +/** + * @brief 增加默认读接口 + */ +func (h *Httpserver) addDefaultReadAccess(ws *restful.WebService) { + // 管理端接口:只包含读接口 + ws.Route(ws.GET("/namespaces").To(h.GetNamespaces)) + ws.Route(ws.GET("/namespace/token").To(h.GetNamespaceToken)) + + ws.Route(ws.GET("/services").To(h.GetServices)) + ws.Route(ws.GET("/services/count").To(h.GetServicesCount)) + ws.Route(ws.GET("/service/token").To(h.GetServiceToken)) + ws.Route(ws.POST("/service/alias").To(h.CreateServiceAlias)) + ws.Route(ws.GET("/service/aliases").To(h.GetServiceAliases)) + ws.Route(ws.GET("/service/circuitbreaker").To(h.GetCircuitBreakerByService)) + ws.Route(ws.POST("/service/owner").To(h.GetServiceOwner)) + + ws.Route(ws.GET("/instances").To(h.GetInstances)) + ws.Route(ws.GET("/instances/count").To(h.GetInstancesCount)) + + ws.Route(ws.POST("/routings").To(h.CreateRoutings)) + ws.Route(ws.GET("/routings").To(h.GetRoutings)) + + ws.Route(ws.POST("/ratelimits").To(h.CreateRateLimits)) + ws.Route(ws.GET("/ratelimits").To(h.GetRateLimits)) + + ws.Route(ws.GET("/circuitbreaker").To(h.GetCircuitBreaker)) + ws.Route(ws.GET("/circuitbreaker/versions").To(h.GetCircuitBreakerVersions)) + ws.Route(ws.GET("/circuitbreakers/master").To(h.GetMasterCircuitBreakers)) + ws.Route(ws.GET("/circuitbreakers/release").To(h.GetReleaseCircuitBreakers)) + ws.Route(ws.GET("/circuitbreaker/token").To(h.GetCircuitBreakerToken)) + + ws.Route(ws.GET("/platforms").To(h.GetPlatforms)) + ws.Route(ws.GET("/platform/token").To(h.GetPlatformToken)) +} + +/** + * @brief 增加默认接口 + */ +func (h *Httpserver) addDefaultAccess(ws *restful.WebService) { + // 管理端接口:增删改查请求全部操作存储层 + ws.Route(ws.POST("/namespaces").To(h.CreateNamespaces)) + ws.Route(ws.POST("/namespaces/delete").To(h.DeleteNamespaces)) + ws.Route(ws.PUT("/namespaces").To(h.UpdateNamespaces)) + ws.Route(ws.GET("/namespaces").To(h.GetNamespaces)) + ws.Route(ws.GET("/namespace/token").To(h.GetNamespaceToken)) + ws.Route(ws.PUT("/namespace/token").To(h.UpdateNamespaceToken)) + + ws.Route(ws.POST("/services").To(h.CreateServices)) + ws.Route(ws.POST("/services/delete").To(h.DeleteServices)) + ws.Route(ws.PUT("/services").To(h.UpdateServices)) + ws.Route(ws.GET("/services").To(h.GetServices)) + ws.Route(ws.GET("/services/count").To(h.GetServicesCount)) + ws.Route(ws.GET("/service/token").To(h.GetServiceToken)) + ws.Route(ws.PUT("/service/token").To(h.UpdateServiceToken)) + ws.Route(ws.POST("/service/alias").To(h.CreateServiceAlias)) + ws.Route(ws.POST("/service/alias/no-auth").To(h.CreateServiceAliasNoAuth)) + ws.Route(ws.PUT("/service/alias").To(h.UpdateServiceAlias)) + ws.Route(ws.GET("/service/aliases").To(h.GetServiceAliases)) + ws.Route(ws.GET("/service/circuitbreaker").To(h.GetCircuitBreakerByService)) + ws.Route(ws.POST("/service/owner").To(h.GetServiceOwner)) + + ws.Route(ws.POST("/instances").To(h.CreateInstances)) + ws.Route(ws.POST("/instances/delete").To(h.DeleteInstances)) + ws.Route(ws.POST("/instances/delete/host").To(h.DeleteInstancesByHost)) + ws.Route(ws.PUT("/instances").To(h.UpdateInstances)) + ws.Route(ws.PUT("/instances/isolate/host").To(h.UpdateInstancesIsolate)) + ws.Route(ws.GET("/instances").To(h.GetInstances)) + ws.Route(ws.GET("/instances/count").To(h.GetInstancesCount)) + + ws.Route(ws.POST("/routings").To(h.CreateRoutings)) + ws.Route(ws.POST("/routings/delete").To(h.DeleteRoutings)) + ws.Route(ws.PUT("/routings").To(h.UpdateRoutings)) + ws.Route(ws.GET("/routings").To(h.GetRoutings)) + + ws.Route(ws.POST("/ratelimits").To(h.CreateRateLimits)) + ws.Route(ws.POST("/ratelimits/delete").To(h.DeleteRateLimits)) + ws.Route(ws.PUT("/ratelimits").To(h.UpdateRateLimits)) + ws.Route(ws.GET("/ratelimits").To(h.GetRateLimits)) + + ws.Route(ws.POST("/circuitbreakers").To(h.CreateCircuitBreakers)) + ws.Route(ws.POST("/circuitbreakers/version").To(h.CreateCircuitBreakerVersions)) + ws.Route(ws.POST("/circuitbreakers/delete").To(h.DeleteCircuitBreakers)) + ws.Route(ws.PUT("/circuitbreakers").To(h.UpdateCircuitBreakers)) + ws.Route(ws.POST("/circuitbreakers/release").To(h.ReleaseCircuitBreakers)) + ws.Route(ws.POST("/circuitbreakers/unbind").To(h.UnBindCircuitBreakers)) + ws.Route(ws.GET("/circuitbreaker").To(h.GetCircuitBreaker)) + ws.Route(ws.GET("/circuitbreaker/versions").To(h.GetCircuitBreakerVersions)) + ws.Route(ws.GET("/circuitbreakers/master").To(h.GetMasterCircuitBreakers)) + ws.Route(ws.GET("/circuitbreakers/release").To(h.GetReleaseCircuitBreakers)) + ws.Route(ws.GET("/circuitbreaker/token").To(h.GetCircuitBreakerToken)) + + ws.Route(ws.POST("/platforms").To(h.CreatePlatforms)) + ws.Route(ws.POST("/platforms/delete").To(h.DeletePlatforms)) + ws.Route(ws.PUT("/platforms").To(h.UpdatePlatforms)) + ws.Route(ws.GET("/platforms").To(h.GetPlatforms)) + ws.Route(ws.GET("/platform/token").To(h.GetPlatformToken)) + +} + +/** + * @brief 创建命名空间 + */ +func (h *Httpserver) CreateNamespaces(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var namespaces NamespaceArr + ctx, err := handler.Parse(&namespaces) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreateNamespaces(ctx, namespaces) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 删除命名空间 + */ +func (h *Httpserver) DeleteNamespaces(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var namespaces NamespaceArr + ctx, err := handler.Parse(&namespaces) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.DeleteNamespaces(ctx, namespaces) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 修改命名空间 + */ +func (h *Httpserver) UpdateNamespaces(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var namespaces NamespaceArr + ctx, err := handler.Parse(&namespaces) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateNamespaces(ctx, namespaces) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 查询命名空间 + */ +func (h *Httpserver) GetNamespaces(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + ret := h.namingServer.GetNamespaces(req.Request.URL.Query()) + handler.WriteHeaderAndProto(ret) +} + +// 命名空间token的获取 +func (h *Httpserver) GetNamespaceToken(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + token := req.HeaderParameter("Polaris-Token") + ctx := context.WithValue(context.Background(), utils.StringContext("polaris-token"), token) + + queryParams := parseQueryParams(req) + namespace := &api.Namespace{ + Name: utils.NewStringValue(queryParams["name"]), + Token: utils.NewStringValue(queryParams["token"]), + } + + ret := h.namingServer.GetNamespaceToken(ctx, namespace) + handler.WriteHeaderAndProto(ret) +} + +// 更新命名空间的token +func (h *Httpserver) UpdateNamespaceToken(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var namespace api.Namespace + ctx, err := handler.Parse(&namespace) + if ctx == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateNamespaceToken(ctx, &namespace) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 创建服务 + */ +func (h *Httpserver) CreateServices(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var services ServiceArr + ctx, err := handler.Parse(&services) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreateServices(ctx, services) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 删除服务 + */ +func (h *Httpserver) DeleteServices(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var services ServiceArr + ctx, err := handler.Parse(&services) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.DeleteServices(ctx, services) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 修改服务 + */ +func (h *Httpserver) UpdateServices(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var services ServiceArr + ctx, err := handler.Parse(&services) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateServices(ctx, services) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 查询服务 + */ +func (h *Httpserver) GetServices(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetServices(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 查询服务总数 + */ +func (h *Httpserver) GetServicesCount(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + ret := h.namingServer.GetServicesCount() + handler.WriteHeaderAndProto(ret) +} + +// 获取服务token +func (h *Httpserver) GetServiceToken(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + token := req.HeaderParameter("Polaris-Token") + ctx := context.WithValue(context.Background(), utils.StringContext("polaris-token"), token) + + queryParams := parseQueryParams(req) + service := &api.Service{ + Name: utils.NewStringValue(queryParams["name"]), + Namespace: utils.NewStringValue(queryParams["namespace"]), + Token: utils.NewStringValue(queryParams["token"]), + } + + ret := h.namingServer.GetServiceToken(ctx, service) + handler.WriteHeaderAndProto(ret) +} + +// 更新服务token +func (h *Httpserver) UpdateServiceToken(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var service api.Service + ctx, err := handler.Parse(&service) + if ctx == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateServiceToken(ctx, &service) + handler.WriteHeaderAndProto(ret) +} + +// service alias +func (h *Httpserver) CreateServiceAlias(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var alias api.ServiceAlias + ctx, err := handler.Parse(&alias) + if ctx == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + out := h.namingServer.CreateServiceAlias(ctx, &alias) + handler.WriteHeaderAndProto(out) + return +} + +/** + * @brief 创建服务别名 + * @note 不需要鉴权 + */ +func (h *Httpserver) CreateServiceAliasNoAuth(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var alias api.ServiceAlias + ctx, err := handler.Parse(&alias) + if ctx == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + out := h.namingServer.CreateServiceAliasNoAuth(ctx, &alias) + handler.WriteHeaderAndProto(out) + return +} + +// 修改服务别名 +func (h *Httpserver) UpdateServiceAlias(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var alias api.ServiceAlias + ctx, err := handler.Parse(&alias) + if ctx == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateServiceAlias(ctx, &alias) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) + return +} + +// 根据源服务获取服务别名 +func (h *Httpserver) GetServiceAliases(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetServiceAliases(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 创建服务实例 + */ +func (h *Httpserver) CreateInstances(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var instances InstanceArr + ctx, err := handler.Parse(&instances) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreateInstances(ctx, instances) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 删除服务实例 + */ +func (h *Httpserver) DeleteInstances(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var instances InstanceArr + ctx, err := handler.Parse(&instances) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.DeleteInstances(ctx, instances) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 根据host删除服务实例 + */ +func (h *Httpserver) DeleteInstancesByHost(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var instances InstanceArr + ctx, err := handler.Parse(&instances) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.DeleteInstancesByHost(ctx, instances) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 修改服务实例 + */ +func (h *Httpserver) UpdateInstances(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var instances InstanceArr + ctx, err := handler.Parse(&instances) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateInstances(ctx, instances) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 修改服务实例的隔离状态 + */ +func (h *Httpserver) UpdateInstancesIsolate(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var instances InstanceArr + ctx, err := handler.Parse(&instances) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateInstancesIsolate(ctx, instances) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 查询服务实例 + */ +func (h *Httpserver) GetInstances(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetInstances(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 查询服务实例 + */ +func (h *Httpserver) GetInstancesCount(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + ret := h.namingServer.GetInstancesCount() + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 创建规则路由 + */ +func (h *Httpserver) CreateRoutings(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var routings RoutingArr + ctx, err := handler.Parse(&routings) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreateRoutingConfigs(ctx, routings) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 删除规则路由 + */ +func (h *Httpserver) DeleteRoutings(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var routings RoutingArr + ctx, err := handler.Parse(&routings) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.DeleteRoutingConfigs(ctx, routings) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 修改规则路由 + */ +func (h *Httpserver) UpdateRoutings(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var routings RoutingArr + ctx, err := handler.Parse(&routings) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateRoutingConfigs(ctx, routings) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 查询规则路由 + */ +func (h *Httpserver) GetRoutings(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetRoutingConfigs(nil, queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 创建限流规则 + */ +func (h *Httpserver) CreateRateLimits(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var rateLimits RateLimitArr + ctx, err := handler.Parse(&rateLimits) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreateRateLimits(ctx, rateLimits) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 删除限流规则 + */ +func (h *Httpserver) DeleteRateLimits(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var rateLimits RateLimitArr + ctx, err := handler.Parse(&rateLimits) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.DeleteRateLimits(ctx, rateLimits) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 修改限流规则 + */ +func (h *Httpserver) UpdateRateLimits(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var rateLimits RateLimitArr + ctx, err := handler.Parse(&rateLimits) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateRateLimits(ctx, rateLimits) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 查询限流规则 + */ +func (h *Httpserver) GetRateLimits(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetRateLimits(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 创建熔断规则 + */ +func (h *Httpserver) CreateCircuitBreakers(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var circuitBreakers CircuitBreakerArr + ctx, err := handler.Parse(&circuitBreakers) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreateCircuitBreakers(ctx, circuitBreakers) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 创建熔断规则版本 + */ +func (h *Httpserver) CreateCircuitBreakerVersions(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var circuitBreakers CircuitBreakerArr + ctx, err := handler.Parse(&circuitBreakers) + if ctx == nil { + ret := api.NewBatchQueryResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreateCircuitBreakerVersions(ctx, circuitBreakers) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 删除熔断规则 + */ +func (h *Httpserver) DeleteCircuitBreakers(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var circuitBreakers CircuitBreakerArr + ctx, err := handler.Parse(&circuitBreakers) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.DeleteCircuitBreakers(ctx, circuitBreakers) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 修改熔断规则 + */ +func (h *Httpserver) UpdateCircuitBreakers(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var circuitBreakers CircuitBreakerArr + ctx, err := handler.Parse(&circuitBreakers) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdateCircuitBreakers(ctx, circuitBreakers) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 发布熔断规则 + */ +func (h *Httpserver) ReleaseCircuitBreakers(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var configRelease ConfigReleaseArr + ctx, err := handler.Parse(&configRelease) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.ReleaseCircuitBreakers(ctx, configRelease) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 解绑熔断规则 + */ +func (h *Httpserver) UnBindCircuitBreakers(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var configRelease ConfigReleaseArr + ctx, err := handler.Parse(&configRelease) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UnBindCircuitBreakers(ctx, configRelease) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 根据id和version获取熔断规则 + */ +func (h *Httpserver) GetCircuitBreaker(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetCircuitBreaker(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 查询熔断规则的所有版本 + */ +func (h *Httpserver) GetCircuitBreakerVersions(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetCircuitBreakerVersions(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 查询master熔断规则 + */ +func (h *Httpserver) GetMasterCircuitBreakers(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetMasterCircuitBreakers(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 根据规则id查询已发布的熔断规则 + */ +func (h *Httpserver) GetReleaseCircuitBreakers(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetReleaseCircuitBreakers(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 根据服务查询绑定熔断规则 + */ +func (h *Httpserver) GetCircuitBreakerByService(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetCircuitBreakerByService(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 根据服务获取服务负责人 + */ +func (h *Httpserver) GetServiceOwner(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var services ServiceArr + ctx, err := handler.Parse(&services) + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.GetServiceOwner(ctx, services) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 获取熔断规则token + */ +func (h *Httpserver) GetCircuitBreakerToken(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + token := req.HeaderParameter("Polaris-Token") + ctx := context.WithValue(context.Background(), utils.StringContext("polaris-token"), token) + + queryParams := parseQueryParams(req) + circuitBreaker := &api.CircuitBreaker{ + Id: utils.NewStringValue(queryParams["id"]), + Version: utils.NewStringValue("master"), + Token: utils.NewStringValue(queryParams["token"]), + } + ret := h.namingServer.GetCircuitBreakerToken(ctx, circuitBreaker) + handler.WriteHeaderAndProto(ret) +} + +/* + * @brief 创建平台 + */ +func (h *Httpserver) CreatePlatforms(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var platforms PlatformArr + ctx, err := handler.Parse(&platforms) + + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CreatePlatforms(ctx, platforms) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 修改平台 + */ +func (h *Httpserver) UpdatePlatforms(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var platforms PlatformArr + ctx, err := handler.Parse(&platforms) + + if ctx == nil { + ret := api.NewBatchWriteResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.UpdatePlatforms(ctx, platforms) + + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 删除平台 + */ +func (h *Httpserver) DeletePlatforms(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + var platforms PlatformArr + ctx, err := handler.Parse(&platforms) + if ctx == nil { + ret := api.NewBatchQueryResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + ret := h.namingServer.DeletePlatforms(ctx, platforms) + if code := api.CalcCode(ret); code != http.StatusOK { + handler.WriteHeaderAndProto(ret) + return + } + + handler.WriteHeader(ret.GetCode().GetValue(), http.StatusOK) +} + +/** + * @brief 查询平台 + */ +func (h *Httpserver) GetPlatforms(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + queryParams := parseQueryParams(req) + ret := h.namingServer.GetPlatforms(queryParams) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 查询平台Token + */ +func (h *Httpserver) GetPlatformToken(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + token := req.HeaderParameter("Polaris-Token") + ctx := context.WithValue(context.Background(), utils.StringContext("polaris-token"), token) + + queryParams := parseQueryParams(req) + platform := &api.Platform{ + Id: utils.NewStringValue(queryParams["id"]), + Token: utils.NewStringValue(queryParams["token"]), + } + + ret := h.namingServer.GetPlatformToken(ctx, platform) + handler.WriteHeaderAndProto(ret) +} + +/** + * @brief 解析并获取HTTP的query params + */ +func parseQueryParams(req *restful.Request) map[string]string { + queryParams := make(map[string]string) + for key, value := range req.Request.URL.Query() { + if len(value) > 0 { + queryParams[key] = value[0] // 暂时默认只支持一个查询 + } + } + + return queryParams +} diff --git a/apiserver/httpserver/default.go b/apiserver/httpserver/default.go new file mode 100644 index 000000000..f6e1fc362 --- /dev/null +++ b/apiserver/httpserver/default.go @@ -0,0 +1,29 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 httpserver + +import ( + "github.com/polarismesh/polaris-server/apiserver" +) + +/** + * @brief 自注册到API服务器插槽 + */ +func init() { + _ = apiserver.Register("httpserver", &Httpserver{}) +} diff --git a/apiserver/httpserver/handler.go b/apiserver/httpserver/handler.go new file mode 100644 index 000000000..cf15956ba --- /dev/null +++ b/apiserver/httpserver/handler.go @@ -0,0 +1,127 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 httpserver + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/emicklei/go-restful" + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" + "go.uber.org/zap" + "net/http" + "strings" +) + +/** + * @brief HTTP请求/回复处理器 + */ +type Handler struct { + *restful.Request + *restful.Response +} + +/** + * @brief 解析请求 + */ +func (h *Handler) Parse(message proto.Message) (context.Context, error) { + requestID := h.Request.HeaderParameter("Request-Id") + platformID := h.Request.HeaderParameter("Platform-Id") + platformToken := h.Request.HeaderParameter("Platform-Token") + token := h.Request.HeaderParameter("Polaris-Token") + + if err := jsonpb.Unmarshal(h.Request.Request.Body, message); err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return nil, err + } + + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("request-id"), requestID) + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), platformToken) + if token != "" { + ctx = context.WithValue(ctx, utils.StringContext("polaris-token"), token) + } + + var operator string + addrSlice := strings.Split(h.Request.Request.RemoteAddr, ":") + if len(addrSlice) == 2 { + operator = "HTTP:" + addrSlice[0] + if platformID != "" { + operator += "(" + platformID + ")" + } + } + if staffName := h.Request.HeaderParameter("Staffname"); staffName != "" { + operator = staffName + } + ctx = context.WithValue(ctx, utils.StringContext("operator"), operator) + + return ctx, nil +} + +/** + * @brief 仅返回Code + */ +func (h *Handler) WriteHeader(polarisCode uint32, httpStatus int) { + requestID := h.Request.HeaderParameter(utils.PolarisRequestID) + h.Request.SetAttribute(utils.PolarisCode, polarisCode) // api统计的时候,用该code + + // 对于非200000的返回,补充实际的code到header中 + if polarisCode != api.ExecuteSuccess { + h.Response.AddHeader(utils.PolarisCode, fmt.Sprintf("%d", polarisCode)) + h.Response.AddHeader(utils.PolarisMessage, api.Code2Info(polarisCode)) + } + h.Response.AddHeader("Request-Id", requestID) + h.Response.WriteHeader(httpStatus) +} + +/** + * @brief 返回Code和Proto + */ +func (h *Handler) WriteHeaderAndProto(obj api.ResponseMessage) { + requestID := h.Request.HeaderParameter(utils.PolarisRequestID) + h.Request.SetAttribute(utils.PolarisCode, obj.GetCode().GetValue()) + status := api.CalcCode(obj) + + if status != http.StatusOK { + log.Error(obj.String(), zap.String("request-id", requestID)) + } + if code := obj.GetCode().GetValue(); code != api.ExecuteSuccess { + h.Response.AddHeader(utils.PolarisCode, fmt.Sprintf("%d", code)) + h.Response.AddHeader(utils.PolarisMessage, api.Code2Info(code)) + } + + h.Response.AddHeader(utils.PolarisRequestID, requestID) + h.Response.WriteHeader(status) + + m := jsonpb.Marshaler{Indent: " "} + err := m.Marshal(h.Response, obj) + if err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + } +} + +// http答复简单封装 +func HTTPResponse(req *restful.Request, rsp *restful.Response, code uint32) { + handler := &Handler{req, rsp} + resp := api.NewResponse(code) + handler.WriteHeaderAndProto(resp) +} diff --git a/apiserver/httpserver/maintain_access.go b/apiserver/httpserver/maintain_access.go new file mode 100644 index 000000000..b2e3d6aba --- /dev/null +++ b/apiserver/httpserver/maintain_access.go @@ -0,0 +1,234 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 httpserver + +import ( + "encoding/json" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/connlimit" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/emicklei/go-restful" + "net/http" + "runtime/debug" + "strconv" + "time" +) + +// 运维接口 +func (h *Httpserver) GetMaintainAccessServer() *restful.WebService { + ws := new(restful.WebService) + ws.Path("/maintain/v1").Consumes(restful.MIME_JSON).Produces(restful.MIME_JSON) + + ws.Route(ws.GET("/apiserver/conn").To(h.GetServerConnections)) + ws.Route(ws.GET("/apiserver/conn/stats").To(h.GetServerConnStats)) + ws.Route(ws.POST("apiserver/conn/close").To(h.CloseConnections)) + ws.Route(ws.POST("/memory/free").To(h.FreeOSMemory)) + ws.Route(ws.POST("/instance/clean").Consumes(restful.MIME_JSON).To(h.CleanInstance)) + ws.Route(ws.GET("/instance/heartbeat").To(h.GetLastHeartbeat)) + return ws +} + +// 查看server的连接数 +// query参数:protocol,必须,查看指定协议server +// host,可选,查看指定host +func (h *Httpserver) GetServerConnections(req *restful.Request, rsp *restful.Response) { + params := parseQueryParams(req) + protocol := params["protocol"] + host := params["host"] + if protocol == "" { + _ = rsp.WriteErrorString(http.StatusBadRequest, "missing param protocol") + return + } + + lis := connlimit.GetLimitListener(protocol) + if lis == nil { + _ = rsp.WriteErrorString(http.StatusBadRequest, "not found the protocol") + return + } + + var out struct { + Protocol string + Total int32 + Host map[string]int32 + } + + out.Protocol = protocol + out.Total = lis.GetListenerConnCount() + out.Host = make(map[string]int32) + if host != "" { + out.Host[host] = lis.GetHostConnCount(host) + } else { + lis.Range(func(host string, count int32) bool { + out.Host[host] = count + return true + }) + } + + _ = rsp.WriteEntity(out) +} + +// 获取连接缓存里面的统计信息 +func (h *Httpserver) GetServerConnStats(req *restful.Request, rsp *restful.Response) { + params := parseQueryParams(req) + protocol := params["protocol"] + host := params["host"] + if protocol == "" { + _ = rsp.WriteErrorString(http.StatusBadRequest, "missing param protocol") + return + } + + lis := connlimit.GetLimitListener(protocol) + if lis == nil { + _ = rsp.WriteErrorString(http.StatusBadRequest, "not found the protocol") + return + } + var out struct { + Protocol string + ActiveConnTotal int32 + StatsTotal int + StatsSize int + Stats []*connlimit.HostConnStat + } + out.Protocol = protocol + out.ActiveConnTotal = lis.GetListenerConnCount() + + stats := lis.GetHostConnStats(host) + out.Stats = stats + out.StatsTotal = len(stats) + + // 过滤amount + if amountStr, ok := params["amount"]; ok { + out.Stats = make([]*connlimit.HostConnStat, 0) + amount, _ := strconv.Atoi(amountStr) + for _, stat := range stats { + if stat.Amount >= int32(amount) { + out.Stats = append(out.Stats, stat) + } + } + } + out.StatsSize = len(out.Stats) + + if out.Stats == nil { + out.Stats = make([]*connlimit.HostConnStat, 0) + } + _ = rsp.WriteAsJson(out) +} + +// 关闭指定client ip的连接 +func (h *Httpserver) CloseConnections(req *restful.Request, rsp *restful.Response) { + log.Info("[HTTP] Start doing close connections") + var body []struct { + Protocol string + Host string + Port int // 可以为0,为0意味着关闭host所有的连接 + } + decoder := json.NewDecoder(req.Request.Body) + if err := decoder.Decode(&body); err != nil { + log.Errorf("[HTTP] close connection decode body err: %s", err.Error()) + _ = rsp.WriteError(http.StatusBadRequest, err) + return + } + for _, entry := range body { + if entry.Protocol == "" { + log.Errorf("[HTTP] close connection missing protocol") + _ = rsp.WriteErrorString(http.StatusBadRequest, "missing protocol") + return + } + if entry.Host == "" { + log.Errorf("[HTTP] close connection missing host") + _ = rsp.WriteErrorString(http.StatusBadRequest, "missing host") + return + } + } + + for _, entry := range body { + listener := connlimit.GetLimitListener(entry.Protocol) + if listener == nil { + log.Warnf("[HTTP] not found listener for protocol(%s)", entry.Protocol) + continue + } + if entry.Port != 0 { + if conn := listener.GetHostConnection(entry.Host, entry.Port); conn != nil { + log.Infof("[HTTP] address(%s:%d) to be closed", entry.Host, entry.Port) + _ = conn.Close() + continue + } + } + + log.Infof("[HTTP] host(%s) connections to be closed", entry.Host) + activeConns := listener.GetHostActiveConns(entry.Host) + for _, conn := range activeConns { + if conn != nil { + _ = conn.Close() + } + } + } +} + +// 增加一个释放系统内存的接口 +func (h *Httpserver) FreeOSMemory(req *restful.Request, rsp *restful.Response) { + log.Info("[HTTP] start doing free os memory") + // 防止并发释放 + start := time.Now() + h.freeMemMu.Lock() + debug.FreeOSMemory() + h.freeMemMu.Unlock() + log.Infof("[HTTP] finish doing free os memory, used time: %v", time.Now().Sub(start)) +} + +// 彻底清理flag=1的实例运维接口 +// 支持一个个清理 +func (h *Httpserver) CleanInstance(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + + instance := &api.Instance{} + ctx, err := handler.Parse(instance) + if ctx == nil { + ret := api.NewResponseWithMsg(api.ParseException, err.Error()) + handler.WriteHeaderAndProto(ret) + return + } + + ret := h.namingServer.CleanInstance(ctx, instance) + handler.WriteHeaderAndProto(ret) +} + +// 获取实例,上一次心跳的时间 +func (h *Httpserver) GetLastHeartbeat(req *restful.Request, rsp *restful.Response) { + handler := &Handler{req, rsp} + params := parseQueryParams(req) + instance := &api.Instance{} + if id, ok := params["id"]; ok && id != "" { + instance.Id = utils.NewStringValue(id) + ret := h.namingServer.GetLastHeartbeat(instance) + handler.WriteHeaderAndProto(ret) + return + } + + instance.Service = utils.NewStringValue(params["service"]) + instance.Namespace = utils.NewStringValue(params["namespace"]) + instance.VpcId = utils.NewStringValue(params["vpc_id"]) + instance.Host = utils.NewStringValue(params["host"]) + port, _ := strconv.Atoi(params["port"]) + instance.Port = utils.NewUInt32Value(uint32(port)) + + ret := h.namingServer.GetLastHeartbeat(instance) + handler.WriteHeaderAndProto(ret) + return +} diff --git a/apiserver/httpserver/proto.go b/apiserver/httpserver/proto.go new file mode 100644 index 000000000..14c1a6524 --- /dev/null +++ b/apiserver/httpserver/proto.go @@ -0,0 +1,135 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 httpserver + +import ( + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/proto" +) + +/** + * @brief 命名空间数组定义 + */ +type NamespaceArr []*api.Namespace + +// +func (m *NamespaceArr) Reset() { *m = NamespaceArr{} } + +// +func (m *NamespaceArr) String() string { return proto.CompactTextString(m) } + +// +func (*NamespaceArr) ProtoMessage() {} + +/** + * @brief 服务数组定义 + */ +type ServiceArr []*api.Service + +// +func (m *ServiceArr) Reset() { *m = ServiceArr{} } + +// +func (m *ServiceArr) String() string { return proto.CompactTextString(m) } + +// +func (*ServiceArr) ProtoMessage() {} + +/** + * @brief 服务实例数组定义 + */ +type InstanceArr []*api.Instance + +// +func (m *InstanceArr) Reset() { *m = InstanceArr{} } + +// +func (m *InstanceArr) String() string { return proto.CompactTextString(m) } + +// +func (*InstanceArr) ProtoMessage() {} + +/** + * @brief 路由规则数组定义 + */ +type RoutingArr []*api.Routing + +// +func (m *RoutingArr) Reset() { *m = RoutingArr{} } + +// +func (m *RoutingArr) String() string { return proto.CompactTextString(m) } + +// +func (*RoutingArr) ProtoMessage() {} + +/** + * @brief 限流规则数组定义 + */ +type RateLimitArr []*api.Rule + +// +func (m *RateLimitArr) Reset() { *m = RateLimitArr{} } + +// +func (m *RateLimitArr) String() string { return proto.CompactTextString(m) } + +// +func (*RateLimitArr) ProtoMessage() {} + +/** + * @brief 熔断规则数组定义 + */ +type CircuitBreakerArr []*api.CircuitBreaker + +// +func (m *CircuitBreakerArr) Reset() { *m = CircuitBreakerArr{} } + +// +func (m *CircuitBreakerArr) String() string { return proto.CompactTextString(m) } + +// +func (*CircuitBreakerArr) ProtoMessage() {} + +/** + * @brief 发布规则数组定义 + */ +type ConfigReleaseArr []*api.ConfigRelease + +// +func (m *ConfigReleaseArr) Reset() { *m = ConfigReleaseArr{} } + +// +func (m *ConfigReleaseArr) String() string { return proto.CompactTextString(m) } + +// +func (*ConfigReleaseArr) ProtoMessage() {} + +/* + * @brief 平台数组定义 + */ +type PlatformArr []*api.Platform + +// proto reset +func (m *PlatformArr) Reset() { *m = PlatformArr{} } + +// proto string +func (m *PlatformArr) String() string { return proto.CompactTextString(m) } + +// proto message +func (m *PlatformArr) ProtoMessage() {} diff --git a/apiserver/httpserver/server.go b/apiserver/httpserver/server.go new file mode 100644 index 000000000..35922bb61 --- /dev/null +++ b/apiserver/httpserver/server.go @@ -0,0 +1,468 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 httpserver + +import ( + "context" + "fmt" + "github.com/polarismesh/polaris-server/apiserver" + "github.com/polarismesh/polaris-server/common/utils" + "net" + "net/http" + "net/http/pprof" + "strings" + "sync" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/connlimit" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/naming" + "github.com/polarismesh/polaris-server/plugin" + "github.com/emicklei/go-restful" + "github.com/pkg/errors" + "go.uber.org/zap" +) + +/** + * @brief HTTP API服务器 + */ +type Httpserver struct { + listenIP string + listenPort uint32 + connLimitConfig *connlimit.Config + option map[string]interface{} + openAPI map[string]apiserver.APIConfig + start bool + restart bool + exitCh chan struct{} + + enablePprof bool + + freeMemMu *sync.Mutex + + server *http.Server + namingServer *naming.Server + rateLimit plugin.Ratelimit + statis plugin.Statis + auth plugin.Auth +} + +const ( + Discover string = "Discover" +) + +/** + * @brief 获取端口 + */ +func (h *Httpserver) GetPort() uint32 { + return h.listenPort +} + +/** + * @brief 获取Server的协议 + */ +func (h *Httpserver) GetProtocol() string { + return "http" +} + +/** + * @brief 初始化HTTP API服务器 + */ +func (h *Httpserver) Initialize(ctx context.Context, option map[string]interface{}, + api map[string]apiserver.APIConfig) error { + h.option = option + h.openAPI = api + h.listenIP = option["listenIP"].(string) + h.listenPort = uint32(option["listenPort"].(int)) + h.enablePprof, _ = option["enablePprof"].(bool) + // 连接数限制的配置 + if raw, _ := option["connLimit"].(map[interface{}]interface{}); raw != nil { + connLimitConfig, err := connlimit.ParseConnLimitConfig(raw) + if err != nil { + return err + } + h.connLimitConfig = connLimitConfig + } + if rateLimit := plugin.GetRatelimit(); rateLimit != nil { + log.Infof("http server open the ratelimit") + h.rateLimit = rateLimit + } + + if auth := plugin.GetAuth(); auth != nil { + log.Infof("http server open the auth") + h.auth = auth + } + + h.freeMemMu = new(sync.Mutex) + + return nil +} + +/** + * @brief 启动HTTP API服务器 + */ +func (h *Httpserver) Run(errCh chan error) { + log.Infof("start httpserver") + h.exitCh = make(chan struct{}) + h.start = true + defer func() { + close(h.exitCh) + h.start = false + }() + + var err error + // 引入功能模块和插件 + h.namingServer, err = naming.GetServer() + if err != nil { + log.Errorf("%v", err) + errCh <- err + return + } + h.statis = plugin.GetStatis() + + // 初始化http server + address := fmt.Sprintf("%v:%v", h.listenIP, h.listenPort) + + wsContainer, err := h.createRestfulContainer() + if err != nil { + errCh <- err + return + } + + server := http.Server{Addr: address, Handler: wsContainer, WriteTimeout: 1 * time.Minute} + + ln, err := net.Listen("tcp", address) + if err != nil { + log.Errorf("net listen(%s) err: %s", address, err.Error()) + errCh <- err + return + } + ln = &tcpKeepAliveListener{ln.(*net.TCPListener)} + // 开启最大连接数限制 + if h.connLimitConfig != nil && h.connLimitConfig.OpenConnLimit { + log.Infof("http server use max connection limit per ip: %d, http max limit: %d", + h.connLimitConfig.MaxConnPerHost, h.connLimitConfig.MaxConnLimit) + ln, err = connlimit.NewListener(ln, h.GetProtocol(), h.connLimitConfig) + if err != nil { + log.Errorf("conn limit init err: %s", err.Error()) + errCh <- err + return + } + } + h.server = &server + + // 开始对外服务 + if err := server.Serve(ln); err != nil { + log.Errorf("%+v", err) + if !h.restart { + log.Infof("not in restart progress, broadcast error") + errCh <- err + } + + return + } + + log.Infof("httpserver stop") +} + +// shutdown server +func (h *Httpserver) Stop() { + // 释放connLimit的数据,如果没有开启,也需要执行一下 + // 目的:防止restart的时候,connLimit冲突 + connlimit.RemoteLimitListener(h.GetProtocol()) + if h.server != nil { + _ = h.server.Close() + } +} + +// restart server +func (h *Httpserver) Restart(option map[string]interface{}, api map[string]apiserver.APIConfig, + errCh chan error) error { + log.Infof("restart httpserver new config: %+v", option) + // 备份一下option + backupOption := h.option + // 备份一下api + backupAPI := h.openAPI + + // 设置restart标记,防止stop的时候把错误抛出 + h.restart = true + // 关闭httpserver + h.Stop() + // 等待httpserver退出 + if h.start { + <-h.exitCh + } + + log.Infof("old httpserver has stopped, begin restart httpserver") + + if err := h.Initialize(context.Background(), option, api); err != nil { + h.restart = false + if initErr := h.Initialize(context.Background(), backupOption, backupAPI); initErr != nil { + log.Errorf("start httpserver with backup cfg err: %s", initErr.Error()) + return initErr + } + go h.Run(errCh) + + log.Errorf("restart httpserver initialize err: %s", err.Error()) + return err + } + + log.Infof("init httpserver successfully, restart it") + h.restart = false + go h.Run(errCh) + return nil +} + +// 创建handler +func (h *Httpserver) createRestfulContainer() (*restful.Container, error) { + wsContainer := restful.NewContainer() + + // 增加CORS TODO + cors := restful.CrossOriginResourceSharing{ + // ExposeHeaders: []string{"X-My-Header"}, + AllowedHeaders: []string{"Content-Type", "Accept", "Request-Id"}, + AllowedMethods: []string{"GET", "POST", "PUT"}, + CookiesAllowed: false, + Container: wsContainer} + wsContainer.Filter(cors.Filter) + + // Add container filter to respond to OPTIONS + wsContainer.Filter(wsContainer.OPTIONSFilter) + + wsContainer.Filter(h.process) + + for name, config := range h.openAPI { + switch name { + case "admin": + if config.Enable { + wsContainer.Add(h.GetAdminServer()) + wsContainer.Add(h.GetMaintainAccessServer()) + } + case "console": + if config.Enable { + service, err := h.GetConsoleAccessServer(config.Include) + if err != nil { + return nil, err + } + wsContainer.Add(service) + } + case "client": + if config.Enable { + service, err := h.GetClientAccessServer(config.Include) + if err != nil { + return nil, err + } + wsContainer.Add(service) + } + default: + log.Errorf("api %s does not exist in httpserver", name) + return nil, fmt.Errorf("api %s does not exist in httpserver", name) + } + } + + if h.enablePprof { + h.enablePprofAccess(wsContainer) + } + return wsContainer, nil +} + +// 开启pprof接口 +func (h *Httpserver) enablePprofAccess(wsContainer *restful.Container) { + wsContainer.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index)) + wsContainer.Handle("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline)) + wsContainer.Handle("/debug/pprof/profile", http.HandlerFunc(pprof.Profile)) + wsContainer.Handle("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol)) +} + +/** + * @brief 在接收和回复时统一处理请求 + */ +func (h *Httpserver) process(req *restful.Request, rsp *restful.Response, chain *restful.FilterChain) { + func() { + if err := h.preprocess(req, rsp); err != nil { + return + } + + chain.ProcessFilter(req, rsp) + }() + + h.postproccess(req, rsp) +} + +/** + * @brief 请求预处理 + */ +func (h *Httpserver) preprocess(req *restful.Request, rsp *restful.Response) error { + // 设置开始时间 + req.SetAttribute("start-time", time.Now()) + + // 处理请求ID + requestID := req.HeaderParameter("Request-Id") + if requestID == "" { + // TODO: 设置请求ID + } + platformID := req.HeaderParameter("Platform-Id") + + if !strings.Contains(req.Request.URL.String(), Discover) { + // 打印请求 + log.Info("receive request", + zap.String("client-address", req.Request.RemoteAddr), + zap.String("user-agent", req.HeaderParameter("User-Agent")), + zap.String("request-id", requestID), + zap.String("platform-id", platformID), + zap.String("method", req.Request.Method), + zap.String("url", req.Request.URL.String()), + ) + } + + // 管理端接口访问鉴权 + if strings.Contains(req.Request.URL.String(), "naming") { + if err := h.enterAuth(req, rsp); err != nil { + return err + } + } + + // 限流 + if err := h.enterRateLimit(req, rsp); err != nil { + return err + } + + return nil +} + +/** + * @brief 请求后处理:统计 + */ +func (h *Httpserver) postproccess(req *restful.Request, rsp *restful.Response) { + now := time.Now() + + // 接口调用统计 + path := req.Request.URL.Path + if path != "/" { + // 去掉最后一个"/" + path = strings.TrimSuffix(path, "/") + } + method := req.Request.Method + ":" + path + startTime := req.Attribute("start-time").(time.Time) + code, ok := req.Attribute(utils.PolarisCode).(uint32) + if !ok { + code = uint32(rsp.StatusCode()) + } + + diff := now.Sub(startTime) + // 打印耗时超过1s的请求 + if diff > time.Second { + log.Info("handling time > 1s", + zap.String("client-address", req.Request.RemoteAddr), + zap.String("user-agent", req.HeaderParameter("User-Agent")), + zap.String("request-id", req.HeaderParameter("Request-Id")), + zap.String("method", req.Request.Method), + zap.String("url", req.Request.URL.String()), + zap.Duration("handling-time", diff), + ) + } + + _ = h.statis.AddAPICall(method, int(code), diff.Nanoseconds()) +} + +/** + * @brief 访问鉴权 + */ +func (h *Httpserver) enterAuth(req *restful.Request, rsp *restful.Response) error { + // 判断鉴权插件是否开启 + if h.auth == nil { + return nil + } + + rid := req.HeaderParameter("Request-Id") + pid := req.HeaderParameter("Platform-Id") + pToken := req.HeaderParameter("Platform-Token") + + address := req.Request.RemoteAddr + segments := strings.Split(address, ":") + if len(segments) != 2 { + return nil + } + + if !h.auth.IsWhiteList(segments[0]) && !h.auth.Allow(pid, pToken) { + log.Error("http access is not allowed", + zap.String("client", address), + zap.String("request-id", rid), + zap.String("platform-id", pid), + zap.String("platform-token", pToken)) + HTTPResponse(req, rsp, api.NotAllowedAccess) + return errors.New("http access is not allowed") + } + return nil +} + +// 访问限制 +func (h *Httpserver) enterRateLimit(req *restful.Request, rsp *restful.Response) error { + // 检查限流插件是否开启 + if h.rateLimit == nil { + return nil + } + + rid := req.HeaderParameter("Request-Id") + // IP级限流 + // 先获取当前请求的address + address := req.Request.RemoteAddr + segments := strings.Split(address, ":") + if len(segments) != 2 { + return nil + } + if ok := h.rateLimit.Allow(plugin.IPRatelimit, segments[0]); !ok { + log.Error("ip ratelimit is not allow", zap.String("client", address), + zap.String("request-id", rid)) + HTTPResponse(req, rsp, api.IPRateLimit) + return errors.New("ip ratelimit is not allow") + } + + // 接口级限流 + apiName := fmt.Sprintf("%s:%s", req.Request.Method, + strings.TrimSuffix(req.Request.URL.Path, "/")) + if ok := h.rateLimit.Allow(plugin.APIRatelimit, apiName); !ok { + log.Error("api ratelimit is not allow", zap.String("client", address), + zap.String("request-id", rid), zap.String("api", apiName)) + HTTPResponse(req, rsp, api.APIRateLimit) + return errors.New("api ratelimit is not allow") + } + + return nil +} + +// tcpKeepAliveListener sets TCP keep-alive timeouts on accepted +// connections. It's used by ListenAndServe and ListenAndServeTLS so +// dead TCP connections (e.g. closing laptop mid-download) eventually +// go away. +// 来自net/http +type tcpKeepAliveListener struct { + *net.TCPListener +} + +// 来自于net/http +func (ln tcpKeepAliveListener) Accept() (net.Conn, error) { + tc, err := ln.AcceptTCP() + if err != nil { + return nil, err + } + tc.SetKeepAlive(true) + tc.SetKeepAlivePeriod(3 * time.Minute) + return tc, nil +} diff --git a/apiserver/l5pbserver/default.go b/apiserver/l5pbserver/default.go new file mode 100644 index 000000000..2e5712ae2 --- /dev/null +++ b/apiserver/l5pbserver/default.go @@ -0,0 +1,29 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 l5pbserver + +import ( + "github.com/polarismesh/polaris-server/apiserver" +) + +/** + * @brief 自注册到API服务器插槽 + */ +func init() { + _ = apiserver.Register("l5pbserver", &L5pbserver{}) +} diff --git a/apiserver/l5pbserver/naming.go b/apiserver/l5pbserver/naming.go new file mode 100644 index 000000000..eb0a9618c --- /dev/null +++ b/apiserver/l5pbserver/naming.go @@ -0,0 +1,212 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 l5pbserver + +import ( + "bufio" + "context" + "encoding/binary" + "github.com/polarismesh/polaris-server/common/api/l5" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/golang/protobuf/proto" + "go.uber.org/zap" + "io" + "net" + "time" +) + +type l5Code uint32 + +const ( + l5Success l5Code = iota + l5ResponseFailed + l5UnmarshalPacketFailed + l5SyncByAgentCmdFailed + l5RegisterByNameCmdFailed + l5MarshalPacketFailed + l5PacketCmdFailed +) + +// 连接处理的协程函数 +// 每个客户端会新建一个协程 +// 使用方法 go handleConnection(conn) +func (l *L5pbserver) handleConnection(conn net.Conn) { + defer conn.Close() + + req := &cl5Request{ + conn: conn, + clientAddr: conn.RemoteAddr().String(), + } + + // 先读取头部数据,然后再根据packetLength读取body数据 + header := make([]byte, headSize) + bufRead := bufio.NewReader(conn) + for { + if _, err := io.ReadFull(bufRead, header); err != nil { + // end fo the reader + if err == io.EOF { + return + } + log.Errorf("[Cl5] read header from conn(%s) err: %s", req.clientAddr, err.Error()) + return + } + packetLength := checkRequest(header) + if packetLength <= headSize || packetLength > maxSize { // 包大小检查 + log.Errorf("[Cl5] read header from conn(%s) found body length(%d) invalid", + req.clientAddr, packetLength) + return + } + body := make([]byte, packetLength-headSize) + if _, err := io.ReadFull(bufRead, body); err != nil { + log.Errorf("[Cl5] read body from conn(%s) err: %s", req.clientAddr, err.Error()) + return + } + if code := l.handleRequest(req, body); code != l5Success { + log.Error("[CL5] catch error code", zap.Uint32("code", uint32(code)), + zap.String("client", req.clientAddr)) + return + } + } +} + +// cl5请求的handle入口 +func (l *L5pbserver) handleRequest(req *cl5Request, requestData []byte) l5Code { + req.start = time.Now() // 从解包开始计算开始时间 + cl5Pkg := &l5.Cl5Pkg{} + err := proto.Unmarshal(requestData, cl5Pkg) + if err != nil { + log.Errorf("[Cl5] client(%s) Unmarshal requestData error: %v", + req.clientAddr, err) + return l5UnmarshalPacketFailed + } + + req.cmd = cl5Pkg.GetCmd() + l.PreProcess(req) + switch cl5Pkg.GetCmd() { + case int32(l5.CL5_CMD_CL5_REGISTER_BY_NAME_CMD): + req.code = l.handleRegisterByNameCmd(req.conn, cl5Pkg) + case int32(l5.CL5_CMD_CL5_SYNC_BY_AGENT_CMD): + req.code = l.handleSyncByAgentCmd(req.conn, cl5Pkg) + default: + log.Errorf("receive invalid cmd[%d] from [%d]", cl5Pkg.GetCmd(), cl5Pkg.GetIp()) + req.code = l5PacketCmdFailed + } + l.PostProcess(req) + return req.code +} + +// 根据SID列表获取路由信息 +func (l *L5pbserver) handleSyncByAgentCmd(conn net.Conn, iPkg *l5.Cl5Pkg) l5Code { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.Cl5ServerCluster{}, l.clusterName) + ctx = context.WithValue(ctx, utils.Cl5ServerProtocol{}, l.GetProtocol()) + syncByAgentAck, err := l.namingServer.SyncByAgentCmd(ctx, iPkg.GetSyncByAgentCmd()) + if err != nil { + log.Errorf("%v", err) + return l5SyncByAgentCmdFailed + } + + oPkg := &l5.Cl5Pkg{ + Seqno: proto.Int32(iPkg.GetSeqno()), + Cmd: proto.Int(int(l5.CL5_CMD_CL5_SYNC_BY_AGENT_ACK_CMD)), + Result: proto.Int32(success), + Ip: proto.Int32(iPkg.GetIp()), + SyncByAgentAckCmd: syncByAgentAck, + } + + log.Infof("handle sync by agent cmd, sid count(%d), callee count(%d), ip count(%d)", + len(iPkg.GetSyncByAgentCmd().GetOptList().GetOpt()), + len(oPkg.GetSyncByAgentAckCmd().GetServList().GetServ()), + len(oPkg.GetSyncByAgentAckCmd().GetIpcList().GetIpc())) + return response(conn, oPkg) +} + +// 根据服务名列表寻找对应的SID列表 +func (l *L5pbserver) handleRegisterByNameCmd(conn net.Conn, iPkg *l5.Cl5Pkg) l5Code { + registerByNameAck, err := l.namingServer.RegisterByNameCmd(iPkg.GetRegisterByNameCmd()) + if err != nil { + log.Errorf("%v", err) + return l5RegisterByNameCmdFailed + } + + oPkg := &l5.Cl5Pkg{ + Seqno: proto.Int32(iPkg.GetSeqno()), + Cmd: proto.Int(int(l5.CL5_CMD_CL5_REGISTER_BY_NAME_ACK_CMD)), + Result: proto.Int32(success), + Ip: proto.Int32(iPkg.GetIp()), + RegisterByNameAckCmd: registerByNameAck, + } + + return response(conn, oPkg) +} + +// 请求包完整性检查 +func checkRequest(buffer []byte) int { + var length uint32 + isLittle := isLittleEndian() + if isLittle { + length = binary.LittleEndian.Uint32(buffer[sohSize:headSize]) + } else { + length = binary.BigEndian.Uint32(buffer[sohSize:headSize]) + } + + return int(length) +} + +// 回复数据 +func response(conn net.Conn, pkg *l5.Cl5Pkg) l5Code { + responseData, err := proto.Marshal(pkg) + if err != nil { + log.Errorf("Marshal responseData error: %v", err) + return l5MarshalPacketFailed + } + + sohData := make([]byte, 2) + lengthData := make([]byte, 4) + var soh uint16 = 1 + length := uint32(binary.Size(responseData) + headSize) + + isLittle := isLittleEndian() + if isLittle { + binary.LittleEndian.PutUint16(sohData, soh) + binary.LittleEndian.PutUint32(lengthData, length) + } else { + binary.BigEndian.PutUint16(sohData, soh) + binary.BigEndian.PutUint32(lengthData, length) + } + + sohData = append(sohData, lengthData...) + sohData = append(sohData, responseData...) + + if _, err = conn.Write(sohData); err != nil { + log.Errorf("conn write error: %v", err) + return l5ResponseFailed + } + return l5Success +} + +// 判断系统是大端/小端存储 +func isLittleEndian() bool { + a := int16(0x1234) + b := int8(a) + if 0x34 == b { + return true + } + return false +} diff --git a/apiserver/l5pbserver/server.go b/apiserver/l5pbserver/server.go new file mode 100644 index 000000000..2a46b14ad --- /dev/null +++ b/apiserver/l5pbserver/server.go @@ -0,0 +1,178 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 l5pbserver + +import ( + "context" + "fmt" + "github.com/polarismesh/polaris-server/apiserver" + "github.com/polarismesh/polaris-server/plugin" + "go.uber.org/zap" + "net" + "time" + + "github.com/polarismesh/polaris-server/common/api/l5" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/naming" +) + +const ( + success int32 = 100 + sohSize int = 2 + headSize int = 6 + maxSize int = 1024 * 1024 * 2 + defaultClusterName string = "cl5.discover" +) + +// 每个链接,封装为一个请求 +type cl5Request struct { + conn net.Conn + start time.Time + clientAddr string + cmd int32 + code l5Code +} + +/** + * @brief CL5 API服务器 + */ +type L5pbserver struct { + listenIP string + listenPort uint32 + clusterName string // 集群名 + + listener net.Listener + namingServer *naming.Server + statis plugin.Statis +} + +/** + * @brief 获取端口 + */ +func (l *L5pbserver) GetPort() uint32 { + return l.listenPort +} + +/** + * @brief 获取Server的协议 + */ +func (l *L5pbserver) GetProtocol() string { + return "l5pb" +} + +/** + * @brief 初始化CL5 API服务器 + */ +func (l *L5pbserver) Initialize(ctx context.Context, option map[string]interface{}, + api map[string]apiserver.APIConfig) error { + l.listenIP = option["listenIP"].(string) + l.listenPort = uint32(option["listenPort"].(int)) + // 获取当前集群 + l.clusterName = defaultClusterName + if clusterName, _ := option["clusterName"].(string); clusterName != "" { + l.clusterName = clusterName + } + + return nil +} + +/** + * @brief 启动CL5 API服务器 + */ +func (l *L5pbserver) Run(errCh chan error) { + log.Infof("start l5pbserver") + + address := fmt.Sprintf("%v:%v", l.listenIP, l.listenPort) + listener, err := net.Listen("tcp", address) + if err != nil { + log.Errorf("listen error: %v", err) + errCh <- err + return + } + l.listener = listener + + // 引入功能模块和插件 + l.namingServer, err = naming.GetServer() + if err != nil { + log.Errorf("%v", err) + errCh <- err + return + } + l.statis = plugin.GetStatis() + + for { + conn, err := listener.Accept() + if err != nil { + log.Errorf("accept error: %v", err) + errCh <- err + return + } + //log.Infof("new connect: %v", conn.RemoteAddr()) + go l.handleConnection(conn) + } +} + +// stop server +func (l *L5pbserver) Stop() { + if l.listener != nil { + _ = l.listener.Close() + } +} + +// restart server +func (l *L5pbserver) Restart(option map[string]interface{}, api map[string]apiserver.APIConfig, + errCh chan error) error { + return nil +} + +/** + * @brief 请求预处理:限频/鉴权 + */ +func (l *L5pbserver) PreProcess(req *cl5Request) bool { + log.Info("[Cl5] handle request", zap.String("ClientAddr", req.clientAddr), zap.Int32("Cmd", req.cmd)) + var result = true + // 访问频率限制 + + // 访问权限控制 + + return result +} + +/** + * @brief 请求后处理:统计/告警 + */ +func (l *L5pbserver) PostProcess(req *cl5Request) { + now := time.Now() + // 统计 + cmdStr, ok := l5.CL5_CMD_name[req.cmd] + if !ok { + cmdStr = "Unrecognizable_Cmd" + } + + diff := now.Sub(req.start) + // 打印耗时超过1s的请求 + if diff > time.Second { + log.Info("handling time > 1s", + zap.String("client-addr", req.clientAddr), + zap.String("cmd", cmdStr), + zap.Duration("handling-time", diff), + ) + } + _ = l.statis.AddAPICall(cmdStr, int(req.code), diff.Nanoseconds()) + // 告警 +} diff --git a/bootstrap/config.go b/bootstrap/config.go new file mode 100644 index 000000000..88cd8b453 --- /dev/null +++ b/bootstrap/config.go @@ -0,0 +1,18 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 bootstrap diff --git a/bootstrap/run_linux.go b/bootstrap/run_linux.go new file mode 100644 index 000000000..e39bf47ef --- /dev/null +++ b/bootstrap/run_linux.go @@ -0,0 +1,54 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 bootstrap + +import ( + "github.com/polarismesh/polaris-server/apiserver" + "github.com/polarismesh/polaris-server/common/log" + "os" + "os/signal" + "syscall" +) + +// server主循环 +func RunMainLoop(servers []apiserver.Apiserver, errCh chan error) { + defer StopServers(servers) + + ch := make(chan os.Signal) + signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM, + syscall.SIGSEGV, syscall.SIGUSR1) + for { + select { + case s := <-ch: + // restart信号 + if s.(syscall.Signal) == syscall.SIGUSR1 { + // 注意:重启失败,退出程序 + if err := RestartServers(errCh); err != nil { + log.Errorf("restart servers err: %s", err.Error()) + return + } + } else { + log.Infof("catch signal(%+v), stop servers", s) + return + } + case err := <-errCh: + log.Errorf("catch api server err: %s", err.Error()) + return + } + } +} \ No newline at end of file diff --git a/bootstrap/run_windows.go b/bootstrap/run_windows.go new file mode 100644 index 000000000..fd44f56d3 --- /dev/null +++ b/bootstrap/run_windows.go @@ -0,0 +1,45 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 bootstrap + +import ( + "github.com/polarismesh/polaris-server/apiserver" + "github.com/polarismesh/polaris-server/common/log" + "os" + "os/signal" + "syscall" +) + +// server主循环 +func RunMainLoop(servers []apiserver.Apiserver, errCh chan error) { + defer StopServers(servers) + + ch := make(chan os.Signal) + signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM, + syscall.SIGSEGV) + for { + select { + case s := <-ch: + log.Infof("catch signal(%+v), stop servers", s) + return + case err := <-errCh: + log.Errorf("catch api server err: %s", err.Error()) + return + } + } +} \ No newline at end of file diff --git a/bootstrap/server.go b/bootstrap/server.go new file mode 100644 index 000000000..5aaf45e19 --- /dev/null +++ b/bootstrap/server.go @@ -0,0 +1,414 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 bootstrap + +import ( + "context" + "errors" + "fmt" + "net" + "strings" + "time" + + "github.com/polarismesh/polaris-server/common/version" + "github.com/polarismesh/polaris-server/config" + + "github.com/polarismesh/polaris-server/apiserver" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming" + "github.com/polarismesh/polaris-server/plugin" + "github.com/polarismesh/polaris-server/store" +) + +var ( + SelfServiceInstance = make([]*api.Instance, 0) + LocalHost = "127.0.0.1" + ConfigFilePath = "" +) + +/** + * @brief 启动 + */ +func Start(configFilePath string) { + // 加载配置 + ConfigFilePath = configFilePath + cfg, err := config.Load(configFilePath) + if err != nil { + fmt.Printf("[ERROR] loadConfig fail\n") + return + } + + fmt.Printf("%+v\n", *cfg) + + // 初始化日志打印 + err = cfg.Bootstrap.Logger.SetOutputLevel(log.DefaultScopeName, cfg.Bootstrap.Logger.Level) + if err != nil { + fmt.Printf("[ERROR] %v\n", err) + return + } + + cfg.Bootstrap.Logger.SetStackTraceLevel(log.DefaultScopeName, "none") + + cfg.Bootstrap.Logger.SetLogCallers(log.DefaultScopeName, true) + + err = log.Configure(&cfg.Bootstrap.Logger) + if err != nil { + fmt.Printf("[ERROR] %v\n", err) + return + } + + // 初始化 + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // 获取本地IP地址 + ctx, err = acquireLocalhost(ctx, &cfg.Bootstrap.PolarisService) + if err != nil { + fmt.Printf("[ERROR] %s\n", err.Error()) + return + } + + // 设置插件配置 + plugin.SetPluginConfig(&cfg.Plugin) + + // 初始化存储层 + store.SetStoreConfig(&cfg.Store) + s, _ := store.GetStore() + + // 开启进入启动流程,初始化插件,加载数据等 + tx, err := StartBootstrapOrder(s, cfg) + if err != nil { + // 多次尝试加锁失败 + fmt.Printf("[ERROR] %v\n", err) + return + } + + cfg.Naming.HealthCheck.LocalHost = LocalHost //补充healthCheck的配置 + naming.SetHealthCheckConfig(&cfg.Naming.HealthCheck) + err = naming.Initialize(ctx, &cfg.Naming, &cfg.Cache) + if err != nil { + fmt.Printf("[ERROR] %v\n", err) + return + } + + errCh := make(chan error, len(cfg.APIServers)) + servers, err := StartServers(ctx, cfg, errCh) + if err != nil { + return + } + + if err := polarisServiceRegister(&cfg.Bootstrap.PolarisService, cfg.APIServers); err != nil { + fmt.Printf("[ERROR] %v\n", err) + return + } + _ = FinishBootstrapOrder(tx) // 启动完成,解锁 + fmt.Println("finish starting server") + + RunMainLoop(servers, errCh) +} + +// 启动server +func StartServers(ctx context.Context, cfg *config.Config, errCh chan error) ( + []apiserver.Apiserver, error) { + // 启动API服务器 + var servers []apiserver.Apiserver + for _, protocol := range cfg.APIServers { + slot, exist := apiserver.Slots[protocol.Name] + if !exist { + fmt.Printf("[ERROR] apiserver slot %s not exists\n", protocol.Name) + return nil, fmt.Errorf("apiserver slot %s not exists", protocol.Name) + } + + err := slot.Initialize(ctx, protocol.Option, protocol.API) + if err != nil { + fmt.Printf("[ERROR] %v\n", err) + return nil, fmt.Errorf("apiserver %s initialize err: %s", protocol.Name, err.Error()) + } + + servers = append(servers, slot) + go slot.Run(errCh) + } + + return servers, nil +} + +// 重启server +func RestartServers(errCh chan error) error { + // 重新加载配置 + cfg, err := config.Load(ConfigFilePath) + if err != nil { + log.Infof("restart servers, reload config") + return err + } + log.Infof("new config: %+v", cfg) + + // 把配置的每个apiserver,进行重启 + for _, protocol := range cfg.APIServers { + server, exist := apiserver.Slots[protocol.Name] + if !exist { + log.Errorf("apiserver slot %s not exists\n", protocol.Name) + return err + } + log.Infof("begin restarting server: %s", protocol.Name) + if err := server.Restart(protocol.Option, protocol.API, errCh); err != nil { + return err + } + } + return nil +} + +// 接受外部信号,停止server +func StopServers(servers []apiserver.Apiserver) { + // 先反注册所有服务 + SelfDeregister() + + // 停掉服务 + for _, s := range servers { + log.Infof("stop server protocol: %s", s.GetProtocol()) + s.Stop() + } +} + +// 开始进入启动加锁 +// 原因:Server启动的时候会从数据库拉取大量数据,防止同时启动把DB压死 +// 还有一种场景,server全部宕机批量重启,导致数据库被压死,导致雪崩 +func StartBootstrapOrder(s store.Store, c *config.Config) (store.Transaction, error) { + order := c.Bootstrap.StartInOrder + log.Infof("[Bootstrap] get bootstrap order config: %+v", order) + open, _ := order["open"].(bool) + key, _ := order["key"].(string) + if !open || key == "" { + log.Infof("[Bootstrap] start in order config is not open or key is null") + return nil, nil + } + + log.Infof("bootstrap start in order with key: %s", key) + + // 启动一个日志协程,当等锁的时候,可以看到server正在等待锁 + stopCh := make(chan struct{}) + defer close(stopCh) // 函数退出的时候,关闭stopCh + go func() { + ticker := time.NewTicker(time.Second * 10) + defer ticker.Stop() + for { + select { + case <-ticker.C: + log.Infof("bootstrap waiting the lock") + case <-stopCh: + return + } + } + }() + + // 重试多次 + maxTimes := 10 + for i := 0; i < maxTimes; i++ { + tx, err := s.CreateTransaction() + if err != nil { + log.Errorf("create transaction err: %s", err.Error()) + return nil, err + } + // 这里可能会出现锁超时,超时则重试 + if err := tx.LockBootstrap(key, LocalHost); err != nil { + log.Errorf("lock bootstrap err: %s", err.Error()) + _ = tx.Commit() + continue + } + // 加锁成功,直接返回 + log.Infof("lock bootstrap success") + return tx, nil + } + + return nil, errors.New("lock bootstrap error") +} + +// FinishBootstrapOrder +func FinishBootstrapOrder(tx store.Transaction) error { + if tx != nil { + return tx.Commit() + } + + return nil +} + +// 生成一个context +func genContext() context.Context { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("request-id"), fmt.Sprintf("self-%d", time.Now().Nanosecond())) + return ctx +} + +// 探测获取本机IP地址 +func acquireLocalhost(ctx context.Context, polarisService *config.PolarisService) (context.Context, error) { + if polarisService == nil || !polarisService.EnableRegister { + log.Infof("[Bootstrap] not found polaris service config") + return ctx, nil + } + + localHost, err := getLocalHost(polarisService.ProbeAddress) + if err != nil { + log.Errorf("get local host err: %s", err.Error()) + return nil, err + } + log.Infof("[Bootstrap] get local host: %s", localHost) + LocalHost = localHost + utils.WithLocalhost(ctx, localHost) + return utils.WithLocalhost(ctx, localHost), nil +} + +// 自注册主函数 +func polarisServiceRegister(polarisService *config.PolarisService, apiServers []apiserver.Config) error { + if polarisService == nil || !polarisService.EnableRegister { + log.Infof("[Bootstrap] not enable register the polaris service") + return nil + } + + apiServerNames := make(map[string]bool) + for _, server := range apiServers { + apiServerNames[server.Name] = true + } + + // 开始注册每个服务 + for _, service := range polarisService.Services { + protocols := service.Protocols + // 如果service.Protocols为空,默认采用protocols注册 + if len(protocols) == 0 { + for _, server := range apiServers { + protocols = append(protocols, server.Name) + } + } + + for _, name := range protocols { + if _, exist := apiServerNames[name]; !exist { + return fmt.Errorf("not register the server(%s)", name) + } + slot, exist := apiserver.Slots[name] + if !exist { + return fmt.Errorf("not exist the server(%s)", name) + } + host := LocalHost + port := slot.GetPort() + protocol := slot.GetProtocol() + if err := selfRegister(host, port, protocol, polarisService.Isolated, service); err != nil { + log.Errorf("self register err: %s", err.Error()) + return err + } + } + } + + return nil +} + +// 服务自注册 +func selfRegister(host string, port uint32, protocol string, isolated bool, polarisService *config.Service) error { + server, err := naming.GetServer() + if err != nil { + return err + } + storage, err := store.GetStore() + if err != nil { + return err + } + + name := config.DefaultPolarisName + namespace := config.DefaultPolarisNamespace + if polarisService.Name != "" { + name = polarisService.Name + } + + if polarisService.Namespace != "" { + namespace = polarisService.Namespace + } + + service, err := storage.GetService(name, namespace) + if err != nil { + return err + } + if service == nil { + return fmt.Errorf("not found the self service(%s), namespace(%s)", + name, namespace) + } + + req := &api.Instance{ + Service: utils.NewStringValue(name), + Namespace: utils.NewStringValue(namespace), + Host: utils.NewStringValue(host), + Port: utils.NewUInt32Value(port), + Protocol: utils.NewStringValue(protocol), + ServiceToken: utils.NewStringValue(service.Token), + Version: utils.NewStringValue(version.Get()), + Isolate: utils.NewBoolValue(isolated), // 自注册,默认是隔离的 + Metadata: map[string]string{ + "build-revision": version.GetRevision(), + }, + } + + resp := server.CreateInstance(genContext(), req) + if api.CalcCode(resp) != 200 { + // 如果self之前注册过,那么可以忽略 + if resp.GetCode().GetValue() != api.ExistedResource { + return fmt.Errorf("%s", resp.GetInfo().GetValue()) + } + + resp = server.UpdateInstance(genContext(), req) + if api.CalcCode(resp) != 200 { + return fmt.Errorf("%s", resp.GetInfo().GetValue()) + } + + } + SelfServiceInstance = append(SelfServiceInstance, req) + + return nil +} + +// Server退出的时候,自动反注册 +func SelfDeregister() { + namingServer, err := naming.GetServer() + if err != nil { + log.Errorf("get naming server obj err: %s", err.Error()) + return + } + for _, req := range SelfServiceInstance { + log.Infof("Deregister the instance(%+v)", req) + if resp := namingServer.DeleteInstance(genContext(), req); api.CalcCode(resp) != 200 { + // 遇到失败,继续反注册其他的实例 + log.Errorf("Deregister instance error: %s", resp.GetInfo().GetValue()) + } + } + + return +} + +// 获取本地IP地址 +func getLocalHost(vip string) (string, error) { + conn, err := net.Dial("tcp", vip) + if err != nil { + return "", err + } + defer func() { _ = conn.Close() }() + + localAddr := conn.LocalAddr().String() // ip:port + segs := strings.Split(localAddr, ":") + if len(segs) != 2 { + return "", fmt.Errorf("get local address format is invalid") + } + + return segs[0], nil +} diff --git a/build.sh b/build.sh new file mode 100644 index 000000000..854b05fa0 --- /dev/null +++ b/build.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +workdir=$(dirname $(realpath $0)) +version=$(cat version 2>/dev/null) +folder_name="polaris-server-release_${version}" +pkg_name="${folder_name}.tar.gz" + +cd $workdir + +# 清理环境 +rm -rf ${folder_name} +rm -f "${pkg_name}" + +# 编译 +rm -f polaris-server + +build_date=$(date "+%Y%m%d.%H%M%S") +package="github.com/polarismesh/polaris-server/common/version" +go build -o polaris-server -ldflags="-X ${package}.Version=${version} -X ${package}.BuildDate=${build_date}" + +# 打包 +mkdir -p ${folder_name} +mv polaris-server ${folder_name} +cp polaris-server.yaml ${folder_name} +cp -r tool ${folder_name}/ +tar -czvf "${pkg_name}" ${folder_name} +md5sum ${pkg_name} > "${pkg_name}.md5sum" diff --git a/build_cmdb.sh b/build_cmdb.sh new file mode 100644 index 000000000..906eb1694 --- /dev/null +++ b/build_cmdb.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +workdir=$(dirname $(realpath $0)) +version=$(cat version 2>/dev/null) +folder_name="polaris-cmdb-syncer-release_${version}" +pkg_name="${folder_name}.tar.gz" + +cd $workdir/plugin/cmdb/tencent/cmdbSyncer + +# 清理环境 +rm -rf ${folder_name} +rm -f "${pkg_name}" + +# 编译 +rm -f polaris-cmdb-syncer + +build_date=$(date "+%Y%m%d.%H%M%S") +package="github.com/polarismesh/polaris-server/common/version" +go build -mod=vendor -o polaris-cmdb-syncer -ldflags="-X ${package}.Version=${version} -X ${package}.BuildDate=${build_date}" + +# 打包 +mkdir -p ${folder_name} +mv polaris-cmdb-syncer ${folder_name} +cp config.yaml ${folder_name} +cp -r ../cmdb-tools/ ${folder_name}/cmdb-tools +cp -r ../tool/ ${folder_name}/tool +tar -czvf "${pkg_name}" ${folder_name} +mv "${pkg_name}" $workdir +cd $workdir +md5sum ${pkg_name} > "${pkg_name}.md5sum" \ No newline at end of file diff --git a/cmd/config.go b/cmd/config.go new file mode 100644 index 000000000..9327b5e20 --- /dev/null +++ b/cmd/config.go @@ -0,0 +1,27 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cmd + +import "github.com/polarismesh/polaris-server/plugin" + +/** + * @brief 启动配置 + */ +type Config struct { + Plugin *plugin.Config +} diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 000000000..0d9a7adf5 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,47 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cmd + +import ( + "github.com/spf13/cobra" +) + +var ( + rootCmd = &cobra.Command{ + Use: "polaris-server", + Short: "polaris server", + Long: "polaris server", + SilenceUsage: true, + } +) + +/** + * @brief 初始化命令行工具 + */ +func init() { + rootCmd.AddCommand(startCmd) + rootCmd.AddCommand(versionCmd) + rootCmd.AddCommand(revisionCmd) +} + +/** + * @brief 执行命令行解析 + */ +func Execute() { + rootCmd.Execute() +} diff --git a/cmd/start.go b/cmd/start.go new file mode 100644 index 000000000..804d3b965 --- /dev/null +++ b/cmd/start.go @@ -0,0 +1,43 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cmd + +import ( + "github.com/polarismesh/polaris-server/bootstrap" + "github.com/spf13/cobra" +) + +var ( + configFilePath = "" + + startCmd = &cobra.Command{ + Use: "start", + Short: "start running", + Long: "start running", + Run: func(c *cobra.Command, args []string) { + bootstrap.Start(configFilePath) + }, + } +) + +/** + * @brief 解析命令参数 + */ +func init() { + startCmd.PersistentFlags().StringVarP(&configFilePath, "config", "c", "polaris-server.yaml", "config file path") +} diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 000000000..a7a91bfc7 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,44 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cmd + +import ( + "fmt" + "github.com/polarismesh/polaris-server/common/version" + "github.com/spf13/cobra" +) + +var ( + versionCmd = &cobra.Command{ + Use: "version", + Short: "print version", + Long: "print version", + Run: func(c *cobra.Command, args []string) { + fmt.Printf("version: %v\n", version.Get()) + }, + } + + revisionCmd = &cobra.Command{ + Use: "revision", + Short: "print revision with building date", + Long: "print revision with building date", + Run: func(cmd *cobra.Command, args []string) { + fmt.Printf("revision: %v\n", version.GetRevision()) + }, + } +) diff --git a/common/api/l5/cl5.pb.go b/common/api/l5/cl5.pb.go new file mode 100644 index 000000000..d7aec0dc8 --- /dev/null +++ b/common/api/l5/cl5.pb.go @@ -0,0 +1,1271 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: cl5.proto + +package l5 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type CL5_CMD int32 + +const ( + // ------------------------------------------------ + CL5_CMD_CL5_SYNC_BY_AGENT_CMD CL5_CMD = 100 + CL5_CMD_CL5_SYNC_BY_AGENT_ACK_CMD CL5_CMD = 101 + CL5_CMD_CL5_REGISTER_BY_ID_CMD CL5_CMD = 102 + CL5_CMD_CL5_REGISTER_BY_ID_ACK_CMD CL5_CMD = 103 + CL5_CMD_CL5_REGISTER_BY_NAME_CMD CL5_CMD = 104 + CL5_CMD_CL5_REGISTER_BY_NAME_ACK_CMD CL5_CMD = 105 +) + +var CL5_CMD_name = map[int32]string{ + 100: "CL5_SYNC_BY_AGENT_CMD", + 101: "CL5_SYNC_BY_AGENT_ACK_CMD", + 102: "CL5_REGISTER_BY_ID_CMD", + 103: "CL5_REGISTER_BY_ID_ACK_CMD", + 104: "CL5_REGISTER_BY_NAME_CMD", + 105: "CL5_REGISTER_BY_NAME_ACK_CMD", +} +var CL5_CMD_value = map[string]int32{ + "CL5_SYNC_BY_AGENT_CMD": 100, + "CL5_SYNC_BY_AGENT_ACK_CMD": 101, + "CL5_REGISTER_BY_ID_CMD": 102, + "CL5_REGISTER_BY_ID_ACK_CMD": 103, + "CL5_REGISTER_BY_NAME_CMD": 104, + "CL5_REGISTER_BY_NAME_ACK_CMD": 105, +} + +func (x CL5_CMD) Enum() *CL5_CMD { + p := new(CL5_CMD) + *p = x + return p +} +func (x CL5_CMD) String() string { + return proto.EnumName(CL5_CMD_name, int32(x)) +} +func (x *CL5_CMD) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(CL5_CMD_value, data, "CL5_CMD") + if err != nil { + return err + } + *x = CL5_CMD(value) + return nil +} +func (CL5_CMD) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{0} +} + +// IP配置信息,用于实现就近访问。L5 server从表t_ip_config读取,由OSS从CMDB查询IP相关信息写入表中 +type Cl5IpcObj struct { + Ip *int32 `protobuf:"varint,1,req,name=ip" json:"ip,omitempty"` + AreaId *int32 `protobuf:"varint,2,req,name=area_id" json:"area_id,omitempty"` + CityId *int32 `protobuf:"varint,3,req,name=city_id" json:"city_id,omitempty"` + IdcId *int32 `protobuf:"varint,4,req,name=idc_id" json:"idc_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5IpcObj) Reset() { *m = Cl5IpcObj{} } +func (m *Cl5IpcObj) String() string { return proto.CompactTextString(m) } +func (*Cl5IpcObj) ProtoMessage() {} +func (*Cl5IpcObj) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{0} +} +func (m *Cl5IpcObj) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5IpcObj.Unmarshal(m, b) +} +func (m *Cl5IpcObj) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5IpcObj.Marshal(b, m, deterministic) +} +func (dst *Cl5IpcObj) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5IpcObj.Merge(dst, src) +} +func (m *Cl5IpcObj) XXX_Size() int { + return xxx_messageInfo_Cl5IpcObj.Size(m) +} +func (m *Cl5IpcObj) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5IpcObj.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5IpcObj proto.InternalMessageInfo + +func (m *Cl5IpcObj) GetIp() int32 { + if m != nil && m.Ip != nil { + return *m.Ip + } + return 0 +} + +func (m *Cl5IpcObj) GetAreaId() int32 { + if m != nil && m.AreaId != nil { + return *m.AreaId + } + return 0 +} + +func (m *Cl5IpcObj) GetCityId() int32 { + if m != nil && m.CityId != nil { + return *m.CityId + } + return 0 +} + +func (m *Cl5IpcObj) GetIdcId() int32 { + if m != nil && m.IdcId != nil { + return *m.IdcId + } + return 0 +} + +// IP配置信息列表 +type Cl5IpcList struct { + Ipc []*Cl5IpcObj `protobuf:"bytes,1,rep,name=ipc" json:"ipc,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5IpcList) Reset() { *m = Cl5IpcList{} } +func (m *Cl5IpcList) String() string { return proto.CompactTextString(m) } +func (*Cl5IpcList) ProtoMessage() {} +func (*Cl5IpcList) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{1} +} +func (m *Cl5IpcList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5IpcList.Unmarshal(m, b) +} +func (m *Cl5IpcList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5IpcList.Marshal(b, m, deterministic) +} +func (dst *Cl5IpcList) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5IpcList.Merge(dst, src) +} +func (m *Cl5IpcList) XXX_Size() int { + return xxx_messageInfo_Cl5IpcList.Size(m) +} +func (m *Cl5IpcList) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5IpcList.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5IpcList proto.InternalMessageInfo + +func (m *Cl5IpcList) GetIpc() []*Cl5IpcObj { + if m != nil { + return m.Ipc + } + return nil +} + +// Sid属性 +type Cl5SidObj struct { + ModId *int32 `protobuf:"varint,1,req,name=mod_id" json:"mod_id,omitempty"` + CmdId *int32 `protobuf:"varint,2,req,name=cmd_id" json:"cmd_id,omitempty"` + Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + Policy *int32 `protobuf:"varint,4,opt,name=policy" json:"policy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5SidObj) Reset() { *m = Cl5SidObj{} } +func (m *Cl5SidObj) String() string { return proto.CompactTextString(m) } +func (*Cl5SidObj) ProtoMessage() {} +func (*Cl5SidObj) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{2} +} +func (m *Cl5SidObj) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5SidObj.Unmarshal(m, b) +} +func (m *Cl5SidObj) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5SidObj.Marshal(b, m, deterministic) +} +func (dst *Cl5SidObj) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5SidObj.Merge(dst, src) +} +func (m *Cl5SidObj) XXX_Size() int { + return xxx_messageInfo_Cl5SidObj.Size(m) +} +func (m *Cl5SidObj) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5SidObj.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5SidObj proto.InternalMessageInfo + +func (m *Cl5SidObj) GetModId() int32 { + if m != nil && m.ModId != nil { + return *m.ModId + } + return 0 +} + +func (m *Cl5SidObj) GetCmdId() int32 { + if m != nil && m.CmdId != nil { + return *m.CmdId + } + return 0 +} + +func (m *Cl5SidObj) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *Cl5SidObj) GetPolicy() int32 { + if m != nil && m.Policy != nil { + return *m.Policy + } + return 0 +} + +// Sid属性列表 +type Cl5SidList struct { + Sid []*Cl5SidObj `protobuf:"bytes,1,rep,name=sid" json:"sid,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5SidList) Reset() { *m = Cl5SidList{} } +func (m *Cl5SidList) String() string { return proto.CompactTextString(m) } +func (*Cl5SidList) ProtoMessage() {} +func (*Cl5SidList) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{3} +} +func (m *Cl5SidList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5SidList.Unmarshal(m, b) +} +func (m *Cl5SidList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5SidList.Marshal(b, m, deterministic) +} +func (dst *Cl5SidList) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5SidList.Merge(dst, src) +} +func (m *Cl5SidList) XXX_Size() int { + return xxx_messageInfo_Cl5SidList.Size(m) +} +func (m *Cl5SidList) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5SidList.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5SidList proto.InternalMessageInfo + +func (m *Cl5SidList) GetSid() []*Cl5SidObj { + if m != nil { + return m.Sid + } + return nil +} + +// Sid +type Cl5OptObj struct { + ModId *int32 `protobuf:"varint,1,req,name=mod_id" json:"mod_id,omitempty"` + CmdId *int32 `protobuf:"varint,2,req,name=cmd_id" json:"cmd_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5OptObj) Reset() { *m = Cl5OptObj{} } +func (m *Cl5OptObj) String() string { return proto.CompactTextString(m) } +func (*Cl5OptObj) ProtoMessage() {} +func (*Cl5OptObj) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{4} +} +func (m *Cl5OptObj) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5OptObj.Unmarshal(m, b) +} +func (m *Cl5OptObj) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5OptObj.Marshal(b, m, deterministic) +} +func (dst *Cl5OptObj) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5OptObj.Merge(dst, src) +} +func (m *Cl5OptObj) XXX_Size() int { + return xxx_messageInfo_Cl5OptObj.Size(m) +} +func (m *Cl5OptObj) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5OptObj.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5OptObj proto.InternalMessageInfo + +func (m *Cl5OptObj) GetModId() int32 { + if m != nil && m.ModId != nil { + return *m.ModId + } + return 0 +} + +func (m *Cl5OptObj) GetCmdId() int32 { + if m != nil && m.CmdId != nil { + return *m.CmdId + } + return 0 +} + +// Sid列表,用于CL5_SYNC_BY_AGENT_CMD请求包 +type Cl5OptList struct { + Opt []*Cl5OptObj `protobuf:"bytes,1,rep,name=opt" json:"opt,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5OptList) Reset() { *m = Cl5OptList{} } +func (m *Cl5OptList) String() string { return proto.CompactTextString(m) } +func (*Cl5OptList) ProtoMessage() {} +func (*Cl5OptList) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{5} +} +func (m *Cl5OptList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5OptList.Unmarshal(m, b) +} +func (m *Cl5OptList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5OptList.Marshal(b, m, deterministic) +} +func (dst *Cl5OptList) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5OptList.Merge(dst, src) +} +func (m *Cl5OptList) XXX_Size() int { + return xxx_messageInfo_Cl5OptList.Size(m) +} +func (m *Cl5OptList) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5OptList.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5OptList proto.InternalMessageInfo + +func (m *Cl5OptList) GetOpt() []*Cl5OptObj { + if m != nil { + return m.Opt + } + return nil +} + +// Sid名字列表,用于CL5_REGISTER_BY_NAME_CMD请求包 +type Cl5NameList struct { + Name []string `protobuf:"bytes,1,rep,name=name" json:"name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5NameList) Reset() { *m = Cl5NameList{} } +func (m *Cl5NameList) String() string { return proto.CompactTextString(m) } +func (*Cl5NameList) ProtoMessage() {} +func (*Cl5NameList) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{6} +} +func (m *Cl5NameList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5NameList.Unmarshal(m, b) +} +func (m *Cl5NameList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5NameList.Marshal(b, m, deterministic) +} +func (dst *Cl5NameList) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5NameList.Merge(dst, src) +} +func (m *Cl5NameList) XXX_Size() int { + return xxx_messageInfo_Cl5NameList.Size(m) +} +func (m *Cl5NameList) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5NameList.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5NameList proto.InternalMessageInfo + +func (m *Cl5NameList) GetName() []string { + if m != nil { + return m.Name + } + return nil +} + +// l5 server列表,用于agent实现在连接l5 server失败时重试其他l5 server +type Cl5L5SvrList struct { + Ip []int32 `protobuf:"varint,1,rep,name=ip" json:"ip,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5L5SvrList) Reset() { *m = Cl5L5SvrList{} } +func (m *Cl5L5SvrList) String() string { return proto.CompactTextString(m) } +func (*Cl5L5SvrList) ProtoMessage() {} +func (*Cl5L5SvrList) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{7} +} +func (m *Cl5L5SvrList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5L5SvrList.Unmarshal(m, b) +} +func (m *Cl5L5SvrList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5L5SvrList.Marshal(b, m, deterministic) +} +func (dst *Cl5L5SvrList) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5L5SvrList.Merge(dst, src) +} +func (m *Cl5L5SvrList) XXX_Size() int { + return xxx_messageInfo_Cl5L5SvrList.Size(m) +} +func (m *Cl5L5SvrList) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5L5SvrList.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5L5SvrList proto.InternalMessageInfo + +func (m *Cl5L5SvrList) GetIp() []int32 { + if m != nil { + return m.Ip + } + return nil +} + +// 被调server +type Cl5ServObj struct { + ModId *int32 `protobuf:"varint,1,req,name=mod_id" json:"mod_id,omitempty"` + CmdId *int32 `protobuf:"varint,2,req,name=cmd_id" json:"cmd_id,omitempty"` + Ip *int32 `protobuf:"varint,3,req,name=ip" json:"ip,omitempty"` + Port *int32 `protobuf:"varint,4,req,name=port" json:"port,omitempty"` + Weight *int32 `protobuf:"varint,5,req,name=weight" json:"weight,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5ServObj) Reset() { *m = Cl5ServObj{} } +func (m *Cl5ServObj) String() string { return proto.CompactTextString(m) } +func (*Cl5ServObj) ProtoMessage() {} +func (*Cl5ServObj) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{8} +} +func (m *Cl5ServObj) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5ServObj.Unmarshal(m, b) +} +func (m *Cl5ServObj) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5ServObj.Marshal(b, m, deterministic) +} +func (dst *Cl5ServObj) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5ServObj.Merge(dst, src) +} +func (m *Cl5ServObj) XXX_Size() int { + return xxx_messageInfo_Cl5ServObj.Size(m) +} +func (m *Cl5ServObj) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5ServObj.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5ServObj proto.InternalMessageInfo + +func (m *Cl5ServObj) GetModId() int32 { + if m != nil && m.ModId != nil { + return *m.ModId + } + return 0 +} + +func (m *Cl5ServObj) GetCmdId() int32 { + if m != nil && m.CmdId != nil { + return *m.CmdId + } + return 0 +} + +func (m *Cl5ServObj) GetIp() int32 { + if m != nil && m.Ip != nil { + return *m.Ip + } + return 0 +} + +func (m *Cl5ServObj) GetPort() int32 { + if m != nil && m.Port != nil { + return *m.Port + } + return 0 +} + +func (m *Cl5ServObj) GetWeight() int32 { + if m != nil && m.Weight != nil { + return *m.Weight + } + return 0 +} + +// 被调server列表 +type Cl5ServList struct { + Serv []*Cl5ServObj `protobuf:"bytes,1,rep,name=serv" json:"serv,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5ServList) Reset() { *m = Cl5ServList{} } +func (m *Cl5ServList) String() string { return proto.CompactTextString(m) } +func (*Cl5ServList) ProtoMessage() {} +func (*Cl5ServList) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{9} +} +func (m *Cl5ServList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5ServList.Unmarshal(m, b) +} +func (m *Cl5ServList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5ServList.Marshal(b, m, deterministic) +} +func (dst *Cl5ServList) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5ServList.Merge(dst, src) +} +func (m *Cl5ServList) XXX_Size() int { + return xxx_messageInfo_Cl5ServList.Size(m) +} +func (m *Cl5ServList) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5ServList.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5ServList proto.InternalMessageInfo + +func (m *Cl5ServList) GetServ() []*Cl5ServObj { + if m != nil { + return m.Serv + } + return nil +} + +// 有状态规则配置 +type Cl5PolyObj struct { + ModId *int32 `protobuf:"varint,1,req,name=mod_id" json:"mod_id,omitempty"` + Div *int32 `protobuf:"varint,2,req,name=div" json:"div,omitempty"` + Mod *int32 `protobuf:"varint,3,req,name=mod" json:"mod,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5PolyObj) Reset() { *m = Cl5PolyObj{} } +func (m *Cl5PolyObj) String() string { return proto.CompactTextString(m) } +func (*Cl5PolyObj) ProtoMessage() {} +func (*Cl5PolyObj) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{10} +} +func (m *Cl5PolyObj) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5PolyObj.Unmarshal(m, b) +} +func (m *Cl5PolyObj) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5PolyObj.Marshal(b, m, deterministic) +} +func (dst *Cl5PolyObj) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5PolyObj.Merge(dst, src) +} +func (m *Cl5PolyObj) XXX_Size() int { + return xxx_messageInfo_Cl5PolyObj.Size(m) +} +func (m *Cl5PolyObj) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5PolyObj.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5PolyObj proto.InternalMessageInfo + +func (m *Cl5PolyObj) GetModId() int32 { + if m != nil && m.ModId != nil { + return *m.ModId + } + return 0 +} + +func (m *Cl5PolyObj) GetDiv() int32 { + if m != nil && m.Div != nil { + return *m.Div + } + return 0 +} + +func (m *Cl5PolyObj) GetMod() int32 { + if m != nil && m.Mod != nil { + return *m.Mod + } + return 0 +} + +// 有状态规则分段信息 +type Cl5SectObj struct { + ModId *int32 `protobuf:"varint,1,req,name=mod_id" json:"mod_id,omitempty"` + From *int32 `protobuf:"varint,2,req,name=from" json:"from,omitempty"` + To *int32 `protobuf:"varint,3,req,name=to" json:"to,omitempty"` + CmdId *int32 `protobuf:"varint,4,req,name=cmd_id" json:"cmd_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5SectObj) Reset() { *m = Cl5SectObj{} } +func (m *Cl5SectObj) String() string { return proto.CompactTextString(m) } +func (*Cl5SectObj) ProtoMessage() {} +func (*Cl5SectObj) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{11} +} +func (m *Cl5SectObj) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5SectObj.Unmarshal(m, b) +} +func (m *Cl5SectObj) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5SectObj.Marshal(b, m, deterministic) +} +func (dst *Cl5SectObj) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5SectObj.Merge(dst, src) +} +func (m *Cl5SectObj) XXX_Size() int { + return xxx_messageInfo_Cl5SectObj.Size(m) +} +func (m *Cl5SectObj) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5SectObj.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5SectObj proto.InternalMessageInfo + +func (m *Cl5SectObj) GetModId() int32 { + if m != nil && m.ModId != nil { + return *m.ModId + } + return 0 +} + +func (m *Cl5SectObj) GetFrom() int32 { + if m != nil && m.From != nil { + return *m.From + } + return 0 +} + +func (m *Cl5SectObj) GetTo() int32 { + if m != nil && m.To != nil { + return *m.To + } + return 0 +} + +func (m *Cl5SectObj) GetCmdId() int32 { + if m != nil && m.CmdId != nil { + return *m.CmdId + } + return 0 +} + +// 有状态规则列表 +type Cl5RuleList struct { + Poly []*Cl5PolyObj `protobuf:"bytes,1,rep,name=poly" json:"poly,omitempty"` + Sect []*Cl5SectObj `protobuf:"bytes,2,rep,name=sect" json:"sect,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5RuleList) Reset() { *m = Cl5RuleList{} } +func (m *Cl5RuleList) String() string { return proto.CompactTextString(m) } +func (*Cl5RuleList) ProtoMessage() {} +func (*Cl5RuleList) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{12} +} +func (m *Cl5RuleList) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5RuleList.Unmarshal(m, b) +} +func (m *Cl5RuleList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5RuleList.Marshal(b, m, deterministic) +} +func (dst *Cl5RuleList) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5RuleList.Merge(dst, src) +} +func (m *Cl5RuleList) XXX_Size() int { + return xxx_messageInfo_Cl5RuleList.Size(m) +} +func (m *Cl5RuleList) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5RuleList.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5RuleList proto.InternalMessageInfo + +func (m *Cl5RuleList) GetPoly() []*Cl5PolyObj { + if m != nil { + return m.Poly + } + return nil +} + +func (m *Cl5RuleList) GetSect() []*Cl5SectObj { + if m != nil { + return m.Sect + } + return nil +} + +// CL5_SYNC_BY_AGENT_CMD请求包 +type Cl5SyncByAgentCmd struct { + AgentIp *int32 `protobuf:"varint,1,req,name=agent_ip" json:"agent_ip,omitempty"` + SyncFlow *int32 `protobuf:"varint,2,req,name=sync_flow" json:"sync_flow,omitempty"` + OptList *Cl5OptList `protobuf:"bytes,3,opt,name=opt_list" json:"opt_list,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5SyncByAgentCmd) Reset() { *m = Cl5SyncByAgentCmd{} } +func (m *Cl5SyncByAgentCmd) String() string { return proto.CompactTextString(m) } +func (*Cl5SyncByAgentCmd) ProtoMessage() {} +func (*Cl5SyncByAgentCmd) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{13} +} +func (m *Cl5SyncByAgentCmd) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5SyncByAgentCmd.Unmarshal(m, b) +} +func (m *Cl5SyncByAgentCmd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5SyncByAgentCmd.Marshal(b, m, deterministic) +} +func (dst *Cl5SyncByAgentCmd) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5SyncByAgentCmd.Merge(dst, src) +} +func (m *Cl5SyncByAgentCmd) XXX_Size() int { + return xxx_messageInfo_Cl5SyncByAgentCmd.Size(m) +} +func (m *Cl5SyncByAgentCmd) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5SyncByAgentCmd.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5SyncByAgentCmd proto.InternalMessageInfo + +func (m *Cl5SyncByAgentCmd) GetAgentIp() int32 { + if m != nil && m.AgentIp != nil { + return *m.AgentIp + } + return 0 +} + +func (m *Cl5SyncByAgentCmd) GetSyncFlow() int32 { + if m != nil && m.SyncFlow != nil { + return *m.SyncFlow + } + return 0 +} + +func (m *Cl5SyncByAgentCmd) GetOptList() *Cl5OptList { + if m != nil { + return m.OptList + } + return nil +} + +// CL5_SYNC_BY_AGENT_CMD应答包 +type Cl5SyncByAgentAckCmd struct { + AgentIp *int32 `protobuf:"varint,1,req,name=agent_ip" json:"agent_ip,omitempty"` + SyncFlow *int32 `protobuf:"varint,2,req,name=sync_flow" json:"sync_flow,omitempty"` + ServList *Cl5ServList `protobuf:"bytes,3,opt,name=serv_list" json:"serv_list,omitempty"` + SidList *Cl5SidList `protobuf:"bytes,4,opt,name=sid_list" json:"sid_list,omitempty"` + IpcList *Cl5IpcList `protobuf:"bytes,5,opt,name=ipc_list" json:"ipc_list,omitempty"` + RuleList *Cl5RuleList `protobuf:"bytes,6,opt,name=rule_list" json:"rule_list,omitempty"` + L5SvrList *Cl5L5SvrList `protobuf:"bytes,7,opt,name=l5svr_list" json:"l5svr_list,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5SyncByAgentAckCmd) Reset() { *m = Cl5SyncByAgentAckCmd{} } +func (m *Cl5SyncByAgentAckCmd) String() string { return proto.CompactTextString(m) } +func (*Cl5SyncByAgentAckCmd) ProtoMessage() {} +func (*Cl5SyncByAgentAckCmd) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{14} +} +func (m *Cl5SyncByAgentAckCmd) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5SyncByAgentAckCmd.Unmarshal(m, b) +} +func (m *Cl5SyncByAgentAckCmd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5SyncByAgentAckCmd.Marshal(b, m, deterministic) +} +func (dst *Cl5SyncByAgentAckCmd) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5SyncByAgentAckCmd.Merge(dst, src) +} +func (m *Cl5SyncByAgentAckCmd) XXX_Size() int { + return xxx_messageInfo_Cl5SyncByAgentAckCmd.Size(m) +} +func (m *Cl5SyncByAgentAckCmd) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5SyncByAgentAckCmd.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5SyncByAgentAckCmd proto.InternalMessageInfo + +func (m *Cl5SyncByAgentAckCmd) GetAgentIp() int32 { + if m != nil && m.AgentIp != nil { + return *m.AgentIp + } + return 0 +} + +func (m *Cl5SyncByAgentAckCmd) GetSyncFlow() int32 { + if m != nil && m.SyncFlow != nil { + return *m.SyncFlow + } + return 0 +} + +func (m *Cl5SyncByAgentAckCmd) GetServList() *Cl5ServList { + if m != nil { + return m.ServList + } + return nil +} + +func (m *Cl5SyncByAgentAckCmd) GetSidList() *Cl5SidList { + if m != nil { + return m.SidList + } + return nil +} + +func (m *Cl5SyncByAgentAckCmd) GetIpcList() *Cl5IpcList { + if m != nil { + return m.IpcList + } + return nil +} + +func (m *Cl5SyncByAgentAckCmd) GetRuleList() *Cl5RuleList { + if m != nil { + return m.RuleList + } + return nil +} + +func (m *Cl5SyncByAgentAckCmd) GetL5SvrList() *Cl5L5SvrList { + if m != nil { + return m.L5SvrList + } + return nil +} + +// 已经废弃 +type Cl5RegisterByIdCmd struct { + CallerIp *int32 `protobuf:"varint,1,req,name=caller_ip" json:"caller_ip,omitempty"` + OptList *Cl5OptList `protobuf:"bytes,2,opt,name=opt_list" json:"opt_list,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5RegisterByIdCmd) Reset() { *m = Cl5RegisterByIdCmd{} } +func (m *Cl5RegisterByIdCmd) String() string { return proto.CompactTextString(m) } +func (*Cl5RegisterByIdCmd) ProtoMessage() {} +func (*Cl5RegisterByIdCmd) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{15} +} +func (m *Cl5RegisterByIdCmd) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5RegisterByIdCmd.Unmarshal(m, b) +} +func (m *Cl5RegisterByIdCmd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5RegisterByIdCmd.Marshal(b, m, deterministic) +} +func (dst *Cl5RegisterByIdCmd) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5RegisterByIdCmd.Merge(dst, src) +} +func (m *Cl5RegisterByIdCmd) XXX_Size() int { + return xxx_messageInfo_Cl5RegisterByIdCmd.Size(m) +} +func (m *Cl5RegisterByIdCmd) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5RegisterByIdCmd.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5RegisterByIdCmd proto.InternalMessageInfo + +func (m *Cl5RegisterByIdCmd) GetCallerIp() int32 { + if m != nil && m.CallerIp != nil { + return *m.CallerIp + } + return 0 +} + +func (m *Cl5RegisterByIdCmd) GetOptList() *Cl5OptList { + if m != nil { + return m.OptList + } + return nil +} + +// 已经废弃 +type Cl5RegisterByIdAckCmd struct { + CallerIp *int32 `protobuf:"varint,1,req,name=caller_ip" json:"caller_ip,omitempty"` + ServList *Cl5ServList `protobuf:"bytes,2,opt,name=serv_list" json:"serv_list,omitempty"` + SidList *Cl5SidList `protobuf:"bytes,3,opt,name=sid_list" json:"sid_list,omitempty"` + IpcList *Cl5IpcList `protobuf:"bytes,4,opt,name=ipc_list" json:"ipc_list,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5RegisterByIdAckCmd) Reset() { *m = Cl5RegisterByIdAckCmd{} } +func (m *Cl5RegisterByIdAckCmd) String() string { return proto.CompactTextString(m) } +func (*Cl5RegisterByIdAckCmd) ProtoMessage() {} +func (*Cl5RegisterByIdAckCmd) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{16} +} +func (m *Cl5RegisterByIdAckCmd) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5RegisterByIdAckCmd.Unmarshal(m, b) +} +func (m *Cl5RegisterByIdAckCmd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5RegisterByIdAckCmd.Marshal(b, m, deterministic) +} +func (dst *Cl5RegisterByIdAckCmd) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5RegisterByIdAckCmd.Merge(dst, src) +} +func (m *Cl5RegisterByIdAckCmd) XXX_Size() int { + return xxx_messageInfo_Cl5RegisterByIdAckCmd.Size(m) +} +func (m *Cl5RegisterByIdAckCmd) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5RegisterByIdAckCmd.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5RegisterByIdAckCmd proto.InternalMessageInfo + +func (m *Cl5RegisterByIdAckCmd) GetCallerIp() int32 { + if m != nil && m.CallerIp != nil { + return *m.CallerIp + } + return 0 +} + +func (m *Cl5RegisterByIdAckCmd) GetServList() *Cl5ServList { + if m != nil { + return m.ServList + } + return nil +} + +func (m *Cl5RegisterByIdAckCmd) GetSidList() *Cl5SidList { + if m != nil { + return m.SidList + } + return nil +} + +func (m *Cl5RegisterByIdAckCmd) GetIpcList() *Cl5IpcList { + if m != nil { + return m.IpcList + } + return nil +} + +// CL5_REGISTER_BY_NAME_CMD 请求包 +type Cl5RegisterByNameCmd struct { + CallerIp *int32 `protobuf:"varint,1,req,name=caller_ip" json:"caller_ip,omitempty"` + NameList *Cl5NameList `protobuf:"bytes,2,opt,name=name_list" json:"name_list,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5RegisterByNameCmd) Reset() { *m = Cl5RegisterByNameCmd{} } +func (m *Cl5RegisterByNameCmd) String() string { return proto.CompactTextString(m) } +func (*Cl5RegisterByNameCmd) ProtoMessage() {} +func (*Cl5RegisterByNameCmd) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{17} +} +func (m *Cl5RegisterByNameCmd) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5RegisterByNameCmd.Unmarshal(m, b) +} +func (m *Cl5RegisterByNameCmd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5RegisterByNameCmd.Marshal(b, m, deterministic) +} +func (dst *Cl5RegisterByNameCmd) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5RegisterByNameCmd.Merge(dst, src) +} +func (m *Cl5RegisterByNameCmd) XXX_Size() int { + return xxx_messageInfo_Cl5RegisterByNameCmd.Size(m) +} +func (m *Cl5RegisterByNameCmd) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5RegisterByNameCmd.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5RegisterByNameCmd proto.InternalMessageInfo + +func (m *Cl5RegisterByNameCmd) GetCallerIp() int32 { + if m != nil && m.CallerIp != nil { + return *m.CallerIp + } + return 0 +} + +func (m *Cl5RegisterByNameCmd) GetNameList() *Cl5NameList { + if m != nil { + return m.NameList + } + return nil +} + +// CL5_REGISTER_BY_NAME_ACK_CMD 应答包 +type Cl5RegisterByNameAckCmd struct { + CallerIp *int32 `protobuf:"varint,1,req,name=caller_ip" json:"caller_ip,omitempty"` + ServList *Cl5ServList `protobuf:"bytes,2,opt,name=serv_list" json:"serv_list,omitempty"` + SidList *Cl5SidList `protobuf:"bytes,3,opt,name=sid_list" json:"sid_list,omitempty"` + IpcList *Cl5IpcList `protobuf:"bytes,4,opt,name=ipc_list" json:"ipc_list,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5RegisterByNameAckCmd) Reset() { *m = Cl5RegisterByNameAckCmd{} } +func (m *Cl5RegisterByNameAckCmd) String() string { return proto.CompactTextString(m) } +func (*Cl5RegisterByNameAckCmd) ProtoMessage() {} +func (*Cl5RegisterByNameAckCmd) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{18} +} +func (m *Cl5RegisterByNameAckCmd) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5RegisterByNameAckCmd.Unmarshal(m, b) +} +func (m *Cl5RegisterByNameAckCmd) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5RegisterByNameAckCmd.Marshal(b, m, deterministic) +} +func (dst *Cl5RegisterByNameAckCmd) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5RegisterByNameAckCmd.Merge(dst, src) +} +func (m *Cl5RegisterByNameAckCmd) XXX_Size() int { + return xxx_messageInfo_Cl5RegisterByNameAckCmd.Size(m) +} +func (m *Cl5RegisterByNameAckCmd) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5RegisterByNameAckCmd.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5RegisterByNameAckCmd proto.InternalMessageInfo + +func (m *Cl5RegisterByNameAckCmd) GetCallerIp() int32 { + if m != nil && m.CallerIp != nil { + return *m.CallerIp + } + return 0 +} + +func (m *Cl5RegisterByNameAckCmd) GetServList() *Cl5ServList { + if m != nil { + return m.ServList + } + return nil +} + +func (m *Cl5RegisterByNameAckCmd) GetSidList() *Cl5SidList { + if m != nil { + return m.SidList + } + return nil +} + +func (m *Cl5RegisterByNameAckCmd) GetIpcList() *Cl5IpcList { + if m != nil { + return m.IpcList + } + return nil +} + +// 包格式 +type Cl5Pkg struct { + Seqno *int32 `protobuf:"varint,1,req,name=seqno" json:"seqno,omitempty"` + Cmd *int32 `protobuf:"varint,2,req,name=cmd" json:"cmd,omitempty"` + Result *int32 `protobuf:"varint,3,opt,name=result" json:"result,omitempty"` + Error *string `protobuf:"bytes,4,opt,name=error" json:"error,omitempty"` + Ip *int32 `protobuf:"varint,5,opt,name=ip" json:"ip,omitempty"` + SyncByAgentCmd *Cl5SyncByAgentCmd `protobuf:"bytes,10,opt,name=sync_by_agent_cmd" json:"sync_by_agent_cmd,omitempty"` + SyncByAgentAckCmd *Cl5SyncByAgentAckCmd `protobuf:"bytes,11,opt,name=sync_by_agent_ack_cmd" json:"sync_by_agent_ack_cmd,omitempty"` + RegisterByIdCmd *Cl5RegisterByIdCmd `protobuf:"bytes,12,opt,name=register_by_id_cmd" json:"register_by_id_cmd,omitempty"` + RegisterByIdAckCmd *Cl5RegisterByIdAckCmd `protobuf:"bytes,13,opt,name=register_by_id_ack_cmd" json:"register_by_id_ack_cmd,omitempty"` + RegisterByNameCmd *Cl5RegisterByNameCmd `protobuf:"bytes,14,opt,name=register_by_name_cmd" json:"register_by_name_cmd,omitempty"` + RegisterByNameAckCmd *Cl5RegisterByNameAckCmd `protobuf:"bytes,15,opt,name=register_by_name_ack_cmd" json:"register_by_name_ack_cmd,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cl5Pkg) Reset() { *m = Cl5Pkg{} } +func (m *Cl5Pkg) String() string { return proto.CompactTextString(m) } +func (*Cl5Pkg) ProtoMessage() {} +func (*Cl5Pkg) Descriptor() ([]byte, []int) { + return fileDescriptor_cl5_5845103484782c18, []int{19} +} +func (m *Cl5Pkg) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cl5Pkg.Unmarshal(m, b) +} +func (m *Cl5Pkg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cl5Pkg.Marshal(b, m, deterministic) +} +func (dst *Cl5Pkg) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cl5Pkg.Merge(dst, src) +} +func (m *Cl5Pkg) XXX_Size() int { + return xxx_messageInfo_Cl5Pkg.Size(m) +} +func (m *Cl5Pkg) XXX_DiscardUnknown() { + xxx_messageInfo_Cl5Pkg.DiscardUnknown(m) +} + +var xxx_messageInfo_Cl5Pkg proto.InternalMessageInfo + +func (m *Cl5Pkg) GetSeqno() int32 { + if m != nil && m.Seqno != nil { + return *m.Seqno + } + return 0 +} + +func (m *Cl5Pkg) GetCmd() int32 { + if m != nil && m.Cmd != nil { + return *m.Cmd + } + return 0 +} + +func (m *Cl5Pkg) GetResult() int32 { + if m != nil && m.Result != nil { + return *m.Result + } + return 0 +} + +func (m *Cl5Pkg) GetError() string { + if m != nil && m.Error != nil { + return *m.Error + } + return "" +} + +func (m *Cl5Pkg) GetIp() int32 { + if m != nil && m.Ip != nil { + return *m.Ip + } + return 0 +} + +func (m *Cl5Pkg) GetSyncByAgentCmd() *Cl5SyncByAgentCmd { + if m != nil { + return m.SyncByAgentCmd + } + return nil +} + +func (m *Cl5Pkg) GetSyncByAgentAckCmd() *Cl5SyncByAgentAckCmd { + if m != nil { + return m.SyncByAgentAckCmd + } + return nil +} + +func (m *Cl5Pkg) GetRegisterByIdCmd() *Cl5RegisterByIdCmd { + if m != nil { + return m.RegisterByIdCmd + } + return nil +} + +func (m *Cl5Pkg) GetRegisterByIdAckCmd() *Cl5RegisterByIdAckCmd { + if m != nil { + return m.RegisterByIdAckCmd + } + return nil +} + +func (m *Cl5Pkg) GetRegisterByNameCmd() *Cl5RegisterByNameCmd { + if m != nil { + return m.RegisterByNameCmd + } + return nil +} + +func (m *Cl5Pkg) GetRegisterByNameAckCmd() *Cl5RegisterByNameAckCmd { + if m != nil { + return m.RegisterByNameAckCmd + } + return nil +} + +func init() { + proto.RegisterType((*Cl5IpcObj)(nil), "l5.cl5_ipc_obj") + proto.RegisterType((*Cl5IpcList)(nil), "l5.cl5_ipc_list") + proto.RegisterType((*Cl5SidObj)(nil), "l5.cl5_sid_obj") + proto.RegisterType((*Cl5SidList)(nil), "l5.cl5_sid_list") + proto.RegisterType((*Cl5OptObj)(nil), "l5.cl5_opt_obj") + proto.RegisterType((*Cl5OptList)(nil), "l5.cl5_opt_list") + proto.RegisterType((*Cl5NameList)(nil), "l5.cl5_name_list") + proto.RegisterType((*Cl5L5SvrList)(nil), "l5.cl5_l5svr_list") + proto.RegisterType((*Cl5ServObj)(nil), "l5.cl5_serv_obj") + proto.RegisterType((*Cl5ServList)(nil), "l5.cl5_serv_list") + proto.RegisterType((*Cl5PolyObj)(nil), "l5.cl5_poly_obj") + proto.RegisterType((*Cl5SectObj)(nil), "l5.cl5_sect_obj") + proto.RegisterType((*Cl5RuleList)(nil), "l5.cl5_rule_list") + proto.RegisterType((*Cl5SyncByAgentCmd)(nil), "l5.cl5_sync_by_agent_cmd") + proto.RegisterType((*Cl5SyncByAgentAckCmd)(nil), "l5.cl5_sync_by_agent_ack_cmd") + proto.RegisterType((*Cl5RegisterByIdCmd)(nil), "l5.cl5_register_by_id_cmd") + proto.RegisterType((*Cl5RegisterByIdAckCmd)(nil), "l5.cl5_register_by_id_ack_cmd") + proto.RegisterType((*Cl5RegisterByNameCmd)(nil), "l5.cl5_register_by_name_cmd") + proto.RegisterType((*Cl5RegisterByNameAckCmd)(nil), "l5.cl5_register_by_name_ack_cmd") + proto.RegisterType((*Cl5Pkg)(nil), "l5.cl5_pkg") + proto.RegisterEnum("l5.CL5_CMD", CL5_CMD_name, CL5_CMD_value) +} + +func init() { proto.RegisterFile("cl5.proto", fileDescriptor_cl5_5845103484782c18) } + +var fileDescriptor_cl5_5845103484782c18 = []byte{ + // 771 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0x4d, 0x6b, 0xdb, 0x40, + 0x10, 0x45, 0x96, 0xbf, 0x34, 0x76, 0x9c, 0x58, 0x34, 0x61, 0x6d, 0x9c, 0x60, 0x96, 0x50, 0x4c, + 0x69, 0x53, 0x28, 0x75, 0x29, 0xa5, 0x14, 0x12, 0xc7, 0xa4, 0x21, 0x4d, 0x02, 0x49, 0x0e, 0xcd, + 0x49, 0x75, 0x56, 0x8a, 0xb3, 0x8d, 0xec, 0x55, 0x25, 0x25, 0xc1, 0x3f, 0xa6, 0xf4, 0x8f, 0x14, + 0xfa, 0xc7, 0x7a, 0x28, 0x3b, 0xd2, 0x4a, 0xfe, 0x90, 0xc1, 0xc7, 0xde, 0xb4, 0xfb, 0x66, 0xe6, + 0xbd, 0x79, 0x9a, 0x59, 0x30, 0x98, 0xdb, 0xdd, 0xf3, 0x7c, 0x11, 0x0a, 0x33, 0xe7, 0x76, 0xe9, + 0x09, 0x54, 0x98, 0xdb, 0xb5, 0xb8, 0xc7, 0x2c, 0x71, 0xf3, 0xdd, 0x04, 0xc8, 0x71, 0x8f, 0x68, + 0xed, 0x5c, 0xa7, 0x60, 0xae, 0x43, 0x69, 0xe0, 0x3b, 0x03, 0x8b, 0xdb, 0x24, 0xa7, 0x2e, 0x18, + 0x0f, 0x27, 0xf2, 0x42, 0xc7, 0x8b, 0x1a, 0x14, 0xb9, 0xcd, 0xe4, 0x39, 0x2f, 0xcf, 0xf4, 0x25, + 0x54, 0x55, 0x31, 0x97, 0x07, 0xa1, 0xd9, 0x02, 0x9d, 0x7b, 0x8c, 0x68, 0x6d, 0xbd, 0x53, 0x79, + 0xb3, 0xbe, 0xe7, 0x76, 0xf7, 0xa6, 0xb8, 0x14, 0x75, 0xc0, 0x6d, 0xa4, 0xae, 0x41, 0x71, 0x24, + 0x6c, 0x59, 0x4c, 0x53, 0xc5, 0xd9, 0xc8, 0x4e, 0xd9, 0xab, 0x90, 0x1f, 0x0f, 0x46, 0x0e, 0xd1, + 0xdb, 0x5a, 0xc7, 0x90, 0xa8, 0x27, 0x5c, 0xce, 0x26, 0x24, 0xdf, 0xd6, 0x52, 0x6a, 0x59, 0x4c, + 0x51, 0x07, 0x58, 0x6a, 0x86, 0x3a, 0xe6, 0xa2, 0xaf, 0x22, 0x6a, 0xe1, 0x85, 0xab, 0x50, 0xab, + 0xe2, 0x32, 0x5c, 0x15, 0x17, 0x5e, 0x38, 0x5f, 0x3c, 0xae, 0x46, 0xb7, 0x61, 0x4d, 0x1e, 0xa5, + 0xd8, 0x28, 0x5c, 0x29, 0x97, 0xf1, 0x06, 0x6d, 0x41, 0x4d, 0xc2, 0x6e, 0x37, 0x78, 0xf4, 0x23, + 0x5c, 0x99, 0xae, 0x77, 0x0a, 0xf4, 0x6b, 0xdc, 0x87, 0xe3, 0x3f, 0xae, 0xe4, 0x4a, 0x94, 0xab, + 0x2b, 0x87, 0x3c, 0xe1, 0x87, 0xd1, 0xcf, 0x90, 0x91, 0x4f, 0x0e, 0x1f, 0xde, 0x85, 0xa4, 0x80, + 0x4d, 0xbc, 0x8e, 0x64, 0x61, 0x65, 0xa4, 0xdd, 0x81, 0xbc, 0x3c, 0xc4, 0x6d, 0x6c, 0x24, 0x1e, + 0xc5, 0xd4, 0xf4, 0x7d, 0x24, 0xc5, 0x13, 0xee, 0x24, 0x53, 0x4a, 0x05, 0x74, 0x9b, 0x3f, 0xc6, + 0x3a, 0x2a, 0xa0, 0x8f, 0x44, 0x3c, 0x17, 0xf4, 0xb3, 0x6a, 0x82, 0x65, 0xfb, 0x5b, 0x85, 0xfc, + 0xad, 0x2f, 0x46, 0x69, 0x0b, 0xa1, 0x48, 0x27, 0x2a, 0x6e, 0x2f, 0x9a, 0xa8, 0xf3, 0x48, 0xb4, + 0xff, 0xe0, 0x3a, 0x89, 0x68, 0x29, 0x68, 0x5e, 0x74, 0x22, 0x12, 0x9b, 0x62, 0x21, 0xc9, 0xcd, + 0x37, 0x15, 0x49, 0xa1, 0xdf, 0x60, 0x13, 0xcf, 0x93, 0x31, 0xb3, 0x6e, 0x26, 0xd6, 0x60, 0xe8, + 0x8c, 0x43, 0x8b, 0x8d, 0x6c, 0x73, 0x03, 0xca, 0xd1, 0x21, 0x99, 0xff, 0x3a, 0x18, 0x18, 0x76, + 0xeb, 0x8a, 0xa7, 0x58, 0x2a, 0x85, 0xb2, 0x1a, 0x02, 0x9c, 0xc3, 0x29, 0x06, 0x75, 0x4f, 0xff, + 0x6a, 0xd0, 0x58, 0xa4, 0x18, 0xb0, 0xfb, 0xd5, 0x69, 0x76, 0xc1, 0x48, 0x7e, 0x53, 0xcc, 0x53, + 0x9f, 0xf9, 0x3d, 0x68, 0x05, 0x85, 0xb2, 0x1a, 0x77, 0x5c, 0x82, 0xe9, 0x76, 0xd5, 0x1a, 0x50, + 0x28, 0xab, 0x6d, 0x24, 0x85, 0xd9, 0x98, 0x64, 0x4b, 0x77, 0xc1, 0x48, 0xfc, 0x25, 0xc5, 0x59, + 0xb6, 0xd4, 0xf8, 0xe7, 0x00, 0xe9, 0xc8, 0x92, 0x12, 0x86, 0x99, 0x2a, 0x2c, 0x45, 0xe8, 0x39, + 0x6c, 0x61, 0xa2, 0x33, 0xe4, 0x41, 0xe8, 0xf8, 0xd2, 0x01, 0x6e, 0x63, 0xeb, 0x75, 0x30, 0xd8, + 0xc0, 0x75, 0x1d, 0x3f, 0xed, 0x7d, 0xda, 0xcf, 0xdc, 0x12, 0x3f, 0x7f, 0x6a, 0xd0, 0xcc, 0xa8, + 0xa8, 0x0c, 0xcd, 0xa8, 0x3a, 0x63, 0x5f, 0x6e, 0x15, 0xfb, 0xf4, 0x15, 0xec, 0xcb, 0x67, 0xdb, + 0x47, 0x2f, 0x81, 0xcc, 0xcb, 0xc3, 0xd5, 0x5f, 0x2e, 0x2e, 0x79, 0x19, 0xe6, 0xc5, 0x25, 0x00, + 0xfd, 0xa5, 0x41, 0x2b, 0xb3, 0xea, 0x7f, 0xd3, 0xf6, 0x6f, 0x1d, 0x4a, 0xb8, 0x79, 0xf7, 0x43, + 0x73, 0x0d, 0x0a, 0x81, 0xf3, 0x63, 0x2c, 0xd2, 0x87, 0x81, 0x8d, 0xd4, 0x03, 0x55, 0x83, 0xa2, + 0xef, 0x04, 0x0f, 0x6e, 0xc4, 0x56, 0x90, 0xb1, 0x8e, 0xef, 0x0b, 0x1f, 0x0b, 0x1b, 0xf1, 0xfb, + 0x55, 0x40, 0xe8, 0x2d, 0xd4, 0x17, 0xf6, 0x92, 0x00, 0xf2, 0x37, 0x12, 0x8d, 0x0b, 0x8b, 0xfb, + 0x11, 0x36, 0x33, 0x57, 0x8d, 0x54, 0x30, 0x73, 0x3b, 0x3b, 0x53, 0xf9, 0xf8, 0x0e, 0xcc, 0xc5, + 0x51, 0x25, 0x55, 0x4c, 0x6d, 0x26, 0x5b, 0xb0, 0x38, 0xcc, 0x9f, 0x60, 0x2b, 0x7b, 0x20, 0xc9, + 0x1a, 0xe6, 0xee, 0x2c, 0xc9, 0x55, 0xbc, 0x1f, 0xe0, 0x59, 0xd6, 0xc4, 0x90, 0x1a, 0x66, 0xb7, + 0xb2, 0xb2, 0x93, 0xa9, 0x3a, 0x00, 0xb2, 0x6c, 0x2e, 0xc8, 0x3a, 0xe6, 0xb7, 0x97, 0xe6, 0xc7, + 0x71, 0x2f, 0xfe, 0x68, 0x50, 0xea, 0x7d, 0xe9, 0x5a, 0xbd, 0xd3, 0x43, 0xb3, 0x01, 0x9b, 0xf2, + 0xf3, 0xf2, 0xfa, 0xac, 0x67, 0x1d, 0x5c, 0x5b, 0xfb, 0x47, 0xfd, 0xb3, 0x2b, 0x09, 0x6c, 0xd8, + 0xe6, 0x36, 0x34, 0x16, 0xa1, 0xfd, 0xde, 0x09, 0xc2, 0x8e, 0xd9, 0x84, 0x2d, 0x09, 0x5f, 0xf4, + 0x8f, 0x8e, 0x2f, 0xaf, 0xfa, 0x17, 0x32, 0xe4, 0xf8, 0x10, 0xb1, 0x5b, 0x73, 0x07, 0x9a, 0x19, + 0x98, 0xca, 0x1d, 0x9a, 0x2d, 0x20, 0xf3, 0xf8, 0xd9, 0xfe, 0x69, 0x1f, 0xd1, 0x3b, 0xb3, 0x0d, + 0xad, 0x4c, 0x54, 0xe5, 0xf3, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x09, 0xe0, 0x81, 0x2c, 0xc9, + 0x08, 0x00, 0x00, +} diff --git a/common/api/l5/cl5.proto b/common/api/l5/cl5.proto new file mode 100644 index 000000000..1cb457043 --- /dev/null +++ b/common/api/l5/cl5.proto @@ -0,0 +1,179 @@ + +syntax = "proto2"; + +package l5; + +enum CL5_CMD +{ +//------------------------------------------------ + CL5_SYNC_BY_AGENT_CMD = 100; // 该命令号标示请求需要根据agent IP和Sid列表同步相关信息 + CL5_SYNC_BY_AGENT_ACK_CMD = 101; // 请求CL5_SYNC_BY_AGENT_CMD对应的应答包命令号 + CL5_REGISTER_BY_ID_CMD = 102; // 已经废弃 + CL5_REGISTER_BY_ID_ACK_CMD = 103; // 已经废弃 + CL5_REGISTER_BY_NAME_CMD = 104; // 该命令号的请求表示需要根据Name获取对应的Sid信息 + CL5_REGISTER_BY_NAME_ACK_CMD = 105; // CL5_REGISTER_BY_NAME_CMD对应的应答包命令号 +} + +// IP配置信息,用于实现就近访问。L5 server从表t_ip_config读取,由OSS从CMDB查询IP相关信息写入表中 +message cl5_ipc_obj +{ + required int32 ip = 1; + required int32 area_id = 2; // 区域编号 + required int32 city_id = 3; // 城市编号 + required int32 idc_id = 4; // IDC编号 +} + +// IP配置信息列表 +message cl5_ipc_list +{ + repeated cl5_ipc_obj ipc = 1; +} + +// Sid属性 +message cl5_sid_obj +{ + required int32 mod_id = 1; + required int32 cmd_id = 2; + optional string name = 3; // 名字,可用于实现通过name查询sid + optional int32 policy = 4; // 就近访问标志, 0:不开启就近访问; 1:开启就近访问 +} + +// Sid属性列表 +message cl5_sid_list +{ + repeated cl5_sid_obj sid = 1; +} + +// Sid +message cl5_opt_obj +{ + required int32 mod_id = 1; + required int32 cmd_id = 2; +} + +// Sid列表,用于CL5_SYNC_BY_AGENT_CMD请求包 +message cl5_opt_list +{ + repeated cl5_opt_obj opt = 1; +} + +// Sid名字列表,用于CL5_REGISTER_BY_NAME_CMD请求包 +message cl5_name_list +{ + repeated string name = 1; +} + +// l5 server列表,用于agent实现在连接l5 server失败时重试其他l5 server +message cl5_l5svr_list +{ + repeated int32 ip = 1; +} + +// 被调server +message cl5_serv_obj +{ + required int32 mod_id = 1; + required int32 cmd_id = 2; + required int32 ip = 3; + required int32 port = 4; + required int32 weight = 5; +} + +// 被调server列表 +message cl5_serv_list +{ + repeated cl5_serv_obj serv = 1; +} + +// 有状态规则配置 +message cl5_poly_obj +{ + required int32 mod_id = 1; + required int32 div = 2; + required int32 mod = 3; +} + +// 有状态规则分段信息 +message cl5_sect_obj +{ + required int32 mod_id = 1; + required int32 from = 2; + required int32 to = 3; + required int32 cmd_id = 4; +} + +// 有状态规则列表 +message cl5_rule_list +{ + repeated cl5_poly_obj poly = 1; + repeated cl5_sect_obj sect = 2; +} + +// CL5_SYNC_BY_AGENT_CMD请求包 +message cl5_sync_by_agent_cmd +{ + required int32 agent_ip = 1; // agent ip,在就近访问开启时,会在cl5_ipc_list中返回agent的ip配置信息 + required int32 sync_flow = 2; // 流水号 + optional cl5_opt_list opt_list = 3; // 需要同步信息的Sid列表 +} + +// CL5_SYNC_BY_AGENT_CMD应答包 +message cl5_sync_by_agent_ack_cmd +{ + required int32 agent_ip = 1; + required int32 sync_flow = 2; + optional cl5_serv_list serv_list = 3; // 被调信息列表 + optional cl5_sid_list sid_list = 4; // sid信息列表 + optional cl5_ipc_list ipc_list = 5; // ip信息列表 + optional cl5_rule_list rule_list = 6; // 有状态规则列表 + optional cl5_l5svr_list l5svr_list =7; // l5 server列表 +} + +// 已经废弃 +message cl5_register_by_id_cmd +{ + required int32 caller_ip = 1; + optional cl5_opt_list opt_list = 2; +} + +// 已经废弃 +message cl5_register_by_id_ack_cmd +{ + required int32 caller_ip = 1; + optional cl5_serv_list serv_list = 2; + optional cl5_sid_list sid_list = 3; + optional cl5_ipc_list ipc_list = 4; +} + +// CL5_REGISTER_BY_NAME_CMD 请求包 +message cl5_register_by_name_cmd +{ + required int32 caller_ip = 1; + optional cl5_name_list name_list = 2; +} + +// CL5_REGISTER_BY_NAME_ACK_CMD 应答包 +message cl5_register_by_name_ack_cmd +{ + required int32 caller_ip = 1; + optional cl5_serv_list serv_list = 2; // 被调信息列表 + optional cl5_sid_list sid_list = 3; // sid信息列表 + optional cl5_ipc_list ipc_list = 4; // ip信息列表 +} + +// 包格式 +message cl5_pkg +{ + required int32 seqno =1; // 序列号 + required int32 cmd =2; // 命令字 + optional int32 result =3; // 结果 + optional string error =4; // 调用 + optional int32 ip =5; // 调用者IP + + optional cl5_sync_by_agent_cmd sync_by_agent_cmd =10; + optional cl5_sync_by_agent_ack_cmd sync_by_agent_ack_cmd =11; + optional cl5_register_by_id_cmd register_by_id_cmd =12; + optional cl5_register_by_id_ack_cmd register_by_id_ack_cmd =13; + optional cl5_register_by_name_cmd register_by_name_cmd =14; + optional cl5_register_by_name_ack_cmd register_by_name_ack_cmd =15; +} diff --git a/common/api/protoc/bin/protoc b/common/api/protoc/bin/protoc new file mode 100644 index 0000000000000000000000000000000000000000..3e2c6f39a38bf5bc3e6400f1a904e2f9e9523e9c GIT binary patch literal 4969752 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Ú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≺A(=%<-7vk4#$r^E9d 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 z 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⋙;K8LLoT6v4i_$+jiG zLe&}-+;?!?ej;G_ahoPb=y5(}H_DrTZ@%O+)X~8PtkMWBmK>{BiCIC@Bm10YX*FNc z6$?6HT2C}d%biM1LV30D5-Y$Cy>Q8ca?C(h5Ri>W!ly_Q^C8(d!W{q(f;(+;)kud$ z9Sr5bsJC|97hb6mz4j#F(c6;b)977-<j zB!(PVK@S&dd zp?> z`memrh%bK%dbdk|M5L4M-OB%aZ?mY`p8c+060)Bbj$9pO7qDgCX7fG3nhzU$fUdms zlv||HiniyLlGi909Q5za3RYSjzlmUQ(FuO{Z+LqX-G5<2u>0TmURw8m1$FZ=a| zfhcC)(GgQphb_%r1?wp%RZeNi%Snf`d#*y&T2w`^Wz~bUD!L|aU2=$Z$GY!IKp&Xv zPFy1LyAd8vsR5+$FQ;$lvUU==_=m3w`q$Jtic%1(+1*lj%w7x*1d@|(??T%*>L~({ zSso?m<_i=z9X;&@5?+a7N2rq;0E4|97b!xl5Cg7m>Ib%-~t2F>CRxj(D$z(gJ+aRV0^_(bh90MsPdu z5xu(M`T_17#VpkH4sHF$97KP*f$RmGkEn&KC4uUnE($U@Hs95%h$7B;Wm1c-bgXtI z%)X*n661|QtAe-rh(z{P8g-i=Wf{|To1w4)P!5v%9jkHLnJ`24d(sHm2akUwetA*zRB7#ZnyT7szqwp&6Q8IC!uIPY+LJvkxfIfZ_M1*5 z|55vG({%e~%6{4AwBN2rH`RX6V-;81?^-F>_B(wM+V6ma)7mfCVyd06pEQ3H@P5*^ z3K{m3A8*=E4)azYz39~D3=afL6nn@|7P+=+()*0nMo9OQS4(yay^ovwG>&~QBWpI= zy00*sg>)RAQA` zzV@s)if2FzGsIC=;2mRG9<>eJxpa&&?FA$r+uA=|XSH5Yn$k?J7ZfY82pkJw(`27dHL3Su`!wyf} z=tQ=7d}T)ADWJrja&|U`u_JP4jLks~dsgrLWpjRsO;kC}Ty7EF-Rxy(b9trY3+pgv z07LrJwKR8~T%?QUR*20{oFv1T1Y97=_Fu2)BJygqs$hP5jj)8@i5v`O z`ZF()gX0U{?=FGgy#l}cdcVPX70|dS9JIsTRvy=Cl#?FcIv)yTFOes2w=?CEWSJ`1 zKyvh;&hMK%TdI-#xAJ`azm(@~CxEtJ2eJt9e0g?2mX0TC!`T>~SHOnRtgKXf6`hgM@?sB--aa+%mnHYBY4s(57 zP*Bk^U`a082l>TIvT0x8VJq0X8`5KajTPO92QiXDWj-TF%avf?a4ac;(51jp1W5eF z{hjY&=n>g<)b!mVKqR+fY3{~WsgsdALsI$|Z)5Q!f^@f1j8{O$aqSVjw_BRKv1t6p z3~WSNU%v)t4)CahrB3Dv1d^G7Xut3&^q30tw=&bgt3b^9rxQ0Ai)|od67$nl(eXN{(c*(+=fRF3E9o zvcPEw+9qCa!VI=1qwqN3ht=TBxtx7EB6r!?gOIaKatyW#xVwpbE}2%4sd5in)QsE=y?ly zoXhWd4^0U5yeYSadfqAtrSNQo-}9c7`Y?a(d5?4YMO~H7(Vo{!vN(hDdR{BcB9eLi z{{QKDUF*X=?+{hMX7#)Qc&DgQ&rAFo?0HWkWgWbQJ+DgURuM)-!JdalmSr&Bte!Vb zP|55Z_B4-Z(|g|aeTntI>Uo{{)@ZQj-TzW^J#RF*2=+Y5X?f2p6T=Jjye}BlZ@TA| z?b&1?(@f8sbLs!S=cUgjZ(#@euVa#vfX0n3|8-1qEP3)`l4D%bAH$C#IT;>hSF{T! z*s?2X!`=^EypX0yip9;v31>MY<}D1m$I*HV=J0&fVyEU;Hy_n;z|HU74$lDa00->P zBte`Gc|9B>dJ)_wdJ>p9VZQh?*|3=_$@AAU6h@N%It!(`m&?i-Tp}o3ksk?oxCWVI zVgOJNw{U;BEu9oR^@4i1qa;h;AOjY9=bk{6ym)tdxB=mPmx*ioax`C%6v-m9<>)O| zxL3%ZnD>79TFz|s6may>EXEZjS_8XIA|sBI-OrP!uW}^t3Rx2~+`)NKFK-z|0N;t^ zv(yjVffh!Uu#UOs?cTV%!1Z83*u%sx-A5MX1y69tuv9O+%b9ZxsokJnOAaM_kz%JLUwj>f1S<#PUR!e!>93q*~0Fqu^KlYosh zMaztO${LH6N>7xJoYi_cuQEqY?B)=u8^G&+q%_RbPf*p3=Y3@R5Fx%$MZ=+jPmrIS zMJww;1!oxRcWRSmkP4QF;o{{av9#ydqo7;ax6p9M4t~eDli|+7GC=C0Oce-@C?CA2 zlSlmW>{FAm7!~8L`?5-JtujWd$iiaXY$~ydR$0)1(g%Yo#`=gHlxRk@KD%nG>=UeF zN6pji_b_SQK&u=cXq8>8~qio|IrW`4Sk<28}4K`-SD+k@cMoE6isp zCVaZ1)YyD(!D}*5^A(=y;8ijS#-0B6L998~l&>npJ5#aT3gh7K-;;w1bod#mo1pD_ zcHEf$@%D!1C|EVXmZgTHfoQAP|4CLj!rK;Dk{9=+|NH-ZZZ(Hrx%KB((`dGvH@7;iXA=?LO!NtVZWTdl^CG;r z|`fj z14a6sY;1QF%fhoaM|?`8_oh*2$=pag+2EPl$v*DesFR%lEXh{g*~tR$4rU=V!pfMQ zioe}IFK@Zct%k{F2`gb6TK@X!Ucr?&6nQaQh|Hc(o)EV7VxsuOI&=dmZ{Pr>Jc)X7B4M+J8ler2eE)&#0Lm9|Vn6=4lcyRs<_-SO8N3eIK1dzE-HSE3g;mkC+0YU+nGTA-;@ z|A(5A=IQL|$9azbnU9cmLo21VkY_*PzC8uIW}a4NzEK!uKekGERtP|%dD;n^x z*qGB$>4}{-+DjbR+Y>;}0a;;R`HDNvqol-MnbW~?^n{A6imrg+p?5Me>sRmENleWT ztwJ3Ok0E2pPA8pTJr`Ou`$N7=>wEiWQ5xuL`4O8*PWdu1#Gn$ZY$Hcec=3NxczRs7IC{g%i!IS=y+rMnHtM+j0w7^x&n-Ovq?|vR~6-6iwbQRxK9HMOMT&lU9DYp4bX<95e z&)4F@+Sc0WxQvSXhub>7H`(aN%nkMC)0Q>Wn@{;mH8yT^c9}yjZmP>%26Tb-&AhoI z^uM;+d;F8T(ur0u@|N91*|9N~{4Vh7x?i=(T62*km*REW8oV`Im5tCMIc2&WU|pP7 z^6A(t-1i$ASt~dB#({LITWV)i=Bu=;lD7eFXoTFp_$Z?B;w8Pfq~~tn(ZV;M!z0O( ztW1)_-efq;;f85Vad>|t4r>8t9CmDq!@;Nf8XEw1p(%gm6a(1|Ffmuul<}0)TBRfp z`b<_!v62f2B>#L;N)u2bK5Jr19PYEY{m{rSz8-ggj}7bbaG%S+JwiR|(&*rG2A>-k zv*uo`|7~e)Ee|5w;nzSo0G`n9iDcqcw|r3}$p>b;#f@4lL09#acCLIBTEvRzc0A$0 zXTQ$V!AIIrsWk2ZhX26}oXhhOo@)rVw#OkR`$HMW;>MG40{eutpe6Uj~@Oe5}3@VO6$ zKmk({R-+k~5sZFdDIYaA=cL4PsYL9l^0poUWH9flx9fY`t z1gRw*CvuwbT`RnnUJ+<%`R!U-e!G^g78Wm67MIEI;uXTSOrl_|WbG1R+U9_}DkMVP zf?fi0Z0Uu&w=eCEPh7DXdtgebt2}Q`VfV~o_h@dksSj8Ljk)VTe{xn*(B^+@4^=O? zF$i+ur1e6yKqGrNRYVQWUR{gZe8W?1LqN6i+o@K5JJr$(9y-^v`+{C>Jkl>|Y4?nc zz+wqMhL$|Gbm;Ewk1cHjZ8GZ1LB~{W-uhr*%`A(f1%pGp{DtEg-i#+y@-~g78E-<~ zWQ{>|v9!9uX%xJl0LMqKL!B))`|EXEA0x4xJwc$giie)(X0#VR9nb$j+T-@-|(Pegx+l^2n7BF@Ka zG9FAKdG{hFi5RM#MLNbvA~{A%9s7Jbf0nhu#mW$qF@8TiKFJtLeH^GnhAMo;{aFNt z^qH;g-zRA;OeEVVCyqcLAz-A{cxFBXb)msRFI2rP%^Ks^;UQF8WVI?509*BQY;0Bg*$YhLX1LEbz;Z!WQJ1pA7wLXW>;Sd)%3?ROIHd#^_oC2t3($RUd zFOv$NNXDepaY&DO`qB8@w5VCOtTnKhv^QC;7pnHjY%NI2P!KB_1W4(b1;ky>q`om1 zf81pF0E_63j>?eDO6=fCIeBK=tBUxkm&m2UB$D4$G3n^ER~g6;$i60}AsM!v3cgTs z8Fu-x8q#k5^I#*@cK(aPO|0Z3aE9Zb>VMS66YGBf-!gO*fJH9IS%`5#1-=vj zM=R|2Vmt6FM)Ru4FFn@RH{t#GY?PmC;w{{xYlge&T+U3b8((Zf=6u*S1Gk6AW(F!f zhf4Bjz41UT#wp{~hW2tmKx<6ucQN8i4B@&De0jB%N3#;O)_Oc!ncQnDXXy~6Fo|TV zFr8gVN3Se|`gW^fw7M)c$1y@77E`oT#G<{w7pr6ewEoNj;a6W8e!h?Vwini4H?9v$ z=UUDnkmZwZATLqAs_=m>Xbn%gfmHLzo9&$GOX5q|xGV1ylC?iU73h)*FUM0Uj-<`k9)c%EN3qmVJ&uMOM^3Eo(qnPl2IY$+1=v^GZfr z$zE1+omVo(O0ulv46mfjN;b^LRc3oe%?(bSD2q2Zy$29srMp+T!YaQUs65N^KG;p6 z*GjNL#;dI)8h~DIc~1+p4J**xr2wg$=GCkhcHg1^`Ub^YrE0lk{lwO<_O*VSG(5*1U2DFjV)rvL=)^bkO> zb3og_Vm5<@rQ}Y;EYr&8D06weEbsL|Ubf}UF&umr0gKo!AS{rM@Jqh`p$!Iq#noAo z|LLB1PMJpM!MB(E%M_XXoEE`sdEye8(AZHwo3{ah?Zg*XlgRxbk|%RNLw+leTbf9B z0MaJrgE|gWr7#X~lIG2=-FL5>e#aZ3WlSBRcYf-dyD>fD(fvg7!DpdTcZW;9R%`ob znUfeV11i4KT+S^T5R4P6G}d>1u4{%qd_UG9iAlJeTRZPd)}q(_cMMB!a=nMoabu#a zbK{!3C7XBZs?F`a27H8sLbsI}9+xoS|M5E|FP~S(zcy~xa%i{Ldhs%byvJQ{Wz+Zu zv972tWmv1`clhII#*+fpHWP(rG`b}?C6EE8aF#!iQ6w1~9+LpVKJ-2F4mNrzEZ?2M zl3U#?*b^4WiAT(8d&!?@iKOuC;;tCm<)|AAwM|Eq3Ccur#AN*&z4N<`@yZ&VicTBe z_}+kQ<^miEWHnQZI;>96nAX{{b2y-}P=EO!>|xreA< zu6*M|9`716{oZDqR0+U%1*if*Wn6;|+}>9JTr9%}^Aun?0IK6|MEyo*)?`7)EvT8} z)*oZhE%1{Ap*)s9qH^$DFq9#$ZLZ~DhkO%~Q<>YIA)9Qk zrHpy)6ukZhMZB1(zsc#lyAZxo@*mKAia1a6D#8)Evp_nep4E_De&Tn{P}VNMHV zP|>-83~Kwr?!LDB1`4V2(DxeZUPQ(Y+M%H*yy_|$79F@zXh|SX z6d`cgT&c2Nyt2ye{WT|=fv?i=9iIC*rTdK9$syIzI%98 zlKSxK+m|%^@T#tz+9&`QFx2)mnt9(cl3$jGy_Vn`mp7J~2gUm&<|==dNiW}C5Pyr+ zep>#NJbVZVu9lBWA^d@DZ0gy|$K?wVvabV2)acpE3)}E@8TN{YN`(PFSt;bg&t6{e zPbl4c_Octiy?b1WbsHdD_u6}S8_-T3k^iUoX4LOP*xXP{<4xuN24ui zlqft_hP9NhEl10hHDVbsn5?Zc)}HS|`b=V#L0GFY)(%wGBrnX`3CbFAt3KK*YXk*r zLzK9qaXD#tFF)@srO^`QDUsZ3%b#s|0il|r>(h-q)(d4UFEE57^AQ;;vAkeG-TIx# zJd?T#6klS@U(ac{E&zq}8j}@aEGIy`M*8VkPU0#S@i9CT$@vWh~an8hcD1#Sb;~H-BS8lYln#lYb{`wTAR- zhRhy~cFL*3z=1URXrtMmOSM z84h2?=bLgr#TW{S2nA|yG79#-z4cuumQEnEctf4Zawaw6i+49_$0)Tiji`+ZQoB;A z5en4KQECqT1VJD53~OMqHpuqy+j4D7c46~kxfOY#-t^?*Vqm%u7Vl@=)Z&B;GK(1c zAIVI%Uq?AJWDi=d?LQDfX<&1ZOfgZ^fG`ZxSeorT(rRjyPXbh_hsXplKGA8rf|>7BrX*J^!qfv#Gp z?yT5}??~lfmE?C++^ayVCO*pKdqi>9gyoxq18yGf*Es&l(qJOFUM+I?Tskmze$9amI_)37U?hbE#u$tp5*1rMbB6An2j3Q|- zROu#IG}gB;UTlaZqF!ZV6zRYRSi3M z6`XHc6sR!42!6h;S7CLb$*6ANeji$&%Y9Km#RH*HZU_|8AzU2Ds1S$|$S_Xs^bl7| z$q@licJWa@59fNI?5tSyyT_}yz9?d!^(yR8yg=YK7KZLvaUF_RdTlauj=7Jj%=(Sd5~(qD z;kVsd)fCtE>{r9{4v~fLeGz#Fovs&bWghN!W$0pHU5K*P z4C`aDY*H>41bMO9W%!dHSvVwuBVLK*-YN31T*{CfzqMFJXye!o*R8RL56?-J#^gay z?kn3m*N*2i(h>4D2EF&7U@{o&_i7~X=p0Nso|D|5!E-IRh&y!`K+3;Rw{)z4x^Egp zbxW?^Wd{8$_6(|f)t3}iI&8eq)Rx-T5lK^bZjtJG901TwD&tPkFEfKtGZZZx=fxI~ zN{m~S9EM|smA;CX)p41RX1vQ*q7@sLTxc>w7TklHm1SElAI3*ht?I%!wBPc8AkcN) zY6i{v_46+~P~8fdNJ>0ice}(R9B-GelR{fSGYd)h*jtVlGFw*~FlJhL<84|XA#f>GY2UA5KC@>iyC zqTqSAveDR<7hI1u6u-i+@)a7GZw)KTK3#u9^;~<=OF5J1pU90*w6@=$Yw_ih2UKK1 z+dL0v<7@_Xw#I{m0sdhc2|MIh6FEcQxXzFg$*Eh@U}gzB{aJ3y&2Hgg-oJz+Y>I|x zzJHF;lzu*joU^ef5LdZcm-un!UdCK5e`0!;Bj9e~vk)-&X8l*b!9CZG)HD!s6SG5= z1qp-#VxKH5VCUJVpLxGjR%07Joxf?tHxQ|E0D1$os6uG(qrWMBfr62J6m>*V-Q%83 zI-UNCVAa{AQ*39{Or0B80{y@TQmgxMOJT=jVYWoP;Y~Ee;UM}*pdy)?FBN4>6)SP9 zUGG=N_p7d=!HR{t@g;PhEs>G^0p?J;+0{jeJb1v`jdKB>fuq>+Kovdf0Y7zVYR3!U z&(Pu&Y8wwq&KKulTWu~*M^{4Y)i2)+jPuH1t#JgNU>aXCIEO7;9j`GPzF}k=e02VO zozh*7gdUMaE74RQI#=PPZUyS5dO~hDu2xI#oq|zAj2Eti+{H`syk6SWt5I@xoHx^C zwKF9cu5Ab2>=^DdyTF8|000MZPr!k{5rBXrTb`UKKvv;Q{I(D5riS60x>8x$oh;R( z*!PO&FS8AThbZ}C`8t*2EnbAtoX+v&!(=+oV=231%+>GQ>a<{2Ao4y{`UsvPkk(dq zSK?5L30!@JdNz^CPGBA(e5yJglTv+x%3tf2^R|%@NjA3K9rka=tnhAY$g|ned`x0w z4Vw;Y9(xrIxfhR5W{mBCl4RZ6-0Tt%wCoK!hs==ODm$RxV;uLf#@>LVnPayrZfKu5 z=^m(~?j_NQ!Ngf_Y~QLpWG0{gqzl-`;s-V$2>?Z{N`BvyLe-rEdQ}Aice{gwp2M)m zov5$}2rO}qabu}1MXgxwO_%j>xr6-N3;o=Fe(o?o zcY8l~fS>!vIuGxze(pDZ?lykzJAUqlOFbUu`?wfNJKldd+_eMW=nxA`t zpIhqZ=KHzVA{YK5e2*KmMlr00S%`gd|6im{nYO3ALg3EZm`yrgtBokln{g zxo-DSlDhj?aALE&j}D`!UT{`*HP61wdyx&o>1D6|pl_Nm^(so;JqOvfgeMPNr)gO# zaIb(wu)$bdoyUDfxfUzW0KnOQw6Vrcx->~AIChZz5bgBRO{N_`CU7PCXA@^^po$8w zq{&-MU>&2ncZNm$3$khv{0o|Iy=V@UXf2nK*KbiCzL2@F0VfeG zPa9KPQY^%^NT@VGKYN3|@P*j1AtT%jM0Ju@eEa3o<66c~{CzAj0asiap4Em7K{pW_- zlzVH!xJ9SM78;8-z6VhXz%+9)=&*fQiPBN~d)yL~gCgGyV{_QcJH`^bgW67{04j7A5^hURBKQk=fWR}4=Rw5dBwR-X_S^sIAfPr$ zW0qS4^fECyK7CZ=QC{N!k9g_>P#I>!<@kv^Ws=hzuX^XQ(>IOghmDy;DC(o}$ftHz zVKJ3Nxfo}q{4LIH&>o3*5eioZEEIS{9RT)R2m|5k4z%sNqp#$C#{>!@cASp%Hi^@kr=Ps3I!I?=BAHb)1W{ z$?(VWQ%bE*>%Gy;o*Cj*{;T_v=jNuJE%L6f(^cZM%f+$|C!Iod_WWfs&DjFaKWf|X z9H}_@$btb}DxRIqKjnSpPt^Xzm>Dfm5XK1yek$dbgLBEpbpQ_DIYh-^_uK0#S$-=y zmuTU%f5aPNv2rG{0gl}GX&>rp$pJhVQ!aVHtbB0v7;+*E2FFl{f;sIbas?jP)D1m|iY5$JL@{(Cb>qe!; zB+df~t;t5~Pg&gd`P}JPv~5gJ&}o~lyrLai8+}hJO2c)xTdxt!lN43x0yW`0UK|y|d<;>AIh%~(8em|9p zVs)i?PcX{Gu7AKs%B|#*lVv#3^Lwrf`LmUsb|Lc{jrsZYWS&XgZHxcin9ot>>l-nD z`tfAG)@Oc4WuBm5{xo4PR^n*fKpH$xD4HFB(z?^!lmQv}M@yd<_mqLKJ$NO0(B)*d zr|rjVr_3^m)oA2;%-+X^^m54yYxayy8m63NlTRL-PrTRPQ#B@5_wYc1qVf6pbi#I0Rq z-pyn$+mQZtJClw^cjZ>$6UmiYdbI(6zSg(rY3+Gv?t@*yqv*PvK)O$AvDiuEO7CpJ zbrA`BPGx^ynahzJJ;fNGX-0A!?t?-Z6O7^&LNQj(B)l+kZ$|~a z)Y~bDKyXZi<*>RRMc_^{gwz5mX!3qkP?3Pf%FFP_Q&6A5R8W;sJdq59jwmiL1=Y~& z>TTkXQG9a@je^)!K~LUDnJW$H*OQoZG}@_<3XjRUmI_y5(JyOKxkpH>NvDxF)`&*D z$l=1HT-U5d^;ndk0Xi1|}!_ zMTA!pT5G{Q=d)k}b8uhnTQbk29pbAs=5Kw7nja&OA?C|zl)=5r;Wv<5g2G7dzl}*p zV>W4c+lSXnsjvA9&ICizV63(pfh}USbMowB?FiPli?v@GcePW622SCHSo<{xXV)0p zfsJh$4CtwwR%A)94E6y&p1PYZ7X5RbXkf&2P%Dc&?6)cQvM}~X1bdw^FpFcXUJH7h zF>5aIB?O-@-qCoJT`#!F^r2QLp1j3cjJeyTpM=Sr^l)ILSaO8)9ZX4VTJj3i6oG-d zE5BtNF7$ZOK`KHON-N`QjlZfXR8VDDgpUV_H}Gx=KU63{x)S|)5r0<+i>-+6W+1uaNL6R9InQpn{83@9`@<;8m!!3daU2R9W6= zzrsacg&Hf|K2Twm<@J{e7LcM5>u>c`*T<`0Z?Ny7(CKBP<*oag^)+t8B8XrAt6@$h zS>}503)Jsvd9$>Bh9$@N^`G?WXItU$K>b0MceU2F;=*Jp#B8Q>#y~5 zELo4B(}`GMd7lOHMqA#pK%R>OzWmBFhq`iwScPtZ3ac#dP^DdM$p(pE)s*-3>bp_rQxrO-xZ@!|f2r+m z_2+8+6p$p6si97K=lZ7xFnIo7F>owGrR#$jW;zV&rbqeJ)mPsrb(P&)Jy2HlM7Q$C}K+$*{ zCxn}NolI7NJgi)3oP}Ck8x5Y6Y5#6ubuqMd_dExBT}%4n9S0>+jl?443@l?-fX5kl z^$q;W^;#J=$nS~*UI(v?w>M9J^1~8j=&;fbqj{=3U9)Cvkl4?=|9k?)85uYS^HtY#Zg(8Ix@`R<}a3Jt50oPNS!9KD926T3@4fPk`F->C_GhQmf0`Y}uX} zW|}N8YP$ufeT>*TB-=6xww-J@hpE9d)q=T}FDs$4DKmzfGT}X9*o&2pY@*a(FU`~S z(zzV-W^??FmM}%Dk1@v$qO|?b@D@S zV&%P9nRCGoqr5dO%}pea)8N`sxP%nEi;Dx4AV*1CCva<83+`@2@ZD?@%=QURIfDdi zA%o^7k{?`;dj8eO4WDxW$TA6^zKo?AmYkx=YG^Dz#v1gL2hnC>Nsquw>65ApJE9@r z<*;hg@SViKW7AKA4+df4n)|65{+5EvmTNkGrg;a+*srTB@gA1f3wd>Nh{FNzYX$8B zz=vDj4;UvMp#sZ$^Z^ng@o|K45hl}nLUbAmd*}o*-GU!4+wC* z++VKLkPzc%#q9L@t@Gu4qqlN0;UefTf(=IPAJH+` zyp4(W@-V0k!S{_L@7Q8oA{jZ1x+Nhr{@AgoYKCy^hM=rVRaS{dJXv2_MOib*7ay;3 z^L-ZJ)ea}7e1KzX5<erFMl$t%&DH2^8=)-X#&V@z*S4qpW(_WP0Hl zg78h*%NHb4ug1Xcx*t7uM=v|OR?!tATUaREvIw7Y#p9-~-dzT8DgYe%BA_Qy*SQB9 zGs4&n*ML`xhiWC`Vq|z~n>v`|srN0`&r_c@t zDf@ymSg_zy+WPF#_!FrqEjde)QGPZ~qr8}u z+|Edf22Z0q4}7}S{Y=rPixbhYDRqSPys zhbwx$GU>*>S7lA!#4z-q^dtIea|w^1;s!lkjaYp((JvQ{+X+gzF!}xTdgq)<@sgT( zta}5QpPSh6Wu}VLaoxRW{HlzxG89lrUH+{WbRugHq+zfg2*Cx>*t?zB*{7D=+Px2Fj4&-!Ew{d3LBIlyFVvhYF&N(FGx zbOkuPnwQ4~E6hO!6Hzo33)8>VPsU#`jt7F{q6K1OBInD=b3W~R~ZBTD?j(kcD!$iKacR3jDP&4DsJ}OUY;;M2O!O1MN^>r z;O1!<>)!)dT@ODujP=$gKn8|E)}fcAE)C3!&biWavufz$KY$P4OCeyniR8cl1a0+9 zfoKm1=bptx1oB?#f-Y*#J(8|i`h0M%`d9O;*2h?!o;1zf923oHhumMd56Q7zWaa2j_anyyq{^~etuke{P&VIeSB0Q7j&O_no4NgGi$rPZt zx{Ii1w;k8w088j3;o1L-H?E)EE$z&Pn?29P>>0jo#Ei(Y(%dJC#y^2xT`blm17CDR zW&F=?)H(-#BEgRIhy2=k9g~ttw|mi^vTh4+h3`f3Q7FxRd$3&1!bcZk`PK7w^uZ4S zcp2d#ZQH-myVZ!~zg*7WwetHr{FaZz10%oNz-VcOEP4zK7+pf3G$PRZ9&-X2#Pg)! z)D@IZ4oAZavf?FfO7A`yF>%cp*|m)ZgCC_Ow@7YOpA*J=b4-;e zC>1abr<3yZ9;Oc#C?EePcWc}-S?_l_4`Why;o>_{J@{S;7wdHcE^5y*Q}hLWxl>jq zv^8|R`5e)fZQ|k7kj`}+jg{|kVx;gmCxg<=Ige5he`{+BfkInb-Hnl5l#v>hl_D$I zgM<-oX;-6cUT?o$R~*H&B^${i?gJ}wCUxt|ld_r%?7D3glJX<5BqFaB<|>(4Oi|Qjj^QRU7$M{r83jS1HAnI0{MT@0x`UdvDXB|__CK1qo9!(@BXyTd-OL) zO0hMMKk*^P{Ik2R-RSN!=+>QHf1EeeH<%j0q_SZX=L!Pw{p{O2XAEAzs54g1OuaQ2 zKiRPErIYci4gO}pgD{i!-0vv{nL)_%(E=H=p`H3rdD%q4e*3{FDvzLGqVvT}IvR(P zhPV6JfGI}qr0+uS67K*I_oyj#0W39u!^UlI{jTmc!BX*eM(+l zlZm!IqP+YKHrgtrYvMDFr%}pN4XOor8jF5m3qujzVCC35UTLioT7L(&x<|R%C`a!q z%nywMh>PXiFmpW#>$wrsJXEmgXnVzh7;S|^?*rmp1NAellO3Y`{p*ILfj;oJM7Qt~reZi!gVRw}>m_D=n)RvLr*Oeu$UpLQ|_(`Ba@fH9D?8rIqNK z^Ou%zGr+jPqK@vE)f?H~ZR8OT?CIGuN&C+Ha)8`;z%0XnYwC1r^5Yi%_SymIJoXOq z`2K#I&*S|Esm2^D<98%0s-{c7RTh4^)mPK3A!%xwh76d5?o6NTvmht&TcV{-!htkO zMM|kfjas~Hjb_{=83A>Dj86-rb(P1w?-Xc+t2Ng$j!moec(7Kj0rhmXR;*Pt+gYuU z1&v#$h3oOWj#oU`f~vZ%4HFreE3WTd*U zS47u2MEhID`Duu*=&Vsu-8v$~r9R)pe%8FuLYLP=@(f`|A$m-(+RldZ0aVxHRLW+x z)mU|l$7X|Ny@@PpWaRhC_k76!DM?Bi;TaEkmby46)_1qtm3HfDBLi1AKN`EdBTUnDh@DxxWR-^-d?36(qNKkIj~TlA~5>)c&~M zZ`v0JrwR8MGCbi%Y(BNlLM?r0=<>T7RWT^1jtY96$sftS(AM0bx8SbSfKL-(^=nDX zlJ`fPQT~#X#(5GM9_J7D*=#+XwYRlO!5_-)2ZcVhXgalTFtyGko(^Sn8Wyc{H_ z@9;hWx=ptqyh%&V4l-$x1A21cO(rc|FnRi)X;YC>siISnPj{n?O}@^6vw4b;Q;XrK z)MzGh#WO9Li5%xawIr$?*w0#Qndxx$bx>1a1g+XegSCNQGgvz`SeDpZREj5#{P?ZR zz`xxKMTad8?^repw$Yf30RngU!H5 z6*7Ydk>Q!a3A=hm*J3}nRbSIsQ3ebEB#MPxKm}jmKC$PF^I9p;ImT0bu4UxAjI7oQ zF)$6y!$CAj1KP=})mCe5X&J)ED+AMHeHIy>tmpLJd|7+!30VW8wNsunw$9$t$iu5jn^d(+esR{CF>I1zDjcjN4(%UgSUHn&VaV(NiM4ki43K!3k_{i ztC2T2=c$%>g8?2?OT58;eayDYtRbJqOFgb3&ptfOyoMsfGp~(3yoPLP^j5vQS(jT% zSY}jb{_v|u^_#=esD6kHk7{J|sh%KI#a;AmulBq6Drru-FbSmEdtPcv2L*Tx0A}Dt zTWQv0sUt|Tx7LhXT}Gv4Txl87F?UOsp;J(XS9jTL&E3A6YA!TY9kY$H^23!LyRTVR zEwWrQJ}@9np(V)h6gt3Xro|qyVb>Mk%d}p znQ=H69Hw?B)1}*~j`ou*9p`E-t6M;hcMeIDqZ%1rBVO0dQ(H^>;z7c>Xl+2IGVqVT z0bx4BNh>Tvp>a1dOX0^0Jk@R)S6GI0fL+ts?HFWtNmq~E7Ps=GUdC^kk^AFvzm;D+ zI88f`A;Z(o2%lU_wbR+7)={OM9H4feOo~PFS}VL(3e#0r+DU7UK%uFw!Lp7vWbxf( zyn(v*4`3heu)D$?0)?+1lqTrQ$nXTcVrNgUH0NfI**qu5Z0`Pf=ZtxI=UtN#m!uxE z8TH2+d&wm(pQoylt=nWJwq3j@Y_ix%Y(e~Ay@h%rx%Sgv|4+`({4Jx2^D|)Jm1yoO z#SNV@@Awz^i&W=D+q~MaQ(?x&T0U7**AZ;%uXf%qdE7?xe(-+PdB0Z4FWflHsQW;E zA?nGfd&A3H=;aALg_HLY6z*~PC5oz>D!-ttjdggS(|(n>U#VMJl)6FxjDZDJzkD7_ z=T(4p@0Hp8+RLe9T%`O4xuV;St@)N9^48gmV{iurk<#ML^^nMjhRMWX|u0 z%SNrYxq0MqOgb9pkcRgGm!4Y6J;P`@g$QxD@|)1PjSS_mzp!EFHp-2|5}rwM=QebY zl>9u>h8&WFP6kIQhi)(P;aqY^q-c>>{=qFkg~ywFQtE4S?#f@&Z*70Hn|PX%Y%&$R zwf*VtESMk#Kzs}lhd#aXs4>5cCrQf32xLgTt8nWW>LqSv{?Wt8EkS|w^JAHGG&Vj* z<`q7Xtd>%r`PkC$WpLfdzCcHn}W^P(M8?GTgm|f zzTJGc(n=v+8((a+c2-)oVOj_JwDOczt>7Q1w1{mqu+{Ocme2u!odMzw5V($VFbR7d zWy8_nSpCG_+rv+=zO&$uQRwPBGydtBkQvYM>!&)o`p$@^2I@OYnyvMnC0(!eb)Rmg z!=Q~h%CD|1dL!#iXOnM;$!f30$mql^h z5zv-UyT7wV)^4s?YgET$p~z94zjqqdXOQ7hJ$v)1_7JKP+U4!6qtk<*Op{5Ywr7CaN*o6YwcDF=KFIl$37bzXN2uw-PkZsQD;6*YcpPi*7PJ)V zO6TbAD*M#4z=2N6Yb@(_WI6XUFrC4@gA9JYwWkhmmit#D$3ybiq>dZ~+2DaAM`*iY z0GABsOQ`(VYcfzxs9n^3UO!f{8|LxgJu_zzj)O_ zr*l)@q+QOyI`x?Tv`d@^V?-m+4ys~3p^!`@`_5>GO_9t=RhZ$Tzf?)yBNdFUt2n~W z@2M@cX92=bp~&xANi@MLoH@Aj9DmJVhUYM-Mj2+j8tW6`--u8n!$FE%XAdi_;_D}c zkXIY>)wpCF|IT1G3?g!rC6eDB%HKRxxg8MJohQ>|JMp`6I@w=^bWPl`e`%Nkf={wP zQ7CNPOGUh2DKIcCRSK(w+H*vx-_$8m0jDRq-)kjpSAA6CVW<2tR+5cR}ZQsKC8<% z){}Eg$M>9u?h_a|PJB{~d+dIiCl3Mm8={YICtZy%pSD@1Xa0kiIK7R+F^2nK!EI4= zs#jXS{RA0azm2usY%eivYa8)g6g|UP%_n{oU6@Yw!XVY1HlON>txSLIchwGX@(5qX zcInhM^bE*2v(0A9c)6ptdUvI^`c$9VR3Hy|!qOnMBQ~Gf?;T9G2BTIOptg59wXQ*G zZ*8&Jvfb^d_3ERtwF^*N&?8N@=aAu9%ei4{n?Ig)aC{dQQfs&Q)Rwht*tj%z zoep!+oc7`Z+y9*|%Z0J5-mKtClkS?UR8N90z^ z5Lphw!d9r0?Z%ZZoBV&6;TeM$2aojP4Ux9-3sMhkX@1MJ^~v-An=_23-wHf7$L+0b zCXpp<3Rly*rEwKQhG#T6{{dGS!j&i?W#n!QkQ>iK0{%E~^9yXdt*k!_12%{i@m+@5p1dV1BG{XP1DJZ$nbQs&&FNk=7d|O zkpl`%U(>FX{i9(k-Tsjzb^oaA>c8AS0>w7Wkz0-$v|0pX zF@C-urC-)}bMTYd=eVBAKUL+0g>7cP%nkB%d zXf=&nJCf(=hUF|}jY<0iZ<(?7Z!U%NvE;CZ8@?rL#H~oTJc_)O8PcEkX4284p=uE$FXZNMB&?kPMG6{M@ z0(ZeyFI$H!C0pcRn^pp0e3sSf{?NLO?uM=28jQsRVBTB;(2fuL=DUq`ay2+0*MV(B zF20hE4g;+R?0WqRz!^u65%%ka{TR3B;$Ili>0f`haq#~m?_J=moVxh&si;)UxaZm+ zBq8@)n=nii;}W@t5HAW1xunT7YK)^nL$6!o9-?uHF?1RgC)XxIt_{K&lNy9v`+wJW zt-YV;Ip<6!uiyXj`M;l6bN1S6ueJ8tYp=cc+LwoW!$4>tLQL>#mjq1b0!MX%!HHk& z1(h7dWfAQ|TeT51(V3uCX@0%X`X-q?_s`!+~S#RTHX{E2}P7z!sVINEW)*Bh~ERA zKW-Iaq8Y)xnXsP;<8CKlR}-eUkE;#uJi?X`ug+k{0p@NWJA=C97Obk|!*S-bFsFE2 zPM>rs>hR(!=mVFG*V+sICwMh_OO$|i!h4+S2nGbXk1K4q$C*X8^iVZ09$U`5)tf4E zTSM_4OuAj6#T7!l^cZWTY9=e0gx3KyzKQYLTX_jA+E)jVml&n&4b^Tze421G&LseR zrWAp+$18Cr^*VOEw-H~&<#1)8U`9I7avD*1zw?PLSplMg=&~J|bUd=PJ|c;*tk+x$ zjpWOkbhZ6rA}c?}ke^{PvLAbZ$=65Z3!3clEa`{-{%R~XLP$6#h{ygGam#d~h;TZo z+BNaRj9!x7jMv0Nt=3j6JB0GE9qYD`+UdsGS`=O%RPCXXD<S z?H~_;PZzWkl+kpgtKz2`qs0e_6mYL+P?BbxIA)Su)~t#i-&wTIf_%$MH>kQ%>rA;~|w zn+GxpKLzxW}OdA_}`@+SRGc{D$4fk_z5{>%dzSIi; zi0kf+%lw`93Zrmdh=LoHuLp(3=|t5pe*}(uU!jJbdDuxo8UHkOupi*rjXePG--!qj zEM!(0#}(VPNFtNdex9O$Aq@7jcLl>?7P-qpw=xY=SA+n{}Br|8<*|- zlUDk()6f5qvek6S^u+50>HP{M$LX*-0BF%!k<(c zcQW|yUuCSs8g0YPvotWH`-)k6>jZ4qkTgp$AVlIR?*ibZxncR5OLKUNG=o>FG@~$r zqbD-tz$ek{>OU=HD&8L3Z%%e)-Guz*#iN&JjoitpYkGTCU3`Q|Kca7-%aM{P6n)Iu zkmk%m%vqxwyuhexh(0bbbsts79S+wKNm|BrE(703wRyoVMwD^2K{$JZ){jzMxvx^~ zhr-dCaD68O{iFLS%EJc-HF-=He`X!h?vUjTfY{P5kHx5?8#MlIy7g(A6qYh6UD zF_AVDk<#>LXT=Xxv6mmDqQ+|uQov^d&_dKpm!Gx8zih+Fh6em{@)Y?gAX~t%%0Txz zf-4OW3kaIxv&YFHSW!?s_YfsC3`mW4IB4}@3Oz2RXxRQIAE7wAI(~x-6tGoLh!r>r z4^&A9+BRH)2}de&^MSqs9gkAbrvOp5LIb>M03mWcA|;U?b}2(A7P0KUbj@3H$@kIL zoMz${WJmk^umLLG!69i@pvOd{`BJ)&+pfL6Y0afMF-4lb@32=K61Ip=CgH>DVQuN& zB&j#?rW^o~j;H=|2CBq22`Dd2VV*pF25k-vQy6UMrwh6oX@!A~1jzNLtkgO$XQahi z;Qnvdyv}DgM_XX?A62^VG2w;>6Txk0*pxm%Wt(TRJ-L6hzpT4}8XFp}?;@i(a$Ra{ z50b&duIK<+N2`*~2bsoaT?cU5JXWChI;d0V0Ro)>DCtDn<`U!7NjYh6?O{CHp`5kN zU;{PFg`-H@^fC(bx`bNSwav?d9&MW^<%W{^x}gXTMeOl-MvJU%+BdFw+q}9g+BVbY zi*}1P4r}-6@6lfPG)3m8KyJ61whu(FG0=~4pUFgjv|WnmlL7Eu>8PX^y|pJwx|rmV zSw+WVw6(92%S@`r9tJuuB+Qnn!gLM`6aU5w)9P8pb>FETO`7e(`rBXhhu-*pC$@O1 z8awcbz$P`7l__kJL(z z+TlXKMO#Z6)jL7e81*UC79SsC^r$eB&VPkvUKq;E#V{37U^W0=fwR9_^R~afDbn_l z_AE9DlDPL2Y0v*6zLc>&i;>~Q*)tHQwe7j$+dvu}&m#g=n?NU}3e*vNF|vhU%K3?5 zB=as)m#n#FhM6pGuH9R{)Q6t%W{2q5n>3+j%cUu^7MTG@q&Yt<&F23=nvWWtrRxk; zwX>g?q;y+N_6%F-eXnz@*~Cx^OrI&oMzj-T9jAu)*Ph-s2OqDXCV;|Zf1TuBD@PaF zNpnWzcnrL*F0XjcLuvnEhUO2{q(ysYVBCyoW}rl_+^i()%V;~f)gP*8@(ah6L5=N$ z?O~lnT+|x8Up6Y~HO#4DPU|a*(H5(4yy|Whjpv-8%6oE;z$S*GV@GO!y!3Qe^Y&jv zYu=i*>8syFB|hV}RyU24c+mUWH1T4S_>bKKiJ$%>MdJGa@DiW!`I<|-kw`4gZKbh` zh1eaM%5IM^yRRBNJH`g=YwtE@r8K(pH$DC)=Fxy}V8Ni|^}vepXfphKHLpMaraZ{8 z$?%l0#i`4E*y2bPt)&yPMwxMo?NKT%Zt>B1t%+Ma>#pG>M<&r*aJfY5X}L3u+J^l(ZU z^+n34-~z?D-Z7eRp#m;7fb^^#5rv9$o=qey1?@F4myM=`P z3c;C(unQTjF=5Aly2ctTaNG(;sJ33-B~Z2ejlWvUW3|S1e`_$? z9d(&n)8%pv$~xLk2s1@&w=3gLX1i~El%~VM@cUQ-wD>K-n}l1ajqm+Z+61RK*I#RXq>63=*hzzlexh}&Z zm+D!gfy(M4B{JFJIwH-MF$Nh77x-B0cCJP)g1JQQ8(DKCo3*;4v6~UCi8ReZQhsL*Ni0N1oT2tNqde8?ur3(D3bWkVowD-KSTHOaP`q=3QJjJrV+CH#^#-*Sh za-QGZ&>HD$M0&UE`0TYn`Whi8Jt}LQ^13R-Yd6#+(iU5XtF~aFuUcz+)U6+-)U0!e zTXss#)?M?Otre=-XH8bK5mvJ)a$(B)(;x(kA~idV(JAv4zr4G~HLLm1YSwJrb`Np; z2EmI6xAz&%Fm7d0ZY>|teO8X>KK_(DqAN)~qI>1@t3RR}TCKTnAoV*z`c7_mg*K}< z3?%ttzpk*kIR#~llegddy_j0kPN0-*@TVqA>ez3-$4lbOE~)DyRyuG~OUDX_0lvs? zHeJ>v50LW{e4xZ#$cgRo0kq-$%jOD~Q%>%hW$*2ec?Wvu-enS>aT+E>S8n+ID&2M$ zL5$NKcwRdUq&UMOKomV$`h#be1&f?k6z52#}flH^mIpM4O2YSIiRd`s-((G6$R(BK9Trn z_PBTC91gy`X=e@Q5InLI*RPF-tc^@NgIOLEvbAU2C>@wb>nh*J(YkW`zNa44RK*wE zg#+wzWTf7xzLkZ*^2gcZ9uhGFX4ig*z9S9crMi$1o*wQn57h^yKet+X2?KcYyD zk&VNJwDswvR60WH8yi?$`%<8hjaaCXS>@rT9RCB`ju~iNDNc`4Ty8~L*P8*Br`};-Q2-&lse5Sep_G8qL zo}he2H4T^!z&>C52tHESc!Z~SkkDgyc1HQvAHg9dXPMuIU|D8U?}uPH2Ads%$TW7Y_~+0))m%3qCi4G~=~B~bUF)<87`{RL%^syhQ#|a@a-QQ^L1} z08%EMuQev6ip@^^EV4`Tmx7O)I#^A)Mp!LXR<-O+fUb*qMkHTp( zxD<!(I<&M@$EsppoWvjc)9Ihc20fuXejvN)3DN8^%IN73&1`m zL=E*2hPrI7mCZ zeo@LV+apprCjkHq|^G|;Q zS}C)eSe1i?wBF0o8#Yk!7NvqQ$7&fVoU4V0P*s(~w6Lal!+gX#u!Hh^NSa8lm~TU} z%%-spWKt$!RVWsp%b_ljY&utlWc_+rEGAjC4Z$e59xj|Bx0sA#74pXq!I+DO&ABiZ=9I2vtgXKNH_GxA6jlw*n^ZCqX?Cl40csCg+qQY91W zXTqiRgXSzfQEa@-zCfvS^B7aUH3yco*qX;_;W~<`Be(l_8e8-J4w*$h?@dulMvWcC zESBCCyWLPxo++W*Pn*FHCEHL3I7RF`;@6j>N8?=Qt+-B{UAhb}_GPlXhaY1_>s401 z>=>*B4!vF;Hpm`VO)ar=Msz&m4GJuJmG-#kt>vp^0jHP6Ubr2lYO~7m=q0)gOd*ln zZ$>*2y#dVPIvq?TH=EuLOTDipyWz=pS@C`-Ac;1B$B(zf3gnor1bgqfy zQY>E!>^_gJQM4QE$MHw6syTF(IZ0E`VJ$HKhmZjQooo?r`_1T<2*ER%!Y>%c7JNe@ zZf>>#h?M73?1+DPQ{fCx zzZ+`KanE-oLtn0pRPuW)E5M2+!0IxYWCtwXxLjGdha-oRJ|+jj!;v2@5Xu5dt@`aG ztuu+uLD$zihs{piZS

GFLLkM)jrbcn^f*A_MPsvyMZ4KXJ8IL~A`$*VV42MuD4)kG9i+bs*6b^e}C||RgLGPUvTvILu*ffF|0S{`y4k`{)MjA zxTOb=Fw@@Vdp~3FPIKK5titeqZ4U69`}`^dbKYcuz~s=5yVf9mRl3xxPqlMX6Muo| zK|#J&Yv9bdLSO?F=B)Bsf%Q?CvxH%Q`I(KK5-Ju($AmNNZiQ3*ue^rD5SbTHTN`gH zzZy~SoexlxLh+zFPLE_Z6vTQY(p7+oeGT@cstfojZT;?@*~mE^rEMgM-h25r9KaU;Yf&;U258)ZqasnXwLKlB0E~jz{a@BW1P+kNu_p;Kb-QAk-{GuYOg8 zO(gRuG(5=L%W?O$ZS?f0eKMlOcMNJINP5HFE=Vd#4U!&re~UrVOeX{=(XQA0hMS5q znOLd*;ZOkFSLGoB_dYD{w+U=65H6fE%;!iecI6UNhHzB%payZ0VtN`=-395$Q*gb$ zW8V?nvu0AAU2Wd)wW$%yj)L;nQj%LKzkk5*6nUukLCsPfv&*-{v5NY|H+n+!r%!9v zO1Fkhk-TJaRPxJ%G}Mwvo`ZDLZen|(>YV|Zg1{}X28zIHE!V%~s~2q#6^lf-cJ(uL zt>@Ap)fT`1w!WWAh$eG=X9rn1rV8++Djv}+s3Ki5aBh!LB84+GytW!)M&XoJ%d_T--308&>$xD z^gP9m>d2J{upSSv`VG>3h{5O+li{5!Kn(xMnw$i)D0zMr&p9g`U)5D$wR>4%5Mqn@ zRaW96WWuNHuOMxK{$;PYvhP93dYHBx5yV)2d_dW^7D)U7SvaE=Im=B3#T9w6Urb0gr*RFsG@LMM(cLtl}2b4z_jLmR1`l+lA8Nu;iu<$fu&I zZ4+!FksS2`d%|E|BMe%gHywvvA$&D|6)LVJOPD!GY%6HT%S9@&z?R!lYz*@SDFw5`D+4XGWA*cq zb`(XyX-hLMg00s>-S|(IQ#7F7vZ^RU6wy{#hie+H89fmZcth(CFsp~rT$+bDxIZu0 zVoPlMeZblKkCqr7n!@np%nVP<%<%jO!&jaYhS8pH{$&Udy(~GXJUoW(luZriJE{>QAJY8)$IG60d1(G6Ke)yCa%##x=rpS}=^nI(NY zoRdM)8p_g=q|=z2Cg~#rUPDRKz3F`vjhauJT`WKz`fJHtKWFed5M#-8zQy_dG6@%B zGEkm_Klqtdu-|ON6f$e;Ix?nFyYf;QmIVoxo#e^}7)E_12Nz!&CC!s?U%C*+0M}Vm zhuhLM_>N!ofHEB6l2Z>bi~I4!uY?|KnqDI|!D$9C6Ukx7l{qmYXamYVXQ&Iiwc2B) zc1b~M*V!yMn+$O;hcS%TZ9Vo?tn@E1&30?0j5?>QR) z$%9`MkF2u@Xk5Oorn_Q2l{1>7P}&mOF6@}vKOLQ5WZnv;3@go+1|qLDwv;j}&Lv6T z&Yq`81yg9XmFPTSwRUkMc5Xv{-g>b+gMkJ_^y2W z6POu-$gTp?H#|Uv2Jj6CB~Q#{FYgmx0mv?2%U^hk*>`Lp7^_jrAYJ)A`p19Xi4G1M z1(WI|*8d6&y&(9QO)n{lF|S_;_7Pi{!hSA4v2ADt?3+?L-pu%gr~jjir@E1t%6Zlm zEIzv+Q7SQMcClE@!qXZ(Ccx2MuH^*!4T;<<#<%mLZ)*Fk!Q{{ z=;_Y6eAvv|5LjMWAhj8dXb|wSIBiKJ?=n6hTP!xzf`U)@SvRq6)FyMK`(mpHO{QO| zJ{Yx!V6&8MCli6bux)oT_$_~Z58 z3#@t4$7^z64J4>C32s?N392B$)TXO}(=5iLC(wXaXJ`*AS{=~l;Yol@cK;28M3CK% zd0>GE*T-XUAX9H-9#As%AhW2ciwiAm^(Y)q6j^%jIPfrIvmOcIFT%r+0p^|^G5Ck2z}#Jo@|hr80wfv-awmx9}#@l zQAXl}9jU8!ec=Hij)IQz_OU1gF18LN_BowlJh$eNqw?D5AM^9BY)NiB3u1eptt`^8^$f z$94yy4CcOtn93AZqgt@ts`3}KexaqJWG z5Pvg{Js^*}wsIWX84{(AW8+ujh_WeV>&CHzq(6r|W_TRihJ8Iej%5>)K8~%gwOP$L z_D!JRH`(7aEBJ&TMZwwQQpT}I;99*OZS6Rg*GLtw$vD0A~CQrJS=U1V_uWlUsOwsCq*3vk(CxraFaqMFylQNDCy8rLSu}5fx;c-kLYcP)8 zEuJtkj;)a60$i-rwLFeBr#q0A$FWOJ{8z^@9|i2=*Elu=&!;)a_{0(UNhW2Th2{~E zTW7t%3``;n@lqK<5tOzENU$smBIUDin;s$h9e|5T2WG{hurdioVVK6WK<8cOET=-& za}>LQV$)huX57b3>yG=lq6vj?e!dC~s>8I4DCGKSNpxNJfXK*ooewKvy=k#b8J*K= ze^0db*S1vq@oP}~{FK_yk!46)?eF=P)0)4l{S8xEUHeN{S9>2LNWVF9$I zXo%bYE#sHTR{H(mvcgD|n2Jt|PGH|b+VJo%GVWShxCl=mr0!{IWCYVKoH=PJ7qhg1 z&EZ47lMu7BI;BKN?hbM+KJ$OFwxb%->LXhJmuveDd``3lWtYdtK6u!)2&zn){H8;zDHHhQhZt)aPQc zkVxK$T=p^zAq^~ps5F~4|mV; z(!F>n6v68WO?bMXi%Ts=%GgZB{Gdo|pbDz2FdKLjgjxOsl%OE%a}>b2B)mlwLKJyn zblU)o@&l(LtIouDPnN;5Hk641*2VhFZ;7tmzz8R%7-bPthWK(qpW^pRCkc~b*7Zsf z!x$F7J7S^S3~E{6-3;CpV9{WRqZe~7(*VSzir5GF=P%glE6{G2JI@0Vf>z zgx}#dR_7B=M?5d;6VB1?*HoYI^_Ty;PxxsGXPaR+v&KH*f{*{1PdMwyOnp7wcl@`1 zCcL00x9k%fPH=+3L0UN{c$ecq>YSkN%NF}TFCjSPt{G`pY-rjPHRwsE{$;b{-Q zJK||i`%JpJEF0-*yC65Cr|l>bIZx{cG@A~)Qzqd+b2*k7!G!D_tdi7fq^vCAdO(X{ zDaS5^H4aN}jbBNr&mlO+D}N6p&x`BZ6qMvAJE92@g#K6~lt*mfBb2>v)d=O>^%%6^4GcIclwA^rKM9Ya6Bjee_$jzu_ zxljB*Xc-SEg|tjF)rqT%fIDZhx=rl}PSBHUZtdP*{=b&mcJQ6H@M=7ImZwJ4R*Spo zy2n~A$)z959xLJ!Iv1^BZel?BxplZUG^-EnI=Swx()@D@N2c)3im?W+2BqMvIdxZdtl&KpBl@`wClN_dBiM>HW@dUuJN7!d=DOz-E!K!2~ud z`7p{Fn@&P~($hG(9HD-DKs_;$)Vtbtt?vLen9j@p+O45h9-JJ}$|EmG#NKP=e&%|u zbcq`Dcts4Y z^X~?-wDiK;ImkB4??(*w0{_a41YM3@^t^XHX*Z6NR%C1D7V@Vps)x(-&cp3c!HFcG zCUhThCqYy|eq-;?!`+FHIuUFCJ1F8j`F;F{BDPHT8cekFMOce`tL*dKyzf!$)jdRrYRQ_M&iE zwI(yWOR?hhR3kZW(;(Oj(?`%|X-K{a>I17Lj@nGq+0PA{HUSsjwNw=j1m@v4{-RFkc%TIGhhV9^6uQr9EWv)h zwKvZG?g!M20i#7yu1h7}>yz#ZIkFVxBpgTO>QMUG0r?F@@)lkVqlqyY$k`vdLnN%q zb!4x@-v$(!XNb~)>I|_6i2CROSqRTwkik8AkX?ET+OcVWi6GlWDq&_7zX*zOcTK!@ zew83W{Hdq0~Dw)JF3qa#H+@x1wm)6VTfK+fjs!#TF&`XG>QqRjP zh|QE@1?6OG7oDFHX_cO+>iZhu;+bwBOdT!Ajc6#%eh>m$hUPuhvK{zqP{crIs;|c_lF2n-xdP zG;eZ2c_phF+-e(1B4cK zkL9{_(L{F-n8%E8Ro2A+Vu;*+Uy@0dZ30<-zD0B>Pby8cayNEkwVA~2cB%GnCRX-* zW(f=hlo7|d9j=fmAMf2A@ETP^9H_b1^GrJ813|n6p>E>yTU5|5>;A0Qd8@!lEih|a z$cZ-s$huPCHjWLwof(S>!Tai4Q$!|XrS*Wuol=i|n^^*jN9q|-Z=gVW@mDh{;FutyyHC4v zD++FJROBKy7++;AGWsoM2`pNtNw^V>I+3;#J?=49f~b)Cwi!%19?z18eXoqk5M;r{rvza*Htk@dfL`c7@-M${l!e7qG{1L{{{iw_ki2I^a&OhIZ3R!@%o$Oq0z60EHQZzax#f~Q?s^PEd>gfwRi)nx;wk&p41mP^S$i~o#S2*h zOeN(JIJ`?tztjTm1%`VKpK}X2*IdyU?rRC{xR4b|o;b_oV^lHhYDZM;r*) z=@}*+@tr|jM%0iC&9&il5-Uuh`g);`5mq4c?&jpoq`o-e8+fn^m6s;e@Jqc=_7Ca0=1O{#-bDkklTl^d-QX46qt7N$w{;Rr9) zvN;rkIFM>F-cE#6j(AqfQe8l)+@NQ!@|+biibpzD6@_8Px_6~?oQ#U!B0|mUwPN!~ z$GIr;9=wDmSq$7Th5cfUYOEc*(#NMW>3A&Ol*tjsvPyI3Tk<~UMn3%QoW>3+L0y^z2SEZq*DKVqomgPr zFG~JwWxm+B?Wx?D#J~(_T>O-@Y0aywufU?sH2>ldw=Z-MCKd|4`y}h;$gkK0$@GSr z|G6|&Fh!&_MOuseWCIY=?kB<2}F{L?gknM)jKjN=g)M|*RG!KYd{YQzhy+$@yC zlU)W~WY9;`sLdQN)B+vZGy+4nc9$0d6snaE$no-8|LvM36Ku%%#@xGfZyOq4CfAFsnRrJ>+ zy`Ju}o^wM+&5klb#z}W}4U07qNOrsJcYUzIhILz(K7}28nNHj*TL7`jA%W${cz@8X zs9gd65enz#aJ&ym(MF`OGxpiz-bEvMrY!Ll0)}PMAiYsN)%&fRut9RAzOnH4$$y5! zv(mb}TNI^LQtE1~0*ojC-62AkryOoSO5O+Jd#F;4K%HzYov1IUed0FMrw0E>eV+dV zJy>Z-@)MiIN>L==Lb9>F9=s1#Sxx~_uJ+YWw1Eynu;B@+mnz#Q;Mhx!_Ut?xu>_l5|X|x+Sbd zTF0JXwAQ{TFhA7!C2Vq{t_XOj8>un0QUCdFRpUgp8tL`%IhJuIG7|X0~Ghq1-aFq*FT;*CQd_ev}y2_&aolFa?%#sTO(Y33syxtj} zdM0yXi>$zAkTnodn)pK&z(Ziz2oJAC7FDXEV<2kA?WID;^3IjL5{?Kyf`J7^- zGciQRMJOHzcH>wvcM@?SfT1B&7Y8U7!WNSNpMF4r1RBjdM2qLjkcPbNL&bM9SU)Y^ zV8XNw7q`cxxCTb?!}o_;jCA8tad#B1w^2$w6zHR`!M0DPm3EFC^9=FV+w%(mO=PO{fQeOyjLyz14=gb_jKr!L|XaG`c0f zkg2XyuT`wh@?J%r6V6R@L-aX#0@gE(FBd5b%zv*R%8+`RAOG!vP(4kqA!Z|=1$l|&`Xdnl9y?c}xGn}9 zY(2|t#)7`<%Ef-L6_7g1N8U$2oh5ZdzM9xUzLsi zqpWCU$>=}Y6zw>6^h&vTS+w=6m*kbKA;-E`vLvamWc51fZ(hmryMcLKZU%LXsM&=#J zJFb(5!rI{$q&veGj^#t2m!S#$u1${H-xN*HX5(Uvml_mw)W2wMF6p0U=T{3#lHs7utn-|UeXJq<_K_peY`t; zC}x3iyyVDjUEKAb0#~-Vx|jyBjwb%?F!n|D;3#Anm|G9gIQ&RCS!ZA0=1topbQ6f`M_Tyc_Lz}_`O^N>DfWt z`XF3~jGSbB2Fv>am`S&nnYvO^lfLo(c@9No2`?Aq=y$f6>mEL7+zKC~LeEDQDfRNP89$s{tyEQ^Wl6F z$sO)UnV4)0fc3N^&xaBB9iZg zPs&697slw_sPyrJL_`^InVdY8Qw7%PrrY_O1gl9W61k+DURygAz{Z62d z5xT2QRH{H2lQeb17>{$^c-(#m*%8o*$_~nf^PeL@x#>imoKS>ykm)8Tl%t36RyVZE zd17X=WNeTse^wcwlGvX(E@h}~1+`@EFt-+z#S;e?8)~Pz8FfP1TPm0Fu$UW-Q%a8u zrrD_;sbq9>*2qmsPke3gh}$XQGAc{@>Bp0ZlyM|K@_&+ehcNeCYC^cnFx#TUf1rz{ z%x=;pmY2OfQk1auzZLGfT4em5&vKFRJKV+aJCR%t9Cfrz9w&EPcA6v4j7T5kYlc`X z$n`dKKfE{9gQvKOy94jT__OYtG6}Phu0Zpl?caDA4%%W|Zi6!P?=1VR+$cOCKY8T_ zpiIblA_yRt%f&iEP5^`#pP@evPti6LJyEZ6FLR|>0WVBhr`%5ptEW-bNe}NKjtfqv z0gVC{1EtI2H(pitT0l0UDv~UhY(b+7D-=*PP~clQx;{J!n5%ECIzDzHPPmz(s~gE@ zxz)GUndR25K9G{@+g&Hn=;1gY`^~1V(PdQu z+w}MmpLq8g(7db#n(3Bo9cG!_M=tNGM*XTD%g;U=4T`5-Fn#TsNh9W~d0PYZXdlRz z>U9mX3oy{~{w~dcZT-Ct@JJ-5z3nxj6yTuY0fW0MizRH!8&9ES7nI0ei3S~rzD%#) zAXwI&=b(`9RI1T*Kluicd=Kgo>FuVY!$e249d!Ix<*mZ3WYZA23-EG5>1%SUw_QQ` z@f{1w+7y%>+i^7-yFsdf`VI|CmTDWYghcW}!3=3^^KHDwFlWRo{%`$_#`xK~HPzTQ zVYyn;*iJ-JzY4nzA~l(I1>m(KnfmO<7)2{}Rp7}uzW~GLG#Ut=}{E*IlaSGm)8fVMY|JX?(T+g0j-uXS&*9Jnam64w1$b) z)}(T>mb)8E2JmhmLJtCqZ%+En2snOJv}E+ktdZSVXCJJHL?O=VCzA_c`fN<}+SLC$ zGQgEO8RX{UO1~hEi11mSi4a~cLxO*BZ{!uZ)g8J%@qxSqhV*Lgjr?_k6#4smBR9S% zyIN3=b&Q2)^8^zkvUWhH+wfN08(9hwTXk<_JY-L~H?pEO*eF~5y^)o8$V``$stpXD ziR8%`UG8+n$Gp-BVQvH0~Uu67|2f8OIPn_0l{-3)FnmzOeCo>Ne6 zUwh+f zkS6^%hf1iZlC+iRLswC1qM{OCk7LsD=s+GS3v%Znw}m?GD|Vl1m8T};vO-23bRa$( zW`~b(Oc2x`yT)Hu$b;nZaaNllhl|j$LaB|~L+xG6Vw9-x4LMDnk;el|!ZP``Jw$G& zxkkl}&8~8SH1r`rH6iVf`wIzwEO7$E$zcosLq1Li*(c&f4a5ryO~8IHNO$X3^CbS| z&)RDIia$-Uu`@@((t7fOTEUMCs?a=bcOEdLF5WQM2{`&~`vLAk0rdj(Q+tJa6A28Y zaANVR%w{%iqRlWFx}I^rLFD;BSJvaB2C z+Nsp1@ZgpmXjpcdXiS9CPcbrW8IEN!GzOzO8AcAI0%$(?VcAjgT|h4sEWs2it8qru4S%##*Z}dJXZ0{Mo{>R4k^Jct*YLZUip!Ez zF_SSqO(rKU=987s5#cbBu}o&NmdBNj**E9q&mT67)mz5wR~h7-B~b`1Tq} zaou60i^nkOc-%}LJSZ%>JBGRW6Xo~u%o;SY0Ece9ulS5{Z@hRF;kxo59P4)jf9LVS zA-`B?th$cBNpCyS%bz0fU%r;A4VnVHinur<0bZ}Pv2$)8GG-6FJ4|~zX9D^j*8@tM z^b$fZy%FwzN=zb{7m(ntFQ?gf?teuB+V};p@C+jjvpi_d!6}qdTu1pSVSF2rboD_r4uR@Dgo1+;6KiC4HK>?wjCU*>bL|RE6E7$4Af?AnG#dGh{ zO03M5O8{U30VZ54HvmExmsD0AYUh6fLA{^ZRXUr}mXasF7ODFYnhYubtP@4~X{yXK zDXy3P=M7OP_Rd_O>l79HSS`Q?Ji%Zez~rMuW;_`+#!$ zCk>?pG#mF7N6Im=*c$hYYyAF`pI=}7B|4MtR*gBzcB}MT-k`lpsDPV-_D2C67$@Nd zBfNG9&&~3-5yCd(1gS5shI4S|Ke5D>vD!^CcF2YbG%u0-^++d$n-M&MqPD~4=Nxms zfE0F&)D6;OLU?YZzDw}ze5@NbPYU666N`X&mkVBsSQFO^iFLLY%MA@VAu?`!=mj#3 z5^vB7IzRjs=EIJ^)%Ix%W1dFRzeKaVmu6o|*5OsUSs1Vu5hcKoH z;9%AeOUfCnV33ObZMB02fWM0V+P1IO<%^Z|=`h-21) z^t{@q#pyw{Xnw4N>C7+~xq}rt*qp&FJQv#mD?1bQlZ?0UF}BfqmT(URsnU)_^%FOc zawO_!irmtXs4bOq^u)^?S4%mfl6oZSS;?gMYjEO4HXf|b2>*x;f-*LA+>xkIr81m& znfZ!8@p6B@ba^~0B%tVtmqSHa83?gyuZQA;6E9y-uhNX7YDh#A;!BUNVS)ou=c4VB zoof7v7u^{N+bQHJaOU@q&NXyz+3;FCCGZ=&YbeT%o*+9b5sUsMjFi!$Z}o?NtS3+v zZ?Rm&qM;>!5C^~UMRsXZ8Yh!;h0soOT0AANsAI72Jef@WDSYQuX6Nje(zBHIQS^O+r@#P(LI)%d5lk*qaoP;JoF#ze@X;WOyl)n z5Nlz_xLz>B`=4v2?0;7KI%M84mYp96j5l&K?uljIF&-b5OGlveR+vbn)cwzt_81jV zif)TY>R;St>>1_b+tOQ+4SB^J@-nI-eU}m5#)eyG5@`46_TctF(aw!5yd)yYV0&;I zNv4^!I1mi0iR3As{%W?_jsa3=V=qrg(wnd!?T%!y&32GvX584b9k78w@RksnS{xS6 z>D`KLHmO^50tO#s9WL6`;V0bqvD1_tu-5H94cQ^{?vu2oG*5w_O~?sEn+a^nw=gh> zCbDuK!lFz^tvVY|York#zDUMt`MA^}I^Nyck#Ps-Vj-#j3+?A?hi@x;Wr` zF*HIEU{c&pDI$sYk3bQRvcpD<#fbvgNCCvi7XTLwBC^%DcLWGJ{3e|)6;C(_vx$^j)5GD~n2Q+?@338eWA}}by337!95_uhJuOZ}2JP1;xf;a}ZlYxI7>Llc5 zKX;F5M&-f^_%Jmw1j{*5ogr$}d+!t0m3!}{-8j2VBzIJKnM4p9(D*GT?=;5AD+Lyk z_f?7E#wtlyRXOfV%1b=R`^tq(ItE|A!=nTFau3@QOQYIDZYLNMI|02@2rwL z2E9~r#ZM%^yMV|eNHlB#pWI0cm}qjnw}2MFr0uLuHMvevxr(E5jqE{o-pet)o2yCD7j-6Qlk~ZHnO$%OaV2z*d*UVC1(0McYLt9UPs>UtdSMuoj=@Luv<1b-_bMefkh~X+_C@$gxr4Vm zh%7g;#-WsbG$^u{`I5=D7G!Jcp8Z@UJArO=7L?O-U~}48+Bs9SpBmBKC`#ojN!mWw zOr!TKL+SeVNnky1@1XsZ<=OLZI*pZUHi~bZ&m<|L>dWS{t__wu9l7H^9=Uvg_OfS;fWs9k60ji|l~CV&bl?;xcd+h}%uX)m`YlhEp&XS=(Oa zbV0Slg>ujc6W?#oJCHBF3-V2Czqm-az+H&vhGZ+>rg1ZAdtRTJ9HZ$!D;byzy5*Xq<=Suv?Gy!eks=h4w3qrSQlu$t37#Oi&FtWb~({Uy$2($P-7718bKn4rP= z8glcSv;!vfMHsKMB82e4Z-`(9I-9s1yAP?Ws~D*4iHA12c_^iE45pKTeQGw59D&@% z1EGWTs$a9UtNIAC3{`!wR-N!j)fYhPs0}l~djs-Dh}P=8;e9f7V7)8%lX~mk*Y9sg zrETxaS>p`|mjj4i?1%IRww1cd$7QJJp=738UsKN!Y$f+5$!TD?0`R6YA(H4l-jn=s z{uP6JQ~%{z9m5NC+T3SutaT0~`DyIq`zn1UiuhTcF3JDR$K z17Eu@1gbWA@$-!J7YmlHGN+qgg)iMy*IvOKDy4ll+-cp!iNLKJa(Vr7)^5Idinm{< zvgU($U3`>LJsDwkXr?ZttSh#mvZ_p3`<_G+bwc7Ao%fR56q17|fS&_6d}%g(DFg@L zH~_?v#`3?EZsNpRBYvD-30<72ZwQ_ryQ4M%H0k8u)BdP?#HU zuTu&QMxn1mNgZ@g1RiWr7JWz~)Qla5jnFWR4SC0qnt_ zzAB8h2jAy1Bi*=Mpwcv7x-BuR029fPM5cV&zi$I2r+4kVIR5}7v{DoP!FhyTx$PxO zNm~-`W{;~79fWd|PwQI49T)gIk#=05@IWjvSOjVb?!FB!k=eLhAZ56y zf~Ny?v9X|57R>Ri2c_QlMvH8qvmow^aK^1BbOwIoP~OHk+1Ip-8b^cR9}c*)QZzy$ zxwjN@mNBds>+f%7y3pSuhW=z1M4B&&*^i zji0(%R!s*eEbc;FF*)49&G6rgaI)ujx z5gyAN-I1KM2+jsiw-mvt6}Mp#oTX0*R&YMNAXAL)axEY+y6VT!q8VazZBG`O=`p&C z20~Y%7~NhmwZ-%p-R6>0mMKPe-EonK8vF_8OAC$$X$zojd;@s!pVE|6F_Q=?xqM3bOv%Pqp?))L}O_w zMrW$^F}i*r<(jDjsHC-U@9@q-4jOKyL%%oF!ks*p^pnA<-m`PtHTIremWI4%pNG9` zn>Hn*_niFSsP|lFujO)ZD)5^l0umR1M96P;o$84nlR`ZH;-l(Y?tFm#m2UD9M55d~ zEd-nnfcG1{dqn*vHHLi%D%N_|-}#cE*R|kFRGbC1br35)&t#iDGw>ysVN#s#OHPxi zvig!+c5J0DnJ2#FnYEoSk)-;PF`ZZIOF~;1WkpNM;Izx|RtA?mh)BMd2HI@4bPF)8$RNb_+46d_gQjlD>=4O_PVhbSF{M% ze{eKY(EFD)v$HKu?mqwoFeRIdd9fBKTz!F=Gqk{MzCgFt7dY|dw&ZZOFR*OVYDL=p zp*AcaFGHwEGgn`rcsDJOg#u0)Z|@4PW4jR9bTXj+U-fLeI@2YT40;i7r5aCt^H76p!v4d)_&qWTA4k4fmy3BFa-B2r3KrffUD!i ztF7ZDt0!1erFDD?HmG$xX!Ql!PS-jX`vP57U*McuRpeuQfsb!ptx`VPN(*d_0x}QA zr@vl!Y*TFLHHg7~w%t|^`al4k7eHeH^yvV4WdOZ9fSwgVZwR1A1<(-zbngIqN&xK^ zKo1L`>jcnU1L%*B`dV}ipq~cNwgEH|K$mXoYy4CIeIL-su4dHL@I3!GVj+$(VZn-=#;9>cuUgK7FyG)`$Ai zxSnB8@@7a8(=nrk!ba}zJ;|wjV^x`SY>COEc&u9F`H#pmSakR4#1<6N@f)pWo)`V; zmQbh6Rna&0sN-8goiI#MzYR71mt$8~mjhcOb@Cfpmnk5nby>e9)HgrXx{MT5HpAC9 zw@~fR5iS!A_4lYRwuE{aj^+qz$TLiN*!QWq-F!bO3!qO1(8~kp>_ygbA9Ya<^r;hG(GQitFTQj+<>s`@s#@8@&6Mst#S!9y!_ z+nY;6S34wd*3?I%39S3sIbvF%iSzSY!W?Bz%2O2@9SL%?C07qo*!iPiRb@AKZw0ot zXN>{5Ay11Cs2$^y1*Mi&26u9P)&d8q=iE4!_%>m?Z8 zjrn*F?P&>1Rx)Wjn%|qpcwBIY?PL;#ZKRukZz|FuwC8 zA2?&h`NlU3@Vndg3`_AE;-yyc&k#02#a+C5egTt?cyqN>yi_Yb z7>=U!7-RdKMXi6Vq;r>gaBbRe0#Q2ij4g+!r|E677-L2_To4eY;S zo}RbKuTWZhJZ(KgZew+K+T&UOPyyF{pAQPW_M1f;x7t z3>+4P551`|n93;m;hm&|T6D%yO7fQ{c&?0_!uAq|W}GU6PONmkF_`lh zwZtS&C5X5eo45rkuE0=L-qutSXSSi+BW;CjwJ)_pRLFD2Axt_RW5|OKnTWJ`np;o0 zm0A~if=<@Z6jEHD+vnU#At7zBnLs=S(=$w8`Ivz_N zmFn|6orw03_V|BnY0mcl2!d_o>*}sVyIPKTO}kSp9R~Sb#?w@ zULKQ9BAZG33LG8L|?ZyBs(hn!)N+xY6ong|i z;1LqNVjpR^&MLi7wz2NDy(q48W}Q?Z$75%eUh(nXLtl~4H(dV9Hk4Lr<1{|Tp%kZ3 z22~mP?VvgbZ7iCEr;~v5Z7 zKd$TQ>J06^P?0fKWadMxtFyN2l!8e5j4Q7#Iy5M(4_b;$*Tkvhx8=L;kZIB)PNXN&3 z93gQ8FsQC=4!YS1CD;_S;{jC1j*!TOcv!W=MJ#7i{kuRN(N%or%hGSkKH7i2?V43v zaMq<+aY^bv+P=+A7OsiQ_i<*SBV{G4(Zv3?T26Sk^)SS)GDLTv^1XbHv`7yWN}@#? zd^}tt9r84u`i-8zE^v>}XN#cYsjkmn)E9&>T4k&(TWhlX47V06Fu0xn2x=8x1rvZsV&n80%=1^F$lEWnsr~yTcs3c5>M-g=+ds0B3`abxJ!R z5-Fzs$a>NHq6&0-d1|s;$Ei64AuKBjL@Y)t^@N8u0NMiih>!f=d;?rVgjxoFBDME7 z%$qgDi8hfg3bi1_8A$ne_SJxU*{!p$3?BPT7=26jHGS=W$G&8jQq3)q{HONS&(ZiF z?Q2`m2~;am{r}s(oTajl!}RF3IVajmw|4QB2=sYtz(gLNUGu*Y3HQouna=Mrua^(! zm9-`Ha_OD)51Ley=V!&#ui%qB&U2*RVfQ@-9iFd}qp#3~y$vSTtf^(9?=mF9h}uch ztKKT44_PnNR9TeP?@izev-=$iqBO+c#DEib}QcDWBe2wcSCwN*_w@$68 z+o69`H+cqM=9zr#K4aZ%<{WW;=#*|uRuvsCWI}I6EPENNuX41(%MF-GB$7v85^4u& zsnGD8zp_bReg@ta;xq7<@#~U{8``M8OGY60uSBm75 zE?zUq&k$$$Pb8N|fy0u!7b-&U^7}T3RQWSb#4^qMC(Oa()D$y2z_RI*xuZ-cuh9b2 zI1|#=eKjcSymva)l$;DR8J4l{TkN)~iQl*AD6RdHr|(viiy-zQ$-0kU$iW;<=4qJp zV8$)Rg5O;o%CkSqJeQO1Ir39-&C}}p7wTE0*8hS|_d-MzEYJh+lA4#>tsnm%)#=B7 zwoa$N|GiG@e(^e;FF!Nuw5EBdJZTaylb^?9gqF0E!@lOelMZZBRV7(g(%D8OWS7Uk6YqyW4S<>(2<*afgEQn z=>P&|j*zQoJKcZysFU4TRQbl$74--Csuy-oldV%ATYgo1hzXWl5*2K|3ATY3jQ0tv z#OiWPs#yLvl5BUYMCJy41Ag`KiAL{c2KgENf~RF2ujwK$&tpqaFA%=8lf=iAM8ho_ zWf}z?;4EmW8m8c@L3$}o_|5rsOVO3$1yWrdLAn=6A!f&bnTu;t=u4EN(7Rkv$Ig{@ z_t&9TX9|lSYuOa`NmKV-jV+kM6<G%s6y|r#YzlqS zWLt$Va+{fkOyN^}m_BTy&J;R$!2+ePZBkh~uACS$h1<*&N*F$mn8Juo5mR_-$G{Zc z6A}nGwqOdAAaY;|HNRvuh2asT+kg}@g~PxsVhZOdM=^zAf|_CqG9vVWd&OwL=a2Bo zWc^%ny_6U;Sk72>#0RkvW8D#MiqM({X&PB0U>q4Z&u0EP-F{!yI32Cv&<KJ z7`5QhsAUr7HezRkn7f8W>c;|LftwS5hDM|s!G}JBAyO1#H2#XAh;fZSf~_B1Lp>E- zLRzYU)@#0JvjG-&{o-uwdCK*Ec}bdb5Y|4d^;u`k7?wg;vn~8&CMZQla7Nd^7a-W zjwQ$+B#%?+n8fh{K;w%{x)1gj9+d)%O1F#_T1oOM-5mX2Zd*#{c&w+=5kDc* zv{i9*VAT~HuCNUx8bQHkDAvn@CGx$ao5mAO+y`!?GMU6?pNRX7iQ7ZP6nngq4FR%S92>!*Y6Rm5)+A)PB*zat6WUt@nezeXOpX9KdMn+ zQMn#zU?Y>T%5|>FMO1KpcpHl8cqGcC?xl*4_pdd#TIHe%hA$uAOFvgS-vqpng)5oF z!3q&@t*3Mzw!9Ao6j)Ti_9`GbsDN`frbI-AfNQG=j>irvpyJ~_gIsy9WFhd{k7$;C zx(+XP1xvgXbFy&8gIOlq+Y{KROvXyx?lyC=_wPYy{Yb zh~EO@@Wsd|9&S>Mh)A*Aq$p4+n2eP+h!oG56mRi7Nu|J|QY`t*OYtkmZI%G@vJ+OIFKP+=Ni|Ol&ip^TrUCF_COZ?D{PNW-7K zUMOdWairB`Xt;qjW)h==$ndjKKUZZCSX727@v3PG;fnn}mwZt^Hq zeC*$AZl1~|T?Ipba8Lho_;U!@Te4#@!K!WlwDb**b%)tm7|8{vZB+a-iCkKUKk*HT zjQ&brRVlEj_%lDD_++5sU$X(_B`S!%v=x&iisYxI?CFZ1NZzZt6d$=0H93TA=-n6j zvF9XNbK?}Llk zUJKk3$iYzh*-tp?f2#P& zl@=qfcHf|>Hv9o=Za8HleuWZe5>8o&=UeT6=dqVcfklaLAjD&pLfMvT^*O9PQBjfg zrG5dAJ;;NSNHu@lg1HnL$t9X}wOt#?ja$f;NUXG)thM>V#`yJdG{*T90N=wap@Nvy zXL@`c_SHJnrPbkRT5R~i!Y*0|qC%{JDwgAM33;eQ$lVROjYSeUgEJ0E>5c3M`I0T( zCNmMURYWG?I05x8Y|j9bWPU*4)Gcv(kSEVC)mF|u8C=O8}T^Hr=cw z@u(yZKGi73d7|d_R=LvL;6;VBykktjJ}MxSnCXgu&e6@p*%~yfz@h>!{6HNYNifiH z>$+4NQ6a*+I*oNaRur>YDG_pKXzp;6;5p_-j?B8z>Hw8sNSXx4i3B`rJ<+I)P%2F7 z`7l4j{b@JWqd1L97g7-yGXi@>3BRt9{!6OBQ;mWN+i$KBy&@8;jacBeuX1zb2P?Na&?x6BS=*z_Q1+6=Cd39R1e0)=BE-W+{*GN(VSz=3 zcyb{dSt#2Wb5SR@Dp4WH6FSXyJl-D7dMiH0f6Z+`@vvZ>RIpW~itl-_Q1sPG6YQ^E z6s$Q-u#HtPp=^S^yAA~-Dg@g|Svwwkt6++cGfx{4xtlHBez}(R&!ksVY~OF$x!mQ4JC!(-aGyYqcYH?IGu@Q9z@o(W5#n~-SsQaj zM@mdoRBvysfa7r@dFag~`e9dPLuEU zcck)iPsClocvh(}X*ZxYv0Cn@RPxfO6p{+N)42>E@vCI?|2k)O#IGcAe=Vzz=2Bu* z;AF`S`u`7ax_FMp>O*vck6cyue zb;P*#S-|!uQEUJ9f|p+m*&a35zym_4yBTa4P@&lz zOYQ`e#`hR67LQbD;0;10&otPsTC%q#mt#)q6p?4Jj{$2O@2QP2@Z1pU7=txjK{4&xmDS46l-jfRT+J6ouT#!q0TqhValP} zl4}E{@hM-j!NAKf=XDBLZm>>Tvfh$!0HyItUoy)E?Po(Jvkg{XM13?{$y=o4LB3?J zVO>QphpVDm$;VuQUHf=x8o2P1>G8;2O|wh-QMgG~ost?VL6l=s~1FKb@fe#F!y6M4S zpgMVb8{S4CyuJqOEhMKolKE9KI4#9|*2?OD+F8Zbp%?dGgZ%%CwKorpqG-a#gBK`j zA_^jcL{tPti8qK!d=(7}5)}kbB6y%8MCI~8A`msiKonQeS0$dHC8$AH-Hip6gkXS^;C6F&+LSKf4}eh!(dleJ@r&gPft%zcdy<1InR^H{*-Bs0MFNF zJb^urc`VCL!!?qPqW5@8vQf17Ue2*R9D93}`Dxn2W|E8^Rh#G!egFOzA3gaynfZ+i z^NEi>U=6P>=(CniGwV@6pA>l&23dTA(+{x9rM8*|pe*L~`tnO%^gCg6+61W`^d3FQ zX&##Y|2*3EO*&-$pG@c%^`pg=SU*nn7+EbiiiaBXBV?m1Y4=9q@U^5@-M!!&{q6J) z^qbF{I&#$PPF<{dk&dO)lLA34ZvlhQR4479{)Xa8_yL+7WX=mAl{lXX2(m?lgetP^ zLLdoe0=CR?)?txJ_?duz^|xB2;hulT7W_+t2`5crJs@$ClTm9m8y|MZ*?v2+is)BW zXdzo!KW{AfVlNyA=$Nc3n@H8sVjWpce}+!S<2e18gMye-Jk0LNFne1}IRo;mbuuy> z-C2&9;xFK-Zg)nz8H>qV-RzPhj~FV z%@mePDTR?3pC??N6K7CB4tBm&u0_x5y;&$Y5ftJn*7q;8QF(PTw_ctly=9 z#EzO{33pD0d2u-AenHGi5A)|9Ns>@I*(AZov-FYx&+NID=ab1WUm(ny&irU{n`Nno z&?_0jb>Xa91X*Rxv#fSqo+Q!(!ZDY23q)GtVNOei`R-Gp*}FH0*?hj`d37?(n+P*( zjj?lw=X!Aa88~zIH(Fp_#V<1{kp>>&^%T_Eo`06te+=v7yGWfrwAODKYlED#(AG^v zoo`3LN*eN+wX9}csOe`7LTS_@^hiV~;z6U^Vw!(s)ms@dwtEfqzwMq3y%O<@0#|pQ zhxti&lOEIb1DId((b(wIC4YUsk^JpB!^@xiEQXJE-Xcr;wq!2uu`Ub;JeW@l(w@H9 zVm3*J*(x0K`~L(|5nEz0qghE(@d+Qh?WE%FZ>6uitiSY?D}#4?)yEe6=49Z5Ex0cU z9fE`_ms-q2l3_Lv$E>^7IXfkNs_Q+BK2!O^BB}^r6tQO!pLL@V+ldh=!^6} zK~{O6Sj^*+VV)X}`Fmy{(ovsU%$1iUiS%1KzdA`Dl=Yc~%S#4V$j4!$_4vZRJVbk{&;vzJ@U;mI)b!Z9<0 znCUAl=CR2zJA`9yz97JJ%1Vp5{Ng0BR~4GrCA|-QEjRqN*Vi*RN?T>YbCZETXu*B$ zp-YhP4iB?sGRzahF@HTjkc5)emglmIk|g1a2_^|Xo|A)^@h>dquw6<~!DIVs8WSEg~%sxTPWos$cjtEJqED=MX@8*wsvy5atlCt}0Sg|ZoQ6@P0ZuF6zDrY`e4TlXQ= z(P{JUgRS{mTl*5#I$N>4tk;+4TF-WXXIr24l<%#lGm~qlueaID>zK3kgU>yI(jIvU` zZagPO{}JG$E9DM4dky_)81YC6+oR*-cH3ObjlS?rQDPSdh|za2jL(M<10m*Z%ot1v z%t|+A^uLKG1a*&2h2m|bxoi?v3Qs_-soI~Y+dVqX|H3>XcFdf|5cO}&*fq!9n9+J^ z=*En%eM&n&rU^RF*^KRW@>O;PeR?B2atc?nYG7l=-uCEp8Cic*z#bi6y8r&brrX~X zR^t@>#HO&D;s|L9jN@+#vu666!h_4DDV$8d;u_Wzut&$o?Rt-!(-b-fh?%A^&=T{S z!p+J`n?mm!oTl)ZHih*x$sK44pMULZ3Wsd-n!;%eQGZjYecx>gM=S|#3ZMCuwk-BF zg_1u5O`-gH+Z2|tYM?3XeUHv}$Md5pxJT!RcTDeEMPKfh=|}j%n|Av5=)45u;2xb5 zLXFq#q$z5W}v^)B8P7VP6uZRk;T_vp~s;}p!o=JdU<;DaOhZzK)h{)!sWKeR_D1^*Q7 z;O`fO5%~voS%vv*rB^R)8rMUc9an7mmuk2pR;7ygF*D?<%PMSV$;N#(^hl*WIsmJP zpL#7v7(r2%Nk{kjQJxR)VF67fgEi@NRD4oF=lSU@&QK&B5Rg3nGo#2VYvS`sEsDm+ z#(pS@KK)ua*LqByJvtI0?J3|57Wgk zpNsOXJK9hqT-A^po>|oGL>Qlm2s6D1-}nhJWGm>eTTlcj1>8s?6n%Ei9y%Im*asS+tp;Po!<9Cv+n?vF?lREgK@-%$i86<1$_ zB8X6NvecFcFKW!giJP~Q|4nop`Q=n$7w=P^ef_j{Knf&c+<;a=j(QpOmaypB_CnWbkeDE`=$@0Mo`p+-D8#8 zO~Ngfz->5fyw;VH6KH@yXwV^N50YC4`~?E1&W$Px&r=ptd@R;0i>rkNibYuM9sN#O zRPBchRVJ|5!fUf+z2<(x0y^Yu`)05(;LRAEyH2Vac#J#wqnlvN;)vzF*)D>jt{~s6 zEUpq3)d?)_AQsWTRqG);9GCzlr#DTH|U}>3WRl_q>iO2{cVthOcANitB=buY$hVbHB$F~V)2=$*tFrBN5 zidd`cR4~F~y{@#4m1=u&EqQ7w^ikBc;a!ye%ljaOnQ-IwNb}wVeK-*MBi4gHR0(u0 zossDHsJaS8(XWU}AI?#bC`9Dbf8y_bNS<$EU4>hFhJ-)tKBqQB9m-;rrOj3d?u4L#4in>DG5WHFl z<|Pokb2{IIc7=L>?@}FF?puX^kAP2Q1YL!Gw?_Y03ZgGg06&DmX-y{hq4|FHJ)(yy zMSn2IM-Kuh(D}gdfwl77I)0C%7Nn`TUWz8#6jC;uU`pUxE}z?vZ)lCiSg!c*WFtW+ z>Pl}D!|4)3DS+JO)*UT20uOQp8%hjNC0bcR%lNnhKJrDM&XS;7vk4~Vu(X?Cp4^6n zu2+f&2}KmCBPD6nbYYX~z@BCP8~TkmkY>OO#aq@Qb5JFUum6go@v*cQilSc;e@tqt zU3O;X;ZNCYQm5<&!_v1H+;n+c{{_3+1a^&t9pHuC((m9Os>H6L_%}Y<2|LlRh}ZlA zWh_wgy1~Jcwbr_J=*uhM97SCsZo0v1g%=hx`9_wxuOn-+@(GReRN)0x;x$w}8z05+ zVOMcqDYfa$K*n9ZZt(V2Xn9?^ny}6gf+*@TZqw1t+XL;9wc!^-y#=K zCD0Wz5;i`z^hB-bSHw%Dwm;*N@@&*bP}H-x&80hA7-X}iFGW3>0hW-BQIxv`1w~pt zOVX$rLe}m^94zyrGz1EFF*#IMmgjXbGs@7#WU`5@&h|FJL>6#ew@J)>dk=>0Gl|N1 z(Q(@APNl_$aJCTXQr1y z6VL4Z=i^GybO@c$AZW7YJg#Ve?F7%5A1#g1yo1SCtpTSPqcjz+K@&4^muFvM?Q^yA3deqo%I*~V94(&g+2>gMVy!&Xv7f54lf*txi<>rB{^{1fR4Z3d zrHQ{>WgELA{t_+D@a(H+oA_f|InlAl`vWEHEw-10&9VlSYH*`tuwG^Ndj=0%gKDkp z;24-ube3n((;C#O!7dt!nvm*LcBE&}(i)`c6X{dOptZ_=$wCfNv^b4Nw-VCYQj>#B zt(@T4_fpv#VxO+X+Z~k*m0j&&K5j8{wDN4nV5rKj63lEZ9`4y^S^HwG{ENo3CJ9qj z)h03xR*nqMNxI<< zbYx@H>j?y90yEE;4K(UBvi_>Kr<={rK9*fEU$^%>ZFwZD_Egurqlu7(&W}5)=#i(f zs%~bw%c(47;OiU#`sVvR;D;HQe%pp79_?@2IOoXInrHe6XZyHjl`~iE+iykw}V~HAdrL=&@Ile zYn#m%OI3e~FS7psw$rT^uXtwi-uJ^a`~8r$?eaMcX+LclSTeA~d#=xDV?IiowGXSx zPW_p_=4H?yCOqek&?N&Sf|#A4kFi4EWS9dirhMvt>}MHo6&~!)>m)4ddE9fc?bsx= z>js6=Eh7E_;c!6)HBKh|8FwzH*OD2>}@RqiESRYgfC5oc~v-OlOSfUhxupgBuV)9wosnY zqXIl@J;XH8#>4lOYTWXVosqD(+z(m<;oXaLg~82O`bfXnB5cOp@%y zZVk;|UJ!Ghhk0`{%)x~D$ztDWw!xJ+X`3v?CI-%|Vwtkp*8SB=>6^Oj-)-Hurq1?( zfe!8GTS7y7{m4MNsyxg`lVLt-G3Ab%Q!O1@Swpu&doQ@tV9FLt`#9smgcPf_bq!5j zeIYfm?oB6-et&hdKuA-zTFm!aCTRiDfuU)7IEb0{r^W1_4D-%#%#(tcQ?^;m#>p_7 zSxiZN8UHvOb#~95UQcJ&{4WbW^XMc=m_Hyi3HLV*BsT4Di+No#%v-}TPY7bxdYA_! z!#pe;bJY<6o|*qxp6|9u68plN!#cZ?ofaWC8N!2vfWeDxw`i7Kf~-dEvY0KCVV)R{ z`Rn1qNOxPzWk)56^oyKOo|A)^qxM+LVaYJZSWIb_udS6HVfwyqk1(DGpos&vqk^7e z|60#Go116^_*4G*H)`+GXfr1ri#I3)?$aiL5LGgNYJP_g~sPHQW`-< z(v$O2AvvI*7G&|~Q#zpt<8&eS+*LgC#i>O^@x>SD+ybX|QahR+wY6hRt@MD^WrsDe z4)>R!>D@qZzj{-G&Xmuhyl&Fgo%@|+`htCs>4bHYJybc9v-a-Xopl$d&Z&kBFApBj zR_vo$N>$a}3N~Cg?^NP5|1^-ILwe{K)>=9ic-)e7oNb)=8wY$@O=q6vg>vqZ=K7hw zI`Dkzc2j6;-2bq^MXd5Le`%HkbL)+YX$Vc($L99UWXA6sWB+YDjP|@zZoD8f_O+OO zl40gpOu3->y62`K#l1a#4Q>^39*Tc7O%n5-8$$EAFf~AXhe!LRWSDP;W8M+OtlH0} z;<99zeZn!D1~D@au$X@xktFs8;g}yC8i>85p~ZY98Rk3JhvxI{Am)@t7W0Z^nAciN zX$E^x#q6F8 zvv)Y=5kbsYV~e@HNs`!8!ZBk92V!q`h{b$48Rpy9hURl{5Hsyii`g?7WR*;e?i)Z#| z?hJD@Z9n?o*5`l8>+>%fY1Zd+QP$_Dj{aZQ=ci$PzOJ?B^UnWYt)*Ntng%G|m%*PO z@h_Y#O2H=&gnLfRw|4T6jyx&rTRZt=Q@#up@sT{oUKFx+aw1Qi`qobN_>fiY+R35{ z6uat&mYMKjznu-`T90feOE#1B3th6;l!I)41?nbbQPgFS&nVeXX}X&@Wdp+f+Pxtk zWPvRoZl^8)JE&5a)k{${J{kyF(Wi6bxz;1wX2%vAN&ZqqCJ^J7LH&0(2H?c4db0;kEY)aDfg{>n79;_-zdCaTz^To@^hSt>1qa z38im@(io+bCX`UrGj_jKN)eiLr=;a3PPpp#lnS~Lo;zso4hhTZhdd2+mWOfljQI}t~Qij(G!%EilG0Yu{ zl*Rx7&{OAuC{!u7p^H&8K8oSPt`xmeYOBe-5DUxYrfn<4>XcX)A%>!^kvvC<#juzq zQky_*%_AVj$huxQG8assO2ocigrf2B_em&YwPja= z33}UU53|qwj$BI~#se~fqO4_%Uahnb6x!*m>C0!j(1rua#kx5l22}!WEyRqEOrb6M z^qbQjZD#PtN3hK#H*R`wqR%A6GlRX;5##ia8^wmvh@wB&5=OK=V?7#Kg(TL)4MA43tK>@U= zc!w}B@Dl)^zf!$jFWyj;lgn%qtNt29VhP^BC1$j_Ii@X(yHv>Nt@cDJ>ZH#zBk@_x@MnBXGx}SJsnLm?g zyI4+JO?71-K_5L#`DCnhOVv;JZ3G-eIixmfTFbPr5G9r{_%2iQA+%~n*4FaSyGR#Q zDV~K3Q8Yf*oq(d~SH!1EEl87cu@p_TvqhQLR=Bt7HS`&SJ4U5_7qlWMQpZTr=x3Uf z+Al$yW&WHr6xxiev_GB=Vo)U}2M816<3x`M-+gf%vy!<>thW&B1ytJKaXh@Es3+Y1 zsKojTvCITwLmrgA&Lh@Ah(VQH-z~0+-Q3o#UB1!Q!W z5{rHT&N&IhzIp(}Wa$SU&67)!F{l!;FJ)+Kd~81swW3eo?WHz1Kuz zL${BtWV}edcM$I}e*@+{(B!>Ty*Cu^G4^t~c)_}vq2is?XuYqyH!f zTPTX^XpVZHxeBpY`@Jt41@D#Wy3a#Ex7?@3tLsfPz+l#}l z)*x3af1?4ZAv{K92YLpFT7x{T{LnF&q_V1X>*4#yO-LnLS?Cy;cZX?gAp6ibnS)40 z8NO)kOV$2z$G%);w|fo;TZ2liY~dKJSJ~O(Fs8-7d9*7j>0s?^wenl4G%2Z5*`r0MP%Twx6=)nGS`QccwBRo2`yXk`sj z^y%`MW00z{Ut39YQ2XhQO0CMCc4TG%P|9W!$p`r+b?J&Z&@t$!vN7T(O^cbNqV~hB zeWq3(=h*jBSy!>o&|->bf0ng354;~~SZoqwo_cjH5ofmA$9Uu{{I`!+{_>1^!!wo# z)yHCK9#oHdmJ6(93E%sJ9ZNi63SlWL?t6J=eY&CYVn@M!2QW_UC-_sn`)vuZZ` z_dOe=^y#g{41M|rs?_kBv6*k3W#C(E;_0#v(&?*N{H3%aCHoqB+T){X;$q9UZ=h$5 zF0foT+b*!oWc?mRIcZ|okIG~VJ&aEJEarulAJO+*U1!;|U_*Dg6lG!SD~DeiSYLU} ztvtBE`pVAZC^++J)wg1Zr-ChgyTYCR0hj(M>_f!X)K!`jjSK^``pN%YwdJ4qO74AE z&BMq5?+<%+98Pc)r{ARJkAO+3XYy&d$(*1`wP*4ynbgPCd_Ycb&cj8J8e}{aWpmr8 z#SfvbiJv$Ot&OLuXKWSH-tADVz+LCkh7Yy$cu!^|N}yB09ru3hG{j|zHnui`cT5)by@ z?FgS*SVg>Sm!<+C@vcv9d1#Pp9JRTkRvRq`Ohx={S&R*g5q=EzYcM7|821^BPZVPi zVOaJVLH2Z@Hy!GYHSQXPk6mX$cJARoBfj`NfyhMk(Kau6F9W4pZPY~c47soo@%519JkGM30guYhea{r3~vz%ss=bqiu6K zAi*$@vctOkQMc)QpLwZgUhyX)rzV0WH{>^9zWQ8b+)=<2?Wy1RuAx;;MC(HA)xB_D zyOy*FD4YJ2O`$*B5V!M)8;LUL@;LMvSCR6C^BT1x;|%&!R!o1`cwV@1^AO`IHcmT+ zjI-zu8$TFs{M}~FXTy2ZNt2#XkGCcR1TvZe5iZTs8RVm~O!_x|S~${^9@68aMo81y z$|6-#se3_e{%-oWEd5vlisKv^UPI+eMiv42u1*dq>)qP^k0e*;%+8@#XWOO#X7e@{ z^Q)~%FsnO-VwNOe9%nHhAPnjuS(g!0IrD7q(hP@$zIQyc7pY|r1o$=<;d9aWwdr9$j;vTX|^|W zkup4_2MDPiZOuX_W&3JVWMQz6(-aRWgOI2W-P&e!iW*gnbjmhDu_9i@XI-e)M$>hg z$5^AbHo_ma_#*USJWUw&a5hL89?}#-0%wiqyKnFrS$<6Z7+*9cp49;M@4wXhByTZ6G(=Gkuk-P#66l}5W$JL@T$T)WECE>5nU(cWSYs85?(stf>k z=eVmnGLcAmU}sNtS9SQ#94qMac|p%*^hk}7K0WnD$LL70!ako!eZz*_KDcdn=YbsPiB z3(52mcp>Rze#e6ry~>@!cZv0j_m7@rmGJ)2X-_kAja^G}GLzq2^&#FQQOmp|_{Y|t z4N@cj*m=V*fni>;cYPLZHm%xQcj_BEFFylaB6T`O0ZA(gV(#!Tha|(iKOD1j5OexT zwjH%dhIs;E*4Gc4Ht!5NKHU_I8)41)x&Bl=n_v4d3JluFjh;hm(M0*hZ z!T5l0hC{=Rhxm-II+bbX(BJu0^ao=CHeSUib#Np1x2@BRvAJ%U9c?>kvN3qw0vDmx zX`vV4`yT@rcA1A6tx1CUNk%AUK@c@&@yt4CKN5-dCi@J&)7lNuMF@&b0gP z+?xRKGLSg0*1NkmulDFm|MR@s9-5`DXI^c6SnOK#E<^J)Yn7$ z=9-o}YVU}eHxu^Cjo!44X1N`H97^d`^eC61WtzD+bvIiHM=qd#St z^oNZHhZ`>nG0tP-x7c`@8g~pg&i5J1KrihAGR~wwWtH@YJ^vvSNzNrj%vmAE?Yffj zAo^3bjQ+6k2jRwzLyR*r$+#c=DXXSGY&t&rOW}CzkQzsbI0+anDf?fh8&(dJj~~kVZIiQc}oy8t-IyfEg5EZ zIA&T9Gv;A#U7IBK-N%K-{^8ew*z+#4JYP(PIh`<*^p4Iv=M@B(L_4LYb)H_2wma9E z0d@M#*B#+Ada9d8YGuuPF?2<|Wbe9|DNM;0-C_0UI!&bns%U;gzB89V-i2m=T<^P3 z+LboWPGl8$7aHW%wxHT1Ih*HcZ~iu^cJr&O=V)^6$35-hmMD`Pa0|Ao4n>Fk^zW(_?8LISF&kDM|-^hfd_BSqgWmTRk{^k zeiB81QgP8g>_d)ers6oRHS{auJuKNwcyh_!Ss;78;EDDF0LZt=;65e0ZaT7#O%N98i10v)2#MW`6?8~jv`8YI~nziSKDfh?A- z3&rGs7Ru6JX$(J9(di1bUrZVP{TCRbs2eNRD8q-|K(a~_7*6hq7RJc>1>nkYND@?u z=u;C>G(O&gk9^Uuh!2z67@51os)bl7qZSo$ZP`{Z!6RYdW$ZJ5J$zQgGle#aMRJn! zpGy1V*Fn3IHGPR)+XJ-WKyvZ?Snz}@(f+OoMdM@lc1}&c=+pXtsbyl^E@n!xmWpl^ zvn7gZ)+#FES~rRpd8(=?-z+A403ISJ>OO@-u9d#1?lnY_g4rJT=4mETz=1^ZNs#72yAYxP2=JCW~F?i@ca`ig)Dyr}F== z5*^+TK{uA*U59%}_Cq|0dfg9kx3X#}tYZEc&lXmt%IfdYU=m|5UBn|6z4lj+EI&@< zydT1PzfZhx;rheHyX=RUpx$39K~Adu-skaxPyU59iQ#_nUd<>A9|sd4Zm300NR7_F zCwa~1_&p^088*9FaUzM$qT;UF+q?xcJ1)A55oH3sq#sS7<1qAW)xE;8@2|2u#XeJu zCwule);>oo4|VK^s_Z1T7l$3KL9SMQ|CmR3jLQDmVh#T7YZ&Hf<=c+IB$X}m43=Ai z60LmDF)+`@XW2l0@`01tk5rUlk+rW>`!0^Xc}VpY`%+bD?x@66wx5UD* zN&{JQnNn4@uV7ZI{Srr|R%N9;{*_Gre2qy=y4p{63_7Z8*6)ZjO^dmn{p;2~Lo2U# z?7OOLDBFv}Vb&m1E892*y;OFAXK;}X7_j-w5)(XTFh`4uct~iJA%z<1w4%(^`zm%FLmx&!!1ALXNN3*e~?Bm z^?as#=M?H%sIIWjTIZzUug2OBc3E8OEQF`BZy|h-r}=~3qQEM6@3i45TSLCu-QGO# z)o$$B`~bi@l#_c?pnF>lFVWbqc1IHyal~qrE(DYC)$Xlt|Cg_JLmAlfq3N44UNLWWC%#CiTqT+3OFgX9qzl zJ&+?4{01&>n?pmd!Vj@P_}Tp}vBgV+84F;pI3yHvVi2>^!yK9n^MP>8bAy%=?mIK1`UlC8XQ$i2Pj_pY^1J8C6HG z1USI{YkKlM)Lnzn?q|qX^m=P+Zwk~_UL&1TmyPIwn=)=;W~OIwiZL+DYAzUHbMoF2 zZm6AFpR$oHg)c8Dud zY9An0x@hxa#N;m8TvWtQ(|Q+emUjv)+FZ-P^4$Eh2cDa}XftFFnYzVOavB*WJSE3} zQQuS2U9)*pqLz8y`JXLEb~Voy-!tu$g@J~f?Omip7bj`BM;#Q}aKHI5fVs@WEL)TW z^Wy_UG4q3%#RF|)x-9_{ecV++lgwMJ$r<4$t%D|2o=Hl$$>s%tVEf%>y)6I8YvpoG zEnRN1jiYz#y=%10t@o2hsuM{0TBK<) z{%1s!U}VlS;?G!;%lL1@(90Mt3uMcAModkH`BpgQok7f$+wB#&JQ?OS;h4>Wn9eie z@A4$E?-P!>Xnr7e=Na*8GR&C=gywTd5Oazbd#_}e*Ab>XBliC0GGG?E4qjkbES)7i zL=qPm{+W((Ki-p07-8R6=!xKaU*RW2wRE_+O<#Cy@9!(|pF-YO<~9zzudHrw``rgG z-TV8B#$ex9?jkJWgPypMU=n)boy+U%iC^NEVm1BJ(+aLKG;8j|@3Xh&2HV9T+kOid z2HP5PHZo{3$TR5|ZgO$Zq{K5hflSQPILOuXAeEl_Umq$d{}bi|dKMxX{%+*6If3w+ z-(kah+aOt!z_4)czM;*2WDv91!|ay~b6_~;aY4-HcUqqNCBsY&$6WbAAoj;S%+dwH zOB;xN!9Jm}KN!SJxy$mrAsOcF2Gd;DJkPjwf-%}!>ZxT z{BV=kgC^7Owq70$H@P=xk~74bTpe!GHE5DC)S9G+n;aZ8sq{>Kn;#nfH}3_)&&#!5 z%EC?F2%2QyV@)0lH@PopQsSBPCKEgQPqU+c?y2mZhAVYy5TyCN)^BQp-#`OxkrLWK zzkN3lezk|WU|uj|0nDX!Tf;h$M}wGy?z22^PlkDKIOgd=%pD%);mI(M3CCPFI}rQy zVU}n4+$6Do`fq6L6M~qz!!71r$uLKRW1bzvY&61R9+?cYO*rNcrGePzd6@`}MEBTFa}iK04a0zT%>+zA8Gl-qlyPVLoDBZTrlWto&GN zB$hfS7I=535nP;hz0{$a=ACKQqYtrWdgxDA9>1xM_NkMG8Cmz?vGpUHM>V2v^aTs2 z{LL%6p60)iV){!fx*n&0Xhl~Z{wW&8!orCBgF5>1$W}VraX=fcR|#!TesN1(LASMq z-PY2i#=@8Adg1F}ISgq1$CvymC4wR?(I9E`(9wL=D&ikwElPxCga>~T!rGH)I4sMK zw%$iyJH(Dnez*%o1HLbTi{qYCjpLQ-xZ(>qMv>0sWXFfA;~wIeWq!v4J;$TOF?7iB z9pc!4PXKuSdi8a^_(G8uxv(!2WHnZ=#?l0U?5QIw{Ff?`pAHKQD(jAi{x zgk^q|*+9Y1ATNCgxq%Kbo_i;X2E1xDrvuzLk$BkaQ->{bSci&;n=u!HDtgVg*&Zaqc$b;|V)GLX!F`T}R3KJ`aXSCn516-ZA>+&l6;6^l81HP%<7)6vAmdn^hEHh-iDwMtRk5Y?y+oBGxFo6jgBg!wHmFI;)dw zDbn&)Xa^|Lk{FUkdnnGupci48KdaZbV~7YGNRvG3CS((;1bW>aC>kFR!iNx|+Vi9q z)Twxi6f@b4MskBP*uDmlWT2{uHOdBfku;Y``g1MeY_CKlDAGa3B#qvoI1l78p9stR zkvw@KB7p;mq}Pq04pjmz9)zOtF&jSeMW25ETWUd_lm|*Nm)&S2!<50v5=joKide&q zfy`8R+%R0(wH?I;=_zpg}s z7yXL(bg2b(QhrW~RrUuzrE+xA_{Ew3zja zinyxm8C0Qhb~_GGBIXQEJcJz#Yd!Q^74wi5RJrvV5Y1)AWC=r(V>83JW ztbMAay0RHwF5c_HtAXNF51DZScF$^+s6c=huY!A^0?^ zD_i9SKj&NopTZ_`D^Y7kFH@R2Y274gfYRyfi6FDW8Mvh5&6lboJn zJ4@*vBXm)uzJ%$TT)p}La>X(~-Lhj%u8OIy>~AkuH+4d;^4P@Yij_217fUY7A))o~ zpCVT%QpZQq=pM~gTXD`Zzw`6ic~Jx|Bv-qxL2{r<@t!vTMdRZ}_{bOiiuf^7E1W9g zsZvCYWSb&IlbmD479$9%{o!U>!q)3R3`MqR26~~=l$F;=eHt~xh^;e8z1{Rw}!7t1F ze)nO&MG-iV)W!NBS5PI;1{9#b^*7({!HDWtpGu)vZmM(pbNxrm5>n8Go@pbz1aK*;!ti2DC()x^gY~ z?J9mzq@Ig$%(H&UNTi8ne!t%xgEXZ80&g|X^+x1SCD3pCqiB5Wsz9isUlIRMYMB@_ zct?r|kBToz(d4CEY=^3HF^Ulssplf8y&IbfU6%Rjc3`>~%F{7EaCw=aph#;58O5~8 zl_L-|%ls(6aPunQHkrrzCfTc(BiXsEUsS|ZWu3ibZ*PHQXG<-V3h1{P(O$1TOS(;| zV-)&OZny38YQY_ZuH&QhD-uW>aK#tZfkXl?sLS8GiAj5qv90E~Gf)?kI#zL8O+K%zE6Q)Jv<3(*6pQlHn3fr{{fZap2+RDm{zb!!z=8CE zA7-P~K$Y^jM~1V;$1(7cFZvbn^->G&q+BUQiGg+#OA*PS+IOXBviQYfG!rD8YM+)` zbEQ6z+O8VgqbNpDq>hVYGZ(J0#KtmzY;8C;jQ7&1&K>V9%|KdvDR_GUN0Ig{Ft{1d z&Ab<_f@Oa2kB{QqM;KWLyW@HxaZsgrmdM!G`1pAdq80s$_#09S(xm*X6iu}AM0u$4 zD?l-VB6Wkz&jf#{@MD>u-wDhQ!DmyQJAnJ7BZ42J;2i`UMH-+nxEY|$z6Zgx%n!Z{ z4KKpT8vLVIAb6-!JQXswH9q1WA$ZZJ(*&dzq)GXCDVk^(i1JkB_XLU&6sh-SekSJb#_ zm6fE?r?p?)HWd6>=I7s7_``+V@}Kkof2b0rgM^atak4{+YB%>KWpBpuqyKKHTR_uD zDHndoe`yZ%H0qMpE5DWHN2V;mEED|_7|Upk$0T1+lD&xJrVB}04VobVztDxD1p>Bo z)3I{&MTI!$aK0S*bqqlCZX}PSf+F>`tXZO(KMX-eSmw{jKTUB(nVDYExtAj&P$keE zGNd*>j)D(iL$%*hZMX414NEm~kZdW*#(y`gNioR~ILUs99+|SK0dLOX3mTQlH);@X znAuYLja|g>94S%^DAMzVq|tXYhGQfKmic2ii(`;!+RNnG4IOgZMaUcQ8yMWXez*U= zqppC*Iq3u`&7ti_8063oDx-(vf23lbh^eu&_t1@z(^X6D$S91Bh@VP z)0}t&QVnbY?Qt1W4OL=WBtvlHVTe3YiU>3~E#|2_BXO?3t92xi%D zJBT&MmFw}p`b_Z8VF_(#^(tmd#VklF;zvnfC{nLL(&!=$?4`j7jAj17K0q^!09yjP zuR8*RDlvLr2F=FDS08fn@UyA(IwD$$)q9Q@U$BF2(h)@t2jVaigp1QpeAto{oPh zo;n!vBbU2&A?})LaEh>8@0#AHqt$i97CL$#Dg$>E>8>Mb^nB%hp>SuJpL@TXi5$QS*JcxS2YstnE*1}M^4iWy`ngL2G{o8N79z5;!nMwj$z z)vA#PHd}Jazr7M%4E(P7zDqjqB)O!=MP<{1{(59485c(IkI-|3^4VW8pJ5RC zoj@+?&$Z^L_oIblHdpz+RGm&7$%c_N^|jr=45~!*G$CqyTm>KbqEGw%q&A1l3-K{d zG97;&#Kr)X+Sfb~Lymk4eAo)C3uq#S)lX@7>K8keTlQdeYQS2{Ku*}~oT1pgfAW?jK5u$)95j$Fl86W4tN51IO z^_GDx6XPg;mtrjy-6*y`helG(TJ#P_|F}_ne-NTb)m?yPa}WiJ^mr#}^iz$ZD`xy7 zEb~Wk%^|oJa3E0}AyGh;i1iU-#>WWw$QS*J_&FYJj-s6u)5wk6qV_zCC^{<7Cc+a% z>ZzFLFUs>-ymZUa9=>~UCYqg|PJ$bI@PCkPHfPuG$XMC0OYdwu!xh zS@sCa{NCnME4AJ}mj^1e$lF30TO0Uw?<3y+>TMQ^zLQE!Q#ez+WhZ#M-1T;oc!L&s z>m}X{d@jR#ql!aTY@%PFJ{U)br;hJH15ir+B&Bk^P(e|D)6~3Yy@@IFNL~V!7&q(! zjIyXMTBoh!?J_(Hb68)0OSM6sT^zEqA?}8$>i6yUa5tbRJ9=#^J5Br+C-}|64Hba{ zxf>41L@R?T<>68pzZ)Ne;KTlwYI~{8RR%4ji15g^u@p^SI*@J66OyZPwb=14IHO2| zFp}EWuF;q>kFd<&NS;2BbHz&x)+@@pf`TITW{hGoevY89%#U&fP#W9NX>P1qU@+hXfBP{bf{;Cl=Aizt?CtrY+LzO_k zl;N)Nv3)igy6DsIKT2&(8BCKR;v?HBQZ$K~FSf`b)jlA#$Tk)KE48%*<#xfDlhJvl z@)B&)>H{s`At8q&Su|e3)O-YcxqZFHR*iT(R45~!z1aWPA zTq49ozarjHYIDil&DdBFlOJr`Hj_iqpDP`ve8%9_8$Va-45XghA6a5FCDRvVc%MqDkj}NL8`Rp);m$q4svWqp>o)T8E_oi;c#dQ4)*6tzdjdEOSs*( z5HHwle*qBX$K>`AIUUd84b!g@?`zoZk9UxPHAFrZovz+Ti}#rSay+{qXTbhkX+QBE zW0Vz&GZ7!bRavV1(rYbK`h0wwM=OL;1c#CMa}oIy~ovH~`fO?DHT(q<1B#I*7} z$H1%@>*pEVXbq~>ps{0M7HpkJ2F5E^j}em}X)tVL>(#dIZOddo3oL7}X#U$VFbk_z zh(XO6_9T#WU4b#)(e9|S64utWR>a_DMFdXlW>3!E3nY0Fme*^X*|m0cxh8CpEt zQOQ(U9St&T@-14PisK|Up-)oTeu9>x#g848T$Rmcv~w(4OvTSTsw-7CX9glI*5XJ< zr9@=|9a*W$dO5OkmEA>9H6QT<9POf3#m76UW<^S-c&${G298R#%6_BatO?z$O*xP~ z^tT=|^o#H!N42ZU*1aWHP>WL?l{A$VI+Ha1hr{|-jgc(=0Yzg65r1K;gvy^CYeRb@5P<)UlxEk`9yWzRUWbd`;DWF1xZ5<`jaSJO<~ zC0cod3mP>=Dn;qt;KZR-Wk?j8R#(_{rAdVU9|U%J$Ge)5JYgWk-2_j?^g{z^DYj?!;-3+p}PE@B>c+GN%tbJqoIMq_VH2oPx<;*QU851qu$m8vTs!jBV){k0*60N?#L71ho>jWW3i$}W% zS6GBnt=>&TRYSU5Wz9X(t*k*zD?f7#%ryV6ui7X#H#SjLs=@P)ftiG#;~6Zl2I)Ep zcZXwOro8jnfL>-5^Ab|AX}RAbWGKRk4nkLzUF5mUvIf~&`4^2?O&0pAtckeH)Z!OB zsFl{*$lB*>VaHUqiDVjQy2VV<7yA{CL8{6&zATqU?PoYDwJLko!~Fa} z6MMSaKj0X2RM|6vnWn|Qp8XTnK0_>9S0i*>y<$kfUM9fMvfJHazJ$r@y9 zWmP9HP5o82t;Blxr;!P%SSzPF22)kGm<{OtR*T~um0XqOIK-QdV3sce+zd$jdk zt(7M`23u5isrW9@Vk1W-rm}74crjM0tlE*SSK02V-qXKSW%C@pa+Q5adU^%EX=w73 zf>-2<_+ySis>)tv1M0uk{uWYE`{%5Ey6Rr)*mqRfK(SBL;_;sSwbnjUD;qlYy;OFb z*k@?*r?aj9qpZD|U8tZ+(_NS;h96%7|7^8?&9ndJ0F7TJ1SWXKGAr<=SejXZJ3Y&( z*0O~A|7^z+uk%A;DX;TqcxHpFS&Yq&a?J1^-bu{x9=`i58|P_k_Q(?6yLSDBH(Yq5 z{z_8fX%PiI=_iM~Rc7&-c7*@r`8+*?qwZ>7p?P5b-;e_%7OkUM%0eqq^3ClvxiYWYq_T=r$Z!k*l%wHLxirx0wpCa7L*>+0bo)yuRum}ccMf~>5 zzjX;`MXV_NU(Sk{9d1W=;?@ zYn)Bxg~>2`SWL|N3XVmYJHX| z<1MQhRA<`5-p)a@js8Ew=!XVs8_>n~|Jd)b9%f$$v%b?@I(h2tpdNl6lw{(UM$+o8 zq|K(}*#8^ExgOHG5edI6Qt8#ksJ5OyKwJ02>ZgX5hLE3ZxuJ!_W%q^n&dj%o9KgQM zg@x%+rhBy)Co*gNsI_fdKQn{X&ePs8+{Ur@D`sqSJ=+gG+xo6drKdg7YV)afS=3p~ zqvOL$Dad)IL#XP{zdLb2>SIMTFIYg6@cVsSS}-D|t{O_hptLOKF&pc-gjw@BPa-mk zQJCi`9K{MVf(rc}w+K6ik-~(a!VXVi4Jm9I%pVEnm(Uz(SvC=h(sXwUKX7mPy#WpC z==;HQBxS*+aS{~JCuKft7Y~w=TSSFxN0WN-rq=ZE*3lLJnlkPFVHA0S7wtKkpWs<~ z%3floOpI|j#1rf+V(4b^shc#5D~Y9KvH24TSxlQ?bFl3`%E6&L0qkZm(^L3@6@CjQ zsl-!wmlYDOLrS4_@gyrGUI$MhmlYDOLzSn{ixl)ae35V+)@}}5hw@*7*I~LJ%*9izx~*nfAzb!bN|mPT2_E9K(Se8^-P5%YjgZ}=8BVyWGs)QGWqyU!M?B@0|6 zp078CQ^-($8yn4p-WM2296zy(9JATDCGE`bV+T)xO!gbzZROX6`8T{XWWb6+=~?@6 z$LAgg`Cb8WQ?`!~0DJ7M?%tM1t!34R7^}k>!14l`yg#_DFpr zOZPm;D-yNLsbl`pRKwr=qp1e_N+&<~89THH9v0N#uE5AAn{E=lT0i6_8TtG+H*_@h z&Yc0wc^>A(WSGwprg?e>`%`UVC+#C)Md(Yej+laBofM?tgw;41g=XPleSJs$Va*+y zBvp&%gr;h25HqL9rhi~E%pu{Jrv@?8CR)tYWSA`ovz{lqdG=L#aIqowxf#4xM!Vf4 z>-?$Y+Bu%~Ey=Y@J?*nen{Hq`rkdPOy8owR38R}Go>dB21%5ZJU9si+!`;BFjShf} zRzt@5oEbCH4}a$w_Lfs!-+DP!dsc(VD!?i2Nz3VqAg7KVr=;)j%TKZI@VPG& zWIgZj|I!jOszY~~aXfb^bi#1Ke==F$Ii#M-zC$0UoyGlV=sWz52P4{;Kp_w+8x(Z0`~l-esDq@6_IrL6a$-NxyKDi-RW1Jd+d1Bw1TcdCIn{ zzwT60{wK-@^zcJ+>yk z?(i`8ONNr?yl)+qlwTFzvf!uRe-p7CN&eLSfnwWgg8- zGR%v^G4~5%HhRWl{(O6q*lTBo#$I}JAoiGt`D8N87s4@b2x3+~Yk8iZ3^R)`^@;w! zz1t3&V!^9#OZt3&+|zzHxpvIc9-mx$`g4}aHOaNppSRlWl53ZG+BLgb;YbXS`@@2iK2pdWsi4?F&eodXZXwXzsK38ebHWJ#@|T6PnC7P5-?y!HCP)tK89g~VLy0X&lkpFP#W zj}mx0Qu^|Vkgm4a)6Y^m9CbU1+8d>{B5KK=d@&De_rRoAKfS~Jb?^-Z^QR9k_?6(-t2oDHq(0HKT%uFha|r6>5(aASvTL4 z66K;Ck~pYxqxJ*Qy1JBA8x-&kD058|8fHwZ%T9`#Exe7kGnE&dDLPedZKu0WQ;Gd#) z^bZ}eDF2`?t1zFf^i}p%`r2tF74hLccpi9jVYkiHfUfJw7l#*Gn)PwtkEPrfMNp)V zxdanE^mT3m74ZS5^EESvEy176aNYk6-4L>OcVZjXfgPKSX@Q~vFClPoywN%~Yy55z z$0*XqGUBy9is-`N+yMlru?fhVrW0dhZg2FOC$`wGt5sL#)MsA=(jC&u2q5&TcaC^?t z*-~o)=qt4)z>j3$pCad)x8-#SwCR>B2)mImMUj>wlQi01nHFUrw=DBBeQgcJONTxI z0zkG2@;IkBa*AE%bFH*PyHkAZAk*4bDzTw3il9jA+?d#DN^Dz4 z5M!C2SYsw8tt~wr6re*s4--ZP{B#C4w?akyd|G5%zL+%R9y8B3HzVrsz)bmu8ur;u&CzOV$1_@K0w6{j{}L@t9PYC5&4h zMqnt?T}yh=OEj=yr!u_=%lv^Aeucn*ErE4!j7XqL)F(7U(fF7FA2=k60~^e>UL4q;6*~ScR1a)$Vl6I#zz-@ju+Ke2b#E%oLU2zUs8hz^j#G&y} zA|A%YQpWArFZHp$4atsf8TL=-Z4zR1pa$1|JT71{s)|^n>=9I9F1g1lz6AN@O1wS6 z5&(*Hdy_Q!sN&4*fF!ZZpQMk!z*U3;xr*ZsL~@`?xmt1ripIy!53vuNKE+q@4XFin zDn2X4N_L}>JfjTyk3%FeR28vC*$ZAIV=EEK7Oo|n{_qk(k#1CyMqgE&pU_=KSmuvp z*J?xp2NKErMxYK=0^NByipIy$5{c;3c}`Lb>ZH6}imAGUa>av4EsAp6^H7|lNc%uY8vQ|&^G$mshh_fE*P=DK zhZ@a10P#YV;@xr>ipED8eAso$tE5&qRm2xb5iyeOdr~yX`SO0;5R;Vd>nKK0r2C)g znp~YEbXn%7dm+StxpMOEFa@fS?ij_21pZ$vZsgTfnfH+4{&luXSxq7D^ za#hTlzE-+qC2kwIklSYL{zwi~Dc;3tC>kF>jY7PlPrv^wwZe(c|BxbLB-_WNXp%Es zY*#AX`%(0r`eSnS?}?xrOQ747=^|I9R9Cjo8}_wi{?Euo37gnlv6AL$s^oG#B=mcz zBhjc)q+P2djWz-pomVT)S?15x6rL5Pu@E5efW2lvBnPS#@3W~W8XxoE1LraEO?SW4 z3a5(rol-=MRC~P?O>!O*+bv4Br_e=_dPJt%ROzm6i(IkHPq$_{=;9G2m-cTNC_$B6 z#t#KuNHpl`k6|*)N^S#ubu{-x?qrP^AD*l`%L#sn`oXaP|>5v^1$@Vq9z> zMTAGiKV!qjb(msO~{*emsICISLbYy?oh#x67Z>9r0$UZiJIr? zO9IX^Klle|%I={`_oX27P^Ea@mq9K-src1>oGv|`iTXdO1!<~%Oo}Gj>7rb&{O(85 zcLtIP{$IStMoJU-HD!M2|4OLNeXh>0M(`^YyrqDns0SXI=jO`-9!mh9hn5>*WNmgM z>JT1ODW16pAs5C+)xD?{eLDYKYC)QmCrHsmJ42MWD8GkLjG!p{9qg5FApEKm_%&yK z2)>f)+y~`{>k)jNg0~iM6ltk7Nu%aL_}Z~(RxI;h`31{x&oQzFfB(M-52_STnGB4L zkMHh5t?1MKU#SIYQZACBiFT$ax7K|EV^EBsNIfJ;ZSeaEKbHCV9nJg@dd8#z$uex?I$XKArzAwIEH( z#ZolU&KBja0I!ITMKOY+p4(&|WetU2MgqTMh+p)6?O{%nQ3bTfTO09a;4czyz0}(g z;tfUW_DO0VM$ffIQ(&1t)ul_x+j#Z1Sf0z!B5&`@Fx$X?HI#qkV)Fs1`6tlpAN2%d z)b9&aL0veC)IYFab8{anep%-C+ll4TLkd?wsfHN6AC5frJvX7V$X{O@>ykFd;7et#k# zou^vOWfTA{@_nHAHt;7AJkErhrT+f880OgA%8p7-*kDfLW}%8 zCj(~#U&ip>49BW{8Y)s8xdJRtn$H$G1+cV*4#V^jKlJ>B6sJy$gW17kW zQ?$*@pHPvids(IrMnX~46QPb#?xzU%6xQ?&buLB&j>J6Bef~lFf+~e@kqohok6Yj) zU-aqx3$FE&+~j*n^5|S{U8&<2^DcerVaaV_1e53B{T)v`(=q1CyY?>dMo~|QYOlP9 zAB~)+C-8n^5$+mB)*kb+9pDXB;$65eTUsA)!-qW~>Tapc3=sQ9h-ENpQ4!acT?8f= zS>8~No84^9>MXQTq*r57j&@VpQOtWsSmsanS08~k9LU9;{5NPrm1ut{!*1ha`<h)PNmn(s8{299DUVCG^+OG#8XcXnFChP5b@fKrE z-yMCg>n&frL5sYN5N`(lS-{(qqy~w%^$bb<5B+1C!f%)*kFd<|Z9muBk>U+nQ8IyxOE6R z$!bJZ#8qX_pbGc&;|p*%v}QEoc&qqDk@_u?+E%s^^XU&{tIw zr?Uxlr2LOPjXv@v>dc15KW+tm6zPqZRBg&fV%|Q&GQZ=AAL7OayrjIxA4oY=DVib~ zJ{uo1;X~+9?NF)B1g(mAjua6e)m|yZ{#tvl*dm8idxq3@)!N>ul?|5d@c(+2lNoKk zhxc)u<>Yh;%emR%Z6cR|%BFjnyJt0Lr`uG%CTnitp!!Uua&dINw&wu?SnSWpLukhl zM$@kD+^uXZn>HWbjsFMeD*&~JLk*OwJoeXD{(lnx|ASELR#J%1-IC<}x^tJ@t(@z- z2)A-7mqwQ;x22f%rUROMJyLZUUoARHN>E;|1({Mt`58l9K|D}BvV6J7W9|c?m3aS^ z>lY40W_~5_mC+6AJxjdPMgaHg^Z@Z5Q}4%#cPuTvUAzFX5Qwr7q?Zi9W#*24?~sZ$ z4GyNE4DOg5e4wQMjKp?#uFASGN1mHq*^#RKqSY?en&po6RF%~X z@DTD;_PV2IzDj>Ydd%Tci(0DMBOPt?!FV!jdmoH@lL{LjWQ}8Le6C|`zU^M4uGSu8 z!cD^$k&5`ij&^I6wG&sBCLSJWlB=m?T=Tp|$WiT2soJJjWxw1Evgul!rU*AOLO+X; ztJRM?2xC;43RcgLDT8ua#oEZbvprWd-c@U;Y@3+q_c6|8Z2!mxY_eYl*6~ zc2r7L*4UB7RQ5NGK27{9RdzUgecXDjR`KVK>K2v7Zz9zjt!kRiw!Q4AwpQ6fQl+%i zs^!CuN{Xu7NwS($iKSqBb%hMXW7HS)%lu)i?bb-9F@K3$Z}Oy;K;_P>~(^w zX<@wmLs%)+xq-k*!snoQxmf0%4*|F@eve9Ch zp~VXvl}weL#Aqw+F^qXCKHO2Aq_U2JmZQa58kw44b5*vMWHpaiv=SA6?5NIC*@kP8 zmtrlx!j_j>%Tg5=I+o_`dKy{Qw6v-*Rn2i!SE}qGR^7^T%JMK!@mY?ld9S^aRhL@T zG<`ET$Wd*rvbI9KTG4)`v8YKzt;)V|WGQM^?#RrW;CKDVYqs@jUVNT*RL$E@DXG$Z zpRQ>4I4b59=tf7Dt$N)ZS$~z?N>GMzhRTk0^t!6-d}jA97GzO3FE1hgY_YcTdedBZ z$vaC${2Qk}j|ch790A@*e(g&L{c%O)bk{c=4ZM|nOd8~`gv|@M@-)%LaDSAejWPeT zq8(%H>%B@@RYtN)Nv5|PogZCJYoH%l!s~%`S9s!Xx2%Gm^!7m;dC7QeTYhV$|F1~N zE~6P_{@;+}Y7VCrgj`qHXKg`tCjB3%cKK}&NwMiIi))=tZ&dbedVBX@QY~0iID9QB zR`)E}(4E(8uPUSD6M1@J{UT)N+w!r2oo{iv<0w=%crv>8oo^bA-TC$iVUcU>F@Bj~ z5_Z0&b+dcg%pOfue~Fum{{O~{L$!2u|GcF#vwYlj_-?Vc(`(GmWVL))Eo-iYW!Ski z51$&?F_SXgu50OkW^fk{rm!y$nq+t;9mvG)U`?kb?bIHISMy~wThy;V9b9-Lmv^{F zj)$=E3^?`bO1!!iwk|u3?5nd1mSz>Ki5F4#=(>39V@cQ_v<+3aD3g10LJMMe>=cCU zd5L*m1{p8bWK~(`H|fZQF7$_6$$bxC^HC7!%kQrXy&zrWOfBulPmdKH;s-;9^D8D8y~23U5Y7uX zZ4+sBn*+CfZKq!^mJ4Ms>aonqQwBXs63O2Xjvgw$s1`TQn+kx7gSqX4VXw zse#EbhlFFE8pK@YVWuX-Y!Qz6?MZ>ybKbT*7i1)fed$QM18v-9z9Xr#;!P#Ixx~8y zu{*gV<4*T$YT!%W-zj~QUY|LcH2Gy~-w4z;UnEy=oP1Yp%D9D@)Snx;;l{vhq59S1 zzpEoRj__UG>b?D`Xchh)U4MEI^9W*-_HELvhjgG#S0QKmq`qVGHqP@Kx|gVLHa-9N ziKHZAN8y9z`$tnIc=FPBvc{)%c=XbFD;4nz$k4Z!=oChh$II#Se0zxyb?{^jdXC1( zaaC4f&sbrf&uIq`o{Eq0>Der2Wm9K zloXzRljq{;#|LVdZBA$}+)k`pJnJ?Pn}lcG@fU7!$LcW8-ti79_9tfFuR9i9vH;zH`6xE zjU9qK(W`&mHV|5+XEK*eynCqLdwlI}?mb>j(|OcJY#+S(Jog@76sUbDD#_p3Wt-Cz zyg*ue@7Z_rZ@N(nxc$m{FWT-C0+BgA`}ZdYlM(3IN)r3#drZ&1_tE&a7IrjVEL{h64m6G~zymg(H7-UEWm+%u zgp9_ij(Qw#JU(N?|2!UV^XJ~jowmzg1Ilv)NgH5x9-8NG8|j7X@4}tg!3y(Jz9UZ)lkhvs`l#Em^zzUw4BB1 zfy_Pru8s1waFgPoNxS!~$vxpFHwH~gJ(K@K+FD$x#lEqKtdr_yS*iv_a>)#YLsS|4?LRtwnVc_a+-<#BDzoWX)ZXZ1>Kk2oK*M6 zqBI9j_2eAh63x8iG&7?#Q>J+|_iu^jk;!SU+c%TmmUzOnemT<{@6E2ng^Y9#_>b%@QkDH&YW?ao|W&k`K~j>XDbtJuzZgqZX6aBkf5I0*!xKwVoNuuqrVp@Z+o%x z*Gx8&A1tkpS!Sz4rwG03I(K* zd)FvP;U*Y6f^$Eo3STr zv|KJpu-Y&Bl+qFu(w2V3q~q}cd3d|bBc#+9{;PHfE^?b+eX}w#Yk=M6ufEOQ=8yZV zF8_e?mrG8uey?0L{!j}V35xT5su+`Y`{jO9?3E2vtX?2P{ydXjr5BEr=sllM6M{mq z8B3XTJihJ0BxOPAb6T2eTZI!@TFRvE_r{7$f`e3o6oCv$&>a%QCKy!Tl_XCnknb5L zpR3F>jN8()&~@ld7uZE|V>L$SyGPhq(gd=&I30f~+RpSk$DJP4ret(#PZOr4{RpgA zMRp@F+Ut52WlB*<>Vn7U5M-cs>y3wJAPqqw`q(d-BvB+^CJ$cuk;ZbpmWp7KyhM{u zv20BawbBh|QqNq<$M17{dj3{IO>$VImqhmS^*l(eFy832QazcpOCrabo)4^}o_PWp z((~DWQBN{ZJuhEC#Rv+~pIO4B<1zD8CKbLiai5k_bO7I`NvBw@B>h(K>RU3F$F1}; z?50F-NQavemx+-6b&*rZB6MBka#Legop5*8MFL@asnobW8dCQSB`h(ctXRyX+kF4C zJCl>G^m8UlnMABWZtMo*b)oW-ys*h`0cp>i_;Ji2008@L) zdQIwB`__CpSQM4A7iQ?`urCHB#RXL+no)m{fS2|JTxL02gs!pssN*HZ&mEMx*fvkxH2?=C{0KPnuvI zRj?X?3<-9W3MQ0Iu)29V zJPH&Z?O#hpFp(fzlNm?`&CBI)y{7^#q%^3-NvcIZqp`bc!6c#*a${Ad#ghqYA$egf z%Ez;@r;`L-ZOF$Io1hSEay65VM|C$Q6(0MyS}KBx7WZp17s;R&1+s{**H)l~lm@l9 zUDm;Ho6czTC5KWbam)(2v0Bq&@qeg=Wmys#M4;Wsgc zSP=bOJ6u8`IZMa3j(km58g77g;2KUuqjSn1cfBWsU(ia zg}x*r_U>9LXM=)*<*8u(Ot8O>rwy6Z%OkNXO|blbvnW#_LxMf^Ak8b3O|Stf7(v1M zNgXje9u?%l`!FJyji+-Wg59Tr-DZMar-CtQmr?FA!Paul>n@`N1~sizFrjRM&6-7v zix70mJ2Uj(Gc`^EydY>cx_(-2=H?i|~=~8cf*Lf0wHalLhr$l|ere{;J8a^g9Yx7OtuKaZ*#> zN5bEU36P%2`kA9v{p|Rjq^M`ZzSVquB;4ozIIAYBO1OV^EE!dSPCOPf?gNy2Jk0$L zxdROMACX^smUj@_o!MT9YFOt(8S1V0(EtTEU4C0B zlpDxxK?*N;6jE%!oD-msYI(N^1-0Dm9zv!Sb`Bu)v%K!gGR=}(Fb;KkrCVMike6Y3 zOOR)Lw)gntS>e}KJk z1{mrglo`T)0ffnxcZ!eD(?f_`;d%^cojIy3Z+q3G+>#4r%&QC=OPz!@R`^x`f1~9s zIEt32w&a68{wxna&3e~c1NfaSuTb&p4gZ_~NQ!}U^=aPh(af~MJp%~+Ebm06nQqBn zFtT)NXIS3%GTKx<_wZ;AwZe}B2%|0UyCbP*jwN3RfaF@TA9&@%UvBKK}2oo)@ zSZU^2vagSy@8OqO;jsby$(Gkg@KuQmJcM#9l<~CFdY0ww<0I_vA;hh)>LVY)4Gim! z@Ho`}%c+!NJ?wJoa4!Uf`{*hE#ITiS*M>N{B<~G&#>eyAAj?sPIouDcp-rAh8Qu$cSDTP zKK}a-Uk3!&`N%pd7^|2v8WF2y`IvWmm}OFOL;!QLWSm1x?ap`c(RzDmae>;5A+c$z zJ$rjaLwAk)t}0#+IAMMLWV4g8^W#7bowW;a3kjQsM zPhP-%emSUJz7~^3p3`l5G~_0p4pffM;5tXP9?#Ac_`vaOq-9JXa2x@&UnIvtl75q< zDe`E5~}IfSP< zb6TQ#xkpoVc=T|}9zMAG=xoo}jcuB|`aj7p{SKw{V5ipb~MTqnY~k38W|_vopzyFIQIHtMiuD{Qx@cyXWHPpw<1u)oepT4Aw2 zBPw^9>xnqAC7Q2$G*yT1y8L~G^##Gmw<7`-mf_erYh`}yiL$#Z3s+c5RQho~%6Hqe zV3BoaC$-3%TOt-otMtSuZi(iEb7GD0G}A_|QvJJWf$)>xmwFR9j!;!AU&0+NbmoC`CLtbD^j0kQVtIX?&hgK4H6+ z`IHU6|$mP;xTD1GblXG6Md6LUhInmvW>l6APb$)o%~CL<}{yXNlP@J_GoHw{9^wk!6dWF zbHkn>7zrlh{L=j$JJ)amUrQof1`!zb!fNdmrCGnov*91Vx1iRx9!;&3(^U5GpmNA!kKpSd7_Ah) z^dZO2RZ6vAHq@1crN3fxq*BtCc+5^~f)a7l>|RMN(k@D~(^8LS?QbnuWOHUxn(zM< zk#m_(v$Q3eWyxvgMrj7d8ogSgd7ej8Yc793dR@5B42(7E8%%LmH)UUWMp=Tg$c)m9 zL)mf{w!Wglhkm7H=S?sc9l52ga=&ct?`YD7m)JIwNb5fMKQIs+t<>llkk3>-tKFS?H zX`zK>e&eZehGP&O1+>21jRHcw@}5z?BYjH0Z;omg388IIO&ab#-Vm`^y-)L%mT11y zJt@uGqcn3?cp6{O63v0hY3>`P8TV=a^-~MFZx5O+tx4p3>&f`GqvsrNf?xKiD+~8- z_pOhZF?Xd$Zcr1HNY&hQN>Vc(9;F$mnjKrB*)ciIrRySc2C8Q2k1d#S&dEvTygy1a zP&L=IL~}@Tnny=z*8BEMZHeYy$!UIF7twwGDzA>FZ)!pJdEJug{y>ywNsUMIhL&jF zk(}mnQJQ7nc{JO%M03C7G*_;T=-%ynkLIlU7Ia^DlG9yBAg!>m-{cZnU<5M65p?aR z+-G(H%Koca^)CPR1nubKHan~Kp%WWDPR&8*`p^|ELuaq{BzdTLXdCN%yL*zcPPI?r z98idib=v*l(LWNUp?)mWFH3V}#_7&voTmHmH5;06`qVF-gVGlIs~R8rv6i7T)_7W6 z-!k-LK6E!gL+5&#pl^2J&GR51F3sR#d;CW@RVFqKwsDIC&R_u-+yA}ZC;E{Rt&iPg zh|_@Bg6>0oQWHR`1?XxY`X&!L>Do%qT>@(>?%v2kJ?g@>l^y^Ht*sm-7`kS0++Cry zmA}7@m5|$5ITyLxSd!G+So>Vo>}@Qr-v3YEgdH?6$z7}j-wm7D4aWltr<@@F@~#8! zVs$|Rcd^p>r??aT;M$Y^VHr*c36|Z(dg?L^k8pvAIhBc@b`o2LZavIfr>-$_28%LD zuz&=0PjUP;I8V9Epk8=Wpu7tY|9Xi@NB(`1FUV1$L`2-h3P_Vb4mtSltVwg7O2Z`1 zzacl)VZBPTb~>ezJSY^9rWK@t24tb~&6+?N2nrWZQIQ;v{R1MQ^!pbHoJYF$ZIqyd z-~E#k4wdraQUQzYYa-o0NH}{Ru$Z(XCFF?}`+!BdK^~>TmoyRnjH@X;sjKkYsPF`Z zc)e9TcMRrQ^56$Wr1c&g5FW{nnw%_bklaHBV$!ZH9AyGMQ$bnFnh5mXRjAt@1~u<> z+J;b|H}wT39r@@-doTm9r}qX{}hDB(h& zByr3Ze`5Vigr7cSk>rJ|eFq2%oN|)j{AK>*6px^gc6*i9@i?43_(=`1P2KY$;m=*X zLGNOzZ{pdq1MM!>8Bj}~bx-4Q46>@qqhcwNgZqJg!BJya;LhKaZcpi%wBz>|nqqsY zVwr*)^5){z^}jmtGYZUP%zIDxJurBmRL9_pNj1NVU$&9c6gq zeV!x_42nt_(&=2M)@~59Of(74R|%Q4O9kJXgiAl5ge6TRTrZca5v@pqMBn%qB_k*V zUH2T5j>pdA;aw{DTuaL%f}Ns*l?m12VkxcILP-p#EPb zc4rkkE|4MD@2X;xfx7gLX)lPGM1f6D@{bLF1EwYH_q`K~M;G+p|>4@hBk= z?;!s9S}J0T7N=`cj+zCv*yBHRlFoKe>PVH7N&9fb2`1+|?^8}51`Anx{^gWYC|g*5 z;1LQ&P_V9ihDpaG(S}KduS~p#(%RN~^TZuIdzm1i6aTK#4_7hLgOPT1sBnrt9g&rDUKk_{MlDLr@T1_Y{*Pisa6!s>0*` zkCuvHBEc+8QavQgHR7NNdv*gR@&v0KE%vuSs>DN)-=Fb-hYeZc-hpQpJVK z&C0P#evc~)P^Kyz*6Xu?vAIU>f>;YaYroJ`8 zaXkl_`gFyv${k?%o+a{YzxLjz&g9^#G7&?zcSh9mzD@x-ol>nDj42iG0_0j@aR9-M zyI&IoGz0^=NkmZmi5`B574`|>yP@xmia*pq4iA9jSzbq<=D8ltGAsP;310~}gzexf zv6qKXZwT`P2yPU)y0N1uQEnhF0|ZLc;h)OHvKyQkGA(vL5TMY{@?KC1DVDq@Na1mh zLXH)m5uh;0@^XcOTJAazA=e7q2M}(vykmTX6Fh{WR`@+e&8}`oTi#!Pc^q1M2qjkd zP5@z|<$Wdy`uQ%g#KQnF2|v2t86|G8w+HZDM_#P>Wd_nW08(ywr}#8)^Jvyv;l2R` z*R7tcG^-8dcMPJPo;8-YMh4bu$-O%M8H}(KeZnt!gyVwSKLEtKFq0o$XtA|!2CHn=?7$r|rG{&@6K3Z2n8#7myQnu<1?H-?a+m+SZkHAn~PRaBK z%kZmxRi~o!L0R|>?Oz}9HZHTJG;l~8X;ASGX%Bf(HZGfgL%U&plHJR~LnFJFFJ*bV zmwm2*qJMKz+qCg^FHZw4$itI513{+A?&YVo9ir=Z2L7Blp8b9$Ih3un4!c>WKdb)Q z(9%h5x36xPrx@nTika*T_9=@aYxL9nF~#1?xsDlq&Um{hO2S7;EK7>A%6t-OH?t-0r1r7xcVIjrRJVG}=Wpb$I)%XH=*OK9_XI#Y0(C zv1>ifV7JFV(sYjK?6xODyQOuDB8qk*JQe-)tEg=vG{4#}Da|LMG{^ZgN47*WKRM0b zQJR^Xyb3v}2~CcJ(xNEyeUwd0qpA_*+vH5NqQWOkrupy>J9xL? zUgMYDfwE>+$*m=13|4n|`j2MaAtNemm!CXgcXiC0bBBHQO$scy!E~6S9WXi*7s2D`Z<_rxK=C^JU)BZGtzfAdwllJvm(c5 zhsY!1D&DJ?vzKn>t#4z?KKbNiZ+&}a*44kBAF1v@uR8tn7F=jvhosg0K$K>nSG}Pnns+3pd0docpjU0* z63zXR(_C2@(LK==sQJR5Xb&r;49sru^B~4GU z2EVIx_)Kq3nD#ew!s$nIM#WBJeZDsn%tUt-oCzY`KR6S-w)F33f*V#PnF)^GGcpr= z>LhO_*t`GV&jd{eZzgy=Xu0X!g&@;pCOGGt=6aprOz;^WDteAJdY;G|igKuZ$Hx(0 z%l0G4g`Y%yjVL{%C=+~?^yDZzMN#JaDC-v{<+6NkM6k3iUTCWTN;4701;W8T^h1t8 zxc@!(OxOR0W@1-G`A+jGo$e@kHjE6t`|O&u@$DR?nfa%u%Z3F}^&>QYOG`@g!;d2N zDfekU)e_B@lheE|O0(Nvo}6d4MDu({(^WycMh|)WCdl-ppXWq%@KKh|kJ^PObD}6Y zDOf1d6@eF%ql}ND)c7bvlcQV_MJaFPaXBqH%3)EI1|MYy4@JB6Ti5@6xBhjd>F!LK zyN$;_hO%aS-}6dZYQpTOaeX5Ha11<@h|`VTC8^V$5v4hBJ| z>(Tu3;}&$U*(s^+Wl@@OpXQjBXg-vj=6O+?fziWJEz#_joMuBTqI=$Up6<)%wxIj! z9o^{R@7}y$`4=`fy;=A7*~ZXDp-Ywo$F_4_sdK}?6#E>A(@dLl(B0d4!tdijC!Jw$ zTHUef4EtVLG`AUcJpe*8>{WuHQ`pt#g=W})f0}ZgoTl972zQ!Nl6so*^NeOsQ`+11 z@*4dFeo=DfVD5BG;m$=-0aHc#EM6flVQEHwyqzp=w)q$j>^Q(%Y#|nBx`Ld zUe7eB;+( zawk)y{^g!njIdR+>l+If6)wQDCfPBO50+}o-v6)c?Kfo?E>v`!_`Mr@ybDkYPZXME zM)UHpnhTG|K(H_?&b@Z0J=qM^l4_Ko)O%^>o_M`1>vzreOxX>kPKmQ&d*kF8i}FKWkkpS1R?1+skj&H+IijmpUKAaZ`q3bv8mU-_80+m_owR^IGO$&Pt`e6VmI4jd(7 zM#_)V1^eur63tH+_^ZD9voQkSPV&!2zO}%s&qfOzGglf%vTw#2<1Hh_OqlT+!xcM8 z{WDEQ4NIk2Fii#tq&31w%Nxn>{LY-fZPO{-2-fp9BFiH;OQ`S;VGaHLM`?3}g~{=Z zKC$RI=d5j$0vE{!I5#MZi>0taZnfEv>G3^*U91OJ91Eh>-9j!z1Jfg+Pu=dIBb%qO zhj$zS0yzJgCt50RZON1sU!xrlh}dHWc5DpI(}4|;2JfT=jZPQX3ZG@dGkJKY7iU5r zs;rfXHDW+Ly90Se3XoB5R~*zXyRywe!t(6G1-+)dL$-@5=7|i|CPP-5;FGdQe#Hn% zt^_I*$Fjc(iZ$kZU7~2cV~UvYP$zT}HPd!dYn(H)-V0Rk$~i65(_G+rk)W_Z;%HIU zy6g$rMWr-D{v3D&1JC*5WnL~EmAQv09=*L-1F!Ra*3>m9m$ubikA}Iu_5lq)Hpi!y z&L_U2z$Ei-t@ujn*u~-;cnVr93`6x^DZLeTn(gRbz;`a&LwrX!q2Ih7_LS2_r9{-% zXU)gT^dL;0kXt<*a6a|6r0#vH`W2y45Kk?Q!{j~kN3Bb_Z+BQxYAKesvs$_QB(!!% zALoY2SYo}_C3Sfy409WpHe>RYUy8{gI^JII$4&zQTDyz>HS0vZ5=KhRnsw3o=4@I@ zLU7)!>VW5ZUuCY@C8aqLE+=LhFl(%5=(S!tKzswUxPOgPthi4}cHw#I>AhfzvkN!* zp3c_R$qdwfH>p4&hWIy3%&m`@-Kf7orZO>*zxiOYBwzXEM}}@O(lyJ#QXMm%E`_B_ zV4{;hN_`ZSl3H-6oWya)u1xGRTLx+hpQLGIn@q=4AOiR?t1I{+$yN*wRd=F?Y;@g# zhAL!FlWd6s8t!w5Y{OW$zlRM$aiq#KQa0A)P?sICV~ z)Ldu!6x3!X1~O>4gA|cnkmKcAT<*`%%K9N!Ch=B`cm~Q`o>P0-9TY-nRVH@q&2B{^ zzkA6}dV&V3II|t)o{}PeiVB!gYcnSrZ)Z=VwH=?n$NngB3Akc(XM%IC+askiD*^f` zwcWr~x^6jdA#sTe{J8Yt7t%=Jp#^D_gKg}tbsVL!R*H+Iz?_|X*1sKs6=7Tw3GyV` zh4+a^dU1Hk?b0-pa_vp7G)|}UBp6GdpG$(J0XeEv4i@Nf^}E~sBzFr87`D9)OvZjQ z?DS?BeJxM+X$+Wrt}v1?CLD@}uLG3~VF@bTGw8I+x-zjBh~{S{Xfw7MHJY}WtAwQ2 zW}X)(XujII>@tE{?l6_zq*Q5alI6`gP6ofLSxcq(wrVoS* zRDA9LR6Kg6$D~&}48Ww6r2S4E#|dfk7r#1Ec30tI$Ao(P=Rqk@I}aZDV`J^NkUZQ=+yf{Va9xwVK`>o_9;NWk z$ItcQ(S~5nQvw!_IFf(Pu3o16se8LAza(|a|4n+cQ+_TY$ZKx4 zLuX&Yww%-tGS5!(ZEPqrDSLfmenV@ti^$rD&_Q`u2%Nm+u^s;Vk_O=DNdORMbGl!0 zj8{2YjPWwLJ(<(J9Y{T~Q7^K6!AK?N3LLc^bcU9Y(toa5+nD+RRyVR5#^tng^RoPP z7?O{gk59?RQ8GWf$ZN$h$~LH`beyNosa>;o>^F ze`{1MstGlf9Pu>H|w<(Gh7nx!+H_80sHlnnsi0L;8m8&gup zw$V9-Ya|^9q5=8L2A(09Sv7g1Hlz$Y2R4DCm5G0xhDA5KXwZ#Km?MI5J>{YSZVZGb zFJrHi#;h%F{*4&eJu5BQC>=ve^2IjQ9$&kA1`&m{%PX>d+DDRhR#~=$&%&?G-1}tm zY6E)8K4ldHedw`RP=X}Lw*S(4H6w$^nec~0veR(z?B=VrM0M)sJNdQ2lPmymTIvrw0!)@?480u>8H zvdGd~S?P*o?Qc>e#aXL_$%zmHrdyR=R3JpWg@Bo(DK=q_1x)Q+L1Ns?6TI~|Ans|z zRSU0>3=M>8=1&3{v~`7KoTD^on%4plw9kY<28}ee3Ja%uXml0zh4Y<0kf+ull0#H4Wha@?vGLuus`}g;^8ME5uCA zYV(k^y2kU0`b;>l2uc?9!TO{uAu@bS%Ptz#DZB9AgAip#rOA(W_)(HwccWGgE3*w8e>>WfLzjw$$pjrmW&^03(@#E&K?#}I`TJUT^aew?T z?UmWP2sbpk{{SW@50xHZb~zc`EB4g|Nq4_u2dYHBuc?JjfVWP$74i=@B{Tn~|@ z*TP33846tYev&+JwNbs<^hW|F8n{jXp-|vDP%?snYqvlKZQV*Tf`P04Y9EF6Sry2j zk^WlPG;me;K%QE!AkS;~%a02Mt_skwz%@%sqJc|Ke2!VSHF0amj{n!V^|st)v$!?j zmq^??3mKmHdx?-^<_6-H?3Rs0;QHH;x_F1b6|KYt(0=?#tNLcu&k;dl$nXStBu}&X!0j&0w9_qEN<|C}5nemQKk^Ygmfm zXOS%Oc_80NHd%v6{-~Oi;pKtYD+NWFY2gw2R*ZDz?R{C{*hV>3CZ6~v*$6lJo}aBb z%LgN<#Tnb0Ub?-enNz5ad1~oMDq6rl1@U16=4DNmeIeH=KOMt-55u@31DwK`V_P(^ z+-6u7@fm$(e_Tezn2zHz4kLF}6PCbi6Y5T$m$eGkvXJFQXMl zz$J?M&lm0(e(#`*Zx0_MO=-Trt)nl(%S=LhJ9Kl>+aYPT7hfIVb+Uy*uumM_|1@;} zA}()5ZCA;lvk_f?9C(VXWdNc6P!Uv<51q!)UwR!T#No#Wsm(oMExoYoFZPx1=4QpZb73>;W0qsC= zD{FJix=3w413IDFoIcm9&G?bw+JvjZC2W2VBk!ilH&kX~U`IPNWLIWl7s>nGDeyZz z@Vkrm8)SY!i#PiT^>9o=lHteTcdaO)^3$x1RWi_^{J0H1| zB&B~V6S)k3;<)4BxFE)evrp@klyO;&d806E6Ym8|W#T^wLv=g3RHXzZcXXj3KKvCl zs4}#W60^ilXf?#YgtURbKUpz2T41DoQosw18inH$OYB?15~T6h?ke8-4^v^5l* z2!B}i&;^hE4&U4Lseu@)^{J^R zy${wpyKt_C8Z~5<8S-JNdFgW`Mt^Uj-2-^27y5_|7C#VD09PhF>ZeLqB^B#}^H1ss zPzPDX+3jR~1**YOhSvb$0NK)%qN2<$h&t%@1T&`#K!TBPZ;>6=tJ_hS0dI%H*lKew z?{$TXU%qY7drR9u1M+(&X&N|p!ZCg;wc+w{v@FEkDNZPbCw_8X`KZk+?Ua{5L}U3P^==o-!MMSCZCFic z)f=tH9IX&U$gVCjG3;Q46Lt%azM6}f(!CHVrxXAB>GVjQ1)?J2pI3WnVY&O%2Ty4n z?#mG|?QyKxplM%0)g`HhA_(T!*R$Nk_4>b14*|o&W%ibhQ+~2Z#*7V0F?^oQzE3b) zJh@P6%=+;6rNziN0bYn0L)Yj7&vff@@2l%4>W&9k;(%8=0G*)Q9fBqRl!-4ROV&t9 zf(|2Nw?yRxxqK&Rku z$foLHN*9_{CKkMBVWJPbO~#1~ynX);4?vZPYlTDita|RQ4{Mva=sy@Au&q~T&#u`f zyOsRGbh9$?`oBEM)d!l$kd;)1j=l_{@wDspzirh{u15X9Vb#{~uB*iw?ElP?o)7;IVGT{4XnbZR?$F-ZZ+u2t1HgzFal1%`kdPZ1`u$B zeU^()V{@!3QGOUoIK+p?Unq6xh~`KLnlIX|J(@40jf`c3;;hW{w^9-(rgcn-4JL!i zL>Eb<9d-*{?v0d=2Ggrm$CSiA+scepRw+>(m5FCB!0@k=Yh~yKBy*f(a%sZqa0D`} zX}x(sld-Wz9Bl!_&lYexZ)M_C{B~`A%(`}rGBX<_(iTpsmp}TIY+>6A%ahqf&$7@z z*|TE>;)iz{NalC3M@`QXuA9;BeP9|5F$?MP*g}(IR}~dw$Dr+x zfT$egsa@8cK>^E!N`?wciWiY07$d(E@@Wzc6NlD_)@%aW_4!u|b}XMH$z(HR0Hot6TX zh^!+6K=iaH1V~PiC=e_6!T=C!_znQUUS&d|s}x?S&~eE)H~`IBIs?!c{QHrqbpV1E zJ3#5dusFoo$5&6i8vAI~{>dn9I(T2^dx>_o!Leyygsw4jB?h^fJ92Aysi!ex6P^B7QU9_g za%^r*{aFAx4pccD#WP5;pqyx>BEC0hE~urGR~hf$-=PhdwD(CrG~T0?cU*Y~8s6jW z=p&@A9(hp@nt`B@ru1wk9gh#lL#09K2q_I4>5k)mY%Ihn*Wv;kE<=pLd!MJ`VA7~{ zJERumNH`9I@7#J@ga&C8^;Cl%F=!SQOSQqs{;C+08sKBIO|e&UDPE0Qha`%%ztHjI z`tRVi5QXK%0#@-QQQ3p6P!H&Ad_F9v0h!d3n6a;nPY?3ZQ<0&_)qgu0kPOs-?N6gf zX-4#-Y$hF#;pE{xjoMX9DL+hgs3u*M?xaa)hm#do4TU>6XCc-Pfp*6jtKTM5ekS#( zpeO%*jH;#S0vVFObX$xRR+yHP*x!1G44(vp0Qm|b?`jW&ZrAm)%8I{YmGv`GhNvh^ z>eYzYcgEx=F1Nc25dmM^0isB}A_)?m-<<+v8qw`l9>?Qw^6>iqx-$Xn#M9x-$O9Ol z?u4j=jK-I5(?(3{A=%gl6YMe-EJq+iHoCnnZ1jskjYap1VnU(Dh6`7p{No^BJ5dGz zP7)d_m)xn-qOWPF(agbl5S52X9i@2kEaZ6^H;NA!>N~ov-4G+uiKkGCp+>YOi%G|$ z6?u4jLvy4wBwpO_iN}8`;^{d2wYS7p_V(%TrvC|giYE^>MKm6pXKUJJA8Bj)eBKa6 z#okg@S!~-qMzH(;jZ5>gcpB{c+fy4^52Y$gP8Qj9bkvD@D8*ArQI7+pXgi8Md72|Xq7wSMEsmRAE;)r@$<>fbNgH=dZ z#|}0{GE|Z3up;L$j`zo)kJNWmMK~<$r$VlhaCj#vW&sTE{c1i0!nfU) zb>Lg$@tt1%=YJ#NVQ&8CtyjApL|tyLmlNnRn~P28q%pnqfX)75cv|u! z)0^eU^osQzQ!28rx;-T(Nj)+>>8Dylj^Ws4$}H4oN}?RK=9W(Xk7sndcG7|RkjZjx zZL7}cPT5mYZabvKqi%N`i-=O>jR0=jLolO9-M-va3_M$0sG^FtV%M^|y~Iwgk*UYB ztEf3n;<`H9K^T9Bj=B|*Qt+tT@{Yn$XqQ*4@@bDFZSqi!R27mnD0lry@UedwCs zC<*dyZG@6stdh{npW;APd*X-nH{JJs{mpY#54;LBl(vy9UFtCP&?NC6~&?VeA`| zoYBoaN(A->NY7)!;+X~KSCI@Ib$jF`D!nS(&gi=J$2~8i-m66HV!%X?x}6O|p`&iy zBtu)Kn)%Q`25sF@GJ;3l+6EwKpUvHU8myA`;2b@pTjc|JD`C@-=Y@a`JIcn8cSg7B zMQEs7MoXk5deqI{F!-PL4bDa5kL(-ZUN*b85u~;~+Z4 zqF#;EA4asqs!YtBu@=`RcF^lYM+XYZaO_DcC$XC}AenS31=4&23pRBJ1)y`=CxI%^ zMW1?MWg_8j9_64L-^(#&Da%9T&&2X1Vi9ot?Hk&lr`cf3^Wv1HOk!q++}Kj{`!QT;*N__%wG@(IafPNxM2dx($ zP1hH6G1LwLg_zH$_Z#c10Sg}Fo{`TP=-Ib#9b*Eg znus-&i@kE@fijKJH6g-5raMle8AuVyf004KWa@zZSLMefR>Y7SYqi%1Hp5y@rAs9* zY=#u!S6rGx5@flHvLq;YG8&jsTe5u~_O@~u(|Iv`s4E8gp$r7oOK*@}0D>2e2`)JxN4 zU>|CVg`24hX)Cw04yP^zg)ZYxWRgUYe2qM8DYr6lla^+XZqOOKGbVbU_qsqu>nCu! z79KmzMEi=-RoB5oqHXwzqLH?W_U2)fB~z$Cmh~qvNuo&ZqM|80?!Rkk4n>lHpIElZd5p>_d0`WtsdAE$%GpNcBq#*SQb`<->&c@);Zgru zTJ3s>9iX-E4zHzp>+No`yRFK|r0oj~G#QI@v@=x2SCVW?W7mrS_SlcW*zlp0eF7Gp{=)Lu1yha9Mam}LgiRl1!ve6mSJ^m<&k9A~ZBBVl zhG4ts5KI(YWt{sfXC`%BKDNX-f6dkI(&{Fh7q6v)ECADA%Xq|0|qKAscq-{O?W}Rd3yT2#NOf28u@78fzvTL|M{|=<;Kj zbUc24Le%#*$fs**x&Vhno1?ogJ&nqXL@Q-dm;7U`_8vj|c2UtXNFq3>>#3rVwu<)W zfs}=yuv!mg?syDR(G(uvKh#pUNVLC7z@%*^>|zqU!sT~&M>jC6oQZ%FJIJ7_wU^B_ zjb`g0*OCAJaoS~&mA=PhDU-HCaJ13srrdG_GE^1)gj<$DU9H>*1ywIpZjSsglE-`; z!^+q>hO*nUd&>?SYRq{_EA%as*71Q zrJ|wS^uTKTt;X|aE~4|Phk)G*7{G#i3%w7Jn$!8|KRHoWqHmC>H)*~_=g<@tS`Spn zJn1mb*WV@bJ4=7hlHX^mShGOAJa)f{wS-IJSVa#Rcmsk@>`4P@#es&dp#OX%r6avP zNiXXwp}qbws{9pb$74?!;z*?(57T}$Nc&~>z`6|aq|zq6nWSgk3vQ2YL)+(Z{Dt>V z2=*O)=c#HJN6~gOIEpCl?3`Wt}?1vUf(dTg2;Wd55V? z>6ToJfoJV6Ji9KKnU=j6*$%Ux&23IV0{1@u>M>A%`Qw_s@M)N+ICP5_1G;{Z2oef4?-tNGxec#(G$g}Lv0-)n9ul5mu z7J8s1miJwl`(f9~qGZASfs&I6J?xNK*~m;BcAXs5$4WmANfH$YpI0URI8ge6fr+}? zXJrah>!eUm_B5z-73$k-lhNw`l|db>P*ama?Rl<3mDI+;&}s4HE~>@R&|-K$#UGIr z|FqK-zjh4J6|iqoz}=UaIF~yn{omt3<3kjyQ&OzM&o-=s6za!olBwGDOohTgOYgem z#|OwY6}k0L_*J7=I8j>;0dbp2%sk_s4k_mq)`)+8w|Os@`--3YiJx2I=T7l+@Ah*i z`nlKoxrKgiUqAOwKewBoJJ8QPz|TDkxuLJ%CA(daz!!e14;dj9hYKFEc*(0X3EbjH z6ZL-l6k``D)7Sb@&SimrByekPKl&fa4E7hSK-osXCqI#Q7c>OBf&^-I!^30feRW|b z5amIS6x?Qzt9T8mW3kL<@z#yIrQmrG5zm!o?+g3tBI0yE74?5i#B2q?R=P`f{W^HA{4B$)-U%ETh%*PX1}J2jFKmkir?BJ`?4 z5kR3|6e@0OcUInKQ(pi2KaZd^i3&+eGeb;QzPoX6<(@ZhZjG8 zT~>&_Cg%%-ikkSsf<|U>r~ia;^aVZm<9uP3EU`EBg=H&4zVPJkzDd9B%-n4dM3iM&mP?f3fM#AnPlSS2+5YML10m16f*zXd9>0}oX6$`) zrROo>whO6BmTqTb7<%3)WgsJ+UNbP(g6FxHGj;UCCi!uPI`-Yg0uYw)gJmLNR$i}} zimd~vaSwD%>7~bU-Rydf$+Rcs;Mj*_;8GHVNUO0Yx?0)6F7fPW_$rA=$hrOE)X81Z3V!v1JPLN8^_u ztSXR=^`4TSH&fW)WwNtnObV~fE-IFX%qmnf#@sJD{voleN>IlF71CEB9rtP^Rc7dB zLDf5MdLO)kF6*M;nqBFpC`GG*aE@wUQq?K`Zpg0{uQJ`?DKbh9nP9^{d*G%&ALj~L zVq4HTudqRlfu25MkEw!I`0r#U`E)F!j9H~b1YEEV4M1k)x;$_ilpOTw-W|!b zK;J6`gaO~H0N&}6@%rns*ntLg$9Zm+`;iDJJP%sB0* zs6XSD~!h+wg9bWpJN(wFQGt41$%3z6G23p0M8fIzTC}5-w+g z+SqSW$9@gHL6Jj_-IN24Qs8K;TiSaz%%R3OeDD>-|I@@@kWP_NhBG3a_?ra3%fpc4 zoDFHO$=o;}_iNCo5GIhA5K zF23;Le?NmHZv;u_Hl#ZabgdI8Uc+jZr*qu+QtS#Bh}@CJg=njVj^ZS;4uH_Ft(QdG z3sE;&c$z|1CZ3aJb%E8^3voE^nTlhc-m>{Z^rO;d#Fb(l_?ra39|hMvDd4)#qcEgL z91x@q%mG{{f!sJR@k2>|a#^exXg76<9`}OkM zhLO8gagbI9C99;o_Fh^_hbFI?rH09JyFZkUo24#S+;UE>*oSjS_%1F1`aS+Q9bl9A zn;U9!^ZR!w(%a%5!3VP!e7upw@aOpwRsH zvwyR$Wg-}w{YRrnwQqsDE^|@D^Nc8Ty$_x3K{p?B(he8_c{l{!6W|b&BDbQ*HV1V9 z;vp=V!@OwEp#bs6pV)T|1c+Xr`2k{CUNAsBy&El04zun~79bAvq$#>I5+H6t!)qEK zvO&_-3+dhfx@O>8zV{lF_W})@jGN0w=C;mC(Fg*^kvaDosoWv@4i&O06WNbK(Fqt` zB1W9k4sH$z#E7cIC;>8rOZ4}D1mV~Ka$_yVFb+8#$bcYnW&mL?{I<_X)t!ScN5T5l z>csVrfVcku#FVvYw}l_s2SXrG{v1rMLGP=?<3dkAGO!(9F4M0ash9r~MBI0dhL_p0 zt1!ZF*)h6N2`DT3{~p z+uX5Y@S9QN+7Yd_FG}j#3#de4yq6;2V+CB(Ts;`(qmL4F|2b-}g-8T6>@yWx(!}nH zw2u9B4LTG3$25-qigeDgw`xBvyJ)w-Bs}}%>S1T2g5w{)h0$ZhBzSEM>)9}KWnxry zip`v5_SQg$u1s9MP)g^xnX)u8#-f5nDVSDrPFW%Zg+e|k)U_&smgSNhb{!s>6-SvC zsMJ!bjXUG`TX!%h*hI`D(nE>Z^6S;BXqwExJ5ByNPEpoo(uY;%q+4B{X!QHgKyF5W z(ou=ZtSwL#ZrLDzxX&UM774M&>A78JZpz{Iy->pQDEV_TVMHj@_yvaS$0tKs$89UD zrUJF7{}#2-uXT<1%*&QmbzPF7d}t`MjN2RdVn{N$M-1)>ful6pPMX53&H1A?rwltK z8Q!IaH^{@w0bWs`Eex5BU%+;)vbN-BHHfRD)u57b_vB$|Rt@&~Fxf*Z%G%=3OK8Qy z;j7J%b;qK#iTP?|sQ|RrK!BqDtJM}$pqjQ5t8>}fT{i$r8P2U5O z5U+lnTLboz*Z~pJHwH=1VBqxVH*+neL9V4_O?TH)B&pX@cAfpV*HS`l6@qPpW+$)o zm&SdL@Vy2o(jbDbg>{mbeC?G;H18q~i}qZ@=f!mKei?=qNVChU7Awnoz7(mAZ-&A3 zLx#-58)tL@2B^JPuo-!4qrtf=q>|e{eCh*27U8iS5mr2ctZtM-6Mrg&^!g+SSnq)4 z8Kv3Zx5gVvfi-uaMaBq5=xZ$6B)7xoTTvnw>f~9-)Lj5X^hU4{15_<7gb^+_9rnf( zLuM+(IV#KR5f91F{JEXniZ*NN?{tdTZ5i;BYaz$ZtOT|1TO_$P)?rAj(9PGqYBg3Q z4%fRxl2E-rC5F&7@dLkZzTS&6)4V!Q$v$jOHa@5@y8$Cbd43P|uWq0|@CMnc3wLJ) zxyT9{@NQ=__|lPxtsV`?>aAWq?PwHX5JorfUxc(4;#nu%qgp6kI$Vngtk`=&$2YAM zgwV9rm`^MfQ-~*vLOR>|h*=^5AZ2vKcKMc<3;#)LhP>)ZN$`dy%@7*@TFKUUa5Qct z!4aG0kE%}@wg+T|0c1f8bt2VY&pGq|KT<*hzefnveyEQA6ekdK{QawBrh#i!^r8@* zZ%7BvDHrlxJm~;wWPAV5jKQ#@UR#)h%5%OM_9D-gaD~vasvM2*Bnjh$J@3^ZU~{T( z70`#I5FXoaSVe_aX5f+Q23=>85rq43hEK*X^m+ z#TG2eg_!J#XJe3{u>ddU4gWUab)Xw+dKw4VVzpI0BAGXk=T zJiDmP$GL}%NNKE@7V9!1 zrFI!qpEg&1eJ;N~kzaG=*CP2PZE4yv`6WI*ZKeErMSlGtzn;ObyixC`V9|ap(r9R# zB)dQWXJI>)y;mQI zBp_0HA;8(9>pEky=oSN5)J-U9A3o>{_TkyyY9Ve$N>^Gqa{`y&rs&zqQa-1_p4Kup8Vt6M`j_=zHlqF1y6j!%6QsTXV{4p#h?8I$@LRBVPZTP!Q{KC^Wd zWTvMuY0h{5O=dNq?#^azOd&HzJx!=Pd&m%gcs}&UBl7a!@PTvxsk3o|X|hyInvk1|qS9a-`2f z94QXo-ded?D0z=(bXI*x7y@OI52X?LT1lzZqltWrXhD(FAVtMzzQ~8D$j69`!2R+D zip-?l3sd0A#ASQmkAkrk#gaZ4jLaD0l%$9un{uat&G{&2Gs zIYUJL(ii#823onFiF|;H%%t5HQ{c+PtFnl1WL4x$U*w9J6j`X7$RmHEj0%JG>%W+E ze7?S(NrlJzXIffr9{UhZhMbA{X-$t^CG!r1rb$6YJPUW@EZGX1d4 zG%4`zd>yZRNEj7#kS0e{YOF|5s8S~Fg4ZTv@Vczwhm;>mB-WSQf#z5uw#C5j5#{q6 z8dFPyM~J8VNu?dTrPpzxQ*P{xHwj)u7Ib4$-%asIcHu5UX`Vp3W7kx1e>pbhKeCde zOdQ4Ag<{wl-uzK2Nt#>TsCs@I-}k3h`9o0UI0z2aD_5y>Z; z*psNb6*69T!IhG9i|AR@#=SA{SiBKKaN~z7eu3s(v_mcck zOST)f6aH;CY+L-h!|=#!@QVSD28A=ffX{E(Zuri5qZUiQjG>v_PVgy{8M?v5S=#7zE9N>4NP< zJ8bH6WCEt&vsa5iy(mz|Zo07>uX#O9*!o=2EOcefdB*Uxs0A~KL<^2%*wPE>YQe{M zATx!*XDb_MGRJ2U_=u~fj+OW0UBy_JynMYVCXSK|4narx*Csm3P+?qLEC#5U=X=BK z&)CuAu++W`#M@mqE8I&qQ}h}fumvpWOWVIMrTS!T?I4l1|9GVHV$OwzrA7=O=lZGr zgLFf^OQ+gruM+}#@c*G-`Fp%LLpce1pAo;EMc#dct2IgW0DPe)#R!6Xh9yr3ZgO=} zxynthqK#uq9R|UI;+D5p~Ri9qY z9&)+?o)kbn#_}#y@G= zFHeAS%ic8rI?M8o63~qjb+o1}dkqG8&L*yd-Ugsx95;}U08%@}!>qCFHv^a(EpPti z0DaH{b^XYg0I2Iso&~5>xnW)z0C7FaIf1-1iw0ehSKGzoz^()y(@&_O-gHe$%$8vY zZ39GlTHgMEt{X~2XsoKifXq#;8L%2JqjZ^u5ckWysP$$b&xNiDfjk$##s>0S5F3g- zhzkko2B{cj;`f*Opc=MDQVjhX(5X^r?|R1t`iKBDoBcTo&1S!gU+A^{-#2+$dI2D1 zJ~|IQuq`i!>0DQ5wdbP zLRmg4kNs}YKV6Aq4RYAKxKDXSqu=%H^Cmm{Jdnp;dLK9)2ciw*I6|No_4Df9ov;Km5KgM1gkc|Zhl)(^+h-BM-N*q1oY6vtsD89gdZVc z@6h=LT9hZoI8%Q^QhY&Mf78E@*57f-KR|!ecxRH7wwN7|U;C*nS~29g>iY?UTo>|O z9i|GJI`{6g;M{_sa(?VXXHnSI7mMJYurCM7^F*4*0vTnJksrvQ>~{n*;sSA1AcI=u zk%ww=1`18If5h1Ccre^njb*)d0Gi7rY_FBU3nyjEH@4K=Cww9;LBBh(3n})Wg><>s z0G@0s4M1=*+ld_Syei(`A41ag@2+;PuV*zX@FJt5x3WKeo70ys6{pwd(^AKNCk7Xy z=JDJ7+j)FE=<&1G(Bq*$*4xC^*szRsHm5rN3h`gwYIMr{e0+Ul;iAF?*wxDBcpvS% zF?;{NvbW!qUAT}Gpurw0BB)j-cEsXsz!zGgRwU0ZCg)uGG55GUr0^gHT9aBP+$Q=vl4dQCQbf z`edWNbmi*^2L3YGZGQ?0?=6U24zRtLJw_PVZ4eM0HW%JN@wA_%c(+_7;_1BQSPEqG zmO2w<1}EycB~xVc4x%l6EgF;_TP33CIAEC$s5u1KasfqjUHeQenkZV%W|6&fy~X&Q zr~FF7{H_;%zTP9YkXeaPxj8^_yioKtKJpemNH~1E>DwPAI}OuQ@drXq7QEidUFR}; zNC7fG=ju5h=LlFmF$vstXXa0I{-97Mz?*9Mo76gxT2@?yjCC<;?+sx8QI0+$UU4cj z*&D2QS*)jVaK`yU1PA-1H|SxAXQ>!y%|WAIC1Ut-h2P_|@Or(9!pQm{DQc|gtNC#e z_jLaD242S_S&P?Sp|=e5=xc!52ieiE-VGE3-(blTYMT=toO(}tvh@P`5|r0I;K*wX zjt6k)0jqLA#NO|vNuLWq(5^EDB6tJf-T(yEeHsuj9z)ZhKp}PR>t}e1pMpG#LAOm~ zPawl6Hv)4zcUTx}_C(O;&k!>uYFDPz9}UNmpE8=@@*CU7r`W&?9Ta)8O2RjXeZNm- z;FAMF;azDNop}@+#K_kGtH~Je!5+<(Ba{=9+YU*4Sm~uXaxV1576Svwi-_c z%oR=g;IwX5O@%f=dg$O9b}Q9zx0+ag^U4)3(Es3-@N>m~<*2RcPUf#+71fAJGw|Ep zGp&}4HzdOjO%viNfmTyheLz#W)BB;59M;*E&q5oso1yL=Q1rgeNN7I++9O`{9|!3t zzykQ&2We{iy;P25SEdZr`oytv)+ZoXpId$dgawWr`ieI8s?R{PO{qj;|9E?u4c^{< z32UB14Q96Xswl(y#}70KeSCQz{$3^dZ}GQ$;Thq;#l&u5;xHSBtmlKc4q4-|(Z(b5 zqCm(Q&rGU#T&%0rLEKWd0eB&7NZpeD#;{fnWP^Y(Izic*}w)L|$|c2pJ0 zCI4&9kIV1R14Gq0`kQL5IS`tnzYj7Be|4C z7|EUch#SdCQb%%oJkjh(PR54+)0v0MpK3CWvojBH_i0jpCw&q;?r^&vcWB7qafdVU zr}h&#>a@P{YqtElM1D<`UxVb=Tk>nL{CZJ-4Uu0@%CF(_YrOorTYm9`Lq2}tgoBX9 z2?vzP3JO*&Kg_|;iV|ddCmaU6fWBE4G=D&@$k`o7C$zo06Am|nqku^1?EqJTozbJa zx?<7ALP_gt)H|#z|Aa%t7Dp^hVvBLd(iS=RqqewMe$f^K8LFRnYqLk*8#j4Tbv`5)E2jw zH)9L=IGn#x2GTmx8DY}Blyr>< za-x!E6uneQLjtUSBfsueo$XPjQ>73qTjy&YrqpzVSBprPnjn&Z5=&ProXr*2MKSCp3ZL$v}+FY}_(up3L^QAUq7Hi~WA>$=ZMmTKv;AuK_iIEwxh_z4WnZAO*NpjU0{0%UiC(wL)%d5<{ zn`PS_r)}rBFsm9Hp_~g=v2=sE5?wsRKv`wtf&jt0K+p{(D8-2=bTN{mToe$clVG~% zH_m+%F3N>0Qr+^6k4Rbf7DV-}bOFtu>x~&)pS}!ZPjC%t=L@TsaJASMDC}E&7>Z&NHR=#M(SbXdOUI*1>T&H5t3XV6p<8`^iwj5gZ7D zb*BdO+b61DcY&}$5){Fh&TmY|yg`MNj?X=P*p{A5)|TSOHfbfcLLHpRJmo>jYPB>- zoX6v8b>S3UXes3ij9Y@X6t`$CMz`WLN0)sOHE3sl5x6M0Uh^YI`raDKzNd?Ay}9Fj z9^*t85L~t~CXX__dYG*R)1Ozrv=B+}1siH1t0l!;W73VGa+7l0`6F7vVKrQ{wTu%=wRlwp^s)lC3}Oun+;7cHpiV6m<>(xZF%`)v?bebcV(lU=^KVPPu9Xi zYSb8;6^{#Q|8i@b&wfgQQHuA=zT$6EZL5j^4Cg;IKQ6y#>Td{*bz=QZWxwnxxZWzv z<0z`_D8}aEj9W6CEKt~=Tg65oi|ZvqXfU8%Fk?0TQ>nQ{x9mW9o*G7imR+RCiu5q|613&FJ58L`RzUi8)$aLU>zG*vN?^~PtNdSVEAUY! zZ(kq~S!Kd^$`byjqb)y`zv;@)O1=#40JHPtb^LCxd%^3w+u53{q^y8A_WaR>CPJEu z5D$oOl!{PpB5asXR&gP5oQgnl7pn*W!}q>b1e#~fn_$V#pKFb&%2gL@FE_4Fan+q; zdZ+kQx%90I#-Hj!Pqk2vFD7^0|LTq=C{rUPPotEf+_hs`W)^^4BhMFPZ35F?bVHK3 zki9X0Ms3C^8nrpkM;qgzQJUidXcXyuK~oMF3+R}+;!#V}3{%E}lY=7&_b&YtVkS;=dUx5rLQwK|8KB(#p z2-vVCZq=`XTM_pCL!}1WlEbn$#eg;ZVx$bWyYZ%FG z5=E~F3Mv-3sEL4r1Vc3Ix)PNrHi#Vy5(@}XmZfe)lu*=&g;2zI2|@&vh$!FhoHH|T z$%e&yzyJ6AeICiq%;|Gx=1hGVuTtSX1w4L`%wQaJ+fMmHH=gJq4xP>wzW+LiUnDJ$ zzN0d(BbI<5FFSZP$Q+CQMUM-dyK@#XSDnn;FBt>vb33~8RaGD5is$-YY@W}7x~uk! zo$Pwr?Do~ycE6&yrS}w-^Bvr}c)1%F{#PTqe$XH?Z5oyy1h_BU}=RgU(t265Gn?Vh-5I~-5>*(1WV zF+WpO+0W(xtAU>#p0O`}R@Yub?TZaJqT3XAQ8paF@95ZF>=E7h+fewDB;~og-+SnL zY|{O%xM635M_Wytl5v6fMl+(V`qbIz{awB>6&c1i{ynKd{iKQ$jwVe=NFB5FQ(T)5 zwPUtEUam9<8LmG)`;WQ4@shIN)LzQ}Ef93H(=1G0lC{&FKZ`A*#hHS*kun^Jhc$v2 z)rjqS3*t1DL0&)T1CLd&LWa?=`9Ifh@rz2o=Pnd(y&T+rd*8!t12PP^XP^1U*6gRb zl`C$`H;R==w@1C)?sszQ{Li^VgKkcZM%%G53yWZ5wB$f3gvba{-UMetibjHyt z<6V_OR=njsPc>bM3{y?}J#DIKpGWwGlic-`b~+CT;yT@x2%WV|IhTo$?I^?1o2|gb z921@wE1>P`jJB4_szH{^2bZY~Qm$y4N4Y#?809)XWt7unda5zQde*Jm$xbPQmy0Ud zwv_4Fl69^_s5XaGKn(rh64ZLvS7G~u+*B`A^CryT;<^1tx@_Ua!fFYi~{W(2Phth;GDR1UPoGD zEafC_t|2%2&^1y`^Jpy|?@cg?BIYeKn(8sMu3O5qCFhwB36#;vQ@)9EQuC-kk&^`2%11o6Oms%0cXx6Nq*xCvjC7xzQ3O z;k{pR5#_lh42@=UG7FLL5|NNWL9}=d3#@s(#XO1x9^e0^Qrn!%MvyttTA!8G^P+BG zC}eN!L=CtogCvNQQofp^#%OH7WgpIoTb)D+PGV0AxzR~ViD|rOUP^gxB^Ex&N-%BV z_VD{GHG@K)1)p+K^VraVlL8;NUZ+x9iJEJ$RzfG~3&2RoP3g!o4kyl$Qp#7tHxuFK zat_XeGvQKB;)W)2qi-tV>u4<;cmD~}QHNOZicqImRW9z`q*O8suduAK;hko`oL zKX}IV$w%OiWA&et7-$2ENa8pal#^%!$c-*lf(~23MU>|jv}hCrm6-AQ`79E{fLXYL zlbZOuOuVS8;x$HiaT1+RL>vuP-2%YV~xrP($(xfzMsWr24ai+ciBV?3bAK?%t_7ToA#U( zczoqlN=a;LZXrp=kaU{&wMdhS=_-UxpqP1w@BS@DPT|^6JAX+5eX0aI*f}JFSX&#p|5A(#;LAKbW z#a}ZRHyv!89<^c*t>G7SRdW7(49m$$_1aTN$$2-QyeZ9SAZH=FT`5skuHIYZWKghv zSXgTwuQCtw($ip+CYsS@{YX(SCB{GzgOlj4kQ>#m`_odEkn-H-+6}*na)%CbBq!B-QQE~u2)E1z+@5f9dszlqh61;zK4RvY{D(}wXn^82 zUbt~mo)?H}S7;&JavE^UaB@3CxG@yCbr5cvd_cHOP}~j|Zk$9=f?N~Uz3@4!O?hrh zvhVWoo#~27)lm$}NqLbV`igRkT%l6dfXdy}0_+!>-eh?0r_w|GV99VoK`+KUR;wU? zmy`{ZG6JcXW@Fy?A8u8186|G@5V1HZ4H_i#z1LElG=)I3#kId=q@ScssZrhQW`_4 zvzs|>H#g8V3h82oD&-`mEy#^lsG9hkPpOnrp1VHR4QG{!vTC4ZZ?IAf3f5~S;MF{u z+LCbpC#5w&cM8^31lz+@aRcQDHaI8cS%>HfCD`dASX~3bE)~IuvJ&h75sX10SWsAN z9(OPg^Y+q7QtHEbA*W!ch+ysM7!hc+7Qr|vZ!kqSDZ!rOLpA*JlG|eC>}RD!SqV1m zb+%Z#B0627Y$ggGRqeP`;PL%mDa`<|Q?UHMxhi`p8V@p(>(Qb8u9bMlCxUe&NSF7v z6~TzI66~wjm^Fh!lEa0y=5dY)Ch&2qUSjA>pgRS-PXrslRPl;ZTdqn@%9Y^gQA)7e z<6M+OkS@U<8pb|Gl$BuTiC_#0!Nv${CW_=_=3!n08X%cuI`eSCRtH+IP{QOC|srx$MH;2?jr{&-;S%# zdQ{@-RtNpXarIZS^g5T&P7y)o25AvYFNDlm#L|_!1zCaH#qtJ4S;d_!GIz_P3aML` zFX60d!-&g}jzvc*weA#ZF*mjGM9n^UA9#f@h1wC4b#TO3}&Et%Uh6!IZgy4I{z6;b|3@>#xWc=E)Pb+pUQQ8wp90xJ z0kQBu-rx^Zh09T><=4v|zZ^y;kR=$X_@3a)X|c5rY7O+V!vqHfz4q{qP|#}+cRMLe zF%*0%>dtmh@Tutw#@4rQIn zRdSpIB&PC)+B9D=G<_k~vqs^c;sB{rc}LhZ`x=@V3V-)hTlcOiubt3L zSIKVyqVzn(;CEAnpE~e+sl4iRgYd&hZJ10|7ClKVSAhO4}72za%hm#DlS9eHIcZ;2ysy2{(=w{Z(p-YX8c z2`VoNIAzKOBeZ3zRN*}igf%KJLJ0PwV|@Xl@Cyxooq|2hfxk!PWea|dN*-e4_c8eC zYEb_bQKmLPdzE*v;QLhaOA17#qiAOEyQ#wW9r(Re-WP|k{240wgpI%8eyx9wD!j*m zKS1S01V2+H``Y-0249CPr#bM)Duiso*Kx}sHhv$CFR{iBM6ybG31JRnObIx?p)gm} zKFFZOs9&1nK;yI8-ycj0%Ya_yDCALnf+K^6_V)-{2!EKb>>=aqU%3u!w_omG}^U1jLgZ=u}pL)q0?^aVF{I{))`Y0HVPVOBkic$W&Y;satBGkDIpFLOekTbYNG; z&>SNCa0hhcTVcI!WiQ3$S~=>`<3Ta|YlpB|u1R8+9$uk3*<6m)T#O}`S42=8oxm`7 zH@sV&*i`ZR>;d8T#-80|w`BZ2Tjw#tB%9ycme+0`elxmielEl2dui6$G_OrX^JdUY zW%=@c#`60cdSc?QM~TY44{p@NU$6D3Tw{~__~#TV&p%bGEc|X${QCS&Ciah~cioay z>n&cM4m0;j#j~&B=`!;nUYfz{jajyCOrggvyq%Lo&Wak3Z5&niLMoc{9#0aQw|Qw+ z+Hzi!isn_xX}0pxEWg3%zWt{Zy8nGLxtRNmg{x=Qy_s(5+5a}gp8;`&t6$6XLJzm0 zhZtx&85TrmJqt&D%VDHhx=%P^gg9(TOLo{}xl9*8Go*}7kl7yZc% zoIdI@OMR@lydwQZBX!M&Lw&V(VWf}E?u^r86$L0VPkju%2`)=(1Pd7fH)r}GBSf!J zVl3wYv0#9J&;a!az-!xM1k~eujBtngB++(Kozuxm_GeqL;_gqr zSKG38fb8s5x;BpOZ}dt-StGTfxGc^W3%$C_Sg787t3K1F6kQJsxn-DSmzJUQA9>8A zn~aQuZQRB@#rT{ai5VYJ{09BL*YW*fFVBoy zj421D;yKLlbeZy0FU=a8rau+UBa_oyUG1@rqk2C1F@mLpOGWcvpxMZ%pvREzw;FN_e`usvG-3P0{}G=Xup`MBQfyOt0F*pq zNR?fBV@f_pDn2{6C*hNJn~}IxLp}rT(jDJ7s*l!w;O&Oi;?&TUHuR*%p;i05c9_`e zjAS|t9AfzP1tpKIVs>e_lzg@f6+WMDOJb{bcNjh!ziYr}q+MExQt_0OD-PGc$o)B8 zFV7hV@{O!GJciSDGGO7g$*1;t#o>(C8eMVdyDG_w!_}QUD-OE@5KrQ-wuAS+;-JJg zD-H*M7DVQeaR$gV7#W}0)Y!=ATyYp~Lt#yViRh7-(g-_!I_-`=(9T@_$=RzseN>HI zVQp7?`zQ_@nt4$=-Dx~v!?#IMs#bcq^s`akHz+a)jJr#m?WQ_*w%gcRZlT9{$(7jT zZZYIsdiM3AST;&mpfolT>Q>z8E~BGQb8yEXbFa}ch>P)8D?F-q8)_)ctoB;VGv}Yz zKItGZ&P%i2rg=*$nnRP*JjF}1-!LQRA*pB{VQ5Mn&bdSC@cAuNhmB6uXD|2IrrPHD z{5L6V^ZLJ%+U8a-&7A)jJuXf~^GZWg`Qn~tbfLsORheZI{O#-1o@3eIivga*oj<7Z zn8D#9Pd7mExX9#VlA7TrFHMJw^h!nZvg9;ddTBabr1mSXY92X%KRT(LGnaXEPrJud z*R!c;zLK2gEnb@K?lm;~q@vk3In6`7G}G@hG`Frwq5H0*lImXZrAPPlJVWz^R5af( zG{sdfyG@#0$69G}ugS$VZ-0NWmuJl8*)bK*(+y8o7q{&Tj~y|eviHcL-8zjCNwvxn;l{Td} zK*V5tLJEE+OhLu!fx zMjMK0sreV!(5tIbS*61tJh;gBxHZ2To5Cbe@K~dAjFIMn#_4NX9Ud~!S%B6$rs?iq z!)4lV9TZ&j3(mvouFF-ts;cro^~r>`39Mh%KxA zO3as@yDqwd%W)g(vQ4RGp4B#~%Rnkcdr2=af*#!%G`vRo+x;$VZ1wJg2@(j}+>+l_ zJc#Zpc060(RivccRovcl?{^goH)rrpB=rvZyYRHv8qTkqjldsE!*Q$sNw_iqORKo{ ze|lHDSuf9hMm67{Wqf+5vzX4JBI&k^U_$;e%0;V*J6?#sdBm8A+LVYL5SK zSr8}EC?yMyXPifdQ#trbUZ%b+SSA=mMuGNy0-%v1eNyV?Ep4!>?z#!KaXeLK+}ijO z?YirmV9Z-qKmWQ2o*gM=+LH6h0|d$!$p~|I5hpc|W0*&gz{jm0snizsw_aMT2UaFcNYLx3KUz#5qz*`AYasBK#E2iCZPL>?54S7n_kA^(*1& z`$)j0Jh$*Ci||ZaxNRE2(lRK7?;^r$9$CzT?~ReE4|WSb^doh(QQQRQ?DkVv8*e*G zUu`V6<^T0&Hhvl9ptacrSKPt{TRA6geY}Yk<0NVyxzWRvV&^^2icy|hv8#JaOSOp} zDvB{EM8E1`)>HGik9nx?-o~vnsno8O2mdX>$cNkNX`lXpPmTtETx~pq#J~k)CFmg{ zC@0YdNYFEtpie)?f>NGa(6=)os9bHF8)A_d1`?K!M)KXGa4Glgyau#%iR%{BT8ky@Dji)0{zR`)65ck6jYWBG3CHx}T1}?{ao3*t zY$OJSprZ>o$wZNSiFue?P&Y|wCeWRNEfK-G5!Fb9N-Ku3B)p}SeID^NH;YaZvH9qr zx>+<_i9P*U7CVRNxD31a0v4MYh}h%vSWX6ooQuYCl8GX@@nB&kwRl0a7)Vf&2$educ(f;LF+tH7%p6>wkAF;Qk$8r+C?H6e7CzB}8Hg6q`&euS zgq(ZX&&sEmcn(3j>T^vGZg@ml z_0BK-hi$>2Ao`=kpG*|VJ?mIofyevDQp!T3^nFQcZC42JKoAe}R6(kyU!41kvCI?q z`xvT}lj`!)b|v2GJ=9&# zQpw5RKh~0#>heGuidaCnh2@6v0Hc1;2gg>BLR?&q;=4Sb6U;FaXaY9Wl zFZEDrO%rM{H?{aVfWKGD!^TwB)+c&4MYHm$U+#C$Kqc+?e|_CSP7U z>M<6+hJ^8pV0@nX3=zJH@^^BiDe@gf0#9#FlU@3bV!4_vtpbQTo@FMab!)gelqrz+ ziHd9(ZoC8=hKygO3MV@7_57_|@M8+(9vlA+gRdu6*EsO?>}t5+>)F+5HvVk}KT}1z ztsVG!V$)6VeG25)`&oXuywt%^C{e{LP^>MWXBS(3WDDddkm*he>n_$d&=GuzgMtp@ z-xUgFio#GQg)&1yN7#KG6m*zI(Bd6hq~mAa{9$N`e6^73t(ZyTBgs<58}VS>ub z6Pg26@+=3)aFutgP4ikqvrHB4=RlaQ@-l>GiAt`ekXQ6P+~Ak1!i6Z*cABg5YQ8r$ z@zX`xFfmp5v;$$8%A0N@d}I(ZxLe2ja}ESOaz8`}SWZ#+y&NDlDzA$p&!yY1 zyk?HP_A0ME$ZMtQ6us{dit0Q)uJ8QLD7w3kRy0QudE0?7K;;OonZ5sX!z(s?m`E`SViO};Ugns+-eUHRfE@Pd>NgZ+sHCRbzn>xqO5xj+A#(# zMuLBd5@ie-0)AOdipdc0zN3)Gfig!14+e7yT0Cmuh01Pn-6h`v%H8usfNDQhb&Baw=tYJSmh~F`s&=#50HeKuZgI zy$7TBy%gp!h57CGjG638%CPr6`*1-!)Vbng_pU>GMQ-;Oyd9N{TzfCMkv2J>A?Ml! z-CXXGV5*Js#Z20KaG#XbI_h1RuWj(j0O#s(pD^ivI=iOXJ-IF@2A%&MnrPpyYLS+qdtFa6|Yd$@be|YZ{bq5TQYt>PxlyMIMd>YvvP*6 z25mPFzm>Z+KMlY${-?b(t8JQjsc4QhG-cc7c%_3+bVyeB$9wq|7n40$hy5DxV-f4# z^Qc{Cqb&c(t2U#|@uEx(87`B7V(%WAy&lKL*^L)VRm8t-wCZp4GHCahVQ_u}nLJey z{8Lwjm~C@F_@dmZ`PqkFJ9v1m+NF8As(+%FW=7cPk)MiYL2{az zUYaqR=CP@0o}8TK=65~1XFhJ^{NjTYx>x^^RQE|`m#vJf$Ul#JB$Z zntizq^?cz>jHz^el*s*ZmdCQAZTaqdUt3lL>7$6fC&bR@ZZw>U+dy$E`^x$~{+X4I zo)ul`@HC|BdWSyiJ*yaGXNQ?KUITsXm*m!~(>uUTJ2-cMX^fZS1X%6AM>=Y;zW4qH zqKz1UtApX}n7X+^(%rn17Bl$skmaw#{wj>9xR9*lytdK(0g4tHy|!`I37%^kyNR&G z1$Xq|xS)}*I4ZUr1;l~WAPU$uH|h8e;hncORyBk&W1Z{9W~7UIJbSdaIKsA7jdp5} zzU6U+NwzBtnXX+y_aB}P=Dy!`BNJa~tN86$)aZED*2^#b3DY#{-%G)-nc=4e;+}uO zRF4kTHqF;k(VYI9TZgMN#b(_^hh*c~)n0xz6O0aLHsHr1W_VF@N(@SqCr0f zNrUp`G{<<>XdklUXJ;Q$f10AF`jAa?oPEe@PwB*7Vun_8wmEv5k33K(DySz{u!Ffe zhi=*bpmW$-M4dzOcuvV%ae+v5g78WfELFVWF_~k8e&O8|&h^H2wERg?4{`#p~t48`B-wAmw9PAM(8f7 zXr7&%=I^h0ba#x<-@Khd_jSMO5qj@)(oN5EN6FVAWN5%)pN0=GJa~}INl`{KQH-E6 z6Mgw+GZUrRsdFZZv}-2X?!LXxL|c5HWF~sXPMi;NzR1wG4dj&(XXojApNZy(K4vER z^Y7FN$V~JAkZCXm-9NjrF=#TabSTsu8_Ih>V(<4MPJGo(LGg^>?{7)kS={5L87nn3 zuS!L;e{!0~cxiTf#?bux4R5V_bdK~Hn${do@QNx>>DQe>*VugkF#=3Ve< zaI2!q7Hi7u+M(33XWt|va-l9WF2Y{*pD7;8O|?;SlB1mGMJayHa5*M9N((Pa&hrLk z(`#OzV8Ong>=7*E1%vXjK@p2SdbW7U;7`O$_?xi}TTr2w$o0`x4J}_|X~9b?T%Hq2i+>alXu+;0|@X5;J{{ z<0Wt-9mT=ha3;9VKZxQwkKRiZ=dxe=OP*Tn{*p1quditFG>WG)*qun)Fh70KL$k`J z`BEyHQz>dDm4P!us+}G62qN@)4KP3=YHj7?>jQbQ{b|a8#R_@~HUo5Nsm~ zI$=I_EhqI>?uW#~7OOSdjeN81EJyAQU8yzEw^y|I_omC4@yEKMq{jmH1{0lSeTkG; zTdg8a^gAW{_Jw>dTkozODq3<<9miU$AfMqAFQvRU8+K|rtu<@e&DQd+%UCT2g_iH; za#Hj7Vh&l7&u)b`H zNWQ=X(qz@Aq*(3*qzj@)F-+VVz+&YVxMdo37~71AicIIQOtRVhAhQ&rQ*qx2p3kTa2Y#mCXNz1vBV838tmK+^CtIru zq#V}z?og_o+?Z;{FJ8j(@aA^SRs5SN?kBPVEN)eDeo;ER9lrmCWa1IJiOMIQGF0{} z$kqoZx~jZr1rAsBGN73%dxQh@3YGUXKpidT8e-DiU=CDJ=Q}X9PhT&XISS-R!u*`O zL^?`VKpO0CqlxF8AUN9dHeLywXAMpX;jBQOK9MkmGJc(nBMSNA4P2My4hXK$Wdy-% zChCa96AlQj+GzxFn$TdI-|c{4!-oL@vDxrf*oDUWJ&}iH7&)~y>{vbsK?8t#D~$Ff zI$@B)E=zt5E|OtGf;JWCZ#L50@60-r*Hmcbsp>tnc7l*;J|MVT!8(F@B?^@A?kS#P*lP`v|@f2MkRv}|C>oFm?iyD1Q^#?W7A4JcZCS!H8D2;bm z9*ktyR9w!PjCAsW+~m;_&`0T6uxX`R_k@;*KEplPU=+NlgV+;1_U~YeUxT3~Oa!J_ z)|Wd3cm=-yBfr5J_kHlY_B@9dzd;$w@fo_*k-;eA30)j$_P^MH^y_x6oiuoCCB%fc z(qA0l5s&qCXFFEY(=p;->TNSx3uT4s=ovG0aJ17*?xp46XtpxWhtvt{H_;+=3W*;W zU5e$^=s*Rth6hVIp|moab>B+*?wo;EtMp~{W};B*%Mf1?gjy}FCY0kyV$t`rV_4rt z_UDv7++Kb;CrNv`;kA8fFJ~GkzPw596Ph!UDiud;RnNEu$%eD)I|Yg3I20*BZb`*>8~RFt<~le{gpz81RI&MVkXI#L z^DA0%t0+(o^mHcIH&^dBm)mv!=ZD-M11xUMmHZO={h|DZjJW?Jzhm_K1^ErtasN?% zv&lXbI%SkULh`vHUO;~0J+3bru9*LID0jKn{SG0{briBBogEo0PCG{i%XEMvg9ZB? zL9AxL(zO8toxvimazL=0+dqIE#G&htLaR}S-Zn@+vuRB;o3?+n@l^zGzQ-4( zq|9vA|81#BSai=GpKmUPdY@GePwmg|itg=hv-KUoielVV<{g4Y&5h^uCVZh8WIV@g ztap=vfB2WRr?xqdPI^aw+-6FK=41grG$V+AgCU+1jGIFVD{+d?|HK~v3F-?M$f5ci zDwmNcNC}q`sPswKN;U-_YIjOGbIPlnuz;^3{?Tn|*CV{h1qjgfb=HQ6yi) zjGaHideJIXwuen=ZYa#BvTh%UUhApMrS@_v)@m=LVpbcy1Pir8aVDX6$#+(`-PA}d zTt@k;@H-Kvx;D?Wnt94%;Hbu8jP)Aeb)L3Z3DJ`#v#2eajG-ja-B_Cpjmwz-*fatx z#1%Gy@kC(ULUK?O>5bbwl?9yBk6doXHTX9ip?@n1e>|#BsB-6~dAnMLD(BU=?>s+L z6$)%tr7N>nkzx#QgWtQP1AW{pM8;_=O?36WQ=XM4QIqs)3tO*#G#7m=bW zBv{{{`)CHd4uJBgslvRNFvaqh9}dGQ%yA3JV0NFCfj$dya$Sht41u(P-9@ocO>3_V zQbddj`On!@fs2tJoD>YVUR1O29nflCJmnf+m>!MKuDg`fs*fHHrGOy%jM{Bs)NOtX zpoqu~f9j6T%}x5bhOffpv;+G(HFD0OXdfM1qdRvl=(#kBw4wD}00BupfJ2Y&$NJkvg0BsZnV8MNF+)TegO@`IIunvcI;5WeXS5L_i*mkeNqvZq!5@ za9fjOa~qV5TVI=7p_dz;sG!aTQ4XKnpD~>NsE_-li+@>L=ClUiQb&;jDBVVuBG^mJPuX%vlaeXZInyyd+TkF+noS8Lt2r^RjLdCb6+508)1f!X|DV zsNevM6IO?Dt0qOXSB~3U!oqX#7OE>Q%7f4Qqowo*0u`VMoz|cUE#9S@&_&G)SOtb= z6$+Fqy~3`ZUd%w?*r4Im+3c$He%W2TrX(A_4oSJs;;=g zqw38ru4T3tZSx;0V^>)IM6%%%MMI$XHh((*t+>z@VHrO(Y2CLEB3$7W;m7pk^_yJp zfX!5Ooqz94t@mo0Njj_e4rVInwp?D7oNKTF*W!KPI@rr~yZ;~6adrc)t@eTI7Mg@Q zbsgj2s$L8V9oU5+t+7j z2uT%xeE}6yJGIX+RWA-~g)o8Yu&=PbSzfETM^k8j0Y3YNP<%?PIIz_}Gq6?G^gCnx zd-zF=e^_|Rid={h4IhHJ3UXyv2gCQI(cf^7tk67uqe}?pUpF@cE^B>KLj5Q$kzk4+ zq_MC%%(4TMw%pJiudzNtKvL1~?CX5dj2SfYuCX>0wDw&ZT1Y=fJ=xlq6{;aM`yRqW zlzciS*~vbPv-mb9T7v48XyGi}JYE9PLomlUjPfU6=gUtE#sl?`4&&Vz%a?y}Fy4F$ z!Jw@6K!^xSH-CyUU_`M}3$coWvbN-(+aRAPV3lL|MnKQAm zm4FKF%76)|lafQleceD)lL`T$0sXqC8>8=BnOkC@MAOii&Edf2c~-mPKpp=`FAn_5 zKhlZ=+wh|}upI%7F-r!oPO{A)Fw~`Q;qZ{)bi~l&xtE`HozFt>t}N$TXR}80WQLYD zdGV6Q>X;haJ3oozqBM_)V3kcG{!3_HMIS%X3!)J^Ovht>K<+978Q%&ACe{#nor5!4 z5-Gjd+TzxY6eRb#}xPDY4ys{@XeyP+G9&6puA2LBTnd$IdQHMVqnH)+ndAy5m>5b3f z+fhTm8c)i|9G;Rghi|`ChqlpVb9mk>6@Mw|*<8UId|N+`6o#2~%|skfB}BKQj~F zN`Wx=WTx$@Dj2iJm-jDj<#}x-n_d@8lP@=cwEg8K(xV>;O$FFgVzg6LzDm*@RlOUu zKRGLBD~AR2t6U7H<(7b56-k%Zo++-34Iaj#9vpOx?^aP?D$g6T%g3$G1SkF;Q%?OY zh>efs&(NZ6BR?!$*bk1UZ2x zu}AZ+ zOpPaE`1Bc1owQ7*KB9Pw0J_DkORlRm=h0cATzLb$&OfhdVXTQ$IaRW=I)qs|l{cwu zq^9e*M^cCRg77WsgTap1Ue{8g>TyQkx1JqHq+!AHXcH3F;-2#dfv#%+#mzI#0r{bU z)Dy)ZYM=_%ivbFMv5(Fm*p`Gfi;wQ0Sd<}G;`s6VH|TuZfd=Xb+gz#%ZDAVJFTmt+ zYYiuTvZ(@Vw=>?aJs*nGGB<0?f1EaD!!%;Wr$Acuylz+1J-X~w!BTPSYxWDVxEOA< zjjiF8(KjS731_C81DL*G=lQ`=l5=fGOmj#thMcN@s96Ekql zzQbaOXA+*)Cai5`+e!Tr4}rd@jR-ny+e^lS7CM2ZwK>S-dYO)#+AiF$^Fjx+{GG&R zEPU^nXYvC4Fz34{PGE}p(Z)1`t?ZuddjRi4O`#D;sElDCJ=kM@-gz(wSKmBG^@UY~ z5lcr&G;TkLON}4pq}9^nuZ&ydz?G_Bz~VG$^W-Nb=!2D{-nT#t$JF_FID(jHf>?J_ z4fZxCj_A#G<*Lm=28jBt2CZfmSvzc6&0C!0Rx>fyc&kzF;%GHViT~S8Jj*8jlqRmb zgife7_y@04RgppN;dfHZrpPUv62h zZ)xBgYm>h=-VYqkE~X|#8SY*h{sN1fYIIVqkae<{q;5^!fe5wGn)Hr35Zkg(nh<3L z`A%oVVyj`TD)f5(rzl>d`6fGuZy`@WKqhXz!ES9(<*W?6n8?3MZU!93$SL)s!#Eff!xl{q<;f8I#@o9jBCkWR%`+)U2NJk7aW8Zg zWhLo_8uq}~15%GxPK~fG!=g#oa2vD0$PrOP5zRZK=tU;LJ^>GFOnPNXKMwDR(WKxj#6J*aooj6c) z>%_V2Id#%V@x{ZtObbaKOI}I@FlxF6z&cegsDNzLACG)!t~9oCwV&dYtFe}LmJOuB z0@FA%;3lArx>tQZhidQ>TKZ8zq&+JDWI9}(Ei;XJUyg=g;&hkLE`qIJq7%_Bf=xJ! z`b8(f+7}6sa$N*PDP`nQs7UQaZdE8X3nI~fex)AeN!&)JgUQledLx5<-b!NElbDhA zHlkusT>=$=o#?K|!YTmARF6|hT|n(QFd1^=*0u5g&f#t~RD9cSx}m}qR735H-NHs2 zD$QVY2k)c?^tg32TaC|E+P=I)$?&9T0B%

i7`HhF0YUuI&^B2n%EDo{&a_l%khP|itSkmp+Z??^rYMf*v8Z6$Y3ae6EurP`AL}QY9B?iH z(t!t6=YeWjVL1+hn2{_w_n%~~+~&Rt8T-WjcAI+*xTC}JaDQ!w<}PhFokP_*7Eg<2 z@Qae+B2J-eEwtKk4~xJ~@|y4v6T>QhD6j$cDIv=)!a^E6FM1hFi{zi5Z`)H?pO$w( zVSQ%a>9qp^Rwid(QJzi+HS`K-7`frxspxk=BzF?cvHSq29RT=p17AS!SvapBt&186G^8wFL`SPIm^GUqA?VqJLr zQ>0~>J5+h=lbc-EpD<8kgojXrNyi0qY1P@f0PV9k_V$#8R$p};TjDNmghrS| z!185AzOz048JMGckG4iQ zj#%JXOz-^TKZ8xFU6kW5EWN&x+C>He1@xHx_RfghW%UDXeEw*4R`^yYiw5-KB>S-F39+spx)dv>ko|)KcBQvX9i}H?8UT7gmmp z1)66NC|5Y?@W?|jDfaa!l5{|=X>Xs`kqU@g|5l*va({2-&YC(W?yPkPx+EMoHN>`+4O)?VE)&+vzAx#g^FX4+nNYfotRZBo0EO`R!y2Y%Fr@xD_3&n%3~z zF-4>_M5BvP2LVj@g`Q7VOS!WlLPmE+X4+oD(HM`7CLDdAl06pWcVt1p zg)?A%6|TOb$`9bvCu%Z}xv36$wUkNL^t6rijE5pfj&W(2NmoDXXaUL#DNra9sJN^V zI-tbf!9i6_C6rz`W`}Q7i(s6T)2D}FRSc#V?#&j9XxY=&btWZYi{n8RBF3$W?(!lj z$7H(pSPk;98{|F%;;>QD71&GNi02BT&AXkuyoDnCjDz?7ZjhZcCZjibCg$PY50x}E zl>b`cnAdvwCzPUl!7pDv8F#80eiGjym(x)DJs#XK9e6DmT1hj6^}3``N@isOx=Y|S zJ$neYs7CKbwL6u}hVR3}tb|Vh>oC1QX$^Zh&YlKoyp}HL2LhzaFBqt6Z-h`|$9C65 z+Mz6*`&!|qOpI_V(LT_D;m!>hqs8+w13!MPB4w=YBXZhKY)Aju}HZYS^` zxJ<9HH<07_$4?}p>~uM4XvgUIN$`!5m9DhiVQY&qd>a?4b39lfpytoY@?HlNAk zHly>)D;BW8KJ-6;xY(wyNKfG)HLHcBbUfrk; z<*!2Q6vJ{zI> z{L^8jWn`u70zMMH3?;LoJ!jI{ueeo>2txy80U+^>xOcg(myZuToTh_EFg-HMEUA_& zF^(tR*1(Z|X$k;UA^_b00LoQ}i)$*{eoXAROIW><*12)KD3T5D*OAUeTdX~Z<7K_; z>9%&=K8oM90jXP7VD`v=MtZmo!$Yk9j{Xw3Ja{OZCn z-#76Wt%2Fbjj5(pA%79=B+MO7;m*m6bhtxF33uw3SbOGXQt2a@2Ff8KO3rP4BTjg& zMk&b@J%a6v@3Um_GZLf<`Wu>d@JxMf4pF$Cto^xBUJ~^1mdp*KvDZ>(+*fv_mkS|shd&FzpRb7$EXbDFAN73 z7S^ZxAH50tZ=qN)yx*dMP;^fXbmnb@2ga~V|A=a;G%nrz6!snl7zKdDi8OaqpVSBn z#u~=BKsADuCo{$x68;jx*nzp3uIs}EgIu998dMlB3q}oLv>}Z7g0Yq|HjHMe)-pzp z!uXG1Fu-~MBuWGWLvP&rKrq%Z#?1=je8FIV_X*=B!B|fi1%g4Ner5DNg>j%@Fu+*C zI9V_@5Jq3Y*uWTL6vnqW!UjbdAe%6D(N1S1@DpJiEf_yB#^Va(O~GJ*qX>iUNdbcw z;x;|Vn$xIU8J(;!@&$td5&%d%BN%*TdzN7Q%oy(}j6Q^V8MV(WBwr+7$m`C zp29d(Fc_eSFisbY1Yukw7zxJsN@1*_o;VU!2rh+ z#+TB=)e=S>W?<+rY8hjb!gx?H7+@;^5-$qIX2OUH#%9K-R~VNH1_R6?j5`J67s7a4 zFn(c-CaT4^6$}Ol6GnHz*g_aL2*wu1I9Or)gwYF{Gr;wPvAUg=89Y#pf^R-*2yJT)ne~dCEf3MXg+-la?B^yi$w~j@2$r4k-t>7KI zq}-ISw?Ao@JY!1Ot4G)+qfH5WZ-2Yw7E{7r+Q%*lniBTL&UVSEri8uDZ+O=8 zs03|F#YHO4qnM%-21)2x$HT!AM64Jk5w5FIcf-XPa_m8P0VnAo1yJfohj(Lbk(hG8tgcbX;P${9;&HbP5=JSKnr1y=peQDtqVtX!3) zQ8GkVHlZm)cV8~l$j>hTW!KtrjJ==ui6dXJ2IjDX1(+cXW|+ig05xojsKvlgb_paZ zfO;ho=mUo0q~c%~TBf969632@B_(Q6VBF>^D2mHhvPA&13O)YH8Makq4uH%Z$5)#RG@Ve_`M^l_47#Z08orVejHu;(-jq?=Z+sSCDWw2Yp^`)pNw1lwL%VuJ zLUoW=W(X`geo|xyAvt&(g{7*0iqqyOCr*a&0YStT1N52m)$ghSi1I z3B~Z-R-iCD;g)UNQ4KznKmmkUq!ydFD%gZt4d}4?TNlzzNaswUF+FIpN-Q@Ueg(>L zs}=v9uNGVAbV_N=*h5Jy0+Am>Og_H>IwTB4FN!@xr%NQ!Gf;EiDJF#(MO$nt*2vmK zH9+$Z;M)+jBlOzNFvwE{1auL6^a{U8zSHH;RhSQdEkDo2pPFD3YZfw6ixJak1w7hRk1(rHIR>T+9i^G?j}jUk zcfu>4*ad3xtLz0l6{DSHidJbiHMK0dZ>w~67v+#^7UsV(Fs)S1I}3F)<{+g=VgXef z7eaBW7n-oZz(>J{VnOb2*@xb)V;@R9ZQ$F%JOYl!z-u`$KI1?w#<`zy$gZ=GHUS}2j7uy(6Wx9Msj$!cY+sfT}q zCX5cP3oUGJaic-Qp*msVXKyu)MlI{Hhtxw8|4iSxferclgF=1nVZp+o^|&U2S{hYt z+=JFDRE^Zr8dYdzFtnX3BGex>gi65>L;6nHif5syM^fpXy=Z8I6zZ^GZ3c`4Ig!JR z{WHbpO{x~t<&*$qCq2+$Mt|)bJH~D9#+wUsEM5(SgF-8`JoRy|(rV6*@MpQO7*8qH z3UQvSh)auNV~v|E=4zMx!ulrpCjp2)^957*qo|rv2O;T9HejzYF@ew`Gw5So++Zs* zC?m8JJ@NM7J3;K5Fyjc3(riP^Xe;^?$zif+1-PfHr6hk+wcwu_3r_OS9N(PCpyQSr zIR<7yjc9n(Fk182xvsjwafAQTKDJG0O09*4ty;2%3EHmFx%+0R=Yf&n9k&0rKkdy}pBiIHi^4d~t;s6JGANIOuqt#mt*JY=5%iYC6N9F-ksVwk z7OwgzM+E>^hc#lk;-Kf}|8;#ll+<5q8`gq$QSvqIwrnWzSK1p*d_-vfRV^IIJLYyn za&;=Ia=2f)xz_Gi{+UyoZss#(JL&$8_==W3q@Mn3E81S&jJgf&LEhfcsmP>FMiK4r z>=AH}1TD7fOw|Zdn4fxz#H0VU`5(t_HMR$}-23SH#-fW|7LBj8En2v_(GlME{#0Yh z(1bBn^07qqT#b(vNmR^$H>-Wd(8O%tkj%^$4BONKEdC zv3txP-HGK4A=su^oystJu$`Bf)kDwt1)O+<+X%q zD)B3p-vYm?6F+miMpg)ha|9nTIgWrYSb+c^yQVmbE9z)eP-42^A&))F3sXHqs%o#oHB1@w0Ss~Nvg+Ei8^waSI0HSC?ST=Y z`~18Lz*aX&Tn}4`^UICNh6aj|4dT`~5}aekxRuX3lKv1DpOr#HTXj+K;0|egKMt?2 zqFj3H+m~^`nrY4?P^8%1RSAmbu}qWbiCvi#oAnZyRV|z7-Am;q<2IKOmU>Q3y_*q| z*?CC4%p*tPc*m6orI$E{P&4>InF@g)rCj>XG{>e4I9UMs*o{3oxJdxZ0a&AO^967? zc^&sIjD8jaVvQm)CdQjFeEBRN@AA}>Ir&zhT#YSJbSg0{BeH}0@hQIA98g19+_Gq$ zIfNw-b$Tc)%McR0e@}%w;WM-rQ>;iek@H-|wFlKUtpzT=pZHVE9p#dsM&&lATxzF$ z!-s+dX8#16LypOXX@47?oz#r05^h0nf>uU$R<{~6Ac)Sd)b}I7;^TYAts$drs15& zSe)`<3bN#2-|XgDf%EhNt=y`B3{9MWl5aWgS`bD249-rrSWbEy4+a^I?zyZ zry}Sm12}%itxu>T=}50VzH~x3ge>Ry(uT9JuoMQS@_9ATjt2o5X#b8=E$|Nf5OY6J z$3`SQ*iE9BXz8~cDN!-6S(sK=zBg+{g8$|u`#_fD%jmH;^PVARw zP!rXI%%SYIG>XQpk9eX=My1(w_xTdkw1XjPkY_3MgCKt*;XvyTG?X)md-jRMXNXM` zZ#YOC=^%0HK9P8YNDOk2_=d-Sk)jsAWenPzB7KNNhJ(aJBHI3R62`N)R%pkjgLEJ@Lbnx486{Fw1(c|d ziN&p@Z(2C(zI)u5-Fq<3jXkSy%x>Sv4)h`;4rN9n1dDD_cyb(jR}(zkISoc9$WhG` zuiz)Z@n8nJ4QiH?NQuDdbO0D}e=5-kV-Ub>0eK?{=krA{BM+7Y#~iKX;ydF`p}zKE zyPEH>9u70skpzP-!-;cPA#T03KnIN!`dH*Ip*ih1ZctCXMrhQ*J{pZwS)mApMHst| z_jl&e$=^AJA%JtsyBwbC`NaA|O!?s!}itRY&3vRL$^r4nW6j=$H!~`$NZDq2o~K zm|p`uVbK{G0FAQ(qUU)?JM_#%GN=!P%YI{+twL4s$ZxD?cY+B=h!XS>xmeF5x#4n- z)Y)(Ibe;YGK#xdiqk`ijk$XhqK1Sl+*Y&WjP*@K6G#($URFCivG`ovD=5I4M8d^JcrslSofnpA$e&u ztnM$)7|E5y4^yKJ4M!?VcG$BpHRsd}@`@}>pE&h;H%`6YkMWdq7v*q@+YahK$SKwL z%*kXt{=yGvcIVWLG@;pzQ?L7kW+%ogs;57pq6|*)9t~)=@X5^`tk3q4#VlXsLCIL{GiGoi2O{I-w*lS zRelcgyQ%yjM#@h7`o2r&N*f%9FwJs7S8ryEeEl zxm!JLS-T%CctW+Ff!$+H;kc*Dq5gViht1g-I?*pz)HOK3jeasJ*!gr-n`6aOVY9?! zxDM@RKXi;u)Lfo88W70t9N0}knuQ>32Lu_q1J`bM_(npE9o&qkP_i+F$r*jFkgh`#xAq{bd{cYj|WLpO?#s>#Zbzx5mlDU*bBL0xtiQr zPI6T1kXvn6sAY=*RXE}=+h45HI7yR)@FJKa0{W}~zUOhBru)Ok4l&a~w;pr}2mc4^ zl^_y2!(r^Y7zxlx04;%Sic0{CAE-_~b{D9rZHYC~8gn{>&#~mwOri$!cz7f|K}$c+ zyD|Uk#9#{PbUN=i{KQo#+`|cx)1u#tT!!D-0B=>Co;ZhqnYLh{c^B4?^gnte@A65qy9N7Q?5~@V{$HXzh%FtizJ0MXb6K+RdT4HH~yn_<7&*qeEv9D!9eLT~F zdvKzp0bGj&Jr?A~Juoq(LEeptYZ~PBO2|V#woMlMIwnqT0C!xXo#c^O3$1R&fi+-Q zgOmPE$j)6KI@OsxXKZ_1ELsz3y$F@+vS*X3|2xRWBp89#6sOmYaj=&zIkz8r*}5k1 zhNiUx;(=4EHy)vzzP;3T@=+qZFEsZ{@IK9M4 zg%&R(6hKAKH|S%iC&%xHkE1C(?Z=d> zj=1H&VSG-;t#fb0Z(8jZ#Mf7GkBKJ6hrNq1EyDLOT(g=nWxo7NfgYRvJ*vKY2OhiLbk+C^3@uDNsOwgy)chgQ(+!%yFxf1g35} zP-dSqUX6!#!~OBy47GZB16pErZBKX5#WXJvnpvUs`o<7b4FLlku>@jSAEGNRTsY9R zHQ32?c)V7NmuSAW?RwI&+O9Q9pAW7FL3L|r9TO+JR*?qTD-ox$tBGMx#(E443urz9 zKKU{l-IdB97q?zv{Ke?&>6$?`pP$tV@cZi_S9tE0a_z9TTLSQ(o0qivxf9 z5_h3*LmYt~lin@CG9b=lQP_|uM#191F7ANP7jTbxaNZq-^#_kVtgya?fBfUHM`3-- zyb}@^!;uQ>JNn0e$5}V}$J4TRVf}Ib@sp5~I1wrEK<^yNCD&}BLVb8>y(74fgz^o(C z>Txb41AoHVsI6Zys-w2lVUAf4(q~P6(!!!_0M50mFtB^ST133w+T|$)#42uD0?1v( zfj`lknnRa${)cIk+?EO_pblWat33>v;;!N&WJEiFKntliuPC8uBDzusKI4H6BwOui z%H8caoDL=pA1W<_b0mScQQNm2a?xM!eRwj<8c**TQW z%^rl}R##3^Ux|@G-^qBW7NK{BL?Ot=TPDlVbI7S<1gnVB_}VgxxMN;}Sf6v52xmQx z7&B1*LNe4c7-|`sdEV93*8OPfd3RGgKQ^%i_T_d?i~WW5Xy>!} z$8mYX5-aeFjiq8RG;VitSfVF*y7N3B_v&cGgaHkxC?Gq-g=@khcfLCFH^XAnzD~xq3 zZtA2&sD~q=X>*wEs{W!=Xc5A`mrt&W)}kVQ743iZrSc5>z{v)3 zIG%&)DG8q=J_OBE&wHxL<=)0TNzHrKywhL=l3*ss1T#F;<9&MY!vkr&D?y)6kX?!C zN9dtfd)_&i0O{j!>i}h|^j|B$uu+qQPL{hsWifTcMsp+j=4YW*Z+*Q#06+#$~3t z!cn+CiLJ-w&)#OMOhp~!m@uRfyZrD)GP^w6&TE(USK4;D0?ZtCc^)KeyL`Vy*#%~S zUC25PyHsP-*J+n6y}fqXMvRi#<@hbOUA_UDuB8Kk;Id1Fqi_ovi?Pf5ZzZvdYYi*+ zd+XE3tUX~`rLjK1FWFMYXAnH|? zZZ}YE&AX9f8H&f6v9-5b7cmG9L>`TgpwtnSF|DkwEW&X}5$%H7OzRjI7&`W`54Ez= zY%t2HJ;M4uL|TAaORJWC=I-Xbefzo3ZWN^<+NTdfSd|P-I!E!VF`egw3%Zax>p2D| zoe!Zswmmq*3ATG`ds}0<1ZT1gQ;} z*5h|QX4McNx1Q$3h4?ItzgSLm<)h?c5)DwUeVgQDL8Kzj(=5RgT9wO z4~B;l={8G@7J@=c5Nx6g#KEb3!G-fO@3F-!5&DzFX*8NZo}HsR2Y2?T>AI1WdS2B9 z2Ou_Gh^kLCVfcX6QlS4|O3yPnXb}E?$<%E!Wd&KJ!l!J=2VoYf=mV2fG(8455(Awr za5#H2*RXt0v8nmoB6{~GRZU{}Y@)8w#vn0YBC=!OGF7+RKb1(%|D=1$j**KaytSnbr|fG$8&h`JpB@sSW>1ZYA|q<{ zvK(e7gW)z+9r0br>`#M(J}X@74>noCOKkJTe7Ya0Fm?qa!>F|OUF^+%F>*l*_Pc<_H6k(px{1OO6{YXdzs^n=0o_4jc z!oC|T>^LAn%f0I0C5E1K@TrIW>wty-v0|AH?^0{ndFU<85-e@r5FoJxY(<(4M_+#x zINhG&0UAN@T*&4-kwOI6Kw9AN6Ra+TO%i2 zYIx73M(w%a)HbieAxy+-R#Twe5%aD6t$AmB;1opZ+owXb)&EE|^FqH*5xu_c$IFH2 z!T%%C^p5zJsz}(&!7=FX0sV2@w>(S zO>3tRj9N*?+mpK`AYY71^+Tl*J@Dgaw9osSC+PeH)r4EWWax}TNXu{>ND zEBQvz16#&M=-yC-Z}LzRp|?8GV7^AEz7C6zrXA&=#bIKMQ;TNv2(J?b=$SvviD%I& ze{MM?81+q{CaP(`rs?!Nt3|Nl>Kk4t>pJTqoK9aCq|d@wG;E=x;wd*mD(>DUz|6=l zC$tc+K%mJidA_GS$xF;C?piY7E^)@g@rEiEDmP$G;%JT>@X z&2hsWv4T5p-_wMZm}fPwSaieamO}afkpAB&4;=NkqRd|`7P9;Q&t%)dup)597fY8e z6|&9#C$hO4(6LDnu(MidgC1%?3>QMR=5ElVdAT&ca^n{ny2m$uK_TWSdcw--U`XOx z0j{&A@h^@!vByIpgVcN}JXVO(yf;YR7Rvt!qbVMgh+BW3NfVdcSUB*JIN0xWcoi$s zkz9H`1&+ykRU3FY=6L7KSe8165wG#a^yebVL|_8Oh#? zZMB$i#ur7iJj0{!CS)jm zx4zK0zD~x^5(-^qw;BIM2NxTv{Bj>#<#Arl!)?y_`^fp2hMYU&QTm2eJaL_^a+;U% z&eM&`yPw}Tm0u$ix5_P(tNh-Dw#rWc%jH~SY|alS=iHB68eh1jW+hJD*~J=5j)AH8 z&TU|-^#^sF4V?S=wYKJmc=`Wzn$f(e&A*@8UZ5t`9sDb|gFoIU7XEJ$4o;Bc;V-Os zh61te;2yKG_#pz_v?^88I@-a#1c)x}$J*S-KgV{jMAOn+>inQ#!I<4$AKD-P_IRir z{=GG?75)w69fW_oL#T??(8sEWzi?`C3XZ_MO@gAr}a;Dai|WAe3Yceh{IfmN1a0g>b{L%|77gR|)WyV+z`%cmOwS~mSU)1V6C1~yXQ9lsexku3-fuoL=qRxhnRRF zBTx|c-7)Mo8f^;_C&7EHw}1d=I{2%jGJLoBubbBxG6e!aJ_Xo|Gxrk$bf*K^;LIQ4 zrf)BggnriUfA6BhG>YG_n}-QFZL2Xjy~FKBne9heMII(Ne2|h?wXFFM@kwc#uN0W$ zHRDceO6oGBpnOOemYziIVUo!H{Cq}tD1K&RTn|mcHH*2{Gglf>JSbFLoe0ypHd5d9Fx&tA)jRQ z{FV1=cEJBOw<`z28kA^ndrF%n3le*5~m>H*gP)k3Sw$dy5>I68csrJQ+GbZ5C9Q6TN_=fh)g6R z@&yR>RrIjjVNFKlbtdB8JPeHgJuvp{!qm_j=`lS-3 z1&N|+itfVUasFgNWc(lM-UL3X>I@s7uxL;;5l~T4!3}V!h*eQggJtTVMB@@g>q5l^ zYf;q1tpdp2PrukssFNwlW%O%4D257t1~nIl_^Llp7x0m{VcMha}sep`cI z2XJGTXdU1egp$8o;7c!yVb!kjT@8B_VYMkZyI=(mp?#Ku9S7KC16dJw(Q6pq$Obqx<0@%1YO5>+Apz$R`DKC8BfGI0pFD&}a3rp+ld)pfCr` z-~kOow0z-4NKoUQ!T1FyQ$wCtOZAYay7+dM)9yGPlX=T}{#yKbZg7y!7(Go_Y}mS3KkN?S{eYNm>ah>j zcJSQ_@K#-4k%!B=5tm8ght%=DfIbwVgGKD)Fkewu+i%KqV`y~r$=8mG*1WtYYMP%# zuoRUVA(^GqJNig)S5|~daX%e46LSYJ*V=SYV5GmV9b+=Sh+xj|4wm_VS^YpYj@{ml z0SR|{fzyBc|6+4!#uOOL0$ke1T9*HAgQ?#D!omu-rD%L@w*}Czkr z5107p7qS30rU1T${M>Kh<@13s_zM)g6u6uPEPG~yn3=)(>|q}?w|yHn53^)M3(+t# zxel8HSioVkmxUKD`i8+bp=U8-y?(2OZ>E^b_$^kD&u8T`O-)q_UJBgk!^6PXC28U1 zvoZ`mrr@Q(u`FQKWTu)_(`9gwT3E3LR;&WM_>KKG53=FpZe_eKYDrb`Gnb#$gLkPLVlU)`!qao)#}LCp(bgKX??OnAUS!+fbFM@C zOOE{QrkNba3(F1dRS)=F|Na)EVBz{$e&*2Y%PGWf_!$)9*5`d8K6)xBM8k1eh4>PU z5`}<#R> zr-FyvM=~WS_dQL%+@Fc=ed8sMHF7Uj98lM^BfJH6)JFyqp|bv=!OD79m6mnZa>{3; zEZvHWQ=%N%8>u(_hp;IgS$T6n>Pz_POMQ;{v{Dz_6v0UQGbN~pTT{LsJ`y|mdT2PN zCwi!mKp0(NzUJI`!v(x_Bg4~UPg)I?UHkJj)ONqGp{eNDRr4a=e>^{Z4MokT)zH2+ z#b{`lNh!udRBqw6Cq}ih820VyzP#W3$>y6zA)21SSPgso| zdCkw)*pmx1%AD`Lr6#u_;DlU(VAY(AcNucXTkDn>YCxRNx+XP{H{2 z1>y+40w*5b69o>^DhgNNiJi*jP+tdwj`75Q@j8qQPi%b5>h+u1KVPq>|IOFyyEg^& z`T{?Fy*_0=tzPf9DMqh1n-u6ZVSX#UUTHsvQq9x(8C3J~XM8p1iud?x{-m%cYJN~_ z44v0drOd~Tzv}n%#A{RD>`>KC{ijuJZN<-5ZJ+ym)y}*zpxO)g>8o~%`LwD%%BC3A zjx#Ax?I`nGsdkwC6x9x}pChR0-uw(|`s8K4rtcJg@-=D!+?VhynM)!_zko~B{HR!<3s-C&d}pS#E>2WSocF!`NEpmx{9aPVH{ zF^k8r=ZZf*O8(5}jRQ5ntgk%BIm^G2Ck}d52oLlgsR2C>(5i>zBUxQikn(P2vMAcU zFZ~P7hJAE)qJ8-G&l=tIbtU#(LUfrA<5J-WhyyuxrFRfGoS-c0!6eXfUCj+QW zm57GGq(_B-9aipkM5u^DC80yBBI41qEXE0#zC)PP459Ge*WxZBJf(GpB{3y@i^Pf_ zZ&o4WCizpH#2<{v8t?}?pb}Iu9J#v3DnWtZrReJeN>C_L-f||35{QlN_NYxEVy4tF zMX5y*5T?JS%lRbt6X*6VpEogGE#nZidR%ZOgmvgaxJbyg%oBOH1eGvT6HpJ^1&Tk`&?k7

UbsDp!f=TbQTXcZpF5U~zKizG2ub^Ak-3OE25 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Ç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%0D(ZswO|1Qf%h^iJQj?Qtgk*qBv1Qs22W;QZR)Gb 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

Lec$_~M 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%0DegjT1EOed;&d# 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

aOBXnr1X(yT#rpqsTHG8r!fVto-*7A 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

4l6ihBryed?;(h<0qPvfGvMe6} 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 I#v*A7hIr7#gf!zA8VC`kK0N2Xkz&$iXYcaRQs1 z$>1vo`JQ*cS1Ib2r;O#c*&?$MA0$mlK&_iWzQZo>i6^StXu} z+2+Js#lK4Z8Dsl4dGp$D%9Cr^I~ zcD?l-o_k{-KDOawox3{{XpFR=@Uj6*knA`nBwev#IeB=2j8oI z8DWdN85-&w`jPcu7ZW_oET?VOcU;5@&#}qHKNk0D^JJ8hx2P)*GR=E`qCR}%R(ZWv zy%^)o464s^mi+$PtnqHP_)CUDgF2pIlugF@{-0VWUc)?ZWSO_J&U@MBZiZiDor=ce zyP4!1X1Ra`u3&{5*kFl)VfHU0e2Fn$@H6q8#Vi-Iz#=Q$#|DGj#G7A~Nls^$D_P)u ztndh9?-|r_$Iq<~f6g4AWRdgkQxAS)hxxE{zkDtm)UmXrAK3MP`f>$(xtk^4@Sr+y z{6ogQd{D>p54#?Vzji%7$`+3>+HHLqXK1&0E~%IYNBqw3-zyI$_&766?D2TAeep;6 zTp^FDd2kxDocbr@Fu@k*JTAX0^*zg+_h;8Bp7gx; zIhPsb873I78IQYIZdJi+h>t;0#{&xe@esDD~-Zf2Q7PU%N3W1FWK z=`o*|#PPzG@t9|pLrxoyOa5(sobn%WyzQ*G56O!$&gwYo`|_;Q%Z~Qhf0A8J$OcPoDl7e6&BxMXx&ApWr5DIO4*i{RM8k=xBeH(IH2DKc2p1_`}ZIp-1~; zy!N%m;Xf`m4j&w09A5o;<8bsy<6Nz;-(Vb`V}jR>KH8tK)u$ybsNBfgJwd81jj)^ZG^*wjai>1cl zdbSz$ZQZ1~GeLiP0sN-|*6Zfe>9gi@|z0>;o6C63cuRp`t zAMku0o@pFz|A_qNyMN5;>+fb_cAw9e*x%Rn_2;Zg==R#@bTn>~+nZte4V75B3{`ue*V`<8ie&3EL-<3IL1PTSJg z-{N%)Ezm#A@a)fB@4VYRkLT_)E^9mb`Xiq;pZoiKZbE&2)z_cqnX)=@?Qi;gUc!2@ z$+HYyua6!vZ*E|cvwtgZuBn(ex3b3I?~KE741Z1>ySeE1;`mrq954KnIF4nFiyyb% zO9pk6S>V7wTPMzB*B7lD<18@E9qi>^mKfaYI*hW#RSYe)F6`!inc$!&)Q4|kp6_Lu zb6DpN#=c}9G0WIKb>M1tEpuOEXvLt8tDcl6ce2WTY_iGTuQ|_a)^FvYjvq74;ZGTl z-(=zIUO%z>8~Sa(b>jP3bMg~`Ty~r-!%O37#iU(O_aeit2SmWIDk9T@q!4^vlKRBr4X=XY6ukw4y`NJaTF#0R6`x)nY zmbi;G9$=_EsN>@2UFTu@j|tw#EKjlLx9a#e>%}q5aTQDKWsMIrS#jTGmTjhgC!b^b zh+|mdLI#dlFGjeUF|KEl_rBozEV9T)S>;|fdGNUT9QC^AMf2fgrg=4cIiD?VVW>|$ zqddSkkF%F8mUv-P{v6I0NB>hnBXdAxSn}#Wt}Cq`8dN3*Jn5TPMAN({=<55 z8Y`T`1{bo{bRMzAktaRx?_Osya6;XfX6~QzMpaM%s2H8A(Q)c4TFw&1{m9^c_h?k}Fvw$+eP^WF#3$MzThd zE6MCiJCb&`U&cyClF|LX`|JJc-t#%n=lMLJ^PDqt=iZWB#sZIA`}Zq4J4Qb1slFCh zUh`h_XK-?7M~zW#4>+Dxmf2#Bqo3_~2KqVvKI5>>`OkT(uNrqgHn^98*LHTS@BftF z_jW#}d7OC$Z+ObPGUZ&1I1;@)H(Smj7I zIGKqVoqkUCR9}Yi=gFTrmic|wc-@Wi

sMb$afX=l$Xt=M46~y|ZI3n_R}Oxt$${ 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

-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%0A=>~<{xopJ8js^_`f)l+Xh#UJyz)VKVp*GIC366 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�F;09)GtZP)$fMcwY%s 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 =*$I*021hl-`9Mq$ey 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 z z4~IB48PXq9qz$Iid|*Js3ZJMU-mV< z$JgQIphNy!vA@vG{spq1YqNLgmw0&v?43cZvex(5AfJlG5j(?n=39qZu7n@d=zcNmxB8nj(rE@%cmycXXmwzgod`C zL3`%ly6sLsGko@4p4i#mie4y-R)V*(?_f^u3_rYtei)QDg8#MS`&3i$U&cpeaA@8A1l4s#yj)R=9Z0Mziux31?LJ+1L^5|Ve`$A$JC1#H;3azH`R08 z>pz_(IOQx;=9>}2(2&sQJPg53LvaP@E%S>`Fcfjr(lDiFd?K;Q(KB4J2g|tb*F9A4 zeLFTeex_Z{RsZPec78Mwpjai20lGR&0W!vH4OVlU)= zmjOe(64IZ>@cRRZVXM&#U3QLRaNsL0kb*lD^I4K?W|BBLwf#j-%FAh(p=bY#-o; z6XL6jk0REL^*l8v?`bITKM|EZ>B|9k4Uf5+JDzx=mQ`;Twf{-hm;{fBEF4cdRf@lN}hJwaoeAgHNyUP*Khw0vDv@ruc7uI+pzsf zI}ZEL-K}^uXn%hPr~TWC{UOdlvH!msY5&=l{ig-(|KoAC{YNYNOOpO0leq0q$zr$v z_g4Q8)NlXxvDyE-ouT$0)3E(XI}ZC-Y90;RfBgP74*Wkt><@7civ8O)(*F828RltI zgZ6KBtZn~M%Knn1|Hve6`%|)*?cee{%l`iQ?cX*w`~UWHsQrr@wm)gdVgKoxM}zkN z?ts(&t;PNj=b+gCs7Bg63ULmK{nHw0|CyHkD}(lbrju>|o0a_~ zN&k^a-1etrQS8t2NSI?WR#fMo5F3}{2=J#bbCn5UGP(#>>91VkX_cFd|84Of3uRVp ziRZcx+;s#*YN*ZLn!p{tb-Vl|i(r^P|KZ%s#+?P3s+#b^Lw)5NL%yRP&kH0(U zk4~AdPS*NI)cs6r3IZ`wCjL+Kf4wB>H!z8&f9$WQ_**V)9hq;oj;?=vh-AA#edJOf z_>;8#cd`(5^jYLk2WC8aHdDZ>w$w=>ub>$FF&ocm>J=AQ`jBHCUN!ZRc}gynWh^th zQkvVW*+7VXJd^p6Ldb-<(+H4f%|bo(saUfNo~Z7YYG#DJ2ZaciCd0rGTqRu)2P84W8JUEgY;DP+HFdT90j0wlaLr z${chAnsmBulH1;wy8R7pnQF}y0!d#lbm$k1wSIGXCHjSBpkH%!J8IQ-x1U#7~%Q1ngOc6Z2*{xjY_XpE2iveggQ6YOPfeGh_ss1w8!94squR+dxo0`VjhKw<>$+{pqv>0CR_-*5)c@Q+NOjB37$ zhL}5ALj?2zd3ov@d_WPHGAb3K-xH$m2zb)tN*hm>EC@5Oxi!B*JZVl&jm497lQfInf$x_~KPATj<1-acM3*nVAB2 ziy2Sm{bJkm>z5t&)OfOEV-!3&om^tT6K{}ysgu6OlSkUS@Z`&upc)xZpoIkB%IN0S zDkc`sWD7%pi37Qyh>bsZ-UA2X8mwTK?*MYpYCgOI`;!Daq1g~%x$0xpFCU^F?Rg?;qeWQciWrAKi*9@wM^g?!+4kXtdd(KlYZ@vpP&8c z;Es3g*rZs;yLCU>`kgb^pE#A@hRH+&hL-Ky1ujc zZ|C~XIX}wS^kWlrgBaI$p31Ywr}|7 zluiwfPhLtB=lV`tOQzVyr<%u=+%TEmTX&C7&DR~=@o8K_9OIMsYg@m4w46ZZdgo&` zc-tp2UN0xM0K3@7r>)y;ejDaE?5W46p=+XyPfynEifMeB5Tt*LlfE9GQt%Ze$M|#+ zsWvb^S!+4V{0Rbe&e6=V9u%C9)my>F&lbRO3}K zu8qZ`dDi;Sc|}1y+K6~r?f0h?z@7YQe_Y8VeGij(@u)wh$9deqzA3U1UQ2axVjm4W@BlP_Ia<<;|;o$G*bpkl6Do7km-r7z0m!QaC{oFh1F$0totlS|A`5o>hPjhHTXx}59>hb z>&K_fOAjtS1(wB--DXUy~Y zsX>0%I{9gQI;lDeJ{6No4EWSFNI%g@U*ppkhq&;mBdJElr+;)mZ1lZR)(2bQ=wsOW z;G#vXRUeT3us88tMc~k|-ywPo>x0Mkvhkv}YZKl^?Ir^e#X;u|#n47?$T zKkxo(;ZOR-a6f@Uh*VT@N_gqwyqA_orZ?eo4j$yFfKEo?x_%Wv{`WPsKa`VtGE=Ho7_I zYaFa2PVijx+s0Wwqv6dG7yT}AmhTp4`JT4?Xl@Mc&5eUT=d%)!yEmWQ@m{p~>;qF9 zn$Iqu?~E;f_*gLg?qA?Oan5J^onhnqdZ&Zx_;ULx4dQz{a&0WWZ@t#q|H1nyl=1y3 zKkl&bJtq&{2m3#gq#w^DUVI<_b3FJyb%WhstM7O8*O>7AL%af#ZRi>O{M7ax@#Fj6 z^;)Lb@V&W~JA~rD!&$Xa>aPXb@lHAaG*>zFo zuRSV>FQ@49nMPnNKgk?&wCY`)^a~9oQ%0WB8a>cDu6gr^0y}Nls>y0n=Ek=O^Vv_k z+jvtLa2Q16&4d#h#G7Y-0=vfI&4{5IZw?t6#G5;7EWCNYFWkkSwosDv*O|nNH!UDu z?D1rWwYGm=GS#7unDFMB<_+S_gqryArgDvzDK@;B;a74;!<%fpx|UFsOH{;m;s5o# z=CfuTc(Zu5t>0aDIrLi(-n854!ke?eE_S@}2Kkjb`Dwffyb=X(KKT(`V!)g2tL*l4 za?;m$lk>X^Z|)$~gM&B!*ZpSVRYo{osUaWdM@b*cXa8@Xr*h*}w0JD3tf6?U_$g;R zcEuV2#=7sJ{y5{Y*SgyHSW+40u;!5C8pKB*xi%Iby*Fum{1&gL5aZx^(kVOJ>ivZm zdc*zvX%9-0{t%OB_!w=!^QZ6P!p9Z1zuz*&p^ljFv3Ju3@o@;HiF5s~@;xn6Z20)b zd;>1A z;Nvp8J$;Bk&@2mLnrofUZHoRFqseZh9 z_PK+LH|^M@Sm%FJm)QF4q~&Y~Z+t(v@aDNM;chX{|2hQuyU>7?cjR^Alx+ENrMm`w@ zj}~kOml*JXP3Y-PU?u;yHY15&NM7H$fFK;8WVsHa=zC;V_`ar^Rg>#HX5#;M7=rn%7_B z(|P@a__Xme3!hR>g*)T?S9d1qdzi$FPyHcY9P3wal7*bFXf@HHj+pT2F}$plpis|x z`Qp#w$EV6Sv`ip9mP-zZFzR{Uc+dnTcQkw&hmRss%G`srepT~n9Qd?&k*(jCZ+Gao z9()?~g$tj?gI(+(a`cdb8tU2w(^Xx+SaqaMS8OTc_=vh4$(>{hNV!+4W+u8V-FxFvUjgPZhH;9j`KLV%5 z;^WkQ8Xr6N3*zIu8!UX>(G~9JPy0-g^o>m7#m5sMUJxH~UajUt(oFeDlC)YTjX$sE zUBK#sr`2N|>Wc|aFW%K4o{rcMKb|gnRm&6`o;KHVN5j*sSqB$SXRMC{Pq)8f>-XBx z4*k}Hr_DFH@bm<*iycoV1o`bMcJR}9I&o$cJYD`FxWs^`9fI`lanjd#deRpzJpCW3 z{(p?8_2Zcff8~5h9OWB@uW_7rY1H|WIOLb}C2^EDcpfE=^7(O=FNm{zVVvcMvwZyz z_`Cd}D9-X@<0#MPxl6FP(QuV@&VROitS`?KHrOO*_2Bw3pWjmt(pSx<82%D@EHPvx zspm~9ifnB0K#$>$cwn1jzVrc(ABM#Pi~6)yW0IU79siQV1D)3bN@9oyzHep61M`a< z0I1`EsfRTf54^DkoEjSsOvuskK;OhT;a@Bp{H!q2bIn#bxA58QIILwzyD1HEe+j0c9Sjz1nqwq%Me9(dz_ zO73X!K)d@7Zam;y6-PYK>v>zht+bpCtw-{N{{w*i**?Bkzq8 z4=h*-E-}OdBZBn%IO$vKKcBkdfvZV%p2Ho3cmyp77KRKjHs0CusgMFrVz_pdPbIj< zQ9hpWpX*OuaDE`p=h@x;FWUN2(l7^J?sVYgOdKu@!^r=Ko#AmGY z=I3HvOBpYw*HXCgIok7>{~1brZs>W;qDe;p8?3{tuRJNZeAN<|G>+#n)0)}%yv^w_ z8lM*@G>FeN?}B4v@p;~<*82acL44lxj)l)D?a^JZ{@;#C`W`0n;&Xq9=Za@<6k;hi zNs{(op^24Chxr_1zS~~m@vQf8yFbtQkE1`wgwHpB*&seoeJ6f=UNlF`6dOL*T&LuY zhR=DvgNx5^yd4KVZ=Y@Jw~v;yp?Ee6--2^IkJ%sWV#ntRL4F&CIqa$N`H?A6@cFyN z;1UBqcL>tI#Ytb|^MExje4a+Ck@5K-eIE1s0!Mtf-Vq;8!tuhe_^|RT;t*mKnNOcE zTX5*(w;*~9@!4+nB_QKWp9$!Jp=BNHe8{Bx#2+X?%RR{b5#@`0(1H4)w)^Kfi2l5Pw=y z`Z(jm0!yaY@aNef_2bX#@`H;%*>A*wKT~Jg`c2ewHiSRVE^*<{nniHWnB&6^L4NmK z<*=v5pY*aQ_;Ve(#DG7GXV~rO?xe5r=l%Cw_;Wa^M#i6mJ)dSg)fVv-I(j_sFLjU4 zVe?&m-Ye}g!Lu08du>|ajH?DeEO>Uv>rh1uc=q03-K`FpKiFYFjb|hFG>B(27J^e_ z@oY$z#)wW;~l3I;UqhGf0DZM4!6Ysx}B)u7vc=2g4#B#OtIn9INc9343saTF5J&k54!!};?wGv;=rd~_u2a0 z;Ox)!;8XVNE_@mccCq8rx_fPY*E;!We0pJA6ny&aMR17$pGE}fCpzhCd>Xpgg-?%? z>i?hcNuNjkw11TO;H@~$7&aeV^s#e3*d8Bp#Cg0hOyb3-H|K@m(;J79X3CqAq`k$Y z@%S|1ZdMn3y5~}d`eMSTuhuq*PY0flAD_%=TBg|WY4asY?r8Y*hW=t+?m;@gn#Cr? z`n*pEt1W?~?pn@<=7Td{apBXO&%r%oj-TcQYKMS{(~|fjP|~Wr1Obq^}jFTZk#L(g|?J**ZU%RC8G$gZ*Y*6Uvy-#%_1#J888vGDDYCU7^r|4@?j zDNN$Uw=K^&@y#9ohOeK`^V|MC=VFI{$Anj>tZWdkyp$%+`CeN~rr7YR=A!!XsyRNX z$588F;nldOzV#lkkKAYc$0Sar*yh?f1g;y7mYGk}>@#op0+1T&9f#&! z^t;4azMGWC`TpIWRy>Qp+mo80FW2dRHhtnNJhIW>J7D|s$*=zQyZe8%_fd?_B_7xJ zzU%9*cg}fNOcCI{`3aae&i7Fq`;(2oMHf08)SCZ(+aUh#dmLOFi@%GHx8}cT8h`OV zilbh%-ba!C*QvzcLnTRX#v~g4MtdK{V2Br-|GM=bj=$c?c7MILze61{;qOb;4dU;* zIq~D~q6#fjZ20?ZUj6v%8*y;)ci-$d@OOK;t=~i~XG8dV<6Ia1-UW8C8pSN@Sd$jja zB=sWR#PU9hc}F^N=b|#fojs4DSuwtk;yvaS^VGxZsL%wPdZ+zs|SiJGJ(s=W2 zYB1hg`G^(oy|7pC=0Qo)A7T;>Z=$`A;-^RA!J7%Cc7N#J&!LW(@TT|M4dTrZN)u`l2`UBFITU%a~vR~hEMCtP^b z9_(Vrn|XKI_Po}~PvgzV>!aY!f``E+2E6eG=_fkrYrIK+)`d4$lWJtVX=J?T#*=9C z$=A+ocs|)1#}dQllPTMr@bb$Y0x#2Nq7|{uColin#+Qt9!wha7*wP@rWRYEC@nw5Q zjW1;_gYnD_Pg(KIfZqgP&X6SiOeWFrC0aal*Nk}ZrPoB;A6xZts3RtP`D#&v_;O%+ z{P;3=LR|PVD7Sumd1KhY#g{BLDc1F`t+(6yeYv+ozxCkDjK^H~^5#Qux0u(zMg;lw zaq`pnlJf5;_;MM!#DFg?gY>^X$I%{*FK<8T!k51v1l5CzFLr#x`B(<#V_jrk8L|Lu zPZ{;I+rbY`+w~bA$^5VW`IxJG&xYr3c6rKYK)!tNks&12abPmKd~W=V7LScSHP(1+ zNJ}SRzB5h$^M(gtmKfu)W4GFPS#*}e;MV-_(+2T!-~Hg$SiD@^%$ol-3&vx;@3-Qy z^j`!o50xan8Ix#u87&?g4Dn*0|E(Ki_vdS~9qNb)FJF4KLA+ddU;KF4(~>F1`Cm^Z zH+oOR{Y>B02Ny5*-5Up9ju>t0H&M&k;QVi<3oq{iyV&vaK(Wp5o--Zx)Oh*DkSKVW zNiH$q<*Xq6?oRsF{O>UrUVd;7s2)_jbmK|bc`vdnk0;5N zOtIm~jMMAKlkC9<7f+s@76+d6y2aM-uG1X)ttb9!_n-?;&H}sG@nl_*&9BtSPvc3T zAPSy*5&)MN@MJ`gekUh=jVCz|yYS==Qaz}6V#ha)UeAwlKa=!jJ-`0)E`0M$zVI+S zI$yTEh!8g12*{tLp51A9;1%AKn9N7Bj6l-r#chzs$5@crwi7bVYcGLq0!eGSg_oYU z(pkDQOP{7nZ#^lzbn$#=>7!XXNtOONLh0*%ah5)rr8nk_Bnc;n(>`*Cv-C+U{j4f| z=_%o*m#=r0K9;3#SEa9uQ2LRz&eEAIJwTOS7(s*gg_k~Bm9C7?%FGo`+M>Z-7fUN= zMkqb)PiJY2O$p{QReF1b(j7l{mhQsR52(_2M38&s$IjBnvGfh9bbbWOKl7opv}iC} zl|Ckd1}~ZJEd4LiK1`Kf5TSIpXPu=xvh)`hiB1lUVEMxzb(ZeH(l4pf1rg*v@JLwc zQdRnFa-VmKM2RL+L8Kd+P0>9B%m0=RivLWejcbc%wh< z49UI>JFkJXep^}lGL3XulAYX18a>@2wzwtpPp_;sgBZ86@tXWLRqAmEtHj1*KTu4bpoZj2XCC$ zQoYzzq`D?3)pZW3j+MHWR8lw1DbcwaQK~}2CsI`l2`=LXQj&sFwQxvv;4`OG zf+T-lVN3M_n~9;L+Sb(vR|R#oMCw{nN!>fIa_Fl17}3>!%tI-ap`|)ZOO+3)ZWhX- zt74(7bk#=2D$9b$P*?v6N;Qwo3?!Wvl&Ysgs!eaPMV3@jw`Q@Pjk4uMIG2DNvlaKbe-e4kByK9_)v0HJ^UXiF ztNY~N>Zf7;$e(yuxEymSG&k|*VEwbeT+N@a9l+g{O*sft;!a{lipjS<(~QV0(74c+ znHeJQ&~ZD3C|1S1nTR=|d3I$pY29|oPle{PmL3ixT8}~dfB3o1bC`qG!Z&Hx5LT7% zs7%F547Pi0WL7iR23fsR?PQe^%Id;Mtd4ub$x1wSN)%S7I9LsIv3l+MkXCKeR9y;8 z(V(qbC0({d6jsaE1Y2b;aki>|D67$tSlyyy6vav~>*d=bD{zp5)kGJouf7XuRf|Zh zE)yW)o)z6f0RQ|btbSe{Y}FAiR>i`~%qfL0PXDd0Zk_%Y5^q0FPb}LGFdIRvz#roO zZJ%@AEbnzq870@=On7A4&2oJi95ayK`3<5<2OvZGqAQ3hL)Zt?Cq75(578q|2FRP) zz&aUm*tIavxj+_#;M^CamgW36J*-dWqE8ySPfp}s@K5HL5;UU^y5qW_{DHoiJB_pZ zqy-N18b1Ag*+9yLQe5{g zmIM$cn3s1`ZGcTKNX8rm->iSRgJ2w@fA-~J=d#_+aMi-%=bxHcf|AmKNvH{am@S=z zS|Fz^XSgEtfFiUx$0AhyqBTy15W+Bqc={BFM2gVSiqP4L(2F*qvC#-&luj_mI|-?# zefBSD+Sje6Y47&2BswJ;Ap{`_W_KqcB~d^TnxY6DVN3MG3sIVOC<&P-JDS!KIb}J0 z6`_+9p;OPdBzhzop=KoXSU90S+e_1MVxLy~qMt?RvS@^oN$3hEq2?mdD~ixKMJVA6 zi_l@w2(g-(;v}S$eWN0Dv?A0i*CMoZUKAZswdQhpe0u^x;(}zQ>UOPC`oA8{3JF{;LRW=xY(`7L5?AnWs7lDT$^jLah{`-_NoL{rG&8rlpWj zO;?Bcm5%x;La(FS!fKs+TZA5sM(A)7n(ZW{tahNSG;OFNH1Kqb(B;txc}VC=Cn3sM zmh-A2bciC<#IOjpj7ErvV;&w(=q5$zSujG=R$O2aTJ~HN9YL81=6ffG>8O(;gzq1a z(3f^!8y}4jvCy0lPH59ns`o>OAT(POve7Ih@e;s&AnD()X#vA=^{D+euJR4ufs`|( ztOixgX?h4zE6Ni;Y@N>*VZd9NK*R-uM2i7Jp|N^KllEp$D#)rSU19UZc1=PoYOY*h z>CRE}(eRp&1#1#hQ8N&!<~zNdJVo071ZxsRQFCCVni=6dPYl*1YNBSlNHs4O(6!nr z9c~kp zlu)xQQq5-t!YrQB&Z~koi43Tj7pbOsN|Q&euyRFnWI3ok@7Z~QIT z%;9KeyZMf00vwN(I+l~kNcM;RSVRyUzq6xEFD9{SxhJhzc+JJZni?FRi&XPn8RT6& zCk1P=tz|h&T8VxJ0SIU|a83HTKiV_n*I;`J(Vpf{I@)7L(5;Vkn2pF+mUFWrxCfX7 zg%9jVpJN2Q>WQE;7rM>%zC1;(jZa)D%gItyW-BU%Ct6e{MWiBTo8qLx{$7^zZK^b` zr=rqF2Tw2?1W4)4X1=mJ*i0_h{ab?J;Fxw_y0gznMBF>i?x%W8JIRiqy;$?pW}A0{ zvnE?*CIxG1v;Atvm5!P-TzDiHxYn?FDzi0LEi*7?&}`tEbXy+U^Ubbcd$@RY>Ej`0 zgB%Iwkj@UXao8!#S>zE_{eULIST`MQDZG^sP`wT7P`bCt^yx?^6%LqXIkze*cPlE@ z?JO#5=LC%(q#|>t^~X45QD*C^s2s1Td?et5g&l7us-_G#(9Az~2Aj#1!{;T44Vvva zaXZWNW&TllfvrO70F4}DN4{Pz{K+C%T8hYQ)s(r^MZucd;JqT%Ji!H$VzxHHnrv%X z&ZUQomd^xTnhji&W?z8zoakszF52_(>_}#Ns*^)is-Gk(f}g@G(4rT*SPCC31eDow z-DbNcoXT4%BGw&>$~c=!n}}4zZ0*9Sj8;^RR8&sTRA4p;kWzg8my_z_Hawl&vE!g zvw>^UzJ6#=@z25bVEH8FyGJ9L?PqxiTf-aXy6}Vkir{hx2DA0J%re^(LO_|Vo7-%2 zom3bgl;t#4R7NT)2kga)p*EGiTyDe)i9JI8+ew9iSXs_Hhe_j-6qSKpl`JqDs-~R4 zW(IZyo7n};%)z|I9>OuUjUMPU8(V0$?;G0NlBJSrS{KV~hRAI7Hnz&#cAi~Ro9%F^PWaP{|S7~Fo zS;E{$_DH>sn1h)&BLkF+bcrJKYLa9WPHGk zKYo!Cf3T%*Gh>#@7(p8Im~pPk_$~_>4>QC3S*l!r8Zz!;#x#}j8B2^~#_1{}oiv6s zW6KVyGKE~OWJZa~Xh9n1GXt?H+LV;Uj2_Iu9s)D`B$~;LTUExFCn2LXGuo<*Q7qAf z8Sm6emA=f_Rf&x2R7NqYY-2_XWSF1bgsW?Ra;?vveQoNPYp}MQZ1}on8iB5vo`p%h zl6oYR>`fel!y(8kTb{gZbThMgHCM$~Bz45iMDz0#LGSv~y>;d#dv?{CEkV@W_yzu) zTT@rJB57aK9tlnC+U8I&uJv1s+eq1ulFPBCy`-(cnZ4L+og}W=|NNi!YIr^6YmSg| z7QLjoaET}s=Q=3XQ@&=&b3EK*$%mnV_(Z$~Y4uS~Ec(|Bc2IN57gE0FR#0=^M}!cO zUW+L7Ldw@16GAVV{@#>wmdb$_FHmDBn#{=!KN8nG`}VBMQCtQRsz~ zuQ@eFdTXRyczZ+XeKR+<_KuH2FSNb)3ccWd2m2Gxe}eA_Ec;@w1`jn2!Xwt7kIthN zc-X4AyFUS1Zc~L}Z)vyG1P;CC=FJ?Fp?eI}ZG6d8TQ}}~wnYcbSY|%=;C6IBv-J(= zN%t5594j!g&mR4P;p<#Gcb#Lu1^hje{pE`Sn{TSuo?Gr0&74PB4wgOtsL}QeY!rJgEOOcNf_KH9`I4mfVG^%B zGnLeV>;4gYUUZhjp4sw_Jb5NCnmr%9Pjpx}>>sq}F(+$#W`9<%JzFSQMp2f7WzXYG zZO^wq6?^{iKbJjkdt2;TB1!r!OyafYW%r5(-~RVMV$W$k9rnEOod)~oihD$wQy|Sh z);~Y$s_l8>C-vI%EG5em*B(TBUh#vr=Z=rXo@b17+4GsV#GdmdNuR?cUVD~Ti3WER z{v-DM;0%X7XUIF^>g}I@+%3{v18M#-dp5D`Ipd>x?Rk@u<>PA(qCF>nr|p>z-W)&w z>$2y@H^iRXBuU@EBwl+im?j!bht&VT_}Q_C!=9_(Y_NYGr=+?2>VMFluVm@|xq5xQ z_M90I%^X5m4i?@n{6^bz0C>Zm3vYDUv)LlCXR0LWiA>_P=XX;@>H$Ol5qq9EX(=Q|LuiHxUFo8tgcb?=|He#dYI~OQSB^!7;jb!TQo5)T zNdoqcJ(C{fZA5QIpfsU`mz;N$?&tL)$?#mfUiOg9pE>Q9*srvN8EW0VF8LGtaPZtIG=d)Et_LsMfGO~W<23oF>{ior%_$wo8x3Oo7QN6#n(P_7l zxWVu<0?*zs`bZ;jx>Q13p3fPBigp>MV*&x^B&y)qs%iiRf@;onmD~+u6M%Kr9zD>rS&yDIo(awD zhEVYj!mNWQ*@kd;gy-0BRVWSP)o^JrzWSU2QkQX>0+00KPfxSs1r!Oh6L}cfU%6f! zvt*MvpqxEWYe`gIt~%D{TiJa{_mBE@Us7A5mn6mp@0vqj6g5pA1pRy+K|jN|u3WYq z!j0gWasB~&oMP?S#50vA%#1SWCpgsIUi}hZ_EfawFDP%U<;>GW$iNJ7X8(fB5^5^z zOJmQMM)luN(3fch1Ef&BueVWMgBAOh zhZzB%&VrL*jTk=M)CgRWXk@SP1TsWLpBdHPV2Sq4L-;HED^UN_>o1`Vz5YtEXhof8 zYM$KP@0pT|3vc#^o+)QCCu?I~)`kJTHF$|23du^&Jo9mF`PK zDbJLqEDO8k8@}R9!wX5^Q~5o;J}fZv0Z1?IVJcg>lidS%+p-8=m4g{I2^jtsb?6eD zk3xOJ=@9wdKkEKRZEydAd!$aFSNlG`ouxn2)g>n6`Suy5KeE&J^tL-;mDj zM}kHre(0O<@^JM2zP=Sk_RE}w((BsK6dIi zrDuD*P^HH0>8i&r$XvxzfnG-%v~@aZXMg3H(gqh^d~$t&uR5=KZxgTo{>)7%=*`Yg z9^koX6>hc7%U+-7`#8_zT|Xeu^whlUy`Hj-aPxkig-w%6vyogt;)#<|re3zo)Ddes~tP zY0;v%s586(6Ee^5E9N6D%K@m` znk%^s<)}H9ZdUqdLMjaZ=+YXz))}{zd4xbs7vz{HJtN)kin)>;t$rEmS1a}FEcI*H zK=e>N>F-#}<_c4=zsh>u%WPhFJcV~#V8{cCKy$eSy<`k;sR`z^-qeb$52Aqo9yOlL zkfEaDqvAFiM>$SH!x^&prRd03C*v$ZNaDC z{c}cu%Z%)06aVE|czSzycDvl3dx~q>!3>)pwG#Ygp8K?LKU)%eQ8C2cMTF0??FeH= z0N@ZGKma^JML4dk;viCrjXHQ>;1(#RWNdzdr#zKaO81pOQJ%nHWE()M@(XxTwlCFl zH<1KUHV0+I0cucQ?U`D~exJSBGvyCn_&AtKG$>1Ihyl%8^#d_zGnIjc7aG31wt-Ap z&gdPdW4m>r;hSWV?8-@$jsFb)xdr73RR|xG5$E!szp^c^7<4Bj_|)}2War-5f)0}p z6BS@U#8UIEC&ALS2qs9@P^U>Z5a63 zf(-Mfd=}tiXY3^Yd&K$uKIsa+N+thm+bO>XQN76TTUyhT-94~K{j4^8>&>MjF)aI5 z)qd@e(_giS?e$NeE6IE%+#(SUTAwMhSzNUG;y++m^ zj!@I?g^~?_nTY21Q_ukj!l(X<>^va+l%M4OKo(R}l2rC5ViE^>WGi7hG@chi4O6>NxX$^e-NO=C_@l}y$={Jm* zK~%Vve#@BIUtBfZw_v)8n32FXhsb?Saci!k$x6p|L2~ElBUY5m#(nrq$r7Z%Fwm-8 z#47%(`I4wkhPgQG?J56@UCUo7-27ElECD#UyAZ;1eqOp?RNq>uK7+>qD-f_e##3|I zqJPh{a$%z5*7>50z&NFa!$>B3pJz%Fxj_874A^M66%)iKg2U_46fdV<`Qzt>pT@rn9o;smEsTx z3+^G9mMx+*O+8b;;Vi`0EH1*DT(gm4{c^FWhkGnIbOyh zrCb@Rh^PuB1ow-9SGV#|20ACON)OaU_IUN)55%di)_7I18fzmfCs82&GkohYpRajT zn6QhNEgz2KLTVs-i~FkYLuRpTpk*r~kXKhT4ANR+20FCBOiylSPu~QZo@w2cyp{L? zjVVu)n(#IZ6LM%Wd#z{6WEzCy#Y9}d+k(^gU;QnQ4)eB}%>b#saGSoE^F4kz*F!mO z2bD2_;7w(WZsK~j5d#WFl_5MteIMwU}Si zhhQ2Im^ELelwD{^rPY107li9)@aj^RhSG z)>>8#eA2Cb9bT{b6WW2$Y{VBSRwHDRQcT>(_$X6&bADn2jrjRHHX=he0`2RIh8VsN zxMD<@mNwLuS`FCAE!EAIhga;NYnJVU<8S3vws>@|=g}3p<$n~n)WvFc^CXtlDdw=C z_RhedV1B9Os~9W0vIH9OOn!oKnSZ*{(tK*k2;82CjzjfTaq=ijAzy7X`2U~wl4<~5LdDt<&?R$!V~^EnT9iBCu@C+b8jXVf90;h26A&j&^6 zBXho`GP4|gq;*&yfi4lWxjV>AZ28u%C;b9Un9qYzlUrIwwbnRjPZji-pV$2&B1l+? zz8dD4?L-dCGdZ_9Pppdh{0iHu1vRT2o_Q2S_|))iuDK1lC5vW5kqDD6#gCeG_|yFl znVlic)iiI`wclwl9^DShWp|_)*+y!v=dqPF#VFCeu4bf4u1BK9ExsIfA4{TitZZ5I z^-LZwjuq}iCEAI+t?D?_p0ZH9Xdt{u^|F?aTH|ZPLABx|6@F_=>S0S%5(E<)S=-_a z7u69o8T2q|8)U`vzhBd9IzuleWykyVQygAXJ2T8*h%boNuESQY;oDUEex+A@=9A{( zJ|m$h0%h}=zZ&qF@3&D3#G!&_T$Iqhf=OZKc{ShA>Kesrxo?X&)N*5U{6i8TJ~3UA zSt@xzC0ENmxb)~r_FCId7g}p=>(z|zMpgFS^AJV8jWdb%+%Cd=eh%#vKA)F(lCS|E zsFcKt)vEX_`-9uAGqQH+MgM(RX8q8)=>M4!Xmc8U5EIocT=iE|ML2do+nJ%K`C`vD z)_4K0H($C1MzH)GtN!MrN*627MN`hj5Er%{@s5(eC*$F6jEB*Kv9ubDhp}{ft2Ifj zC_!mij4A)9ct}XoFfNQVf*vQ+P9VSer|x?h_As7nJKNu1YBMWmb51)cN!jwA*04<% zOXTkI7SF=`{F(`9i&_1kSoo(tXxy>VxbXFsPgVQ6v3)rI%s*&f&tUu9_EA`W$Dxcm zi<2<6<7*kvco&G$ZJB2(+m9&qw%hBSu)fiU1BI->ITmevYNA!8x>-}J<(1OSR;n#7 zlDFB}vsW&GnN6`V40x*j#9Z@$H2c?FH2ZL?*|v{{%y+!Ro3iZ@?JJ!9(P^NI}j5 zL9mOO++!gS^@=fs_|K}_NXptfIFXf!ZWj1)RVxeNf*?w75^Z9pVI)eLi%BP&;PscW z37id=Uj%({W?l$QVl}ld_lme{0;Otq0wM->fr%09x@kQM7-$s2x#b#S+N4A~zo~c!=`gZi`qrq4+r5 zhf63Y@s|h%HF1_@1@hpTL3{ZSEx>#SWM%a*|3u}8Fb^Ejhogt*ba3Wa>xpjHyzz5( zN~|^u*P8KEskM+It~d_6$Z*A)Lf(OvKw7p*ENRSwbD$%9$Amfx>L<`Q(^UHv9yAU6 z6ei2vLZ#U4F$WN~*W+C7xuE z$aezVY~=-7{0l_-vYf-WK((HV-JFx66@_@bjtx#0Ug#@qFrUGYM##e$6GM3|-mQ7v z=j4@3UaIB=sZ7gq9^WjyZVTZxYmOe5MY$F)YR+sG$}8XEb-a_8A?=cyXqWIhL-9Jm zS-Nf)nsv#6BcK+n1e!1E10GzIpUaxQ!xy*=&3kTCgo|j-HQ_@*-2xOcqaeE%7Lc2M)fvq&vr=lq#ojFmB=e2aFzPi z2bWFpKQ{v(Sn{;$lL2jid%L68a7|g9h!>?pB{`OA%}}XJoq747hn& zmNS-|MjwL~&qbb$3)X&=2B*^H#45xhZ?J?p7MroP8v%+UkQy4tn*T1i`}#L{;6;z-aY)69F;8nuAkJ^4PUvYhKarp8Von!}O# z5cn{BQ^SBPON8BGy#pK4L0H@zbQ!wG`>2wCo5R`Mo%5-m!yO?aBz^u71!3pZa8xTV z?-MvO)umBma7`zmdf4aKht)l73GSO~)o+??5r4nMecGd>LefiPq6*kFRsqin6|jF$ zz>6&bpOFXslz?Xi1w5Jpoe&gIez&K9W2C~kZe~mVS|CsJEt)MoP9pK)=C9b3MVr;g zgrL^^MrEks33E7egUVRKS}=@ZE@6gmRZV|IPR2upUPb1U`rhaA(BC2%S}kO&)c307 z-q>WB4V24>ZI00Q`tcsP6q%KmvX4wxa&yI>)VTUu3mg3-P#=jru=9z;)OB0wFSEIsU8bdpKK*){0JD<`ej zmt{GlRFykeWuvjEQ!L7G<((tw*ga zu_cYT=drRRh{q+Hw3ccx^wN7x{O-QQJU)L{9VpjqBrXQt+yo;ax0TN28XyK#Odzot zVE%bA9OV>bnY+5?zE;&CG=TZ!;daGHM>62T0^q?q;q$JDbFp>Z zprjw6uE_J%htOv9r(8NVMm_nHwCR2|M=(!$!V28M9U{PuFoYOn1ZzlW%yk}IVUX}* zvFGsJs@tPOa;U)rTA)ji?(xw11MO><4h)jhKnMfbu{qS|-NO(C*F z^M>JvY`OTK*H%faXZ*;K!Hgp%t_mqnTXmFBi;HCs5e6Mb-cKWEji?feYEC)@!&*sj zJ`4XE!|!o9bw~b~>-(sv`q-M6hpmd$!#SCpBYuyo7x-s{uQhY;xhhfp-K9{TwW(f3ULNcmqEwgG^|Kk%Gx>WIQ%nCu86(8GKf zp$E3nD`ukf=y6=0LYUGT?>|_>;GlqFzzXM~m4Gs=E8&8NpqFr*!#$9zOiq%;*aS(Y z?`?`-&=Sj`upCdI|91R@HS8tU!0qBRx#r{xp{Y4S9`wK*vklD^8ZfT}quP~k(aURw zz+ufRPJ-*UqU*Z+#WT5vle@C*W7*y!wzr6L#1d32Pbgi)IT8NldhQ;@a@K6QY+ozS z)D20<30$&^(iT=#@hIDDl=Yu>zmhHp^y<^psL-^6O4cW=`w zmDv{u3bWSq^;P%FTHmL1Z$b$Msk_@i^?kFy^i&*%3uD+WIgL>OLIZ|X<9v!|iWk>B z$vB@H;=zowk%6VcA?PRKPs7DM^npNa?{ZNrf20n`s`mO;>yyp{I#u@%v^h-ebY|i3 z3U+MS;kuZIgR1sGS+K)7ATDcS{c}j|;apbTVBmz0Z#R!0>+_H#59Z2YGdO`0ooKLB zqoPfVMYO09!o>=bFadHLj>cQ7mOj!}t5(~pt=zPlgg^o)1W>uD+`OD&Py<*Apyc=c zu6@pAW)gk+zWwF>2OJ?S-5-DYX>Wd=UkuS<+J@5pt=4&TTPScF=WkT7q6udrRK`vm?> zY16^91|OJE?t?Azk28Hm(5~W?l3NcdV4t4iH#+>rE-ysTIE*#djyBUYR{D*POO3C5 z#^+pCET#Ypr^OT)P-*W!J)m^xyENaE&;Z*bau|6xxl2Y{G>qJZlu?{v8#(6;Nur|Y zBQgHFHL^Da>vsPkHb}N^K*)5A+C%Ii`xxoBP7x^)>+8sV^g`hp6zKXN5$VGJ;joW3 z{}Fmg5j9Y_+v@N?Tz;qrF)hl=YYJ@P$?8+NY|vg2O_TqZYm{>f4YG&cA}Z{R={Q3gOSTB?@qfDoVydN* zN`}KpcDxZbL9KJFhxrXyglTQp&2}mo?*9-5!W8ROEluv$JS-n@Ga1uE%MAR zT$Ls_sWtO_Y?ojVJwy^{-Nxk_o_j+y%?3OZNNkE7&H0SB)L+Z^l` zXRy&;k#gp4GLL(R6s0ha;Wu^6$i(2lf@l%}3k9ng5vZ0}O~bZ}P_dbkIE-O5tE#g49 zv!$(Y=Ul9S&L4~pOp z^67+1gvL4u72$^MM6RDJrhbH{Qe!6&D>F8fj$Bt}ylJJoY%d^g|@a}-^M0p7Wi zc9dB-K4C5VF8p7KoDrwL=aZ{F`#_k$l%W-E!6B(*J;z*xfO=qdMnX0GiSjfoE9k^m zE$}gZ>nFH9@)E78Zs23E9CMq;-7_&{+6)(|JR{tsw-#q0X+n58?$UTCtM8Wb#x83S z&0d28z8b?VHId;SRLALcqWB6p@K=L2nNYlVhc=Txjt!^zIDHzwN)Qfk%ncfs2u0zlR!X_4MfbHHUn#^^rkSZ2EGQG z+vP*BfuzyR>-&j8iof$(JjI`IC>|~n ziW@t^MijZ9R&?HY7U=wV_vlAl|5jVLvln{%!Ro+DTYl9F!3R}!uFKGmuEvaFLiHIT zA9B|FhC*mD8`oq(cyJAPGdj7KIB++F99vfKs`fYuIqmI`6oE}U-_;ghL#XP5wurka zK|LE_owWRzPr+OMMZQ$aN)$(c(L{|0Ig1rJ!S8ZKPvJZ$D>6{YcNtynq$&t1{c4e8 z8TSkn&3lzp9RRuJh+Ftco1~n$dUQ0XdcTfA%iwi394g9nj-n7kglz&KmjL3}cBTNp zwhUWQHiy1TIZ`8hRvuv-z)XbuK~62m=B7Z=fmK8*11&_X*$uHQ_)NOpMKjyKZ!-HaRA>Tv_pVELG{hhU>_rk+m+sTlo# zg4s~ow3lEe3aU=X(p*%}9Y07Jjb|Ta!LOE;hk|XYhSYeQF}oY%UEPKUE9d zk2hnnp`N7lcC8+Z&Gfv*elNXiQ+RlpdHvU8>nA31QEk_KNbg<6-w0Cl&WIG4sgQatJWpzH5r9s=ou7u5 zp+itwxN~}i9%%jATR$fa6`siA&Dn_{b*XXOZ?u+SNlhM6fRq@Weq&qs6PBO}cPQa7 zFKmmSxI;wyVRc!oE(_G-GstGfJLU2ag93F=a&E@Rc@QgxYfr$ES4PuHub z!0Aw>*U^cI_GWw7(#^i}FW{o6VVQSfR$Erco-qQq z+CtjK;Dr0WLc0Y4()sj=2n|f<8yLuIBLr%tqo5p%hAEO|FJhAj%c{#lGT1%L`=u7^ zNzyBoo#x#3Ht7k98@qD_`lOf13HBCp^+~J9boL=~;LKLx-XFZLMlKJ{mJ51;ez*)= zT85Rzu!6D@+8Umvpur0y5Hs1U%&nPPs=L~hWi-=Efy;P4Cvo-#MHKT(CHAyEhQjsW z;|+2#>g9sXvZ`~-3If$MvF6tE9t8@OVkszKHsE1>Nbyki?`lwaRc|~l$XQ?7`BJ~6-rJfKY>0D0*#{yU)YFVeDLKi@F zAewRYq5OQSe>z+$67i?B<#ecGyeXK`?5qEOv{MR^d>e^q5;M5EU zoqrqMn)aagn{1lm0j8-|p+KXed zC`82~VURza@ml~sl8o7`Rq@Hn^{#cXNq!Tbqyi)9Ux@=s%Rv;Z>2{h5k#uy1FQUHX z=uMv_YRi3RCF+n-YQ5MR!Ov^w$l-Vo5mi|cM`A7(PCPD#DmWe9(|7b>QT|k}-Whfw zF4{s`$>8YU=!Hk8JrQ~c4`^-&(Q8Ll+c*vtd~hk{vat49T(pH#_`57Uk^5Fisk-m; zs{`T!z3|6wZQ*FVtDlg47PSKo`aYmN@qGNG4=3uAS=-6bv4Ivh9T8oRj-d|j$2beN zHchL01V!U+Xtf`|r)Ud)NncHn3O=FGxlf_DduV(=WEpJJMZtVrb+y zl`y~85`?PZ$P}WfC(6uaFF4G+q9=R^R)Y1HnB31nSlDtZJJEe-U2}^F^i}GjtBY4% zE>@Qd)MfFhkonWPCz<2y%aZ^KdH1l74WE@ipez^gwu2oB%4tU*jEi&)CG`anib;J> zFrcyI!FTI-3|{O!Q4(__soCMR-il7mgt!+PAvC}Tu{Eocizjise9$3yU!s5Or4I?j@h|F9Q%I#+x27(-+$P>0s! z`x7X>s4iO!G#l(pKr%C|-H;(x%EOxHG;rKmdZpa?IY^3LlHE>B$|yNl0GjW2rL-1AU$y(*fGp|)^IchOIwFn{6Tr&;F8P=MHj zPP1_s;Kd)ql0+K!!57G*S}Vrg=}hLf&as!{fUunE2EUe)Zovmv01zxkBQG!u>@|R1 zWCKPxr_l957LMhEAs%a^sFOX={O|f+FsaCA_3I=N{)M)>jiClab@rcRn*HYiZMUP;_4x+K?MedwZ$?jg^}4B))`_aeo)~V z2_M1uE?AG34SHaeQqXEWco`75LYe7%)BM4)xcx6$Hj3Y~QUWL%nFA4N#TSZlH>HSu z4r!fBViwRpES9lo>pN}|JZ_yFO4pXz6A}v=SI~5E)E#YL6LLniG4C^GIG`;hG-#UC z#Gady0~i&eBJ|7%(t(L+(}bK342*|+tgA&NzM-fuX(^@7bxOmChPF)26Vzi^%u3>l zG+Tj0cX8iFtOQ{^h++z8JZ!hWWLQC2=@46ghiBb26CsVO-Vdl&Hbf|E=mgrWyf5?Y z)q5ZYAY|+e=%B{|1O`Xj+k_4OqHMnaMtn*mswsOdyJ$29ugBI)qNc-)`sWNS$ zBB^gI-qx8vlXl}Yb*UN*!}>h7{6%$%;@XF==9P;ysN@h#+w;0l2OGX+}FhtxE2q)L;K%uG-`yonygzLh?C_-TZ+uC9;Q9=5D zv(pt({Bbz(oaANJZ`OJw&p@pctQB^n=IJ*3kC7ZS`&WzN+mkDf+0W<8XtPiK$5dde z-qe|_yE=7D7A%%fJA#A(V}puUPynDJ_F$Q#B5L{@GVZZ{WLuwjyo1-J>A^gVULyCe zU?MQ%aWw>s#maG6qIq`T%h3Q~A|4=ipr&mfu=tCnp@5j!_TdEdo}Ni18f)xQk01<* z6$NYnB}4(8HI!8furrNm!(K{)Ik2C#A2O`LI1Qk?bWxUes=7V-Eic~S3#>U6CB2GtQxD;W-r=W6IkeJuY#=*TDC!v=BsaY*S0Xu*+k_)i6-fDXBtEsSqq z)5}r*1ye<&)g}(ai;&k_v;~FoS{7}9uaQVTSb=aVk_7Xgz&`7QgyQMn#m;t?)u0!? z$fC7{cOs`Rn7rKE)rdL8<>A(bh6V&?NJwaG`g}OXdg!ERfiXyh5O~b$HwT|QoR{DY zj$T>YDxv5KSE!=6jiV%(zQWtpTw z^fUlA-yzuqknB3~=~9}39;)I2rf&$QTt6696>Z@tvDCxvR@M2HBzgde;;NG!U7Z*9 zBSyjz$f(iOWc8OCOg~%IWcoCm2R<4WESMiKuNi`o26OOvc$99s(bg1#0TIqkAA^La zO2VLd4NS-2eoU4qz4?glz{acDD9c?T67N!%eBqT?S>+B8I9xNV6*?l3qfLBvp8}!z?>^)!%|8(=UY?|Gb z_v0b2@reFB$8U1fC&)ZjoyV=~&lp83a67iu)n)(DF5yMF#w`C|ajr_noizFswUdTL z$8A{s=c{Ug366!v;vDvhq^Q@jSKwX&-@~@g-c+#IF15GRz%x4O&zz)KiNb=Jg@vkp z2k2Ya_eAiSTcQx;@VE?O$vAmtG=gsA;UB4%hWnlfhJT={O=$6{;}C3gk^(^{Wfm5y z;MZkm*!M)RUo?Ve5(AJ@HkVrWtcs#wCFg_q83<0neNO~0cc21VeCjv^&vKFiK_(@F zEL6d-%dT?n0j$DJpfL=n9ch!I_s>6%e11fvkxM$;7?KN6+HrOGwB5Nk*;XRa9y^i6 z53DOPbU63sBT6WduG3D(Efri-!*o1xRql~agaYZ(L^o_6;Mrq8OO^4Q!DnGvL(2RC2>@qWoZhwbU4RwM9jVUW0LCzSBww^9L4L956?za9N**;+# zg4!0^1^CjcWUCFcz+7i*77ao1)=GJ74gbcv>c?WLp6%-B3O$VeUeEc1J85SE2g|9W zn1A38s)~6$XMM|$WLQdVMMk_A@&VnJ1z(9*Uthy#`?VTIVuLV+4FaiB#da5qX5nzN zTYx$_-Bjr>SY1*I;UPv5i>eieQ<|uSZ{cHWZ35tvNf9rrLBW(UD+F~CjEsnrR81fl z-hp~4FKfwQ=2ak85QKqV4egjXxYR-^oy5j8&c>}Adtz7VAA9KLt9)&e4=}!UN{%3* z@(I?+-aw*IHvrsj15m3AkUGJ70xcRLdFb|VP>_BPyN37CaS;c|=@-(a|6lusoy1l! z|K_U7>;!sU9xL;c?s^J+5ahJ>?le+In|~SMftNT{!)h3X;{X?k5`$=iDhOn{JG)`zj;|dSu5~70Tr&+7X1M?rL~=O=CnnR z@~!zW*YK1gs=PmID;%y2PbnAi@GcuEJCJfNrZiWFN{|fWWA*^{cbvN!{quI&1Nzj0 zKuh^*Kh_hYzXrbbvb0ADG?=ayQ_0ev9I`N%97JE-UW9V|F`9w1?L{a$BQOa;9ZJ$~ zEeOq|@1fR>=vbce5{xly zH7rRyJvjQMu2y68ODdl2oP&B0`2twDX+0!By8S8HA7`&O%cXt8JQjXv?PvWo+S-G} zsyW7ub@1hgwWms&gU@}@HuZ_ON1J-dsyEhLVkM!ZNODV76-rKat?HkZMnQUqGxe;X&VNYFH zv~lK~S9_(yEtnV%KWWfVjf_(2D7!;5VIBq2619Z z;5c_r;lV!%F(9u@_Zr8O?oCF^lcoh8!RxEc%$hO-apm_XUf$}<)KNgfmFCo^bgwqF zBzcU1S7VI{nf|ecKeK#{F(-2Z)+S*Lpx>2dT{2PfwkFGj1@RnbIeoC{EkD~NH|>PWsnOFp~IR$sE95`NZR1vfT$^Ai8q;M67M zC57*(c-m?iUZg(bg82<&jj5^r67vq%IAc^p*`zf%$v_KSj)KPqeQT4)8otzW+%2gn zG0VF^ozx1i)ZPLne6RZoTdPN5AhB#xGT$uR{byEgeJwJHoQ#GA3fvS8i34?_7EtRQLpapWzd z!f+M1&-^6{_!JxcP{1dA0rw%3>!;w)U=RrZa7jJ_UtSnRIV&r)s!vlhnp3mgbeCko zm9-vg(P`Oog8n+J^w1}*gJnXI3sEFw%MjUu98`dP5#<%90=}ZhQA#*z*|H0v6jg(Z zAxBLYgodLQ@PU4g@dqn!oY?g1bzaaade66`MVKicpEwP4gNI-(xkeJDsI(`?%F|JG z@kmZ9q@MPv%Pw_!TV38#m$mBhhPtd!mzUIKrxXqNO?eUc*F@lFD)=8AhUra%&(Lk} zqZ9DnSpqz-~^nKs?w1=%M1iSL>Ab?(xW?V z_mdwh{Vq6g;5!B^X9tRo+%GNyH*b_06|+&@Qy%8>U$|rJBUv~9`U~MY7-%o!Lra3( z+Hzok!Ot^j&?aAIF^%i?yc#B1A&cm$Fa62 z34TQ8CH`O*Tg6S-Md~&Fwe@3P)<&ElGr8$AI22!E*#DVXc|7kTe+UjGXvA89WVdP} z*ZK>8>YlYAe6f%ctLPE8ITAt?jK0dhGFSR6l}hERi_mE>my`B_1FOpyiWTHSFnC+G!b#=|R|2#?jAj<6G0kt{Qb zh3{&MZbSj(Q&nCU7Yk!RAH>-`_jb+`lwgUarxf9f1Gz}03}_M@v(auS_V#2hBj(8^ z_&z|suZQ=B@2$yj&S06{X!lt70KM>TtVj9)$dsa0#{#O!-c}zcYW&9TGGlW%s23j5 z0?Uak!~)G@270o-49U);Sr)UyfpM zAK}+Wa93i}z9g)5f}@_N7mjz&+8UBmia>63*5!;ItQn-37PB?d8~ldx80FGcoA^JT(rRWXOlDP9>C5h-Fu&+RELb2#8$dn#uAwYRuy7HK)r|@$E z(3)w;$-M^Xf))$38;y*a!FilznWGh#D>hc4XulK&f79Z6PK)+0^owpw1q`-iBg9~3BT zo1TjX5Uw^Ux@t>eYQC`8srfh4^Z#mnhdBUa z?9Ybp zHPS3Dz&ISo!yR4WdWXxg@FxR4qznE6;k&INva%pKJ5cm+J;fXCV9N1Ei~;^a7B=z2 zujB*PPN#(MfqLZzoHPV`E85PK!2#&oSa@pY(_B6^Su=@49dU?-e@8U=(VJ>tke^V~ z>6$qpA}KTaThEECtW9|tA6?d<#Lh13Pg}o0JeygEx~$j!gu6w5Ki*}Xl6$zzD!T&;>{0KRW;=yBnV!azx=1Bly>O&^jSJyl5X<^-~)pMhfT)>N}<7 zp3XBX*(*uoaoL#JJv;nXq-1r|UEf~HN62exH_G>6kD6PT!@FtF3fE6Rx7$L~4eQqA zgMhvP8iE1rS{Z{<4Blz{okEO9?{y*o(lt}s4 z_Nf1VOZ{Paz>AI3bAzZJEYH~_2UkcH|O_nTbUq&>t#)w;Q(EolsYW}P}(SoGCt zG4;Nm^){kd^sV*(|AIfiyhQMv5Q}Fo{9!yFI8w3a(W5oc4b{xUcCeXeg9=wB!FuQn z6&wi)gf5I8Xo57QqA7Q59Nih~_DCYUFQ#?zz`Eds`utB|LFT{trf^7G4qd^-#^l0* zGlm3f!Hr0L46k6`xwyfs-UC!XlQRqCd7r3ptl2oy`R9Dv2HxD6y*@PaZtLWH~(~s8w-9qwpDm zXlH{@Ald8!Jl0HTBvRzW762Ru|A#nOi}!yiL=1!h4%y2VJ( zrhxzjWcpK9w1NWGNr)y1r%Vu1VEyyvS#yuJ^9Ut)%#}IN_J^Zva@*=Ug-<1nwWI$F# zB8Q|q5_z-g@1D005K1bVHUhppw`G(Xtm7;}37X2^`(%_nwD=Gpu?GoN&)gH#P?Lx&p^sGx}}*EN^Z2 zqs^ajM={o;)g|$CBTPxy>tg0&hI&0FTG~|CMI?gdf!u%(CfJ?73=FB9R+p$P8+`%x z(B`#b8lo#WdKET_=V58;#yKAzZ6|h8N}N31NBraKTz{=y=O=&MOPyI$x0Ovp3}n(! zx$kMq4r36o>3};A@oaE@@cw~3$J0oEKsRr~IQ|LuocDQzj9Tq8cVIBRUJWUJ7*DnP z_kcau_3mGay*Rg5dqF8r(-!kwKoF+*C?@|P#!4U|DCHq`tm_hk|DCr9a}Hzsj|ryE z=S{z{!MgdJ#Pj7f@i|4FF}h$sC(CoHJmVD6rq45iudPZ*!^)mxKBLv!WTkO{MiQlW zCvpq@kr2ZSdB-p@)X7|#e9!}{JN3X?c>ImHcDl6(CZn>z7oj?bKmnqxQC%YB%htbY zY6dM3$1JU5=;VU(Id~J5KCa57L-<*%Xg3JD;v41tnpoS5QkC^gDO$#fcd8}c$vA-6 zPZ$K-5Q<6kST~|*8<)y%OKPqC0Mh>m1vW_fLoI6?jybVk) z)&n8@A1l`8FM;??*6vLCTUrLMA^ac4|B1;y?ar3T+Qq&$yuR4iF2CF5cTd6*d_0ps zlhgQnhljs2QToL`Ybbv^VtQN(w6uStN(dQb=6%Ub*&OPl-l zWUYD^>(u0$tWDqH2H-a2+!&!-DfH%Gpt zMedM~X)Ye#=7QYj&;Z8BqqguiWlyG1CMzkEkm9=R8t@D1c~UcX^3K3Ux#Voy6k`5N z8%pQE9PBxT4UG)Qp`~p=YteohohUSH@O0g0Gp`x(Bk(E%&}4|r!yBvpb`>oWICD#_Xo8*$1sP44aiOi7{W+7uaXQvT=yOw*I;k=IHJya}>o7Q0hfBS^7OPrS@REl>UO+ z^<&ysaEE?1x*4-&nSLW5Kw1y3sQes^&|`u#cIDik=*2R0GKQgXgQaIo3s++{A1ryW zx4PiD!+s`3bwn=Xux+4d^-Pi+t9{w<8W`?DSZb5IdLTF*6r2ugMv4NX2W?zyTUZ6S z=Ywb7MA|yNHPjSkpzXB&y5eA0c$1J&KBIPf1gzK?2RAhHR{ryBZ=K46xf47!fTwnJ8)u}xr{{^ThA zDJB{0F*p=kp%-z#N!X?J)N4v!0)$>qxiCI z!$eFK@hAWuh}~1ZC?VNZ4KmvKG~=>NUz{{bQrIz?2fSXxV%Pl+1-JrlyL2# z9cU?s1>o%HMg~b1Xq548Xs8BMQb)PPDEHrw?F;(CHzXlZ0WRl>6luM<4a|BqTKap~ zqYikz;2D%{D)NJ8QzG^V`bLq=+X9bpK;Yy&90#{{z!3~}Y33_fhy2#<((2Yx zgv^wOPqV#tnocBw44^|`9lSp>jbPgwsHjrStz7*S?(eHl#{S1m+)ZL~I*($*(0R#u z-rCL@yqJ3zykft36+)tHp1Iivruf*!sDNIcDL@^)L`G-;dLS~rXx;Td%+LgCf?$26 z*nsRH;_M$}S(x9|eUKSnhz%-BDJT0YMXf~+0W!_{=R+M`Oa{VmBn)>DE~h-^iR`&V zd7*JE3gR>y!VM62A?*!tpYrWdp9sEP2*@d#P03rZuKIM^tp=fmy=@CZXmbt;XRocH zdVn7k?{buChsjD&T0@fnE~u555v`FGb&hm@bMazTuSc2F;35)J>L4g#+m`qK!PzY0 zNsL2R(uh6wHuT~Me88UV^EQr!1PbjH{?$?(AMH%clD=)3Cca2sr>!7rLsbk)Z^5C0N;a#KcuE5ueAVsyozy7aWKLQHFb1FmS~ zjauf#bmwdyP;Mv#ihQ;K1*cg_Bp1EUu=YJf=0(_|6oJt`jG$^#s;a1VScw=|%7TGF z6%m-tCbWicz_enhn~v3ASPW*}g}K`B_O-=TE^Ya+x*b>%5IkcBFUDi!+hn8RLFNj~ zPD`jx)0QH1?x@E^N*A7tdXul&WCe~5&=xF0VQXtxPjq+n^7?vp zOnICfn+-~koiRsR{ciIgEy&;s7;>Lt$nHD95N&~+Tx`r=%1o534{4x+V?28B@(ewA zJ?0y5c%20C369b6vKWnsw%~0h=T6Pb-N=P?=7C?$PN;_Hw}F#fx)R;cWKpYQ?qa0dKGxI3EG`x>gqsyuu^kjPz|OF0>?v*0M+dgeyR#kG z-8E(3Gz#{&Xx3?fikf!g`7LR~pTbyuNRDC%2Mf}0rvx%Nber%Qk{-H(cX7oz9;Q=m z>-U>bQmVb~)^@L={9zgI7}BeM1*z*{|LAJgtYFIs5q^meFo4xRgX+w#b2aD?Ijivj zU1FA_cs9VXfN}Lr86#f1-P*7X2k~zEe zZNa1R4Ex;>oL_@`V?J#Y9@rik^OboUg9=_=sp2cbHkkJ*`{m64khY|;a$nm?SXfeN zM7t3Q6rDv3$U~(A!agt(8&Cht+~js1@O+aRt_7}OhEZ?eODl=s5cx2SHy zD*%pyX|q*WXg6mHGsfD8U}io1CLr^mDn}F4HIBc}lM=Cg8Z+gFW==5K_+k@of_2S} z?23t-CDvo`D^H&f7M+|z0!_r=(qHflr}HN(qH?A)XQrJ~7@dKXLCM)7IWa6XIKZ4h z+asMLOq5LH3uwfa5UBbQUW~^JtA$U$v;MgOwJHETom$1zXXdS_3k>ThS#FQHqM?&} z8LtXusqv~Kzu_iCh;Ho(U)D;dHarbSv=Z$ZAuH0 zM-60M08B7L91DMX4_c-k8r)4wQiO7sCZzdUz;VS}Q$o+4pP;^`d~Dwaik`eBALQlO z-CDehA<`>&VZCSp1n;@NbG@sskCf$_a3vTZ7oS%0o| z*k*UXYVM|IybKGaTN9>F`B`E^aAli z?l1mTEF5cu)3o_HC<;z9b_u061g}d)!U~m;+nzBte>`2A-^A%0JYgph(xf5HgzhvG zkS0T$f4xdG!Kg?_nslVmyVK}Mlc~)=0!xi@5Lh?^X}GVfygLnse~){#`CP?^H04G` zCemag&BX3B6Okrcn}3cqYU6+TyENC$NR4z?UOWqumq? z$KM1g(z5NEz__6cY6WW|yrpVq3l+oEgz6?*K43y|$iPmMkmJ@o6t%5oD zl^#W4J_Lwyx{pP$Kr5m5BJxxb(|Qz<5mN*UwEj7dwULSl`1v>T=Z@SdH~D9%Y>UxErbp8(U1{5j|cP=uDm~qjmlb_BhcWFNzu`8U>UB zMQ{9!hLEFmY1z&=(Q6lc<7i#@Y*@F~FyV@`OW~~O+OqLgb=XJwN0EH!XYD04KgHUk zYm4i?oKeefcjH^$7Thhk6UGnY(^GM#4%3_EUo}8;aq7z7@EH7YGVIe(*kP)ZIjz$< zVj%EwGNv9czyNTv-z@Gd4Rj)h%+^o5AX(dBT$hZ&uq(l>2CEGS6blG^Vs-Qc9VYO8Jtc zlrqzq^23;vQs##$B{$vLWo9tto|u$U<{p)jhwBD2FCg?xgkpa$>O_^mJ_Ij14qNpe z2wkk1%2k!~gmPp6g!-8)eJ^RS3b!%n(P&scSrx$U;9oE%5plE-B?ITFZ=*0{k%1U2 zoZxbFr;bgadR9C5cMPZDyvXm62beU5(P$Idz%pPM%{`am+RM>wSTMVy7}-KUgHWKl zDSv9SrS$9kC@K9Ok_3uI{M3=s-2)vd9iI1%Qo0I>tl^k<4sR2AOwt~0wtMUl(Y!B1 zl~8=^(P5%zuMd~YBK1_GE_bWTG%4u>hiZH=;v+FTgMyhG5-4ki4z;o z80L|6Pk^wq`wW7i1u9m}jLAih95=!$4A7GcFfgtN?aoJ#oh8{d$i|^Sc5EVT2O0>p zlQ=Pi&5Vx78zT~F(lE9o`O%P}6#{RSaYh=Cb<3}4jIjG5Vp`E`A#?aa>%B%)=_0Vj zt`hNbOV{&KedYH5Nonf;&KyLybL%Tld%r5T@VX&KbsoCCGH+00*U(`VQ}C3guYBf# zV>dr_)$!Nylp&2-aph`##CTCs9%bkaJZ^~`4+zO5{_-PCOi?+4L_$s7`9d8$OGB_U2%NFha-7q7t zzwnK|;+=VYBUgGH-K7_<*0rm)D|69w5_*1EH`9me=G7jGBGv~T#vlo^up}1_9KnU< z)MfG|_l`fs8;mN9+|KUl6n*4w#3R>_?$(=d4p`O+-E~CF)8hT8h5lS4n4&GdRr0Kb z$!PQ!HfoEm!!vh)L!P*{9YS0{A}l3cJ+QBl$qVGDn|1dhdhM~|RV1md`7xGAO7WnA!tFD_YSa#CD+#>H?)lE{?&aDB z6}pD+P%}=I+{Td5Fk^M0%bp|^S~@j~hZ z=(6byln*^gQ8GAs7jaNeqI<9KQvf4rZ<4glT$Bu+!%q*@qZ|&zo-f!YpUKn$KnMe{@ta0czsy(XoybUPkHssLKKo*&a=UoQxDr;WL-a|@gbutlzvN?yLn|h|Qb(lKh z6g;iv9h_-#^8t3!63n=t#sx{nKmu?t@20zWmaDP!ofBCqZJiu=O;YL{u9s<0JQVXG zm!$^n`qj3u+VI5Bc=;>#tZ8N)z>Zi(S=z6wBW|CVTUCS5wX{Ut)$x2=b!1zRU8i2F z;{ig}7Z{)TkE*l(#J^FUAAWOntUs)R{Jiz8^0QsZ&nF~k?ZIb-OD|+EWfXW59LT2VbL1RzVegcl4V_VQ-z_wh%Nd{Av+5lhl;TxG%_=X1& zFg&F3OS}Cg!}=4)MV(Am0npddz-evhVp*-i2Uw`Z3LlsTLAkbtHCSyuz8qCfw_T{3 zqSR~Qzg7>yXkZHN>Qh`-=O=Jk{=a&*-!tRK%ibQ}%XryyLfN$`%ka@<1vy~&ZaaP+ z1W4;39@nP)7N4TV%lZSO9^++ZU3Mk8De=&52SvdG4=p=bkijchz-vv>l>~&o-1qSk zTN1gslM8JMcx^h+4_iL45q&hm#J{F&f8j~3ZnPwRAv*_&e8Cd@m*K3}pSXR&8&iG3 zU!?hhx2OApGctU^xiID*1^YoNOA@@UR-duQTig2BkM0}eGxj#M_466~n$``sk#+!Li8%n(TG0^%>i}wQC>rU38bv*dai7+CX;*(7gn@oj~99 zWmyE;;WKy~qX0eb%UUf!kNL9JDWJ!JfdD<`0R6!0Y6c{PhbBr}>fwmLqJHD(v1Zw$=qu5F>Ko9$}P6*ILteMml$G{#Fpobiw?|WTM zfD{~?N}#D;SBnqlhSs(`z3Y__$wKn3w}FC4An#@ZZ6naPeOcQHbPrAf^%*Aw=mB5W z5dj+VWgSyM5BQ8j0yN|Reb4J^1f<~DGy+Wnv3*9Pw|4an&DRu?ECkwY0|k))bRB^< z66jW6Ry%=i_Zgq~j3WXR;aS20bgwV#kOI2TXM_akUI*wdFcgr2W77#V9mMt-o!;8! zLqiW;N3sy;aT_Rz1fWd>+DV{Wd|7P-+U_%U`;4#v-RaBPFFZ+!jy02-;y7f8Ab_rOfNlpv0Vz1vL!h2+J^gcku&S^1G@C%P zBYNt(A#h6H>uC;w=0x=L^#yqtI`3;e9Yvs{B6_-dZt73^UQcrgG&iEB)i=IAt?%_T zpFr~?dV2Du4{G{ePYVdNAfl(w^n35OeXpmZ33PNsPpc387G|Q4^|YjbhIS~8`>9O_ z1_p0T&TBJv84wM`(dA}bjj#A{M^0Z zm!t4YCVsw%_AeawI@+T?Zlz0#jl4D zgBYXce>cbBm)i?|1e@6!GS=;yaZ)zNV1-;-`q43Kme$^5CH}1h_-syY$ zR~3if=w9%fsPHQwezPO?Z~Ub7=mGU{=c}YT4!`1F@T*k#jV69`BKGf=kt5Ul-u}&w z!_U_Xem5)pih+93zk(1OFyw(ELhs3L8lHb z_;H_GL?KKZmJ@oxvRYwTPAnS)OMCce!t{Z^=ySU$go(qlq8BV@D=a4v%SQxDd%Wq@ zfw#fC>ErPxAxs>W6MMmOj>58nSUx6L+5=QST-RLN=QdIZ6NhDGPb@{r6rvM}=n_HH z9@JVeY8pn;`nasfcGe!g>hXCDHGNf7E9K z@Isq7L}&McDD9C#w3>+iLlCu%Xm-EH-|c%NO4`IBI;R&zX^#}5vxz9@_#(dMf(wUy z(f4+gw24LZcQr(+$B5p7rF<=edUJ^DYj}+KomES3OY3`6O7g_vDrU1MuCz*mt5k;Q zHVV47K^@-o)QG+}sH9LFx?((gqD$MP&}DsyZi}F6n^pJJi_YwOf3y)G>fci{`+lZVC=`dT7}cKWQYjU>tPjzBThO)5?d5;oer4aA zTT&t^hwf6m>c!|b@->a_?^qwA`yQ?l zyL;r$A5Q6eyGship(_TqCv~Zm3f-l+Bf5KVjr9FLoBu#{-`ibMC=OjQuszYGQYv&= zAENuApljRRJ10FoyYKDp9)OHPR}5@VbZNE}x~vb;wQ!Bt-SpXQb$xGlNufA&#lZGN zmrAM7WqpY5K|$BHyY9r+#eHvgNufA&#lZGNmrAM7WqpWlhoEcQ-Q!)aH}t)OOA5uI zD+abFx>QPqF6%>dzYuh7yBnTb{#4)FT~a6xT`{md(WO!qB(E!Zl)d56`{}HllBb4!A5>R=6c$g&Wqd`I4~8&A@*W zR=OGZPr_<91OG`_@n+yZ39H@={3l`Mn}PqNxj4ZVE8rNy?UH}U@;Pn(!R=ffY_Gzr zZQ-IkgbewIK+=P+#V)`zC!E&Ey&yahS1&xS)lEyo2BChzo05Z9Vzu4a)ZjH(YM*Lu_y9$^Sq(=U>`-GwV3Pv+=QO@<(eB$`Y%jabML&= ze518x(mfpqM)3FWAYW2u{(wy_`%AR7$tA`nzT7joB=27(dE3@}eX>Oo_48(J!zqQ&)VIx|0mj;$t8IoOZr46{&d>r{&?XvTD)0rmbgA&^U<_JBYXosDRCVsadocw zD7=$NPAS1UKi3JY=W4m^o(^jSe>;H0g#6?IyVv}4+U6v$v5hbHDoXY1zg9fygAns(Ipt6sstod~MmZ9D( zA<&_IYd-yatIxH;m$lo*?C|h4MV~h_!_SKnQqqz#5=b1Nyf3k(Y3|8JLF;XARtqWf zbya)0V06gmI#J>}=5-yzvM&M-3s;T|0zFcFAjs3e(Th(gXs;qjYXr$7V9RbU90Tov z8xSeUYb9b#eF%K|e9bvR4=lu#0uoz(eon#}k0fR!taM6%lC1ZDiO+S|=Q<9W z`~*_sft2|3J&H2m5YQrreEA;VfNd@NZ`4|ou~L(-g)m;w{p*u!BpEOQQ$$b>1A)~( z&})C0_Ld_l`x2QtA}Mc|WW60DDIJiGC`sw`$`Vo{55nLVgz@KR`vz>XC8d=wMO?jk zB2Y&hNr9YZVKwP`B`J{Jh@|WR4!a|g(o!PA>PX7lloX%q5G4g-0%36-6G2ftI4~k< zVt$U|03aV8G+`3AI#kd!EP*;<48QIdh;p?)PU? zyG2F-6WSCdBgcuxekCJSKnyZs0XeVnUP)GqP^ANc1Whi3j1-HE6vvyAiTT9?!114G zExp*1wFGduH(OGoZFD4L&;J!$Le=RbTk_7oXG`>mn*OJ@q~+vk|FJFc_mM5pfg9wc zqgPu}0y#ko23u0u)0R|u>6B{yoD97*}VVoPrBLtFChzhO(JL=^Qu zwI#p%N{I<{?Ej@Lnc6qDBpZl9Mml@5C3@}J8hC~}!YN|kk2e1rYzc|-RBV65aaG`D zIE_n`6`}c;M!aLVL63k|W>2DWYXoKs8Uiu$@LZ(Tr9VP91X6ifw+{mU!EVbtU^B5~ z{e=BUn<_2vk>PM#2m!hF1A_Q0c!s}$^x|>AHxUqMPU&XAhafsI*!Vp(2=0MhfkUXk zCO9EBh<$@?SK}~1u(2YDeE%V9`ISLHB`v2i+>id5HBK-~-qN&*VZ&ha zB<aK9}9L9~!Pm#&?PI0nqTX z4xkt~PbY@WJV|D^)ohPZoYPd7MCza#WRWctM%fZq>d0^wcniQ{q!2|8oN66pls-L zHqzgP*4-NOk1&i9cHnZWZgF?CGHU=J^&anf<`~3E$l=y>k8bh@*%54@_ws*!UARkI zhVpT)Qgrcuo{Qq2bvDhTK(}s;!p>OyOL5qlkKLsVjD&soIXK#5fUn-4=PET3A);{Y zT$~F!`hrrUL*ERub*#AY^JE@3;Wvl%n{X;mAs>A);#E!0FRmY*cZE3`yE5mwyn(&i zIBi+#P`z;5w3ov}_046P854Obv19u2v!X~0_~5BeeN{nt zQM_z&_VC8KXRvdq0LY&kIS~;81^C>!jyvphmM~)?{0#8&aTUW3L_%T!#m87E4(-W9 z6%hGu`lzh#keY- z;)$vv8uo9m;$x}bR7JqGs|et+RZNPhV(1)-6wV(3EKr+0b^Yg3&}rObWjZ`A~fm zOmfLHJBrOPR44o}@QIUm4(J0W=sK0Lg7^cN72Pn48K%Vgc#kT#0yTxLD=$FcXvEe> z7_TQ;00O~O>V;LFdxz=fuVBSC&4RtdF-HcXOdI(Uyd33V^ZgzBSq`BDTFMz^{-1xP zq`<(c7%on5JjQtUSnYYyd{KhU*d@C0 z-ji#c^=s66AHHtwWat^-cv4%;kmMo8sI?MigU4ZT+hJ}``uv2t-J?w?K)@Q8w)k{@ z1i5m%$(14GTE6>G7i7;(+L$RTQyHd8_++<6h@ZRh(=JAp{)3QDA`VILY!J5s#I1%3 zGv56Z{A}#jM;`H;V_p7{I9vGy!tw0ZjcxkK!%pZe9IvQny^F9sLzqGZ*5NU;rCFVR zR})SUK;Rk%{Knzt3)amUL$)+nm%aO`u)+gY7DTkkN0zYiuVSoK;_t%!l*H!Y>3d{uY?~f&ZPx^Bv2lNM7 zr$VzJpU^X?Evke62@F_;V|>+#<2a7~gSp?=gQE}Qgz9?-BGk>{PJdzRy(xO(v3b}+ zfhb!Py)@L9N9rk+f}%jY`+uOs8-fIDi5O*IfjAUi$k}tJP|m)`H_$?ybB`NjgETLN zRF`#~@qjsRZ(r-#q+o7cF?3Y%y3LtvVt z;TGCV9o|OvII_4B{409i(Z4yYRCRWm#8C1hp~ou!A@vVOuCU6vj2(mn63S8ASoFvU zm<>BPSvjBsK-erb4u`HHiqPdMmRiA#^}w%NU8V^6>)%u4FK08$1P%wF>Eyuohmr%? z#G=aK0CIu@XF}0P{HTbSivCsB**J+I{En4b4f-$Y7PC0|?^p7bL;3P3pAXGKG2TL0 zC<3DB%EK6LOR$!7nT>y`5~ljbElr9L%JFE#d;Br z4Qr!RvcXy!^9*ijFGsZPsiz!myA7%-x_C$&3)oUKWoG27U%pzyrh^O#;6_aSXR^I1 zVBK?Bcahv;5|-HN5u1h9f$bXJfgv61RVlaUM?+835x(+9hsa6I*4yWlp^Ber$9Pq zSTKYZ9>n7Tp&^EgvzH<-sV;e*wI8N{KMIa{J*2z}!Of1$szxj{v}6_Kx|#eCY;04Y z=r=lvJJODXuBz0A77NLQp4JQzaaK3bGMf$GQ%CHR)y1JPZE~ks zbINgIP%9DyA_-`fm9tX~+Cyn0DoK&DEeYBQ9K2WBiM*`ks-%I=TjTa zdvvS+1K`dlsLVqY!R>TeMePbV&rOGDdbB5->Toc^uc0;)+!|*9er|24f(V`0tx3wD z#mdvwJ#BRkKtNCmy`DM4E z%)GHDJP()%31!<*xPH!=aFRSaKo&O7JB5c>f{?MGUv)eXGo>m5dbk3;`%Zv19nf-( ztuN2Zg-MF^6&%}PyZbuD5(kGtUm)>RD_fpH05@8WG?#S{-Y~y|v9LRoAP+O?yvvpB z{8~Z3Tv!D2pxkh443Lxaa=#frZQ*>1c5M7V;Fy88j_L?FsDH{SIJq~X-lFm#rLFS9 z#7Zg*i020exGRtvL2?Ckw{&XbXQXuhN_Ku0}$hO<>5o zS|8aiuT)JqYEX&8f`{U;8Caw7K<6%;uDoSlT7&h%o2m^^goF3&U_!z|_cN^1p@J-z zNX*$tb|C+F9I5Lq*B0(1kwnJL*=kmn;i!Yx6$54g^f4C>6MB8A z08>pn1J92Qc80YThpISWw8fKXIsghaa=b3O)fuc6f-0KHL!A0#r)1XvYiXVA+AuyL&&X}Ceg{W0N{&8zLrlUa>QX!vQuTanA1y{d zwS@uFBQ_o~R^B@;%0jBGc~^=7axRf;H3RI;lAgFI>0rGTYqf|MCiq>z>b znLu8ikK}}Ag#y5Xz}aTjqrU{Im8g9je)f3>I&DZX+rwhY{gf#DB0=qxEU7cN70)ve zXnf9I2$g{+uQ&`rhxK^X?%LwXZk1G*SvS3@I*^2!b|+Y`eDayde@?i` zT6ZfT_d0&1EnKd~kIIRI-Jgz91gS907mBs^18#R8@#&LlRKgvhNt!jZQCY3iSSCnS zMXO^Tw{2L3v~z_B{P#e%B%t7-N4|JCpCFKMuTnnvwH^KTm0cXAp^uM(Kt}nT?m`$> zSD>gh17r7=;|T z5dB*7o&w8-oA5h8JmV`xC3aF!D-1&LfH+i(@$;|9>c!PkgAloaqQ%LCixUPf^T5w4 zH5#R&p`X&unfG|C-z@+P9tV+YJ%roP>GENgn-Or0qowf6z>i96CcgQNHowst`V*A^ zEe76KSU2H4M>II<5mLuCQf0`#P=Xl9IcsC;XQqUoj%aWDV~+NYMK4792ybgUpE*wNOW*oiYun%r>adr@eFs)$~ISuVAPwQ%4uw~Bm zXm&k3c1$naF}HO3t$HwBoH9@wO7X+@RZlR3ZOEyjy=W(&rrLX8NI6bHv%ww|&v>V0 zb_Y6K;hlL~!Yk3IhsLJb8k_VXHC9v_XoTynmsg4f8^l_E4{T6wQ=C1Xuj&_P!+Q0X zzKbK#Xfq(5G9W6$61G9hA&V+W0JN{);4d{FJt7G9<}XeD1(58`U#h2G#I$GKHcpS& zIBju}=nuv*U^43DywzYi5asc7g*)e^p>u;a%9o(2qSw9`pInADv%7ooMus(Tqd}X z2|z~>9%9gnr$AAzi@J4ggo*fu3NiIX_J9GTOw=J#9%v22a5tm_jJG`Vp?u;Y>7f}^ zJfzN%0@h0BQl8=p0NSC?Slbx$zih8E|9a>de6wy@E~3;p30%4XFQPo~78Q{rJ0mK=nm*f4Q27d1v)0r1TBGUjeqdR5E-+{gr8@{mLHeqfu>sGgDeFSdQ` z@5nF%%CW8+p;|m4YXM9tZ|+jZj*%RpJzyY<4$)3p2Vp_xIS0gA{@zL|3S{VWbD z?6XnF%hVe2JOV{O{rUp>8KcBD2`;DUO?#7RD?qC1L2iFAd5~_<-^f=<_d*u@#yFr} zJqRez0_xR+fY&S!Z#X15D90c45Aq;U0bXOU@c35(WRc{&O3E!@I$-S|q$3^V{VI%* zY+P~4*ds&R$hMSFzOpu!KxE?JEXB=>FLfy6YWEsCp$XEhGsXDMxiEYUUZM&UGYIdgO32tmVTa z5~^Zcb4ZV6N`r*W4==LT!Rt`Q#O&En>Wc_L4f8=Ztv00;7}A4W4H zc}N^;4zLH44?EpeXAr`k9fb+Cn%1bA)JSQZ`l6T3Q&!RSU6hDYIE+t}K-+(0FJ-bw zTidi3(=OD$OBRC}z^R6x)d9YcSW)*14iadKZbn5p9l$~!lS1Y|ug#S4yPY9L>B-X@ zV^5v{JuCs#fInglyc7pvm@1OKZeIB6c|83h5{&=ddV;?lpd%=xp$={xRNW)M7TZy- zIc&XH1^ee18@lnGg0h-G=5vB@M7q*-Di%M)7_TytEKYHwJ6?||a z?}Pa4K~PEMJP9+s263igJC-Q!nWIk)6rJp(?8D^z!^SmIt*%9?TA?Fs;>?s^j8t}t z6mshjT~#-B@{eD9uq*T?lYv~oVTqc~H&YJ1Z_^i!j2l&TS}Bm3vnAghMxn$(kT6Zu zN*QSuzNr#IerhbpDC2l$O7nxZqu#SP*ivh2I*XH%Xpc}FWJzTXtq|-WazEUvBv~h^ z8i7(on(^Ew&ulpG(9Q>3xASVIlx$ZA?6B&M@`+wY*Y8z(1CC4o2kk#-;3iyMm;#@h zrU+)34G!2}&etfmLO$CHUfV*wUu_ltRV>Ei*TZ7GZJ%1zZ7<~fQ*MupYyVJw1>M%g zPsz8=Yn*A&CdA%P###jr?QVo+3Wej3rnD%E=jF3Wyt?kI{7~c4O!+ zSU>B9>rmO#a7SkceYZt1D$8j^WgWp)tJ)kJbT7QsQ@ul=fl9>NZuXDn`oDu zB<})^Z%Zi$!%xKeW7@(cNC18m&>~<^7(dn%+b9&t**O34UsSIzrw{SuA#^8#MKAmx_Pzu>iYogzfkYybsjwOlG-%YI2th#;2pSf# zgF&M*7;zykgQ%zxx*=kK#7-x~rX(ukI5X;?jY zKSJIQYw>-ayq^&J-eoV!A<>Wrb|H6S+Kiqs{{HR>cG}>{ZP1WU1i`Q@zEMw$#pkv+ zqswDPq|?XnpwgoXAEpYU2QGP;fm5d=<||GR`1r@u5@OEJ{Oe-2yfS$iUM3n%H!?q} z3(wDlvM@T`k3SutiEt0|E1BeU31A&!9rGrb1CG*us5G(2<5Eq;acix!IMuR3Td2zL`Rg12SfdT3eM39-B zUO0#z#%O7ZH*e6Isx`i}L1X|&6NpGCi2U`!b`Gc(4Kg$M!tXguU@yjiYI#E)h#sRg zG!=f>SpP@x-lY-Vivw>!$qxp(snAHkS&4*a16zG%tO~)cdhg|g9=OZV(lBR;=rg8$ z^5uY=BGnuaOs^`R?^1Xt)0^o=(Z?7-P)oKcFAT>+_g1h?ptJ-iowCAstqQ$5!Z?n= zUIAcvEJmp(cbFEK#b33@g{C>W5QXn51%K-_7e&Jn(D?KYi>_b@=!*-`v2La_IV~rO zF+hALV^Fyn57-q%F~&9H0sbThpeBz*!5fSVZ-hT`JNmAL6$Ng=x$eR##cAF_;DCU70`5ynj6(uG^A+?ur?Lab)n>`l8QF_u?d=bDdc7Pp$ z*CDwUPh^ss;%s-V^Z0WTm{bOqvm|oo?W82>2W>OVw-K}p|J%fab!oN!)9m_>^#l{p zL}T8ZZd9;J%|)6*AAc|^-OVA^c3k+)HrC%>>NnMJRQ-K_hx(6@`b{++RewXJ3tb0? zUkj*6mZE`HCFdh5JjD*zU6*pGmVwKrkUeg9SjsUw{5kOW-#Ekd=izUF_2cID!rxS0`!u^?x@Ek`YqdhBY z#&XWA1CrFYs9g&@0gD>SqzUJ+{r7N`gAXRxo*>&bmdwNpJG@U2WbZJ?)F`Pj>7 zo$_2k91EzIbpR;-tJno(wfD@gXddWG_B5{ue~#M$zP^R}sKf%C{TCR54@bPpqGv;G zCl}VP2*1fsv_Mz9!88jpPFHFEj;KjnQrDj?dHlE*(8WA3nnI!}-z4b%nq^5m;y@5RD70@%AZ1U;H(|$l2PGq@HynDjEm+ z-asr!oB);}B|N$Ji?6FyPcXks5B~?a^di*Aywt$fIYWWb*9DJ2D^Ij-8LdgE!--aB z$%}xemP@`2a-rk^iy)DbUW7LpbZ6IE zr{UXN5+%clO~dU-^bWsA%?Rf5Xo34EUXV62F%B}T#?Oc(XjOiZAtj8IV18DZYbwv` zbD&E`u1xA+YqfBD(wizR6G0Bme+)jbRhm|%;bEk9Z-3Ufh&6)!RLzRHwdxHpB1X;2 zOR=OARsqP9pFgiW^Gq8Klp-e-nyf!AclB&A;3FuCB|zQUjmX*W>s+9hAzrWgCq^{q zvngqRxIYGifjc|pA}4yF58R0v7_;Bkqh6JEtS9%VwfYT@N{!sp z6aL5j9*xGO-^1j_?ssO3{YH1t@6bPDrEfID8>_&g@L-$stD3dI_4p|CD8Dp0H3287 zuL^&u`7_WQv#gJ3$6k+s*HRbC#A%Eu9qNSwymrA=^Z$y04quM%nK%Lu@nu6@=oPHC zB7o#QSP?$gz*8u!Z)sP>pq^ZdL61dsE0a#6R9J8G245;rkoNJSyjiZ*JjELbYY9h-d8|N}u(>@^CDCmLk;20j9bxD( zVrK>RP^%P^$R7N6R3t?tu8FC7W79BIE}P}D>NvDCvK=_oDsF8WUX^ce!(+_PTE>!T z5TSwf{Jy;d{3c=#S@<=(cvHJR`~;0NrQOUWSGntF_XNKtR_q% zjMuRw?B!esSHYVwCpXZac+6o`-zSmox$5Hii~PDp{Tix%U9EogSHF%|m!s9?9Q7_u z{W@G-PE`+^?v=`ZQkOpJ;Wz5nXX=uo9&S*-)~d@2b$MM~URIZ9)#W4ALc%Bz`L^9I zm&6%hglj<;O!r{?f(WH?ppzv;9WlK1?pV<@(D%Kkxq*v{PDcQA<{+5}q1lw>>9?9m zOnWzb8X9rPH#0;#65T+h_+3_rW1K+ZaET)RkjxK^B+t6$$Lj?^v~2psQEgJF}ED{Ba8ija^P$P z0EY`H(^Ck`)p>M!&$Sq`ICTR}g^V_E5^sz`DlUAQK{-ul9aC7`bym1)ksqLHQ-X}$ zKT<85u&1?NP+&sydg`%XlXclyLO}U6*7kM;r%Ggc+UPL?lzs?e9+UsTOe?MG9>E37 z0g`w%9?dxdBp#o_p~U+gI$YFT$5(4H0a>0(>UUPu$IlC~A_+=wW+{`L9W-AKnsXJB z?`VkFtgn=aK|up|gfkLE0eUjX7SP}(TdcV#lY*`^J{LrkD7KDtdd`{XZO=$=o%Dl{ndgJAqbnc(d~hfO+mg}lyo{DNhur6Y zCX8HKU=*H62BKt@&S6CypMAW6kVF19d1?_{LMrCwvj?pSiOnGVJiCkLr>S2D`>9)J znor(u3Tii!UC8cy-Pe5G8?T`YzbVY!s8uba4a^kQUvN`^CpEjpDn_f{@=5Kc!hRbI zYX4&{-Yn?5ajf30bAkVtL|<>Xko{5DuLFFY3u}?ly> zM)h4xmy`rWqEDu$5Kl_Oe~DXncURq1GRAjULR=WUhKd|@%d%grq701zjOb-(Jg#-) zAUvJx;6;qjX(n2*DwpvgORyF6v=qQF>Fh^_aj&^DIhzE5Ly0Hm-RzzwF*GbAtr_AP!&`&AaYuk>}Zs(w;Ck}75|^8}MC{n-EsvEW7o>RFH4 zwZKde&{Lm(mg&USvFK(hLC}4kJd1f~)(&q5?An6YK?Qbm3guKxJv6{pOJvkC9w<^c zLhoq314l4$IlIc$BI8kbQ2i4~8QV`p0R1@}C(0tE5u=ZGJ(@+YnIl2NW2M9JK)V$z zorvcgUEx$@7#|LF8~qi#9O1+f%y*ihCiy zt$9$ehFqgh5lBS(IC=*P#_(6jtzWH7j``wwnStN+tU8KF=Bs*XwRL)8=uhr>mdX_| zN}ncQK$tzN&PnNw(#U`RfGGia`0D&~nMcvVS+|}%M^=4X*(a~7P<9kFDBBffjcJ?; zu6LG)>nGqNXJ&JpZcr4bFrh|ViCA&flaoGiDjSm0_~aBS1RA1L2=o(Jnkr&S=y1>y z`FEb$eIYJ=G;f2r9kemD3=Xz6v|zGq;d~jcFAvJ4TK$@@>!yC*84Seu7 z##_rD*p5EC{RfX9fnJ2z@8uhy5GH_{ZZEN? z+p**dn!@<}RV80w73z1J!5p6BNn4x@CZ2$$Z)|NXz5-kcW5dZx>EyFMXfjKl&6yV9 zTsZ~^7GlO8%JXs{m3p&6K((~LrAN&b&2}+k&=3&f7aIAFe^LA;&b7;*0+%!%qY~SU z1&^DGpQ;kMw9kSf(7wv$6`d{V2v{W2Kw6ShzIGXx2Yn}yFkWX3+OU5Bk}`+ zmw;&p73w1~xwCoZNosZVB}o0r`_Mm}{E^_pTEe6cBd(cId?ASZ0|0%$mia^w1SoN^ zl>~IKB$5HW4CCSNRD?v@0?lNR2s0yVFGfP~m*ATOUk_*~#uG3?fb{v4^xJ@BW6uR> z;Tw-$mW5<4qMReLu?7vq@@)yKYKs^beP-O~lo!QzG9>11n0~Gr7lVUgn&-VMDy$%P{q(_O zgGno3K_Xi@LAnSTPI`B2?O;T#Aa;HxpQlSdK4M;SDm(hM@mRH}t>#k!Dzic&4C8`F zt7fjL+kaw*N(dTOk{}r~j~@U=k0;oBc~yIkfKxoV>ok9FdC>{u+il3}ZeJKY+>?82 zig%bNI0{VA6?}jTQmf&k0~??wr+hKGryI40g9{-78423`Vxw3-5?^QY!>mFufyA)I zEipbyHD_TXVhskcmVpN+Vg&x!S1MT^!Lb>D+p9%aZS@NMz+!%MXo`nvT{Oyq`Kas? z{4W4^#Dcper3G+fnxGbe@sKUkOvbSRp}|q=;vEE1%(b|t1$xXF4_W{SYG=%CXOI>^ z2rVj!S`d%817BlkFfN#-q!|&M)IVa&Hk)^iYd_%9BTL5{joDy|dsUlJ^q;KgU&b~| z*(UxZrx>h^t(v-t1T?y^Qh4_sa=HxTX5tdK#nNF&!~yw$N{|}a-OPuknS|MscQu`3 zePJ+Z%Q)ogj0>jGc=Z(Kg3-L!y#+855Eb{HKQ1Wq7M>AS@>CJ;Bzvl)5P4O|1k9}d%^D;bAXl)lG8UWz$b4BREy zgrQgndeiZeHq(rok6>s8)BXOvnA*2GB^_d}IsgWNS&ZZe6|z1qwFvAf?+Tfi3B6Vd z0uhOR>;hpFRS5_5^vh-1Kybk9XbyL{b5426up@S1T-w&AqrK8aE~aMIm)0TQ%GuNp~VN zLe9n*T%1PcB5_#-Kp6Rz?4;vbh3(XZMgy4Wzyl)t2QGA{F1l7FJBO*}K)# z(1iHXZcie@PUswVu>xIFRM(Dqb7wQaNk>2Xv;P^QEr$OJU($CNQ=q-Y!-muUBmVsge zN>N2>V_z~A2PRh01Kl%rfPbQ@sN@7KmMLQI7)RMpdppZ^XW8daR@xC1QIVV++5}bs zvcd0Ai5y%QXuS9ZY7WpPbi2GR5?XjWt;%P@7iI<3QxpQ?$RWU>ajaD+yxCYeM^wr& zCxaRHV-}}{@kFccNRa$HrjQ>XM)*_5hRe_!P}|-XMho;6Hh^7P)xkgf-c@23wiia} zfD%lw#CA6pw;D^fs}7`*is?jgDOM-J47*H~Tn2Ptg%V0xRxO5Q+>4&79h>DJei}dY zO|!LZ?MPH(l={c|f^;yy!{Y2y6cz}$5eO8LG9Jiri zAcwJ(cY8pSI%2?h^%hg1k*RYcUBs>yiYJONuY`*~^oZK7+(al*3kasG=CmJm+?Y zdOL|-f_lquNxfaX%&p$YA{?UsVK$$J7FS%$7OgkOE4TFfEcArAAvVKA>5qME+P&wE zu#3Me8$Q)jd>c#wLoCd!;C=1|8QT2Ec#T1*h|K1bLnK6r#XKL`Ctn80DD{N$xlxv zUZ4Z?AJOIL-$L~bD82#lfe_^czcqPxjKh>jQpH8zx zuqfZZzoR!PuyHng9IP1Arzhe8KKWD`v!&qfGN{dFZT=qsCry?7g4{-}CV^1reuO|S zAi+k0h5eQn)NU}t)P;SQ7wX-5AS^crPDOLO@}m*Tx~vD%3K012g1Gf%M}l!2FblC}_v-ncj&Ujs3ad*Ph%7>R86Uq&l& zR`}`EK8~543|bP@6SRF6@e1>xg4fEo$qmpm`wD9}Vhw2cU&3QFE!j}MNHVbmo`>f{ z%)y=_h5&(wN}+_7C3v2A#j`1ecvc$9qK%1Kis}k$2g6johCRVd4UJY6t1g6Q&oX=o z;bx#%x@2)+q+-dliBo$6Se@bWS8*-O%`Zm4e}!yA!H19Fp)l-UaeTs{diDT-Dj^GA zkdK+cs}$=(@6Es`>?hdKHJ&QuzcqiLZz<~m)1c4@DP%zlR%W+l>8VvB zdgnY{tV%W&%oSv@!AejVIxeyh%CZ2@+M}PeR+UE0LTRaW>&+_=c=-^4*K<3&hZKBWqdVFYQB|t@y3DS%? zQWyA={mj6OMrKyUe&q~&%N!-(wipkzs#Ew2^FuOI)kR9(uOPsTP)#BqSi)OM+^Ke< z6@gl_Emg|ZRu$&IUZWa;Cp1N-IbI^XAbc^=Ac#TGpyqFE-4ZCh`%&C{SSkk1(rBr1 z01gs;=N@f3i}FjCSTG6t1up|O`YED;WS*M#p9=B@ zdomUA1eJ~=M5IB~Z>5@tIPXa3JVZ;7mqbBsE1yZ?a7955w~7pwC3JYnBr4!P5)bB$ z=hmNep};Ov?2ec$$~PdcAjS*C)H(5rX)EZ_z33v@>Ku|XO&Va5MKQuQK6cZdtO;DeE#w{44&B&-#cVYSt8mh=H34!GS9@wVU`;>u z4gocWt+!x=$fY4W1(H9ze9*?KjlTD7f|{$3%&u1e5Y6(iv51?$?L0RKd7b=L#%`TQ zuQES?^nuHw@=ZSZOf`=VfU!cC$ap|S3tD2Z1(bU7ugg`GT5&1VOoH*~{%;YS*742f$AqHLYMrCNJZrL)HJ93Dk*4-{CZ@mb7Z(ZH2Jlq;1cF{ zMbj(#x1PN5vQ%IhNYs<}o@W_$r&Nl*UpY-KZ>h^tb$MQ0o>G^8s>}WA@~2y*z?*$& zFGGLW24R%F%#t6(Vx;A0;_V^KwSE@3NVxMj-HSsMxlO?c-oF577+HO8|bzE-dYB-{YK$(V3b4Mi`ws0cQc4<3210!3S^Q19>LD z8q&-!RE1+vq4#V*(vDA-*LPbV<29d7_hKRrmCUl9ho(coq&s!SJG0cbU0J}KtQE>n z#QwjohtjajJ+KU3-{pF3J}h@V^zS>#myE{4ezTp+U9anmajxISfnK1*t%?$gg`?A8AS_%r|h5qvU+PuB3szh8r#CWKcSeF@Z5H+#6@)2d&jl@v!m zOE3@0j$>poY@NU*_z;>QTML}VA_V@SZx!%GBJgEeK*mhIsj=ShI~lYIl40#{Sp;Na z%w?db-v;i^pxqh7`&VIgLj_5Q)uOF7zayJtW>%uyY}RTTX;gtsk;6awA&Ko{JGQ#X zlZaR=JxeBJ3Y}@@F8_mz&S*ZHV?#+qpGP#cz%2uZo;uqV1ntF+Z2!*expX2l3OM%f zE7q!-!5ns%Q~2d~h$VS~81V#0Ia=Ur>SYTn9BhoW_(b@dqe~GyNB@2#urWs+4&eZ; zsvquTd9A`2pvuAawf?3*nG@3#l^$j)jB4f-EwGuWBq@F|7?!gk$kyi9;+212uC}0p zHw|F2HK0Mq*<;;cokp)M&c&JFai{}4=M&z@l9Z(<)=>pkN zOvXxjrG1C0!Ag0h$KWI5pOE(OgZ_P2mZ$mmO`dy%egXJ-t!yIV-#3B}$M7LodTr=3 zAox|XQ0PKI^~qY*F}MjG$6rlnYgKyzN$4W{@(>%?$VDOD-J>hTj6-LnTcO1$caC1#aMK&O;$2V^wW3 z#jVJ{|Bu>&Yo)|`e^UpoW*az@?rs8?8YaBSj5mngXlT{^LCxXOlrD*ZF{FbK9=P$Q zZ^YurgMU0)`xm^-LYSji@CCHOJ!NlAW1qc-0hdqz{LXG@r*3pGKYxV35e&Q*?cfd^ zT#vi6bv3M}BQSCe+8a>_zA9-W@8 zXbW0@Xi?0#4Bi+W9(82tiGy9i_d#q&GAkeTFos5bqjwJsLcLlcOi}2arAPBCtq{UO z1@t_GbfpUCpsY0uik@6q-UWXr&+T-!Ui9QR@cTe;GM68v)Q9I!1bGX|^B*(F!7k@r_qa%*dm3 z(I2sx@$dI}2m1Gy`JR&YPmO6GtZ225yHJG)DL5b{=1as|tS<@a1nbLBzqCo>=(m6W zw7F^i{Wp2H;!X?fgqVfb`}cdj@A~)8&;r}|8~fj-K?G;x-eG-3*IC^9cZSU7JgDS2wn$Mq?`yu7^|UR#Fpe99;fwP9S+E+ z*lAYd$N6;OwLm34wSWa|k_bX`OPeo)3q&}Fi#}^8j#yW$)im(Na>@E3M)jc`yV?@p z^cvVf4apf)1X*Mch@d#&M3kRLBnh?vJioAqlXXpW=&c~9Xx{PAETM4_3b1kqs9cJW zhvk%PbRRC6fL4*Ch=#r>Vs?;qqeJ=OcZ_9Mi-P^?51{TqaI}lMG4v%lTC$%^`i4_E zhJXXsOCQt(g;vGLAk*X-Uqe?06IkQC&n+Sz>+J&~`ramhD66PIo-N;aEuRL+IXv?1d%)`Np)X z1d)GF1tM44h>RMq7*7NKKznB6KtAv%dCGZaqyl|3M_XzRqy8Po8o+FtrjRCdmYV@G zjYdvDDrJuGpb-^~sopN0+|M+BHJTVbFA2v#tqO0g+UOn2`I|Xs73$|BP5v(*jejd{DKAwH#^oe}@2h8ut0@DWUyx@C2d_R^*gn#0nANc26{`neHNjPRB z_p_Nj$-tnM6e+tivKF@kS>;chWA_lzQes=!%+71(v}pJ_;)3uvmf~PrFtRPmU{+Tgp4OU z!W;gJNmO@xx5Q~r>L2dSg_6j|QDuFk^|Q^^h5hp*4G;?%#F6tE!R=-i5H0F>X&eP; zLNkC21&|9Kt@^K|XDkj(n65NoI$L0R{u2`;@B@dNa6Vu@%O^~bMhg*yQ(%vJCa^o7 z5%yxU5`o?E(wKBOU}so1A|X-mZ^Nc1n2M@kH$cWRlCdnDB*_o3Rp!ZaG@kg_{Eb7k1wq>3jqvf_g(>52#4PxA98b&| zga~-n3(qRbN|1>BGrA+Yyp;+;Dz+(tq)|Xp7;Kk@gA;SK*S^HwGEB)>Mk5Kkt_Ek} z;r7I7N%`}pm2g0UUbhbFG&c`HJEt;{dMQ!}!Uxsdx%S1#+rQC&}SEH@`F@ahRX zMu$21FHTv7o04#i3p3AVPlFh6guw{(Zx}-CosLwstuuWZ%VtHU?#+^zM&| zELHGTdhy|pK?C1#u!4F>uJ-nLb*Nc>k5vOFfu)A$oiz{};g2L6ORIW^Wiaug(BBzV zBIQ<$IPAYNe`^ZgUZ@T!`A}Q%E`LK87m@dSpXc^grodj#8m_#RDHJMramlmy5=R(! zX~N0;f^N>%C{thXg?GwZx#T`q_KU?9;AcfP09GXFXmnY?=}>@h7mO~VK@={uC7zOb zg_*-FT@HT9V=xK=l4AT-6gkU5$k9*5cG?ne<}gf_-2H0=&%(jk<%r1U&Y9uIivPYq zjhSf|EJjxHhS`^D{=EnqU`v1_uqA-^xL1b&m+HVjobf33Z|#8si8o;5qtIa1PP}Dq zjx-|=x;h@bnoa7wiqZLLzC$cHCDCXnvMgXDMU|)k?5ewBf`=DidpK>uJt*pL9L6If zRmTSHQPCMa_4OyZBrGG_h8Dx@w+e%APQl@P1Zu%Yh?!*KgGkvyh|6O)&d_Zvfp3I_ zS^Na_N~4d4YkHpfAcM9n-(*RQmbR z`okYtKW!-bnQf&Fzzv}|(|nL2EJi3Y@Wfby`5mGw+tI6fh}IKuBm9k5Xbb%K%HMdY z&*lXJG-%DTQ}H}>yL@%I?D@jgq2jQm95`Iuh3XAiwKy@pwJUS zZ=r<0vD}M^lG$1y#ZhmhFFE}1-l(dD*j?~Oh)w&LXf8J&WE_VZW2JKR%1F-ofCy{?S8%>sYO73+nYZ z9v>?b3`e-&YG=WvJK{Uwn72Fda-B^LoqdUzESXbqbG68{K|Jhl2 zU#XnWg#kLV6bPTjC4*#u6U+x0;?Hf7>0A20Chv#ux9$`^&5aSjnT}E3!JZia!r$0$ z?#*=lbNr22F@iV<4Tkm!qbVMX@a^e*^{Kp4k|%AR{sVC((h$=oMz4g>GbrJ2JXu?? z5Wg^g7)yvh;DrlUx3Ur9>bi{%LiEIE5eDIV!C5DkCe9cwBF=>0aFcO79vF}P#40E> z{-)#ewS`FaGlhquqX}^RW6&@dMMJwp+9Q3H=2ETZ(#__mnE57yv@*_cG%s=?lbLy@!>%X4H^53Q*eG5u z-d+-U`=I^yCFKM6xquEDJ{lbP=sNqO1?r>XUw>#0wFeF02Dt418N=iFF1D#krx9uV z+@YlwMh98%`}fH=Q(^b`F_~sG|MEj~cyYwJh^e3Fv%p5`k0^EjOswCW@|QU4H~U@0 zKCDb0ifFLSSq9XHx2E>E0VAX|L~|g>?ralQYRa+I0Q400?*?KkbYi=V7V`yg9oj;i07zc z5T05(*H-42G5Bo766vrv%Wgh0A^fgUiM>3raq_oKz_yQOGqyO*<`$=Saf{RW3QcbO zUjz8E311c+FK93Y-+02ug&khFQ_PJof)s!&A>4or2t~-qIQBi#0-{YW1EuKG;;o1D zfn0OX&>v0`h>8JGxSHS~t~Jc}Fu{4iq*??X2c;}HGFd;?AJu!Yzp!~eJ({ynUMJPF z-n2v5Us(3znTjzMefF@=h}H6s>a!NOl&{cU5o4rPYF!}vo`9z5Zso4U)_C$w@AYb- zV2LagOp<4vc1A4}9DeYHf+g^Xtc8NyxOoaumk-n-7X|(WI6#)rz>bSrFZlQe->O|( zy|)qK92NbM9Vle2pf?#CB!?FRWnekAU{Id?onIG|URfSt-C08W%l3gAXVL`&nXvE%+j##)9J1p=3vi8+mmA{C%N2xM zKgAPPY_4R6);3W4<+~A>0>;>!CNp*wuQOs83nnkWzp;Mv3jTF{^3Xb z8AdI3D637{f<>>$da{`NxE@Gd!j3jr^qP)aEP8$ZT*2?(P87tpC-hgC(3AhQKpB5w zSLIS%txiPbi|e;00CtEfQ(eIO5GBUsh(#eKW!qS`NQreCpFxfr@PUQLNn61KC?g&x zxQ^;?Q$`6L;% zM(a8J#wEuK11n}@5n9*iCj5fYH>2yp>l^he&!it~X%xr7jmF~S zAIHh!WUO^VWXsQuPYbYxOT#xwSTmdrBDC#RfR#Ui@}ml0_*@-hyzaihvBI@v90ik6v9*W zo_Y=ZY?wK_02{iGT{XHrJ*0%OdR}|~@TqLjH*xH$B!qeix@!YZJ-O^&db~7(=xhM2 z1Y>Bi%6cqHPZh>2S7bi^BrIS{PBb z%yT9i8grf|ttHsN0TC)RhbvMzuy{hl!Ci&54WWzWij&+{aH;rKjZ4Khht_k{4K&Xg zP^e#wi8B~8spwJxc8fnRIKC^ezj1{2=jCTJSL`-?iUZ$d!@aXHCGssO#uYQ%3L3_# zzEC*eO%fGk%&;~DE&w^@@Iee(NZi9%1_lHOg%DpXZ7<-gboFD1hS=d^XsQZS!bmnF z%A7VT=KNa`HnX~bTfQQ%bt|wmPA@tD0JZs7qI7|Oe>?5=i{-BVmvObr&0W3<{M)d6 zYBd%Tac>10%6jt03l({y!mMaZyhE-&YBu(bQv}OV1Pj#91!h&eg-?oz=3*}1s9-TH z_D28~rr&ODemfKoWlBgB*4rRtH<~Mv@cHY~rEnKp=?iv{mkV!(U#Y&Tuk6q|z%Ijj z1E32lyD%(+{3(W7|3kwRq$V)wY$weOQ2#jd600#eU#fO|2lTufR=GYmpS*j#r?z(o zmcmj&Aqlp(z@}+`0_Ywd;=3!<*Sh^k4*%P1Jb@`+$YmIQh%9@vcChV!{s2?^02zv4 z5`q>UMJlG^(JfDqN0DyLp#zxoDjwx8L1igX$>5!AFd+N5oht;c-Bhr5O99pk75Kks zcfOw4c^tNt&%&YPW@Vf+5CX z&y$})6?3_Qh+mZ08P|*yV@e+-mkH|E`RY=p9*$7IhN{aw-($EOfLN0~RLM<5ztg_r z`9?s)R8R*x5hRk(0o1p@EG=P9561`y?C=Bs+v(sZu2tp+X_$rq)zzVxQ28{@?5~V2 z03aN7zR@M|+k>gR#(QKPn)9?*XN5Z|ax@1}TWs#1-=Vp?qU||JP>9z@*t>x>*t&^h zm2~z@)miIj+xm_aMCj8jFbNcm(qb0t9;f$>MuIT`-7E7dRuhY z1U@%Ca$BSaG-a>=7;JGo-}E(*{=9oUpV2~nsEhmJwOXIQ4fR>(O>6L-)`t238zY;o z!uRD@hu+^qsqdb6^$m_o4+RV>9x5amu?;-I`tE#A;3iPV zXFCjky$rnFKv~K#j%Y@Pvwkb)$&3WvVlR^Q#-44kxp{tZlzxkue`CFnO;(k|R#J@H zys~Fknz@?uc(t1IovCUyr+-^XMPux_npjZz=rm$?tbBOf}L_bNE?{a_Y(|#J|AeE~_5##}UZpc0d`m z&IkzNecZ&;@lTbH_!Dk;f4jYV&1ZlW_H%Uo*6%t;OxXcW6#agC`(J&k+W)=!v+#GW zZ*<)H3Zmo(#D#R20rcbP&tqmu20x4i@tr2)jzJRA`0~F%z(XzK-!h{tdi+23+qP%h zLf_WRkC#4i@M{I;E4&Dxiy}%xfJQbj5bM$1UJK*hq1aEO*kJT{*E+wq2LDf6xGw78Jehw>fb#ioiw17iGVL zIP^fdqHJWx{04f&ZF|*bn;sTETyVzo|D64Bym#ZP1%84K$I_hN2EXOFI&s$_7XE|z z$2l#)Z}s2P!h5&1@ZSHopWWirW_+0VhOGK9->f9>?^0KjU_=fikykDj_h{GK3oO>J>-Xrpd6 zZpo6dWbJ=opAWI(^RE816c0I+@p3w<#dz6Pc`@;Clg6f(Io7)2i*Fz1rvrZ=Feuo1 zzADsEGuC~PQ)~Am0+>6C7+xiL>WS8 z{NPA;e_Mz@3bS&43$q6*Z0698%A!F0jd^0kS3W<=!~AaDTOJ>oz$E& zU*ro1^3KD%bYsHCO9h%Usxa zCW}r?^8}{>fZ-Pk06d)@49e+o7(U$XYofDR%sqj{&9<}Ab`COBgu1e%50$f-^e(GES^VSF6`gKflb>2{Mnpb0^A&|Zi)FH!IiPx~ zQBRm<9sPW)d}2JLkn700|7$q28kzmW&ggxPtD|$zTmW!Ex+K}?a?I>ya2q*+in5aE zkj)!oX9*XURjDeOU33TQCMlQ-GlrQNNE>3B&MkbQC!ZzlFqsk* zgr_A04UBjJxCovx-b;?O;WIx~_K4@WPg}mrqn#vby zA%eZ~Mo-SoBi4xpE}8_of%+jY%^~W^q(nVdz@g@HREg{rg?eC9p`JH}ZxXO%_Y=x# z{ABb32O~3$0vSyjI1310H_U2E7XJv9QwL3FQy7M&DXZQLDR^KB#hhy{ z6{2ECb}rK6Bx>%vGjFlh0?O`LkrT!?TYFb~xWNEhL9fz{@#b3n3?ev-*pRINk+H+Q zRXjnHoh#oam#FYWO_c}E zdGP06TFpcFsPaIkqaRPz0yQk451+Rb+?TrwM^sA%pJDwekZBeOJdJzE)|VyxXoVJd z1;4expZPR+4zMFW)+F$n%3@I`fMDx_m9xE`VBYRRd{h`bKLvTdzU{;%kXMd_KrGgj zlrH1z$IT3GoGuEgWfRNj826blvtyVzlNElnj<2E6&{1nyuZfw;w}~+9TBx4mUdSR? zGv6`$HX(Etd5fpkfHP*|_yZskdNTJ%@0daL*fRvpjxw#o7Fr07GELJK-a{m&cxoXa zl66I)Fp|+fNxP-cObOqIeA|Vd+Rv5=K-{NEVH=M^cgU}o=G@*}3wRWPw!df+=wypP z@1USb-9Sf?l|IWGOalD_@3g>As3wL$6?hdPkfy&cAGwM2rA?%qC?e%Q)*6vmw<6L* zLZqBlh@=R?#5^Dy__t`VP7CA_Bw(;K3WF;iH5=EedJ5E%5NtUKEm6Y6@Vh9X&_xWd zkzeoZ{pa7bYA!~vJg`1t(Gncrtq-65n!~V>NR`CRmF4e*hN2>15F6*V)GImh*p#GvwdFbT`?$$?n(_BXzU9u~2zSQ_ z5{praIL_w-vNS*z_M?3{G)vLsQqV+kWiQ-S9(ZW`<$u%y&7`e9{Iew{AIf-C`44X6SS&JWxc7ayGTGcTNLEV145y|$^2gLbM+g--oC4~ zKu@XR94bHjr#f%Y0!h*`&VoaJpCx%5KZF0YTmGDjZJ|C&DDbT{EvN|JYYS*MK?T7f z`&@@##==!l;%CLAzs2NNBTm@ZVfu*@Gt*N)y#|vc!SM{6C5fY(P8|V_183IHRa5`% z<#bkE;{)^Q7*ENL*sIVYXOZPlfmnInFefDIWPkw>I-inEQ}V=d97fAImLXfxxDR6{ z@gU9uN)};bo$^;4*6S-PVdKS#&uP_{vLY_9<4T_2>YGq9t13KF#wJQy^u@-G>a6} z)#dZp3q+0I&R=2t_zp;v2VzC6Q|EXq>z{tl{v^is=ZdsL?@zmf^{4Ou;r*Dt+{-%z7$%Ss(CIHY%&!QBNGzK9k9HogSD(a)n8>T5zY%E?h6) z!0^Qe7Mtas{u9=kZj&GIc+^Bu26+{R6HNWR*!_ZE$mhtbu6j^D#j#LwoiFvnGplU6 zaNUD{(rQ*=R<^R~t9EyLw3>3PwXJMAZ~Cx-TJ;mKdn=n3wc9#Gt4^lP)pXk_$DO6s z1W-+7)4AtAeYzI7iB;-D7M=r<#IZ|qC@weXCUoYx7QqQ3sQI4Y6=GK9;}r&#^C-?3 zRlDu>)Y7gOYk2q(tSBPeubX2d^59Dmp*On#R45c-UlBdVkMp}F6b2BVN{`Kyc+jUD&fdk}gI0Ub4 zbSXCL7Mhu?6?y^vRybcKIHz=kmdfp%)ZgsJ^J6%1b;q{$c(Pay z?uH0E+X!7Cj3u5{;4Vl#I=SRrvy(IV+wSCT1PP$6m(Jq!9V{*plRh{B1iAteG{?bO zN~rD5?vhL=z#xU0BF{M#oM<5)4z{MjgB+Md*=$dV)?g^X*G6 zkQ!z0X&+Xlxw{$qSo&@%5K;n?tE3e+Cq!gzzRmv>+F`JX!mmLE?7G83ys#Qo!1+80 zv`s4DJBz{qQML<>@Pgi_DAF>`ng;7z5oSx{DQwGH9aA+2wg_kRxl1?^s*HNhl5Z{W zln}{W&_P)bPDj2OD3v9jT?E8W$FQ+S3rMg(co7gj9hBJP1NJYd9}%9EEH2O=&B(-m(ZPkXjf}U6D-;(a@!_4K3}^)`lju)=-Gb4)mXA(Vu)G zUhw&CZsEre2W>c%~1YVW)Khu2jDV`{0R0Cb5=pJg1m+GMomac4iDDT%ET8$UR zaAlKBT8HU8OSRFCAga_CDxQ@4qiX%BuSu@%3O)YghGm5SZ?482T5VL+dZek)EqmYBtp z@ir#pG-<_u&tZtFY?63fphEH7XcKjTV_hQ#w@s()lzM_{xJc)NLm4hsnA_~2q&eNF z_n8zRW^MPF;eyxOw-o^sW%C$`zIc#?u*P>jY>OO(K;kg-1A?rUnfcD4Hm{PIn|BK{ zTLwMt$Ed-kPmW!HR?a#UAeBo)Wl@|wI8rmE;8FR|O*Oj6rJ;X8D^xbAaGRL@`jDlR z0-7jQf^19v&l6g_WCnZ{ISvRj!))OI@v{2i(gDvz#FcRLG2u{TBxkl{%IQO%7hx2O zhkgBG7yDXeHVa>jU%g(S7NQ~>K)U7_6+=!cMw(7L?s6N<%kVNSns^_f; zb=cYL*2;1VUFA1nUn9LwmEauPvtLgPL2!;@M{wd7af+^@Q1&c#~w z0_;Xv+4S_r$(L$1MWWN+n14nw!pZs&<8+gr1DyK2>SlDIvZ>Fou@kjGF=?w0nKMLv zS@jh_H){(FmUn%wqBf@jW5_U~z|?jpU4;R-2Qq8`7_OIcc3->mPSI{~y5PPcB(g9w zN9w{HA5N@Cz+8SRua1F4YQJTbG1@O3hyAt9Y+ABY$%Q0@1q@Uw^2r-&Aa{7 z696THkU40%n@F<_M&lZ(FtXN)kRZ zddOai?%svAq05TT){DMwyleaAT1~R>R>xgEFV_O!3pIzVHn}G7AO1G2eV$Jby?}=D z>C*ti*?8Nc8$X(LMBMnFtwV-db>ms1xbdOEfVHwoAPkHVsQSEcrpd4U1uEsfV)Hxx z0yHxDCtmw>XfIf^j|lUQ0@lxkKz2WEZVX}Ser+pZ21qx|nMNT<%bIEVsW!t=GwqH? zl5r$7j)I;;*ce@~XleZPOIu;PTN*HzUbiVIC!JU!S~>a;)0Vz{}9I^ZrM}W zH1NojNm}3tDiwXm3Tx2#QP6D;8dYidWrmFczYxQEpTAN|QjvTi7`F(+trtj`or(^o zI(TMw3>gk@b5|eVq2xnVP5FTJsdq23>t-lP0u76s+KR?=&ALUltYE;S#4W^s0_d;M z+1o_$XmSL!z&7cnr3F@&$Mo{JHbc@Nhm};BRhzwxJ4hZz@X&v|)kyzwj$YeT?YU?* z{D9(+RACFo2t$96+v9s|IZvy}6&`r#N&i?(nCL@#W|RIfFOGC@if@E?4;VD6rVyhJ zO?;iG2HPm#f^CCiwD@3@scd@XZyyz!W{5sy7YA}S^LIhDVn}aRWfOstF?YQHf-!dw zF$Z!9pWylrq3M`31f<9(S+`l#vGEkx*H%0o7Z2>&Xjq}{YVd~wEmVSA^>Di&am>F4 z|52+^qxIH_J1?+D>mqAhKhuFohVNKH!gn{(+R1G-e0Q$w&Szt{TuvT}8VNom?7&M6 zz!i2@;kz=T4Jydv2@0+ly!+)=3s<)Da!F%bakbYx@COy!&dWbzD^6&0#ScowQN3$K zmleJlZ&%n0y&<=1_V3?BuRi3V!6rk!=s>q-YB({%EDiTce?fao8m?X#(lU6~mc?M~ z#Jz3B*gJASJ!TA~YC1d;?!3va+vePN_q4U{>&&`c8V;K+3QKr_Jhz6siW~&4m_nD$ zA;u360#YIdRadE%2~KLA5(Vw8nK7v7-DYrKlcdHd8g~P@ipJ*(VM(q~q1+B%d;Tk0 z^`qDsxUy;S&rfdDs_#MmNoCW!=cIqC)pQVZ=dN3~f20LA5xLM`rmG4yvep}es1tX$6;bctv>=Y# zXow)`!|S)RH2}TWT8eO7IsgAln4$eeRGiVGgS;0WEX5lF|p@ z%HUALnL`X7=`;?WE+Pi0S86pp3b(SU__ztn zn6flvY^K6=RW`n^Y&te)=o{w1s}H%!de=?fN%;V4gd1|9=sDnBIer%2C1k;A4@9(K zlVVzzHtBx|o~=;yJ|Bn}*{m~0PVR_8;36q=f94{gq@|4D|G3L`j8m2hmBl16i6~D6 z{E7$@O(Ha*_R1#qDAW&+Dw`x%t7e2CC-CXvNM}3=_drlTQPW^W`eK%Qu2nG=+bk7$ zjv(rN-a1xfMho1_-=91mQ0SheeQ~oOYWN-~EJyl>A(TN7WHT;KoA? zMCejF3XvBRLqI|bx~z~e#YDm$!5wBDs9W7Lr50@{BpJq#c=a}aX0g}z!d}E+=m)t? z|Ktbc;xTUl2%KVaQQ!tA0t2rLlFY`^a^DvQ%`>7 zrWnoG?Yp*0)C>P5A>61W_1T6wXDjB8HJUFcTf$dxjpoR1JC|nt@dA-+PX6{C3L+?{ zL!6V(hyzh*)~AZNCj$ja!OCdf+osJuLJ)!~n~+vEjlBNwd$pRgm6101w(GT;88RYQ zoc!*eME5SWEST{eoy~ZZR`qvKud>OQxCgqMPWfz&24d7wx*jY=!!zLrc2GDF6(nGI;+N{r+y{R zthjG*P^)=Nc_LKA4Hi#?fUrJ;=%we0Csh=bd|FxKJ5MLo;aNufrIl1 z#>c7)s)#w8B|Gx8s8uBo24z*E!$+G{1+I=Hl4=h2Z0Bar>1LzOGVBF`kVDGNt_Nhm z)cdqI)dzMUH=O}2<)brjE(YoDUtedD(zYB&8g11d+v0U&D2W7a3gfEuM>T(bf}e^^ zwW2>rrqKCd`pTwZj}5s?3+yNU^&#_*R~jI&P3U1pi4a4fmJvhpdS#!rmIAfPjk=t8 zaNbRP0`*NHFKgg?!!;>e$G2eNCj@2o0H_82Ae=rS1A`zkMBwTu z(`rmUT%8B*x6HkUWD z=3!0qXRhh=8^3BR%8qc=jXA5h4(ND6 zY|EPaY&W5o{3m)^H#719d-P{~5G^9aCwmxD)}Tm5;4xxH@AGvZstGs?^95U`hMPr0 zAWd+IW1DOXf5={bt(r;*k0 z~J^75-iWj!I;!~X!ZvZbK3j8nL_JWmtb0EW*jWS{QbIma zQX-bdTKqIgAi9CghHIkJ-6aveN*zFerLP_#1LhQY#d@qFAye}6%ee#^l)fa6 zZk3_s$tAG(P}aL<@W%M_@vbv0EnR8+*FHf+Pfgs|36+{!)VO-j4xV1rAM?+l?d$AC zEZ2B~osMs$y5o8vo>!E?^+1?C;2*>tvIQ>OAQP2BhBcH~o?yG?^;mwDmf!`)Bm@s>xuEi-B=D(tya;v+b=`=7&!Y|=Sg)rCC+(L9~B0?oNDi56+Vshm)m-f3y?lNzKCDamLTh#+}da zYBqBJj1vHpm!NdJ$U>=ZfGKn{@ZenB6SH2b81SKkQ?cj(_{kVl?+M~WkZ^zYIbH2z z#AQl}n+0i@0Z%c4KFSW`gTSF|HiLr$%h%D75S(C#2cCev@Gjuw?wIvNvMkoMMvK+J z6-H?+i|WahOn?Qa$l?Z%Wsw$I|Iy>$-*NW2p4v@nH>klKJ;A(oIL9C@#gn+UFn45% z?-+V!Aax+B^xQn%aVZKhcWy)A+Iu2sWyy_i7w8Ca2fS~PiKoJf)Xy$IeB({AZNtig> zliN|wyTLE+k#HfF>=vgT^t_w-H@MEbF+N!U0PctY5NY4R$<}#W1w;S>p!Hrrkx=Ja z%GdQ2F6Fa!!NLdxUsD#hKp6a7%Gc#f5#Xjb0RR%aAbmWPYcY>hdLmx?vL5Y4Y7H09 zwn~Em@3?57W19zS;fS$(nneSlkB(E0?RWRijCuzlF@syiEcZKqLyo7`Qc73Y@1p1$ zxD(u!4epBIQ~D#(|Cs(bX{rSn&xZA2(si296%l7(f+rwpRV#=S9@{0S5SM0v?&(@p zwfWv#j(6E=-NUpjPi|=z)^Vd8k7^s64?aO-#rdAxqMU>B%C=c9UQufk#ScX=)mScX z3qfZk(KrtY>$ul&9XDM7`3|8@<8QIwh5iW4V3{q&FRIoZQ`n}f)=&rabpkF%e;tT@ z90QigGEw-gY8$^CSl%+f++FJ834a6l#iV;g=-;p_h+=@M`G9j0AdaxM+_~VLF*}yG zoxI?~(H&z=J}6c4eVot|dJ`E-xg*oHg*+GzWVJL3mcV|m;FJI!3H8@&V^A7i2131J zd=>Mq3Lo!(2D-M=^*&QWFF)scWjDi zLTEvr%Y7jfOL6)^x%>9XF75{6)*I{Y077ncBE*f4+hXBqaXfgq-h~gBE?RPng%8n1 zPTn&9X1|NV)gS^l)d?Ip$_1ZRy(ljKyLgKFftUhcVVeP-tQOG^&?y%JgV;kOx9H#) z+zIXHI6Ey$?l;O?mn19wU`(k+M@FfRxZt00aQqs#xy4e)&Mua!7O@mwJmD=D?)?q0 z6D(dFYF7}2-wpE)j$fIhjnUsww^Y|WZAtKovH4W*RU)ayf^D8x2VTY2khz|8>y$cV z|G;OBBQ-7 zrNrYT8Z!2%od-+Q+4oNZE!ltcr$)7??`(gH_AgISH(pp~^*@RSZe`8kt}@$_R)%-elh)X>TfOZEoDZM zOJ!?8E!zz1u$YUM<>)_5>6Iv`(-TN~$=^8?h&FoZ-lv7VHU^LAMVB zRFsLP?1`uWU_t}TOT z0z-Xxv7rIF*6jI~?8B(>);JO#g9Aq~HkOQc%U`x|WXcZg0n2Cp5Vp0W0_P#Y5&5XJ zD~Lj}XD+%C&py&d$@{2v#`w+N1}wQ&sHM`M9I-c5s@Ffl!%`^JLjJy~&aAH|x# zVql2IyZBOI;}@f7v?2CeA&xO+4*GW-I62yWKh*KIGq7Nce96Lp6#5QF_4at{mXDF~ za3^D@Ydn|wue!vPXSaiCJT)8D+YuXg{fA(`FT2LY8u58+@{3mAgtuJ&(JZ@ysD5__ zV86{jGWjRXqk@n~;K}V8(TGS`p#2VwNdDn|2lTy1wQgr(J)N;0BS?%!w5>75MxK=~ zA{IMhpy4|VPk9Uce+c?5;sYJ~LKF@oiq1IwYKsU_IQ;i*t?IWn`Qy-N^u;N0xkU$$ zOg@YuF$!D8nE>ba^2fV8@4|=67CZrdg-c&Ke4CE;yC_^eH0!tWo70~2{eJ#4w=tgf?7v#Z@$!-uaU2;FZnP_iLiS+7I7#VDhkM|T zf5eNYLAFiT9L@&qUveb=GoCgr#W4neOFb>c(>V6pmg+tU97TkdW3P&*Ehqz!t;Ex` z>d#vkzgqBLu6VX(d`_F>!l%nVoe=#l%03k%Co#Hmcu&><-rZe+zro|SlEeb2Uu;1a zMXZ{cz(YGBmTP>_ss|l{e{-0Me}hJ}U#CI)7Q??;1I%$m*Q%Bhhf(ow?_3$}eYX9I zaUYZMxnr}1=J}`#LRX5ocX3XH=13OG9qBogaX&vRiqE2Z^bx@EG70*7*&jt1xuQl?CE@nm z%mDc!qRN#0v3fc>65sy*^-%Pe@zF#JMW$;2)5Fv(5uUsKNf(Y?`s?243L^T;m=*ob zp|-Aweh0PXY#5p)!8qLAu)m=wj&A$v2@AR?DnC69$oa;OL%8@)t1gYJ-%R>~g_TZ& zVmei;>Vt2UM(bp0yxg&AT41l}H`nGKFR9cKU&NNguG0R&j z`foBAiMkH|OLI^z$D1wBPtcZ(_2hUwK02C35W%9jA{fWf?1WJ}S`43s!h0%8;eCYx zBkH@*4N8SwBMQ$Y+)Lto-B*3xOI^Cg7OIR>=uHs9NWTRnnf}}20TF)O^_WF*Q|41_ zwlEGWwir5!8y+ZaRX_gz@!Rq%TrzF+CIE5g@7oZ+6@PEnqgMZ;`uOV2Xu^u$y7+xY zTl~o`=bDg5`I8e_eSClN5aSgQ8V<1gU@9Ka(3F2;6Y22E-m%`8N4%DLARY3Im<47v?U59jvAH7;DP~cC z5ziJ)Ws6wxS_-9Y*Y=J5&Ka*Yp1%>@>$E8<1{q6nV5?^`%1DH)KG;8}7apFt2#D1&dODXJM zy!cXE{5hF#`}CofX|U@;7ZKyr-~qdWC>mUI17MsK#Z0mMWbQ|e;or(xBTHm^V*Mq7 z_t`Pl{NUC64$RJB6vnz5OU+pKp~;X-Hj*V6<_=viGn+v5pw43BuItey2B`n1@)6Nz zS1gLczeAr*yTFBim;E%s{VqOj679;PXtVmd7Ukpr27Pwx#SR&1MW0;|`<+XleLe-< zY*n8ff`28nQu!|rx@hHew2YPKTeONo_2qz}mHFTQo$Y7X=1%p05+Gyc5Hl?v|jr1a#nM^e!SW{8=cETNP^oNJz^tD$knpO>s zps9~4`ck~2*Te!m-%+%;Dtc?Yq6xj6eU)(51&*RetD}O!F%dJq;V+Ggt^tb=zzPWG z=n=)=Gnn6=;;HR#<(L0(;M9bQ#>5$id#n>Pd>xEiUsL(z8}KsG*g6Zj4Z^X2Yc@t+Ih8ofnR^(l&-Tn+b{JdG(y$v|oCX|=0-M)|ya@B*)3P1jRI24Cl z#N_qYYDVL#7kyT-Khdrx)4NA6+ETIquo>Uy4b*COfY0(y&}!b`HB(dPQu+6_n~Ot( z_a#CT3Ns282IFfeyaTd3}8*-2VE_ zdF^KGW+xI?@Eg{EkCIVqzN^-OR#iLm&a!U5&KqjgdYHG9)cv5shgsnXS{1Puo~IXm zfNpBlXW^G#w8`1!fm#(evj|;@KY7Dv_SB13%BS7rw^r4OFGu5#Ueq8jnh*uZo8+y} zo8x^wbh5lai6pI>i_G&b)vBK3^>VH130y-j;}0N9(yF**GV~b!AmnupsYv7VT5ny^DCSN_nch4FvYn_j=TyK z;D`#3cK!-(#=lyg?DI`U?5RBu>&)FeyBE%DO6oA8qA|nwohNs_=3k2XS0*K%3?5yT zl!+3kT4IyC$|#t50c^j?C=R6v8t}`_ zxMVq4Z{>t@x8eT|@cA^HgQs;p))%}W-glVV3#@ul&Zqirkl_vJUObf!6NfX)O&6#c<;w5zfRGw=L)k_x0L*@-i4cH6z)%b7WJ?nd))6 zdSt3cPxUxfJ{A9u<&GdU{Pb>QUiMNz~{|K4bKQ<1keO@>0 z5KDOuT79Oy2MT=-vRn#%?-fw4k4TF#?P2{b8Opx{l4vXlialY)yf3f{UF1K#`EMG3 zV&p%LCvBcA$xDHM&C4Z8Di3plNjL7GQAJBX=)STu697Xx)Nt3P_yv_BEVjuDfJ#pf%j{bB%xCeNsMn`&x2h`ReShVrl|W=4^>4}5(wB3MYEjd zL36eW!eelcMmssHCthgwhFI8S?%ilM{65I+x!8=yb(hmKs_>E7dr|b-Pjz5UoxSzF z9RQUG^Dik`TxWkC^KOrPL&#ky51^*s6XZj{98B6boh}c%`@jcMsQ7a5#C4)>n#a?o zEBX|XJ|^j7k^rRus)dXe%oaO%0Yym%6!x+(Emc149bl zZKzwUJZ6%#oy))P$xmZAB-`@PEs$Gv_9?O7Hb-WJvES#r8?#?42CXhtwBmq@ zjwf*CPGukTW#^~ts1u-H)7Q$XCy3;X4Dzqmrmd4|@XZRfpps@+kO~BN8az=a>U0#j zBal?tkIqH%9eBw8UfIL7x66AJZLId5E$BQ6KLSIw=08ES}Xk~DS2b|MnKjh~}LWxP>bd*nHKhilCKq8jM zCTreS`hSR8yJ!@6>(y8nFv?%De{d)J=idR)#-dM<2lyj~B!*(chvZaZ5KwZLrcwPg zi%ZWz0LYJ|!nW%05j#;&W&nI>LYSACapkv~ImxG--X{)|hM!e`R(=aR1=M%&=hp1P z?R6DLnbr_g&PM%9is8lH>9J>Gt~eZK8+jyhmT6(M3mF5c_G#ctksV9VWvq#NLPc;8 zi{YnXCqLn;4LKOcN~(jb=!bn91}maJ*_Qw>yIYlyOB6oPHm^AZK0s2!$lh`?b*fCR z0ER5H;hRJ=vOkr};L#SZcZ(nly@eFwnv-($FlU^1!nFhg1t}>Tw&C+c+{WuW9wl%v zCOYbf95e@p;O7=N20t>{Z4bZp@@t$gax%PN2*>m|W2Tr+gw)Sl8Gpwi)9B;ei_ymu zz-QVna2_%ApTKw^sy)T=|CjvKihXd$E39#8(m#<2`(PLx{s{wMAAIvNc92gu@T=Eq zSPEzK08@YcIDVCGfeF#&-CtoijKeoB!{I|h6%!AX@i1#@ymOy?41C7a0SI#eMj&D= zkN|pQ))B*|aO2JJo9gOJtHJbdIf2MYhx_2g0gm(<;K<-~T~T+9@#@B9GiV+V_pFv; z4PW{j+f2L%e-kQtvQ~^&$}-~-?tv_VTRFnD!JCCE;D=H17$3%m*VcjkPy0f%e~oMu zrU$TWn1|D!{@mw&CXX8^H7kpXuU*Ihym);Oul8KbvxW{RKoc<%RJ{x1)rpM$#w1)= zD{0rohvYOuc?raat^iE|T2UO~izC0Q{pi30Mhc}1`W$Efx8WBVyfES8LZ{*zbbcS5 zZKL*0r}OP6_C>GSRdk8%eCPmWj=#}Uflc!0t}!n@{Jr`$KR&z>IUV5IF((j@J!AgH zj=G?U_XT+G2bIjMAK~1^+^_9?I0#|Lyt*< zxf|fe<6s#F{N#$i2;jR7Z`^L<@_OUa6=RIk8jMF8j3?{cH$X-AR~2RxTV%{=FrKRK*?`|GjTwvhdr{9d{$Jt&>V33ez`ZzfRD)`I1m4Ajcj;#u z-X3mvQw83f2)y?WQSkmit`8=S$E)olyld4kNHuC@Wr)8qrQ&2Z6OoUQcNAL?EnfR< z+*qRQF5}ty&@Ke@%wW+^@HZ2TT3Q0q)viYEL-?(8;wPSJy#G!6@g4fq`*+5NKEyY8 zZ#Q1`MUN_kgua!&g@L!mt`5)pbK)4+S;lT|UZcBt=Ass4xoC$&mYlOxH@64?Nq@tu zeFNu`KUENg0V~2kTsMh^x|KhMzsDNYbhn`({EewbbrVPyn#ZpB8;@2oA#^3AKKxd3 z%`ryJ43v=YRwxV)D>CZbQUO>@H?3h_K;Q6^jz%*QV7C#kiXC?HpNq-gD*l^0e@aaL z;uiVW#N@xwB7bm9zF+x=z6*hvm-a{WKr{JzgK)+U&_Am0C|)tTi>P>t!zY>+bSO9j z>_H1{*oU$LBB0<;SIPlPc_=y9I_qVnm z_X_^D8xJN-q2W1W5zK?f$b%(psgy010o|2?X{FdqYh@UX?C%QMBRsPxyplZg>Zh7# z66#y<%<slV_{7(QvzJ_?q8m@f{WZwAMKTMmF*#t66U?^gai+5oqVBDXxN zdr&O`v?X{Vel>U?G_;g3!n^-)Gs1r5xh?jA5R<`LjwV*mX7mtqI%d8JAfW0ZN6TU4 z7;;|L}7JN97bBRU%mjC z`Bh`489wBG&lvku;iD{y4~*Y0DUSgz`hecRm%*yuCzysFLdHqM;w!+K!kZR!Z)PZO z0N4;t&Z{&nsL(+2tW5epsSom@>@LVfIpBx)tACFn)2F@~*6=d?66$0d?{D!K_tM|t z^0$&4f?YiKB7C~A;0*68n$9Ft42cO$@9?XvmI|C{%n{kj9^Q5bpWAG?#j_G$$xQ51Lj>Thxw=sOh1dYw4qkbDPx8Vpv1P z$y!pIV3jD;Xiru%a2CWmGZi_>`)Q#jDm9`pm^9+16y0ISzx7`E?X}OjpEKaP$Z4)3 z->!3tq)8Dw#l*NAi~8IW>w43DKGq=E=IPWOX|&DL>}Qrz2BUR!%u7mwlYs*JuNWDG z)XR)4vTGU`IeoGHuVE0wueutD)*r0S$RuUte)4PR2Ta*fES&e6J|@h0E|5E&FeuF6 zJzEIPPC~QOUIXJ%-G`A>vr3C(gh)!I67mO{5C@ph+T*_3-V{!WrojU~VKcj<3(@~Q zmKHoB`;F3{BG7@-6J7&|H%rnkLz*0_-<~};1h=W070Qlkn!xy>crQm{IdQ(||sRgru915uFH8!3tESXB$}GO(<>58_~`B zoGRH`YZ~uwZ?|W0x@qL^s>46i+GYB;L0KQ@V$@8f3j*jRCga2>0dSdVVI%`F(nqgd zeS%{5bi$n$$+W-1_qtoM4>*`~_Pq|Or>h%AL;xUoF9_mr7AZ~CrP-$*$C-KfvFsk& z9Om`smVQgE-JOW9B2KM#{HXvO<_TRcLsRA1w_uvr^e^)`CG62i2%Y6BA{2;x&;F>E zNb)z1j~&BR>!rP@BaZ$Ib`^ckHmQ7r8bk~f5G~cS?k36P|M@Y0`ysgz6kZDjys=*Q`Zc8#XN#brwrXG0u4O=-0!xK2B4G^ zU2GRRjl)L2+rM1{G>U^#2Y$gpRN(-bw}TV$>zNZBlYY9`m!8PVr2157e@ZZ%%Br&bT9%4U8e-z_Js>0 zbRvxMaLR+Y%TxRS6wWdOtrkfr&!90?Zomx66B7qP92@}1SA6Ik zL#3;z+9K6Cz2Zn9g;m^43>7b8j_Z#{%rOxYz%NC52%N7(stgr-+Ud?pwW-ZowR;Q( z1{j}pFwm_3AvA~nL#~g7xdJT%9Mia^a`=#Wz<3b?k(mD6W#%k0f=?pRnAbgJ%I{SG z)CgX}LcwwI{@<@I-v~{CqY|CT>{F0cH|6&xmaF}Nf9HLUl|8R~d^&!0?Y3u8iSfuH z|E~CIOnh?|OP8HkiE_~b@T87mxYej;oDKae5j5rjtL9?;$vs{Dzh_PA=>I*(c!o9N z^q(;{DX9 zqg%-tU>LSj!d{3H$y4L3s9TK9P_v>u(F_y_z|wflXH2-rQIpev4XR0j2>Ouk6!&%V zoS{{iUZ;ZeSxBcE`09F>8sKU054-eJr3Sz*RCpM&nWRD~b-?Iz zwGMb&b`EPDpta(v4b%a0R8%PxfYwr5q;h2?;wPFsptLm2s$?=O;l^fLhmE3PkrcZSC%pLHkJ4c z6BQnuJ4S`4bT^QLh831I;#=zrnD-E@&HBmNh?_7H&fUWi&fZ02IUi$26Rer1SW^sd z{)ymTS)XLSQROb?JCRicb@Av5U*SA7h4s20M+^|T;9c8eCOPlhJk5DIvJF~u9yAT@ zv61T{oL6>8&KvOZk#Sy`eFkQp$$5?u$w91*P+IKvxL%RbD-&&qfrN%53<`Q4Q*lA$ zyPPDe8`N$4J}VH#o-2a5SxpF~+=?QKn>uAu_tJ&X4TqP5AtvEF`?(xQ+nF)eM~u9! z&d84VgR?sV(^Gbc41&nb19mBL<%x>r7-@@eR7Y+;gxsmt4hh79?cbr;Et5kB$^m^u z;0S8G7wj!A*pjW6xMbq~d8{0#)zfe6(-iLPLp?M*3jFnHKHf9FnTL2Yg+qN7c>p67 z1Ik&gHbag3z*SyfV5r9zILe0s#8q7$6;f^FJ*VJINTH~qp3d*(cqW3zMGK1EXKH_; zJ32R0&0AAjbLtpPGD3UIcBi^X&)}hD!H>MpL)aXNI$b-zGn9)_XIfZ|2~C0N0i$*S z7KxjC7gL-X)!m5_CfCe>s-srXaK5ba=g}<&CS)2;X9X*vZ3smh_4!O|vI&P*Jj|yaVNCDx70+B#0zb z!;-P-ql6W))PoICo5&M=$5YFX$C(6KC|omTiHTRNM}Xho>z-H#E}aE~$#J(TKSW-E z#!Mtr26Q{sB?Htl{AzvQyQ6?m(&dNzusouGw59^3Kz*gvDGa_CpoPIHvbk7q$nHK8QUNCqi6`hLfPLZ? zg?mh8gA{qjGqC?O3&8>rRRdB`S%(G?_na?Haqhgplxf>gHzX5Zjq}+#;CZ-gie~4Q zIkToWf5wh+*7WbPXQ5qaQakCz6?nBLbN={dCioi@-L)@l8+uQa3MNjykw&j;8+t*d zwyl^NNe#3O1(_PGgl=kr8dwXMg+tpLwH9&4Nm0}i;m**NsuoYQZew2C&@h$S-jzDP zZKw}Y*~`vOFK>Fu@vqU#&Zr;jAJ#a%e4!h8r(I|~$6GLI243yQFG4S`Wdf&Ku^Lz1 z8v?k$P*YYNqb-_9U8qt!RZMe=GWBJqq7TXjQL-?Oq*sEcobiw37}Xx5^r|zmq_Fdx zo{^1rcI>xG7rUQCd-CBcorjI>P8I zAJu)WFnZqeN5<%^$nHCWjL!aqu66aNC-Ou*=&q#WJ@ z-7Et+mZk~&)gTuljw6&HtSa0(VNY1%B5X+nC-wN0g!N`?!rmy0gEV1F6hiJ@6+sBg zACj;)&N?!Lup;~N;ers%^Okpk{fS9kOp#3;whuGDYegr-VCuCFF+(6wrMwL%1PCdh zT`V<>@GXR$8b)-|@bb7o&#)%UCMas!t(^+?>{p43J9f%q+Nx~Vg@)YWCwdmUVGW0#}u;Azy zxeQs$->QD`(Ht89bhTe@ABzHWriz#h8 zGehYd#D2+g&2$dOp4r{Sa$TM8HMga+Li_y&7n8vT*P3z*^2lVb_Sa07@Vp~t0ac}9 zvK}8tn2hBQ$z%!792t|bBKtSY<|^s&kQMJxofq z{QD@<1C~Ez5AvQqvL3J^yRYsw!ESmdDVTc;}kIkRym3Sy?@ z(oQl{BGD8p`69gebNj9Yo{X9^B*NmvN|Od6k3$E@gyyLu>PuzLr3r@UA?8TTnmtDK zsWes{&gUrf+8=IG<2sWyrHj*`O>5pK6tSR#Wk18<#bO6sV;duFHbF3O&|o~PNdrAx z=8&`)9@F@AR>o3-Ep#NagQiEZ9S{J+q;<)D z-iL~1p{VJEqqkYaV;=c6=M2rSb+SWQ^J|{s*H@R5U(aDDOTet|rKD7?UD}=akMV} zTo!@0s3o*JpExpTi|lQfDpk;)aCm4#3tZ5Oh5(ik1SGUyXK85rxuMNg&<>A6Tig=b zAx8*pv7If@>X{p_n8LYT+he3a7|a5K?QWd;U83zrriA9>MSrjvKkeUoqeK>dxyCc* zBB@_xzV-k;#wk0NQ|!Y(ujdo~xjfOzYDrgGX}$c`T4{@Z@!DIzQbP@+jO2uxqkj$| z@C{A}=kTF9N|&h~@XC9>jFZ(_NNJsW&KH=mo6MMAsi5`W5;q<8q-gg*=B*fu8Iw~YG4OFfE=xfjgp3F6`0!5+a7inro(g{ zm(Wv`!PEusQw-4F&<&|rGXs4OZuwCQC;D{+0_eW~c}i4tht4iPvhnP*F)Ut5I@5xq z(!}zZpJVT2H1~me2EA%bU z=o^sHv{s|9ks`Vo`lNNBFSt}P1%1<6q7T-aTCMG%Z-&^x4sHY%!43K>Vv4~~@)qER z?6-ISpt_Mo@WG$j5Da#|NX>U(LN$*Y+)N*^N#qq+-$ujX@xYpH}gPZm}Z!P0Y43)bhK}T2~;pyZsE3Olz;tT5mrr zKR1VVP(I_6*=zww^#Bv03nfvpTqq4M1y)073lo7mrCdRb5*!#!0U_c@I0fIUT&z+U z;^b-@qy!a{GG!z|F!|!kRj`Z68cn=Ux|EDX4+Jjnm$#~;R?65LYZ&h zaZzTc^iETz3NNJ0>fV|%y>M!WUZJ228l?{h)ki2J-$#OAtxzW8p(CRVE3&&`78sNP z*6ReW$RMmhm>c2h7rF2XverI;^Ojp+SiWKI7AIF@c$UWS9EIUuiWP>L?8fkHzLSpf zgjU6q7+!RP3&R-%47@KNbIiAb;i|bVL!(s5DbyRM>Px*nQ=@nJj0k%3X)4n)+WKJx zw=5s^J6gf*^136#Ei1DBjX71~R^+l;a09Mf&F%na&JGw0(ZT0%fU_W1qc4we1e4#t zRH02?!GNafPSS_fF7%wH(W44E=s`(W6!x08T@1K|S&)udl$a&tzKeQk^t}AA3q2(Y zJxe}_phvzu6zjeGz>%Sc71=WfM$ywO9#_Qvqr>t9Zz`Ns%LE7cW4qgzRtL#AGa;=b zpyVwV0&F(|Dv5v*f7J+>{g4X*l?nli7eo*sUmgkpv+qAL1h69esazs}{pq~bCF?QY z(~9B$%$u$rtatYS&R#I}fs=F(wmsZ6fO2kKaOhn&ygGa3CTPM&*kj9(xj83HU+r9Xr9=%_q|uOfmE#WL-`%}_oo>;?`G%-&QCGy@}G@?4gV zs5#ab$}+=|2yw}3|C?l(-iayJCM->-x-#D1*52@ckG5nV;4n_JO?`;P0QtJ}1IMlC!p5$idzlry?u|QZ&p}XzIV@FpP zwQ@exp0k$Lm*JhVdjUt6oWr&8p(M^Y?w#wMY{4mjxugw$WJ7- z+l2?>cQ$_8FHE`3JS-3G!97Vu#Ai5%|mQDVGP+ zU=|9%>daJx68zKSFqUJZ5RM>8!+yJBF7^U@VgG^s*m3AvjSQNY_Km40l51M5zbaBN z$U+)cj;2b~baO6n4_|@n_UD0x)CILAEP(cK#6%dtacxj=C^%93ndp|@I$mbx?7SNj zksK4jPI>&S)C_cANnXpwhbx8QP~Nu^49w3hOv{1?kxu_}A!s12S72jmKJlf^Zxqx= z0f5J*3A@kGw#Has)Q_cFrnMSdUQBBPcD>+RbWsmiycF|AKEn%o>ewmHxAv%GLB0mG z?%Gc-^5%cV-=AOsg}<8r2l%_kX}w(VCqo%XM8sQs1}!EO{+i<;5(@u6!Qauxw2Hq8 zL&1BX-B|Ji{|HenC0_xP=6?(c@_z%uBhIRSFt|wuPnX4w_PjJO_={xlD1Qg@GuEr% zNpCNhe9Dg5(!bY~I7IMd7T+PKmF!`oYW25n*R}N3{^v&!1^`Yl1~3^sp{#Z$_&XW3 z&n9yuVQQr2Lj00x_dZQHex?w@xuy#-fL91Ph$BdoP>3csM-T?iG`iPbKY zLwe)bLA=_>_5<%{3U}=9P|+@+w-5XGcdYQBZ?dTzjdiMcoNsb^4^V?$dB%r*LqDQx zY(CX#eyqEBwK00yTTb(}yH)dFlDmRQm3XzE>Wk)AFaZZ?vDSrsLrS;dpfHblUEdJT z)k#B zVUummv;2hvoe_PTeh+>}SrvTNQ;O|t=N$7KX#gZ?Q&%_fMm!U^w^lP@NRCE9UPW6F zC@vf#btXQlv9W4u3v6tk<6tB7i^9eN#&Uy6U*gsNvk$QGsw@ZEpU5f~#)Th6lSvgx z=5=x50DiWun2FZIRX~iVqN{^1V_siE7`lwckbhr$SI&HuGYB~Z?#o9saDCjsbr#Mo zi~x7@9tGSW1>9)7+9d?;Gy!g32kvTD$iXmX%N%uRxns0tu#e>YN9A;?sB%7Wa$aSQ z$O&B+IPD~eb$%us?+IO^IqWYE*mu^n!0DrJI5>S|rviI6gV@2Osd%+t&H~tvF#+py zh2uS;CgB#K6&&vg{i5E4<2|9Re8YP7pRx2hko<2v9AQF{EMfxUb|)oCGl>$hAt1kD ztwSn4(1zh%8j#g>!j?^7!1NfVGmM(oq%MU`?6yA_8{54dxv`xa+(iN!6@8Ib#Edi~ zZp44R5ht6V}gUCl^i$uH7X0`%d;{S#HjjQ*55HSLbKRJr-@bm7ENsb zm(xUF-Na1QL4o@N^ z^ouZGWPI90!McYu3Qlvwr=->S5%>yzQoJ-;Egd==ulALM?*dsm6d9k7piMnK@54_u zK0}k#Kx{5BM`{#}bU=9ZUKffK2+Lk`P_*<%1;RdR*(JW>{i0h9r1QLy!Ur{V7ZIdw}gan6;z}jsh{GMEKEZ#kMmoq0KtQ|U0 z4b`J6+JfUe;crP!&x4wrS5I-_Qh9iHz3Sj{fR<>VaMmZ7bSfp<{igtz3z*>FcT^OY zsJcz4TvO_mI$e8w%i4QHYTxvmqSOPb_D}I@XR-FlQahHxRZkJ#rG~l>)QjQ)TIZyQ z)}dwMV8mhT_7lf}uiC}1^|4AyYU_k2D`@Lv6EU*q0S$9ul?x-CQMW($rdJ${)M{aQ z4rLU~0}9JYCj;iciO_;|k_bf;MBN>se(>{N{OnZm41NlBfHYaLr^Em>kQ}dyR9Ug7 zQ|I>$oux5Z;y^WD)_-zh8=km=>hqT!sDAlbVe&tem%*fO@oI1T8=#si0u-7D!&_Aj z^JJsqZCSCW5`nc)MB_|ziZb;LmW72}84bYD%6H7{SkLyltt!5ePP05u8O->$j6cHu}0X;fGy6^ef&j_spA zgp_L&ULMsw3q<$O)NfVy1jk`P@PWjM#)qID7E;642n|Je47;JQ4)Z_~G9b5f#;ME* zZdqDkdRZ$TAMxuX|IcgP`GX?) z&i7x(3@)t((o$s%V$$vJI?|h#dlYdVn z-}$~rO#ao8eCPW=uZih@B;Wb|>zMo#TI7Ealizf+(|@P_r(^Orx5&RcCV!#I4<-#A z#yJlNgJ9C{CPUGPG}zBcuKjlpWY0T4>rHCWc!I=xc*_%F7HEDfJa)t^O2nJYhqi>K zEJiNIfD?jZDqiT!vxOo@$?~O`TvR47;0FYZ#5$@os&rwm8RX|kPGik9A!Vv1lRxaE z0Uj&J7Ma77+p@6jaGDe9)w7$hUgz+$0AcknDP3&e-wu7_iOrD!dbEFNuTjNIM$%cG zvSXTn@>)g}pF#bM^asepZxyi6u+L&aK#cPv-&gQuDme;?m)<;H(m?_bjF-Fz4tIvuD9Y*LOepP1Jo$RT?nk)8f27^II5{@#tiu$r{I7Ewet)8?VP){Hea>n4i*HrKe%0_& zyxO4?(eOBFSo?2XEEo517|K+}8>dQOaG z>=R*ZB3{KNHr8kioH3yV9WI>Z(4p`fMTfgQXeF355U=(%J%NG0Gl82!7@LS^Yyvw% z5Sxf+YyxMSBQ_Dw*aYHca7};@V_p}6C%0)LxxJG-UnQTX*(2Wp>!}JCSe?;HfA0Ke z9k9OmUV)XUz*>q|du2Mn+AS_4ELN{Hin$@SX)8K()NOLgh{Ep>m|sq<*1V<86Pr3qZxcM@Ilm-J1+KO316;gnv^)349AA4cRRA)46!SeyRs1AbwN`m~n{Jd~YTwRLJ2m@<{Mf8fKWc zx>z`d&h%{nA<9gUOb1wn$P+g+iBM_7K$nY|X4Z#Bs=bLZ%yhqBBjx+?Eszrbj6=1! z%?c^6!$t%qf7t}2bUgt`d724F!c1+*)oLtvkrNt8krb!#(w2=^KkYQ`M{5khj!=!4 zv+>6`b(|-SL!vlUFYFSE12+OA(Xre`BCbe^j^!?)FBO5_`&tO}3La4cO^+<8ItYQ_ z27d#*M+uS48>KOh;qN9m{%>P)MOVDH*Z%Kv?$Woqf`>+Huj=ERl|Auic z{439Q%1j3ZLw-;wxK;V4eer6~=m8X5Df(-_oZkot;PxhjtBBfpQ*^z_E$i(asdxJ} zRqvUq-i>&*2e96glwO3-d#mC;h`nEs7VR`d*>RFZQTC#+vJz#&eeEaSj-Ix2i?X%c zZxPXI+woItwatXLtpo3sx4ZDr8TI;e?|90=!(&>gZKETJ6;%{!(>W3Q1rxXzj9Tq} z{L)&@kDpqr$styhYD&sOs!6m9oYCG%n%^ZfP)oB3RT_Vvl(m2-^rQn%I}OhS1y3V| z#UGfO4c#E{K$>;Z(k%47NC^1hTFC^ugg#SAoht5kq*#dap)`(QCdrz7IXp?MNm@qk zB?@9mdhN;obve0WJf`te7^5=7i+B%yz_=Z$CVf#aJzP_Nl}2kWokfaGOO?%5Woh)W zqBPt0-w^1g4$`d;dH2f9Og#vLL8-1}ptINNSZU44!{Pa@J9(EeBaqwUOL1tA#{&*+ zzAC-Dg+qI?%4q52b!J9$C-2YSqEHjsHu>EU)4G|TvHmbi=@ z#Mw9|s3*LUS;F3WQ+*4c5sPjrzWjgUTUuy)4 zUxHlJD8Alw_D2bR|H;z+9iZ`8c-QdX;i1d=4<#^5=R(t6{Yjs8y zt3iQGTefB+FOO(dKw_e?{6ts?(@+Sdu=rY@+F1sum@2}(2+Cn+A?*rEu}HT4?OyaG z7YZiIEco^RcYk*1$in~q{&YT){&Wyc7<1o=gKn~apU<#W0@n~NlCz*VnTyMEQu3+} z;GV5yyy2h&qk20~ilh^b>ZR(}Un@Q_1O3k^7NPqWJRpL*@-63cqxM0LIH);jGVU+{ zQNbMLiZ4p#dT+S@Wu`SCg9|c9u7cj{3#~;3d)F5pPFCQ7p1sc;Ue*m9^eWHC-vPKfq3Xauqh>Mfg+TvORsJ$n{(P2~ zS+hX@TUE~0DyN7!>+lU~O_ZGe$*RDCQONm#wdE|Hh_g#*Gz2a}Ps`cUevnmj1yyG6 zO;~t-xW3P0{?u@@9jj@$33$EIH~1~$N} zjf{b2{C_2>=idQbjwR~wr;d0BMwP$>E!kW!_0MN%yTY1bG%byRar>I#dmK|``c5Q3 zXRg|&?YN{HX~$6(fFZIXw;h2Vs9HoY*Gl3S&hzmsqbGaG6 zns5P)A1NjR!=~BSgk6ASvOqE0EFpIFp~}Ie)iYD#-h(F;hr7BIqI4`0z2Vegq^y00 zDU`TkH%KrwB2Z)SKVb}TpGDkf68D*`5#vb7QqV-pQlN}M!D|>$LkV<~W+aOdm3D98 zN|CliAj%46iwR36xFTz@y>{16P2p-XLA3o~WWVb%Am>5$yGCM#dZ&gU^IxArt-yHg*sjKnNfT^fIQN( z1Xp-vTpXEP3fzufs{K5U=wM{BrRb<{O>|ICUp%17@P7nxIG~qNyA7=mfIxeS&t68g zIQb9~5`GoNaYDZ|%X{27k^-TBu{?4M_@EI;x#rcfMw+O%6LFZ(zKdA8$G3O{%P^@s zZ;vd~dL0g&F|Qs=HjUcn>EPw8HEN&W4`&7~a7P+t;w*H`M{4$7RDe6g_I_zL><5=F zGUG)af=h9x4_cO8R88xoWvjuz1=D(|x2U!!;L%ji*05S``l)Ed|BYedGPc^D((-yl z!ldQ7y33QBwfs?mwIOmh)JM^lF>b(Ex@9t739n>h55#W3J$LB9Y;+)GGj?`xl)fl{ z_WzeWa-ZP?LK`S`P84Wb6Mps(-*>v0Nba93kK8@-y^w@DfWxhML zp`mD}s_?2R;-ghWkrTQ{S0Mp<2!IlkLQM><#V*MP#X)kI@jIDWri94?MXlbSYBoma z?D17UH@SofoY=Ztb<|@=3=(7BY6#(lcgj(ZUG^-h!cmVn$#H^afv)i~ia$U}p1@r@ zmp{<70GG4NsC_{a9Gn$lFwe}GMYu$yiafm+lD67*4#D zy--q$=D}RuBV{27wp&;TLU;%bT<<0dQ(FkJoB8b-gGD<9)nlr9+@l_q>M=M^iafak z3hX}!ril#^)gR&yTn1bnk^PWyFZT-oQEE5D4cE7@9Uj`GZHEwodH}<-xx4-d3xyaTVzZmc3zxf-}?~dGr>s_2nRx_Ti5C7tC98kW_-#D=RGk@dg z@=wBRqm{+j1EA;sW{<2v3zP@o%NTov_9oLYvJYmD4Bg(+9%1`s|BF2|0__VCn*qQv z>=g_31WQ5U6lldVS`Y$?Ct{dutTf~Ac;!#Q5F87u3N~61JB3wqxM-*5b22|{_Y%2P zE7(6P6XGc63@ingjPWo;j~k4I*XQw|(g&Ev4eWREhqW4xSU2v+&MxrRLwfA=L6=$| zsoF74UsdIGC5)O{|ad| ziSj7daE>FKuRK{X{~54_duNArJI`tujDzv$f*J4I?FR2@NG~+;MHFe>+ay{LjiNMIqS|t{9)PZrd zM`H3<3B&!r-$&I4m57nSE%k8K#JS-ZMG_}TUHecsR7N&2V!(ifxXli_BoA)jCp!o! z_Ht)j<_KwIgV{__evp8N1&-p|d7z*NUIIxR0sjQa$3+A~JhIzNdTX3;EYK_p!X2J+`lKq(BVzp!#EH3w;?m3%fI!K4eW=!iFsOY)4}zJsdCtJpW@ z+zUyAIhp+5MXZ?3qvH2uX++X;q@l(;MmMi z8;+#LBB}8XRpV|CJD-%VYRs3N5xUnrip_qwf|prDrF_z74ea4L>g(s^>*S?KLk~xF zpz_yW^N3FS68*JEW-svbqI~^lmGtH!)%N4+>jXJbUVq(_Uw3QX_E7nHq53*bwSBhw z`na1l@yYw0@wKQ2JmYNdb&7}6$Pt-f*Ps8+vYo&>C<|_%X}NtJg8JJ?%nCc^nbQXxPGk7aTUvDP1DG?L#q_TZMq+4J6w)_VRZUF*(! z1R3pQYCQGda>}99YPMGE?v}NdxN0qbi>5MQeNxprlRkei^}J}UyKd5ma>JS&bYlR% zdYs+CRqHdCXjt=At$n1{48 zn;60C(AH|rnC7lksCAXA)^UI6S|3-nULmz6KP3CiZhJu2y5nxaK#i)^h}N3lTCM*GxN8+^ zjds;qHb>X`sH#t=688xNC(V!1;@=T5ok~ zouO*oK=Uq`JiLOn3amTEw1R=VtKGEJ2ZwN?~@{x3<5pg;5(s!8fLj~X9Ahi4w4EdgcV&%IVk z<50__U*17347n^Aa@n{gICl#Y?D4KZ8WhT z6E9`rQw(XS&)40K#34+SE5lUcekPvEL6X!6o4HJLnDi`(n!%X~X z9}=r2G575ENW|s#mrUD@g%qI0P^8%_nDC-XI7t_JhiMn7v=J=yA`{xEge)dJ%!FC8 z4kFiJ!o5t$RS8EgU|Xy0Takul40&B{U(F&oTf51=WFvm%;a4;Jbt+jp_Riz|6=%c^ zh@XHPZBNMnhj|uPw6mx7VLV`I($~m~w>_WYKI5&w;I`ur-`~|_-?12fM&g!K`_nIe zYO?RV5xM`EfJUn(<4?zb;|AnMr{Y)77Y{Vqoi4@ed@OZXnpB6%Tz4VA^(8>OGU^E{ zhu94q27+=-Xe@^ltX;S;<76{%jJ0;nb~9&$XF@MC*!3YCHxW0kL!kWgL@WRE#PA0E z^5B;z{Ar{|_O?^mAGXk}elMnSZiE4njyYf)T!x82YjLcrHSyI5fIYYLxLy#Ba3;$>%`7;a@d`i1bcV{ zEFBGS`+IPi>ec%0IO?J)JL*Y0>opbh4C*IDPBGHs=yuib&=IY@7bu|yM}U6Uvb=Ok zB?^|}YLw*h===u%^i(z@eg;lhnT;oA!kLQ=Mf^5$FbD!&l~QGI}O&kj`K9TC6ML^|z&o-vVgun9lj7r4M% zh*RWh=c0rpSm#1=cAsYk`)&5;{#s7ie7lYf_uGsd{J#RQVoQ;c(vje^ZX@LauLXl0 za21Pv4Fr2_IS5^$OI%UT3=(;I<&;M9dVFsNG~K2wsmCi&lXU)71~3H-Fcd<3l#*&* z`+05iu&w;?eT>hPp!ji-;?4|_%$6_)lWwo7bHyjK$j{k~$ds7YrMOtmkWS)4TU;o| zK0o6Oo}JKcez2Se=nh zeI@5_o}C6hDh7M9gda9SDOv30U)AJ#dh!|Sfvhl?7xTc8SCSEuenZWYc& zsCk5+1x!r%;@nNKF|azM3Up(XycC&zHZs%`K9$pIOy^mLO!pz5ZTP^2l|E~w&)R4$ zwLbM(t9^(T<$PoW8>DnzrY~S-`+^t87jl;JYMff-<1FPU{3yg3jHVbo&t`7z+xZ~tyT}BJ)k?pS^=|pbI?=QNiM!f6akm3LO+yvk2P@y>Yq2{UbRv6$)5BJM#EMxB?fj8MtE_i zF+UGlb*@6SL_1@K-xv`L-y??NP+oT&Ah*`-Dny#AuLt9BDAfEHXObV1j#)q<|7kjA z3v#P7OguqH=4v`Z5Ep}%pyQpO<7S7BSUh841x1i*gmk?5wg?^hG59ftj;em4Bbzuv zI{r}HjE<^mO4$K#QdPD>$G0Qj2pvV5jdtibCU6)!zIbbtj*w<8={Wai(ou9Vxsd;w zkDsc2ZH?L$$f&{z8`nmtU{P5nbv=zvL2{BjQumxndyq^jeh5gOHU{HA9qwrOm?Ncp zvlbp=oq=S(JW|UK-hy?+EmZN`j-XfwhY$_iYQuk;rEI)XG&JG~mSS!jS$K0SXDiIW zonET*f}BR9R(AUZCxfN#1WR?LZvWh$n|2FnaSO+Y?BcQd;ab72_>Y^{AP-di3H-?> zj1(T+i=KNi0CS2x#?(dFL;?nV%52!uW?6oM2ZiE}KzNKB+6XS8g5X^TxK@8?VAqGEgP7GDQ5Q9y$93nX2A!dj$$b1CE7=CdxVyMPB zL|%OLFhitE@Rr5iC?$8b!E!h;-u2F@{L8G4)lk4-I4L zeelPs_IZu!KfrWV`#Kvn1Mveo8LW?$fSf!13~?VM1F*4s#&AX9u zn`MhZG!^AXLP2=&%)_&jeSESghwilMLf6B-fGJ0HgcBZHvkf9Gv}V!GLKpc@^Q7|d z)Cq0i$yvyWS^~c{`wzouPmWNh?~SvxfljNr)TxyGXJPd! zscYME=s^tGi!|Buh3qd$JDfKT7R6&?I}N6OcM^A+G^!iVSvl#U!|?-H-e2jBGo}`C z?h+eYwF6{YdREK60>C)DO6$A~pc?Zpg2@^Mo4~GvP-J_6< zJ{(>;8nu5BQPtrH^m{1;JOAn7TPAWIUM-#&zRdmK^!xMIMN|quZmv>P{i0IXL`#)& zmIoiXtS-DBiAwpy=L~SI-&NyesS$EBnI0C7$?vwh>LcH_qTk2gbC`kt=C$l_M5P>D zzrVNju=+g@DB(X%3{x;vEhk-r7|e|lV;pq+*}fo+Ev)=i`h7fPDQx3lR~lRE{JE(D z8%*Gt>as_x`#NOezcRK|{X&f5R*CU~%(F&KVAx(qLX6ukXhsY|u8gfEFC0d{_l!+NGhe@x7~dhVq{#?oETW_5lebyY@PD0((j#)V2Gpvdj8W?Nf%VX$;A^?VXmUe zkvb;#l;|NcS3br@j2Op6)h|?G6D@~G+oaebk`CC8!0Osi;82BZ9#oJks+=Zwh{fWG zp~r}0@^s`|(S@;&NztUkQ04xsW2l0_!;R z1;Kt+L2$rMe{Se10BO|B5tB}xZ&Y9n*om7gS)=#DF6?7%G;u>~&QENCLL3@_d_ zTkyB5JxG;50wV%}yG29Qu%LvIVL>#hVbSebx3B_^K@yUqn3SkOF?9?q!l60{I3ZFO z%uL4Tv84fUGpw3!_rBvW!{o-%9405je{bGSfwiJQ?ST-B4|pgGT}V&Buuzup@mKh;X-KS_jaS^rfETpC+LLQ0Qia`0Yo(LU%s0Pwy8&B9Bw#r z?O)=0VXURxkG&*};T zU9qay?y^-Z(JUn7q09h0^P`{JGd=(Y?sd-x%KFbtqH4;HDz*hMV8G)KP*{fq`km`B zd|}#>^df{$ z_D{EOu4sknCvlr0ljBbjj(5cQ~^)^g0V#exv}C&%u~8$jyS=+7+l0R;pL zt@I9Aq-(UG;HQ;>_THm}i;MmZF8((Lv}?*NI$tLIBs*%F^HbCl^hDIkK{*DbRrU_z zuD-w!uPeM<+PZ3d;2RTsQ@`s0zoXz}gXxVYH6{STJPH<=~j3 zgk!osWz18DNLFtw_d#lr?XA&kp(ilJT%02)BXK%p#@u>yQp>qB@LWjhS@<5L9tH9U>x0x-OfOae zgk>C(WehOzLAeS$!T$HxoXyNfii#28XFh(aBb;B$s6vg-xoy!}VUnR%()}MC{{x%R z9pIChypJimlj|so%+L@`_ac0CZ{(|1=-&VKR_Tr*K&dfdWUF+Kw(}I}J_W07K=)%i z3f;%g2i=c~(A^p0G4$W5Cd1_-z}D}VrP>u$FDACKs)ha~=%b??Ai)tU!m^4I=<#E? zsKOU$;|pGh@qV$=5I=##B*D4>Mo0H~FqYT*bDzCfm|zy!kJ~2-tbXfdd=~_}ub0&o zDQ);(X{4Ns@!sCTO&@*CoXarY)f$sdPti1)O>|qMSIHLAIe5W%T9u9sAgf?|0(;r2 znO@RNB%-&$Cjq{cbHs&{4lU8}g z4BlHGA6Ib}KdzV<*+q<%Mv1GI#(Cfg)#H;j-{Qv-{NS9O4A01=wZA7+bn|D&Rdk+G znb_3ijl+Rr@@e}pE}!^4vEl<}zU!|{Y+vz~ztYpO;V5eQouohDz%t{uFY76b!eh1X?B?r9D)YL zq2ItV6!5bEy?xr}V50vr1@`Yb&A7fqas9C~$n_4JpuW%uegIRJTt8iZB?clDs9RSK zy7f?8Uo|4a^#Z2#JLakita_)h&?{X25%^5FKEoqifA?Gf%nSco^1J9WeI5(O)mRE+ z{NeWH;sNpF?ikQzVg+s(HRi3rZmO<^zXSOtnEFuy_ndZ0!TCH${0&$!<|QV`zUFU8 zU~Xz&&mXyuF|YPx{^nNLMUh>w4Zy<>XJL_OJd(K<27;)RhKUJNuxRmss)`d(Vsa^$ zi833uSE+~9M2d(ViewL>sB!kRWooN~Xf3QNP0T#BJIaXPQsNgi zF^(*AA6}>s&hh8r2vi5={u5>sC@N3@<;4mTyup|vD1bTnq+(`sJqlq~UE<|J=u#fK z6da|xWHP%*y7Y?fQVF|M90`>}#w$HZnEcrBWRG|YT^WEe7wEk$QDpWOm1+t z-FQeU4+rtz zGOY%DxgS!IU#{%eN>kvbx8zF?u3m$7u-1eEDBovAs9HVlRu8!?g%~mB1DlB%poGW& z%>gbS>txd&5hg)w0%al$GVYod%<(NgDM|=!LanXf9D_ra^4XKyh|n39Adfut$Wf0o z)Z=9J7^zC${W`{Uv1=7zbi79G-D}9MhqHGv%f<_scvr=AImIY2dS#;-y!`;zxcYhY zE0pKTomJ>Clvo3@>g+ZZTaEeS6a3rajrn&b_nnkhF&%3}rdHZDD<)k*L!i`LHbf2KWka}* zDh@X+=lOH@6>xZ-hFy}GW?)FB<)NKKvwDm*BtiEa^Lnv8$11K&d*@1wDfnpYV$%xx z(_*paoS$agEB8TJ=TjvNN%!Z@kVZ~oSs-R`x@n!CelV=6Lcu%I?FY~RT0-gNwx5lC zYzFTDl+ZZ#c)aTkw(!1*sxk@>Dvh+QDzZalf{Vo_ftn=h)9qJp_z~wLK^gjh64b>{ zFd=Vpsb*PdB8K0=;Idc837bCA6y}jfyIutV95ycP(IQ^c4TOdM$fW*Ar~XI>Lb$&* za7VgqlNN%Jyk=k+@HEyGGCob}08MbfVB_xO*9bo2kG&5Tn;EzTtO)G|32n^xWegZ& znF(X|Ho$JZfIYKJc~~zEm*6= zU$Y29T-g=`*!6%2b$i%uTKH+x-vFv$anYyt_T?l}@^xo;0dgn!T|l~h67F)8qoqNP z0?9!gB|T_KLd=HFg)p_>d<6*n7zlSGFgl*0e8wXD+$~`v}A9qgy0o!=G z5_bSDGu#s(dohl>GN*w#_>C65u;PXwQdb7I`GOCVd^qg>E zEIjNC)?b3h5;IV77Q3!QW(9+774*Ix!x&pc@Vjj5lI5e~&a zGUC8LP{QP&Q-+el7q`wkAFPS;P8!eW%bw^fspQ90l|@ zj~t&(j?daexGw*a0;u4n3|2o{m)B6c}8W`z(Gb$HQ$*{_8~NsF9H?CSq;RIUrZ1HeY}jO6i1fa<5&h3jJr5$&y6EcGx{gBu5X z*NYGHW+HoreGjww10-e7&N@r?Y}GNYp7oNRZ9kViy9GVFP4-~Bd$vmQ`jb6MdFp6v zx2{S1AG(Da>^VzRpWX#X3B3F6StNuXI6siTs?6aH(3lP9Crqlj) z{E?bnXqFbTQQaCJI+URITf$soJZXi>g?WjsbWs+ZHxGRW|mzsoG2O4o21Y zQ~yV*wqF#bYJDB3+Sov(~P4?^b{kMR0;!lL5V z5Xgusd@Bc16!`y0zzI5`Rmu~PQ}A)H$bD!n^c>RcD*pOAej(oKDX{*-9e`tz=Ckb3 zAW5c(hU8c$`)79A!;uL=z5H)(L4BXx04cLlB3Z$NF|g1$N)P>$3Jm_YdI;k>A5PEA0VCEkFEFA=Ho3frm%9`3YO(_+&m(X_%Kf~D&Xv|=Wu|@abHKu%AhX+CXs$n>;P7dt zKgCCA>EAArRf5tPE?niAX$am}n|NO9M^LSkJ7QXI0|s?=)wmzcoZUuke^!q3zj}X3 z{o1g#jr;h(&&~J^JT_=LU0R>Tb+CJknzw*rh`35+>`H(}iMZjAKlkKv44W`VTM=(w znxP`zU{frOhlP>|)WQO_FZ+r7MB56OE^;f*BCtO#6q>OYV+t2a?BibKeVSi1Qtp>4 z718JLY%up6$pdpQ>rCd>)~$(qQ=GP<&I8Dl-q}8lN)%120ifz7wU_?bI!N}@zY1GF zsvZlU1qsiOAz?Fqrnm(CipkFiuksJzDgjS|M3;d?x1-lPNupK2uaIb0gha4kZWj{m zG<)xknm`5CFJ{BGHgcTnE*c8c^MypXbRP72fCo7lHJqsdp|n?0!;t|(VKC6DTzift z)ZkVKb>lLJP{8ZbIIN~2wuzNFJ6u>PC83JI@;F*4NI4~@L7WbQqL4p2^9-U!ZTDu;^KiB=-s7}N?q(})R_*IN}}+j9}FIRn#J!SMn=-+ z^(}%BMR0u((SVAwfGDJr4#<~Nv}D7){oyVl?|k*x@-)bMatwK!kI!!uealE+SNyap zJF(n-SW}P=nmGA@;+WeM6res282|{t0F;MmU66&S7o7hy&jx*rnz5|hx)>q9eF+tV z{b$Ej4487KnuO>p+UeXZe{Khstw=SOotuf?#Vu`vRoPC+RQ8JYskggf;yC<0s!6OU zWHqM$PE1z}@!yH*3RJ14E234-&uLaA_6|3%a>@HrB?9OE#_Nsyy%3M=A!79B<`LeB zrE+bZa^XP=i~x>z_O;;~41V<7F8YX^1}-Ba(0vsE$-@ue;0yr*cZJBegEK?_qDGX> zuS~Mf1puKZn1)I*v{H9{#wdZ7*9=m5i4Xor1OFfkYS6y>l1S*WT>By27k`e&{z+sd1kg?NGPex5cE zD-q7k!`T1wEU9uG>=#INs7i+W;k3||qB?&UPhNT6rl6^zAZLXU{07*g#al8w&~-UO zFr|aD&oHWgl=8*!R!Y2u5Nwz{EK4iQ`E6o<^=6fNhX+sDiu*6wU`5;ER@bfJR|~A) zeb&zf))F6ZT=gz(oh?3Va~Qh?lh# zjFY5|3ngY8L9a6B9Hj6#V0RyB7L_n&R9awtT)>5kGVh_t70MQNP+!>VF*O^0$p>{> z7`T?b`U_zyW`})&N>4%H^0Wf%$wB9h+T$^13v?!0$9NveK9J*D+1Va7nl}Wa%LaQWr9?-K|Us>jZrUDu;Y2adj z#UmK!!=UwHlxD_IE80cW?54L=u6a62Z@N?v`T)QOu~sZ+_ThZ?F6BUYb%vTQc`aiW z0CR4x$D9vPT?~PZ4J{&KKqrx5Vkz3gD5yaS@MXk~)Dj)){ajGz`hLVa;y4#GL>*s| zZw5LvBh6qb!txGP*-igKWP`opsw;{Yff@ln=)0zA%4lwjt_4bK);Q@wn zbFH<{v^LuYs|lt~JKoXGG{4Rlu5#$_FpJ`Y(2H^sOVTL$0y_Ja_7RrY9~Dkws;91g|>pD_EQl1H!0p_|9=}yG;#_+G$KORdKfV7Z|ck_`trp4VsNd40Y+ug{MmF^sVCfdZwB5ha$#%7XHYA*3%1 z1YJ2euf&(L$q43pz_8fm6zqi`g9DxB`nY-*Ukwg)otLww{7u@)_rFKB=7HVk3OroK z+q8@&38{~x1-#R`Vy%#2FpnmL~u5A;DJMzA~E4D>rtH@IqG z=Zd2W;n)}WCwt>2w8ZzcQOor6d zqAck`QICsqp#jiO^(xb1%w40*q__G4~LF%p_Ldev_A1!n?hx1xWM|;XZ=7vKO57+1fLX#ZV7+sL)S|1 z0*NwNUs)#J0QPyvU35Wp%_0s(*!rqnVDroe?5_tRxkoQFqLUjnP5 zAaD_ccCRcE?eoP7KuK%A&sqlqu-R0?>#*`@3;3{>B^$L4UYgKm%z4)N2~bX%g_xo$ z#6cCcJlvgvm;B*FdqNWnw`)Kmd!UOFMDW^k8EO#if)T*llzBEommdKOt?qOIs~(Du zBaRhvmWsbgOGb6sxz=D2FO5vkVv89_>WoOP0bXsIu-Ia4m=Jwj_xZ@k0fdJPXc3=z+Sn1DQb{aVh z=ZYq-4BZUgvVV93Lg^ZEShh0i#;xV3;$_sI0{ef8RC*+ykcAamu~dO` z?Kh#zQ(&uBs&_ud2ePUdf`OsURL}{bXrE{O^lD;a2KyBq+8ivJ$M^jgz%arXDY4fw zRvacp?)ShZ$E>1(AQ?VgwrmXKGIH4ziUX1H1M_?FIA?h{*)<{?bzxA+Mp zE)bq;-B+6ED9YFlv%rvQ2jL1y;=iZ^T%y=q0DjBPzkuk5sFqe3OKtORv+z^qQQ`PU2BaTeHhoh0ygB7>Xy1hDDEmur9ok-sZa41YfoyoV~xCBHj&Gi z+lvSUTK<&sIlM}Z7R7@~1&a@H5G^M_+Hs3Fphd?;u(xBn(7oA`cry>1&JhpgFzyAV zk#nK2FD)EpteBSOMKS{Q1_{GAFk05e4*f2-kHd$`@DJLEEviRz^EyQH!kg5l)eSP1 zWjALR{T9w5{V z%LFe0N~iQ%2Q(Y}C$${qer2Znqhs zUqRroXdI_0hrb&Oj=K=|)cS4?``LOK{bwM2~>t0*|0r zJOagi^y9#SL>G+^%?+7PItvz69sxW7iSRlmtu*|7>}n)BK!GA?PUo+l=!G_|q}VIm z!^%nJiU#C&5-Z+Vtt|9x+vwQvUif3ecyO?0!9xX-9_P|+n3C=2of*k$^*P4S=lM)6 z#y-2NYG3T3dTo)T&|wc(oG9oNdsqT`SnqI-cL-IZ=Ubz0IO=Dez5zRY;g3pJe+>Ka zmigVgCN{0|_1|HpLRC>Q^JEF+YEWrtJNUAW^g`Fv%1XQTcCbj>!EAw^c5ncDV}w58 zgAVQBa&Z8eLa|78$l~(G0=%v4AYjDGSj z&<;+39bBs3*-SKY^(|;Zf-6&4t7HY%a6IKvh$YtWCVu4~tgInO8s`ssh)l^?TN-ZR zH;zIh1K1@p$+DK(@i%`~CJ+8y#y@7nO`fzNm~CV7o)~dJlSh0w0H|1(SiKhO`^Q0A zo>m42A0nu&9`RxAK#?zcsblpv^A=Wb8wX|4jN_c1fyQy0Amib<)jM2zR;|YC1+=-Y z)ytF~#f>t1XkR0BkI$7^uMcFOr6y}U8iuvlY&b>_4O)vP)1E0Va*U^>%%N*f$eYma zFYm!&sE&3|Y|w57x}mAM`K!i8%FD)j%1!^3_=RDW?0#?~Mo42LM^m94=M8+{$=|&+ zcymFj|1hPwY%gpYo~OGH3e`XpA<+IAxZz<4KVSln*I~Ga#ewzV)_Iu8fcV$Mhp|4y z5EtGJr9W$cFOuF!lxAaM88+f#Jk&O#lty7CH~==H!M}>*pvAZ`J>M9iR|qu&k<0ib zIvr{>y%C3DO+UjI?YTEtbm(yuxE?^vUXCWf#J=!)+b?$H9R&6`M(q74dAAv7u0bz0 zvqC5!Z4oB;6D)%E++h)vH#v5AJBwg)H0y{w^!H+R3rbz8#dBo@lyR`fqZ?Q(X4A~c zE|o}J3O&mXFe~vZfX$tJ%*fytnzPdtL}wpMhzv74crO5_%&J$- zmwFm!jT1PIAsmss7SMKJ9upvgUGe1n$lwM%88)i$hp8F(B(~1qcWmT_g0UXVm3oc) z*TEm~e^v_nCDp|qLrf+X;~+J-0b|PZBk9eE05nSr%Nb3L3~cdX)poF`cYh$r2r;+d z{P4hLkiLaVzexytzi4I-EjcZ_OdDyfui=ymy~2&Y@D3UbeiQdD0W?M>7?PA?v&Lu; zWuqg5o4Ipi@D%m{jm(pW*rp{sSPe0)nFCmblde8r8}6Q~YtvxfoH6iJShA~fN!PA0 zCQxt}<=PX-97u=c8VQi~Mob7Z+D9AkYy1Y|+Gpbx3~1rcVd5z83EmgCLBbSmT?MSU z1GoZ^=Np{p4W6Wl@kP@&1dBd8hHak#vxJQk76}rl3|at<&jX``BQ+tnn8Vx2g^ijU z?0{G$cn}+C7|^db7Nd{tzxRdTioHk@C|2y%c?wyvCx*=0Z(}Q-QW)*c} zFA-IX6Xu-<_o)ZetPS=8+-Thu>m*xw?lz)K;iM*Ec%h#!lGW%9c+&hmxg%XLmk5pc z8Z-H<`VFp;f{WEy>e)2?GzjmmV9`zeh-d^8vUXuF&)8GaX(hRh)&fizLu}DgCAp1k z3aY39S1LU%$s4MYBw3s&aZ-u47lw2o$trB6JPKV6c!AXu!;oavhDzatH@p;ZP<0SV zq+0{85gkySvu+-4Wh;lfr5vaH%5}baAC*0!pLg^f&MTMDu2)@#sLL7ZGEiME`Io%X zPu(4%F4^khQDtfBZtoU(GfzDn8-TmgY`fv&w)3$U(0y!ozHo)C@8}MdDkV6Qpg8|~v_@;%M$|BV^#(*+yJ zVmUl32<!^ZPjsh;Tf1_-skVM9(yx@^Q$jX<&I5?yZEWXTryw3ApCc$;JN1M~jB+FHjs3 zC`|Knr)7*65gE$G&d<DXqgt7?*3BMm?8E-1EIIlbEq6KlP+S(t5wx&$`K z-Mh0;yagF7vp&3%muZ{WECE90s-&cH$#=rXHn{(Y>R`xO6C`oPV4kxPV4>x#g|!U)A+gu9N^ zj8Lo@A(^|mpFUTxSc~r^eH-C*1^1--o3SD^&V#|CaZ(G|Lh~M8L^3Qgi#P$_Y+b{T zWvxJqbs2u67Tj4rd8~|NF@D=yIb^`VqTFu6FQ!da)*^bo0UYYI#);35as;<`3gaq9 zL@{RIL;I?)R{|+B?l1B^WROA{+DF)Za3h`B_TmoYI!f-AB>KnhVeh;4>%=jOrjoTC zNGI!O93qb~Kr*oZ7ERIP$!kQ8Yz3GCp4> z>)XbXZprK0q8WFm>1fw8U+U)cLW2q}G~m(#k>?H0(gG|Uh;n(sGe-!{BqvWVF(@Fa z3aN9TNf5S2DqYrCI9k4NS;5Hg;5o7v_EJ=b1AUKD=T*-7JvPemMT!fsHFmzwQ(QRv zO?Nq=VqWHgJX%ewrZcg?_VmC(RkY_M#q?)yxYz*+G2mguPU1_x*e7@=r`-)cflExy z>V$@^lg|EXAAAd`4i)QJTGf3j+Cuv(>Ij?@@PuA5VckW(ZL$v|%D2q~uI~hEsR_zB zzM~ky^Fx`Rytg~>KIaP=V}_SVjGyz9DIf=z-{j&t>B%(stWR<>A(}C2wgJWf2lV+u zlf+mtU%eKFnxCJSBLZk*nq@$5p@L85Fq{Ynwu*+^uwA%$3zpeBlbf-Dj5qK(UA7jS z%8Nt`dSThD4=w@gEk$}H=N;dbebApaPy!c#uAnpUDxO!9Hyt_1-Qi1}YSb}D8^7|6 zx}EqOzw-RoBlMcW#nss<)#C^WW;!yvSY6*zW(n&M%rxT#8_OraVb0(Jx;gx6TsOgW z(jk@9cbP^zo%?C3n7pnq(^~cBzJ0Nmr18)W^w4RxIHfv^Grl#Q12?4(udXon6@x8Q zHv-mNd__`cvuR=jIuylapt?%#HKS!Dv2$2*@WX_@Y(?-CoDlEPlT+wBU zXS*5y96AKuVBz8)Pv*zi!YLn^<3FOf0KZAULSEr@kxh_mK<!Ez6E-ypO zQskUT++$@62Q)8d^VvXZ5rAW*^d~!Lio@(~^q>6;Fu0dvnxEIbiAEiLI_X&L0x&Fo zU5-UHh=So4&J?~5RB^}*$vZqw(+8iV|SRDN__Ej07kKvp-J3bg8Ib#}Vj!SWAw7i&np{D83CCL`# z3Jsi>bh4s_Nn2M;dsL|G5u^|Nv90>|6yOGagJD!Xt|V0xuB9-ArD1CB-)GZe6_$p} zA-RsWX84ZcdCh8&3F0YLKxeaxxEP#;pjv4Zh8UjE_}gIBUV^vcs4_3m)q{28BuISa zhB4^DBSJ0?2ij|48QXG|9&WO&lfY$QGT1{OVZt&u0)`%9_Vggs%8QMv-%F+CB(*Y! zM=T|A-u~5!+i^N}Q|n3CRl*vy<=5ce9;8L%;AmD>plAkiC4yE#(4hHiI4KFSmqd0h zhy}FOQy38p;D*ESm3#=B)Woancsy~qkWn0u1TvCyGOhbxR_IWlF3Jnw(>NJ_&)K-> z7?4rsJr^znC0}%T0R&x)*NFzw%3&b;(st^3nKl{scc`Ah?PapBNKbr7I3yG)$CFrn z&?FquJ6h>)WNF^J>=G3`-!82u_oA({z+Opx=xre(HZL?C3by-`Z^akIF{S|K8Jmi8{8}T3(bc|G%b>w=o zfa_Nvl`Fxo5a&nw#Bo@Hp}Y9M_zLQXhVD@7U$6XaDWib!dI~o^kV1ndpv2Bdg4l#vsBi;wZt;NK|TD2 zq9{d6jI{{Y=J(G&3p2lM1!S%(pSl6|dZ-KwI^BNv3S_$JAq7v>hy6z}e z%BjPu;%qCwTHGT&Apy}TreF~##Di&lCg8~8E*}T(7c<1ku$LT%z?p@u0);Eyj;nnd zc2-Yjzyo;{8fU0;K$GBthkwaR)E52#sh(iBq8Xj`bQMZj_r8~4Y1CrW<(+A1X2H@d zmi>wlH=eJ)lLg^-N%8)y%?aCnskND07q>RYp>gYSJg{rv2VrQeHtGVSzr6u?0ZkOS z@Zeuy0x(o2R@C<EE7`!@8`pxpCY)HVU{Ijt7Dp6Wj8G zv>ap0cu?E8P^_SUM7v-jvSfuu6Ukbr z#TE=q=F|NvO427@ajnK5q~8q|iK~9h7wiLDIWTZm+A4_+?tM`%->S=(>eBldd#&|F4ERs5mH+B2}D$~-BE#6xh12nIYi`(LGWmziOh zdw5khCbOOFf3Lr#>9>yTHQTqVV zusrL?!0uUoj2ofYK%($Y_7FBWyjvyLpo@hB4v3&Fpc~6nDC@782|#1Wg^+~+UELoT zr%Eg=-O#`)OATK$!g{jy73#4$hMf~Rrh&>m5CVvwO49B?B>Nw~XFYo@nCyNGK@t}< z$K$0EpZ*g)n~wIU6=M->O*a;d)80@$FddkgR_5;#nAvHlQM*@ImHyJmj@_eF@ZK_E zOk>3`?@BNavJ^MQPC(?z8-6#8d2hXA2g!wPj*xqVSDbIS`AF?Tv@r?f8dfsTmscb~ zB4K5)Q>L}!ym&lLF{~RAU_8zU4ZzpI)*;5iN6>b#6(KVQ_JXaa7@@DEB^i7+)buh| zl;jQjuF2d0cLs`mn@SULySIk>5z>xdgjkB{X)@|Y^9Sfv0mC(VmsZX@{*|Ddk3|DP z1kVP+a7}~ZI_X}moEg{>tF=SQ&LI{A?)ZKmi`lto#*P0}ig_t-F)CikD}*9pJLU`E z4z$L1GGRT|3z(AS_~>t_V%a^=%1`1!Y%UQI$_IGla*Vk*8_`?wIwxp~I6>1DMNAVP z_T6T@ijWfeMWr$+j5buHjp4{A_|0Vv26nrbekJvXkvs}kC6}2Db84W>aa0wsX0K%P zcu5*!7@#tC7dyswW07F%Z)Oh-wqD{tLI@IU6snq%oNBKJBjW`lbS;d9E{Bc)EUKIv zDg;}vcfQ^Jbwb%6q--kSkAI6OjQj0xQLcen4EU&t6w+~a8t;>VeAnKA_tmHbU_r98 zhv6;j*%#En3Cssx=?Uh;v`s3!cw_!)aQ$2tj9Y&9;{%GK?_5Ow9|0E}tena%#2;vL--EK2`@jE|{!tfE4k zzrvZw;81YCEEJtlAplsrFv}Zj1P_1ywU)0rn-k=#7r+P>{pov0zAhT)%2&CPuQ^h- zANlIG=@-e@1a!=iuYZ?8zDn8Cxk>!vWDz?dtVE%8aPMBCfKiw-bcRtFhe)DjZkFQxVBxT)UxbB=YvNdV=K^41Bp$?q zNm$S-0$QWJ6lra5zknE}_0HeKM`}`+jq0*SU1C?jik*wM+Rpch{o;uk@Rtg>-X9YU z`~wayCh}^Z7EXti9<-U;kwoX?-dNtJ+nl`t{F;S5_0|OUURC{3eQ<9N&+Hsg zCAHi9Z$V#~kR;X@TvxC*xYt{g7u-9c*m!{Bv+6_S#n``sd#|p^4DP+jcwlX;5p%EW zaQ@r}u4dq1E87}!6y`e_)P^kNs@{RVg|Q&p5HCly(WXgj=R^Qbt(<7Slg?LXWfG;S z{jUZUyN-1W>?tsA{R9sJdpt&+j4%<^s5t`9{oRe_<5KZs%AqWryO^Ib1^Ttv5#k;? ztEf!z%i!p=0F%{*v3w8~DfA~zz9-cBSY`>yfynnWI)JSyTMvMn|Nos=iS+Fpnth> z77cL-( ze_&nl*JN;$#}_!xCh2?)A^_OO__NpZO82X~BVdzc^jh6r1X?0)lflA4oV?+Fg#KjC zv7TOv5YW3;$pnc19~1Xu5cyn1E7)eg6}U|f(u--AcoO*OVz?w2fr(+Y_wE!FMzC}a zvo$~xQmMG_sHca&r?H|eZIWkPnqRi`PH)KGmN1YjV>9Q$Li>YcIgQ$5KA|NCf$ZE!t_+rf7l2z6-VaV$BCnc zTCLbLsDYlmRU2V!!#(8EuErzT1X&hkqt42JrxWaeLV{x02v(6PT%LknMh-Dnl%juw zW!#4T5fR`b?x@(ux+t-K_?&X7`gajza}4@dkkG%NjM#6^w|wlLpLcBCUOp29(=?v`vHR=~C)~9rq(>tvEr^WpASC^yIrH8sqz6{Nr zh)=W%X)}J>0wx207t{V=DFy!k5YyS?3QB)`CI+gVjQOMh68*6K?b}9>J5|H|-O>^m zHpd8c7v?Y7(pqmUFMx`LJmg8evR>;*{B&ncYd-}vzUYV_ke+S?&qom^dA3;fW^^b{ z_?T@WzZrv8gpq7gGJ+a5y3TJ*DV$)1H3zP zqNi~Zh{92uQt!Z(i}la)#VPRXKt(SYnm#C^3mz{vre(W$nhov1d~aeTxUQHRpyFky z^d{@bYH%>}4LO(E6~ALIS)F;g73D|-#Kua(+&~-lxcfKyhz7Q_y0{yI1_*SEH&6)V zt>O#lHZ&JT^oq5B@S3BcoPXef_Q4+P5wTR}wnYF7tiDqL zs5-RB>c-zo_!=5^@C4#9Sz4$iJ7M4flcm*zp%4H(V6yZY`!w8uThfusK-${xflG0p z;oQHj?mNp=!a@c7lZAy@l6|kpCo+w1!zZe0DcFD zJ2qs~-xRk1SHSZYC2@>^cIQX(T0;1<7auy|&r6p%pUTc2Wsn)}8-2b|E^*)JW_jX! z6@JNojrnVN7p}?B5KfpfK6`(Oqh`F1e9fxGB~IM$Xil*(=XlVoOvV z3{f18I$|%tgFpTw?ZK~lCBcKoHs}z*=C9eC%izK9?Bfn%pnM(u$vsb($vfyBCQ_pr zm#w4EE~1J_3o?&3%`#ys36IOF*ui(?%(DAXt@Q{V$g1soKh#|r)V?cY-L72slU*5* z)RouQ9k$kR$9L$d~UtF1)w+F}ZA1cRR;{1!ti+?!4hw8-6T7N=$qI zqDrOa=CTk+QY6h;LMJg6nfk806M9sbA|tdzBc;!}1p1sP^eOy`^r-@UK6p^kXTy0p zC;{pEO3_eEd}s3k%*_m5^(ZKSpP<&0Yt#r!M)8Q_(19e)oXy%2f;dRh-Ft%~+;jNy z_h`@h91mji&2Sd@l9QmHW4aKi%cc^8vD9`Na;Wk}jL?4&oC>y1G8QuVKG=G;vGAW@ z{a|Z>|98QLrspXJv0N+*i>9xM7B_LHI|Sgqd*8&~M<&-cr|zPIAKcw(R(D8Qbys6~ z4-OeJ0(;J$)(Ebf!9je0Kp-wO4_6JYz~{mhHQx%tDA(=ai>RiXvHY;WZjL;5pKZ*Y zD*lZGDljv|QHC-9w+yOr67_2SKtm=_@Wlt3Fu^qmgi#3y4}L+y_(7P!7*}viHTn-q zSrOGvC8efg(j30}ph+V&Syx=IsIwGZI}D9lK0Juk6%idqlsmB01JO0-1Y13`&k|JQ z+=)(YgcBim zp@tfst2uP_j`Y;VA|6O|O9Yb|_J8SP;rbP>Bytzfb9P3s;mOz=OK zHCaJMWPrmDyYs%i0-xalk2i!|F3SsOy#AzI68U(?5nA>BPcaBvxCAW_6y=Kn9Ox5# z50KDi+`YFhEC5B(73d^*_CO~zR6IR)qu*a2+*439I=II(dsK8p6JEjrj z0=yii0Yfkg71`(K1q9@H;*io@%Ur8jjNycdaRkjFMt9b>Qxe&Zm7;p^9qP=6Hh@s5 zX+G5m0)eU;WO<2^QmKPUOmCJHdV^n^pdgzS)0W# zbZl*$<`WzNWo^Em6t^~)pi%36Jc!j<@0cLgub}+e(Wgq$r-Jk;CwtalHL!X|hq8b}ILVQWreg~5 z6GV_u0wXMv{%6hTsTMPV#PF|W<6~U8WAVnH)d2)rMDJo2F@Qdba(AZ(Iojimq9rvu zlyxpAn)BHwjAD@kW6eS&ix@Bo4tP~~Qky}D|6-}u+0%w9G}wSFuY~y*ME^L2k=n#5 z|E2PJJe;jCWtr!J98-lHZT-_vU}+#PV3WxJ2K1>NQNs!x#iRH5?V=dLt@imqd?kOi1#Z ze~9$5Azj?ClX-(yL|EvK9mNMgDfp>t-yo?E*^6}D+LzR4pi6g&H`#nK$C@S^K08aW zIk|-yRE(Uy!?xC~!_EGU%q$8Ju+(Nse=hgN$MLl|J{;0J4aY5D@?#ClG5_-~Et7Lr zCdg!86k`78L&zjH(33a2UU-!&m*q+>XR+MxBhCYSCqBnYq!aloapgY;<7jaAawVpM zc)dSC0s-14r3Ub|HR>8AsSn}%*RF)54#op@Iu;OLLFVCmWJPEsN{=(^OYy;t3<`id z@U+90K%|b8aZNV(y?{$43auw~MP=k^ll)msB_|L;xhW=fW}Y0tb#6S`m(Dbz4$W_E z`0M8~q;=FiVn;@n0N@|tD6LC#Fb8P){< zFIxWksCF&KY7zAZ<;p-aNGJp{6CeNv%1(kH0U#}cC;>o@(PGfF^5}Ne(&T~X$CwCF zmmy|d94wmifyjnp2W$cz9-3#J+EaZAmXr3hv77;ich)G@QDKJRMdL@MQXcpP-Nhi8 zAX)kXhR(N^weN$Rw*0dydF#k_fY?_5!J}aC7ChlUEdj0k360D3Uc5^7Ttrte zXC3Pmy(^MJi})hvx+y|5ihnhhPe={ytukuw1Stc1k@|lJCkg#`%$t~Zff@C}pd_SS zrHL&8M^ialeUDcd0J#%K^Wwb(f4o`JSW-|eejBxNcn&y0`hh&`0kU9l{y8W&nN)B( ze=u-%Yk&TVjzi0DCnYSeQd!lhdoVdyl6QeO&|0Pvb4pd_)L5frwG60wXArn6jZjzo zD23YIhm%9G;65QrfTSHR&2lswSfhgKs=U4wp#!W$gXNtxXNdO(BQz2}12?73G(sLR z$GyIbo(4+2P3UT`q(%Tx4J5(}&!q1*Pz`X}l15;`Lj0gOH}firz{#@Iiqnz;ssr$4 zj^)!L2a$0RiY}7kRFWh$JwRFEhiU_IuSidk7kC&k)U44lD;#`xPU*w$yFEb*xoQ_- zj#`f<8)MA&1UnJ&LMx0f7Ws>71sAUBL{R~7^qs?5;39;CD4S3oI+d1!YK=;KJ)f`R zoBIXHN=uB?TH^9;q9tAvJY0n4p(Qf2*&k7=T1!A*NP6(LTPCm?MGPv6`}4NTmvl66 zqlh8uf~rNS3xxTsPmr&{DvOB>(ZK~w9#Nz1@K(E=Bl%xc^T~(>B~;2bVvll~;cu5i zbI4l0XvX7jXdj|zX*(Zc{8qt0lyF459xi9RB8kGy)AF#KvjDY9c;Y^UFcs7ZnTh`# z9ReTV?|)T3gzyi1h+Mp4wpA%@J&8utVeQ34Dg(Fop_VyJIQ|?DglA~|tH{K6<2{s) zt9Cr`u9x<5d@=9?CP6U0Y3JBJ8q@;0di7~<_tT8yzdhyU#9^boSHn$f%kkSMq#K<~s+%5aAv zyxFtxw)N1W#C))Q(nXyQc9SSQz1tC0_iy-M0K9g0fk}VKo+L|PeF4sO5fbxYy-x&@S z>{s<-LNY!7bznQGSQW$9cFgdu2(>|(wO-VuXfd!Zhan-+NQnP#bmG5D+DYz%Z;RwA zp6+__McVs!Xu)}t8ou&#g}3#oUn;!AFk9>h@45>iyr*#b_&3z^`*%A?DuufF9i#3* zpD)_)=Ma_OVs}&PhN$@J*QrZ|x{OzsTMNttRDfDJ!r{Hbqk7}{%IbXo2Jrs9HX6lXAR7U7~nN*@{l?aY6bq#7y7TBJn zBHzm`jIff9d(>{{iyB*w(2fm%gI)7W!|!1W3G4;$VBg1y_B9k;)=t$-58ntK%|vZ? z@w3QGuka$f|Q;}!qp8+(p;CI{OGE3pqPP9Lo0pG)8qHqFPjWI+}d z7qHa=@$pUSe_*x72n;&~SiL3n3KamMha_V#oq`Poy&csWD~5=t?7xC4yFnVla1y^2 z;PeV{qW}kf=n;Uqknfa$Gf`QN+@VyxI+4DH3^7AUcfMS|ldF&xH zJ2{Dn+@p=w$c&DGX3*nag*YmIG^r2=pVgX$t;JB`Pb2PQbQO?HMxZLXS(7S&XM|)x zvjnuVFocnL#ZLSIk(2Uh#%*i0X~}=QooOj)qTQ&0L-+$WdeK?6s$QCv>tA|p0LRX7#n*V zHe-`RyRZ0DP8jz7ya3SS*Z}UILpJ8_&E#$FW8Q$PJs%(a3{W9m*!(&R^iWDwl-$v5 zST-(8aGfv%4i(_IOegbTSo9qkP7T6N>nN&FL;-X{*y=ex09)P72hofnt2J9~dZZm& zeffsNR*#Q%*-E~XWbHSlct31)<-@;}tsXr;&Q>R(ZR>VChy|d&ukadoykdU|*$E7} zq8i(rY_pr;>j6LN<~7{-!mvkSq*rQ@txDW9hzsde7%fT!A4fhLfDZ zRv3h!LQ{)wq5~V+Rx^u=dnFO)Ztt-1b>is4j<T ze6*D}JyhY~@Q$&7ez6%&nx0zBotIFVXq#MiG{>F@6NEFdtZVUseTv+yQ6Uq17{XAp zpKX(ME=uVuU@uAgbvRn3(b8OGFJonnbux>vKiqP);e!m=tw}vN_|UEr7+hEYcBslR z@XkInjuhBuqE;~16;ch-tEwL&bIJJT=T!4w_;*%iP`tpa)n$UZ1WyHkhqrbA+Qx5X zF>CM(4DBa_lyJ20CnM7$SJFH)_6mKUY2C5;8|fafD2HEy>?$-hpP;@7iAj<3=$K)> zHVwO!&8k4u63NtW8NsJf7^%5CoqLxBxxTL?l72UK_QY=I8;#&xdEi_6{ix`;)KQ+M z*@u;Q-n!-aaLv;1W6znMH>X}*5>8*rBy=pupE?%L(Zu?+*jtnVM34De-4Ih%6IC@)6>?7#ZP51+L19f2u_a=+#ynJ(eM$gb1(; z41p>HP{_PI=vs@}IlP_V8xRi|SW2z*BHdc8iv|MReh`QxaNF|B@$6{3`QmbRyA1MG z37(&<7~v37iL2RyKc>%~YI<5~eq&;d-~enfT+FRsaoB)RzGMy<19$7>E^E#x>~>e; z**v?UBzh6}VbkmtC7xGjbqe>KQ{q{BOL}-B-dFvvVgL2~M?gSzXMV#QVgWOXOmSGM z3LJkh{WyG|@TtrrugYulRkYXPzd8(@pQuD6!I`|3Yd!Sw7mxv=kKmN4deR0+>cAem z%X;b-;i*n11D`LoWuLbAyq&ft37>$d5?Kny!r!9^txcY@d!&sJYP1XPgS)-P{3W14 zkvv=Y5PtII`D2BF60LNF{%+w;pauw=9J>J=RcMBpRU<)0C~ubmd!eI5rigo)f)XEr zu*~4b`xT&UA-=Wld**9;aBxQ%xIi)9LEH#_!B9_&|9;3R*447#p2pc%qJHGtxGh#E zwD^d)qX%elC|exRaf{5M6Hl7b;bh8ypNk0s$6CtPD^jRHM;`>iQG|wboX~#()CIu3HtrU+G1mJzenXWKIaS z1o`+?L9{9gut&E`HN*!RgvAoPiy`E^JzT^9>Z80W`1k@;3daZ}!B12=Ojp`Q15^N&!12DDR{b3544+)g`SkX zgsJ--`c%l4mN8^zZ%7-(ef@#ssT#XRa1H2O67hj>o()EDncVe!-n;KrTIknF*5VTI zkQVOhM7oxM!hNiD3@<9FsCL*H^mKZ{@6o5Bv4D3D+%6=~ft*f4&oVvEb^NHwu%a@D z8>S{nYK&6I&#jBww-@`1)o-Sv|M9>VN0aUHYkW%oLKY^2i($XP%G&dnTo<^{n~epB z@-2V`#@2mAL?QsBFmA)a4B|tv-)V%nj9x=V#|W5z`dH7YT&bZYkP_dhXclZ!oZB&; zinpspNd-_!fJ1YX=iOT#D&5zBMIy6KH-oEjkP2R6bg2xR0Ue6}N=dB&AA5MbnXL z-KNWQW>5&Jhc+T)#o&)yo@ZWOtLXAdKImqQ1OT#ZNV>lDOj6X~ zBSJPWi5+%cG%sgVbWG}~@JFLOTV_uf6}<+)?3n!-<)@u^2;W?bmUc)8G^tg1Fp&(C(I;y)vo-DyZyFU9QRLb5K6PkfNMny*hn$JghJ~S5g zWP8!y0wR0%N2DB-cCsW1M3d2~@iSUQJp>AB9PP*c0Cwb9H$V~AO3_i4_Pz8db{zx3 zU{dsc#}{7mU%U0Cuv%b2%n)M#;uzR+O&X4=p@zX)WUknSiAu$Xk(%3JuhtmBZ_x`l z3%7aqHI{hRV?S)qS|iwuhvC8Z@OUZHv)%}<=1bv{dt}6lb0iR;p8vRXpAHSasN>L< z;bLsFuu!F>U4)_Sn&~H@nhp4nB@_-=5AB}8qhd^pZkk#R0&7)5zX!QdXFhug2Ny&= zok={*rljT2u;f}L&B=ocj$?xjFcSC{x($_J(;X~TYK`5B-MnJ+tf^DQv<;mimowGn zRCTHA2V6glp1)^m5$4HuZ3f?m>hH8)C1* zDz3Ngy^%e1s7?vVgfYrAH(3Nfd#zKVt{^^egNCB`k9W~u^}6&o+NZlTBicSX6m8BX z`KOjJ%D?Hul1SF`Akfq^M?`wA1_`GQEX7ioO`n!T`rHGWPwhJ*lD=s~IDK_VIP0Df z;hvjH!hN21!LnMa5__up(?)-DfdRUhPk$ko{z5K0SxEjYi1jfCKv}x`DfVw9^$N^r zRwr45(11x8G6$fBQjwrU7MOwIl{=T}pyV7_;2$ux?C*>z;?!!%TPQ?Sa@wQz!~8ay z@$?cMjvTQtAspEig~6gLpJ%9TBEnPEHd#}DF0sfFQYJXXfbKlTdA8$-NVZ>0f6gS+ z=7PTYZ3EdD>{@3IQQ^jo_$&u?TX}d8TP)EzR^WbXZ4)F~>3zV0FAEDM5x5OL2Xu%} zbdb>}pTbk7H67>0Dqeu9!X`WlKX4&%ZZHLfGwveZ?8*Sldbqp!aT^m3B^cB6F&G1v zNp~6+Ar5fH#ZPOr#-i=eddNzmbu!S}*J_K_*b0^nCKm`=VYP}u3pJh2@J}>j=6r?b za-z8+vDKvc0;2g%%-M3j`FVWy>}NppKky({Z_WL^Ncl5I0jVz}AvIZEGJZW1nOKpo zm*T>mfUp*J&D3M34l-ANm~KYWy8)-&AYP(%eB@mS86{eyB*%SVeSE!=g(P}SyAaKR zcPEpp@kf7_ZFJ+fHA-m}!U;=}uiwN3Qay2lra-zl4TyyTG+nsX+Il2FyxU=tWOzjW z8E{My@rSk<2G#RN{BOd@CEAC-nsIJsU~gxCm&k?C{;y84Vm)w*X7x9sSK|Qn5P+;K z4VTki5`4y7nb&D&e?T;N&;X5^+Zs=25-??Bd3R=XTx$U9n(H_b^a9sj1@;_bgk%ya zI3ow%(VybXP(VBt$ACa+Q=B~mFAO}Rx065aER|i7A1MZ@#N*N>HVEFPz3JyVZTWj4 z_Y~1iv;_>5V_5(e(N_OSkY22$1NNnoO;&Mxfkis%r_Ix=u@^NFD?2K+PX(-2VGh`C zi(tv}wwY*jZc~ z?>__!un*l8v**c7uVzTDd#=vJ-_F%du}`q3ItM7wWtRCnkp{0^975`A5@D%&^gLV(fDzS=8R9l z3k&*-Qo|uxezpTlh>Kx*w#*s_-vot`!S^5@I!L)9*goK0KC8Yb-P1A~o3S9LJ~o_* z^qX2qwuDYGy|@q*0WO?=cJwH?r*m}(UCA_RZ|2Liji1vL!F$5c@ommzVDpyW(x(`J zIlCrv_2l!rpWTVh>A3d%Slzw+yp_u}DX~WU}bXf_{uyL$~5r2L;qj)= z>Tz(Nbnuq-=SpGF#p-g8y8KaHVm%>D+}untY!bg3bGeccJPTzbQ!)I5KIH-*L(`|< zFf`Rq*3HL0G5#KoUsgaMp#d=85p3OuEoWk%4^5NzuvYN^@1^7HU-F*RiEjaZytbj> zpIcBmG}{QR0G{gAYu=jQVKwXQNz#5j2r>{+>6)X1yC=-^@mQR`&6dR7{Zg}Em8 z7%p9uHML#jsa*wL54Pg-2K(3eiShAA_`h*zt`U0U=XF0B5C8vmA4mrs+tLR9!LP<~ zH~~K?nz6yBJd8~1AAaGyx!u8J50S}|`0Hoe?+1`!Q7;_$)Asu)v=z7CN$nYPWv;mW zev~?86kF*nct^xk=eZ!f#&8WSGdy7V&|z?Sk$Q=Ib~hO;`>@g zJaIgr5h}nBj;gAtG|O@JRJJcNIunNmp3RJ^b(})q+)eB(yI75JAS)GYr^k#mM z*3yZaJEDGQbZA7Ra$%Oo+Kwq&dV4P^{~L`Lvl|tl=qsAI>?l5ifnslwfW@(5&Z}SG zEC2))a8e?NW%!O0T_#g9D(qaej8ow*lwRW7?)Im2Ab7edMkh_yZ_z4F?Uv)b(9+Qt zxNOuk+F_$LixP_@M$))CT{c=y~B zM^4I8 zgeyd=@ASGZ-G#&AI(KY8i zhanJiks&WwNJ56qwmu!IM5dBhR}|p6dNMidg~+_}6h-D{(nkrD7g9s~L1eb0e$z7| zhl5?jlgQ39WbYgI6f?XzL)zmv#r(z5>#fgnEXJV>2*iB+6zi%^>gdh_R+8`Z#a>8q zabFkRymcMtW|eDHtyj5-jzF!x^OZO--x22{VhE)L55pzv!S$}-U8@AIf-;9lJrs=n zDg*_B_wJK~72H1DUW6wib*2@>4yqQw%Y1TOUj&e6d)d7H*bt9l3$+Zh~!6V z2+|skh@#_h;GzJ%ycshsRM4+j$56M`FbC?N`1@t4cHt^IA5nXOEd{s5H4{)db6Km zYIxpw8&dw|W+n7h>_B$LSNb-fZok&I_3E}o-!8^2IYky-Fw`dZ(irRpZ_o{S3Gufl zq!6pbWPudG zlYoSD5*41RP7?q#EYcZ=iAZ>@Pa7mWg>705tjg0Y@U*@qQNa;Q^sQ!rzvx?`E?7YF zz!H#9{=Yzii3uRPRdjmBqLE@DLcD;hib-B@l__LS<|^{V(yB|IQb~-a^i{%G)^IIlE8=ehZ%YE+P5o9BDk&7K3F*sL?2F!4B zbR1%3MWEBcbTV+)^T)ZQOd)Utqu1*`lgd(CQqTZ;u4gfm`7x$7Q@3JFOW*=5pf_S+7rZOhCwCGAJO9{J1S3vLvHp3yB1i#+pjZW3qWV~z za32-cl?EvvIo4x8s#XCmTsH7|UX7w(8QQ_^@%pwxnypm_RRhXO-lIDW@*EryosVt! z*fqy90V)%`pjk45qm{JDO(MAZGKhET8CP;Z7LQ}lkqQKm0bN8VmfoDyr)Tx;f%{ae z`{c+%a-VD*F=OAu1Ct^dzb+Q>x|EmwikBmL4w!&BLA>tdsWsXb*~f~jow0McRK1HA zNNllSX?_QiyZ@@sNv!%Zk>Iw7YdxY3;?BM)32}w`_Wz2wr8sZKt`Pf_k*=W2I3RQm z;D0lY!qDuCx} z?yc>Bd-u;NFXK2Gn`gSU??P?wHVW{#kGe3FUHC#W0+=)*`U&2qUeqi4NwS#4 z`JsM_L9*lesfx0cOV%y`ZmFO4j{JH0>6{l2NC_OV2hmd8<*eMHM;+ebS_F z1L}5@zO7fcoAvEtLITsC&ufBdujI`<~N}p<6~L=iu=!! z-*y$O72h%^^lXo@YYCa=->F4$(t5#l+)oic7V1)mbGi%!^yX&YniS?FG1 zPdB4>F}fLC^Hl)R;W~+6uz%cj$m7lSPbbHNLBZCDulMJ8FBicgR4M~MeH3K@H#`sT z#sRpT&yOzV@F+5PEB6Rho5cPGjd38IYev#PP~Hdhru7-rzU(gSf4mKn+T3#I>fndD zOuY(zlsn0@rMizsuTgtCT5Iz<&}0HVrW40(28PQ(o-*eF&QNiQAhGczBK!pyF(U~? z7><6rM2PIKGjv7UcSg~B+Er#kGtf_>7sW!KCCVGa_>}_2VSO2{vNe9D zQFj&2EDr2RH|hfLYB(1+_a!Wg3?MKPs)S(57P8;1fg4oIWWRdoYR8?&f@#b_9D%1i z1SZtbpOs@W4by1YA08Xuk4P`|v>0`NL~GvX^N0Ut2=WGc_`=}9a228&U*Cg~z7d+p zPKEi+I53<(YJ^gcKo8Y4W?f31h*l))Im!@42)N9`ev$;*DxkWlo0SQt9F3zsX zmY@1}+A$v$s3i0{U^%P8RBd*pidH^)w+@=5*j_S0c!RYD^TPIE-bg=?`_gRv70(dE zv~Qy%YgGF<=ojo|EF9XtL)CiMCF{dw?2s&9OX^TEp1Dwmwb_TE2}E-ai+5~0WQZLb zz>aOWTf$_qJDMpYvB8hCK$n!P3Nb>YO#w8C}rX0@2RG?oY*Yl=PcPrln zaLOR+6|&LvqeS^)n}|2n09!L^&n^AsXwvZA*32lOuJN%3b#e7Aki zlaM)({FJED0Asf3Sf-pYwrWO^sfFKy2&AP^Ux+Pu7Z@+lhd&t6+vHV!=EHc*1xIS` z#N6~&Bk02oX~4=5eJ_us-wA_LW`@)t4{bcs646v7jxN5#tvjyozxK2SG zR!MIKmm&>jpz#5U z0}#QwA|QW-x>g(;&5e00b~EZrgpqNrCRZ z0~c^|F>!+H#Nh5zRi!7RQb|K-FH)S86p>mYn^!pt(-=>f0yp9P>BHcJ9`hFC)vp@e z(v;FGha{Y}h+K)(WX5Jz+kX%tpt6IKX|zgviIRzZ>`Eoz*Ba)OLPr$PPw{E!J|LDr zQ3xzmDi3I7-l#({XmI%&*rz79uLDjX8qePDiiX%dXqLA)H+%+)>Ga5Ew(Ws-^~l)v zKzDb0?0MhOBThQ?d?oZzBmsdh5oJE)okTs-9X+#-L7qIjtqjgj>5>zR`kzjFVvf!e zdF}3Qz|Jr}b?AW>syGPe*a)CbAFLRUlU0t?!Y>fd-+FZkCv`ZQP|ks#&67{H=*mK2 zQ0B*lnli)fAE`5_FIuf5(L9}!7#;=oV2gCF<_zq~P^S{MXUgXtrrg+@SWI%%4xyt~ zOr|_#Dwwi|cjeR}r-D68dLW0?@!6(JH^86enf7@Y+d7U~J*R8W;)C}5S$&2hdmZ>{ z8=hADc>rIHSrx!S>jIZQhiU%o&6WqT7(C-}xAJ>laG?E1uXfOOCbV8cI~A@qp*48|K1MWO&Pk~#`?0)T+K4hTL^Z1}WxS`Yc18(zE2L6Hr?+4s_d+dkI0xrm$ z*8!Oynyk74lYz_1=hs2>_)#!Dw|p;&A2JH#_W&u6ouk;roy z1I>F;=GbU?r?FUMUpEqOcvs~Qhb)~J&P(&I8iFRzn|EzmnlF4gCbY-EL%JDVU6q%E zH-kkdM1XoDw2vJNUxWe%2obcgu59Uu)+_Oz_+3Y#1Fiy#PQc)`3hMv0>BHTTW^X7d z;D;m4)ql|Rt;)1Nr}l(#Ve{PCCEQ|dIgDDg(SA!5tKPN@rbTizaPsM?4yDmA?Rd!; z1i>5YkUzVWmhg|m*t!-B1XznbNeOhJbOe>8*u(LJ_VrRUE(=6`NRTPz4X5U5#1<1) zFrI}gw@uRBIbL^%83ITXfI(ySgxVmoLQM-)ZQhG?tU0i5t?7|1x9H8 zfKX3|5t@IaLyXXr4NZ*DP=f@EO6Li4|CxP;#e{(xSBao(1%6;;iETS81)3J@jmqk^ zP)Gm>(Z=(!Qqu>SRzh2rS?c-5sC$=W0@#Tj&X{O=nt0a4o-nA@#At;UcxRN_epvow z9qBuTFRJ>G8-oEBF*b}C>ynu`$b$>3VzlGC5*Mj~!Zd$B7hxLH4D(o<55dq8%ec`6 z$CJ+jZBeaNhh4K`*j-Eupl;bJ%S50j=*CmP+Lfeb3u=QCb^6Il0^=-C9RZeyJ86X; zAFgSd48_u=M;OP@H4hv+hG0k5Q_hIc8xrOMr^iL%cCZHv^-Km z<905Z@$gBGMsN_W`-7pu@uBOG+FrvY*TQR^4)+8rWP8?2$|gx)$!YZZ;-eB$_q z&cN|i=$}NdI~jEoX_n(*^S>|+CxTNtu|lD%F}E`UlZmDiJ0s#y>`h3rG(F8m=xTWz z`Vwl?7b!*nat!qOYNKu_-tfL4`n)9Ev!C|`>hqF$7xx2en$SGO(B~Y!I{N(5kg)tt zB)GthLIH&uippAmeajL%pj@=4`5r@4YY;(&K8KqkoBT60g~;LCM%}4+!`10WD%Y$G zI{nL9Y3N(djBqdwPGg`!LbJwne_+qy)nfyDjOycc#4;B$eh0Uf(ny4bO0foH0Ex2` zo}SF7J@C}!Yh7<_rSsuQe5ED5gIDed?8!E2hl-8v=C5-;xS1ckj1R;?WhVisNkNO} z>lE+(N=@bEaQKsrH&-PMf7XZ|!tkf&P=0w|}k3B`C z$uYf3&kW?-59_xzZpsi;o`nNBmF|c=UZ0Gso_qF>t29xnz?E!b?cgdp7{eG922n%B zx2Ml`25m$j@#RZ}Gn9m6TC((3&r0+^C2VBA=Rou|BwSLd)>kip^h ze;nP`YJHMMb=PEn$VZO;ZNfvFN1D6cK;LGtZ<)j<_TN3;QF-D7Ienu4k!z))PxS85 zooad=k}RV?b^27P^xRqTKAkCgPR6n0bf1ouN6Kc4fX++pfR9d+prpe`sG!lx))oAR zn|ip;x{J|o@|@m_1US7{7%lme+k44rc3ikNW0UEq8j9K<&`3?OebU$l>vqoX4woA` z(^e4oup;(8CZ51nZwE~rL+;`?nlaJsl!H=YQ(LuX?pI`XQ0jClK4rjK>CTYi^y%p) z*yGS7I@vVa?c@p4i4E3QDd^;pxC!j-d1#gk{4fpt%Ri#!j>9T0ftzT1lc9A9d{a9D50yp~ zj9CdVUc#34enc4c=mfB8P3Y;r9~kG~^HVUYVTP*3)&%}XjSHhg;BA}@CV>Nc4m%(> zze2nE6Ttqe9k3TjYYNz72%9EoC7V3FV_A#)QYvZLe-O`tx(sSdbW8Bh*oYMSwX{#^a!ZePN*|7wUgnnmFkC}l8!sK;mVV%r zPKuZAJ;LeLYNynUm%ibaKH`*~6fb?yEe$!PS@F`V-O}rv(yxwkv2li5TI!TG#Y;2X z(vzjsT6CJ=H7Xb2_0jmd8+$tt>>H+`pBpc|&n?~Ilvc(|uXjt=I;ErIrNiCQ$DGoE z@zQQ?X`NGgc)awZUQVxm=|cZ^w{(n@T0OTx-cI{>+w`*J{IZ|D{_g$v;7QPx z%jJj!&Zm#-hd2=(ao5k^yY*3g&3A}gBAI3$eS+|kya2CJb*+cb!eA37 z)bZD-8-*dLv3!#m?R(9nQ}L^3kN>U-7<&D&6QpUVLb#LK^p>D02@eL59~)vgt39BP zIDn?ez&&Xq$F;%L?ab0jKLJ%{sXLp~W@*!Z(IgL|)BtjUOElv}hw0q75<%DFki!MQ z#3UO9AU_oVZ&m<~k|qVfi#34Pu(k7WLy{f{z{}%-fox@yrnolg1_fZk{OLQ@8bHjS z4&rb|0Bp2c{(~lSWqczPQ~++x(NYDl&_h`Q;aa0pZgVN9hXox2c&#*<1mLY~jR4Ns z&AB`y8c+XHb*SK?oBp*AT^t~GKMcT|9_2J$d^&hdHHPyaPXD`hm_IMZ-zn<>_^4ApEo$EE_ad_(nJGzmTuC}Z9$CfT0)t#+Myik(PdmaPmE-EmU`dVOZe8dOmc-T9 zkXCR^T4s~&AZe?nuu0HqxScPIC?n5zc46HfM#H`M2!kNiS2Y4HAObt@`c@DqxT{bb zbYhJ6AilE~2t#4lNrj4NM!2`rOJ_*O{$ohTQSy5W$WZZ7vT96gLHa#FEfD0Se`PuS zO|hNyuanp))4viGg5ssu>7FuBJsp9*Hi7C+l1g|n-iY&35AXAgOO?#?^*|&~r4=Ty z)xsNvt$MIl<`=eQt9q+_3`S6=S?KRzEYkxPdQ}F2I$k9)7{x-EtU++Eh_8{t#86fH z@XMiylaL|6Mw&(SdT8(+*F#%X(oF`%$=YD03o?ltL(&qJl6=buohY5amN${hz{le; zp)egwV|UT7WwZ)uiEwKXPYX{+or_o}b>wB4_E$1ACRbu|X300e{(F*F!gXh0d@|;p zJspzAJz95y-=0sBODtGCT3N5Ak2)f{WF;tgGgsOa-c(Am)f&dus6$Mw+!n#WWEI85 z%0mg(a@#$mu!Lq=mV>MQbk_YLMp0pMsAIhJ2P~+w4)`(fR!QzFllUAubNlaIK^Y+o zE`svc79}XB$)jfL0o>akOT6adxB$%S;b6lNQ%a~7fNc?_QS&uQ+6Vxv5dpZA9FF`) zrynWy$+yr-H#C8DFxM4rT(`oHYp3=eRw zqmCALZx5$y8h8DHa30t+o+M3zNGYPDI2U2EHDwyJ4hZ0t3P7-R`{CLo1z^H(ZPoP} zKn&M|N06|X2bzh&dtl+9022N?V85!0$}1mP07CN+-TchDorKyKa1=EMu|lb$jq+L|V1$xf=Vyf*KCyinWVe7@~0!53iV#1g(=U7?3uVqCXIRPU%-!Zm({4OG};7rg-VE-O`ht(!a$^ z&vr|@I;D%^rH8tuUpu4lY4Or+hdO=Uekp}>PU?{{c18ggm#^|oc>{NNSNo?q)~Rd`@8+`!h5nYL$*Y5R)7INIVTMmKLku;|ra%Vz`m*#>Vu zp5t>(aW&13Zjvf=#c?oPgpHhd)R61Q!*(Y*%-#DP^RQAme{#m3d4r9HaizJ0QyB}RmX4@i74Q1?r zb>gSuh5}`1ri!y^+f~1ASdrK-n9^)KkFVQS1I6)k+<{^Z<(E}}r=$vE!aiK+GBbZr zgY}P3z#gwl7cvH2poqimkffiA1Zc#194CIMlik3%l2nEWk_g$Hb(Fca!PPst!$sYx zLOnN$=0b^3rIOjK5i+3(?yo1dSU1ubxU$b!ULYG6=1?p;s=T=HZMDT%_->2a=ZyqW$DOa4uhOH)mT4^a z<&B(|X{_+&oj)mTV#mlCxxu0t*N|#s*h^M{#EV=UO2`fa)5Yu{xb-4=2?MAZnRbcb z6F`Tt7Xr4Q!u)8Hb)TpI4VGxiTN z{G%_tLGQKo!iq6A7pTHG*jpr3zR?)A$B>fx6{`}ximk5ajH+ZNVfn=CQV%AbWMGc9kKEx0 zgLAJuKn^DiaAUCOhYCX42ap1$j`>2;Ih(9>v_Vd9=7i$itUa1h_M8K`*ckCL+)?_- zSqFf8jf_xmdeu2L%uo}1A&uw^OO>`Pgg0N%GBD1KOS(6F3~?6HnuImv;= zJJ==N;UwL;aab;qZXN)Zf&;-)EPZZn2TQ&K3)H*Ga|r!il%5JO#D$c;g@?j*8?;%9 zJ>$!a1s919QZws7fNN8XkU=F!--KFceXKWq&ls)4NjSaqAk9VmXqg~&7hB62DK8md@V6D|+AQUH9W!ULlbP)M*Guz2v zu;|b$KytMjjb=K)Ps2HMffmb8#Jhv5vD(r(wdH*H<(EQJZJH?Gy)Q4Fn_yK}j7uvq zmUs3BTCwF6{pU&O*J#{k`+H+CJr1up9|xK2$erY+W64!DfOGJ98qP7NyHw96)knvv zeid8vi@*{A9dqyyd8v;QSY_wqV69jAr)`<~?0+WJK>Xk`L)$rQNIUarBM zemyb(U_r5@F*@|MVA0IW3FSEWEU)3SYUqPS9eO1|+P+a5X}t%zNJC8>D{gBX`V?D& z&z|^;$oG6 zU?@xAab^3Df;$CvClOow{9RoO!YZlv>sOh@M!$zk`?12%@m{y_*5k1ZA>V7B##)5EQn zGjn%uLL#*N{r>rUviIJ(b7#(+*PJpH+@DQ1V+2KaGcoVHn{l|5}1W^ta_ zN}C0StE(6#98UL@cjF~q$sXl>aTQvzbDXBafHUG$=+{^NNXsYO6>)I{OJHKV>6F8f z?P6RL;vT~b=dVYIOW;v;`GdN&8Iri?X{d&Gu~MS@elvDW7Po3u{()&+3RwM7sZjh8 zYypEuOwse|+$_TZ4u@-WwC~{Sk2w=qlkxAci{xHhR3pxp`+HRsp?%H;yXgfQqkTJe z{`hO?39W)d1S(%`oBFz(B0;~-dXAUSGS0Iis$31PW#!I*ONAZpmIZtbIz$m{8BKlj zXu=_zJrCX>_cBX6Y^B^URhw|xBc9wvI1tl|PNGhn&i~WZ2f!2bzys{SXgv^~ zd6x)0pUJ{HcQ-GA=V#J>1<&OgN7-<|PLTVhdLNMyr}P2ODF?#y>=MN)--e$LejxBn z*6`#>3l9lDxy)*hxcjT#@pJoC2jFLv2cEw0bE$&oL0O5{ptcQ>=={{5dFXYyhh7sj zy|NWN1Nwkx;DPYmE5~JgJO8YoF8Jxf8gptzsYJo^<}eTc$i3ztxnHVw{Io~R`?7cZ z%)asf{G@x}=?g#SDtN|gcrxSk((+}cu3G}Q(0_ixdiBf!HbM}a$%ku_Q}I2;7antb zaIS7aE;w$u+$*U}lY8xwv(I@*N=-;*@aNuEU}-^;Goj(&TsP}t!Rie|6jr4}P*`0) zG=bHna<8x&miwhTnta4afkR0p6&p=TO63a`UU)EoPjXg96Y%tf)g2cJJZpd-Qdzk= zMGEpf@ML-5@o9L(QDcv|{qqEsz3`m#GcP=XpOZcC0Pm5eZVtdrWYQ;&-?WWc>2Q65Cu;yU9!NB zRHE@S#DgEX*Z7h9rOFRuk7)U{cl^}N^1>tdxx@ocU-DHwRq*qcxGddWwv~K&;K}m9 z5f@xmkcSyy*({CqY=;PGpCq!NuEp9ep3ukj=IOVyNuJ>vdPddJVK zaxXlBpYM6#=?g#CDtPXYSiA;RiIy)9JXs!id>Wo+g`XjPz_axRFFb;u-!DEmel~{$ zKOdt3=D=Y0nhku{e|FXS4{$*zVI_r!Lu(-!LvL8Po4*!EDtxjZW;5oBfeAj08aKTOhD2XPEJ;kOwf>&YDiWLP&mQl(%>iLUU?jvm+)!=a&5{~Q7(2&4KHR7T^AbGUgpcUE_ z@z@Ivj*}x5B2;#rn& zyGf>V4wLF+DuNSzh!A&9VA6+-iRD57B$YS@lR}=PQs?WnNLnGzW0kASi81LYPg1$_ z3X|sUOO#dVtYOktPMJ&bdPd<-O!a$G>xr?unR*9mu zY7pd*n|BVJ%zKL_&RsVz9RyB@saxTzbyMlaaL#4w*`8E7Tbz+hwYkBHh9Q%w zgOCaatEo~9Mt7&Pdo^-C@^K<3U0}`*rtZd8EbjO8209y=I?aa@sD#aN9-e}G)7^1a8#DDGBx>v(MjRX zv@3l(B2QRUUOaQJLiv1N_MWO`LxS9Ird4H({jycUCtx9Uv)XBpo(>= zYw#ZPfcitHA1d!?Ow{M82@|84m?xccImHG`Cz>k)#>%8dDEIsN5pBbM!;8P|rej7o z<6LnDf6?2W883YHk!H*G6f-&$A#cHCw4kkHt225x;dGAMf<4Buyp(Qk|9NvTpMGM; z-SMEx1Uzj2G_*gHv7d<2Zq-XmiloJk3=uI>L3$C2g7CVWSWn(JWXIklM#=tS+?|QWLwV{^5Csre0gdnMkElDCMb(e`)3C~j(s(cW53;uAIH9i$FbkzJ&t|Qmm(!!zUXa*QOmv2 z(2@fpkiWe>i@oicb3l9kZ;xv){6boCYLAx8)Ge8TYmf6C=9WMnJiIx&SqzAdQA)~0 zrSQb|iFsP=xZqIdCv?2IHwCor9_nx1o?`(h9QT}^_c^EE;_&2xjHEdaVt;uP%*HAsYjb(9go#?*N9VfVKqRIJ zj^fOVn*_Z@p5IXLdvqi?Hpn8eUt5JbO1-c=lK<}aX^)+a2-h-vk%YOE!{$SU6N`50 zs%7b-$3$=XoO=%ErnRo#L~Lmp0zLor4Di=#MxLVSl2kF;Twg7Bc!=aLmeL0!jV28L zI_@*=r}%(R@8PF5Ue?Pie((eN05)ZHSf|BqAY0f^@fqLz2;WFtk8{O+xa%LsLyz|V zn&$rj^fQHROe+~^FcI{~Go8`&0@g)I24h^5MpiK%YcuU}$D1vk7nm*1d8VD>GwlLC zr{WlkQlml64nW{{gB-A76_zj-(x}a0fnbzk~@950O%6lWo9?=s)K_hXxw73YproiAUmR9}Mq3bVm@{Bn!>ay7IIzeJbppO%d; zYov0QQ4m8^`O@L2Rd)&$6`ynGbT#J>y(sIAXyjXyAX<|U^89KZnE^p!<1$Tab4P<| z-;(Kk@f4`E6Q!McU}+P3Ee##fB*c?gQksF%z(1`hQ0={I-;(D1mSuiuTG&{)Wjki_ z5mxAITo3yTK;^}rp}CGU$k*VnUh_6V0+TagD*f|fPct$}IyR%kTtBWf3GXBM=~6j% z3LjU@n#*Jaa7(ds5^Me#y#4hfI#vc{rh!a)iV!GtW_b(Gi}T0&LX)OuB!9)ZMAH$V zXC7&7##&_LaC4rseicgZa7sTB1!sLKmy6WXt?H>lUGDo8xYxvYt_&ym*DlIxSHT4r zaSEgQqveFodL*lfS6g4TQO{o3SlRdsyn=uqi+TDs=JLKN4+IL#mUmJLtuYye>xwc` z5cpY@fj;wI8Duc3pcQq-Hshzz+FNA37({bI(UBqlG{Ao@>g7iDWd-$BSr<;V(|4j0mR67faGqN&}nv!MUs6uKYgsjcTsw@nDjgv-R zgwL@E#z;{BC_xfp^_Re(G`{9tqxK%qwxFiVsJRUv0UKdl#*cmhySEMrbgd2=kG&d7 z-WH5rTO6`p4zzrj8uU*CZhnQPPK=IO3fz1$+Z;dorSaTx;Y^Bl^k!hCuz*{?F4+$^ zSD>qvC$yupf=Mu7O7zMBY2%EQRRdCpCd7>8$zp-n9ROthw- zlyu>`qLWgRr&?E@lvV_hsVcHw1$Gds9y^)<+o>Nsq=bSvM#nTGzB?*+$-f+f8}d6; zk+_p6bD-oZ;K{TuHnIQt7|Ml-K;JxLCHSK!ozd8=3mGR_&f1H35^`C<+7z&!=TLG5 z%h7xpQ!84kuwJ*~uMnvfiZ7<6g`xwCqBF9pLjHdlk$(WGV1x$(E$-G~S-G zr!c%9`#Js?)NCw@K9Chgv66e4rL;l!O$!()p;KyKVFTv^@j&`C(D?>4gkZmr|C4!RLiPzBI(0G+u*Csxp)!wtev$aJ<& zJqQ7gIr~rvAh;(c&4Benj~FfzGQo(%j0xMhgMAd$vs{o#M;hRK=4q^zZ`0w!;pau7`Z zV>B@tIs{hce!(SibOr-p92Lgjji1ksqw|431Dy{8ox3MmK!lQTCGSRR@KEay;7%*a6Phs>x~PX8PW}bzVcIGt9vV6b>MzPYRMaQ5ND!P{DyVNcK$Uzqj{2O( ziFzI)Rs?+$CK_=hnX&kXsYyvwtl{fp0W<>G#{pD#REZOYEU$w;uxiT@6lTbdO4=oFJsFk=glBXp-;9He;;rL zBAv+#(1~D|k?76Yc!kk-7Xl!Ej-D+9Z$u!n2P<@zvboWKFX(?UU`*XZ!eT|toP5aM z$e{mNqc(`L*QrC_G2GBrM)g`6A8Yzb4+0$&xHPlngTo|1(OKF|Gp@Tj@3k?4fsQch zKR#6Z+Ja%&0KL%oZ430OQF}3H7W*N7pkq2d=8w}C2%r~Et=$ADaR(jrF6KgT*MH7Y zJvj7ix=y1P!cL5nR45Ah&ETN0xY4vZg$AQk?9pd#Mt-a__jOfFlykz#WMxzB;Y0sD zO6wl>3HoRc1uwBR$cYxD88sYD;11_}a>Rr?Z1}@73;SwDr1S8KiIL8(ig5(EEMyNq z{6B&^`2l~v2+5`p1Bvt~i z{(f`f;QePXIrfHnooGNL=vSvT<@+BD@fYSXjh9ho~oaLs*dW58Qu>iML0@-&V+5=Z)?_go`l#k}C*Lp)^+3TeyUwVr#ZS;noMU zChlrUslaM$9WRBW3Tv0)4b)5OA8u5>6=y$oVOAZAJ@}$Jcv<{VqHyLRpHVvjzcp%* z*2JoLNZ`v*YZ$ia7#gd%Jh678q%x8}A_rtfJ)8)(%rdO*!vBa>)6|v=<#fPe9IQ9G zF*)!e@Md&@^k`~fE}gU-2Db4HJ8Wk;=1AzVowz*3sF8j6Ayudu6YsK0bje~cM7*IE z+N{G%qL-nhE1*_g-vg8^#sx5EId&-HT?RNglW=7_$(Z6nCz=a~3e~fel^8^%eHhOHJEcwd1|}c+rXA>;P`A^G!M`dU zJmqZQTn!4~2PQt;$t&tEF#Oeh?#y_l4H!!MIu=Rii#k3+ztP&Qa zDj`k`20>t~1+rIg2Ntz1KCr$S{cBgp6lTUN6N5QsME6J5Vp)Vat!p#wl?)<^X_M@+ zE`eNHcQ4+*+qi89GKzU3w29nYoV0MNEKDWWEI2G+<#8>qQ~?{-jL!9N3KbmLB7;L7 zqAuIn0XEe9F_nhFYjn5Z4fx^0Tmcv~fNEr4-Nxo%d;aFCQwewJ!QhS2+nm7oO3c0; zD#k7F(Bgk1zg-FJf@xZvrr(1Pv4oq0mPQIqvtYZv9+yb|w3Dc^h5J`YdSjRudxcyq z%o=?L*}ihhu%y`WG8w%}y^zJj{K6@a^4mH#Lgjqfa0CbmP&e*X^F?W~Cd^keUs9}* zGuMa6V275?Sz8C?`WOsp*RiFqaK?f}n2WLT56Xb-W+nE-C?{)XU^k2bvWZyNI_!Bd zf2bK9`#HDD!(?OCnK(0N?%N$eNPQE4X3{VoRs%L!wu}i;lo-L3r<3uzDE%RF=~2I& zgL-ysmoNO0jF=lEdkd?+8`*pL!ehm! zlef8IP-Oe3$d2PEGuA}5zt!i@PT=zY^J-TXk$?ufJPrb7b!| z#?sXttKdwI;s3?Ro@=Z8kv;CWQfJ36B71VHj*slo-yW{U?z6!0kv;glMGn@%*YDu} z1dBqtswWmwZ{T$Po(;T>-sw<2~SCIzoiP&dg zY60y0=~)+doQLa`Sr>D#P##2wu>x6xy1xxV_b%tB*81_*wvg3nZ2)M~gVwH)6$@HB zxXnG^vm4`gfk*N53|n+tj~Ht_L>CrTNgW)7@ffxLUE%ysjOd+RQ@hrNF>#JR&EI`b}#r zhIi=4#1qBt4%6+!;rQ0aDWSYfyv{alg+1D5xz3Rw4kf&j^B3xLW0&}mRU|Q{7{aTh z4RfvmMW$nXIwu{%2t`mH`okaw z=L?{^iRsBZX%lVdEn1P*^%6d(M8RlwC5qyw%D5b5JfUmFVktn&4}*4!A-vSJ1&slv zp!MS-1bVDs9!)7FN~iCE(0sQ zw4j6xX41$k$Ix|v8CipoYBSEcOM@*~F*+Ds5(Wgp=p~iG=+)&R`-kxHZkksVvM0gE zJEd~6J$6eZfBJA5KgUnCQnm!`0xY9%t6GT}xJ-Nr;8|^CZP^;^(t@I$5=;SO#dF8Y zlp|CR(IJZ!!|eIyBxR1vLB|{`yQAhA7&SNM^)hNE(ycqfs3(&D&+ib5(=lp>x{*f7 zPAzB|jY`apZ3u9AyhOW@G4qHg`_^)2-MttuZ*rbn0CYYL22B_t34Gc`S&r&2pNB6M z<4e&Q=r4r>(O)V~Y*3;X9b&BfC8zi5r)OOX+EXJ@Dk$+lb4mc44FsbT5P~xy(^zsG zO5_$cm}Ck>i;{3mRCC1})ZQQ*Mpc-bs$pPU_$f+Dl2Nk{zj4dlSn`oP-Yx({WSSn{ zk_?m?ieeI_pJ8v54Ao(|Oamb=(}Y|*FFS;zr?Fv}CS>$DqHy435K{JeaUT9PaKg9+ zQ0JPg1E~XrLsCY|hVC>}U|!JW5<<JuBYzfm~@6ZYtPjlt&eW z9O7E2VE+oY0ySovykn#ez9?|60ZJ*p&{nF_KAFe`G`1Ad4BeFh-IW=PUJtZ#x(}yy zuY;8p%K0*|`}GjE3Tb&iCD8Kq1)-7ehmt=Jn$zL zq392xBHyKooCOlz46%AB41fbTt3BxNn0F~}OzSd`aQOa6{^(;!!knpA)_zlRyjJxG zbNz%&e37I}bnA$10$~HzH>fLMtqWS)os*VPW$p}GpLVRKnMXZ9ER_VU2eQI^uv1$y zT@FA`#i<+U&Y2pm&h)bn&H=X_O$g062e|r*u8$IGP_z&N8U)c;KW73;gLWFVaJdY(>RMOYTY?;`Ny&m>!mf=x5vXrJ#?kFTE%;@htPf3 zyd=H2i?G6HA!JFhV!Y{*lrNdx#Mn>qC~BkjHGI$*v{JG_Aq`6lY`j0CxmadOi{|)+dR6lUek#5p+0{D9>{qQ;1 z-RN*a;J%J+q#dETgjRrPtm?JYJ!_oDHi{L{zDX|ktEXSd1^n>%O2rSjUHQ1{g-w4= z^3G9t|2Yp@9yJ8{hMbW7s6&lkxaam`S@u1pz%23 zqULU@UsxU?4D%cI@xi~tsN=zlh{lit7|9aZ#y8exa9axW=TWA;5QqA$I121-)S7rV zd417QX#gu}B2K{$Mlq8{Snk7{iB@_I&i6&c!pM*$RwHq$of1|tAcsx1Q#N5@HYKGn z+=+OFWM~nJp!5aouaS&iVhX6rQ3k1n6wC{^vNE6m2b$v4;ZHp#|D@=cW*V2pu30_F z8rv+`Qr164KSj`f7=wsElJQm0mf2K++fgV7B+!)&+U3dh8S$}*Y+DXqF5`QG7%ggn zLe`6!fzQYS(WnwqrpEzRx;UhS&*Bc%N3xn&m7Z3lUF+~Uns#Ay`ld9hc9=P7&Q#^` z^CeXvUPNmOR*TkbNZ}}96&|QQ+U2TPg&Ksl$(Tlnl623PaBeBq369i)l>V28RJ0>o5?U-y*Esl~iIdjNCE>$up7b z@xa~j_FyY5=RuUn?f2zKXEQn(BZ%4MnBiD(7I65_PO}TE1}0b5^pE6E5|F?X{bPPw zjq3X!>F-aLq#}$!pr87w88XLtPrEq9*d>1owxhQ<0R%F8sTsA%N91(`iHx}PA!@d6 zQR)?^ss0U|Al`Y|CzX49@z@WEYkb@wu5u-=5hOvVEPrdq_R?y9t2gd&h!Q>Ir==H+;B9op=JT2$Y<2vh+leLn(#4MS(e55%@U*Gvoxfz-};wiF`@9y z;sauXH!wE1#N_d^hzOE3z}0#WHi(733i* zwx9q2fOMFTvxoiu9L^}Z{xsPDcpUU#dKQgrE}5b}Nb72YT+lyMM6m&uAv@x6EkF&f z#}ye%Ad&$73H2r2t#4th*=Ty*tyEN8wS`EQj8JqM{*P7Bp)UY_rTM@c z9#FC}}mNddEY1<`VI`RbwZn6t*5h%PC@90UUqJzUq#o88z_oW(ji_m+}f8B^z zNa;6kE`F2e9$%!5WsF1+5_UPZs-#C_vNh)Qn1r(0?i5ve76sOM3wym3fwUORDC)RP zr}AgvqAuw<0V4$C6o#E&5_=PB549r5YL)QISO!$J;u{I5`oa4$*N2|}f}Ulw-xuY5 z@H%cm9iy8$7c-o7pn@g=ilVYKtBh%gjfwlQqvhzlpUo;~x__ThSA)!~y_5++7heP+ zimQ+w=zVJWKKK*j^;juc&L${OCh!}IaV5*bv$O!uVf`$X;<;X)yKjC?NvoIdpHMxS zo%-PKv~G`sCkm89U}e@_2@lGOlj5fwW3HLXLrQU*4uM;NQe*1e0gW5NoI#i|6GB+| zr{|j$sNF#W1ykmn8HkQE1Cd*blNKC@ZRq&troeXn8Y00{%t_{?*w2L|5{Qp);cnTB zRNVD9YBr$*gkJ2yW9Ll=FcL>()Ua%_QmJ@5WPXjUqBxn!tzg8UdEE<`=g%a|Vd>4l zjo6iX&i5?%xp8PopNwR^MLvaO;(+gUDBg?}0u-`Em=%&LQZaWMKzJ&3+;VvVi-85h z?~0yB{H}b?P|jEN6$%DZsgh#1K$>7y-3Ut#ml8Z{iKk^_Ch zX%q#~-^yLDJ{f~{J*&|Qb4_Cy>N^cy`yx^4n1*mw`nMJk^!WSLm#9#GS>k?~N!4&b z)q>G2G$-QvWqj1E;OC`)xfqbhWQdSobjl(yE)YA2)Wcg)i)Z?|!7@X$#P5%R1>Q-Q zB*oCr4oGzGgWBMgaJ3o69I-4E3auX-PN}fEtEoqKAl#S(df&fQ|1h z0%&vJCB{CL7)EKJnh8j-qi#m;GXbj6v3h=PSAu6HOqTt;GjuVnrPi1sMK`ET{%T*S zC~72px#Sf&*m0@agV8F+aUPGQ(40Ebv|zfmz$z#{9kB@SF%;0k^k}QoT+1>$J9eOq z26x-Z%t-z``EEE93#4FB$>#sCB`o28Sb|LtpMb|K&KxPKwc}OTO%L6tbsrg$-KWo4 zcYNGh*A^1^w~35yO)bWMNhH6YREm{A6HUMrYm@cwQ*qBd^_^i-{;M7DqWqk%xZDkT zuxYCsDsd}vQ-dePZsd1|rW>8or^TMWOfD$6{6P)4oqA`JYmjezK{Aa|c~4iDlhtMF zGxDzTdRUPx?3=kNf&C*`wKJw1DXAsA=%`h$>OB$VI8sl4~DWq#Q zUm4?9Kh3sLO_3Ln0IAbc43S$iU=pT@4tF+nfI-RDO8J%ewG({KD`IJG|o0wB;kP$tkBP z^RtPmP|wTc>P}X3s`p-fz6X7A)*B!hL|WzI+lH*Ld_n%fLz8~+@qzOqWU35j(bk4pA{6v%=9SCX(reXEqTvMU!Qoj`W!lp5-rd9n3n*m{LI31zW63jOebBhjr>bx;MUM*@)IBLjrp@ow)x+4M{gKVr zihmhT;1Pm6a&!S*A5eIhxpaoTObUskiVh8Qr!aq9J>Q^pd|$kyAZufj2^lLQX~YM_ zhwb_Seeb>6jYtUbpy+X>f>fbSL#pu0nHgkr+fcv(4(W5aWdWq7&}e13b=3U@Wbw=)Be(Tcq(JisXum5;`*gt@r41IN>* ztVC4eYM2iL3hCw>9G%B}H@zRb0vQ|O>g$vvZ>YYX!hjjU#W=FLgSd?>%t%(JH;e4R zA!!W3d{)Qd7|#3>#c#D^U9y4BYja_TGgdRU7l8#qpkr*d;*z` zyL#lN2Y+x#*xlbn{>ZKY^J7I2kOv-3bLwz(A=9}vN>wHs4bhy2{X`0L=bj%;Sp@b4 zpU>1jE-4|Lmpo@kv>>JXD|p`XP-9XevolD6JL77Adkyq#cW^!aIlCyUO~n_irGKdU zBeDVG@s#${SLk61GXJz57EwkrbrSy!*98JSwF=Kl7W6!8^zt<0=^aVNqH(Chc={dO z<%u^+!YE)qbMl~s#qg$BZtT<_FI9aFxi-xic(iN0p|@&877fTUer2cb)#jec{Q9tX zW^jYf8AeXTDo#vZpMtPO`6}yE?$yOE40xExJ9yXJPLd9OBv&#y(|O@9A9i6LsrJ+~ z1!XC)D&3cAEgONZq?zSnr~pO7As0e7v(annHOkj5{x}~yIkFsBdNEm%!^d!**Y`H$jm!+=1yE2v46scXrktU>a{D7 zh(MM+#(>~hY9n$rz$%KSKN++y!SwcOBN9Rad#Yu~>3VtS)n|)Bc4@z8#gi#qUt9Mq z5(0K5R`aVSVgf93p;Zw{F(crFe*7)%$Kh5O8FBOmqE^&MnKL|hy!&g#LTcF=^am!VNml5wOy|j=bbN@^Rj?zZxPiCo@jdgS z!*E%-CviI>MaaM!cxMx=dk^odGW}}RhOzk1cvBc1^LU|u=fZT&JF(}) zF1iT;CHNkTYZoKa_-Oj7pnWOAs6IC$bC5v%lX9e_qNob2K{Qss!f4ehkn(j!N<{PE zXlq6H30C@Dku%$3! zXEcT;WgRLZ>Oo5EHx%a=l9KLPVybVJfdcT5G8i2P)E^E$HX^5B)PxNaoE`W?=G0%9rE8$b25F930L?-5ts$3Wpjb+0P)f0H0i0lh@jYUmOop9p=G z9(2D)j5ziIQZodF(TXQPoXtwqpqqpHj8A(*CtnYftX%Oru!U@;KFz)umWn0_rkOUCvXNF>;~&+@V?9P7N<{okYKX zQcC^#bQpcd!2^{r`V#i3U6i#-*?ZT}5~==({U+_bW?pT5MT5m`hz^m1cQNDs6OOAg zInpAgRLJh?Y#fVZM$e)@vc&L>OQZ2sikl4Hlq(Ym?{W%{#!9?^CEkDD zT>K`_JJz(zlhMT?JPj6yKvTVzz^#d_+fR#q9=4r1+w@<^kQqn}SE9CT?+=5qe=c&- za_pZcH}tdH3o%o9&Q83+);oBU%{Pbw?zjhYzEfsluK075IiTVfk#(K8={K)BUbz3z z3UB`ug&Vcp;3Hmv$Ivuj4>#f+uTA>8f_c$_z@@4T8)74mIVhfdF!{i)7SIHxsSn^G zXs08@;m53SPJ!X8$qFN}&=``;dsc#b9=$uJziH3SWMUH%jUoMc%Sw$Q6Chp9v3qDm zK+3X}6=bKb#W@3}0z+->RdxHaFsnF@p zJr4@={Zd_`>hkV1u;Ri4hD+Y@M~&xvq@SYO151{I0%XY&Ucr)bg)ElwnPY6QBIlR; z3-m)Vi6fl|UA*rM^cemHaAx+K!ElfCEN9Oex@qHuWY8o>Nto7;;$&58DtMcvT2q+_ zw{_>oK(|r*Yw0<~ErJ_zFZADscm0Py|-v z0{SRO>PkvMF)1X($3v-R9}eaD4PA4*=IN`+DlxV&Ip-vqP)sp%(5=QYOZgyP_~`Mb z|58ZGP=as0g6-w{2kn%jBKad#vlc@5SvQLT_sBi#!#z$ww}&El?IPhMRe3+=W&OsG zad>?R1a*Vaa5(#NtY*QE3n?Z}g2s911~5)2F9o6i0)pwHe8$Pln7f7(BV|w_Le=JN z1~7v{c0meQ8&_@{GJOz&)Lt?o(~%z$bp0m*2tBn!6ymOdbNM~y=GXaqak@SdoFLu81aD;MFTvleseI%zq-Qc0*wX4F?nQaW-4 zP**b1-ijn+r81hZD}|hB$fLz--lov8(jltSt38#X7GO@wNrS=uI?9-HqAdBt4gjfu z(>f}8RH5Hz)ZU9yuyc+zF!oE_A@6qPJp#-60z7_iV-Q=gZR8?F?8Rkm>G&YL7ghU& zK*vObgWz+S3U=6uk4OnL=WyK=BA1Vz1{1kD$!#!^3qX-8-e84X)lt;EFz1M%)e^E= zu|trk88p4(kX3digZoLbH;H!6p33B01t;QK`v^;eg!CVA>qm(SGYLv^_@1O@don97O1 zl6NfAC*%G#@}lQ@R0ui^B7f`blV}w9;H{x#=ECha`>1I8uMp&TFIyLN7n|NH)x|66 zyF9paS>AAz$Bx4P&)G*t)BkLxFS3UJIZ@oG?!|T2r)8wNoJYS)=~D_h^{Mzsp-<%s zRYvHRtE`CiNJ@mIK`t}F`qrS*3AQ$p*k^V${(L| zRXig+M3gB0Y3s!(ly|_j@-FsxI(!G7I7v;jJn~4XSNLS!LAeQ0!XY$KN8g z$1BwsajNUG%UD4<5e*a5oqEzUCn(5dHSE9QL_^M8G^DWbfQG!;&)X1<_cnqF$hPY% zRRN!q$OQJ_)W=n374js{(-KBNQ| zGnIvDyH2U;S!N??PMyg=8scmhD0EQh~eZ7Fyh+F;%Br9+OK=_&??p3%N zi>m=gbogJo*1?dIHxK~R8tw`UED=%@rp0kxTi~b5Oqx^6_OgxqY&!6>@%^nxkTp&PIz;0E86XmA4pY$rgqOW%gI z5U`0uRxl|eWL=q*iSxXH_JuHKa^A~De=#6rO;7T5{3eK_;Z4jJcPx!#6O_!BnzVkX zUQ4yH2B)CXKlB?wy*}j`1-y!&22zMR7b$b+SwsKQrDz%}K_4Yw&i;9H>@&4pvqy1Y zOH|UQNgU3-go9%Lt6Zoc%acxGxAuAL7+kRUF_{aGO z^$}n^Y|iO~Z%!D}ml=6K4Zx%sH9sd1eSCtsoLX+-(fj*hg)YOdJmu zd0Pf21Rls%=DlhlFsu50GEg`EnR_dE2i@IF7$V>u{G^V}GN3(yy*r-dC<8rrO@BSW z!19Sm{=+*ceW&o7o&08}Q^m1U^ryg)_@l*GU|A7vg>I*IoTv(vfHAU<&slzAtgEBV zxxENb&jecH#sqEz{&isn@h21N1iW@pR;Mxs#wcT;o`iuh5at!efLtM*jeJHEsGFpV zC1s5#m4}39cl(?P8`Spr&}%_}DxE&WrM3yy1KFZfP!OK0m;ttcv`YF848StxX(nO1 z$s#hyJy6HmZYZY$L>Y(+xwkT229Ub{230R8BuW*qP|9k*mZ1guRyBl^juhDq9oQuR zK&XSrU;%(rPE#8crC~1dTyz?BClJSY@#bGiG!6%W2i5k8xTm2I>FoCuYC*J1um$^H zzXdWHwdb>5ph=+&!$PTHs*f#!L|h8|$lT?nf+G_tc}ywBO+h68x2lj=sVk5QC3I;n z$y~w+v2*M1won}hEx*IH{%*A{qb^JsFrkYmlN0zM!TvGA%7pNu22d1YrLF{OzAl0*y%LV$y)4T@7#Af zpd7vdOF=5I!S9-?H%+X*rvG9&iqfXV3YHHY9p<%qEh|}rou{*KMZGdMr}=owd2Wvk zgk`hsz>mZ_UtEfH9A%OGnm2*pIj3PMU`!<=;T4Cm4ep1V%}r!-VX?~P3z6rU)WnUbHnRf0corACFWZ@{%qQ$ zsC$AqU@muF!wWjgthZu5e4|5E$UsgrU)h*#=kfxaIW9}Z%bbTK`PK{`evKk3on=x) zD>kTRDfe*j1I0-)@Q-dup#zLC_OA!h!<*NQ(bA_7_Mn~fk2_TVdY4>|F91&e*lmo| zO~2^)vL7q`(k#Fn7+=;ZKw%djVXw29*-i;S44Y0lleaka8?t-UqlvA~>Q0C2MlEvq z0vg7s-Gbj5gy>xLI@rXheSm5QVkjjex-dEoc21#sH;eBWiU?g(V5)`AroXWXKp1wA zFYVO2IogMs7`QyJyF)|@Y@*B6pMq-&u;5=QhdWqIB>$Dy1dNZV4Xg-h38pP)jo{pi zAtckYa{x`sjR@F+_L4ns=gK^=R6MFC5S`0gsulb~8)U zv^}Q=fNTUb1&6Y#Inp~y|3QyA@KlMW0%;9dVO%5mv$m3&*w8TDOztV)8^u(Y{G#MId$>7A~4 z#U}E-oqAlz!qi!%QkIo|BCB+WIo%8+ML>HZ{E)D0Q>Ujy3l+Z_F-_K&_)or~Q zWiYp90Q{fr!V)KuCAdM}fJQU&9C-~rYnZ=GtXqM*Nd8x^68F>0^>vZ~X~Zd{wLnWz zKh|TX6hIudosiICXwb%N=q^YB@PU~vr{NFY50GBa@ubvT-VP4g?0cXCDr2HH;nJGJb(UMkTC{ zFz#h=QbGnU>t48P-hvfL??Q#O)b- z*z6-2G(@A7aQdV;vE#(N;JQ(~go+$?{+l!~=^8`ETy#2k5}zk5Rp;h2l{I9t_+rxn z4k&m|VYQL~ADHS#^E^7%S+7R6jd?)xuLaHVAwUoQpRV{Hm|(CRkX_6M11=(3lnrZI z|Km@%QzBMR{V>tG)X}dKXmT!Fhk}4Ct)ze%{c$F9sAe&TGxiMCm;&a=V?)ZBqmsl? z(R#40?9`VlwPHolY4}d)fB|@Vf!bd00yBBDxfyFow375WN9~O3UBK@B%wz@VucTcZ zL*Wio1EY|AvQHrUoSNhud5JP8ausA?pMrQ}kr_-);(|yS&Ih^?narBaqR3&TGW6GU;#=ZKK?O^D}V}sor!W4x!iJ{KUyO5hkXwSIUjlAtSC3Yy-x=1%Y4wnkzPjROM31iHK!Za^$WElHc-%PC>$kP{g&VyNR}4T+x;=2V^o+xxCw z@HuxL>dU1pzzX9Jssmx-xI|SO<^|1OFa2B>e7H?Jb?Ew?I5fdhw;NUpZKM77fjsY>c%jl}!6XtD$%`Xv# z*uZl~sH4bEY0kYH6O=^LFn)>Ra6hpzx6J+l0*{Za-p>N&ABVmBIB%Y54&2F4h1v>e zJY|_Vm`iFicVo5wUa-p+Ga0i<#5gN?6=&{XY{?}@SshRQot)9J0x{~pSS7a+XI;JU z#HVMY)tnnl@I;UHuO#q&(ZmON!M^~%asEsrQjOeb!g25zkwyUnbVF* zX>&I=Cd4UBBimg@&p`ud&xi{p^?5;41_hjZ5rU}Hy>Ysc&)F6!AGL}gX_7vL-CJ?+ z-;rz_`^`k-aQE%}J`-()Y|RAMf&cOv$$&t-iB?KO0m1B2GkR+owm~joD5&Q95<->- zjw)EwXj+`-u81ovM)uD4<+hoKX;>s@Q}^?ugt#6SUGldbypaldWENx4FL`aN@Q)`8a$0MbFebB-Q4|} z*|HBT_=PJxIiG8d1*PaL!m*vOMKe(8sE)^;LzBBYmSaU72_|wBB|m)W4O8zRpW_D3=3v6lF(43dtjYGA~E z6Pyu*Om8c4`OpO5$i#WQ!Tap`gTg!TVDK(s1&4s&IJ_P_LqjJZ6xf$*aI*=nTF4UD z(hA3E-C$n9{Lvmb{=w#y!0A5A*N7Tp!{6PK?evlF^@`F3Q%znil zwyjNB`HCIbD>>gh2D<>{&P0#>nE;|$h@nRCux{R=8!ap+b8l8yasWgyW*Y8=`+WQ+lcq~HyF2JlPCb$G&K!Dy zAW8+4U{k5}xZjrCj{Nd@hO^;BW#MNsD+jV( z?nuBJfe;Nx8(i^rM=?MIs)!>-4s1L$#5{h2LQFOh12p%DML-Wxjvk_NjnjTA5OA0h z@E+}di?#P0AG;_ZcVmo{+U{+B6TeVgl4uH=?|Q{J00YaY7Q=Grjtjv7XsbqWJ=$K% zq7SX@e;wJADV7Ud?p8{kk-4)q2hC6EO~2Kv`Kf_vf`m>f;Sm*90QuV~;J9Zh&}Iq< zmYbPw4_ovohm=FJoMZ3hxVc6}8eknWP@(3tm#VpAjDn2u2#?bKL(E?1QsA+2L`w4S z$0k*~IkBOVB{)!>6ES{tGY%EvmM+*Hd-S^<*ht(hM3)T_RCT#us}B*P>TW~ASngIp z%;5bdxjvwXqah9gE(#2HS(JS6zDhnz<-^Wf#%+&cznfruLRJS^Sm{}D4GOxVkB79g zT29|{u>_VYELFh+cmo3rt0!rh70>`ePtJu&;Eobh&OlZyyTOg~Oba>yFagwyI8&%~ zI1}=j_|@Gw8+S_r9X5itr4gstHmv3`6k|q5bEC0_Y`{%K*Ru*l6Vx5UhM?sFA{G+W z^=FQp{Vujb_R!J9L^D1J~_t{419)&XXB50}S z$#xNaa13r0Rfds^lXVGPS*V!#NyTQl>L_qmk;;y%*QYYa6PieR;|>43G-C;mSYxqz zTrr&*5_S|3o5`}3&Zc4k-t(9_+E1M{kw;|as-X>vR=Cx`!B38-b5bv zvg@@-V0+n4E~lw0W{y7C72Ct?e$#B(j}ZX)`2i()$?ua(n^0rO|KYqKxA<2q>t5B% z$#x31<|b=lpvSc;KIf*3`{vkK00aqwU5FT}u6ADS)SvyRZ^X=W5%bg=L=484K@4>S zG5p#^2=x?8ja>$f?NO^n&B;IlMW>#1fwpuJGM=RFcuIT@Hs;sSTlN?%qJKh**s~(* zX3mS|?zhaAE+A)*u$zwH!wIB6Bgz#S-LO9WoQ#>&cxV+l_v(ujPMQS-O?-gT#AirT z0YL(vm~vgJwx|LAr7Njk+lg%O6uSmhoS)8};i63|2&Feb1@bHeyaN2R=yf_IIiUwx zhCu7DQ9IG)HeR2IsZ9=Gi>!l?E^HdgTsa~Y%Xq8zg=pqIqNH6%9VD?qg@{ooT`X;! zH@R;t?PWJen*iFP0$9pJ>^ zZLEKnWQyagr?JlNu?!`NS&daJN(=MaD2aN=Vh{V%R8o^>yDiqdw%NBM7n9Mcx@(B^ zZX|eCP`M_XHtLYBM8d_bo|BDt5nAR!$>mZwb;opafN*UEBFkj(2mTeizf9Tv^SM0@ zRKH0w7Srx8pgeR+5!%#(9EmQ5+z4u`*AmlW**D`xS@w)=ce;)TsV>)+y&A(O=q2|3 z%Pja{_H9Nnv7^m<)fyQEC3@5{l19;6W^P=Io-|Ha!Jx6*k;()?Vj!uJ0V?J~S3&mT z_Wn#g$>A`}-IVld($h+KnSFCDkwx zN=@Yh!Z^5t5n5?uxu)Ah^MPI+vRbrktk^2rk^Rqj2PB z;|I1D)u$Y9b~PhJ;fShck2}bNPvNI+tTysdF~^H0$BO`$c;PAITE{|R@pIZ)td+&lK%iNX#4ArO+7Ps08FjA*#~=r+ z*8?ztzFc7&Q1ks{wPD)<950MSd>tZ*Oiu&G6SfPgjIHFu%_ zSw;)bcv?ZtF6hv7!@q60mgZg1&)^Z7!vHII$sP(u>FKPAldtff-fU>1r-DMyp8o#ucdsgaXNk~ zHp;u|@~4^d)c;t>>9rUPdGwQAG0C#f`rs+;AO@W?sN9JL zvMDf^a6BqEDD_AIUdzCpTc$w+xH^YZG;X)T8#S(f=W)eZWs0|P;LAMn_Tqc_EoP&H zy=88ZfnY%BLesx`-YxN}fzY4!m?^~;RoePU{*2alGmFY;OZ1zGI5HufK1P5MTg=Ko zjSo_knD=ILW+_~M|3*Ri9mfFWOS;(_ef77p2U73;XX02Y@#+be#T4EXRs-;!ph%y1 z2ZoEKDWGAAQ?XnL6M;vuvuFOpmg@e^Vw z%&Xh)PF1L>JQ}F^LZPOc{o$zoV)TE=k7!v2suShd4HwW(3GPhn|4(K+BwoDqF@>aZ z@*-7i1%8^bxQ30xYRO1v@?7ZPLgB+Q^5J#y8o`H`2$QwMr+g76tLc<1%qO_=pw`P( zn&Dh@dS5w7KM_uQp-e6(3P7+v+gid3cR^`KOU1Y}%98-ceXd9}2AOPGIG~zy}-awp^576F^X% zTpUA;$wSw{pWI$_UUz&X{ptTBKDPW=xa8|2zXcyUKKfGNAN@hIG_QMnw8l8u(7|eIs+=Jo*5xaiYHvi5bk6TPX3NIm0^7#XIOHI69RUMbMXc@eha!n-l6xE(p+HC zd9?8xbo?wG&i0P}fv)DDwS_)!`)^3&At;--%Mm6I;n9es0xYgIZrPDCC7N!?u`G3X zGu0l7ZKf{54n|l=&LA5slzTMLlB<%5{O zcqnsjG@$AzrbIk zG^_jkFkx9H=?V``a^J(46a29{!5=>n@&o)#J~Zn$YEBLhiVHMiTx1GD+H}@pe&^Ck zu(Msi5$w3MDsw_i?iD*bb(az-FDF{TCQ0m@a7y2Cc-0mQA7XbK5b!#S-~5b_+K zu`x%sQkToO_82&x)hvM-!JZCF{)o2XczG`RqN2yKJIMmmk< z2yAd!m#s@VFUyRq#_FY4-FU9Z+x^Vs&ttV9F3@#Oh`JnJWcMpLJ<{kif!{FU1_#4B zw?0q3j(&!0l}iIIkB%GQOf^kG+)-~@W0XhI*(w+lW*4ss!=h0@1|zL}2t&@pB+!kV z1_bE}=yJh?BM9_&_L}x^{9l2V>G>g0z+T1|*g<^rc9V-^FK6*BAEXc)qD7)(^RUC> zd{pA{n4%JQut9USVq%GFw1Ag_*kWi-jv^^bauoe2DhbpQ;l_(*ba*@GG#eZ~V8^by zw{XKTri1)JI3?=-$u~Ls60}RIT;efF#8Pr= zBPxM+al&NR+po)`)aYIBFyX-os7&YfHJm2`ef0zyivZ)Z2x+cF{|c^FlX@<$I9DyW zdJs2kbtgX{u9osmZ@98vkH^lvMXK#2l*w-qOU<|q;c!ElIb+jZ*<7C8PTz5b@ypA<;>8>SE0Pv55;|;@Gn~* z5r*ZgAzBF>7UaslpO?~k2kN5!E78lrGgV0>iH{6I#4Zof1~{-a((DUGv7Eak&8VTz z9RUb98?@pK97^*Y9#z9*JLhMHtTzIi-wFA*7!hvs9#|K4-bN|pON~&K4n5Mb`=tO!&t!jQqLv_Mt(&xr%VKr zzap~O`jGz%%7oTzy8j94{s=NLfS4oT5Npar7GmW4!d$Gyl?e)!mWdN5_KgnAE-7^U z>^X%Fus0?Ih3uSiFQw$N9Fd8j9vtwK5_SuOD2?oo{bF`}zymU7us3jp#ibHi)+CBy z)j?jUro$++r?l``(302=iA?A&M=qNaedG|4f!F};Vnsi%8OTma?%91}7i`_3q3exz zihu=O>DgJvqL0{3*tdX*_Pg`ikq>06+E!EqM=0>WJC-dcRSat%PgEXC=lb2he{1Io zSYlX9&vkP(QYMW~j|SKC6(A3>o9VpxHx^ex3tQ%EC2(08H?ac329&l5Vq8oN#m2fa zTcW#8|F(Iv|zpCXt4+;V7Dqn{F+3=L$A$0yG!e4&97%Fw+zu}Q#{b83lggR3IK_-<=W% z&turYOcL#YnTN*wE>vyQy$cA8m2Ef!@$4n1<8J72yH=MPcdq6E*9-7&^h>cnPWre?J$~GH@&|7@*U+QGeY`LI4CqFL7iEjFg#N&d?f<$Jl7v=|_?8 z%9*8dol-*32{R#95iHO^P1sBaKew??Yk$WQPl52YlmSk6L|3jqM`Pokv)MSmkQc7y z9Ym0o+pC1G8udB+U%h;*sI>5yNM~-<5s^;6@tf6=&y!==G@}dq5`KxD!5^G@2HL0h z>(5>Ei5!6}>v%|#Y|!An`kAK-Rs!pmi;IN#OLl32Q^tL#yl+aYD$?@+{ z*-?$2)61nERLW5+UJP}c2>|q9m{-@sf8Tzfq!TE2G13hm+P`=%CG3B}zlc_5pmNvW zpYS$fn3wQ2di>Im3drNP`xbA!TeTi|QoeqpX0iyK>v(cUG_IpSe2YICOYM)&rB~nL z?!Qv)16uZeVL(g**2~o$^d@|Z?MSC@@i6!n#j*GR5#bXa_K~zVhv4`bSTQu>{f&=b zFo~!~kN=SQ_$R!sopn93IU}cu%zZdjF7K$z*ssB0f9S)1sOLA{M#2AyydA(#uJnPQ z64KX`pSsK1s5}2HS^LKuy~>&rZr4(BT~Iw_ZS+2%g2(5%vc_vSdHc`s!N$5R7bVn0 zd_vXusNXa2;C2r^=Q%{ay5nQ`(tisde|!Bu$H&OMhlr0|Y)>Eh7|<7ZS||}0C6WMD zTFSW!Mmzm}6fr_aFSLAt>Wg6_Dy)g3J(N%)jL~OHoGp~N^9avJLARGp7C{Fn{W!N` zv4>5|)owIs`!v)kT;y{;d?-E`VE4_*z)c(w!Rk_wVJ{!OP{wsMt8Vqh!lzhDp&V{n zC_CI1GDsk)!w2U(_8NK#-t>_5uaLDj6fH{&MROMn4#MXbg1v8Ffhyo&Hx`dUgF?}x z1CehK9-4`VKx6@0UUQ~oKmbB2Gw|dqZdw`Opy3O?vTsZdS+9n2-sZGRSz!0J05;wT zjr`XXd+5ml|38enB8-v(E$^hzp;|V@nvubA1$KG6%!cAHY8eTE;Y3EDt0fe@1Uu;O zF&f50V+SxzRkIzfkgBR#r~QNEU=CJQB|;mvA++IWZhmqRXA7oSMcHXMYY+!#eBFS; z=Zr$I0|=l;WUzhOP#%XN?YzPU5_WQZb=Z6Zkq}=DhR@I1+0ja;a{=Q&%jhT+v9?Ft zc?M~x$HvS7FP`|C=*7#{6wD^MF*e{nCDXll@wnQ5d@lSn zj4x}&C;ZbRPnOn`L!3X1lObo5y4+AGPd`+bXFi7NS-j6RD--qx?8&(|!j^(|7?ow( z_y;z9VSiEu_UOP@Q&ljX%g{i358TbmUP zLTjGH&3U*%G1y;sG$E;?(c}3`zyte7uUF2@KsgUQ@^vH9$6=ktfG~D$t@{hwEk}ZW428|Tp%>Rf{7sxA5iQC~ z0ei5Uabs!#W`mBYp-&ycrebPjVji29Bho+(EXWhCEJiDEo&+YHBo+q~evwwdOO{}% z*s15NBGf<*3ivyX$isM9Uz9a@T>TiF9GW^LUo&ah)nro07(rmuuy0W&t58*`1J$Bc z-^I}tH)k7*uVNkc*o9C8dm)zE4vG%l%L)6sYf;;1C;=5cPNgL*$ksx!rUA=1(F~J# z&I$0c5CN(}GZRn~QXE){I`$CJ_V9~1*Fj|gPw-ZNr-YRcK0vTFlK*-gSj?#XmjJDO zOxBpK*pMVs74#4biWcExdvNJ#Y;by(x!KWvELAjHE+C!xKk=?h58wclYWaGn2l|>Y?2sMhvEqW;W3`Z;?93@z9H7hP}PXMOL7!^ zqOLL{0Yq5PL5^6CHkh*GaAFrzO~D!{{P+*~@fE|5NM_-Cd3{?~$!YrjM&?9%Hj#5Q zw`k=W8P*Am`HEpoEZ;aci#_Q*D$EibjISwnf|cCj59Q+(PEpVD_iJdX-m4$Jx6-j^ zQ|udnhe93>(Es{_ELP+W!m`8?{BJG>eCT|KKQt3hDHEmPtlWWi+C?RHS`(Qe9bM*T79(?$rONLH zwmh6liwMMW(+V;_0nvE0iutlSqu4NVsW9@Xy4Q0DgsWGj4+sxlm5F4eEYv5uoG%Ct zvU7WJ4FTAxQzO}_-+*wRRcD1u56Z_n$b$+(MOz#A_z<`T2jyXvAt&MUj_5h1U&BK;c`FlUvt_ii&Lk6mlm2$p33)_f{A3)Gn0WV|eLNcDV&c z+1)nuzfyLC*~c!G-PvUR|3ulHfW_-x7BW1db=2le_VM@1?x(xJ1OCQEBDBer-3&Hl zl-(^y{Ef0Z{o(&X*^M9wHGTd&W!C{LPw7VseMM zAYe*t6ecUSPU#r5n+*BS z{S&k~&J&#Op^{g_LjQDv*j0DJR-qlKHU7w$PWU+ZvQ#k0WDJTq=L)twE@*gk3`3V* zYg`S1Uib}mUUA{aWUQN~4^T_5u7Y@K27HwM^>V!hn$&Tc&VYgbGlSZ6ui$`i>HE-Y z#qUF}^?5&3G_Vc~;%|Htl?H^fkP<&5fY0Zl!rQ1YAX2=XhIq|kf5V$kKIj>BQ~=nO zAr2L-y%Sy51phmpJPzP2P201hCi_Ssvi=^5nwJ9poWrw|U%;KLALqi)*#yJRxTvdv zokqejx_WuXW&^cjbY+2_t{58wwv2R!O+lC?dp~KzL`>Z_FpUmCWu~ZEZabjY6d66| zVc;1WZ#^G_FI5W*R36R=m#0Bbt6Ok}EH#W22{m;98KJLDDwK`1oJ5N+&FSTCc!zI2 zhf70g@QG9})c4e3_8r96#qk4%uDozd^|=;56x0iK&{tXPS|jjv92cN#maChx9Sp|2=qRnPbI{o%(>Qg414rDe zn;JLEh@~=`bGbIw4<-ouBma0UOlsVDY$NV!5-;h-9^!OUaOVkolDOS2LTH@JWAOtw znQ|k3X7%mlG0dQ|K1IVP4KWQLD-F|sOyd89bI?ead}M3?Pt~^s|qXz0q09Cg=-QV~<6_Z#0{b&|y(|DI+Qqv4Y1!Txv+J=le% zY+pp8NSG>reU2v5TH*^GMsbY{PK8p#m$tFGMZAf@sqj07rHalRYXOo-2k^pR@W$e7 z&4}&AY3LNKO!BDyW=QMF#Hk95I@lGb+$)odQx&Cxjc9R_=D_RV46Kv(h|{-M#Kj49 zin%z!oF)W-D_*#lm2I`pnYaRR`9 zX9VV9f}6|;oH-iOlFSIyqk>}uK0MG2byu^oNB{9(7=hKdQb7MpBha$D*9hG7GcCQ5 z!&i`O)kfeMrda5pf^FqDjR4R6K7d?suaW#r-y1J>p)2??%;a z-^1T98Ddtqy_3IjlblTA@p~r2BcfdHTJF!Hh_;pcA&8|MRE!lHvPKhfFQ4?XeUo|+ zW03oegEU7%hh_{piEEyWokQe!+{I8bJwN1hw+=Gr`Y(};9#WDalmolUEzQruuYgWW z+tkuM{=(gUfezSz;BMEA5-wiEjxq6R7681lg-h9xaktZ)&3C)v=GFK87u@V)*Z-}X zy#fkVEAOX%@^JD-q)1!ld)@7|c;dR-wlAEiDdB2PpfI2go8)Ls7|Vj#tuAw7?agiI z3C#ImqAj`vPaWnw0L4qWOoz+s!JH4awMD1lc{}F(4t5)?68i*K4|A^lk;Cz@Vh>bK zV8uvjL4Jwd4c^5?dB`~2(MjXs5mtm-F&CtRAu1JzyfdJNL%zy?mks6uLtcOj3{i)p z3_}hb7-z_tz1uJ(Phd#Okhe)mVaQ6kO<>3qI{pPi_NCm|SqOHS<4MB9RzVu3=hmS! zxR$FJ>{=Bn`l*^+0c+xV@v8v$GqP0(g7oMB7w-1KnB>mLL(-zx85!||hjm^+b`{Qu z=}*nzPa9oc&^Z~$Y>AR%=;OiM<;B(t$Iwy1cl)@mvtPJdxHNJWyq6((I0Oy}r_X1E z_nJuWWwdY%idrlh=@u?7yd;0*QKgaL@LuTZ(2?pN={CK%@KZQ1i~BXK^EdWmABC%8 zC*sOo8XJovm!WOU_BKn0xgi8|(cw@$9EvtpONVLGTKne5dT%6)qUgKQVQ#3n@G^0i zu0e;Fq3|oxp}0%yU3Y0`j6F8Te!^8)RGNr-n>ejB;xtj)zKI&}UUO^~s$=bG0Phj9 zN{s!n*-zB!?h=)MS6|-NmpAq0HGP?_FHh^sWBT%-zD(8^TVKZN%bogCt1ma{%eDG) zg}w~am-F@IEPd&(FF}1N)R*J+q>r1-6r0UD>c`~rA`m#x1zSEa4 z^kt2{H0#R>eOaV03-sj`eR)n_p468|^ks^^Ow^aV_2rC@V8-9vkeE$qv!2ZCFa3&Q zx2yf7r(@DB$%Fus33)hkJspz*n4w*+DZ`stBF8c9dx{*f;L_7gOQZ+hYTG*fDE(fE8?tqV$~omJSNe;y~S0g!j(l?oP@y# z$Mh2sYCRvXm_UUjJ1wfURtgeTGTTL*T&&|4#65rRA(|mhp>i2yFtCBiJeb z=<$OKKzT=DBhE7RaL6)oAVi3q%BYNgY^FTC1P5nemFgcvCU-4vl^ZN~-^iQp*zWbI zXTx3UHY(4H2eHjPA{adoh+UNYc1xJEWJY)d z+j9`eAf5!lGN*SCJcAJ62hi%!frAV!seoHbW)zg$z9;t9DxYQ1m0%m57W*^U{`qdL z{__Y|fo@ZP2CQYVOMqZ?+z}%B+j8adVlxmwp$!AZ@oyJn@4tLJ`$i(Mev_7>XLAK) zHPz%VSt zFi3_x;yj<|C?Jx9Mr19PUe0cS4)BFzm5rdvJQi;%Rrw+I5!ssx^5;B3?-= z6J%2v1$730*Dv9SK?a>tp)fTCTikes%kW1)Y5aW(^4B3Vr^!wY|D`*D@F_@$fVWd1m4Z#N0 z_MP&en!A2?*E;)pd2%6Wb1rZ>612g|+2`OPKjl1*?kRG*{&A<_rZln#9L&tp$k6mb z_7zywv$V83j?eqpZ0avLqJ{mO!Xs8>;Db0Z}2C#oGw*6?UGWBa;(ya!Yccay?Ga1$ps#KO1WF3x}& z(Ws>#g72=~fj+Llw{7uF&gUxG5tJI_pUtAPU`hC$66Rt=+_uYyFVvhEy8f58D7J6b zN4i7$Ea~7PhBI?9X+)^{&yem89L7$T^*8VP%j-~4AL%fY9a7Oyv`9mBK0DZ?4$`#U zaFCFA#!8U*=tL5?q3-}_avEQIW6VMd9l(w=Ld-xtbTx)trg8e)1 z@?byM9{X<&=P35n*pGcj#Q$ppn%$yiYK$Md0vMm_#dsTh&(`>c43jOP-z#BlL2Qu@ z$Q75WhfaoEbrwV$B@claOQX%CcL;i{40TV(lw|)0_)aHT86CxyTqkGOmcZ1b7R5K!Ut@I%#H2gc)0$L^E zm2%PpnvPvT($%uVuc&lDX<5qVJKS`bgoyL&JVZ<)Lffz8pzxJNu!*$zJ5wrUa`v9e zU{@Q|C*4GV9yvfR<;y_TUYe?H==uLkeu@R?UCYn;-vMsQ&xAMrLVg}GsA)q9BR}h} zAYyhUKU=>=50syyOb4m7~*LwFOcKOE>c1Xj8zm1=SI5yQ$Ki7*p{1CV&96> zbAR*OkBT)|ij53}z2~Lf2>h&;%4Hja(Qgja;6I zle$*PNnKT}g#gL8tK|j@WiP?a*>;bTLERVOq%M^{sQY4Uuv1L^DtCk3+Ci!7Lq%s? zPU2vLU7Ctr1);#PvN-2OUHr`^EKzBWor_0g=W_W(9z`9>IZ~2|b4f-OSom#)p|tJ2 z&V{L5juXME9mU*onTWWflc9a!`l;Q~EKMc7MB6v_g#@00bWZN`2_ z)Kl%%RYdsX{p9k#zKmOp*N@?KJO7(oy8qH1z9IGypCKepBRxy;W$Dtw#rVjg2gfu& z70~7HryD~w_#r((r6q104Gr}83qDhK?WHEaxI||=3c4J48&|5(((*Ga^<;cvUD!a{Z-w$d!TV=5nGub3d zzg9NMUWuC$o}G0OpX_3j>}R2(J1;RZj7_qmMTX5udtBE&=}SuTTAs9bi4o=sN0^Pb zg|mp-3iB8W^B6~%50Vb(_b&I?>q4}wg_)-My0_a3Gd*G>%y$?Jw&5%=GlluBiwVCr z)vk#aKNNV?!u;MB=!?RfX1Ylt%w2DF$&}Q`EthWM!h9>*)WUpPwn%Y$mRwTxW&T@u z{SOgla9kVv{C_OZ&kg%)d4BVApo8-K%d3AO&*=ssZLn_SxkUO%BF~qxamw=)r}6gk z{M;xHu9L{~ritMP2dc-^=sJ8=xyes2;L@-9N`yH#9$`4u{*uSFqP~RNaMY zOMRE)WvV)5f9QquV!+2)DguC&(;cn6lMD%^fq7K%# zpo0*W!>bzz)U6N?H-bRhp5BlmT0p+F7`yiAo$=TDd&LRwr#-o=_vF(o1oq5NCesA-9lLk!&=yByX|0@(obwF8zJxOw0&ia?%Ss)xb~3>DGm(r~4;2 zVYOz?VjK+cn~SXW^3i}!{uXA{{|OB$S|_OXIZ)Jy(TnEgc%b%D)XzV+84q+yyYal| z7HTt|$*+U5mwG9yp-#l_m}IcZ_l_k^#&hfQt-|B0^LwsnSW$h1f6jo+0xPqot4y-+ z8BdKB7y<{6K+li(ztIZ!#&{%}&eeNEp4osk!1Qs1fH?#U_1y-gzrD3 zKQjNI|CToRN=kpXP#b(*30RWQ|3Lp7E3IHaT5?9fNVj@m=WQH*k0fJ;A3%h?27C+Z zV((k^K2c#T00ERZ(pa?-SlZLF$DmB%DK%JDa9GQG|4sV?-1ZSmmakT$8-!l4bL*Bs zBnv;_?%*7oTlR^hO(|UDpDqhjo$gaRiy7D$OMv28Lh+Of#b1uE#O=R8z9kz>cluv+ z%fXRu6FCt;|4VP#JCgQdIBjCM+l%qh-<2WVUzgbZbL@VW+r05pj!32u*^(Lnd#WCXa~+kee8E8?C#m<15?=X&T$tXKl>k! z{-K9PP>A^l4Z+GF*L^;?n!mt<)K>KS(Kf`%Y}Lt!|Hm<-yk#b5+1>Lnu z0s=jTZw9NSa{)*L0ZHt?3jL!)o(+Wl0lIXA{^hGp_~rIr=Jt;s3|i2Q@L#dcm;{tR zqG8I@dI@i<2u>{_(T5kQK7d5d6f;lGx! z#1=wJ0*L%mqQiZ1)v0i+*hnUVm#n0IK-RZqnfiVXVB+VT6Y1+8dl;8qw23E@Nx(A| zJwNQZPL8|U3tvhJ?wf!lSP=410ea4ZJK7szo*vxRlG(R@TOF}w-;N@s z2vhY9ZNqA+A^6pIZUAraJK%3D!0*t`WBrYX;HDVZ&gT?07_D#B=X|||l4x&DseRyp z(~n8%&y&9ThQ6-oTlaeaYY`U7KA1@;6s_OE8lzBR9d@2|J0SE;Mcs}77DzO#t2wNG zX9pmxdawGOol(l)*o$K0@V<#>w)q+Hb?wA8FKM~VE~p77@r)|i7~)gog|butP176b z;HDm|;|>eh?#Es10dhWuU`!|tpOyc^^3lJ@P zSgngo!|(UQR#TjJW;06(q-5pz=YO4o{e}1m5`$q#+rIMy`gfpuWT|}?4j5fHYWL#t zStoHh7qY;`;|J&V=WK{6m)(AGJa)WMC6Aew8JCbN?DhTtRf_VH6HpI;iY2Fm zg$9A6?6l5c?Z|;XUK-ckaWe@L#J0bEi9~S1dEj!EL_7lxKzm8Lt(rCjULOkQW6Kn= zQ)W5+su_p>yEUreL|r(B=!;$xXX{^94N`BK^<`6NAQ@0$><)6}0JPf~jPovAS$`aVYM7 z5k$JmAyOOp_u zN%|I+0f50MrE^jepPf{Hs0WJ;`O61E=RxJN>##2}4k)sH#ZI5MdHOut?eqM2pBKja zy!5a8Oo{h7SogV#+X%wGtJ!D7mw7KPp(0*V{PzyVyPi$seVYg56QDJ{GEvlw5h#@)Kc1YP6x^E@@E$JNpA|Dk0kRCJ@RfrDt-$7t4Y#N76Ma4Bn&13AOuj&ES# z$uuG&;{jg4LSRA&lggW^l>kIQ7FQU#Q_XS&svsaucl8eU8iait8WXzOXOy=qVgg;A zqPyym*wq_PB=72~cvn*g3g*t%T~)Iy+jss36TKs+VSlRTG+a~E#$z> z9pzzXXAdEGv~#GOLpD|4hjg95QY`ngeZPJ0#0Eu0a2jW4e|>(tYA+;KYf4rvaJ9D@ z29cs_6RU-jRonY|Z#Bu~_D!sIZnA3YFYs2Ad10r-Y6m2%w)-XCYGe+z`mO|&eEVGz zlzeh=yK2)Dt38*jTAnbmLjbH5PEl7SRvVeD+Ixe&y$RipO{{iWvTCgfCL_U z2wn7$l#T16egW@hh7rk}17g~{^!xF3YPFC&t1iFhTY`P;p zNc8sSS8=+#y}g#eWrCYm6RRyvR_&`YFOb4zcO+K3H(9kG67;N~q<>&g`5Utat^|)w#mOvswTI+2IqtEofQ{af!bqOSr zVJuIq_URY#(Yw{IDfN;__-JBcwa46Qgcm@=smQoYdSf)s^+hi9R0|b7csfRpMHEmu zsN}Q9K;>W(P==X7IgWiV8Y2(zQay$wbjvq*bdz}$RQED3y_%CGyXXq@)Ka(dX)(5w z;_2adsw(;5Defn;i@Nc_1$=O{e$a~#&g6p^xDVDY>c9sl@PT{_+AjL^Hay7XgYLRS z6Cdou2j9y_lGAmp*CmawWgw9SM>0O@$%i-}8`3@}=_-Dg@0UT|!a~Q_GXE_Toj`05 zJFtuHXOE9EV~i;pADqAkQ9hWl75SmDPv9;UcWvWKW2vq^k!s|eww#)u(x*+zY0mF4 zM5dSeKEk_HRWJofrI#ll(e!3M?mk`qXR8|AfE?4EU2r$Q^p93`LJ%(k-=XV&UW#(N z$9`y4Tekm<{8RwtMqwx8Qr|c<=E+5U{WxH}81wb`WV-!)x86< z;l(5yJTaJaY^GR_#~$zW>Qc$EoQ{LY3kPJ@oEWjP3I}A>92K#03I`z3vJeRvlS(?|~ecAbtzlrquLiOeY7i(txwXBviCg-gI#f-EuIBqqWu} z^W5?SCtZlV-WpKN_>IpLwJcIcJPJrJBcyHMI{=yn{0nbn1keF~08Y5RoyQA4h}fyW zfnNXzPV2XSdB?E@{>Cv3sM^^z&mbCw3`pa7{0)3mI;4n<&h$6zi>LM5Um4cAzUDxj zdEaq8OE2~}{v=9RXok-?<467WkqfTa;BVwY2B@<)!<|uZp}&z!7;s#hzwrYiu<^s{ zAwUjdV0Y_9`C5R)-?|hqwLw+-mJC zxz`_UiuZy7r=q$#4e8>RH-Nr`o@ zW&#Za?UmW9q2mkqAqo(*%u%PCAZL&y0O3Xb8JY(;66ppMp38=@Goeuq&_dlZ;u|84 zBR;^1`#%F2L%-^rOzq8p#1MHzdU9A1-x)oYkt;Et&Ix#u?&CDXcDgA=oG0+_SSu7o zqd<@GRp{Y3VOe)K4EftTN|1vq1Myhs1ju9~3zu5qE}unb2y!q^72%!JxVjx<;xE9g z(HvDr{SkvKIIDr9YX5}alv9TsQMGf2w=9rx{W=p>w|&RIyAOtqrq%LRq5Z_^p#5G> z;L|Wb8~PV%`Uj~$;Y9Kepu;%4Y-zxE{1wQw2rtBd(XwlgX8;Z>mKv}C7@_1)(S`yj z9e?8*!9hnr`P2%dp&st+kj&0_Y)_yfj7>jtb@96eQKcj_?23I3aNE@q9W#u4B`eTH z9z+V5)y6ZZ27T#8ga5uo{yE5>gU8h9D#B;@6@)|k^;9A#x10aIdd;9X zVCK+nBor|a;#XSiTF^+g9aySA^1wU_0X$wEPEb*t5r<;#?;DbxVRbcc>A`SZ#{xmWLNoC z=b*re71Hh0a$fA4@l~?=GTvgVNazdRK)ixXf>dy;H~F{!1C(N#AF%#io_g)+RJY(C~&hP2B$y2RcB z#B}|2-*7p!%qzJC0M!atL3Q=eh33<(#GbUEyr|6=-Yy9Ta|XfZEeX|Trq*=oTUUrL zSal%E0CW|=pO7n?uY~K$!F||DViz6#zQg5MQ6_m$&E>tWh;zBv)g_Q(f5VHEWwaDv z&yk6mtG`aW`4~Rb2#4~rHwyP`>bZi@Rua7y zK<27o*(`H2u(dbEJgBD*;8?Z(3uhYTc!na~;l04tsLnRh)dHuGaTaEP75zxp%_d9Q z8Sl#8EMpKs5A7*9Th1M8Y>YlWYVn*$?hceDCg-wAf~G|e2-2d*8}+Xv+lroG4je<# z!(b9c&)%PC)##03VIxG)!8N8NdiOe-bv&Qtyv1PF;u>{T2-ZbrrmDxfYxL&Olq(j@ zggIpC&E`iwf20VFBm}CPcZ*5ms3XPL1FcjOuWo}4vVS+;riR36)?l1G0wa6*8I%;L zEZh0~56LrqoyRSQR2i*}9>nn3z89YIU>qh8O*v(#uo#xX2t3N}+9QZ@@pE8xW6y~z zYcP5Nf1vF;)__i^(sRTz2*Y$E9Jf#?_I<|@3Q_%{8R;Wlat(z7+nO6XhKgq7=R?iG z%uB)?&V^~Wu_^YE@g=L&v&imx-^}M5yEb2TJT-^_tMMp9!&HI&Cpl)LM>U`E{Oski zJY6Ngla9~_g-V^zW^n+z5wh4P5-y@ku!!)~s@_tdIW~naB1SXTFCnfLyYmlhgc~%%A##-uPL%vLiQvE6#Dd){MzlcJA z_C6@|lW;0zJO9ou&Nb&n{6uZGtMej^q(Vd7Gf=di<1?@1(hypFJaRT(eBy6B5H0a(h4vpaKD?1m zrzLJ;CAO2m1e~Qyt`L!YC3gnf30DQIFlOdZ6fiua)2-0x%v66P*Ra){cB#Knqzfbu zQdwG7E9h^&8HS_zCwxH_(%4jUF*!#hDl(om{PVv`yT#(E3S(QPH|@n+jQe1ikrH&8 zmdg#%&gwP_u5ZM9nlrTA9fpR~x@->XS*ypc1HLHAQDz`2Ed8^Dmrrv zB;fex;a{v{>7a#=CbfJ_sH!L(01Xt3&;ZL;5o{l~PdE&qxTZyGbI>?PU3Zm7rqZjU&stKK-7dC&UAA0n{Lk-E-2lQLxm}WcUn)keV z;him_7bf2Wz3>y1ljG>M(+^nh=pTDEg{IB=FuK8Z_N3Dg5yH_(jUNjCI zWcMw3gUOmWM0If1)EZ)>i!9i-RPgA zqdhps8z)+2-*)A(m}T^4RevKRHdeR{H7DkAAhId#MS2vNF3~V>Z`v_>Z`xE{qR%Ix zqF=kS}^%~OnL`N2zQRM{GMQ3_eoaIx=6c9&{z)9>7`5$R~ ze=8i)o{j851It-FlTRi=_5!|9k3NI`zLfL&n$=|dfC1A-7JKmEU<91mgEA3cAk%Vx z5|+GpZ9A6iWVRmz)&x`a(noQY{A8tIBCa}wt%6PnmH9EmhW@f>gG{0|Lt8Bi)v;wAw_3_kq_ zV56hJkdY%WxY%Gw0}v>m7xOP`xS!5FSmQq2yCQ7u5?}e$TUBo9U9EZ@{E7& ze-Ou!cto1|?sH-J&S9{8S1-%Q`CatyBOGkI`~^r3n++Kkz|++Qs}e^Kex<8uXWX!i z)F=f-F~B_D;i=D>%V98KiYCgWEnCVkCQ3ilA$^XJ{#N5mmszcv?xe5nJao$>l>nr8qkhG>%+(VYeh z_!W+n35WVxJZrWZ;ueU-^iN+JZ1~mR zcsd^N-Jbq?Xc=&Kiu11F8FuCB^6cnQlz#>sNN&L^jV4izA#boI^qi9A;ZLbfi^gal8Cmlxm5VS&N$)L}5`5nX6X=3sh4nW2JD2}vWouu#3|JL{P?XB3?g`*dz_WU)riWUzP7nW10PA~jvQAHC# zn0}JiicDS4i=)ca>h}`yQ9&830#Y_E)<~()69izll8C5ctF_Ls9U-iU<0w%G|Ba=x zu{D4XVDckPYIOsouCrHlh}n$GANb##KPHRJcXj@lGg0GKEMqXC6fiVLLiL9=qZ%)+ zom`UR+DRG!9ohiVd53_7Xb4d*7$l#e6>VVnqmn-~GM(A zq?5fZD~vp=>2iv686JR{;#q-wNG#5o=Ms0c@q(xr5+5dhuCzb}h96Dx;&&5&38&1X|{)cRvwDe|QMgssPh>jVK(?>TD8;^!;`=)>zLh@tju4K}p; z8`vS)O&tgJwjxyj&^@AfL1LZ*!RpwYe>7u3Ri$>?no!Yw2a$HWgKleD>Ma~?6JDlX zc!XqF6T3mQhnP!=8vBN1Yc65CfQD)bz-1CHC_%d2-=0jj+u3o#9uaORmmMb%WVQlk z3bus6a(mosSZ=-9JS^aXO}PA_lmlfH;^zYapTF@(j!pN9w;E|sDYN-l&n7r}%qECs z&L%KX;%OpNbqUTUX0fH3?ieXPU)P|6(?AlOf(9LshNTh4sb4~VTC8Rv$=mV~@m&dU zKfBV5-A$`_W*a{gCYfzaH>8|Im_kK)(my90no!P!qmmPjvxsVY0pF;6_WPw3UPc;L zsYCG73U8CMDy>K=^v%R(6r-uB#ns{DI^G)n08Xa8akb7_SuQ6Vy&`NZRU9^sqCPvU zB|et3G4QaIK%?xCzgdW#tjCoCCI%B^LAE6eN6_dmqy_yCF9Ykw$wdBz;ja<~jFo{q zRq34&>?7eJnMq56d@rXx5&7=UtU~>!xs>Pdv$?Z*g?!5uT+oEy4Om$}uZi$rRt!Q- zBSqpedI;*uhp0-&7OdT6c|tj2!ye!RK^v_LgS zz1I>AS{q^1+TvxdoUbMM{q*+NQOGJ-HpDZKIMdgQXmd(!~K)|v9CZHf_ z&u8c@$O)PvK=>zvGnxnWQcy;N1=2u{Ag6kkc4izlUD<%=C@rx;&SXWGAdnRXuFdQU z?N^%L?1#T=apj1DR-yi(&)dW2!ImuqU$?e&v%*Ns&+ICTJgaQpEoAGQ#h zFQ~6Zf?32;v_%K-``tn>jCTqLi+^UkGkA;sXX9#E-W}>iU0gEgdhSrAmc#X|N))qY z4mFcQ0;5YIG);xT-z>+jL^)%qaO#^lTK=v%5Z}M)nva`YVxgRjF9Ql2elrYPzl3~@ zU^w}d1=X3%L4WCzI1HhMRHvh_6x9hH7E5JnYzU@6$ubvRk^O<1mzq)b?=vi%I95Ac z5X|(TrU~_3)GRkYlBP}y3@W4$P!Tl0Ni?FS48I9*8S%m&)u)DvdgTx=SYVfk7q%fG zJR+k)BcpIC^qfImY>}8SgGX)bQmbc6!Pt{{hh=Shusl9Y z0aau$G8*5Az|W8$ae<#LB^^+lh_~d$RobffWrTQf#)nXNR08$bI$PY-)mzGVkkB;X-JIwVmNlmcyA3hIR zidot00`p3y!(n_smBbW=Y@&U)rK>sjqo=PCV$Cz(O;`^A)C@d@J&PS9Hag>+Bbhs) z&ZmcE8x5PO!WZb^e^5Sm+jbNHKW7I+t^nWmJ(QJ?Thv##tP@AKPc2xtKN!26J(PGx z23fbwda|@!00$2C4eaTSFiKPk>?~Y|E4$0qRb}9D4FHx}J>(;x}fWJ2Ah;@*@=7$@w+k zRo`w!Cb5Iy{QLZizJ#07*nNdFNo3e1TEI!!Ne z2}KEOqB=;}Wdu}gXi1fv4h#=ZqFKFjRljapR@2!QB3A~7XtP30I9o??a+aOF|1o;D zuk!|iS9AlYbU0}E{u<~4Y78pF6m^6F)nfByu`)1B&sLq=ak}yjdsK;c*xcfy(ngSr z*#TrYFVJTdLo-ZV-wD6GM-+xOVJIV@j}b#EV|!4v zbEUY;gkJn3uxrUuz!>_u+PO=&tnL6M?xIuCK85lo?9PKn zP~Q>6?5&f%n80czFuma{NTFG2hxL)yYAocF&=5gcY@@MIU{o8Kld`LN8!w8F+X+-N7$7k%rzX)hTnNqWpaMkN^E;?e?w1}0kWazR{0ycNDXkqVePo# zCl5FH8+rELJZ#8@rp-S1Bn&k&MavL*)}g)DLBxTbv4_Y59b4#yfRj|OB#J<6GjYyW zcUNjI0H-qLt{H_~FqrZuI?d&RV=+U)XG7`$1*X!jSUSDizOg5g2DC@$liSB>7v3w@ z4>cg7US?kHsuv0-Si2&2wC18rTudJrqti$GUe&~#KnH%;(3mQ@w4ui`LXg03H~|A< zrLyE>TVj56*p{)XhI=%?YaTKN5;%Y)I5<#0IoloU3R0@&NCb$E)?|_BX4WlS#gn9_ zY?E$xbQ*IAp4@Sd6&^2dm(}qF|8Zc3k#Qt6-b;=6Lm(ty#427;Jz9nFb~AkEjJeHt zpJUqz;}xU8E6Av({62C%2m@f-~_==N)$eyXpI6KJu{}K zY*9&Fjs<^r9!}H*qssa~uUggvimHNy-{|nE=NUqUjM=_tAJMssbk$+CI2`ZXh*6#B zj;hUgzSiRb5tt}|J_W*I?xR2S%uWAr8#h7wC}j!QTFq*hmarExiFqNF@^5jQ>}yPoQ;2peKwU zq7GR>eP>!wNraS}{D;3$6cESyvN0JIgcgOkywx5mvA1*!U&b1@MSwU5%twPDr;c~# z`23A4`6k?ZxwLH1+uPsxxI9MF`g>TMNUAt1nVqZ*6+PXF zNJOBo_sW)sxQ1gz1kUaxI$A-jBYE%`5~8;@d|I6Y%OC`!dYzA?+7OLlToZ7HOlV}G zBU)&g7*%uM)%<9IDrImQHml+2Lc7hTmlNDxCa14WQbw|jj@4fEvixz zz*aAf0L(wQj+GJkHvI93_Qyd9DoXLMz#mnhl*1pj?4rWu59S65I8W=V91p{(F1!&> zP)67~lcTM$!qERfiZFPlvMyu^t@eo$H0j|c)Wd>4Zl4-=A-R=I24dCXYj|lOWG8$H z0{<_QQ|xTl2jGB;1EA{67~!b|R29od95Zx;|M*f5iMSrg{fJL^Y!##%F{&6Mk{DI3D>UOe-tIOmbW+bSJ*zWYEN(jf=vJp=$2t)N!@wI3 zOClzQeqeK;$L)AfoRMc1IxI@t&HZKS*st0#a^!cXlrZw^O>su9kTas8{}YCxV%J~* z*!U!Nx()v_%msS|N^{`~__v%)QR$yEJ{@nspT{k&;~kKkmW$Y7da82#agb9KvvFE7 zsmCmO@RgY1X>V)iasGy_?O5o`{|G8#(chDmz_U+M?} z?1ovr6kgc!HYWNlP5iS!&8-B&xUCs7pMbBC*8x{(fCk64h3#+!@zc0UQSTf7H$V`9 zFw7@;m>NLD@WwwZAPU+b?65IZ>8>?XJqgAb8YR!a1bF;o2W$G}6Q(@ElxNlj1Ud8q zSM9tnD2KIpy_d!c&`tf)xS|?~2=P6Dsi^uB&IdurgX+$QlTUm(KDtmFDpwSfo!u#u zjK~=>*i|2MbGCeUQgDoNk&GKprMpih_nqwA_MN)Uqo9a)VOF zmc6-WG7j5iiLe35C{)+k5eEtloou!J^L9cr1Jvz0}h(>-3ewND}c+h!pKDY`n_zi zp{J#XdDVUz7pNxA6wt2aV8R+l4%qssZtG|&0Q5Y!o(M;a4Qm~@%Ff7<#-M8-?m%7J zi!?yLI^7mvx(zjZ?XP*p?X^1bU+qXZ>6Zi&E?E#KVKDZnkT96gy4rFjNLbp2gl*)fTRZ!0=vT?X z#Lf2oq%*+d36+@1o4F2@>XX}u1ZmvQT5ZJ1bZkeffsVnK{dHvQ+Wk~ zqySEy7N|SS(_rflXaeXh2}~qj;FeF@G0|CD6PW1Ed2uGHh;z{*Zv&oR(yw}MXW5y&i%pm3F9)jsbHzzsf&FA0V~``R%;v3 z!EPC6T*^U#6epW?sKRF8C5Ua1ZUi#hXBo)sjA|bdtu;y&bryIRePL7&idL6X5iJQh zfPsLYh2V$NP)VHv2&q0`ka5VXg!B_3sxTCv5YV*L_NNnN=L1EGvl=iT&}(zUzv<28 zZ-Tn&iwaP)(5n*S^t6j}qdGs7+7bA!-?SM`GC#!Fpk8Z!%VuT? zuDJNX{iLGvA>~(c>-Z9wkpNHVEox?*TgufkIFz*%wdb+`_+72S2Y~_T{)aQI19F`s zt3t=*0)aI<1c8rH5S?6B7~3Z%=H-+%sHpm+*DaOOt=smK?lkV?RP z`p*oSiNpe9#*BepCXJ6bd9*V55{T3`NHjmZb~WT}@iz<)VDKa?AZ2R?I#FTT=g9eh zV%Fd;-ljlA)uPv_IE|RpFQN1-F10TxC<*VtMlf~7ZPYwp%AS%^`|LcdWWl#XsFq9z zsxL~E$ksAg6HOO&jMQ4jZDc=C+1sPQyxX7*&1SOo=tZTY5N2w46r09Es7%>Yo0$f_ zK&ttc;5bmB>TMs;);L0Ff`>APn`~HtOWVjM{JlTXDmM_fay#`evIF=C8u_F| z{7ubaq$TMmGcn5^jS>qjENHt5piryf3px_Dhq(pAte0M}F-G<&ZIfSO%|iKJ-R8#& zwbjHl$`B50S6QfTR-REdumK8`-&F^ye+#iBzKdD$U}rr3f$o;pxidkM~Rf!VdAnRA{b~g(}s-IyLpEu4toxVX8R5i2!PPF zvJ^D21*l6($VZeOyO8urORCq9%QC?v(gaPBDBA$tk8U2p*J1 zjgO4!Yl_;>Tc#o^x-PyZZ3c??u?|JJ!8Vr8zO$J=+GhG_o7D;QQzO>{Mu#^vtE)FI zZE20*=<|l$>1@SwGBQR{he!NpVdzm_QEWV~W>h^_&?dEH(cEaD!7_S*0lw8L_DMn; zvJ-N)&^NRbaq}6{7K!WF6Hb{gH%HXMtt3})q74_S+$#KZ6!P%2*><0$p`y?JO>Km5 zZr0M4u@DCJI}@b0N}x=lgxTFU(J+u3Sqau2f+VufCHMd|f5Q+q8`{~^-%u(Y7{V1`0O~Fis}jNm;W2i($aswDD?RRgB?Zr-+h}Lp zc%CWo{R*c9URIc(e;FJ|5z}%#VcEQuBgLLF5nSzC203#H6@4tPj^ryycV7$;yKKQW zQPpFP=5XP}`Xyvggf&>qzBOIFUyacBhmHpd393~K@Q9lFQHyM8XROO|1c?C#aWkj9 z*G}Ai`Q9ld;&uc?2ss=PH*!KO2Q!GMdgRsiz^DO3K(Colnj&X$e^m1KdF1`XZ%_b? zGT<9r2l;RX=~0J=C`b}J{P{}_rO*QwL$D72ef|&nxo`orog^3al=5JlUrkO?Lza8! z5is<~qeCAmy5?t+;UHGb7Ybp-hz~4&g<~55&I#$`UC^)03iDMZ61GGscCZRcXYS`9 zizsE1QuTYc9ZDbj&M74*UH#AaT+NDg0sBSO*$I8Bl=Fef1<*+zjnxL9_i22BwMK9n zi9ZY(Rx~vE8?NUo;1n@IS^Ak@eI(&kE3q$?&xI9%G+{AGx3CGxa5zRuFoG&4eXK_V z#>KC2VgopNso_DPmITTme^K2n%4+{=F1#^5Dj<%5eF+0GL}O>)zS2G@VW_@Pjzi|W$g@<*7sI-}7R?$#q5_U7o#0ne$q0&Dj{SscCh^PmVBQQ=77=_fwh;!+k zhc?WVS*>>#=ro1OE+W7RA|e>JasGe>I)6u-cpFIQthW>~b^<6S+zM-ZV9I`+8Fqtw zFZKvuttde_Y}zH@Q8;J*Aeh)7Gvw)d>0_8Xu4VdH1%s8VOFW7a@#$Ysrhg>vAmqnN z;rlW2QyO_f=r5mc{1twdyoA%qg81(7yP={_Hc5Y6-i~h{;~R3XXf%g=!-5rcmm|6{ zj}^1;ofzhj7Lb%(PYjD*GZRB0n;=yD7{R7opH3_+W;$*^-LD{*4=k&BNvq>izAK96|pi#vjS>yV-~prM)Qz` zE>}2y9Q_w3EFQnM;<2{{zOLY`15OH#SOt zJlrb@V`R!1-v1k8~CKd^sCLq5=*J#QqTPupS-`Cu0eN?17@Oqp9@(=~_Z$`^wF!+DQj_o$o&yq%;LI z)RI9(b76#Hx~QZaofM0b_2VO)#SuR4LkU`1=}^dwmww-zgGQuwGK?wVcyR1&k)$An;3TXK|{6sNTh9( zSI)>eFNA*MY_Pi!BWYlwlH4L~q5*{lV!v>f3at!PKO);J(HVHFZV-cz5SV!9Q>TuI5)Nb>( zkq@-oU2G<~sS7-8WEqzowe=(yZ80mi=Xc~Q$;y$_;4|oHR)8E_2N0ra=u<=thZf?O zvf`)il&PIpX{Nv-bbtw?tr8*Q9H$lsT4$=;nTKa4hQ3IE?jhVe@L(*@cv}E?s^o5{ z$Z4`=#`~n`?*uyTCMTD$l+dyF!|~}^Wo)Ks?b%Oy0acgv2hsi}A1enyx0~;lW86Z# z_$b8kU<3wBF>c$}b)8vVO1h&N@knU-vEHV2 zBhVx60s|p-2L7QkX3fR(Jj6p&j5=KU4QX`?5txT3z^TxRU-vM=wFjRfkeH8G>W?dcPZ=||r zuqDHjbT>fd@KV(pS|5VRAqRN}Txl#o{(uElgYNk}lRvQz=9kAc0s@dREOuvMJ7e}A zUIa*v*Cc|S7jO`9 z{^xq}BoBzb4#Jy|N zW?~9x#Z%BxmI*^I_FJa`7la}pl%2H|>%ei2aN}^+V3b-kg0}Ad#xtZH%uv{IXu(>v z12y{+enmM0)_zjv%ev7r9C~W}0xoZn%%OyFWv9#Z+!+GtE4nevN!8WlNZU8Nqj9h{ zyzKJXo?i%`oydOSPw4?5(<<#D%^E%%M)Ld5rO+m6*Ku+#z}Ofc4_^w^yhNAyr<9Oj z$EA7VZcDqN<#-+{dW40bza^K7gAh0}fVKUjT_sYRSsUZi^JT;x@JkjaOQ5Y3iPVf) z8YO5;Qz@#Rfrmr4UT9apgd~O09)-Lp81OeW@DlB@jV9ySfRc~DloR*B@u~-2qgd=T z{aUjvUgMZVo$phfq{JFLitP}g)5!_-^Tl8@y-wOJ3bB0;&(<3ORLx5U;|$VF5o}ES zmmu{d!H~0Uu%nY)q2T+GR3YYgB}Z6Dt|+-CBv;nL2i3`y2K^eSU^P{Nqu3&nTv@_a zE?D93VnPUD=~;Nhe-`9`oy9$N)E2x$LD}(;L%Ldp6c%L~Orc#PSIZz+lfC*Bqh;=X z(P)`a(evv_aA+5IelGG*O9e9zeV|i0ev$|QBjo>t@LdmD21mQ-e$)fQ;tHl#h51V> z7>zbH3QuB-gcw?cVoPNPw~}YEq{O1~gTu+#Az??yri!n1GG^8smdB<(@P2}hSw2~G zjAR#xnph_^7*%~AYR_nDQxQO6{?f$66ZB0yf7hAv{y*gJZe-jB3P!9=DF&x*Tjo-Q z<^ialA=EQIvgGeB@Rs>s@^>}#bCc!o{yf8BvHv1}$5Wdzl|&A0trh;+RbXWlZp@FN zz&HY}1(B|Mh}&-yO-&@ffr(S*Qmp? zi0?Q5U9K+j3tiN|%GKR3z|s5{kRTgPHUVNn=f}?2ezKX6R6Xz5U%aWL^jMsg*coe1 zG9}J(OK1fw;sU%RcT5iGKi21@I2@1w-f>=0jP~5tKos%ehNDf|5tYC9=Y_rzwEPu;9Cy zc_l1>pLI9^VC0#p zX+G!-m+aP0NZzvvV9=p_05`D1m&hxb!4%*Lo?`6S|1(AVJ8p^zFJuN&pf0{ZQ;{#!d+yJ7=#9C7+{IaoRP0u8u5)m(ANpc~K!a72ng&&b_LY$z7I0rni3*sREhx{o; z>|@Ws&^(|UKG$%Rwvu4Eg4ijJr%b-fC5`G9dd47}1`aeFeHsf~Y6_H-X$$7TcBI7q zO*4r;pmwr0ddZ&78pk}ZoAemNyO$-9eSz&I`!z!LlkWG9QK=I__I)(j+t7PD?N?&F zAtGkW*_3*`|K2A=#oC#L$Cgag&+>=u0%W0^K7 zi3MMlEC#(7ht}Mvpv$`jMJKo=TsiBR^aD{)Dy?B|J zBN#nLqa3yXzb1GmkNGaFIiw&;7_}pjullz<LEaH849fuB(K&>2xHBFhY%H3+?DYGR6E z3bZUzkN1K}_MQ(a_D@a-NjzTy>Yx&$>+FB5V#7{&qB?Hwj2_n(3PZkAOT}yam0Gf4m2;*Ycn6^eEQlXfXxRf&Ij$;e z;n!FU-3L=%{=X9p_w)y3IBYPi&PA-V32lu|SAa%fj~jM+6`uGo zeV*2M_b9xnixL#x%JFf9R}q^B{*0s{K}A1^3whyjn~;1NB*7#9+8JuHxqXKfhA(GHdIvjKJe{toXpCI5=>#s zVTnFP!F2i)JMTGHWAO^oc(~K9NF=43XkMo6up*FoIjdhg9goz|JP=&Zay4!tN zKG1_5Bo*W}eJWrjZgDDLIiD16^^d#2c@>_jOJ$u~vaGn7Mkj?gnQ~+IX~y>tbe~;O zqhwiHGhbL?M8~#p8V61UXBc)A_5j%#RR_0}aqgfa7+5s$*gsg@tQ?Gt&p~q-{~n>D z9Nqq-(ylxwql-INfM=@vd=HYrmKk%8GVb{ck9qWJxpCXTz1k0eJ)x5}?_Kh{FlZ%J zE;%)bn*gWHGtfa)b%g805Jeq+#n0E(+cGF>>d8S`$0CIZnsSzmQ1e82*epjD;ux;G z@H6%e)urtlnW^Ip+`i!mj^vjpI4hJZIMn&TRzVz5lSrsgQJMgqjWZI3V&RpN-}*FG zBJD5WL)8TxwtPzpR45-|u@M4d^aQaGaV)FUkEM7FrV}FA^UF|;kgwrme9Z7u(UN)z zv|5CRv1|B**tau2`PeI*h{vUR z9u3?XR8jHzwZI`+mJxi)2;2oTG+#jq4L{04Dv`izSBeDg#r{A#a1zfU;}nG0pG&qT z0@Z3`2GON%1BHYYARpYi0v(#id29}IX!(E+lF(VVtyM%4NjTU$qyQj({zxMUGavCt zLV=NlJVz4pwIsZ-f|4M!QOl78NP(WW)J9dx1g)bh5cIF~Ce|!9bAT2AtgXRzWnsqU zDvF0lgvTxryMf3Na5E-Z);lx>6cIym_-4D!0wCkIBnG6~4$$W{_VPDADW#ZdYrQK)7y!YqwNUu+x!H=Le!4t zWw6?WT-~8}d-#VRkqw*_fmY&C)h7{D+xL#yjH&LDW(^DmbVnyu=&dDdIV!#DXFYEt zQ9}Lfdm5`Qc(s zAM{aSpEu7* zPy>hD9`^<6z!9-?#21(b7r`S;@w2;D%BC+O3#f3uW%k0cY?G;LJPdS2Gb(m~UMwYQ zG+!VTIhuHb#!e;xe)UQ^U|ko(0iGb3sHSo?4WIngAwg+f+1k^P2 zk8_?x8OazwPeOaOpzymUTOrIwlYGhyqs;f7;vp6&0U8~) z?4Q<-t|MMfpzA}o#_3uXyIV|g*8~XF%0ofd6CAq6?Xg|#eBbX-AF!YN`+mkc&nA6f z->58I8jr-BL3omck%<1K&w2<0%9#($>0=`dqm;|XANU6+1B2TQ6P)aC{0+7lX)0h& zTuqRKaR<#KcrC~4gnsYfw?#N3Q=0*dKXeJ9SormBaJaK9LGjebG!*%AbdLLxJ28Ht z-%qZ7#0vd>QuS2)O|8bUU=kJrW$rtiW5iI%1|Sc8|IqKd`9r^m&#+oYT8gv4R;5{B zrM1rZVgpIUWM^HR{Z9`*j5@>in0wCBZcGP%W0BmAK}5;l@P^11=AXFdDi?`Gk1x%I zvGmOxWR?<4pX745-qI&b{^}cGa)09wLMA7Nto08$8>6Asz>p{c;QU5iUi-6U!uSwi z**Rh5g^Gsrbxk$CWF~@I>zcE$RS+t&!~N7wyFRG?wM`bBqlMizzK`ow}3Pq&1bXZ*`8T0EJsIesOf@ zaRRNbGKqagPY%PR+W*e0F>!=Miu!!ACWFUoIr;enjd@*l+-spaixr~5sQPwH`%$Rl zZW6yDPhaW}gd%+%X>hNBOwgz1dpbu^CGFySI*30mN3Z-xg-RiD6>3Bj4Tk0#&CXBh z;fSRZW)`W^3RN%G?b+ILp3{<$f0{UM&T??GG{*5q5t@KBSL>x_@dmLf0DEfc1gO_# z&o5$$RG1~9Z72F0zJ->;9m3S_;x3AhE&3Z@q2@x6qk{1b=tRBDhC*QpHNOdHY9jEW zxA%e_85cq46|&h%P71_kD-ywKx7q5OxuVhJ_GT-_91&q>0wr4q*al*py5n~1z65gMP1EEa?dkW9 zJ1U5<&)+~6t;V?7qZsw0p42oAXwze7toYJ+FHN>bx6hTq!h!kpHNiw9e?xei@@FFO}GuXEKwIY6h6P}F; zABK=yrW+b}Zm^yY<<+(Ng&Z+x#V1ac!i*W>nL5k}bjGeAmL-ZQQKq%(DAea!1N+Mh zu|e)Z17~%oLWb`LA_%tKoeV@O;6r9d4PDK6Ytr@n<=Uv3Fm>!7G9BD3+bDL#j*pA?lU5K9TuK9r-ySf9tqW7LARoI(|bRCPm-N-|!lLK}XU&m%)QbS05jMC#WH8 z03j3!0bYSXXj)9i)M7c@hb8bck4zHa+kF2V_}}=}DZ+}Zq+?+xgSSW)v8X5|v+xx4 zWmw}Sk1v3GS%(Y_9#xH_IB+ME9Bp42-$O^`78rhj4Zkp59ZxNaCIW;-NL|im(O5x3 zW2^yVuw$v0OfrRSzNa0Tj+vD}rb}*c$OL2pv$46LdsM9%>4jE}-wy;L-?pdE6iuHp z&W9|{hu8|?uOR609!iku^jULv!jlT5ZHQZGovtS$S2eW`I!?X0k?afIGb zH`l&Q)gjAa(3jRTpr_U|`M81mc&3z*&nyS=gwx{O6`2xCT0tWCTF2b4;RLyzR4>xHlSms$>xP9&D7eH> zqgLx-$kP8~?Onj4s@DH;P$$X6!IUIV78Mm%CYE)eB*(Jc7$%x2ndVqoR8~|VXlCGm zGL2iuv@$EByQl1AchfrI<(Oufmt$#G+Ud3?JRQ?g(T@B-pLeZ2vj@off1jVvBQvx2 zy1eVXuXnv`t>UK3x+}|&*U7uQctn<7*6oO8UHs>=?xt5smwf2GjnbwVYMqZKqP{_I8wmtO|=> z;NsSm23v8*k{fr6Y?G#7hIC#5H1KcBk!DNAHI$?pv1Z0M?jPv8R8gJmWYL{#li4VX2 z74pDD;=kCDO^PHGx+{bMIOqdBC512GE09(@02Jgbbh59Gp1dsPYkvplU&6_yhBmAr zw{J^a!%{U_T8iIuNpZ2dTR)AIQRsv4-=BhsBL{#z#nIy`F*^6_YhoZR=(uW|n_ILP5#P@Zr_OV*^Yjh7d``u37_5t57FLl3PsKJ(_u}nOS zhiXaeLJ&J}gGQ`oElIR~YMy2-NF-xhan+JEy9sZ|Sz2*#!9h@2iM6`ENC0)bzsiI@ zy98XU37!JQ#eBe8;QWhsVF`W(DfEzJ=UrvPdo%u8ST?+};reT)j3~VvxO*MNh&$vr zIJk?vFSS_ITYZe!lH~mN1R36Ho%l&!9u*E>`;v9h7!taal`{{omBS2l0`7^$L0?inWlJie@X5w1e$ z*1XldH2|fn3;-GN0K6A1N&s5@r|lDE<0>02dj9;`rB?%hDN%;AJ+BR72%Nc`O!%0I+yuNxq1bh|UO%q{IlpQL@!$r9pBhoI){Q z#<-GuM4?7Xx>h!@TSx=WZ+%C)ELq1&*kzK_$vYR{RxX2JCEx~2JGC2{t$)pB5J+6< zf0*=7QkE50HV7PJP+`|U*yM`RC>+~I?jBN_3ph4WN9L?7`920)@?p(4rN^<^loF{# zI8rnmoUEB0`T7?t8!ox^=!ZFk)OR%nOTv{6JNI>c9k+SdshPZQJ7fcpW?cpa(Z8krVw2VL0 zuM(<@HY&ST$3l~a3Q{T$Qn6B*cKf%X`yVOOgCY&AQ7k;P66)9XJUcKd4Qnp~Iz<{9 z;od_U4ieMmYE?UR>027x5-s&sZw1MK2GXHcIC@Bux0?G{O5B=>d30ebgpx9OZf~YO zwx_BeO_gKPPeDC(i!oMHN9hS|v^25ZKlxhdpP z@c#Nv^aZy1WxW(ZogcaOh%q-kwT1BCYQ;w5ppcXh-_A^E#+w(Ed%|D$(GSP5V;EW8WIytE!D7NN*rjc5WZy0Y+Cl4^wP5Q>z*&$4_{7`f4Cr9!M*6!JSO*vV7YxTgg&MeKB+ z?#VSRD1JC@TJY4U*tDQ9a)*TRyNz>;kXrA7nmgWv)|%T-?=(5WD(=2X(Ra?dmzdZ_ zr--u9XlD7~cFdC+I(lbbEfb7}PTs04kZ(}YdSA5(sV>%7%}kuO9vL+!YR5(kT8dfjgcX$SY=5)Q)wtsNF zuWFyS%El{+)>jAc%?eCRX;sqQ3f+}t1(Dt}5lR551t0Wd{2eL7{nD+RA!#LV_S4SG z%Q^~x0TycKKo+?iHEVn7Um>L&dnbn^8^f^x*hxty?lpXZqjk`LPb(bR*IzIn>qW{l_zUWg0!f0+WK~<@(eVb<*ojL#EEeULRt#(prbN{7Ygrc0f;Kd->3k=#LV-XhXUdj&ME#DsSi|E1W|3-y=OW@ijhQQwH9{`u#G6JMx&E|d{!eoT#6+xZ4sie zvM9%N&09{wKBX9X3=oW>YbM7yP=jUvM^{8~szfvj_7sKe9Kxt8W=1Re`7K2?8V6V^ z7Dp=v?r`~@G{+?2biZqIH-7p`QF4u-O@=sl78|$!n2uMO?v3~e3X{f&b zA@V-N*SFLyz7mNWP|{3%pS9z}cgs~GzH;ON*+23+eKB<eZQ!_IfodSMNP(ML$uwZ(WcR+r`+`?+r zwOW5=!dBzrEIrg$;xv^Ebri0!WeYA%_0EjAq5e2Drm3>!##@|!7}vV$!V#VV@2J`M zv`6#*>yEO|qhbh_g&LAQ9kid(3EY~9ftjOD=YnTXN~5o44mAxC04&g2Vs4g&@n^48 zrH23^!!k|q|9^mw`?UpQ?7cpb2t%nDSz9$)-R zW9YaPH;a5haV3L9RsH%T;sySSZ6ur7+OY(_0-t znWY4~3TZ00v0p;kX|@Z^(6-Pr`Y@j&!U#n;LylR*tQ+CU^WVIi>aur+I(t0TB^^>Q zH5A?ed=WJ{7%t+)4?}V4o3EH6S0`{|yU^nq74mfqDE7Ec55cKDCJs`T#V_c!47qf_ zJtQqmWpQMZ?3QX}5VAu(OR&k)Gw4}56IF6RFmr5}SIfEoh#F0rusW+ys|d+HF-M28 zAS5FGWuam>$HlaCY)y@3?j znI`q)PQ2o|pTP}Q@bgF;na-H|D;y^om_K?VJ25mPDKd>)239e8T{z!R0LH59H{*K! z{Z_|Vp`?-#ISn&LkTlpl(#C;a`%80a%fN}6oMOCe&rP@L=%5-MZ4mcQ{hhd_{gXPU zvX1nDAcOD^EZQ>ikxaHC8|a5S=1fDQ?!XE&BLy4q0<^9Y0;)nh#krM%hBLi$S41YT zo*8~bV&{RwXL_sJ^KpPTNVbx1yi4eGm@O+bhh7d`U!14VhT%B-?(HZDN4Pi44xS?y zR<31@2@EX;offsgOwWrMW1aS_G^c50h3M(SKkat#1q?gqb8q!kB1>-=={lTPdNdzb zy(c)0k&CeF4rnTn-)T;X(<@Dqv0rwt9%7wTML$0L&r7G==~XJBbS>Z7$xClF(aeoS z4sn5adC6Ic+3-Rqim{&LW1iOTH1!erg%aTCrLgL8bxYho!(1*B8-yyk2-P9N;C@Y| zsIC&;u~RSIXL#;H0Sgk3^FJOG=}cwU08Hq@Ympo`j7M_KHJ-@`FyA@4{7ONC=_WV; zvZgOG;!&Lk@Q(keZ}{Ee3`}PVWQ6n~Jj1_f@rW+SY$lC$7U$iT?c4za!_KEZ)R)D7 zi(l0BqsXtGbtE^&EcgQ{*RW7CJbnlNgN{a=7O_VFbf^RDH^b0p$twFtCMy+@+(Myv@_IFYgDIc<*tWmI!eJN21g4S$au*Nhk?hQXU+;JR5P#$>?&5Tv`- z*#>@UR?L5;L_bQ$5&;Y=%{V_ocy5NVT1^K%aY&1UPL~OUxfd%nMbqvzN8^H?iTasb zIADbkP$bvzEW&ZAAUV$M7LoXFRpL|Dx(Xg*H$MSn>t-l9L&>yHogNBYlj+O9xd ziB#%8P5jGjQY!vD3V;S;K+5hiu?(;z2VkeBEC3JYeCVzIRY-#c#xMEB_LM!&7i&s8 zag^nF2EHHfWPXJDfsr*zotF3CuTcPgqOL*na9DUW%Gds9edK~ zN_>qTG*0L95pAFkdQHj{P#E(^o0?2iTYN`Vm7p$}x<~My#cnd`uwj^-_?n0`gi<&h zlu`R2bdjF)KhRjYYcRnTWJ{dSjd!Zh!434|p*)Q&^oNhLn%6Vtx}) zHt1%fx1JsAlG=1pm31LXryQl6X^iDpPg3j1q+Moh9j+t`ImN1e`^*R=GsU2~_ zsppIvOfMHV?ZpZ#Z)Mt^IzPVc*9OJ4O=Q@~Gv>P|zY-oE2(OXIbIk}}m=Y&HTfzR$ z8M;1mw(_vJ)|KZckgfn&Ya$Q-Cwg5<61;9)rRMb7^oW~Yj3lTD#$$zK#L;VtA$pWv z-5gB*GNu{5QXXhVub&=^$LV$XaX59nP139NF)@0TjWzU|*|ZnX%VX%ZXW9( z^!nl%H@zg*IRA!b^x8i;j$WCUHmBFKSGXZpSMO?>Ubk!cvM68B5&Q$8CF#kFiozM$Rio}4mm7`q2$_=j}<)Y`nC6NnoiuB@vddxn=1Y|29UPufq zTU~v$rj}d@r5=&cbUvoTP+m~a67IujBO^s+iR7I8H#a53@}ykfj1srs8%K!+{bH0T zhNx!q$gA`KJE2d|2|ZfKq1ksg zS~;J31DDE=&N%R~Wb^6lY?`SuB$2ie!EK{+3motCdBHZj<-FmQkz;9et^fe_Kapb!cvXj=!!IOL(js>Fn;yD3N2Y|=d4Nsy zbsm*Zw{VUOZ->_T6vMtcfcvkji4*X5|F0D0;8qY9@vY~^3ZN0ffk;KMwbc5 z;(9rb5yq(!?A(l8 zP;Ks3b(e7>08pUyM)e9Bpu&>}jwBCb=974hOMC%_2$|1Vqc#uH8acBBCngaez<(!& zVA-kd>pCPv29ZJO<>#RtXTr^}E%gHimZCcTOEW2GN!9vCjic>^$QJOS32-i9XPEL< z@Y5_Is3*Pyvlcqc3XYBA*WG%3>C{b*M<}3M*IJYR{8;qNVH}poqs3>oCUFoBNaRAP6wAgE3 zFWfSOo_Na;bXrwL1sbB>Dzd5@k*JGb+#*tQ6~W7$f`MB8DI88lbtJ-lMKZ2&h~2-7sHUBqKMVOncaT^v=$BmKh8`L?L6u;ZsB`Y590SI( z?a%hiUPawQ;&Ez&`#TcUezPbF;f041X(!EVJd!wmVhL&j=%PYEjRe(Okp(7``rP;i z=qvD;_5H+Ep@XZ)SW)Z{6jse))wSa_VtZ{eTi!NH9^Pu4v#_bxS}c%VhLDZqC4=eI zwRHb%Pa7GcQAr#j+oOCs`(o16Qzg_x&CrNJ@#rfuFvbEjjG`vOT7W9JnPbouB3&V5 zJn13Q17D(OcPe2Oypy&!dTJ;flEV77XWP|=j^SZPprg5`@RB4W?zJ3)?U`&-519># zxIoC!0&ZSWk9-X+&`MU=;^g0~kN;Q8zf=ht1!9{|cu$l~{^L-|dr_aZfc1zMl4c;@ zsB=U&i>ii?&oj(S_%n8lnWff>lTXZuwMd@mDBSQ>9KS>=-?$Gn@>c(yS^%M9#)TCOeZMbtYG4edNMUAR2Tja z$J=1y{Sls~o2P!2!Kd~_^Z`t%<4hSFWq@_5S)da1(@25X4x^}I60_$M?c`{QNd+`& z0oQkI&w#6p#9TK-ON>y+s5)p5kQ16ODltIpLk|$K8zN5{H&OLp>>_1xl$0di#9P@( z@+l!y0rbTYp%CAU!5fkBLNpUr6}c^-hTN)7$AWLO_c0Lpu-ewAIhd;IOQ?kZVtL#Z zJL1=vevtjT<~&32#CY%(=C=hD_9D>2(VM^>e7mSlc*$Yw*2b^Gd#*2vt+NZ^|Hy_a zD*l{x-sz{aI5*To{;)}KXB)^_E6Z+=|9Rl-mnRBm??!h>U}*)>ryr?(k>1|wHS!!X zG-0&Hji2aKHD(G22^G(P6E^#rxUM(z$k`$2mirc$f6ZovQEs+g|i-NKI6gLa*8;BV>3{9 zmPCNVsu$)L?oi(Wm^Jl91A6r|?e(Z=ufpu2aK&e2ug6QT!x)Fd(uxssS>vU@5$mLO9EQe4MUr;TitDO?Dli7*p$gHNhx7<`-Sc?s1vsX`XilZc!D-P6++1I zq!a%%F*-C%Q3jLAmE+Ygw4u4-VsG_e<7cX(Yni626+Ul@?kHBo$<_pebP*Fxtbsw2 z$eU@T8q_JHVZw@V)!1#+X}J(T)L^9h5~-ju;>Oy%NvW85D^NccQYTT3k;urO6J-VM z@oK(SR#GE&P^aIRyyX*w*LzSR08xQCs1uqx{-92M-hvrT?5s{1fkndw=)`bQ(7>vN zVL7YwdfoiHGAMmkr|mg$7|jbXk}9y#2mvGM#=HO(I&1{Q(2$(OCQ5JCQpMFwl+DJg zbbj&Si!hsoFWG_IJ*6y+Ij8I>38>qAf~Zw&sy?__7rMhlft#wJ|64`$QSyQtMc> zuvl#|PiGKWeke<|5>FyIA{cVKQh|DvWtyJkS)}GmRXNFXmVDh1c|%ODiy>AcGfT69 zP!}*KMSgU&F}<5h0H-QI{0c56oxG2omv-{S54mMW0$pbeZYDcbMRBt8<~cD{O@4@U zM}xTk04@tvKom9Vi_b9355#p7P2E&KlUthYnaXCkeUfYtt0~U?2x%th0^YPk*RNeJG7GfOh?w`Zvr`QJPgWjw_Z+pzc(?K?kF8Xmp`JrQ4kSfFLkBXaB;WeNCA zO9K=tVH6T!-{@6W|G4B9*M}+_)(uGes&p}=XxKCYvb^*n%Ac?F2?Jp2yEFJarSt^s zVKV?C1q^cFbdKhJ(#?Ij1f3+*ujJ9>36WM{9W~`s>L+kR)C$J%YxmEn)$`*YaQXt~ z$2(Dtmwj*Lr>#GYGcE=SZmGhnsHVzeH3*lu$5-Kv@`_t%^hc4_AFP7FoumZ8e_zOQ zFUUjyH6b$__#WdQY@!mkSz3!oJx7bo(97W3cP_tM6p0P5A-0^4ES|Z#t(ZEAdCu!4 zU?YAopi^DW)}C{3X+jSxb{a=Vc^ZuX_}vizt&A~O|A$9!B{$U&5Ez8q56-o%ps8w( z%7Kc4u5%9F<}{f&gE~%ofkL&10$Iv z!Oj^qK$JSKLHCJxm_83Eg}S%g%Gp-dmy-r*0uD{S?U`5E3Ei|g3Wp!yKMz0HQcUHD zGwp{Rm8AEOU_JO}E|-oFjb`R?cIp#y7dU3WPK&@6@FFZEQxs@xm1)z>D2W<;t_=uK zvN){Uig0rVhJoYywbDeJ#9uZ>r^-f0@h73c7>?EWF?eNre*M^Z+`BF#`%#2Ji3(IU zwgPC=wxS$gU@P|CDNNW$Os`p=rpa)os>UoJI}wyZ0&^){Wcj9$?H9Fm(6e9(G^C5~Y_#ooz8vPDBO9$WCq@gyKMqP5YKQ^(3rbhEK!U zj>vfBs-0*#b|#|sC{*5V+8Iu5^t4-L^8sc+e~Zp;w5d}k=@$`%AkeCjBXTzo2tWmk z&b*W)wLMQSrZI7XD{`U&?m7~TXAyUG94c^^NziNf!%jWEz|0W~`bTNg3}rXmA@m4K zeK*RS{4-+hViwX^la88WEqQuNSS!mqBG%ZJ>V(DWIIOkegO;!s!P+QZNIGiN2{0LY zADee?i2W61;b;zcF?SAe;n_qiOHbzFnH5Bk=tBw#OvAf+Mh`Ul^)@RQ6LWgG4!*0? z2NRQV3V3s#QNTZ5!gms-=y1Crb*3OyAI>j<3Zu16tU~LnCb5c9{y2Z&xzoiTz*ToH zE}?v)=>*kw3&%w-6);23=rWSB6jle}N;G3x6scv+C;mgM$DOOKfl~p#0V>v@7*8y` zM}C`@G1UYKF#aeART7-0$^jfv5D1Syl7@H+lj|UiDo8lv{nJey%vDd6O=T>38dYIX0{G2EI&ou;f%^95Rps)Z6 z!|IF8nZm3O)T-WB5{srMJ_tC==A<$7ww4S{eY62FdR#{5BtZubW2a!4>YkgNW?dqR z-=siG7@zsigPL^m(*{jDv~Q-WDeOtKl$~1l3DJOs)v~@W#b!yq-4il!2dG%S-MzO6 zUKY_WW}+K_r$qwCivLM1SE!5JE)y-&88w}q+!KbH)4xKh+J!>Gxq6U*LS#Xvf!1&h zHDF~p0v3p5wt|@B+4Ec@j7`okzPUPY+6gQcQx~BDWKM%4aF@c0A_07bwB*ds4i7Na zu=HXV27Jcm0!&)N8rI~s*3L?w9<862ki#y*7Z@v9pJS}AP|73ECTb7UIbO1DSS>nJ z3x)7X`#Y1O@GCIOE&)CsKT{;rr zY|Kpdpoo6N`YP3bKbfRqR?##qZl^RX>R|M2tq$}gLek>ymAHlG&B!F038p7k?-PbF zXF`H(SW?2#yR#ma$HLB0Ud`sDU!8h|i;@(GOV;y&cwWxrTLgo~*iIdGsWHOq`WW-T zvX+xzUw{j5kWl;OO+w@j!g^-w7^D{Yv`aWB)IjG0KsD`~;yc;0ybqUK!CiMs+u}Be z3jpGWbc?l8J!;Fr_hxDGgML})467aem}-ZcT1K)0W^=)Q;0e;zcg8(uyTlXwzJ=oHCAh>!h=1x$}NS8CKHPv)LH$o&)GHr1~#g%;($*kk~Cq z`s_?M^uo9+5HyIu+t#LzhW8R;X*+xxcrbO58xX9Oqoj>}hg(~ywOu7o zVuk+r%LgFnTQInKiXCT9&HB^lpw;i?OEd`u(lSKt=|!wZd=gnhh^)U02Z)SP_`rp% zK-rNpGFg1UT}HGw%jjdz>Q9Jyhmx^?d$t?$g4>XXk{?`8{sxnCmdCi76_VrLvE>JI z!0jSY5PO#1Z(@_SdI$kG;2eg#Ab{5%ZK;WZe9BtXJ@v%Ij9wAx0j`| zEK3!kI4V0q#5Nh4^D2mUlkMOLBCubip82;HMJ`LBow<= zY3P!NRm0-s;a4!Xa~>+$CsG1S6IOSe+8io%{3?*J4c=1%;`qP9>`&I4*K|t7BE5|Q z@udT3*Tk3fZnG+!wdrF2SCU-pe>n=PSH!|dk3gq_mgLK~NMD_!v&8lX4BbChbMmo?JNyR+y`>u*Z*XrYmE^l=$J!do} zb<70KTXl~-jRus8+yNzbN{Nr<0tW|st5bB14FZuc7L@s2my&9xai|3qUaiR}Y(pxM z?ZDS2yn*v6RvQQNxbq!O21a(8l8|zwIL9_+Nef`^K<;s41TiHN2y=oZJW;{(ac`Px z^u4OLt3`TI!10E1npd#(r`JjS6Q#c6VRD0rCs}UzMg6L1{SSP`g8PgGpQmfDG9Iur z4i8VxNr5NwVq45+-qc$AbgWc!FvqT_2r7o`_#;~XAD3g&Y}I*U~(YCHQku) zTi7~N{SZLX39i^4AHq^Vpgb$VJ8dM2=Z6Ns*Pw{~Xu%w%kwJceqU+8-tVlF&K zs>Yjl$utbicf!nRAZTzbSt&AFyr_m&rI=~*>4jG4ZWI`a@g9u$#24zTFn`#odDVsyYfT0wkmN9;BukMCUmq!4C|9cj3rnO=a-rkW(6-Lhg`7C3 zbS8|blRz>9x#L+vGu%SmM3#%;5GGE(==PQ{^4tk6V8mQy0Ti$;)enoiV7P3DVk(Od znlKz;QeE^59S4mu90#QieJ+(`dpwCbBEleE^D!r&SiF1Kh565AGc|QoXxK2yP(OP=v!^Xi^x_w@@8|c z;C30GPIcUSdcx4X3F=>URL58yAn$6}BHyDFrxHk<+m5e!!4>)!MH@DvS7RiC$6>V) z&JDf#IBf$c*0A9#2wu~O;%>g_#W#+`#N4;Lh_KC!A@ziiRQF^x_fC3w*d|c_mFx?Y8ej01P0&eK@E(q)}7_jz-U&K zTY(jFUj^899CePw*)YqB^w+iqXO1Q5Z`dh*SX-L2yj8#8TLd!?nxky*ED5&TLq6eT zK6;kYc_o&-t?tfpw&(et2AW(04FJ&TV8C7yF27mbFDVh_{&6z_ac~(~#!fki(;vW> zkZ?|N*EnGLRO56gz>Wkpn7Q6r^NC4r+u=pzx!BTf+7hIyt3TEa!e%5N9oJywau&2b zd(SZ-KX9f-AV6-K%DYqgSVFl^EX}OQX@}#|YG8-$-!VpR4OVhq=31HK5R9lh4p ze-4;%%Q`c0@C~c}i4Jrj&(xVDCB~{Yq+tjcUkZO_8Aj82h^eb76mSA}b$5|BOT5{n zVYD$Pv3#~Mv(Lv5@doxAn}%hpqqc}nz!A5BhCJ^q@uaZB=Kg;8-4EA@Yph<1BTHr9 z4f8c3SF#ZjXYCq%5#pdnffcry>kz*&V8u)2&&J=&z12(kn>D8I(KS*CBgh}+ybpB^ z%UeCfAVe*TP8yoDzCf2Pxc?@!KCq+@r0EUKghS06Z}p2#k6YF{Fxtt-i_a15bGTFH zE?H91Ojat47%g+IZgJ@S=b*14-s;_A1~HQNeu}l57~k$;mI*XmRniHY<`&@_#N&7( zF4gHUeaG*hVWnvvj8uKQTQ!U9Uvsvu=9&$^by?i>?uTPUH6!N|!V&3=*23zB&Tdtt zI==}e`aVorG}EGKJV^BEGolQ4fuPZRL$v8971?-^X4Dtzu?Y%4h4@yCQL)a4?ZI|F z8u7k$LQ3VK3P_6A?#MOo-V16> z#<9-cCqxkonDCXj{9@;xhW_gR&N%Z+z5WA3%~gF2$W;gn1-()5x4vg5M9QJnP}T~0 zUhV>64J9v-kJMTGz=(vU1sQ2-dzNl5z2){6vAq+iC5ci|_|){Os<^%pU5cmRsv6

_EtZ``DLhvijbv%w(w5*4iAxPN(QECp)t(4qQ^)DS%-oY4LDD8 zbRk*CiW&ekBgvUibEOxfgzdR_GF^4l_%(xSPj*4zKIuSi=fUEh>kWZb85PobTMiJs ziaD$8X}!qk^QBUiVvf#yG>C{PP_Rtrbmaeer8Fl=Kq!SV=m}>5!t_vDgeo+Z?icQV z)J1nlkJ#ECn(rff+xH|QSH;5D{Lljo6y)cuE*r$hR`4~Jz^1-!f!tB7U3yktu>Cf` z*!Kon4INVB1f>>@;{3-HExE|};xU$3!Wr=i;`d0%^K^KEW}r<5cgKL~!06oRm&R~t zx_au?=Gm@bsd6hghj0aQcMM|ZU2#b~0hH~1>*Qn}Ojoppx0msa`T>iu^*b=PNK;>M zJ+_Nj^=RgJp<0cnL<@qflfd_D)SG;OHH!^oSGcMb7>TOoLvd9<5z44pY|PIhh*Y5j z(B|3sl%BzXEKn%SGG|#(K-^|w59ZipJl}M17#A1~0|ZS+5gVe9;GC)K^PzQT8gnIT zLG)> zoRp=R8MSEyS5w>Dlkkp<6qP8c=6$TK?FK3TVPBRf{V>k*$iv1upxIsH-MU{g8AqS4 z8+YmcrG4Xcf4wKB`^zI|p|!BO8NM}@q~;)%_6pFx8CIcb{L|bow}wii<@@D~_7FD} zWL*qIM1AVrT7ft&Y>|v^myAw$lF}~Ybf(^57%&UN=$L1+DVa!)oTP_{S4NO^B~d)i}YAqDiW5Q6-q*Z6}f$f<($>^3x z(~WKkoPZ39GexR=V5S-ghv=7m7K#mftBV5Fh>WkMrM{F}y3Jx2KD^bA`-AsvT zx&)+>ZJ6_i!YpxUEroLj9!2^Z<+X&*zrpiJD|upaI;uC74mFO5w`v)6h>-~5ojd{w zAYyT()zey#^#txXHutP(2`7O}bE7%RiyTwE&->8I`scy1S9`0+NZaIphG&P!FSA9H zHzoRx)b*?T-Cdu-uDi!|O&xVubPlBDA7{mnLgik<2jYj6fGx!0BKAUIjXc0w4ohIj zDy!g-Ta$Mi%C0H;(B$c46?I3g*4kM_5BSN5GZnYCV9?oW;>m0m^ppjb=HfZ+i_ai#pyfoZ*wU7f6hNzOljmWj~A6fiNfFtLEfTLY7WHQ z$D9z=9D&P4a|{*{j&n!~#UViyzkqo011*9jzm^jx83`PO`+pWtIK`jD1|1X0NF%B; zSvL#H51NaNfk!Q!(e;lMjY=Glu!PbDjVbeD4r7l`ze^%5M3q4eT>@3M<}%u~n_ zHB2o1OK+#8P=!`HPf0PMBq}0%!S*y>*OLDdY3sH=>~cqXC<0!aibO2Tp#7>gQ$8ciZ!pohAUkAt5@9;K`TbP(u@QEo$;#LAsd z(rvn!?5^xMCVTp@ik=!%E|MQsC&mp$eewc$>qUrPY!VgozwQ1RJN0_v+uEMiqF?5# zQ&llvT|Tj%UWecOM_F2k&!|CtQybJezJtxIkWZ=>M{K|u>IxI61F9Gaft6w#=347s zSO^z$S1Gzy_?3+M=@}Z2Qq(bQrrGEkRsDHfr79j|_k$~|o8^iXwPC(7*f_UQGC2<; zy&*riF`p+yIL1%TpyXPWo>Sxn8gSF=ZdArM-1PcAn*l(@R%l)wzSH&#uk#_;@p$Bi z>Vp&fmaN=kD-}&-8kJCymD5nx--!ap_Nj5N+5|-FJ(rS&v2;JGRZ;}`FJJ`6Rs^@I zG%NtqOmveM&c-690@$g2-qL{;x+Gx%E9OgL_DDfXR|CdSjm36!O^zjaLyS#>fVDg_ zR=NPqAg)Olpgr|iPtABjFPLg4Neom88&VcgM$nK6l|%g&a^w~%EH=f@^fd=M=o7xP za}#B6YM%_XwM$eD{nk&^(8C-Fx~kwOPZ*>O29bt}XN%<-of(VHySpoTHr4Q#V`tIPjx$exC9zEFacVj56IZ9^bL~ngbbrI zrGA>!M?>jQ$_Z-f==d1~v-C+bD~R!~@^QR4k;lO^R)cwD`3d`9)##CZKy!!lIZl$8Paq3$%1F0I?b zVnH{yj2DN-?ColO6Cvp&|PdY~hVeiEv2$I?aVt~qs4wxDY5WpTo z$Q=JxjAbux6*o8Pzz5_2v^?=#ja!s=<|YOtbVrR)CKNmo>}CaL;)u(*aMYq&x5y^`N+}EC@5%Q3^9;JV$& zleEB0Y~Sxhd{CSK5flJ4<@Q{`%N}A54~r#Wj4ys2@^Dr+8Q5^*68+NI1`gw>D>;#N ziS!Mt)(M(>gzA;6$P99*XN9y3@d=ctv?;ltdr24K5&sd1{2s-7C@hIJz%-yfH%JjC zu)v(l`Jvhchh%wJ(>5)jT#NosThc)fLh>3bFTCZBTS~mu*bLoR|D6?!ffuV*|DZd8 zt4lCAzxw4p{Boq+>HGo-GbF%c;>^v> z0_vp&80PAz0=dx&wLcBnhmDr_--pS;f8su{QsH#xEVcpOSv{p|Q-Au<*(yj2f@ z2995f_R}>fWM-E-X{^@adS)jV3q5d}ZXV-?rRhW$eD&1Uf-VXZMxI4 z7&FcYdI5YHf$(U)vy4wl3;!%opfPLA?PuLgvggQBZ-~2~W*p1Jqed(D5#YDXm zO`5BzV>u`OMEcOyT#1LOwTY~Wt?^N5uq`VHGm>e{5Hyja^^y9Bb`!nTk7KpGB4>=Z zdK$h&YlUWqQQ5on-)+28FW?I{^D3O~umhw4Yd^B5Tw73(I;Sq|8Z&5X2!fsbLuX^q z4kz=SlO!lxn8;z!5TV~ywdE^z|>eduMhy&Q1abFlPs(g2R&`$PtVi_klOb2*G zDv0$fWNgkRSgv{0nPovt4|S?8v>Sb2XA7q|7&==w^@^t1y2t*N9-GP5?IWDKL7lS% zyak6FY;5LCcIwE5j)(t-N#iM@jiH04!(H_7$6ZBFs|3;!lE{{83ugiGx){LA7EUX) zSfld$#CuMR$TjQ^?y$ctcqq2>;%9?9%zf%Pbl?uwR*sx<^8TnVlJ73&A`&&m1|!-< z4nANKOem(<%K5phKO0}jw&b9W&TVmG2LAKJj5Ze-Y>aA~6u~JeK)?ZLexBTi2~d}} z^#n*(@d1M0As_U@MK3t$aiEG#fH?c222__1C3+@D(NjVVOq$Uz0Q>nl3nIDn1Sqta zD=Fap3vmDY`NF7k>H7uEb40tUKZZSrur4V;NyzI}_}QGjfbC4-yAsYDm(Y(-)* zK4+@FPd>UY8f0IBIV&Q|oT%=`+x*b8Qi{?79ZQZi5atIz%@6*7Wsm&eRxYDhc{#hi z_UEW`WvKH9;rvjyhC6yB49Xdq2B6^Ra(Y^n4|b|S5ts$aQ#da)G$k)I5-L0odiea$ z)-&t0w-eN&EeDp<)Q%gp%1_5lpE&=!H)#Y^Ie}L=S@5Z3)z*q2-U1ZQ)mkVtUxq4^ zz?|2J0`Iin$7Yiy)eaGx4i}@_I*oHC|^^WduJ{rTST90J*>(k!2oVXCCvg1atstgj72dYl5x% z=)NL#ub~ybrC-tJ8cvq^zrn71bBLy zpP-aw-v#ZtpDnFnOUw9-NBXZ(i{(0=c6TIn z{Y^Wz9Oo7LGUD8wyMA=s9c?@#6_OD5xVj!-i25`EvO>_kO2mRg9bzDq7b!B%bXd#Ah|L3t${Uxre z`=l#%`Ga8J<-fv*jQNi;zt}|H3+#eM7*7)=fBI7mz;j-Hkc1&Gp|>Qgt&{+3smnUU z{^e}+R!QUj8OpWfG7)vz>7)pK}*XNBpY? zp(rC}z+F6g#&i8=#t2Mw$_8?ukYXnpa_Jn2bd=BH6JR+pvR3p^G*uu=J@$9%jEN`# z22(bF!Jwe*8dZTGk$JiT1`iO`?RZo_HHJnTG7GsG9!ANIDA|3RW#QRk`Q$Qb3=WUh-ERGfPL6di_+I%z;~tO!+hfk!Ll9}4uiIW zL%@(U@E5RpX-6yAW-oanb{f%@F9SWhK%9SmtM|Fkg~eF8R!5J6&PuwPXK4w})N}%? zWz&&_P+W!Oo^5Bbacp|M6cw?j4sO0qkcyOvmAN-b{jdn#{M(8pMsomaBc6h6I=*fv zPtDbGl`Se36Qm2;Ggl(KOh|bkWGV-)ztlv zRitkvC6sg(&VUCM7D;SvrQ-{obk3kzDX=PirRqHsAV2Ni-zECsCx$AU=mXE1Lc`fl zBEgt#!FySGrV#mMmJfRN-3XuD_T0bJV43rm4kRYEG(NGOBr`KAPM|ys>~ocrHR3Pj za#`-TJl#dw>I5dd_HbGRBVhy-Yc}a)(T(v%TeV!YAB#R8U-Ywg44m<;Udp2P#ur`G za?#6Jv>?7{Wy?h`XVKH*iwTvX1IIyJuNu$GGsBLD{m#PLA)mWy7^q9418!vD<_ zrj+~IHOqU3UEc%ek+frjF}42L+Z?@{_k3)u!qpgf?^P*@kG0xr^W)r8;_2Gm=5vi-3-Lu1o6wu<51JV)i3md1LB1&`dWO^ zZ{CVg+*MRgD4rf)bV%+oA&8K3^bu&$k( zho`DHA7JIFQJopYw_g!TXcAu&eOL+Tpbw$>&xYT7HtyE-Ja}r)gg%KAjTg3r^fBSf;$Gi|(NB zEg2%TZrJsQD{v>nPhj#a5Sk8zX0BAL*x`ds@adf<3(s-)#ga~NKTx~ZCI%Y0tZ!e1 z(2-ex1zpiQf@KF=-T#n5)a^Ba#YL0@3XGXwpSnChO{q$3{&R;8>|ovT5w70u|? ziF!MZM*!2=qX`ql4xJ~_-BI83UP_D%QpYu@pl955JrJLnd9o;fadU&o*Wejy|2Uu1 zP(aXczn;axyBenpR-i3Z-g%7_T<#Q1ixup{f~A8{Xq_(f#iP14fd$nQ)Qi<-au~?% zAf@3admduxD0f0BR^fp<35(hF3csfCS4aL@gkOICYR!f23F7hQJ~^65TciH_6rSba znffk(Z%k&6$2Y=Eak}%86MH699B86EkN;dN&kVdwRQJw@Qr!3SPtb?BPFsES!|p~^ zM#uPE{8{a3>=vgPZ%4oNp(yvc=>^}|Hp;&^hCK_#z#H4W)BNm4ez0-F>mSxL~cj{#wU!^~YXx?uScwNXT#!Msvnk%7K!w3VIv;29N!UEeQfse= z&t`jCO-n`}kn?NyHix=#~o*dp%ORhCGq68-pN}95EDS%-N zT-^enk7$oQ7l0pPjT_+FM z$bj_jNZZryABL374xkt_-YPRwF1mmuFp}z_Y_ctvX#fodW|)MnmTUAt9BMd*Pb4?M z^!F3iW}ygme-Gh}TC`aLFk7ZzbXj=NgrC_&y#0XG7bHXl(ep1aW2Qv&C0it1ic^j` zVFs#w*fd*mT(3HuD_am&uYbwtoa0|uK~17;&6}tKuE9{%_}jkMr_t8039I|#>ZmLN zc`dN)2p>M1z}uV4Oo3gX{CJ2GGj2q2GjA?i*7Ai@bu0LGCGqQeXXJ*iOaWqhp`%mW0Ua~Xz;g8#VkEX2i% z>OB6A5}8Z(EY%_h(8WxMOk~;-(3#lF<)F$|KB_?$!DkvjRfbJ5HA-FBAf0!kC0)uVtEj@6_!Hgw)s$SSnler`6M>MA&Y=d zV3^eMbC1L)nmoUy5}=bE^3ZtYfj2dQd}I+Taw_eRA<+LG27$KzG3e@F`FRj;Bdk5E;O441U62ax>so=XuP?G0~?31Mo?QpyU$mF+&kH<*toAqcFS}+$0KHw>g4SoTvrF z%d$V@T~~AcRW{t%o~~I(ux-glgjCx$ zOCXK6ZO?t{wr!9vDy~D?vWRW#Pmpn@xa^PqtH8E3vP24aYI?e~Xj3D1Z;vD4PHWM( zQi!`2jhq36x6L^^^qtuNMT{H`8vjwB*2<^Jsd5=PZ4_E$0l6k4awGFDY)`i{Te5NB zx0sFdP180Gs>HZDnIg90BE)PQEf{Q^m^xlD8?$lO=qqQ%##wL?VdKvJ=2!^O30d$I z5rd`U`8O|-aR#I+3ykPY_?-co?JUs&s+X`-tJxSDU;IRw@q706aM(m9n^3nd)As#Y ze@v8<1rE1q^TqC_^=t13iJMWfoI*fg+WrvYhP%Mb&l=Mfr(Y-B4BL`LdzQ($LZ+7D z>bfbo*gyv~v9*RV$-qiT4#Wx@V`S9uY_2%eD9xPg@=o=RTE)MxT4YI_r$ zECmepfu{Ct!fogu&B@Xz|DcIXD~LJwIC2+$L0NMef|+V(b`4l1+RCy4EQ`h}lrX0j z6#x*Y(I|$phy@b{vxNFHj-U{u6SMAaduvx^6cD`^^-J+iTL!NS>+YfrgNrgm9ops- z`XifKGO(l$P(sK5H%Wfg>RC9Ze3RY~SdO%AgPN1Q+*M63Op&fY}n)?xZBSNiE zSLfDV;0K77`9Hw=gax4fWkjJzmHd2lCqD8+mF$lql!uJfv$T17l&|y!&c*F1I7jmW zXGzIaVJ?N^3L5B9vxmd>jGCgOD2!%9yc{n?dwic{wkQ??OK=Wh3FNkuUa02@jUy4x z9+7R4aatt!Qh5OY^t=-ng!}KOw%22;Il%g%FjXK3Lv+o6%{CeJ%?eI%Q@toE~gpfZ1YZ+LrM`ODd&wci=`RQecwN7rZ5`X46G1y_05SgFB4dl;E(j!ZKBG*#rd0&(%f|WbjHe?GORcfM? zwgc(C)fvnt0IsC-ps-6Az9WQIQa~^x+2ozMTAVDo!(4npT^!}^g1(uUl^^Pd>!kL1 ztEy2hyc)a7%-n6VIs8N2aNm@mdHaC60)NZxgZ}*t?6%a$-!pAQZR;^rvme&%_`ZD zXN6i@p(}uFa*Kpg96X6u>rZz{W(VSak`7Qn?4FM^RsWIN_GO7CmT7(<_i&P+UEh6R zh7=6cvJ&0dnSj#LlRYaG(lE`@e9l<3`04B%;H0U&mCZmYGR|I_Y-p zSf&JW1G;OS5N^~((B!FBrn558vyhO4w1)_+RNyDF@3HE|Q(8iuw<2to!XozhxBo`# zFRouy@;cta9am&CxyR9I&e2UK*p#z*@+;U4OqNS1{fi;K7P%%OhWr*84G4f~a}q14 zLF1z%dbKUp*EudeXDa}aCE=iKIz$jfYjJXOPf?_?9$ag{vEN~7^#oRW>({xSlFjt` z@3#^sk$A63C;qdfDU>|VsNNDLG+W6+E)^6f%IZ|9#5ooSq4D9&(|=C|84j|S)e<$E zu%sK|y*FX?*U?Pw>kX@c5G>XxGg2bgL&F(lFCl(Hm^w}bcRPCy^p;sUK7uLKK%ibp zh$M=;r%y6BszTk&t~OyYpEAYH$&%&NLB(WK#=tVljUsa~$z&KVuu{5u zN&iFRu|T$BIpEa%Im+DBT9-iF)}zdSa{z4l(P}THc)phwTohppn`gd3$5UIeVleE ztP#`HoQj2^nwfzlR+pL)1sdgL!4Jkqs)CoIl}5x@T0;&ARn+k#3gwIzp;TWilX!yX zW^h~F#!wK z7A+PPs83g+hM$;E6k+axgUi^DdVDHaLPGrMbitLgOU0n{&QRsW8l%Dy!VEs4ek2(sME-Aee{my`A>Qu085Mj6l4A*)`)6%WCMv2IDu4<8Iy}sT z;LexM=q%XD-8Y~CFf!zFpg)kC$4(q6h6}SqK5BbR_bS90qy-3m}<)6}&V>=Vs>~CIN8C4IE>N4^={XBtxcf_d=ts zQTg`+wcjApK>L?q5?DO@&NUg$A8*#IkA-3AQPL}U5&<{pE)L{={y%ncH1->mM;20I z>`CQnA6HK2>t97m@mC3cslUHTYav_PY|rd#$kjqa&vPg0?Aw)CX=wDMz( zIM9cD`qXd2r?c2}Q1dCQ%|M`ZI^UGuL6llSaA~$VBv#W|xDtdGuEZmpEf6}^%Gu$a z{vMm^emF0<+uDx=oWtPC!&c%Ra#pt0T@rD`onZnEDkbcH(_{QzR>{Q#trysKvW<%T>w81rHY<$173_L zsRFODFD_FA&9}-=dY_Lf%1fx%s-pSYZ2%!?DMOgfK@1s1^HvWaNOtmN)+NO(7SkVr)PbCFko{{-N}2C~ChAojUb&Wj=>yi7Ep z;zg(&t4-n&n`+G@pb@cmDk#MN(=^G*wn^>?7Ut|K`M4G$Sdw2hhX7;z(mj{rwGV?u zQ5>+tmV?_OeMIr;#q6ut=?*LS0pD7xKYn7bV`Lwd7My_I_#Js)esEFM_5`|UuuNbL zgr-+!mfR<#{w`RgBF;ZLK&;@n6TQq0^;tk30nxz|dDtkK&aTWN>XL~7ZM$Vp0b^`X zFXC6^b7(@Nk&2`7MwiQ@F-eYJHr8qxW9W(~Rct=zYXQOCyyHTp4Vih)f0SI-;0=^DB{) ziA;q=>X_>9G(H5{Vng?G7gE5;Urzu+HWQuPA{pc~6cndC!CR5&C?+H7tYcdgCE&(L z_$|^i*KIWH#7^)lD8uETi6kd1kMwg1`mOACD-tA>AKxN!B>}pls(Gc;5oG%5j=u|t zmg$|p5Cv|T2AS9}NlBT$#U<0_EFqlAnq^uEu=5;*-_|x)K3>IxJPq_}TbJx0n z)$+7>uOm+@o@@&2bN@UNun(fVdb&h_J@nuo%F_Xk+{hE$sciNel_yB-|52XCqS<(3 z`_&$4`TvDH&0$k9c{=~!e=JY4?*T$6Pb%dI^0d9f@3OJBn8!=cEy&Ydph*kz)RoSC@4>$=TF3oh7S-~U zEFe&x=3U*CMO&>r5{nk0ylUjC>qqLqRV~RAA~d`8V&`Bk<5cbn(`*D6>9B>ZKf{dO z%@cb9?Tk(0-8Ul12##g3xRbM9qy^W~A6j<%PUtZOU1VC_KhF>O((^;ud|kb1N>YRe^yDKV zQr+mC`H?hVki~+gR5lhVz0;Y(n%{jL7RoH|;2rthKQ!~<{F6V-Ph5fdZK+Qd(asVe z3ZWYdvaLiU`QfAc4y*fD?#aqtD{-5ZlTsSQiTc^-F+o<3qpNLL|EVP$P~HWcfWZ-h zr%fBeM=27|h@sCEhC(i|LT0@Vfv4igc-jVFSx0?2l+~gdp3i}LI?X;I5Z zMU^aI2h^HKA|np30&$EtZgjI zIEXxaI}rIC2}?xo4#(wO#a4my;pbd>H1)D9r;K8NNylB)UX3y>Z8A|J)G74kmF3oIC}Esz!E zs%>QUK)DY_bOmt~DonBL-U#EAP`1j`;HG1X+TpSh^ws?o3(HDGri43wtX@YvLE{_( zA+iSoK#t8SEq+-1u|zsBz*MdxjA%(_s1o55$1VBcS;QYY&bcr~@MzhgEHB zhpS)!FBpv6k4X581eRjR4 zC?qRsMPMt0$DkImFfP{8SvrM&7fyGWD@q_RvBR3EuIo651;^J>-`9$G?$94w^~Xl} zfZQ*6z{tJr`ErVO8j@6}SER}pS3pj0cB1X>`Kw)(!2>R|i0(HcN{qur2n*(&PtORa z12O=x0<-{NDNAjrT5FdN@}L(*jCtd*$?3J`Q-)~km1NB7HgM9so0I0Qzzi$wosc4H2gRpgS65wgka{0gc*P=1R%J%30_GJiuBr7k7JO{BsuT_ z_~KJZ8pSo-Taj*wL!x5w3`Wl(%;l70A7vYY%SCT&fXWXc^aU}*CKhlA7LYLEoAOgK z%qyh`c%U97QnULU$>$DEkI`sll8%*w!;rJ z69f4e^3yws+~()G&2%8pJ`TI_3bh@T{4(m==vFcfo!Jp;H@I3J)J?_0>8 z#Ag+9QuJ|YB1&`;fX!k=;id)5fev5fnryagsbc!cyplvV0ARi;Bk(q+_uEPe8&k zFPe(5Q%q2nWXd(#_i?B)7(kIKUm{Vp^>k7N>Zd7HxT*rqOINcKDORKC^)Q45K(e`= zoxnv(#Hpli3L2}VhAty362&N<78y_3hPa4Kh;)#nBCo+sQa3*)x*`0ye7rLND&kvX z%47B$>m3ttpI&Uga3J@(Z;AXa!0MY@sm?t=o!A3Bc(y)w0SiZ8@i!6)@K#+vjucSW zqV@W}wcsDfddf4Dm=^Xw1R-@81}F=Sqh1KQ=HNgFcvg=TSDJuBuE?}dzHuWeB!#_8 zcb;_5DcDJV_o;*}`5u0t704Zzrx7;8Y7LH5_#01bDf!FiK2{Qr4No!P8R8)3XS5|QabX`EyAc#>{1#}mDg07ElgNl!p_~ico zIn^^g$q=%9d++7@NKbcHSDiZVI(4cF)W!Y?7F`!=N8NM~D8#k}lI2^QnB`l`mMct_ zuTj`_sGSO1)}q=Kz3#4yg6b8Y3UNw0Q%ylj zzZ6BvE}&Ps4-tRZ@A=&2vDCI??rahY1VE1|s`e{%?12*OiW`1jTBOsbg1|gvf8ziO zgXR1BMKjQz^LKZk4gObPxDt86hveQWv0bc(=L-1d9s>4=rZ?~sIXwg8A1QS_7B6Rc zM`_sK{BJa^VRLZ!N;&<9`gZ~AGUxv29*3BheZ!t`F=c(Do)|z3*=OKMYa`hjQtJ-> zj8EEv0;aijtgl_YO))V?Kfn8o3_*XzWgGs;#%F@pTwr5|o%07ZOycS1$vK{4JXwgS zh22!l5XJNl2p3cbrWnXR;lE2kQR$pav3z%|G1xu&>7>{lzJ=JWPQWe&PLO)Iyd1(d zsybq};Hj=+w$0r=67|@r7b%99x*fB>!X$3%9QQVkWS0xVl7HO^p6$nnL(a3}?owjB z|N0}KtFq~~WYKNGA3FR%r+xTiy81T@x&^y=O+q!TYm&?tNPcCz{Gs7MJI`VRwwmAr zLq`>t!9e_RDY4SQKaJ5^x`FoXv4`naeZ{0+AP~(gKLE@O)i^zWLwG~=72K~671Pe) zVIB$`DQdfaE-wu)2mB)urs2AD|45PRI?^8c5YwD;fS(MqD3j4{(%H(%)IXdpbInZ! zn=WfzszxsmS>Jj~Oy^ec8xdtmQujYig$G7Jb?|naapcy!ih=g^uvm%s_Ro5NptQ$V z7V8F@aNG_S#X&aun)vl8M*mmSI{7i3D|wi(5#fF1qd?@InA z*8#FTw@1JRdcN?%q1vo&H78A~FPxsQkC9%C0X*WE1iwFQ z`qsUnCJW2bu*pKGFxx+uy8~pc&Tnqrj{o1{|5sSxu@=|QaD4>-|AgP~k_ai1As447 z{jUk__y@aI$l2NuC}1${P<&kuV)McLVwNjawh`q;N4jC!VJp;`<){^jE*igPd=Xc4zH!3#6 z8RfoC{9fxHyVLq(-%pAaNoYUz{?EzZ$KiYUm}Kz9-=CB8eXRcP$Ga#<)_#`r`_nsn zpY0s~`=syV?f(avtU{z@^=CNyK_r!i3Gey6s15^Yo-=T$TTqK9;+y63NH0^qz`63I zU6s%Bl+Wg7sd+O}BELyLR#Z z(@x)Ku$$S=A8tY;$?DH=)|PkHzWM%ZHj?an@XOBmA(5U%!`z0tNY4?wDxZk&(lPDI zC+aWmca>m&T}uS@UqI8VDx@!HXm5~>nVHBYeZN7?7Z_6yNIDwqsLLi=!EwS7rS2i}R_^Rz8k-4S%=St_(9 zYqi~nEi7RR;DaGGud#)e_Vw?YevN~7Nx#1g?lS$Rpg+az58{RVWBP*)CJ4O2ryvXb zPK=>b=(R=!c#~xhIo^X@P=r!}(J>uA25QAwMbvX1?}3d1V54}o?E{Q@o(T|wD8P`K zMj~W(BEJ2zW~=-GmdT9D@{fUWDgi2UVHC&!V;nL8Q=t&9a~E4NGPfPx20sV55-+7! z510i;6S!uicAfzxKXa9z;S+ zWSAw&1$Mx?Z4MTgNeV$AE zb4fh#t;%~P8BzFCI5opAAMPP9gkB=Daz;@*{DB`em}u7=2bl?xu!vy~sdB!;EEEQ%U@Td16|)y3+5WEW#jf@F&v4SnAg29f_W14JqOGpk<6ZanJveBd z_PW~Na|pw(`&$Zm&857$@e;LRI>iZtGh%EmA3lLe(nm*_hq3XM+Lh|3`aPps4)s>{v!!x_dZ;CC5;?X?D3!9JQ^t2mH!OyGMRr4xq#ajh`>J&9`v>B zu9k+lp11mHR=+gno?{uvVXZGi$t2Qu*YN)%dnfSs=?eV2winY){h%N16<8`jOqF?< z7+kz=XSY2yKe9219sWoWnFJ?*Zi=^ zc+DO7xjS3g6+iE~{(d{F|4&Emx_K;glc;QV5%0I-$A( zF@B%Fp*LRee!`{x2Bu>p(tfqS;d`nh%lA@m>RVcScTgn`y2(ZZyJq108bkrH%VE|W zH@nZBuX1C941xvtr=0vDrW*PsKET6p&^O?|F}uM+Se`nVnQvMOhi0hHFjHPhX!mgy* zPk*2j&ROgQ0vwX?(163eP_2vqMziZqX6m_|uj&8I?>V(MKPOLMnyVZBxV;QmbIl8H zItAg&M)4GT@Sn6nU<^upHdgABDWrL^bTJsN=RRYALB{SFU&)#ujO7;){;02kKt$88 z7g!oilVP*@P*@=*V!-km4WN?U1#I{H(Fr2+JDo%Ahp`8k5;M|o+F=cw5ODS}ud zerw;zqPytZvw!gR&2Rc<$R1?{rf(mldHco}=ob1$m%8P^o%XGNtZ%2_oC2jOsJBUa zBzRze(#07dS9-F3+z3$xhqzISGZCzO=k3i|s|usj+>3=bDJUYN1x)L`<$F0)S@j?i za(VDipv3ct7Cx*WyxcNB+r_#1B81Bltdr47?xk(2kBoiUCN z(N9Llcmi_%_xU?ovzX;hb}wP&OnZC@iE)yHKR>4qC7I?3J-AZ0y941_SW*i4((DOa zA(@Z5Rh6jHa83n^`H>b>Wv+F&2GKg76ADc9VmV;?`M^yOwXzsD@T$d?bG$(ymn_CZ zXysFkj{`yG51|0^gC3HKf{`56Cy9!6<%h0f1uH-yi*{|)UA2`QJhl87-008te`avYYoDZ%W3w(^UuD4t7T-X*0EW#sU*NH2c5XQ zc<6DVqOs3n2;grhW-%b#7R2^A&fuyTO%PXQYzkHLp3)SMrrjf@&3p8wj6u$Fyo7m~ zYf3}Ls91?RF#$4B{^S-#1dNN>pA27TQ%WkS(^RkCcyTgB)B~l82%eft-DD5}e2s;{ zxE6bA4$BS}uJzA;7j5ZY=hvX~a*_?}ukORn_rdsQrF8y}EQZc+)6Vzd?=AWp`axpz zRP$e5lnk6R@Uem;$?hm#tJ$W8OS%91D+XP;yqcWL3Qy+jTh9m_Q7Ptb_QnL-M%`jj zb7(0Zl0*BEBsjVKM%S#NSlY2t%1Ym(B^klOm;AFO?Wyor|Lj{pUb03rsvuJfAjmH{ zUrlStQQOEH!N^M`+c%ZqD2kFpwvDj>07MLbL@mn#0U0-NhYtvPo_(4e*cVn9T{>XJ z2=T|3uzDmrRJ45s2bul&P@0W!$30_w-9%sO20YXEcH0oRYVT8pXdQZ#HTfii_<`6h zX5E(W*71biyNx?@oWW7BzxJUU9jvs0i^JtMup;Jb7fJ}R)Pj7!WvmS;%FuZ|kciJgIl<4?a9`b|#(qs^^VR_6h!n^`Aslg)7e`JA= z;Sm=#Fd?Gk!TqgKQ!0c!F*Bk(;7i<*XGJTPeE4o`eQlv1zh-_rAPK1n^3EruxG^ zo&c^u3N8Tre4Gm)trYkPEdfJJJkPdg{4)_l9RPf083Dw81gB)s9EktT1ybi^xP?p|-)NM>l zeYxgvbZGgN+97+JrQwM*oF7YoT97E_9D{udn_?Oa#WSDpf{7hj>ou{hi?M$aI@o%% zL>DaI;U8-q>O%9ZD*L+cKhc9X$W~Qk!!|s2j+Gf0wVN?h$Pk6)+w$)Yl^iRTOsC^$ zJ^_j65E&4U7P)#WAA&vRa2j>9bE<4Mmx$F4BHdoZ+uhqAUL}tFJ9_DUApQC8ymPsX zX-*78dmoP0z)9hp0I#y&?Ln}G@aGFeA1qS8)iPIfB_PjXMbI6!T;jK8hMpw~sLf!I z$TcbUee+!(vY|Ov+#g)UtkFg}ew51u9)kL8;%lur?u_P1jc`WeHI}eObpx%lja3yO zLT!6c3u-0xg*8`QcTr96N%c4Mm~@Fhye~=`n`^Y&5`GJ%r)tVIy_)-py&s?)0+zeZ zhSsS*%tcJ5oE(x|oFTcd57J7~Ydf7kp#1C5@%#;ra6JgU0JnkA3y@1JZ(PSFH%k)Fm5mxvg&2nvwSstZ}>-*0)RG%-NGh7kZlt2(V zx+1xoJU&^ab_`h3L4hH)ecfAH2%x$@%9D>x*CT)qKOGd0K7uNSkjo)8t~ejrWD-(+96$ z^GtPN^I)MAdwPfF)kiRzl*PqP49EaFeS|DiM6&$H%QgRTU%X7U&$}E6k5B&#DUD0s|8a-Cbpdi6 z?{3CQnvmQ$98I=1CAN1s+JnGM2F)%0G3STczn2}k_$0)`5HIb6PhX_E_vm}c zH(Ee8Y?tFAarGu4C$?lPCN~uaB2@MxH25nFR;CnolasTJSPSDbCnh=>P9bw$nmVn( z-pj~6Or(rYgmuZ2u?p+}z?WrZ9pV30;Ri620UK}-U~A=pXp{7eyC72wGXr=8M8BcA zW-w&p+)Ipyaf>-y5grCs1cFVgXuWD(9Znbm=tLPiA#&0iYMLyLZP=bx#*P~%5im3+ zgD_oH@%q&46XzGsDg}U^5n^X-%z>XA!x}y$g%;r6S31}G@fKuN6~Y)3s5OR0xm>D zWBD4Q5)E@ukrJ<6RrcT4|ER${s6LTi872jD0!{H&;9!^)uj*)o@D0I|Pm0-6205-Q zfFTml&EgzR$*2crw2p+5!3A#A(o_Rf%XBW66=ZX*Mjlsr%F5|@pG`O&eMZ!rAZD;Q zn1+!^?zg}f+0t86MK$(&G4le(Q<&q%REgsdH@U+%F}?tx#`3uJ8>Y;%KL_M7Y@!kI zC0q-rp~*SMBLnA{y3wdwXpJs+Y#f7REuel(#~PCLK5Wn^2#6bO2)z*;m*QS8$L)W6 z814MM!J(5eN{umRNB#IJk=t&*MW{hmjDwSAPkhd02XX=iaBZpn#_9apD#N&Zb>OIV zJXOmK*$#OjVD;E15c)OMA3hj`bd>jw@CbK60AVXwzcPxprRV~c?6zlJR}XDvfk$Ph zko7Yz&VM)jZuQCBb#(S#sI^JSF#@NDO1Qp`mgmA*Eb?3Ib#DN3ihX%EU52Z) zbXq0Ofe0qs0dt~N%Xgmn4DDjPZugXSDT`>bjDi<%9+U5|62$ofe%XC562GIUH)x)P z2QJMg2Hf$R*z?x_0q6}1F!d4o2pt%KwxdnWd;@zfxoirDbW-KUn4b&+04T_RSZ55W zW-1Jd2$m|T4XOxoEuH8()(FgEQWq(fY^Pnd_E$@Fv8JMes6@4bUWrm*8#302Y9-^T z-GVBu)*iDLdc0pu54Y>@r-UJCe_Qwl_G3m<63A$(Gf*IYw$R7@)uMpn+P1p4?%$1u?NW3_c4$-rv4T}#g`Q{Wz-=$dx3q* z&8!Ie0(O*`yX=-Qos$J17IunCV-T!37?q=!Doasa!w6J2OpYZO30;%N6LSh*o&Iz% zrdC#pT48XMdL&N zcgMd!*)bxf?2=YTbZVV~&RE4hNMkTM4l@9wbF0&U2WK%@iA@n~K|0Pm-2M75Ms1*P z{*L_boeB7DpV||wf4f+^1b#E?>3cJflYBirjnHD!FH{TWMsO$qf4;WN=MOK(P$bZW4 z)lB8wE4CT&@6!{v*W=c|&#BNT;`VU$`bU2R`=MtPA3TMKU~_$g3=ukfENT$lkP%B3 zf7tJRtx5sf$e3?1R4)4oUT}A+0Z%ErQf7}vOc8r>WMR4eN306v;R)-0CKUlr&dij@ z#%_By#BjGYIf0;ZTNBr_)SXQ#WoHv=LT+oah}sG;En{WyzMADa-vp=@snoj5>UCa$ z-iN){VKT2EJDWUziV2m+;zCI#6-Gao7&7-vDwI1#V0{W3h(s0vLP>Y0R2~D%_WVP^ zs&^1p^Uf5+C;GAFyP?sHJ~O5;zD*)#_`|2-L~DF%pLqxg zw~m{?Gi+)Pm-`mke@ruhs`nHDc1{Fbk`Hv}D(6`Iw)gK2BJez!4&zPnXcPTm%a`{k zwIeVIuRwRq_26IRPd zF>$l^Tdf{2Xk#)kvM6E&0f@MWmi^XJ*GHxXAnBw;9;(f}=&x)HLdc3Sv!7y*I?PSv zl!7=X;2LEOxVCmARux_%u^Clic!l1fIWZ&z0g_cm5aXUQ7`#|oL7_B4mtkM{{wFHx z)y)PKup2SgI_f*UoNKJp%W#pc5jz&Lr>BB6mqI>_1MAV};T+lfR^}fb@&T6mt+mu% zkwuy!V7XVgo=S{%E6i^~j-YM|WsG>@o>3L%HBji=_i+!&1%=&PmE@2+;+np~J^(@! zk+6BM@CfGTh$JA3&H*dhCWQC$&Wg|5@lH)|x03Y7*s43Hpt_8eG>LgOl?XI7hbTd_ z2#qpel}uN}_~TZMESUnRwAnz`f~)O=y=o$jK{>Kvl;4@DCoA(nY0t|*z79a+bf& z!}KC5zd^vJ>$DoM=&$*g5iAB6MAB5m43scg0v#Z$;GC-1jR|Z4`HN-7BK&Gja!KPX zmPEzTDS;Zz;j{T#2f|9T_XDo;zo)ZUPAafEOdz~Jlr;@iB_e}baVO~?XY&?<4jo{B zzggL<0(&x@`5uKv>$CGok6ZoqmfX94dqO5Mg$>NfiWq^FAP!r`uB!}V)waaoN6 zQBrICbp`n~dzxBOTbGga@_lHf2%@iMXnny&S57>>W>8&ik3l@d&2{^9cOfK@u0?zG z1(Pqks>a{I{rpg{7TYa^n`_ct@XTU6#_uBNpj!t>u}pw<^&pvl0hyot2<{Y{7lR4K zsT}y$V7uiT^(YF+7R6BD`w!+GW01dS=64%_Rpli{g+QGwdtQrD2l2EN1eUg-HfI%7 zCSn0}G;kRud{cDmJ0zV_$Uc-4yyuCRL=Oz?PWKbAzIM8Gf5 zOk#*KOb6=ik02l{0zF{dk75?7jRp51k#mS4STGIp+nawxXD$bB<1i+|H!<1xnrpMM zH)C9N^*Y>}kekgmNLK;S96SuYALM>7Bd*$u;E4uj$D=oy%2it$;NY|#^g@xx&* zjHnhI>H@kC;`(XonGmQIv0_-aRSuVe zwwAZW9Anf8hTV(}&fwsoNEOVXXk2LC1uSIw-VTuH=rT=Pt~_%iEqs&(UqT&Z{;(gu zS;I}joKO>q=9^Imp=SLW5_z@#=@^Oro!kcg{2X$bj6bb#PA$_$#D99b3a!;|O-mzD z7UiVy3Kr3;Z{rlo5{9+6T&^evbHLt6VGNM1+Tu{rALoh@IFA+42+7Mbpaqtmk_87T zeB#xteq~M;%(M7triCN!RQ#oD$Xh^3H{g& zNgBiG(fh+`c#S8%n!fU2!lgBP4HM5kJmpF@1(hj`xc1~2YlOu)ApF|o8D&UP1Tp)e zC``0{pIg)bxQ(zP(IJH%CeD8uOqOWO;bZY2cmWu>kjs0(C-qp!|Hl2W9qXD1v#=JY z6dLZhg0-TSG??JRWBm>N@IX!o#k^7Y<;y)cYtC-RRY=*#R|x9*!w;RsYT#1wfy)+D zKNEy3LIrd?f8scJzf9_@OVE=si zrGtI>LMVR3Z9?%}!U|kTwcLHs^aSAVY|!6-i}os8xeOQ*@BI_W`HmSw_`-?-Zm@`QLcXep&Xw_NAaV%h9!PXZSprYDLTAmiMUMvNAN6DUT_i2LSP6L6#51{cD&sg?={aqUS1|CV#1bbO9 zD^eM}L*DR9wO1=bpYCYgC;kk!>C#ywI6B5cbhN${qLcX%+A!)gdQY=FT|$397_D#N z#TtX-_*P9hHfWuK{mAR3#HxSyfS?ROvqJ~q{JWc}4E6v}16pskzrgG&*1e;P{G8;P z17w2v<{m?}M!Bd4z)*ykLxUHqS>;DQk}!sW#6k89N+Wl$rclwv($3L121~~yZVRt6 zjR3@xc1&M1er`R(lJ+=)gtItMMrkxhdJ%0B2&40)I?>~_+oA!^JzfPQ3;OuHN2tf# zan6;ueF;peXtO)^%DL!XG-mbzdKQ&McHGmMwTu{u+(oM!D!MNMbom=L%d=Z3V>oiG zg%{LH{UEhYGPR;ET2#~uQYF-Si}WQjs|}xoibiU!oOVJ>wp<>d`eChkZmk)+hBcSp zMDEJNB~sc%l>>9oz)^2myi3xd4Z?MW}^>?1&=;Q zsg=naPMFFe2-i%+4~Te*fVVPd8!NUluQ-~F0%Lj9YT1O{bJD@4Kx!L#98?lNqnfw| zEhvh3oXy9%d?JF6CwcbyuaS}v4*|w-dZb?Ag&a!Tw-LrrQHpjqjE)KS2`cU(;9wrP zs<{^cXejaq#o1)g!(KKSb*r+863N&^g2B#1DAcrJHI}p=PHr5n<$^S>@c`=r8vE8X zD1yi)J<4cd!BIpRSrqzDlz{QU7?*kVPn0cAI$=X3*kNLC+&aH9kYhckT(-{s5tFI76>dY3R?e+9Xc1-a7JH)>X_4M; zvRhcBw-oXH{G%!~`>gRwDM6W}l7sK1Kb)qTIEz~5I8N=L-^Rr#9@_;MLnnLAAq3d@ zewErPj2){I{y;5k1?ESQ!IN)~OLVqfB}zt>_QmOj zO=J7wd~+y83qduT8?(u!=F6k2u$` zx*ybJoFW}VfRvUGMs@%jirEg`s5g2~fjnJ8C}=WDc-l!l$_K2opcHPC*R&t#n?f41 zBQwLKa0%(79qNH&G6P0L1!kY82t$q zZ4MDctZfP@>}q;csW=Bp2=y7hu|Mm9CO6Zti<{_yzYNu{|ts&28O z4PVhMS}fO&6_eS$avOtejLuSaXs~y1!DmCn=m>J17h)J27aIm(Xs5wy+fbUMAPh0K?^I%efgl4|7V|Fuwh0H&s>7f@Lo_%wPodsF@SNkB_pc;hp;vF%wHL z(9SrgqW3{TtE)Ba>j%1)3q4jX4f6q^RE8w_0bV6hL01j)RDHkbiQlxiVrdb9WPAqe zIY#~p^8$52Wda*>HbzYJF#m6>i?iz5bK~x-i!@}M#L)j6OehOCesqY-jV{_e>Y`?T zBF+;%R#g{^Zz70YP#4QmcB(EUg3U$J47i7WO7}OMbSQ|jeB#v;YOcKGs_H;tn!n*h z(5b#Q?V{?-u!YG$+|2JC5e~0orks1<1`LZ3DpP+`mI=el}Df?!S(Cxm?P|p5@ii!lpgP{P}%|PUx zKtz;u3|~&Bssg^Yi`g!U%+1*%QVW5nse;~Jfcqv2ujs(guWA0qC$dFjwv|M_4j#3( zB=U_pbPx-#UAZqw-G*Runm;@cWwCw2oas5!xQ9Zx5AKly{gcn%`0K%}=9HgGBJTu` zT3r%(*PP>3a>%C9RzC!*Q7C*P3Nd%tAHEE~O001|VHaF~8xUACX#Tlh2({TTR_#iS4TZQG%0J;1PHSz#cD3NVJB107t$J*tnDHuHvpH*j+ zgr*i?+FGD}-~c|yP#5mdF#n2wck|Eu%f5W{kQpg2G8-nC`-r)ZUYpIGf=e+fzU5+m zfVSvsjzr=eyqm_HHqs!)LaVV(*sTcrDhNypTPX(lLF@2wx8WGt!o&OxTd)<4 zKinH?ho+7tF-R{d{CfHdApk4iu{K!vz2CYOHOm6YSY!M``>XwO+ax{&ETgEAh6txE z{nK0FSr+c;Z@86hHq5|ZMkDHAUQ43a<(5XzgYSlJmg5Dh*v7`eM>Yy*UkM&6x*rue zzXQ*WdTggA)6M{j2Uq9nRB1DDe1%rsnd7l`#!CI+nEr5)eX+QNohy9JIAGhu8?d-GEov7Ljy!Yu2kpTYU7AaTF+Q;DOT zxh7Y9BCNi!o9^yR;s|`G=+&u&rWg`O@LjjTWlfOpK45@>q6$IL>j)3Iau4*}cni?8 zkBTI}w;#v!Z|ibl!&b6K^md9SaKw=kaI_8=7e|8(j`*q_js^=_1fYGjQ#hA*zoRiKU>F8>}L7k9y$(@~bmB56Gw${2`B{)gCx)QzF zX;&X?jCYma+pqt?u7U=a^mXG{i1AAtOGit~>%F5Ta72oI;1cy!ve$A|hK6_RYKx%? z_BO0fB^Zd_mLa$Iq{(GT3NB^{GUZA${E%14hacUgqrauS)Zs_p0pQOMqU@cjS@7~3 z=#Sf3=O$(^YJMTVu)o1%D)S3l(7it&(B6=Fe22oho#CCm2o+UNA>I##Sg{|*ikZ&4 zPQ7!43Jy!y)o8tSqx%Zj$mMs@d$Q%SBnuZ88)q79$gAYo_|Nrh9upUFY&c&~dOZE@ zru}vPsZ#YMW?R&GPvS0(x}&o$6Vy;qy|l?L6WE<}*~kq`*!A1ltWY50>Kdm*v-z)&|EPT!*nAXg%68zFfQaMvolm9^2)f1 zY$_)dD`9=$7+@j1@Z5En=);WCNPT)dX8to_{R-Ur5!SE56(4F?J%%S9;E`%q z)@W{~z_E}YWMD|juNIq|Jl-_phOV|0V>7X0(g?nhVr+>Gu>?D&6(YLLFJg5nM6qfu zU!M#kk+3Cs>>N=<1`u3G00Z3?EOAg~haNX#DQ5|kp(szuy*4#a_yNw~W=PH&hY=-D zf$e*H!0NX?RPESiSMT1X;@%iwKat_>7IXQG9YCE%;T5xI$zm>3PTO_7W#8*4;`_O>6LB>9VMtiGoC*pnSt(}QC!9@PYwQO%Eqan$6w={V2=(lKcGo>&gc+!K) z&VUuifrgQs;qp=)v_NQDE*Pa3)l#&NlPXupx6napQc1*#3V5x*a&d+c*J5GZ^iTV+ zx0sFOEo3NwE2q$k`*4-6dyYTNeoVNL*B10qUd5%%9$& z-1W_|&pef&Fye_`N>Q0?z5E&x8Xe5(XE-^~%N1Lt+AeU#S-a+npQ}hE9B&$r!UE8gwesE@*^-9%AQQ4QwLqie};?ai0VYj1+FOK zH9FugH9Fs3_1_yEHWM>C(uiwx*b*CJ39r#{AyGr75P6Kw1HIx#r%u#i=SFAmM`A_? z8KF^H9n8_u=)6uRZ!`=JHleY4!{GFNHB@x$Rm654mAx99zOUjX{_oV-IJW@tpzL zv;X)dIU*PxmC;lZEpRfy%b;Z^OppiMdzhdAw?uUS*PSuJmy`c{CSWr$CXhy4CSXfs z0+#SHfeVSt1T5!af_r+#nLuZeI%k4j5C2z8aMa}gnh7GbJ2ou;t`nClmY4V7ztVO&C8OtiR9V?>_iF>=`LC2|oepP#idq zl7sOUaVF{a;dE`Nsbr}NmIA`E zSq=KXg-C=Sm?zIQgqGkcy3r*wR76om&q^ZyD2cqt3S~?gi$*!kTLC8USs>7G<`&@D zP2Jt`h>Szb_~S(bgF1cVa*=t5;M2P`g94G^xuK%bmyval!!#Nl(U`4}8W5W(!_;id zeA;Jy4o*T+4hBKeC^CLnap5NHxF9VIN6n}s;zF~uZxU`2gs=#ZB1qy?jXm32v{`C1 z)k{$@p)?7xw#R#mE;B`S#I3aoilx?kZ_&l3sA9pSZMiwQJ!2&;tk1w;3|!qVPwH)W zl_qPu*PhDUEa+wKX5NFjTg-Fm2#B=KJl|xV3)FbN#XPsoa{&?0x0&Z{a>c|EvTo=+ zw&f?05&=SNM#rS?bvQMV9GXX}&7lB+FT{DQ1$F5>KDW*|kC{az7K}T2K#GdKu)-8N;sZp*qvO32Qvv1u@ObJpi4 zkrhSel%hTQ(93BjPtIdrFLLE)V9U3Go$HVh7>Gb(#SK#{TJ28$?GZ|%Kw}9)I=~nv zt;fAccXv#3jB_#v2*!&nVUwGoJF*Lsc#&TjFOs;j2cW2i4UuxIqd0(pOY)@Q};^x6iXWsWKC+@J>4R66m3vnekUik|nZNN9z7aU41u&}~M3US7d+z1SKboOwwlb~?p zJTEs^q9D03?{&kCvrqJJqZAcxd~jj{H}bR2xsilTKEMSx?kb@mpRFZu+3v{lA1=74UtH{!vF$Y!UOg%GOCpk67&$mV3>QQyW_%-Qaz6_9b< zL_O{&iB3_gA%S=yEr6_9KlftcqyNZ*{lUvqN|jpn-txVedRL{Lf$n4eG*X5vq5=Bh zU*tnPhm%4MiCI|-hl*}vH8sOfMQ`q&8*`3a?o05m4DSLX#F{&s=M3ZmgUB}f z`VYZzoL3mwO-T@pOf(yZa0?O4ATz?&Jbl-4`_qMl>O@4L*#*KPWO8X_NaA8uGM(4B zRCfHL^08PPFxnq&0Zh*kx=r}yhRGXKT>vpoAXvzQh5Jc(v0kDJ0FDy?hj$S`Mk@(T zN#vChCK4(;ItPo9Gk_Kn(5JB}$hv&^(k80Hq-;rAdImE|C01>&y)Szq+ge+-kS9sH zC41UGZ05wrHkVzUGR{3|RFt^0-<|Bmfg4uN1!9ux>ykIm6R;75vP#0Kx&<%P&H=$vBS;5 zv0s_^CFwbqZ?BqIb6^a+Sel#8!O6~>Gf4|E#zasIEjl-CX6IFbxL{y>RLRFNQFBso zD{nz3XX`tNIfbdN{0#wt8g=1?WJpcukWj`VFwQI=h%PDP2T2mj_*_phaJ5`4p{!{< zMa`S>xBCfYBiFIJYRK%$_rcK2CplPrANrJx;-;+RF4#AkDqQWV_|gPt1nY zHx-hBtB6D7{856$frK_%#%G}KV!4`(K~!HwO15q!Hg@B~?$8VV@S7O9`@`!{lfQx6 z8o3>io?Yi}XqWoAPC&S)MJ`L4aWONEZf2o)YVtbyY~$>4?HOVBbGe4T?qP%r-!+V| z-_LY{$p}f@xxZZB86&WFp`wq+5=6Rl?4LV1sXm6A`pGx;)_2h4W>BlUzo8HhT;ZVu zhoz_8AV=-cC)ADJQ^|UxODb?lhCX?n9DMZ{81`pzk-;ouQAt3l&W|*F_)ummGb3V_(H4h5MY9 zH1S|VS9oP-&twW{?gbqb(5bh%3dnz}#TGrf1j{Ss31;4)8Yb1Bcx zzSSlEZd#v9*Y75fb2#Z0{u9Gyp&xqqEzWt)D5}YKS(u6K6RN8GVeBnS-tGZ*dlPzr zk85lF;YaY;*%wdT4_ZH{Zuj}5!aRTYQ#uRs`6nCn^GR1<>kq$y$IhF068}7zy!?2+ z7iAd0rr7)6k`!e0T5^x^ zAKKg2i)IV`fSmN>iRINr9ol^-jx}c#omp_Aa}7qPu2ym;a{QcRBvCWA zgJQZd5>rfA!xGmoHRrn~h4z~&^--?KfljRH%_r2R^Y|nNXqQ#l?XM9!wO2SF)@`(_ zLzf{kXzw^oYAWy0xj)Q_bbmk=z`1@GK=i%KeQer^H68nVFObl;DfZ8^V?Yj$ zwbfN*^bs$`kgcm9HOu0+7_Bi58A9GeKhbW03VgosL${)D@>zIb=PlfA!?8;m$U zAd^U$##fNcYEPaIhvaEY+=aeRWzyJ9F7_x~*({ImkSd(wL{>1NCG=zW89lKta~1AP z&@KHeN)du?oP^2{DLNi{Ols}C%HOaOZUA+~r1~Mp9$W06yA~U}RPXs5(30ZpSgs9r zlLo)WooVpqGrSFgIw|&x&@EkPa1koW|GxEJw^Ob4uo})FGYwF8uO8X52uuuPnkSoRRt6hh z87dm6wfzl9#8giOfD5|7{d<6!qr?6|cW1l%2i-5fbpIf!CK~Vn_d!5_8!Ody3Ap#~ z-U)EEp`s?O?MD%Z(NzHMiQgH_jq(6@U<|nIPJtVy)jc59bqToQod7qJQR&aYX6R2BY)^P)14`jWol;UJEC>AHuS6r zFCfP*Ve<2I%m-be?`HA=UaS*fPRFFtt{LN^yOQI6<{atXK3a2MY3k-Wb`SF>F34;8 zd8TkXg8bGf!Oa?eg*EwrjCc_Q2TlsUIcApiBwoq)U;m4u2eV2w4%wY+&D zEA^1TspZJnS|QId1$oI!pNr*iN#vBvdmxT8l5fcV&n$vT$%)kJ%*0%0|5hHgILGjj zwW3ZSZ?UuR*x4Mb;73+~wn+>7=e4Y5qjLpcYb}mEYH@z2APM6Dqz!oNtf23PmR{tI zo(MX%igTt<@xc#fa^n%+NXmdUwSsT&;)9dS+X!zy5- zsJjVT!^PwoSfyf8nyc1i3l8vV6H4LSX4wcVjbyVh-$~@mHJg#GH2Y?BW8y$DrCzpg zY?S?yvDMr2CzHW31%20nabo71c;KczyW$QY8=5hj;Fk&bCV!?$YQyv| z3=xyB)!bkrF2jBdEU4ShH~fXQ0T>za@I>GFibD)hWIwVPpm-r75*ZT+6)iu7Ogfe? z=ZUnADdulmdNigyR5VWt98Od;OMz3$_}jbB-HvtGl-2(vxp11iWI?-W4cw8pxDiB_ z2%BQVzJZVDvkkXf3e3%$&}69SC}~a-{RIb+nM5w?e_|=?Um>VQ`+R8+WL^IbSmy#~ zZQyG;Vb-*>58hE=>dDvmfaJ1&UJYg(Eu8LKEPEMaQ=HjZadtT9B9|Qwkzc|NN9fNu z6{7+CE<B7v<&W3!@53$WUvSujJ?gn29;hm zSg><8cnG{BY)~B}X5Eqrn0;dyDJ__lYGar^XGsEP`O<##1;H%vCNQH;MZAiza~_3T z&<_0sw9E7=OWOD1Lr$*(^ZSXadVv}tEKk=t9{}~bL0$EpBJoZy)Wogo{CB?K{35yQ zL=7jKqWvFWqNbI3H!eHgvFrKwqZEeCLUlqr&Y^$o&lu zv02oXD=$RC#85_PwtqN@-M@r*qMsg!cnF#xWr;-l)=DHAHgu9sa`&D;OO>EhPv_Z1 zNNs=VdGOSe_yvv!={$;tE!qq58tmRWhcFOE`!0TPj&$42ZtC+n2G(E_cjZon7_jtX zws3HWbuzpKrYmt}y4#~^9g;7R<|~CzhbRj$rlz~`hke%XH2D%VhpJ;&;9lpk>N>n; zy4$cvOuE~=J|1NAEpUcjFD@b?Wt&9#UJp!Bte{Hb*7D8wGwaKY*gDxJku})2J_iO` z(G-XP36^it2=A~(fZlt$oBhzRqAx*?dx`cRjXQ{J0udMtJSmFEdj?@(@kKFu#&qx) z6jqM1X>)`brXyhmwUS*J70Y5&iX@Va+?eM;W@BDUuDgW*Qzw8o?vMdVEvBgr*mq{J zX>Mo?V9I2%TQ>p>OcW3hpt+XN6{i0*^%!vM!+rSB&>q{Ie}ShmYi_@4xm^y|p^zCU z=V21Tj~vNjb1gI13S7zg1%T4O;=}I#nJ2Mkr~wfY?4S@H$Ol+cQ-z}Z$7*WL=X1<; zp1Cf>6`P~{{Z3r44FEr(rzI)__xz05QUt;C;d|u2u^M;C$onQ!PO%CLA@>?}U_#CU z-XoD9roSN* zzw5Bora!zi9i_R8MZ*M~fKD3UvP?J*aSG5l|6O{XNazy59R)pr97*ULk;(bS^8{;R zn{JUlEcQXyw}B$S_(<7ic~Fks56Q7GLVx2{VDT~b)41gr8*iS`pFjqN+x%E$v+s$J zO@G6qd$EtE1$v$)MiDtT7vsM|DRZfm(V#^ja-meD1om1mbjag*emcihhUihbNS5(D z=LrUqdY<`FhE5<;+#%xSUO4#zbppr}@skuf4p#zO4#E*q;bkte1rjUytngd^>=(h< zy7G3u7LZhJoDaozBjfi$%E{1ukpHQDYhY8W$6161s0%*K05cxI`c^ze*9L6%l zTQGu?f#&P^6p)%M0d=M9WWhAF43wc1l*x0gjGU4pY_VrBdL}rdHY_8fJ&k)R0 z+6|mAHG7F5OZ%Z)8J^t}b@%NVD!TIoVXf;~BGL~BX+gHxn;po3Gpvt;t{Qnr1F25Ktio^nv*+=K8&thC!k-3d25kNO@c*@~^QCD2Bd5`5^b?ye z3`FWnbr8>d>9kADVar$v@&ezOnx4{nsF#jNlM_@g5L?V|& zRD?sCq$!t(*yttNN6wa`qiUbu9c0K}i^hVHmz-*O0ZYlopjNk0#aWqsq*2m+ zz9H;*I)22l?m@sg%?D0T(l`~IQFfrGREs)Tt@F8rq}DtATwqM^S6!c;Vt@Fg_Wm{w zLUFY1Tb=a!@MH~Zuc=9#92v;MBb82JY$19(w*Kpbr1~OTT7<(c++>tK&gueiF^*F` z*}1+C9NC$w5ReMLo>ELFS>Rf=r3d8H)%AbLC$}NT9eO_UiWB18p$vHp-Bv6Wx?w3j zq(np(L=(}oGB0?OI8&l&my;09DcvQ}q*_CGJ(b7{L4iWx)Nno&K-h+J<|*gAy&(>S zzy*iC1LsWKH4suQfMB&wD`qL-EWC`IGx;P?XLJ=!v;8QL`GTTWp^aOSZ?qz<)(EFtNeN1~j~muwcxkoZ&m!_zUu z|L(VZFaD5tpOMqcoSPmbRHv8WWI+hEZp+J;cH835cVI(DM1jYn2*ls*%x1o5X?=)w zn-NEFa@1D##@WVG)gjsyM7<#oTU?l((HPOY-S4YaWSc7R2`!a9 zU+ZyZagRn%RpEA34dZ*vU&vO-2!QnHA>)GcOB2Qg7vR>63nu8#>=;rKf>qxQ6b!#7 zHbdq&)K)Sgy-DBQC)jrlYUd%ye@#!ss+Scbtd8NPo@-|>K%JuM1?fCODLM=oITsvx zu@u`I7OYI>o1AU)+2eD;j*J-E*Zoz4CLh_C;aBUEc!e)L!9+o4sg&BrU}6x+H!~I| z$kP_5FCRsR11F>5GsFaMylW#2QOF4>(`ft$$e?{mB{>2E{n!Mp1{ZXo<81#L(*CZq zO)m~EpjG{mhRe&l87{|gZSoj5ns}}Jk}=#A{pqC@e!Jn~z%fFrmEd0^$8lO6qwl8i z9gLScKb_O+=xIa(dkA$>LFM4OPzyzkn6VoNz@e!eZl_Aa2?8={hG!_(0-}nD*A(J( zIAnofWF|VtIP$ocnxXd9!FMAw26>I!2oN^5>Y&9=`wdwKF%-nRREu?FAs}ijhhvO{U!K4f%(U78>5o3RM@21_Q~mMUycwS-~1erg>Iy=X<_8Z0y9(O@&6!7AvYS@HS7wZzB4k5Q&5Ev=TGQ)l;fB!v8dU#_7D5#&(HJ4v2fdZ(>y;4+R{Ee<=%gS>AUJ_D zfh&g>o8R&{dqwP!!;6yJ%6j+0K}zO2E%d!fdCLv2i!+29;|C$JvDzzjJC zztu5deB#UQHHo<^XX~;tK^zD~&F6eS7vF{2y48%Igsk9W{c~RkZ*ZrLUc)=28yGw+>WDa``$>$c8CDxP52iOmmb8&^;`( z?~&!%LB^Ix3M&{_9~?x+5T$fu zkZTa>-=S`aOhJqwoG=Meg!8H6YJdb~N)j1)vO1?4etd7zn(HX6srZ?Xvv2(k!|{ui zNsD@ho50L7+{(qhgfeH{dVJny%nUR&#ajoKXicPXa`M1a+zqP0VHxh0oYOd;0B&m* zeuCheP*gDx;72H`jEKN{-izVk)ykZG90`FiDsQ<}C$6xLWLT5gLF-8>p?xt46xN}vxsi&!lmsnf&LbYslN7-RykogH?v<63I&3rS^Y@*TYKdSxH1S~dXrTJeg!F|6{LrTihda&wZ9^c8lq4F=eSB%)Fy}-U4`+l7P^~-BExH41pA)` z7(mcM6l}83uF(^a6!qANH_E*Jf(+(i3bIisc?yc$)W7u&?G}zgeX2~ zn;s4LINL6t;<6Fo5~cug#QZ2P$Cwk!?l`wn@aBv>FK=R3Ccq!#&F-dBVao-4=TbaZ zC>^UbS2o~^@lVmv&T4(!tSy#W=Xqv_z|-U>`| z`50zH*EyGum~>@;GhDv`$1<+g!U_@fgyo(GjrlpriQN!-^7jH$6~=xOwN$MsMUt=)$weSqd4teQ zkrvA{#n=tL$!2ZD6K@JaMf+(nPC@Vuk;XS5()gZ`vF!&5NQ>z;A&y(@kr5QR78U$c zOH7p#Q=u2If9uS26S#wo2C)X%>cqU|Mh;f7tK%W5#KOo>3)w*Ty?~mam44XL;y0_D4ovEGI*+q60xW z91{iI$$U5#=q~O-9SPJ+R4Y@DD6G$kM^EF z>;Zdw1_oRB3a~+Df;qLMoqwjG-J~x)w5wIx)n~K@V#o@D?Q z@;3VJQCI-vjX*`^ilJn7=>cp9=XMf0hMJ6RikuF~|7Cx|a2-NS#draASC)QTi!L^IkL83|W zY?*YF0>9vAiKebnP1u|7W)nDf<}2qI6p#rnJm;+B9HQUKoUx1?NnJPJoES<+Ot>pP zE1CAYWD{JlNEqIejnh~sDqx*XHD{BoskQdSXxzC_W|F2>nmpzdLREqn<^V3(qhv zRjr2a5$PWOJ2%oDkY5t%F4dpeu2bdVLa^=ynZmlS5_h`lLhS=*C5G#}oB1xLM>>ym z7h~xIk%-o09?iHoqUq>*QN`K!O>*<$!)JXXeZTB1>HFopK+$X8&E}Hr*uKLg1l1e% zw{iL2IbT>?7GErtr!CImd=&L{*H(ITr4^tS+G_p5)K&x>YB>X@ImQ08@wqoB#^cf9u>{*RIYxX|7NT0QM zpOx}iw7w3{0?{+z(~pHkWhj}xqljbFS1&xDd97UfPY~80PoEqEC6>vxaafg{#gG^J z8nK43jN_ee5Kp%MSp$(;fL{{>(cXu*k;FqT%J9!x%LYSR3pmKk3t0REh76D)E4ak6 z;Vu?vXuk0}J}O3}qc45XTu+!o%QLW%k9n{F^4%ChD=&@q&IqQy5GWj%Rx^^UoXcS; z03C!(G1_t2(d+#(cO%b3R1z4n2y#H)GW{;Z(5ui70u@?Qu$s5P&Q5OaZ>rJ7{^;31 zy#LzuSC++xwgS16;X|Xpm29>)5CI1RVRh`SurO{!MH2V+rI=k)@BkamA#c8MJWCNB zFks_>s?h2T#O}pN5OW|2>=g3Z1((1LItxFu3dHJ{v*TX~;H0Hg50xkd+8u$y+V5ia z`|-8vEK6T2(eYrvIjo!}v`BiXohm!V`r$3>VRX@l0Oo3_U#{)R7QXyE#cQfYq2N?Q*M>}a8F z+P*2Us_o=JXiI7UJi7zOrEP*=e`BWq=>zM2%Jw%jpt@&ZtWv`7*8GFq91tJe09*yk z_rLbF-vH*p6Xa5KHZK^XS-tV4X5n56_nHMS(}HJe!Ly{`4}Pl`UhAQApV6A}jM16r zvlpReOc6q&65#AcIzn~U2?(HKXcbDia)tQS5UD=%7;S7YFEYABnQRWbbM1@D^cY+m z7}@M^9K%M1m$TE63ZG6fHI#NJxs0*!id z$r)%Yfy|?2P`ne~*`xYM<0UquAqF8i>f=Ag_Jl+0*DS#8>iQv)a>g8~(ZlON2(&;odK2|!y-IwhA0U^^19@TJ z_%S+zVZQzSaJQFuQ5y>=z-URuf*SN6O%d(*B`s&!4_xZ-kb;;?LGhNtmhW4iqAX0Wbs2Z=mtp}O*n`xLLK3`j))WS(na)ju^1QT=Wn16tzuxj321Y^z|5;*0gf(# z0dSVYiNt=8vnGwEhLTtai~{=sU5GI;KVR`Plyw42fOj8%nJ6FpfLw|m;YF)NIEQvA z*FLM%MR`NBR_G6|63N(1T4IjCKl7hL)gW4=jJ(7<>xN(9mEMnZ}Zx_w4T&Ce;1Zt7cEpM9wvGo9>^x+L?r( zUBo!nv&jt19eQchOM_nidL?xHQ5Y)3bbMUDi@)%msHUyZMUx@Lu%Bh*wn`$bg2GtU z+MT z^9|KNb1D=NJoc7A1Up>3=`?bn4UfAPop6W1b@)k7NpS~Z0-)eA2or?LT3y;CiB5ib{FW`b3gwS9*E7cCzto3Z!S^O`>PTRH5yA z7HHqIr4W}c^-R=+^i2F=Q4@sZG#A|9BylyqdCr82^cY`&->ZgZ8sA*Tm=6l%-!H$IK>p|(Q*11M4RL8$G*>bJE^ z02=ga5ncF(FxJ_SRGuuqigyjnsp1((xZyvehs03fF>NaU`4I+NfGgRu93ou-Zstq` zY=0de!`!HCQ#H<}(O3PRL;M9Sgogn>TqrkgMMy9xf!qQyIFm#C#q=4=$(OxzNDh11 z=dF^Ek%7+#kp=}o%D=xmI>p%r4!0xE3LnhW%VU*bfIVVvZaezl#)j*+*6{)ss3i;3 za^#?}lMB>&H;mxIPaB3e3*@xbJ?*D!ymrEMN^v z!w@SQd-BalXIog|hrW`FluS>lCx>B>-+G%fd7+=W`K?3JfPJePb3NFViGTk-C~Z>x zug8w^H|&L5xS_Y2osaAz-j2mj!)B=sSDc>IUE@RIfi{}ZJ%r74UY7SBsAU?YjDgoI z@r~gE3RQzBu(lH2=BDKGLH7WbNHGjNA5uf5idFm-%Afss+jOX6wH(tw${gN z1Hjvn=5NeHLqY3QoCf|w@F>JQe>5Ig$suiwHZMeFC8=$C8u%?3%V2Bqk^ZNfOB#tEgf5=uHo^fJS`Nf1ujVBz$m0uDJ2w76fKGJS?<`VGWOSH7GMaM}s-(8GafOh*^T(b52@8053lO%*)of^i zHs_h=+i-0H^8Y6J251skm2{VYg~Rit5Va6-?XndkU@5lqA5EjkBjc12(p*>JqQ1;` zE;Ew``TvSBz366gd@w~gem1KIEDNNWo(NYI0|D}AojeMg#m=sB3~LeyK2eDb>oE7?_{pbPO&}Wz=3G7$_1=4gut!k zUFD4i)h5G7+kU3sBvqHOAv*ueUg3Kv(mFE5gGy-Q}rBzKP%)P8IVrwGL-XuJX{M`%lp=I*@{wKz@wsqwr1H_2pN%z}{k1f6f^!coXGEyAQ7_KNH*6r5uEjFFLbSzc*^u z!?848>JXIjC|s7VO`LV$KVA#JVEuiS_pSgWB}A=V{U2j%5#3 zZ;{ZL8{bd%8_jlRv*V2F0Rj&q8a2ZNp5)Hg=3&S1>LUoiKmrhlBYqqC;D8YH4L^;8 z_r;_(@QxoCg?GS#)JY}W0BSi`%38AjOwQ;B+;PmP-U$;2L?TCW4{Dimu8?W4OQvz< z{arEvEl08mmaWOc05IGo1=;mmmK^G}UpCZ2B(-Y?&t26l`?Ve)n%T4!7f`w!DjhLKRCqjkFuh`^xq%rMB8+waNRZn^4pk*LR~E! zvP1?ZmDA{f{1u=7mv-X6{Jb7yPr?$5RZef2iq>7>V8u$k>lb2)P9eNxnmmu43w^~^ zmSVQWTts9!Si*M`+J2YZ=DWx7o!#phi8Tx@h9w<^2Z{4%^=iD{l{%|xYcoYP^t2ua z=qqq9R+EDaoyXt8uymScW~2%FNiqD$I(y6028~t9=)5$;0(G9h9x)%DzZ+WeTGH} zJUH#kWe2Q$xayJ`E48d8w8hRXqJSivhnPdXpcg$5oZ~#I2UY)Y26pPdv4M{uj1Agv z?DWD_S<%gF)Dz^X?=n(f0b1kZ5yfoN== zKdv_2`FyJ&vr+NSZZE&y+Q>@4KQy15f0Zj5+su2Ab%R`SzACQR3@D8b(L6pwOa%ZI z6P2jHiU32G0=F;7WbFYo2izY2K`ywk=NB`i-D%L_6pk77@inwJM z)?!m{y&313?TSImw`LJtEsbJ}Z&!FXWQ<9xt50 zJCNEfC?kW3+c2A!%X(wWamq%(=an6aLB z8tEm1^f#o1c9G8Z0vhRzwFn1j^tZ+MJjccOg(q$!3cdgO7g3n{pj^`H<-%|i>M1qD zWuOCMEAxpO#841#n2f<%&YOmHJT#tULl_Ky=279E<{jQ zMwJ5PCUcpLq86S+Y#PV%qDN=ub;3Eg?!?_IXss5{P&p&neGvhQPD>qwF^~o^ zX`3)O=UOC;#iE5`4U1xz^pBa{vrr{v1XrYS zlOf=ynVM<=E7SopFymk(#zA9eaZKGLub2o>rWGRvKvWodl3{<8NqTEL(IRd8NRz>& ziIzm9z0`!($X>vLIfq*>sb4Qfe=+%_UeR6%(hluMoJezx)rr*QrBPCX+bY!AiTGtw zR3Kja%)U6<(2X3L$E>8 zEpNnS8K9#|6g&up6KC3n$%^fx_mnlcH%3H(#1~1*#`^`fk0&FDnhrQtyCPJ>j0waWG2o^l= zlK8W2(Y2+hXbv{BqtgUt`!Z>GLEsFstu5q_cJNzrkB+P)Fw<0080cUqi0V`CinpBQe5!B-3 z89IETmdEIh!{7pxWmVa|ue$E0@+M)ojqXHHoeunK%Gi6JQPqIWb!?2&B(J-wKuwbfU`b7+N*YB4nN@p} zjJhdYW(g^86dGy&qy_r|ZZhSxiCo}+iB1a{dj#mhv^H*OEdgNYb_xUHU?eOSPY7YT z>)cw|YX^(7@PuJ>(I#9EISNW-u57Fnqh}N=sLNyj!za;JA4U%!qyah*Q@$oK^_&>! zSx@U>RCgtVqlEZX#5R66q81^OJ?}_)l!%`Xn8%N~b7Bf- z#y)P{FHB;u;b+oQcbZ8wBidM~)(VEFVskY(tJ+th2MUZpG1$$r&0!LWY7 znnEUFgPU7{oQdWH}CyM{Op04Mat!9UG1xsDzB zmhOX_`JBaHudXGAl7&*ZGA0vS*&iT{JXLp{&3gs#5T}>x`-hV=!;P zHy}|t463_uvWh@EH&XLkig(F z4P~4i1OLV_r@wYl2hk$hoR29MLWt4uMyqm$3h8LYe9hb`65PuD`)%$ z0e(*UBLqO^Y85!WDko4dG+@+}<2MPAKg_7%{`!@ZIzS3r$wIB*yIoRL%BzNYUUK%v z$--EfVPB$H30gUe;$?a3r@OL%Wh5$Rjk18ewPSXhJT6DPssojU+xxal3I%VJ6a+4q zcifiNq#*3hm5jVwi&a0gEcCkuq$uQz7%A4*xTJ`Bm{g#mdF=o3C{jQSxEV!Mi~N=> zppb`Hqhi4C6#30@dmay8ga(7Kxw!`JX&|t#ka#r!rGtK$TU5IewLr3g$&ERJ?9|=@ zGd|!g1hNmWFs=1+g{qb-^eC?NAkP1sOAi9@FnV(YwVDN|M+y-fdI^A1`B?m6pRyrt z+O~owqz_TH3-3^0dT%UIrqQu)ZD5zEM9{AawbtwIFGvqrr^oVYo!%V_)$FQIu(3of z*XeIM+axNc(+R3J2P-&R7W@r4(>wScr|}5 z9#T{UB{b{;*B+TUos|&82w3kYAkblR2%0(`;_fGs|`T>(z>qzqLo zeb2t>S6fJ%%@r3hGmwB>smDbk90?-OS*r{JsL`LnfR~397b|My9BI_tLV5$HG$J=# zUo4k}nhLq65WB1d=r6&mK)AMumzoH+?wn)}&O`GTE3E)elvVfI5n7C$zf$-nv z<5eJh=Nw!{Fb?!4ALpzvW^ns3Zep%z6ZJQ4sZ?Do?E7ONw7QV7xUZ875swQT^G>1F z6J+O%D>@9~Aa2o$IO2uGi^$cz+a-8O-arsWov3wNt>k25T{YM~RbqIf#R} z3y2eS@fJ^WiQ}>l7Z~YKZ(xri4n&0BTnw`bUe+J7+Z$0>p8949}_t zDaY+z{MJ5ub$~Ngwfq3ZB1l3~?tSEKqq-U`P%oF4xlgMG(eWrhj34I@!`?Qx!r`dy zq`pom_d^l5Y8i^4x|u=%osAQpUW;jnK}Pj@yl}elv*>dtnYYpJBX7EGs@*q<7z|V} z{G}SR(u*STxWG68^PfGUxWI{p8W+()jUECyrxPZ5>kfC^H(e!`)ntD=7Az7G7ICwQ z>h#3_{;d8m9ukR46RbYxy#-`6G+)4{)$i#R)mDE#N*S>F4J>V?_MbvtboUC3S^Wi4 z8H7!)U?*H@^%s}KS$!_wGc5ouh1$3JxohIA{*`tW%VE2 z7`6H=udMz*o<1h|7BC>**vQqt%6e9UJ9+9QI2O^~y5LtnBvPy+Lb);Q31>8)Iu9ch)i%kCydBM^SyW&Zk$qf7GINrCD&Wn*65k zg)S$UQ8=3I#hs74M+HIs3S+SS**uuksJlRDL+b(`0eVqZRJ=K0$7^`*i6mngCHAz* zN5rm^zZ%09&U_+i*r@pkuceIHvck;yaPo)pdLdhfeVE59rWi|QevdPD$Q5OLT09bJ zaOf&2@NWkaq#O%F`JwkLwKo#smwCeu>URf(A`t@ zutc;H#-2)?AK|rP|L||=yrO^Y63o6q>Jb#Uqi1bT0h*#~okVo8(xHJEitnP`>kK;M zag*LL{;>)&o77~+HjZJcw#wI`r&V~^(pSK>Mu^im^+F<}NrUZJra7%J`%%zJVjRX|U~0y+>5!A1yEoAA&e0nVvH|26i%FMynH z(s{SxkJQ{wTq4Y=T{(Bf2&7vHKd0Igl%jDU5EEJ)1eG`&z!NfYP0V3!#SX~PIRjRm z!=)u5{LYuH8RT{$*$0Kn^)bPZ;@-IZaC8*kuEgrf-Epfc14%3E3xm5si!XqPa|WzC zry9qw{FR?v)M#`?)(CN4iFYxaOa6(A@Bl*~YVk4$sN`8-TbB5>i|X8;fogZ^mR(aG zENG%g5ja6j-^P<7i==>9yQCQHlH%yKB*igM4XsE)#Ga+-@fd?B$Z6?)KIrigM>0hm zbwOVt0&jVLT;GN=_ZpHFEiB-!*=>1!vy?f=tuRF$VYiFr zS(xfUFi6b!zvImKa5PYh%mBN0H@FoT%4K+rxspHQm-;E1zQ_XBg&7*Q&$?PwZJ&M$ zx{?n`Ow8x8m42IsnG)zXY6|A_hz5avQ&;axXqZxG=P>F!X-RN-DJQ zn^Lup5*389aInjD-_z2#c+Od>_eqGVhgfzT42jIx0QYv^6P1d_Wf@&UH#nuC)Lm*5>f*6>J0?sF*?HCtu1F-g>txgMzxCX8LrdqY4s%zVp za|;>}JANn`v!=zU>&YKr%NgDH!=)XV8#HsHTXwlt>-(XZyGFZRx@Er!x*0WpCNIjN zGrAQ0E3!o~Igmc(V?Ya8cNjLS#bz+r2LYC80UpvXP~MCVctawa%ru?!tj*OgEzw#|_M^^n2!FM4-9Q znLt`w-Z3a@-#;8yXf5l1?^Ip?3Gww~q6zg6jn@C3_Uqr~XE?Fs=R$HZxM3Dg2?&JN2SQ&5 zu=jou9@~?u#JrqcDVH16-Ru*gp)W@`F5cKAhWITVbuoLkYp&6jA?{!rqia z%;|h!lyDewm@9!epqvGQ*xmp%Sa&ruZgrLb%R-Q&I^^yohEtJNiIruMM*Wszqrzz$ z-i;5Zf$=={_J74^lL%L#PPKEz%QPtX6!PwFV*pi&_F}^oq8xb7u#W<@$fQ1&&5{EP zNE4h&IOBg&4bGY9N5H^HFhPA0!(Zd>@Nf(U;p~OlEdkO+N}(t!rdoU*xR#2ki~Ak3 zw6-p@G65&`EL@5JB>cxUFd?!qxn?1L$s2%+7Om9x-eKQ4Hl$M~eV@_6J(IMC3q@6< zl(?;;zYD0N+3+jc^<&+l?uiA5Vh`NUzt-RImDZ_RbyAL*M9)RY&wkn%P zQq_rq>ZSC=1$W^v3Z15{PnNtn>o9Y_Nzwxc3W~%LQJ-lEq=2IBW;M?Az3pZla5_n3hk(VOfj>OCv=74 z7iu-2D#ScC2jU{#9EqmcFC6Sv*gLVpl4yl~+T3i%2imr+xa|{UH!cHhaan>(+xK$9 zY|gnwWgSuE0&;;c4ER#ilHD5+aSI-BOne7RoIeZ490?9ck#9S<{q~!K_Veu~aR6+JX&Wc>o_S|I50p)Y~rC3mJqu0xK~p3V=PyuycM<0YU0kXOm2@DZP_4 zts73;Rk}J(RYP?^+krgzF^&pRq=@^7B`UbjkxwEDF4&wDY0#j8*P}XL0V7ImcmNH1 z1bz_>j8+kZsH89m`0xQ%wXq@3&UbA{a2JAMFHn0jH}L~eqxy4BE-vQ-1TmyOpam*E zW}J%KR(xT!Vpcc2b#*uL0rRd`N7n>25!)4JQd7O+Ls}}!`)dYrkb*fz|%Uxt_%nBhP!vgamrW|wh(Wt29;fNOPQR|VpRWw#g%B%Z{ltd zb(K=ZkbP#(1|ztLH!2X5go=`ruma_vOUZaWf#=hH*h2+fM$sXxP&65Kuvv4RvB<;J z#lEZpv@zj+w_s})BY1^WiVPh*g<>0>f|{}1&gwOPY_w)8R~gn0bRUo|p!RK5UoxPTsG`dVG&9kG z1MrYxH)2_(2nb|M2D1>261YR-mSHRyQB4G~TI*(7{<4dsh#8dFTz9loK;%T5i@7mw zRFch&+HZ4^O|~zJSOFkyu}A255fwKGFt#(=7}yz>_s^G*0J)igu($i}ei$gr;DLr3 zOp;;Gm)(`&GF4`K%DOg?EfJ?91)PDjy!eGW#RDH5WtaCZc8S`nVHep&G+>lnM!R)_ zT_Vq6rTMW?tGFx`jk(OZluB=%a~>}3^akU#NQe)hf~z$ z@nfJ_o?~d`YVcg#exZW;;8v6R#7}*KKi+>l8W#|`0`1rns+7pVIFK!|D&l&weiouF zvSB8I@$nmGW>X~kaKlU1pV7KS4Br@0uvV!!VIAP0{D zuU(+ts2{@KkmycGnB6he-G%lLl5gA!e|A#jUh=LCO8E_@xP7Y5Qfn@x` zoNW`&D73IgZRnP?A+^a#7{~VnZW^Hzux;jZykLD-2#edcIsL`w#$J~gBK;Wo20a)S z2NuTfmvfP9H4>vRL4c+tb&pKptd-Bn3>_3Zl>jIGkbSOYHg4W@rey1#k;P zP1r}Ansu1;!6|0j)@>>FJ7)qNAKNQ?fn4Vc8@A%V7DX>modFo|ADDogqD~8%hqpLp z#K$Q9WciJ3xCqudjU`ZJnSDYVq3Doi&En-JS5{$u9@sS^iSV|G^VO_~TL zi73VUP*j94C9>2S^Any=uxm|Ut?b^#R)foZ%PM#K%GOoxKDn%8zu=;SY41?$_a%W8oKv=blhDSXKB!?dZ(IrP4R+v2M_zMhJVq6~!s~yHMFmy_BsoI_PXOCx^fpBv+Ky>j6l~8lB;x_yo zG@P@+poG17s@Q-hk3th$fCwt7R{U|P;t!~n@faq8KYVN%qL!SAMpBaOr|})Ecd}`n z4OJL`;>&580(TGw7@dwQ>WR`TjpeddMJ2=`{aht{_N@KZK+?csUSvMb-o0IVDj@--3_3P=mmBw9- z&SVgGz^ce6_lvS7lBFkQ-~1?i;=5K z$kn;Wy4xS;L-)Y~N95=PzZU;KAZfiB>LLQk+M$!3@)Dv-dUT;i;;5|1QVIyxc*8utdKyp8jywxx`3O`MSYaFoc-6Co zLl6()o~_|AkkG$E#S~`9`r)rRE^*`LT)B;9rtZq^=rRH>+s3q*2)^CXP%|Lo)T&Wb zSDa>Ae}#fT-Y6#|eP+(4iKm;^7?{%H6d6i{Cd1vfaytj}?0*yXLlI&TEl>n4P`nJ= z>e?PaAK6Op&`*O2f64pIU$kBm8xK=i9<__jnNi!&lvyWIA zm%i>Ignow_+P-rjTHBIaf@4@IgkhJM0E#n;#J{HKg(x0Jo_n#F0mG)W5*93>%#{tH zX)Id-deTt73ZLQWABFAj=Ot7GifwydQ_ReY+;3VHSpra#eF(q+=^`Pv2x`F;e+{ms z>QvMM{=%g|F^oHOv@rck)|fCT$SSZ}x>>BEy#e-0Lx^F>0Y6p5Fpj z;N}Esy)$tjjz0mlunJfTFFp{ z!$S~E(`xoRzeTGLo+EOOiqQ&A6&PBR>q?UAOH8RoK35WB)GUMMhg=M9CYHTt@gmBl zPAXD1_Cc1Rjh)Zg*gJ4%-*~-P#Ou_hzB`^rI4X+$Yo#Avrr-p(`da%>A=f_E=|N~( z?n&jxlOdE6#(Um?$TY-UG7;0Z(BwB~LKFL3O^oRke5b6NsBZg11c4$>J8F4tJ8Jor zm|A{bspY3!wQN7r4PE5YUAKp^{$a$hK+Q)7r~srOsCk=OXZ}Sf0l0LYqP0fG?j$!=#Q^Y?dvG=%Z^AafQ z6CKYeFXVXH!3a~3p0ZIyRyKttOUVe_i()#fMVw``**XGO&2pWs7Ih=F+(W6ss>2i! zb=}9Rp|VLyhjPLc9xC_)5$Gw=|64KH_}&csY1UEwdKj<|q4k1+^G zazp@sr16LS@M^{J@RRVY6fJp7YjS1<#&y`H1%eyhrp1B}DBHB4(oz<#P&KJRzWfHV zY5UnViQj1C^S++Xu_sdlt{^nBTU2&Ce+Tn!`xhk(yA#O>D*&KF2xcKM$|_@2FABqr zc`gi1P97y2sVS$bUh`Xgh7OvRgk+$F?W-jyh590Ivtf_(6XomBYel}!=nAg86A$A3 z%^1IRU=Z^+_^o(qD}Ix3WR&0T7It;{ZH8E{|1*9AO|M-VAG?*j{uNAyM+cO2W<%y9 z7e?GkEeMc)9#BVLIIQ6dPv<3Us(HzTK;?e-}@x^;UW;FYxJ6p>}zMiaZz3_rxVf$zZq zMHIPW@g_tm=6IKWiw!xdc|ekEr*f*Xs9NL?qh@s|13roz8m-$_=kBooWgZiY(67%iPOwjNlzlo@*(asjpBAfQ!ai*#e}vBlsn3O5b1`I-licB(eV78wFvArl zd?q-T>M-cDuEV~Kqe!&iE^qmvRk*+EI)oCYCErwruXSxz%h?D#5A4;+u+q4C_=SEl zQ7PPIlblr&V=*iJ)CH77dOFbB8K@ok)mN&>q>n*Nni3geLw1lGgqf9*1i{i7B-UxE zUvRJ<)xsMw5)$0P`y0pgYL%#xW)9G}Cn!h;g}XFMr-=1Md?0ovP?J7OrjZ}R=r!@` zx{Q{d)e(J8V@2&D;ENg=zc0>D114dxR3iT=^T{4yXTy10JijKps4rZyAAuoYy3ikO zLAmO5Kdtn`o>d5noq|dnf>iX4EbrCwnmPcG_(5im{gkZ4ro#@L6=?uQrUdhzdqM-y z(Fp(mdtD!}&e{Am=W^ktV>;u(60th2w-axFWd3ZJa6o+iASlfCsW;G|UnvhOz0b;c z%62AXf3-kaS=?pR)!~75-^$K*f2g4~B7uP2%?xDi7#U*G)!}9Xr=YIBqU;K`lx^lD z;iSXJ8bnv#5+GQt)07SaR)v}(&&8m!Qvc_Tcx}%NdAs~8YBYM+tUvO0tb)m7FxRn@ zgNru1sk5Kh3@W&{Q&}grqM}eCcrV!EyOC|s#&eiwr^nY14UNG_M0U1Pzu{jt+M_xF z-*Z8L7`Ef_4V$9(zk3Co1$(b-W=vv~QMadI~zRdy?zz7g!< zJPWWfi6yx_RJB5Qy&E1_uhT4I58m~>Ng8{?)JpBV{D`2Y7JXr@rE<+(ZR*J+J_3#bmdNT7 z)HYxp1@)h-m(OlL6NJLC2iVtXlY8t=@XKT~2}hymeF#Fgn8CciJVZ*2!^D%{SX3u| zUTt_DYXNDM|2Z6|)}AEAPGY~5j1GbR;FfdYgId;T4hQvHbNFp2rMFq=bu7^RCgyJZ z2(#G+?`DD=&i~RG1wD(&gSBipBx-rY)2>>kWJ8WT_N|{$^-Ew~@(5IU+4ayRl)Z@a zy-a@Olc*%1FVZIwW5A96f{pAaXQ~KihSLwm)3h#1Q~8^+Z=@0``x;behCXv1ro#us zm)aMwiNA{f2StQE7($=1u}Xq?hLqmvjOADe0V=omf0E}-u8wn##QXgzhI+vOP(qD! z-)r$2N38LeHBoDPKa%ETfKn&TJC`zks_>U8s*06F@i%Bw9R5HV{ZR%!66Nl6#V@P&9;tz6Vi{MPXA{l?zLPJ(t|FXf$XokKKO`0Zc)v6@L{OAE8PDu@ zrxD=fOzeN9UZ%@S@2vHB`F!-{i|XY!#7M~dKYV%jX7V9gh5SPsrlv|0GgZN7RKXuV z2H2MO4oSt*0OF_zk3Ij6Rsilq$zWa)zb?NLwf&&J+`ccaYlrj88(V*QzkJz4zQoL8 z>fQVj3P1>t1!U+Ca)I-v@-YPd=%XR(aQ1;bO@11m%EmYHqP4g zRf}`Hs(<$fXmC6$|C+I#D_fiv=T``Pyt@}C58_{|?Z~%+BqzeFJTcQ)|?N}q`mb%+#cS9au4rzu%7iLlxr9gX|acd@nX{^ z{5oRgcE~daoh_e0-+23@QJfy2p|StA5B)j~IF^3Jqu-O*~~&Uk-W z@FxeVwOQW;V~(#eseJ@p2*7dytPEyV8TRyJaT!mJ3-0kw3B>Z>4uZ1CJqR-&Omgbp z84D!J|0KSG8KUBV4VJ-%COS;12oH+-TBd{9Ncd{^E6#>fC&Fa&4 zpt=v1c_*N`E0$#BZbQ)54(3JXP|0*g(_L-n3`#cE26p5e@d>z@I7}vHLeEvQPSx@E z6f`Rf-b<6Zt=#u8|0mU?V$A&>A39qgvI83JSC2qNT&sx=Z9B+y7-Q2hl7PZNkoSdl z97bm3gzh4Bf_X!vf$qpbsSuA5)AZ=PI$zwnt->CSmLgx--<>CB@@sYZOkGlnGh4if5Qa`6>ag!19e}tbl(YGCp&q-_JftpbY_>mHramuJDh;|2QyuWo0Gr@ee=g zuks(|PX#@1pbrDCO@o|eEVG~913CL!41$FAjp;IX(Fz8R&AB-2A=V2w$uBX%yX0;x zc!fvB*2o<)WJqIQVJIt@*Y)qD?B(o3R$<7WQW!GR3PVL1g`r{}*|rFlJte=kAO-1d z7=-UmnY@iSEhc({pYP4>WEut7SFl``09dpz(KluR@4kuWQmAUz6~$mcrA zEt^&14|SyFZRoC+CYhEzWOsf(OSv|#PXU-j+x~iqbaTZnbn_T?vsM4@R{e|9;e@p) zlEVgz_&duCv4b2jslb(}ZqgarA;W%4(*b1(9AYYR&1stU3c5CVfa-Oq3#uUB5Gaiv zs89aNutQQsRP%ou5RkhO;PK1#k3arR`|@u5DNGlN1anbodeNw zr_>l-0BWG!RfNUiDxtz)qr{Dh89@TCpeO#?$(es1fq8U>namMkydRtCAA#e=jX?N{ ztbF68EnegH91K}U@L0ZCAYmYUFUPupoDdb3G3#VJD{NU>nDgW02c%AJK7d*fG`Y8u zC2H2fBCKR7%bvX!471VKptaJ|kD)*=94emr4l?jdfwm4C@0L_3&RST;Qfh z_`u4&BoI#C2jjXg1yCXpANvNM42EW#kOU}4^C_CZB0W+t9Fl&^9O2COJlJr zDCpD(H%-a{Y&Ze>E$Q|o6NJk?&pPqQ5jEc#bzXEYkn^oE;}?=C=T~FKcG3_mQ>5^` zo&#ikMD#J(Z}1CI9TI3%XugLdP=)4N5}uewHgi3xKMnB%iEO)k=Rzt#7KYXi0G<@~ zoeg5lx*#WqI!Y@g^d342)-JZQ2bW4Ei<-eal4OwitECvL`uT z7&DHLzWrj%U|5a|!uQiREMf)1=gUrknHD%laZJkPap;22?CrG9~+si24%t|j$JJ1Cxd zX%?6r7Y#&3g;2$~v7;+@GQh&N&kXAja%9+q1U6Kn5@Y%qd|-8-HZmMon^M@aDv+~k z3MeJ=3s#Bx_k5IL@6_z*bE6&Ds5_1PRKgJibc_o8VMArTjvozUSDbxQE(h0Iy^uzF4y8P41|GCX=C8eSd9d2dP%Ah~2@c$~{zvQ@zjyk%xF!{&VDBZYz))2p3Xmetz&R2XV%-}56$DxoG&L<6iQmzy~O75P9oMK=&_K7Fk z@vhyl{ay1=VKDEDI=YK}%}`KrAgcv2(03TX!qBQh%;4ZB8vMxVOsxv#JkI_U^QAaR zj_M$e#&lG=X|eP%ki;fve@nsC70c|21;W4nA#%x4mpgv|H#0vvj+@(zM|J*FAM&$L z#=ry$yBnFM$l-=(*Ww5AkeVDai^Mxeqdqj+2g%-p%f71I-BP}}9tE6mdD!3KZjfc&Gyy6e=PXyb?Aoj=J!n)BX zgg1L0LXk&xhI5*;ru=j>jL3aqO8F42n2{@YXqYs``QF3v4eJUn_apps8#H#4eQXzy z&R&cLJ#tiS(B8p)^ zm0Eftc~nb>y-tnF{_!0!!d1ZS_?r_30T({v0{$TXpdyeSxHwM30j(h(uJ}Uq&e2Vk z>T92kiX#hJ`CC4v4@+6+IMz8%=TB6kLUdYOKFd4x_Eg_zozOteeUKW!n>p8N7 zb|ysNs0w7QV!hs*Mo=d1tuBS|qgI>NB{sx!b+c(rg)%BwZNr;by(XMrW73b(PUbMY3PO;(H6(I2i!6v4h#a`wx5Lz$Kj{m zK4~~vkf;kTFGY?ltQRdHoKcuC%1H@7EJF9M?xDgLRD!4tp$nPvr2hBWhd-9UEKqhJ z9Ah6)IH+Otrd`3j^J~ewSZ7_Z$;SGYn5D#$7j8?U2=kHCL+heqng5NvFYK{GyCD_M zzrb1Of^!s#)!R3o8xMcIeObc2{p?^-NGTDpBr`g}k}>{)9L`h0_3ya{bk)|)Bv9yS zHCtrqE0W!q)5m`rbM$9o{BmNY%UR$Tz7pmF!fu}3hF`Ms702~udvO)hgzrKFG$yuO zXG_8t&X0hh2Rd6Xi_QnldJg=*<;*PXBZA*JRbfe*wUK1(_e{G zwx@pwVEDLv3B6~yqn=xyrzMsYMHu}VZ)2XL-s}rsTy|Pf6H$eIcVjPKwU6(+X3}~X zPycyV&qD&3FQ*}aBMS%T`fONAV+OMr1EEL7xeowyYfxagRX~hTUrZ*aaJK&<d&nv|_)w%7wZ+yNkPLUe-}+AfZ) zyN?*N4I0=<%X@8K*V>P#pOI+o7eB-;i4iB|Za5-X#iS!Y4S-{aKxYE|hj`+41HZV$ zEn+dwGX5^&Uc`am0TB1r9tT3)3#x^ykg-bUdJfwDPa+>H3zgEj* zcY;5aC{^z1jFoPCx|I2Ti_`W}^+B9a(3rin7S_?WZ8f1fELXnO+ah9@yD}W3Q>|49 z_!Zn(zYfxSQ7&z*6i(G?If)ULM|!C^GRTE$i^-wY}sKCw^~ zMD5tjp#cEaNYX$=nsB9ZA)g0OrV>|(%zK7wkgkr34E$8uFsy%kpdEvxupYO~9?jCr zRWwUDD-UK#*uxC%3;;4|P45CG-tuy{KU!sM;wr|Wjz;?^1OR+~PQ_>pzhE9-6Q6yd zR{5KZ88*UG&#0lmBue~HU2e+9f(pGTq#Q7IW*E*DVT{$frly{kjCFS`GAyy*7&Z6e@hoL zPEEjLD;4%tM!Bu_zm8JWO3y#yiKlW7c%Dp5HX>us;T3*pZmZUPAIH{ z;w{A16EjxfhieZ4a6@M_P$k1wSJVgkN|3N*MBk;_2N-coQ(@AYc6QC?EEYa|22FuzBLT>po%F zVK2~oiYqcD`c4#*Qs-4<(hH$AEX_yQm0|1r*xr1Vtyz)nd2Im~kEm0Z!f)< z@EAXWo*7gQO6>9>qJ`OVQpN*<*ruA1$|Frg)6+%@G{BnxAHs8 z`QL)yadZCnp!&$8904cRKLqvnX%*|Bps@Sd%5P;Jk)*lY++B^dfiKP_huy%3ox{qX zP{Zq1^`HGa>c4X_^OQgjBoxP2zwuL4KVMg$SidoS4pmFyejWfFT*Fafzba94m?VD* zI>loeBN1Za7&2##X#`%c=Y-JA^F=u!#2{`F=f^DXpSzJ!B<{mFnbm8;H79t)p_geh zu(-ugu<$wYgDTXF4u9BA2Mm4Dk?XmmCljYt8ify=|FF_Nk?S}Zh_;86kxd_^LFQ8z z9L8oDYOvCirNuS;K!l-4$YL@3LVTOH&EAY=NjIO#4S4XQ4`y|z&1Mayq?R9JYE$j* zEIspHr&=8p*Xqox+0Wn8>M!27R;ju@PIpKNlDwzezE8l^!=Zd!;3D=`P@*tX|8x!-qS=;$Jh2>2R!=GN%7s z?hb<2DHQUfyc#$cWSWdba1@6bMUK>fs1$_o(>(U!748lqc;+|K$Q>wa@|P^%1A~e3 zr=)P26huP`w5~FZzl!;RkJEfvY|@^cs_=xEOau7^LA;;w98>!23jTva4ma=z3h)tN ze;a?X|Mf&_M=(KMW+fglA$VmaJIQ}$RYR8g=~p=-Dsn<*vDbcr9pNK7AF&dJ?OB+E zMQD!7u}K#Cz4~fgq8{rZz{1Yw5#82q}N(b}02yliOsuIwVV}Clm zYfC6&{|W6yzKsQR?0@wa-M9WExy(~{yFUV(>}S6QhcG41*IV8cM?(!Fj1#i)PnzwE z2f0LI+z44D7h1(Qcl5m}*lc6qM}-*o;waF7mHPVMy24TDg2*3ioHZ>an0M9$Vj3C4 zWf>`vRk9+t*}h~aakc?&G$>tch9LaFQ3~J^6_G|Q0RDl)#OHm4auEIs@UMu21VByW z97(~+Vwr4y3r6#M?4wx=WK$&z*gtFlCiWx9z3EGp&gMPG$u-}T8@)pPBVE2djS?u9+$=9+P}%yPgIC)i}P6VjmD3AV~kumn57E$)ppb$lLyW|ArI zS&sKU!3~}Zrc>bQes^%9SN$HZ4+r3Fr{ajtgK&(3$ zjb-cM36RmnMFPhX?en105BF2)a8!y{Rq{a?3rP4OGAd>sC#`9(3HxN%3?azy(Q5|9 z!H%pv!pGPYYbMuP`cV>VEz{_G3By+{C;z(#7F6Ol5nZpZ^9Z!%J@b4f z*TANz+h1@9FK=sEYLR#RI94J4r$G@`vZz<-T6X%h{LcJ#q3%=O zonzT)L|^CXZecl*(57c*KzB=xpJ*ZyyS4LIqCqn+ctd)IFlmv~MTQ2$x;S7 z$C+Um0C6Elf=Sg0)R^)Bfx2Yox4Z|*X-`s*We8o%6uw4MQu@OW(n`Uv!0@bCIc?}r zqqN9O%Wb_Bg?%(EkYFsk6?D@Rk?{%8Ocu)UpKW;TEeJ!iX(?Td>Vq|4LF{5&GmpV% zAVbxxuBF;ZC!)%{ndbJ?ANYRkx|nQYwM_X16_i=Eb8id;k^!n`9ucd4xSnAJ*m*JoI2F7F^C=Vd6fxE6JGYaH$_~ za8YA}eExv!BAkV%wWG;@YHB);*JQchT&37}WckcJUe?Mf1uO5_AZfa<{0QQ<1h}1Q z$j0zP*$3Gou-*#&qYyXEc`%`vQ+d|`F_+#XjZ9N{;;px z4bS&3&0@P)Ib>bTkLB$bP^`ws;JoqFg&-5%SAcN;TLQxI8U*!CuZaSJ7&o>gQVkHK zim0ZiM2WoehrI|p`06dngaG(H4-*KTHm%)D^00|}s=g+h0 zs7xdRatU6tJW1)2OQwqwC9wPOcnS1=^{#^IKr#L^lEPy)+NjwEh$x8#FxWU5GG+j7 zxh1Y$AiU3;g76m(PM~=Q>8}`Ir2`U8tZ+sY@g%t*ovr+QWbu`dQ@At>ssYg3;O@Mo+ir=Dz!Sep_OB~e_ zctkfZhNZ2%oWTxov!f`3WQzh&CduiC8??L4G)`!QDuZ{j0_P|~nZOd_uNs$bGm2&5 z+dNW3pTJS#{6i+n-BTa1*%AikP&BS%p_DIGmwoDWq+7Hk##M-@e$PW`pu+xx7c_CZ z;+|Gskl#%3f*zu1#k`nF1W9cG3y>e7~Iu|=OFNymYOYy@M~FFiCSFQ zxU2~@1w-du$bdL(a!j5sQ&NZ_&3T}vZx;b=Uym5p-TZpuprp> z&#QmOu-uI?=&?pfMzPNA+zV*s>(Ib0$Z1#(uZ_+o+%FC`ITK8J199SmW+0?-M3Vh) zoav}{w|EfFk82=R#XPm5z_|$(VNdFD^a3$rVFga1xP*E>;8@LzJ^u$z*zbQt&0ve4))fD=>M?OkFRB<<_<>rm_8&2N|H|Ki0St1e`q*SN*dh(O z!4|g4Mp;6Xq?D}2f;|OQqrPW3Lb(Q4c48c^ah)jDuPbqFw-c=*M#dlL1e=U@LK<{C z!B*J`mS88c;HXiZx=>~7dzND-Oxz2U(i;p04mESsQ=|Gcmf?wk%J#!3e7jVP!uUNM zVtUX@eN&Acx1PEbw%xLY;N($EEG$C_@CC*C#U38`w} zye$2R_P9E;N!2olwLpWja=oF?2KDAx{f5oyH#UE|TnJTSTA2Riv#3{y;g0eO`NRIp zcaYt5giqs;1`q~oh?EiW{z*gB%x_!Ot_%xwbvwpm=T_AIBD^HK|1v~y&2M8<9&z#8 zf=s=?6IVDQc&ln`y}y$l7+^sfw3q!|=R|8a2au5x^9iAqI`vy+_4t^moF|XH!_HEU zk1Ca3znqwzok>GZheWz3!zg!82v}?Bdg4MH&JIcVn~)o`eC>)#Ut5 zWU%HQ862B%+nB({s2}1;mHaULd=Z#+KudlDLq3u5(Efc?i`eTCsdbifal)dijj zutBDP*Cc3lL$|LBgX$nF!wd|AJR}bp4no9hF5;y~bQZr4nvK+v^`dYCreejTu7|;Z$4~^1w3jjBbHJE|z;a+OjH~wH;4k4Pt)>*}Qvd$75_7qQn775Bo44A&b9<3Z{3#A~9ugD|^Qqy< z$UcgV8F5N+CIXcbuY}uk8Oycj-0Z$M&a`vL5H)v=`bK7X*5HQ7Qdcb=+F|#3jMX~ddR zS<5j=24>^*XNGR7nNNXZs-khR!g%Vr7V@8g?3+tJr2r*DrMS%*#rR4{%%#ioQitOC zM=$yVJhLC3hq=>j^5pUTx0&^S)~1t$;jx|d5}cnyFgD(QzQ;T=a;yC^FpajXbD(mn~^1@CdFsjU3I~AS-q4 zOJrwBLn+|QlebA8a1j+gj`lP=*3(3x&G`b}>pkF3+vp;B8RHs2$02yoHeW{sDq(#- z&V5}K>BJ+bF#{J`!yfsOU^Qhd!GmT;rW55Q+YEO{d=Muq${vPv?cj9UsW`P=Vc9Z~ zuf|l08Z6o$xzs$E(_i=yD=c^@5-KYuR{DVAJj=Q%vej;U5pZ4tH1D6^4p#i;XMPcI z#XrCa*anj~HR~zQxCNf*-)4Erc+$u?!G1Q{!CJN;kAV4>t!IJw0H_FrqjTHS^-Y;$ zPT@Zqm0^CD;!mc*7jP1p%M~7lADHO3desLRZ;AiX{tk!asSi*VRnt>UV24=UUp%Ow zMOs&*iVA5okwcF*9w4cKAO(19;m!(YXu$D(9!Q>p&r?sN=R~L{X3KaSRQg*URRtDj)@5=; z4gt&fRM|{cL#xPvImGPq0m`bdRs@o7f01IiP^HH#I<172qgJ+MCLs@ZVdgmgWDY;C zp@GmpOH`v6lBi*2;-GcjCW5K__Uao_aid23DL^FDoJYVs0|ht@hLh^D>M21Lrl(Lcu!KpHQs~jPbED2Gnggqq19} z!#*}j74j~jlT>cIkA*%wx0Qm z1Jzon$;k%VTCgjS{}=0}>4V_*VF+1uH9-w68lkuM79ewgx-ZFJL3tO^U4nwrA%2VQg>Tn1F5Q{dh|C8ht4u<7xoS*{*W} zEUh|)82KC^Hvy%okA5AKYGV;$+m`)@VY>*hsj>22HpIw?^CNYC_*`(r#XeKyg+U;2 zf0{jiIJg1a>v6s#F0BUPbG5G}CD|VKj^vTD1H5;3aSRm_kt~$J2)Q0Q4ZMy3|EfTo zYrBECMnu#{y}Vi9$at|CH)K~{qjDaqq-47)#OaELBwI?R*3Rog(sOc%`ZKC#M6poU zfY;{%JgQvswDSrEYz%wTEK$GR&8nH1_8dhO;o@vO;6F_YKW+&oL4f+viZmMYrf))R zp?dk{@ZZr(@r+b^QDjJKZmihtbyRf&)r3wOWYAc_2K@4drDOTV+310t`8i?6`tc?7 zIiRFZJtj^`dsvl~`q|MmY%rWX;$I52t<>9l)4bv3ZlC+*N`G2kR36MrA1>;U>qtM7OrbKePGf0}{ zjkI*}*qiX2s8j;jWWU3EY-N0ZqP~DL@Y9p*dFuau5mOs*23{S=p06ROM1KOd|ARBo z8=yMhK;9N3waw$Ca9Y;#T2emW%liFc_JK8yE4Jiv`v4ms@ z=r}e!g%W0=S;L7I_+3&WD!s}#ka}DD1|LbM_Tw8|fS14DH~7cf3QE-v@N}FS7vEse zySf_yR(yjLQ#kq+b_)_fWSBAEK-B{s%Z=Twyt+%6;A{SUsfGcF7;89Kevjq!@o=Y#w#;yOIPZ2iyt0SCq-9Y~+LksUyq9;soazk4D( zfZg*jrjaM9m%gR=i0nl^BBua5#~-7xqqxoc+T+9yaL2a^1Vf&Od`W2A@<+?tET8Dk zBns$74-wI+AAXb|pnn!P|Bze4^Y&auaUK>cLF^X!!1!6CXk{ z0o%{O(L_w6Pz15YIz14E2wUkd@Ka@DAqDp1gHFdrwpl_ zG|E$Uy0NG#8@It`n1J6TV7}UytH?n#yM--zB5z}*@hbbm?O$UFyggD~=0AwhR5uh! zn7^>n7Z1C#ClDKfG6kd5Y*UD5k;BnQov@6FKS;f@f!#y0DXS?8*IlsjI^ z73y-oLeVW|8A*A02zLWk0U{r^6~ffP4x?I`(mSV3&Q86%o;;5m?oU+15tvc)2yeqTvkUvs1&Ip; z_W`sM@B&-N0c9=dLK5y?70?hRLfKs?`vf5k?n2ohe_0h$cH-3ystYTo9bc=K64uVm zyq6`Qu;%d!4O7W$)p8ONo5gj{v=0?M3=K|3Le9@ptn+VT0&fZz_H<(8YjCI6c{!`o zvdH6R5J~O9T?bF>NHTdM^pBG8 znyQ=rkaxiqXnNm46V^vQ!&REzho)bZrWZ?zeZ9+5wQP;t z3-T?SGcb%(j-+tjYoll|cN#VKO2LW@L-1f41x=Exk}n%KYU?$bz8ABeF#2DVuXGCB zzJg3YkuA!2wE%a6UbD(Cp)%MTa$NYKF~=vfGrC~qC5$~&^mWo4hxZkmyeWjW=4!jpde%Dc-G z)Re5`!U!ylyv&Nr4?%(c{mXz}+^odS$tRS}@Hm zUv@Lhw50b;!(v>1go+4vh1%9P@ew!bgebj+FFnpv5;NW7Jc%m=F%N>6%Sj>oT#i)n zA(F5f_2Ti7t#~+B@o-)zY&x#=6|~AJ!@7E$ZVZqHmx94|gTWRHgZ+dGu_5($xCE@i z??szT-^f;iOTl2fHG}OI2HOn=TPzI5Xer);!DP14c}9Kz5xxg+FBS&7SJeUrLoHx1 zGq@5>w;Vk2P(11JnlwL3)zd?Ddx+FBQlOZK>GRz^oPJVZB|w4Dbl{`N8}j#UJn4-EzNNQ*2A$$@wsJ7ZFYkrIR3NG^1k88j?Mi?dZQ*N{maV{mnosdw z#X)YwFW~a)bGmvWU*pH8{P8Id8!7KHV4bX6aC)K4fOSY|@6KwiQRwj=Ap0fh?GIQE z0UK^}RfIL_dodN$KTvn*;hr|gmaR#g29^+Ht23GAt1lqUdw}ehq!+W*GxP$r0NHlq z9N4*|@O1z4-)aJ9tB>>F8K%WQV68r82txchLwaO1PB(R`+>L<|6eV^lW_rbVT+2?! z!!m67&)IKgL3AVMXS1K2Y0khDxo?>~QaU~QsMQBBl>gxatoDY;A!g`SVQ=|6`o?Xx z%!<-y$mCGi2P}95241~Zq!_h=Vs``^3!oTQP3Ov->zaW~D{2{}?182>}WwezyTB=T5DUNvH^u{Na1WvqlA` z=<^bsB*ylk-5DGK5DK+w{}emleJu_u(pKpIiIau#_bVKr$jl74pN0*uBy3jd+`~9D zar3WS=PM2;mS|xb7>+*yV%(^E8gxnV{o;un~FtyAg9cz;glYrOtW3pa&n`) z+YUw`-Z6K|NcgSQ9Rv~M(05-i4%eGlZ)pM_SOrYmamU=kD>OO$VTYlpB7fH?X2mUc zNX56rDo$V7lNDop-KJtW@&<8WL1tpbr=Vg%rh@~hS}?~yECD7)kE35ny4&C+`^H67 zTa0#1J&cJ!q1Buv1cy5Jp$?*D*ka;4f&;qRS^D#AR@~5p%o-hY%+ohAGq?aZghgHT zOt8)*9gbLC95Q~a7i3(!DvIUwmyY^>tbGZ5RMqu=0*nM?d_fJSDmrS^;8KHvCJH)H z&=(yvC~BlG(Q1uLHEJRe113&}WSl&R6%{RN{MCh87u*oHHY|pqRS^|Y)Z$Wk(@={m z1grUfzvtXHOA=yB|9n2=&3o^@d(S=lJ@?#uw*wjbBbpz72*wn;e2UoArDrxL?0p>dFX-P0*4E1L=L9tq*HssOJ-aqDuBwz@ozeoK@f_X zCla^;PdBR?>Rt)8nW?JF3Sl35=qPvCp`aSmQUnm+>pLZY@d|Ka?@w3(T8Us6lcl~-Z2TF;gHzUz!XRdg$)T7Y@=X50&Ig%P?X&A_JE zAI#so;mdhLqy9WGo z@IBV7M$A3cca4AbwCAiw1fTJH_43zRt%xH=GG_`LAsa`OMHb*4O$@tXMXu&sgp6Df zQJzhXsP}vWAoZt=4Cu^Kf#Flp-U0HW`y{ak==58LkP-O$_j~D>uu+tDq)aj5Jf|4p zV}>8ZKsmm%hLP>OQaN*|YZ=I5DZr}u!pH-2p8BPy%+l@2Veq$wnHv)Ej2fvT0b~HK z0LCeE%_6R5S-hnI-qHe+O3LGXoqT5pQ67N+oCWkp*a>m0Nwf-iJ74F4xedgeI=p69 z-0aKvBf4gEw{CaRIoJ*_&7K&2D-_$ATWK^LjrSpE;H#Ap*luWEW#bIS+-jX%_lI(+L`y|;Pc&|m(@9qQ97${>t$sNLPzFVwh{&=6F7?T_ol~&!GIds2KELs33WU({J&k-@ ziO(6v&lmb2I}cZ`jNsPA@qzG0xz}YKkRXeJCOKu@CD=^t)YzVT3J@LteoJXWjqY)Bs&+M2v@b0*-)JFEst9rt z_V?js3G4#0#7Okl@j$4DDl|M!8-8R-TEjo=vfT}rqhS*6x9B76_zy78kes1~!!ssE zUyc8j);hXI#B6oEUGGrr9r@KPw5MXNfvvscZk<`R9n}m;=PZpI+2;V{4fL9zK@514 zk^?LekJ3PR{JH~SFst{aRw8rZSPveLM~d+L6XnVHCv*WEgzNMf3%YMF;0)-h&bR8j z)_=eI(^h0x@~V^b;#i}Yx3W4^D~h>cC7>|sJhIb1Ea@LUo+XzcT1WDrEmh&00=R?Z zHQ{LrC!p6EgHw6eSAUC&XiyqT6;aPZd0sjSq|*OsZH^5G+`m3m1!ho9ss$) z!`-QGV?t#Vh_D#tGbF#83Rm32B%=bn3wKBb&p*IP6)kU8gKkj&M)GI_9vdKd(AWsQ zU~mw{gLH)a%a_`sZ(j5EA*ACeMTluJAYrvsWdQvPzksQDBlCcQJ;@HBm#5Q=RYfGq z{c%6MKO1tSF5)0?x>7yv!%uy97RLGYUHcXu{c`o?V3?D~2*XsLpWe44R#5B`dTR{V z>EO0Eu}u+yvA18j@ks!51stjRuKWHxyd4PuPR=|?ocIpEfNUgLbUGNgzU#^9U0+&} zEB3-0$N#u6Ggx$rC}NLAC-E(S=};17(+{;8ZYCeXRkIqf?Gt|uv>I+prx~izk{Sk>{-}4szCgzL@E_AryX0M?!JAVoW2Y zeJ2`d*YY-1A{D{Ira1xWJ?bO|Y#71=)0eDS!# z#|BiV^r7--M6%s=uR`4&jYU%`tbd2%Gg11+1tK8s)UPkWlr{yz$?=aiqBM>732nc# zl+@UMU=Nn`f5xLxsqHr!T&cDnz_%d34Er#$t6)9ht{tq|$Dmv~pJrgAH7Cmz4F=!8w@K;# z_1(WQn-;$jdz+-!{z^9;1`l<Q5N4BqL~iT>Wfl9 z0`vd3ntf;X^j0*WjM@kpQbvt)TiW`rV;&lND`t{}S8^Woyb{?_1D>^V-;KhHCxB9? zWZ6ZpRv(&9E($M&f?XC@95=b{ANNGVx!mFfISX06xOD1IDgAQ%XHefKJna9ROON=I zqM8jrWC25IR!jO=HW3Si+z5DmMntw!!q5S&$V`~+zcO7pQYj~OwSN&t)dZT4$u_0D zI=-8J)UFv_T^CkuR4yQ<_yh1t^~=7;NM(-zf$t%Mt-kB{%ZJ=yMdnHMIT=S9WinGL z^jybvP+BG`5P5q90rB5aV3dglOg+2&EZ+j$4Ea7?_MDOT^CKD0h%0lt!HX#j+z!X; zuhms@u1nIj0g~MVuSdNY?SKf_k4GvmNw1xfO_wpCBf9oV^zb`Lv_rwj%Bnv}FroWa z#urgz=kHZ2O5iC`@wfI;{JZ`;m5Y24EX`-ng3@>@s{0q%e=Z>8UdCKMzHX-Yx>t2T z`Hu(ODpNdASTQdLYrF_3Gh}39Cg&S-vPhbl{{0TO8t1~9s_#1Wx?>KrA~Wb%IXVA2 z%nk@+A1k!gsGbcWpNE4 zrg$f{_siEGKiDT6c9m&^o(ryzc?KZh*J;;36 z-(r03{{>RTLF@2SbZ9YC#j2ccvHr%5jR?j`2f2-ZS!W8wkAuRF*fSS>4B611-u$wh>b zZ^K*R*L{K~>HW{&oT}^m!)K6DyqMH~ZZR_-KoecZ&xX=T2jRi* zQ$g_EQA-f|Qn&q6V&)$}i65CC$ALRXAulaSS4f4*@?)hvPj~m#koV3TK;XNS7)A~n zVqc|CI9cMfDx4;O?efjq3*}L+9`#1Z$#E2eLrfVs($Pq<&D$V z^0PE{>wnC5(fw&X2=o(Wc@C!}NKT=e;Rcanro+V}_(_Ci6Uema(`VnLad55aO>bS& zKV!Yrs!*~4wYV55a&`QH$Y1Q+J9e`O?qIxEaCt&^eb>v)N0nKP4~T=XZtAAVqJTag zWz@>ec%D>1K`2izlMg37QUQItuPJHq-cwa_d=2}*P#DH=GA0;m&m-w7sbt^=2-~~$ z9}!~XwW&lP`UXWHAB)<@jVLB+1%4#c=~@d@zxMtZ((y~2CTK$oyI;Nhc{jX7ZJa!m z(RqvMXXKb+gxdd;Kn-OmNt$2|RfZ$^7VyCtLtl)u&I8q8!ZX!yn}^H~m&A^5_h2=4TzxNr@qj|JY`WJ}nU`MH+q_+i2|CWG=fg8OH4Q@l z*#e2&ojdMRD_IpU!3myvTF z|2Mzy)75)vlOj(`<%~3-l?%J4gT@MVyubhsSSuymbo)K2$g>MDa)6Aq4dhd1swAAg zd@da(^XVP{GGt5od&pEELn+5iK^_!ZDnLVMHpZ z-`!{D|MIW2&gWChgD(GV=jUPRIt0Oh#4SmzhDGQio&h}chy6|L6?KGpQ-}nhQliw` zM2dT}+ePxsx^D^7U%Ev;uvU}ecJmAUc5#=!yZGUksa^D)M=cJ?(=Miae@b7^z5>b= z`ab)6!+KnoeaPoM?PK26sMhh%c{t5JuJ1}1hu&(pf5%}W+KVs$EYVInGy8Thy%LZe z|FkOh3Z4-#2+#WVs|d}=Oo3*;5rDC$3p8J`ob;Z05n;*xdi|HXfdh}OhK}(o7*vIX zmTr6FrfL3^yqP8fh4lOYg|WrlNZw2<36ARZ>Iqw7gEWKjt4GK`*rLKwHH47cBr zl;Qa9(n<<1YD^+c)1sn)n+<GNJQD|o4wRlKDZbPd^6Zc@C zS2|TJ3jLpnw(e&bp*V<6Z>6_rh=ZDA@s1auDy)7Oj2NRFlmT zIgsBw{)5yf(DNkKAMi`fDfksP9ZaT%0M-USSZ(!#V6I<(kOSwu+Y`ufyXhdbOFvP7xu8E1QXQec9mHF6cKO&kLOKdOc7s2IG zyU8E!jJaCg01TRz2E;YO6mxn-pe07gPdart33*j)3o3Gmwff zIlhm-NF!+Xm8whrTY^4^Y1{abA117^QB8HGcD?oACAI(eaf)+T`;Lh@^7|#Z!gs;~ z`Vz#jujVd-4PJBa{j01ayYw>T{q4M#$>+&@Kb*&E&H6v0HEsVpI|i>2s_Kt-v+}94@;v-l9)ld_dc`YNV z3G@eKz+@^4xYuBlD(J0p5Yzi!){AuB>^@Y14iuxyDeyZJ@>(@n@p!t;^&8i-FHv*o zIg%CE@*aF)v=&AuFf885CuzCRP;{Eh2b(2aBwuw3UpD%) z798@}AhSS#qQ}wlsZb3~gG%>TrFx-z#_M8p?cjBh|Jh#yl}=8>e6p{m#lRPR_e;9M z68>$~af5~k2wpl|vP(^KgoS?h(`NRX*=Vr}uK#^6Zh#;Rl?KJB# zeF^Hpaw_%s!~J3oVbzHt>)j=le z!8qh9JXO4>GtL!gx^vF9edl8aBz)%y$m>(bnTr*?6|PODuX;5M7fpE0ln$Bkbc-*6 zkTK$$xOObD$ z7aiKJ_7Z-}-s#Piv$=cInoDWVnUJ?i^~uGmPlUaoPlV&3Pvi=|61~DS()Ey5D1(x_ zNn(sRTfM|l`WzkXITK(XVJQ%|oYLNgr=!=6{+!8q^9ItTAUc$UIYM`Kmk|ls;eTDGA@0pJB~;8dYK!!H>HSfm}pjvyp}w z-hvC4rmx2pyJS|~7;-M`E-CsJIlaq6QJlI+4wux`2~8Kn5qrxIxWF4g4CNz+?dUsq zw7c=_Wc2uSEKeHwcn*!wYt@Hf)~@<oeZ&HZB`Y@Ho0&&3SoC~f@^Z_uW#CP6BG9^)^ZFAy8qIOx{o++{&YI0nT zhEc=>AaN4_^W(FQ<15Lf^2g_1Ly3cdIc}Aq zDK%ypI~RuUK+-7A&7#e?Ma0?d~|&7PbE zHM?RIIUsd;i<@TzDZua188R^H%txco$5^o4JF;5hzg9tPl196J7Lm)L|l5&~ZZ zxxrQoka@x?a+X0AA##?)*=%Zzs3fk}m9P-84Sob5S?*HN zo%oQ=WNU|e^wn%Wh$e#WuctHLydzE`={Wl>GF9kY5M>&E8KR`|)AiFq3&43LLUf=7 z#FLOX{yT+tI;y9z>B8zUI06P8L8gw^KlfP!Hy#V-M1Vq|0SFNQA@U6&yxyn0&@s;= z?o+=4WWVjfE-C(s@VhLQ4R3^zzLIJVe~iKoKw+1ciNYRrt14{tA!o*C35A`{-joYI zq3HriO-I!tK_LEcI~zzy@(>qX?G53_X_$Cp+CgBJeRF(&cu%zm@iXUFq%}|j|Ng_X z2}I5VEd+wwBRC_sd`ckT+zUcX)`;y?0k`lq`Wk%vMu1SeMmQq*gy8lzuDhtfqLGVn zEGIaII0!E<^ZX;?-~wshzrQpO#S7?ekmftceyKRX;FXV(>NSaj4PgjyYtJ4(xhBzL z--A=xW3V!s>^w`*{?r^rJ9?b6gEYB{B|zyEw4=w~B9nBrT7@R5gT?4Y+N!hA+xQ6K zDi2`-Y{Fn65+WXnI~^mIlrI_egUG=6h=vx?X=KO%U>NSC-k?Bh_faC-t!8>6ny(`- zMB3slB5dg`Q%?g1)9gSr8{Z(IX_G00v^C_ewZ;D`4-<81S59Gty#V_Xaq9j7`;bS} zB?0Sv+P$R=a>6uYk>I5K!f35k|KWV~=NGUq@E=-vb<7o2wecSNTv*LlfCj9b8e6nG z!_XyQ3$AW#Az-*S^S_?UxWIfPwWOSBuXXfwrhP4aYSfr=pgp~M+pFj3jpEcEOd{sRBB14OiGiw~#EAVNA=H$8dZnGnJ{{7R8ONIZpH))T+7KMA!lgTew4+(IUX2+9?xr%wqB zAE5s$X?Y@XDsWH|?xOjr&a6pWa{Q;&4n}oeW|oP>p*l(YqjGV)t>e6TC$yVl+pL*v z)-+G^mH{xuO?++4jh9=E-&vfqx&M#hldZ-)pZp&8;|QzqIaE{M6}{rkovlc#bR}oP zKy@dfQcbt&m$SF8Tc`-x;exMT zu}b#By~yMfnol789RK`29Z`!>)I!jW;dx%ynybs}BLBovG0uadG*w<~e`MJ@W1pLK z-HPM?V!9%l)eub4Mvm`^H)#R2R=5C*&!7=B+n_J<#ZTic0#5uWb1mO&;?Fb!VFW65 zGMdl91*}L)-0iAbEpPe={?JJ|#Y?KiN*e2vk;oXo9-POIGUBcHr8E#XufD5wz`C(A zQ8#>mkj#o4NBdwn&uRz(=k;Bm5BQyJML1~(^L?Na*NW`H`$WkSKyKJ0(!MWC`hWZh zeda2a{Y+1lybJgi{TCDLrS^StS30fMv+It3>KjCAe@yMY^KgcyQkeSa8*v95OIxy6 zWJ3ikuy`*jIq*@=Je7p^@6<@boBAC81@Dva@QnHrrT$x8K0T#X$s%kv+zXfA@$XMu z)AtaM!5y&?G+GUHp)^`YJpoQ>MMn&roA?t9n?XD}zKO3Zr|~gv&zh{9wuPk@`EH&h zy$R0J-sm^}Th}IflVzxpR19Vh2mz`0p!WM4v^TA6PFCTh_2%p!*?gimHu4|igU}lt zS9}I+D_h7CEiY)DLICuj>aW_N^=!fM9cnt{N`t8ytbepmGJw(o>JW)8i)0?aV%HRe zVnJjODe#PZ!9~o%s&UCakbw!a58x=|GdNcu83*oN#>LV)b?0+M97rinrxyZqPlXPO z4}~|WJ^u@EfSzwS?@X%^w19A&_{5kqv8w`pLyQ8R7@f)cgcw~5@iSjVZrYnA{fjb< zmJEq#dRp>Az6EpEp|>gM1P9!3ig3WO4XON`GiMDsU{&AzJU?$es!96a=~DFVG=iv2 zi7PnQurmWgBhTt41JH8^7i7C9Np7Q8*ktYwxFcP>o6rC`dY-v1AWtIyxmr~#UlY(4 zdF-3=s`3X*19g)quapqnV!vNRNbz*!X<>GEex6n}w)I_hS9V5T$j^Y`grY|N`pUKUs`ufJj)q*)xXhB(c4yp77rV~T9M5tZ7tGl`G(b1hk)t8Xj~1LYOUxf z6EjUX0LzUdKSIt?hnorBgE`+Y_vcXq>-10wdzo|D&Fm#kgj7_#@D6(^n*uAY{C1V1 zP;dnls!8?@U#Tcm?D%%3lE7OX;Di-*Mc3!?n`aLg`r6OLJfq+pqFS%Yro;mz;V5O#2?UOhdf z?(60BrM-Q6k4xCZry!@qXa|X@S-?H??Yk>d^{xN<5OJrIqae)wwh(4jof1a%ZO%S# zCkT@zFnO@h0(eLJd5#zisj?q`xU;IX4+Kc`E$Fn0ztw(?M0KNAa+~gdNdYhye4YD$ zXSj$|T`MolWe0BNn6ZNS#1ao4n3h(oUQJ zYjQjCa;h8%-zwe$H>`}1te2~CdmP^>Qmil62i~3(_1G@m^||gku-y|_h{+LWZ}p4r zBEJWz#qpSwu>;&vHyai5pXqNdZrR^_Tp@f$9mJ;QCW3vi2RPAY^WXmqPGiIk-DFb< zhLnaphGc7GNS0v9LMaIy&MTk^ntPVxeJQShu0eBTyxy8Ebw|mTx_c(K)D3US)RTM2 zA8{A9b}_!s=-hx^Up`Ya^hcz#sX>W9B0onSbMjQ#E8u({h>dABZ?Ay$_!8E4u((0q zu)=3cMs#03kSUU81e2a;+ckjb->{zbU0ZJ5aGn+6)_72072*_Pub~#+gAC#nHgFf3 z`Ysu1L>hBh(m#`q1>Hvh3@B0e@iM+equw!~2JC|6Dx~K2eo7_q?Xpw&R+)yQp#FV` zApo00tqSOJI1j1m$1j;m#);#A+9lEorB34)U~nN{SPi~|dyy<#k!p~G5<7Xq*h zcXynx9AAUgn~QlH-%C^!BiE{k*5e^aGG$q6-~6wi#J)9~zNHAn&y4U6t<=7iLz84- zoE0F?B^#nAd;)5A{DW%KJcl#ipf1}k&*6ouy(YypmIl&IV~D0P5v+S1Cz_N=$3=P{fjNyA};`TB9u7D!`HMEDSjH|?Rr7Xs;mY=yF{_72^F$)VX z>bu4b{pABzZ+Fp2s&LZSq;dOB2N+F6EfI?XKB;OO;rREiWO;7`L!&gf#mogs z@#+C#!(UP%^qnUVYR(>n@crWmq5q~DWistm&Z<`vLZ}d?>NK;Ls5s%h2XJH4Aq+yT z6*A~5qc*n@tWJ$*rj9_kBn5>3U=`hKKT2agKsiRCe1BT1DEJQ&D7Q;A=UkDB$Do}? zgES-KevWkGcq>91X__6ZqT0k={-M5FNDlB4V!70LkkHo77nkX(Xdf<(S%lIOKw+ zpC5;SE!|7|9HKobN73nk4&pVvSb=R7%;XFt?9RwXtBIM!5behm#LRXL(Js1-luZa7 zcz0W-#eL4C{gSfr?u3%N2m^K1P4NrlXXN7{DqfUWyhpzDs@W1!P)2^%mccKlX!7*l1k_}NU$t_5+8)~c`?puKo0WhhZUd| zR9@w+o0yHWNl0#12%iN*f-7hBk^tsO#wLR~!2XlG*Z&#&4?c!O&RKC?8vEzA_hkQv zF6o#3FMXj;_J8DP)c$kq-+uu0&`U`d4*^tyv9banJfBl8iqbKv6eTc6$}8QMwT(3%kgg&4uKCl3^Y%gya)Lf^_8h7 z*3d#R>2vIP&hx3J!vCo#frK%8xJXbw9b8WvWD+M^*|hin1|CM~o7(O)a&`Iz3@7G51+^+X*z4c!-j@iFyI*&horOxb2I)ZvX;LK;YxN?`<-+0QnJ=|xw=pMI;GXL!BsEe zlZY&Y&pqZ7bKaWOke?J0!U72AA1M%?oetrGCEE?59}u=A5TgT@Z0HDRUf?SgO0k*g zsu#>e5XIUSP{EVE3USR)U6Ebh6T=^k75MMGDiy!` zM~zY+-ZXq2rv8W;C+Ggp(Rmu#81GHVs`E^}k%lam@*lH-r6lRh8!cSUH~ozkk|Bsm zs{!{7SO==Z2H84R)jZ+=&;ZHo7Wa3Q`cqLmZ)3O#K` z(vetIPj19GNPjV5|d_q8qufUggABoEluOWel;&lGopVVqeRmfUAmL9 zUa*uZqe;2GK##nluxh~*!k?+-C3NdcJREfb-5ahR?Co#nBpsNfT7C)}| z;O7`wPN%?QWZ5dUjGV<2Flm8HC)wm>APF zV}cWZ70bbpDNf{#;v|(h`^U+~bJB3a+3=pEhw_%uL8jY{ad$uc0*wj6c5o6HIkrnL4yaa|eULAlvv28$_xwmcsB-aEEaxbBdAP?muig3(EjshOo`% zb6J(dWK^!N%4d^EB&->|+FsEPFQ$8RcPF+~UY0!}x}qeCG2z#t=o_Kf30a}oj#z** z_3znOYW0>C`3azuP)Mt8zyg~Ym&qvwco4`aMzXEl-CjIo3s}AO86;rN*q2Ba|B_UZ zPBiDW@`|kE3S=EuBBR?V1Man#O+m74XG)%}F^wQqVjVu{e6}R|71|0#U+uh=4eyw| zucsL;q#n|Qj9^o3-hsN71a^UU+pgD+aRV420y)U|ii?g4(A_KOpeSBC@32=aC4#U= zeEdLMWe-8emnFK7G;w^j%ygM|nJWUD}o*arZ}a?4I5x(q?;my=FjihMamt&$434o`u&(-p+; z$`!0`ARqiP>Jv$ z64`lKL#&AAIGLOqPlvd-mH$IDBLtpKwH!)iMR@uNwO+$VlsQlrnikp+st-r8Ia8qu ztwnndsQ-ZtTF&0Mx4W03gCU}+yrupJZjod)F5=%s-`LLhE1w;OUt^99e&5~_v~F(? zHhf=wwVc3-UsVT4l&@i3RciufPYput)gbk{4mB-n0V^DaEzE?*B+;IDidM7T^KRZG z2WsVJSodHsDo!@FH*^(PYy6jx$sF1-Pg$ ze_uvW4#IhyCn^&J$pnQ2s=!_`C=b|0hhY(n7@z|8h`o72hhZ!ku+bc#P$_LffKpds z7nSB#U4dR4xz7+(fEkc~N)D>`6>ut8%(Pb&XJL~Y+|%wxi*v){zg~uQT^RD>Nd=xj z9h+qysf=JdH;93%aKD{^wbttrc_st|@-^V|?z&p63bz`j5%(Ureeu-)@UpM!++QC6 zQ9VCZRC})%G3PHL-;6@rAy_u2cfp>u2|`S&5wpd|p`2uk58LZuzeEH6{2p{5Lp-~& z3K+cg_{M6uA9E%3T~oij{s=2_6$RJHdFMk@@q3` ztR}$;GZ|!-EO$mpLSq>PB4hMtGQ6gi#o>uUNc?rqY}khH-K>KWdDg z88AA&OYT>%mY;(^Pd$LP#OxWd$hUkS-kOye>J2YuLEuOMgmgKkc9CVsP>(FWyi-{o z<`~1bpbqlYv}grzG!g=>$f6QJUE4A(V?5l&xs1@5opSVe1YyN`$a9hgG|TI*B*&z} zEGu+8a|rC~V2nT9>n0@u4glbMj^q^BLIj>`D7!}sK&jk&I2ua9(B{1bL%%CaV(5!U5?)Y6I#v6@(BzN_P;p8rJEI!s zJKDq)lxZraJT>Xw|8k-anh2v^^hD|K6ERxd3-~giCcGl>WBa{HpXY`B*j@E`eyLqq zakjE|9WV(D=Spun$iPi}lE$Xoqaneg5Njnlf4Ft0urNpvKOEXI1!L`d3C7B$8IF6L zoM-;H9T?ji4a8T1O(;FsatgmR_#4JljIkAcD4E=eia1yj5TAJ-&k}AL8K?$#2=aRg zHuxe%Jvlj}Unimj{Txs1`%s*veIG6a59B(@f z7+RtdSzi^+LKF2H3n|jkNA)N!n5+UL;0 zc}I84ev`^*x(JJ%pnXFp;uEzKVsg-Wn>_YCC1m6Re-*TQUP}-@a*W$Dam0^ zy3of?N`oz5Vj4LpLzd$?eT0Nfdk_IZ&+jgbS$c-59RUpUOAi{Apdg~$?^q7#myW32 zRPa(!*FSh0Pb7Hs+u?}J+>auzSOg=4w+5}qET1`#k%tBDAST9llmG_za`qgLk&@p9 zFmgsO*I{QIA`%E~kt_UD?2D7fnS}*-P~tEV)oV@Go3@jNTG;FZg+OMR*+d7C6l+ck z2plrVFK!rsEozQ=9&Rg+x5kT-=*?SDaR@`Kjz6#PO+@yg^hQjB<@Cn<)o+|QB1+m6LkBk7!S;lxx8-d*}&$ z^6vL{s=K8e?%TX4fisQ?aICybt)%@GwIqry9ilfU5F(>y>X%ddEGuzdAeP;43ZcEY zY&@}(P)%Rk??_W-0maoV-U^D?t!=1-c3jAP@GewKNhr_`2S~XX3a_^An}98No*k#U zU5Y2T#&8M7KkzDqRS;z4Mm#m~H8AvjuCwi2l#&a-77Znm+}E2MYzW+tfU3Qp$Ei234wwvoGNXVq3D`P z(Y2GJaXY#q6kSiv#!9$CtQ<$ThGJ9U33T6deQ^Uff_nE^4h~N*iPn+!A!q;Z-ei#V zQ!63?;iAn}nDd&&)}ld0oH7j2U1XHhebi))V;OiGQBf)KM#C15VX!vIX=RNi(H}$6 z4eotM#=%bi>b#f7mD(ZLhC04PW*_&LN?nYe!d6&Zi$Z;{RudlEKhIiIk5<-_;wh}v z%Fn@Cig_-=2V&CEPjqAVCk0am3VpI%%`^Wq%Z((Jc+$Y#*q}U;TER(D-*o^oSvn1`8^=?|{LBml90ITa`>;{arS&w{&wjc{q zzeEi1{oD4aS23@jEjd3g$NDrJk_w;KOV2uHnPZ~oX`^3!qlK3~BH9=)=2 zAdY&)_CqrcK+rL(?uWp2|6evWgDv9f~!~RYj z?vT{}4%vbocCWiHL4*)S^-=W0n9rWALaUT^e)2Pry&7+Xt=bmk?spX;0($K&{#3#oI~*n~tVvK49N2x|Qx*_1^ZuVymcif%;aI>(yw`j!I!nDj*aB zZ-6EYx&aHu+Mh^hEYRCnNH|UWB|8Ga-pUBc+jT}8!?R##q)#1KwOuvF_lDkcn|20O zt^@hf$43+LOg!&$dZqP!#`A<5*Glj00B*ABQ8XNc4|I$$T%saiFuXHCg`(StK`YV( zg@UKImEz7Wis{22;3%=)DE#Di$Oq#n5ut&B6cyM76RN4&DUZ?__}r zh)I@G{J`O7k~TM^c~0s<2!HgtPK%BQCP3SvgI=>Svl+Vv_N9oXa6O8Jim*{84KRl@ z6;xAD4|J~`-{g-d+2kwHVpS08$A6_l4Kblt1bwd{!{iWJk$j2*YvxU^JD;WveMf~h zY#ViOWHpXNSz;Za3pq8ITx^Q#9dH+3H-e zCDfxW@rV1?ktr>C+0BvFGjAYe3ZNQxr)mhQYQWioNP3WbRF4QjR-A9gM%%F)pjXye zbLxmMnY%Ju-or>T3k&FH<^zr=#Xi_`DfYKNr(%!8=G&+%3NUP_ZAt0mJwv3EhaS(- z6lKNn*Ux1qJE%8Gi6KQNJ1Gu?H|S39Qn zig8)e z4zi@Q;}16n-D+{?z@w)k6v?Y!PJu)gOBF|^@D@E!mKLD``g%#Dy7|n^d3PB5fS4yX zqZpkW>I*x{qGgyNfAoGHtN1$qoX$vdPrnZ3mmYas&d* zj1slDNB7ZUi<{TSQ}@jw(3BrwxR!7y)AgmvukleV`p&OuAtDwKjc@>W!JQdRgrA>> zhZ#5RNw;z#e~Md~o&!R@2=Yw=A)s^_DwzyVf|3V(sw1-I!Gz($CkYS3HZBOwFKlp- zU&vOjlEEdONEvlw9oitEt#WN5Xm*i~>8!|9TIE=sygS$nXn4ji9bos~EFkQC_4E{H zN&6!H_g6$!cw+_g&&ru>QBJ^WWKN5`DBXgjyAuvk1p+;a;n)FVbn8(l8r<2Xsp4%s z+91UMc|`sX4x_wM<)F8Pkc&SebDzJ1`27*p4t`V5?&%ZWdSpE1LUWLQnv>A8f-wN3 zN*0xI1lwDkUpbnnlP;LKmwN<>%$D*xWs03Euww5nuuOl4_5WVWJ-4U&<9)sDsbJ0JD!3 zDmUk~;lb$Da9DPw!-B-^_H6N1mQrMZWwJjo0i|*-6h(H+cK zSZP>4m#qZo9!M9X#^PwR4}6K*5wpt0KA@seY!9FDU1b>8$A(D-_a&^9+8kr3%)r(g zF3%H6cyT6g&P7A_+$|9BFM6XN_=gzy0lI|l4c6UT=_&%`Z0tIR{(u8Jez|5qXI(8t$ zi?o75uKCHL#u|7O)r^{{v!nm5nR?|Qa<@VUgW=f;XXGJIv89A%8aZFN3HC&ykH8^w zF%p)Eya!Pe3CeZ%2JfYqjyHc4NY6P^A*Jbftf^1ak){(V0<eZlPx-4Jz4ch6YGIKspA#;M6M8@R^CIO%+lQL^fZV$PlQq1?V@(eIgjt4Q^4!vzT$-D>=W>$r6m*_94ZQHgh|zbM3|VSJ`o2@ z%Bi-Y*hxVAO<5)3Edy$&*WHwPSoOYt!PjyW$GzBUmg-P8&8;K6^~>3vWi8wRSY|`P zA;J3UmB7|`lfN0r2wL~7NcwPICmHVWdI;TVcixIACudu&(ep12MWrWRtU?-B zFSGLZ3HgPMPI#H+2`{sfEQUV@rO`x4q?KKQzE#l{pahF(F8(Hn%Y^sUxEjDv){xJj z!H#Y#e)8en|36@g4@Ki{-DC+OzyG7#9iMBILQ)?j`K^L%P`|Nneluxqv0DQy6}wAf z46!FAd{Oj)$QQ6oDs=WYX?U{e3n87W=*39AYBkq<-@|TIl zXnj7v1s9guu^n3IuYeoM@X8w|l+#tI#G78jgeUI$PmonXO0{TP1=1EYC0YtT$^o^v=0$v%&ew3{&WaW{nD)y3YAZ1NXaci6@e6)8W zE6#5pw7WP!;wi!pAzf|H4{?_qul7}pQ8_t}4caul2bfn`#yX|s3i@9tRP$6x_n@4_ zs)3=(E8x@SygI4E409b{=_^#ZaFifpS$@6)S}K!DSUfkp3-E{gX6#=AZz~JRGDIeX zJ9`eN9G7AWuK;_#2DtJk-^Nzzjm1C`8X5<#qq7dDzL%_ zkh|i7@c18Z7sc>*X^*~ZbTZJ2tOhJKK%l=s_K+|7X4-}FAbL)Iar>Zb)M$cRFpi4S zTZ!TD_{UjY^#RZ^@))n%SaVb;NdXnDU{#%})x@uYIDi}0 z2#?Tl#Q2LH5FSHUFjwu4`nj%LI+tkNO}m0Q7mQPsdhz{a%+CH)<)A;9^sHCjzEu&9 zeTayVBJ~EUhKk(8m(j%+wiiDQ4uJda>d!>s=7u+c(5Cj^vz)nsL2bsZJ8UzA{6PHb z+rRyU&83}BLhM4A5Wg6R)z*-XAe4t?JLf|p%OH_Q4WZ5AYL;32R<^6D1Tw+b&WV{N zMQg9e+Ex<7@wJG{3gJ<`iU}m5GM5AkxSu`I2Sc1ofh0HN-9{AdDJUd$?C2Xvbg`pr zgL%@8a7JpM3#DYW-%$iuV_pHVm*aq7<1N<-<^0ODv!n89Z>du(m zRr$wmFxvVjt1%N_7`0XlGCG662w)57<5o1JZWxu4`_n#ZA8Z4z8iyc_1D5&(!s9=j zBi*_mloV><4fxNfeV75($5Tq+fOifRhK#NaVV<~X*^K-N)}mp%7n3`NwHKFW!pkX% zuI>B)Pli=}IVrjXcPQGq($1_G>En244>pwfq_WbJZKypostpE&?chR2Nx|1X2-W}< zuvt!-*eh7YY1hdOY*qW90o~#8yR!#8!bwPhI##icY^B8T`n7r|gcx4$vKeqG#FBwd z$M<^c5VQ;2Ir5#N&M{R{k^UP;c5(Mcj6|UKKR%o$ETQ*B0uv@|^q=~az)F?CYiAQq zW53|kL-gK{k2dzJ)NQcDeq|~qGJ9Ym{uMY}2;}|>1>@)N7Fv{A;beg+-K;_@kZS_& zJ&$bYR)2!iFf?RAkG0}2Py`*{Q1iWL6=Tb|)s)z>^YA^}1r?HJSw{QRD)&07;?dT3M*^7=OgRhSRQ zfGRwl1Umrj*WHL9jZb_qX^1<)w-84Nhhz=okyOtE^%;`QLTl~bhm^|rT$BQqW(!1} z-y!SbSZD$CF<>?PhXu zR9LkOCA>TYf;FLt)xfN6RJ%bdJJxEr3BNk;7|n-_qR606A{g`r*}HfN9ut8IIR-3p zN~HVc_jn9_Y4{?#t1=EnHru_XgFYrgsNt`moFO&w3<&(_mGLf-Tkk8kBq#&*XTzaiIcgH26G$M7VCvjQtR^o3R(fXEYh|hzW%&s3FZq@H1 zh*!I>U9@J}NcI_OLdFEBI=nn<844d1wC1kpe8;_AIsgcg`o)=$XU;cYF&IqnGv}LQ zb%r&2e-;GWShIcn<=8*TYLZW7p-XdK9VkV96drb_W{>`UG$UgZ5og$)S>jYkC1D&( zjEvCe8zs>#*gbhLmzdADXv?{+gF@JoIr))yHU3-DG4It;{M&HC(K0ngBH zv0xo^4^SeT8z6ty?5pt?$i#CAoV;a)4Fq5cpU*hR47Emrb|;htLWfCL$$ zNl43Eaqjtbq%3iSu>p-IMEE#s(Moh29!?>E!}MN&n6)M%>j&~JTI>awzr>?}`@qNP zj)4hX0jC0cG_(uO5}g?l$}@}Ajt<&I+eG&Sf6)&hi#SGmS+?2R1+q5t;z^ilynsoE zjrmA)DT#hv2I!OnWHW=I(=8W;?p6^F7qsxte>@uEJY)C?}sU6i3VpcL0$ddVnYo zy`qRFa2k;z&D$jJOcadvIleFJh%QmTN?6TsSZAD-2wo)3D%%cs4X|#WONRpZwV6!R zL3o|wpO`^Z$KS}c+Pv0APwnvf0c;Xcs4>|(SxMXd8PZOK$W^elCIYlTK3obrEQ8AE zCM+KqIAbJ4VP>xFRCYs=S>X|A7CX#jf#sSqw_3 zhKXR#DL+vf>-f@{Z<6ttA0gmSz~Cb1y6=CqL8sot76jl5h#FXGH8=B1rq9Ewd|)-c z#+IWW+oPa9|7LGqXD|5yx$tesNR$gf?D*YarqOL~ z_W+1OIeybAJXU9*$-0Y)ClGX@;A<%q!xE49<)j7_3C@G$L&3bv{~?g$UY*v88V}EK z7+awcte=<#%jSI$G?z_;dBXibBe^r*hw#g^^&2Nu0naY^eDM> z>fJMX_n2PR=)?Q;u0!vZ=;aoD7}m>&pTR|8zKn5EF1BOC_Qx&IJ|VA3=Nqr3cCO#J zMX>d#u@>eEYzl)jfCfsG!dHgqXeKE*6Bbej@%UEfYg8v$COZ*D=Ic_~*mYpRG0N=l ze~{Gw)lG@n8?7TTeNOH*lW-m}wFI>dH4g_+QV7jZDe|5~XS3^ZMYB{f;VpwL=Va(* z5dowFBTB;8u(1c>DQ{ieWm9fsNm?>%sPi}!9Y!TTXzG7IStf8Eq2uS8PF&* zXZ5t@G>-v%0GvS00>$0#y~k}*Q4W&Tg!c-G#xlxu0rA+v@=35B6t&`k6=@drVK5lJ z5esT&%YGi=u1xFZ#|SR9q*)~s{sL1rYY->F+N*AB_R;(ncD;tN5KOU{*~;*e>=Gzi z#vgUGLl>(OQ*UYAfgwO}vv))s+S(!+OMSq~Kn6FZ_ z)(Y=P&=9JFSkp^lCrhHCjI0u89AZzhILW}#4@x5D+NJ)IH zN!=%&?I@fHoHI%H6C_qC!5|3!*$XKavoy}FF5K@&i!R^$2)Vd=SNt(>eI=}yQO$Bm z>Su}f>`z14$C>aZ!~z#6uh0yuOj^eqGin*=Je*<8X;UTKIT{;k4IRC%SZr74`+QRj zm4~5vMez{K@m3;y@i;(7_~P)43DGw@7oms*H*C1?e0!(99i7qndwyN@c;{`n2C6>7 z-*Huq_mgurgQT~N+^h!B8uE{*cn>tk;tgVI5w2G*N_gB4D#9D z_)*NEdjLaKoK_Dxf$XRN3>6h50^r}E#(reyU)=i(1e{*x(PV*nw%3-Jg=YM^Pysa6uG z++{T>*3#v7$S(^}+&7sUStl-v1IWYYW)9vf)|y(3tx#+TsIao9l1M13G%4+=G?rGC zhGH^AL$LxD>Gy0Lf?+N2Ai0PDI5;M|N)HB-TI zI2dQPg4IxoUuhW&`=(|rKz9Q&M9LM?(cj0AIznu)7YQk~trtGcux{=mLXxr6 zgV@gW%!8~5w|Zw5*KlM@*hFUJS5kDYpcW5_N-Vj?IzP!KCdh)_@YXR^2f*Pz(rRET zvA2ufE_ig5rWBh;)m6ybFuiXy;>>wiZ3WezvBJ`kl9f%*tK47qsstp23ZP5K`lIUm$Q-fMBrtiZw z<%e5ym&J$hOWcg+OwXwly;J+35#!n?9G*GM?tZoNK2nV~AteT1 zf)gj~7-uaA1wG+_WQn8dVO0;}?>HW9irvz>F-3z5!b#2)VSqjJ+&%Y}y~gN@uI`@sKG0A80j11F59(zI%|mz;bmu=dz6x>KrdaR zgl=E!<&-s`+gad%p7e4O$mJS_*aivjSsqheAzqhfVwtWk@xU&qP1ujEAk3|HLM2CyO&{-)@lxt&^;VMOBk5Kf&O1!NI6@6iai}7G$)2>Gp*KHjNhAf_pAz5)5 zn#$*7l(1)@%$%_2(Ch3x4E}m_1T)QL0zK&7!F#eJZQLr{&?5IS7ICrF3j}pS zUeP#QFfOUGUjQDyT{ z_3>(gA}eQ(9+y#dz~W)1YXA+>ju@SL%ZH3Td3civs>MT5s&lPiuJiAhDDV6;gut-E zCUBOK1h7%_Q-diW@eRUn(-2EO397NU4E|)s#L=sjJK`Uq9}u>`;31BiK~b>W*SA6v zqg&&3THkb0K!g!wm{XPc$tRNp@-sJt5QP(c$~ieG_dN}@kVikJ4Ja}~G2!E6jR3;OPQHIL9U@D~_- zo%IStzr{lfW*(8FGa4xMTXSAQFYwE!tCJ8#{UwYs#w7b zRTLX={rhNgeAU|s+P{Ne#Z@cucVZRXl^;s0UhZ^p9acRIz#L4^;3{$mfR!hQ^2xb) zGJ0M7OnqU=i-Y(A%gb1Fc=ew6_<-u6BG2(d@f7#xv&24HBER}Ccyg#$Vn;18jwQOG z{|$Sb&!0*kp#Jp`P(MWZQR%dsPfY(>W6Ma!hfYK(iG@jEUQQaAX7)c4FmdvzFt{(KxyH{~D;7#C^u zl_@S#D`=J&kt{GbG9p=woACJku7uL4o=QPxQBSs!|5ArrDlYjbnUTcLOh!^~=|?x0 zeJ>q&$-hHJ9BWlTci+MpUbcpD$kGxvnzdn(;Wdvj)mGI@XRD#a+dvaVk;wtriwZkZ zrE2VW39zIki}efx&NYH$M-zf+_>FXHjAEiRAGW-xh0aXD(sh}YxB4D{-7 zZ$XR8sKyKVL|-xkn`g}Pm(1D%-*pdSvuVdamj_>pi%Lc0_&(Xm1X}0~=jNeK+iA#S z-BhRIBj<~H!)rM!%l-O%B=b7H*f28_;`oAGi9=QGexYONoAwn?#ok9Q#d^71AKvyl z{FYNOMC;ez{3iiO&tC_{J+OkLa}$ctK-s*ZD&`GW0n4NiM{Y%uL~l8F;U$mb)&*zD zBe{|Nae>;tWYuDBysE|ac~wJ)c=KdHg?liznWCbG#R=sVVQ9m_ErvEv;zBpC0`Ui& ztq?1Qg)(t1_u+4;@-f0#wHPv$5x)`qhPkCGT-+P~3cP#|@+)504OxF!o>+fqH8P{4 zzDss(-UXADS!aNjI29be1*RUVD(bsVy7#-?tIP1}P;SbJR}=Ns*!nJ6EQ+uEJ5T1T zB@AA{x+DLEgh#~~fgubJGUn=v%g)ca>z3S$FVgwER?_)=kLR;={o}Orb*t#=Q_=oE z&(`*j(e@8EOC)bY`=^`sq4LpwbzP5EzwA-FSzXzQ>-qJ2T!*nC&M!VqYd=A2Kf>E7 zSklTI|H8AhhsXt@{}S1qVx8W%fAnbO#UA6G4Dftk;~mV>RtQ04Q|!i9k_6cUa7~l0 zVIA%t@SLy(mE{a!s!?R_sS5f<^18}4I3r=6H((!1u!B{*kT5n0lQL?EVS8(k1d$PM zAVK|>(fJk*F)i%zMyWPmTj-pR5*To#eXBlZ8PH?sGZPR#rO34+UrW>IMD?ZkHXj?X zVfGEfg^P(!%#_Mp+my^KJ2og2;2(Vle0Pu4=|*O|ckZey5dt=>I~w=oU=B4TY10E9 zL*ha}v2l{(=`z7nH8Mz#uLJ}Y0>P*H{gN%czSkY2m-4;iUob`aKsJ95;y^R`4D0sN zv7i`Sujsm6al+xg>vljSKZ6SekxcT3Gr?Q0JDo$IZLHUI{0E)t1LZVm#GH!AZY&NR z(gC~zyG*s60$~g%^JYkwj(%6dD&VX||sJ&$p zvJWQ3GA5zQNv!WNG;&&OLdO=o$(l6K&Mql>tM+xQM@W3PuNAIGA@eoXCQ6Sk#iL2F z%$Aa(tlBkPZ|^iSd<(dnC*l>KG>+pBz=!BZht()qJV>|$TFGU0G|aKJJqliCOh$-H zJ{@Rpe&1fwg}}k9wlfH6L&d+AVNrlpN5e9H48O<=B6eX$%19iywnNbtWb={t`Bt~w zohR+6MI>HpNc~nkYysCCw*##`xCW{v%QN=+1*MUefDQ3SfIr-vGOpZ_7`kYV5TZYb zKiAdV>TujE4b@#hti_ZXf*VW_B+kOfn75nVNe4;rMr9UTk^s>VPj0nsYdV8dHk z%PYp|3wZTbW1BDBOEKx(`6~1+7DZ~+R;8>B> zK!Y* zB`|SE6&PYwyj|3fR~UF={q9anP>*i4+wnZBhk=cDbiN@2Y4O_s%%|}&Lc`RrDFO(` zD0J?KKck-63?>j+@{N401M*h|P{AS)8($)~sT39c46aECCVCmja5Ltk);Q173t0a0W6%tlC#LH1tiSxXuDNNKySGiC9%|(oTQ|BjM zC7ti#v0B%=FvqwKc?2A1gLi2O<3o|xLMF(FZ@}QjJz<0l8iwV_#iy5_c9px$dfB9x zk|pT%#rTFEbJ9Lby!vQ0&2^}jA#3E2@elOMJU&71#E1a|F&IcNmyA;Ce+eHtLtt_^ z{mFG6J67*d{5%J9W_DeIZK1rALb1u&7!5;2;4GpX)jhF*zWWHX^^-xzLrQ#1aq$env1%=Yz=o$Ip@t>Sa8Wv+o6m*y(facS-k&9JM z9gg@X22$uf`dGpxhZq>7BQAcFD3=>^-B&(>hF;9hS5IrfC^Z`$fcYp6$Tf!PH>CQD zTf_PKoFlP|fgKxppj^i0@&aLj#9+}5otWHi*veX*{{{&1d$!se+W3niGRaoFB}TCu z;7C#Lrio*E<%S0Uvy5*OT}(wu^y7FLnn3@CSq*!l)A$vz8urs?-PK_`rHk9wI5-9< zA^x4~WVTW{RH2A}04XnF0$hY+KeXPBojED_n6zvxpo>5NunnEy7!$q7?rdd^qc)dB zyX?(>vzK(kwb*QDLI{bBQHXH?+04TQvJIYr@s@;8^dh21`&7h`SK{LpxB*t=|Izj( z;87J>+lkT;l-NOuLwrdP0^J@EY}SQq37afmQk3ZEtr-4 zemDd|_}lA^l0QC4^#5*px-`vi%u!;QH{}SQPL-blmHhGXsi01Pu;3^lEjJ2Pbj!>C zg(^GK$=Fy(?}R)$GA9h~|6_?e5?bZ7kV@^anca>}k(OV>z_lCa5E^uP^#^KT5= zQ4WRUz%Vcc6}>=!4!7i3GqCzM)Xa5dR5RQo1*GB(NyLdkkFXg~uQZNph%f{}gGAni z24VaMBy1fR1y7K$XRL$;8`g8wBDbr}@qfc>Qne(d|JMa@j0~DET(F49Gs$N#goQz7 zGwu}j+E1nLTy(OX^tJh=Zws{>q_35jhV;SE-i83%-)3eoxhMn#1#pm{@x4%ft zNVJtim$bZQw(TXuWt;wdqd#Bh&nNPOQRLM&OJ+B4^B0~2@6g^-@~h`Dv_5KwR&hur z$5$6EQ|(Ip%Bz&eV@cOQO&0`C0<}+UrFHi%3KSSWB2v7#h@T%Qk2fR!alNK*+_9e^Q^fmHJRqy%REpCkreZf(76mo z4;;)Xjbqxj`;E?;GViCggZtE#JCp^vMiKkaahnu)s5x(UDRl?iP%cBk{!$ z8pW#QD9$_wUcHAldTgRmfPjRH4ksaHKIg@0vgc*aqdF|Zo2z}saRD~e8tj3!e)fwb zlZD1nSXawmL~=c!gFjx*0#mLHs^OKy1$x8|mP$foQrF3aXB&+j7#p0k`m+#K5yf zOlqzUVyYDeu~-uW3Hge#$9pB%=+f>^>~vroNI+jQ%;D#FdsBptIV)sd>aRv-e=V;0 z@-OH|0s0}z6@P$SRMb!Q?{QfngvAM9)T)52mM$wg?TM}CxVB))ly0&gv+%U6Yrkme z>cmhef?av$-7eJKwnE_}_8+wl4lhfk=fq3=%`q4Hf@y>ky)i`A#0OyVMrsYt0`h0x zSb)b!(Y#WQ>DjCsd_7GRrq?`{%k>>;=E*e})IT+kpqDKT0#OP)1?}O%*@gb@2fB>x zmsZ=BJ~7$5>MmwgSN3m3AU>jBTDm#?k=AWyUTE_+^YOWDIL{*--)2r|!=I&yl{e?z z_Qf`n@#@#x%tQBX!hN@0@znS2t=m=v9!F`Idmhp{kq~glBnV;gm%?8Y%K#rR;_()j z?Gg6S(ofky9O2`@Y3b{o1TS21?LZg<(NS5jKz$c8V%So$#7_9CH=fk?hu4ujr=j*Fk`!q0y^H)nybXU&hyN|9|oI;KJX=*U(h{BFp3pE8(GlOs01De$aAe!skR3c?#ddNtI*@ z(NN1H9rEvxU8w)om_0&=Q8d2l-+Kzx&$rdf{^X2$=y1R$o@W3WUkO)EN9_lv-=X>$ zOgbJNf_?_ia-9~%^C(MYl#6`$QEy)ZpA@I=&_@o(d8`C*O9-B@e`7$x`AUOCugIy| zkF}Juf(q~|Lw;F(WO-QT8`4HOTSFVLyqHC}TeFzm(XIH%_U!D_mu`J-K9bem{Trv; zb(>15C1LM6{B`XwM%*&_&M~n*w_Kh{I=ocamn?IeOxi_(5+u>R80a?=L9iPtB_sQP zdv1+969sswwJ%v_w52%(ryD6p)y5Wn0NPHUqi z`mk7jyq-&@TyoeN%;ayrSAol*`D7G+_m!@w0PwqdR*Z0}nen6M#6W6o8DP|IEqAlW zNEwh8Wz@U@Y0a6oj8Ic=VXBu^m>^<1^4KN(a`@%?$3FvT^>#@nPY5u0*Fl?}KD@9D z6BkJzZ`Zpt0fp3o9)yuji~P!sd!jP%D(5+Uq+8lBfmfF^CU=;+fLHlox}L0SK@di} zH5jCTnkwNfGj8@4#C|zZtOboekgP{%6G-OhTF`ihmIJoFdz*^8a7sjq@gJZWCs#fq znuXAVQnUHno`SZt8MO+k2?oiIFsv}VGG1+-M89WIwM{x;HB+U$?j?3S0zK951)9SD2d)8zV_9KYRR z-hC%~QlWHw-wAQi_ejbB1f;x|s$~cWr?xA@IlvaM3z64pe=F5~E7g9h$y%$^ekpnC zAPxNzF|Sa8%3L#wIHu(aEc$i~g8E7pT9~tJ$vnrUg8-yfRf0@Oa`;L>ye!cHqs|=x zqi}aVp*1a2+9Woo|5{d5X_sj&@pK96f7&1~xUW&q7`4ReNE_z8vDc zMZ$uptjK#*R>UerL#2IzN`K<^3l7#4MQWmQP^YCysY9@&H=vGq*(L703Mia(LE?-g znj4T)^RJ1e?dZpbF$xCc>Ox zLP)Z(s>;4p_hY3Y`1Z4$DCDecWSfMX@diqCg&8BubC#Jf+G=@{4TaE9H4d*hq~(<) z>f|W}e-n4Ez4;?LZg2IU|NpdCwuAP{ce%Zyj`1mxRY`nSobG8K5Y~^-uOCJSpGY8d z6%o2T6``s49FF!vq+br{2VJA|JAw2=#g={}mN|Lmb1}v}iU<1!2x`z4aAuX%^gZgIycl1+`7yb1= z`_O-<{*oQkf7VXbU)V8z`X=!+zSu{5e+RyM5FL0rfgpqh9n#X=9{-%LbwF<{x)2+b z)m~0}T0>XS97@tU%9b8U&>9BnAuTU?T$W1j(e3*KwNMX-O!gpJ2))F%fmsvI!v7Hd zLz{cr0Y*;k>(*EW02$`O={VVMgV~d<-|aQmj=#=Cd*IFS;6m^-*4o^_D<%)x66PY# zFD-$OjCI-WQfZF==MOR~g>=!I1l~^e*E$aF{u5ff%eI)hJGMQ3C$#G??86?NrFrw6 zjrBp}nWO&1bqhXy_;X(<{p=O;(|aX^>6QU7APPq{7!;1!CU_{7hXkI?mbuW_ z)!sxf75|lh2P5lvQ~`Y8Phfll*8~L}b)E;F=qP1FP~djDnZu`Yegk4?9N{U?jB5H` zkOjW87IY;OYDl#(6oIqMj3+b<5wiG7fhRcqDINb%-*}Gp@+Yvq-ok{IYFHsK*n>v4fL^aqBkO47QbQk zQ1A=N0KcXy!mHVwWw#^HT+3{WzIN?7XfKbr3lVqt6POc8(DUhHAA5s)$lg;fS6qOz zt-gcl2e+_Uem`1yuzi0{M*ShyZ^r|yePYKd@HcqVc<&Ey1;{-zwEoj zg98g#SZJ#5O5+#^PFogBV-@WLDv=*9)G!PFMuC+4S-Y4&NAimnA|zPI6DSE5g)axN zrP6y0@B>sP?H!md^<5%Gr<_QAmaDUdjm*$W0=1ftUa_-=guH@gGgnv>muocU#yZh! z$KD6j-O{eT4)oa%pCt5I+HfDi!Px-Y%=z#)_1UU9Xz4%IXS0HxAu|{#4hedbrU zIi5bt{7LlLk3aIK_fP!UReg2@z}tC!Hn29q|KFVALr1BggWOTZCy}>uK8ecuvpM(fx;~pfb(i#6p@mx@>p-84x%9uQ&sN>D3;OJX8xr`vWtb1Y%5KDOIDucQ z&k7$*(Pv}P+|KK>@yYi3_}jDk?1_tapwGU)8?EewKI@jOf5}i^f2=+`?~xRJc0X(F zSf3rB+JcvSfX6+JL2eH%69)iwoK-DUB=%p5zS;@>lgQ6q*?9;vfQiIgF?Y7XM0uPS z8&;wv!P`#1?Z{rcWWdhYYx(1-*Q`gwJTqDJ+PSlV!d$l0*C**H5 zq7)P8*eU(?z;nN;-xlAw>-x=Hw@do%?y$nWBmFk%g8#05i{G&e`mLAO7sQVZ^5OSa z^xK&GQuNz(Xm02A+k#06de-^dv-<7t=kGwj^F(Cp%TapuHb(m!Jc{<{9zJnp}%e=fge7xd5K>I8nDKFNpQU(rAB z&Q8%kTN=S`J3U`4NwzoG-=5V!BhKA{{<)p4?1cW=RF&w@$0z#wWA)E3_oe8clUeJ3 zNB<<}i@&O{67~@D>wNK7^QY*G;Pll{Kikd03#6m)sbFfGK?Q|5-Vcko7(^=#A9F(Z zXf8MlxW)Ysg+xng?!UMCb05Xr$7=3z9pwJ%TYv7OnLD7luk0ZA8^8E-AIse9&Lou+ zu{?`z0>kd34vu#HeGu8vUx!oLu=tP~omik}oO(wb3Yq)Jv#e2M2jy8;DIQuuMTS+1 zSnq<1$rB99c6)#D7NOyS4)Jm*p?UryYC0|gU^W3h87}r77;<=4q^RWxYW}^M1d-@M zsKerEk}u|$$H72fm>*sAU@&`-0{_JG0eglM?PtT&0vF_Uu)fpxQ(fN~io|sD^T;2! znduK>k>_gMYG+gtuKW(1vV=3d;E; zGu;Y4g)Rk(^A6?~vm??>r(D1XNF>}&rWDxAV#?~ZEf9osMOBr| zQbXip#f&#FHOvCSz592?REX)7O))uzQ$eyW6d!gxe^3ljGcCH72%*Yu5G%3d9Pah;vMv7gvQWe9s@Hkq+bRd=k3^zq8M}*|B_DS}+(-s^ zdLV+2hk-59symlNJ7u&iL>Md2FTdbXiC}G+YtQ`un-jeTgt?{?{%^^SI|_yh&B6?5 zbNHu}I95j>b{UkL-l(JH1NH!U=*@)a`0|+hJ|gd$A8!OXo(6-q=f8k1h1UwYxGxJV z2s&Das$79w3InPPGf^x-K2Gez3D$_%(_sDW^43+J8S$WdqPh|ebVIzVWzeAS2kQ%& z3RyQtGgud#m__o2$v!y>Hqf2HGUZSKU00Df&v7g0~?dCprW>(9V|}eVyoO=#>reg&TRcWb)2+A%5$Y z*Ww%QE4mIDd3TUG8_UAjP1u6l9hMS76=taYG8^pr(@J*I$~AB)%llkDPcyRy6CvpA zBEH6thmPyN3Mb<622Jk3qt~0jC=fQN2RxJj!d&-(u*h38!6F~&BDhZ?+v%%=Ny&EW z)5E}aks4kpAxqSN)7*)A*bPX&r2|CpRUSG#>sJoh-#wfCA1F9 z3o+fmas70V^6k|5c8anBNNN`xK`mLZPOe{LrV(Q_AMXf{fiped!-}EWBGe+`>!`)0 zM{d_*t!)w7QS=_;BEW{=AFoAoo+5Ml3?P&HUfau?$Vp^VIrV)Rg$;$N*&$Q{CKy*@ z7If1ABm@y;2xd#{-~5i)iyikaBoL=4yf1Gj^Em7JH}Q;niFxHPgJH1%I*z&-OBzr* z7-dCC3q~gcIZqxK;M9 z#*YR|Cz}eiEN4?}zzv*#EB!9N(c%#&xB8D3BC)gyv#|kGI+s*R{%gnYJY5Q*LJDIC z`q8SwitfH0PQUi!1k&Nw=QF6 zsS2;&P8Hr-)J_$yk<9;*DtzZsRfUzL3iuLdRPaCviEj0&!Yryn7+n+lP!%5SsX_p* z%WFwRV-J(^E1HC6yBsUD)OEO?B+y%6?vPWS8EE?_C(gwgWzv5w4h`mof##KUqO=aI z2L*Z8QG$T&=yw*05!qBhdBfPkKj7<1GNX&4=tu;UMpu(;WfU^UJMAP&)I+J6ib1MfAOlP6X)-jxxUC;cjHM{lnTYHhDLN_y zL_m@4g*3eYWSH$`0b@rTzMWn&#tUFX+5ChybF-t8 zmwFbKo^A(5Ez;GHd8Vel{;VPWgw;W}a)=?W)WgR2=ecBi0nl$xk>fcz=HY4h$n$Oz znAe9C{7)PK+~*PZFuM2$9f9)XDjLKgR*WPZ*n%zdmI(L;`;t8^P;vmBKrc(mqU7(; zXv=*mEvB>=oPPWc=pD0yn&}hNba}=&PG#FeQEestmz8X*3 zTWRT$2G)kAwVc7}lIPOV5Y7JkD44*w9j*X_)wc-(i?P6K%FNnYQ1prR6m5s!T-u8% z^F0!;6l)w9k#Nq<*Miepu8`{o9>54{=Sym{ypZ}FP=fVx8!P&j&t9Uxp6+t9`{%N! zu*+o{h+=7G$nM^O`3+5zr?5}?au&^vtkf;VZPKp>XH4M>YRr?fXqtUz&>(+-la3fN zOG>l$5JG0H4&gk(I0j@JmtRh(Dp*@3rbxKo6-Wz%5gm!YM`jR0pg=arbN0kTwuAYj ze<%qM_0}}`%EV<5JVNJnlCLi|!@ZUOvYFKZ$Y!Y;swKl5^(#OEYhvI2Hjsj0u&?>( zV1J)2`<3mmpI!#?CpQ?>0AU^uc-~w5c(4l&dZQ*a7rrGb`CR>}zX9CD`_NOQ)j$6Q z>$d9VgGQZ%sHwU@4FT8wVk#o0D^HZ_UY|}Q=`@I|$Ow)Ur%F!9?!p}95V0)~7uMD} z*zhSBqOS1h$_ZCt%Qc=at((-T3eT^TQGjkp&#NQ@M($a>hE;9}Yh$8k6oN(2h9~@x z!b|)5H82j;NHdpSlcGy8Gnh;A@_>VSUiZWDkYZBT>kzodJRqC&sn-EXh8}(s0IO6V zp;85DozHpz0@w{(ZRN#crfxYA1`Rz-wM2QNEu?IT0?L*fLff(B@V7j+#J&R_^Ca=d z!hB>+o_AwOUqRB>P$VD?a(#&CB!-EScX2wjJ>*Gvw^Vpnf^@L41GP{;L4p7g)Dw4T z>db`?X77DHc}BxI9D1a$JM5;nyTNW0kF`TX1lLU#I4_XWRaaeniBs6U`cM!%W8x*% z`_)d`W4yh?CIhT0bdMiE-d)x51^$1I|Nk_9S}hEGkNzyX9t=EkI|gp256|PCmB{w? zg^Y1oN!AQ3_YDnDG2Tv5XuQNUlBUCl%Y6BuRyi@1qeie92xcHikYS$p=YbiV*>-ei za2PfPJoTlPhBnGv_B_WDxE@yZ6dPkU_BudG4V*!fnRgU9Fyx-lw2PPq8iUWVJ`;69 zk)qo)#sNjkxS#N26q^MG}d`qc;aRdIwVdPOK94R_SQ~t&jxA*h6v2dA# zw9-h?iJCUkmcrLE;G+agh90P#(O98aiSAeVx}0s$aN|kzT;K-R-X!;Qf&KI0=7D*} zOSN(P9F7;3Nwvtf%=j_+L#`0-m4H$OjKn0>;Z;k0*!~r&4EN^~s-O~*PNpy%`VaNz zAWbel%F^V3O-Y*kZjq(QfPIA~7f?00*?F`5G}%wn`Y{cCDg%OYlqTD_hmnVZtux>jc;b-F0TZUp}EX-*7W#t zO#uCuqG;2dDB6OBQkw5>_S1Nc&(s{ivJ`d9Ym&Y`UO^WI0M=H2XhhM4HtASR0%E01 zskzH0Y^6RINZH)z8&PJmHm7$V3y9+1DKi(@1Xs&g5bukijAN6^kYrA}7J6uUVqZ%; z{Zk0>fc^>7#x9_ZT_8AjqB;o3n3G{mct91%J8`L_>HSJ1UD&%RMa_J?NflQH7 zwNC5B1Q0CT4xI%r{T4d+_2=jio!|e>R|nB~TR)4=FaDK8=hnYibaqnsZ&P(Vqt34| zOn1S^AFLAhq4Nz*>8qvEr%5TIbKZOposVmlFRePx17fVgxJ6SIsS>Y}!k!YZ*0hK% zrRa=0<&mOuHD#ohdP7T9kfGY48V8xFg6D&2xTs@P|9!C!O@7YxHvgE%{W<)omU$C( zbJU-MsLngmqI#;`a-2c@KVwmScb1^@YSqni6lob?qpV2L6ipi_x;ce&FVd7QT54a2 zG1!%;KIst;)nU!@8aocQ2dYagst?l?aRa#7le93nj-0y()2e|%y0N3BP*g+g;t&f_&mO&3DHp@^Rj$h-4atp zNTv1x@L?X&@A0v!nb8X=kY{eP33}i-RW{3Hu*@|!N$!|QD#Cm-)+RigqN{Vk;%1Od z;(gZ&Fh_t%wMfd9r1kL!RTl$h(ZwONr%m`{ivIrVRFrAGSw;3ENe+ooPH4Br&#J4*STQ zWs^o|QWCb4Y(kDESlAli`7|NhjvR&PM`;(E@CXlia(QkF$?)_oD6NbgkHo73UmJE#fnfxYZN%i)c4XRSiaaJ=E^eSCe z<9hffOpp-pp>-I-5Z09mS=q&u-o!4|sZ^K@4PMnl1K}hS=KltCxT zc|E7h_bl?Mj2fESI)Svuyh%Q)g$e$AFf2Xs!2>A99Hsso6_B;x^|XrP)PE**^jI;7 zVQ80k6U8Aa0Mc3mX$9t~Hcr))wd}c@9S8p+EeC0#NYN3RcAsEH#$%|BsFNQl%3@0O zRVeX$)%RcuT5@fB^7~*yT!AkRyV%6yQNIC=AyoA%AIzbDAkr<(>Xws~Q~?fE07ke9 z^EMW2sQ|Erih@CY`IvIHSiY}rsmFJ~C30SA=IPh?nW_NL6&A>1ftXD?P?IujnHn>} zCWrz^u#I7mR z-+(xqpZ^FRKMYSD_$PzYM^RsQ%`Cv6h^ZIFktz5j~AMiy2{p*!6aB4=gvL0#6Q~h>u><8XctQFgMErKo1}0 ztc$eku>WM@1N%>Sc-CL7G^F@)z{?Lk&T&b+{n`Hu?Z{Tj`JsZ4S90cFCJ5Mm=Dz3< z%-jL1;QX}(Uy0$LTu_XT2gYxQ$|lB>`b5q%lEH7g^{-0Bv^Wkdnro$dsz0)_wnOs| zYf^oimh;Vh&!%>_fc^^y-F@~k?JkVu>>AtMFuM!%(l>+dg6)B|?Yq0`U|)AXcwD<{ zmyqte0)5Q^t1EZ;`|H-{hB95)E3&LEV>)<2(TitRa zMLjY^mkejIsFTykbO!2qELkSc#FZQPc`rpz(pM@B0tAWz(3^ITYgU8_e~35srrzXz zaw(?I2%wpx8?Svc=vj$_80NArE}{x+a2`D;w~61psWc{`wE_kf>DfB>bf=k{zx4b} zbTak8xnAT>+*Ji96Ye5`GPG{nO1|KX2i4TG1Qqam-(S-X}c5&0Fz_x z9psA+s!XW+zReOSWUpNB)0|L}yk!2l&Vt=Z8Eh3xrgm*!58=S3W*ow?38XVq4Jp$J z^r+Vo{aFI)mZakOQ@{yeTrBDb0)~?SH*zM{%9&WJNk{A=PXYwX-7$~7u&!r^tYML# zWggr5$+kt9mmpi_4G{5`Bk2oUB-o|*%)Q-a#(@wgr|UXh1%dFglrz7mC16MD#R676 zZ%iUl9X1rZ2Bc#oMeKmYvAnnh0~c?>M~OS2Pho!|TW|x>F?bqWS5SFDRYkC&7hh^? zI$aZN7|m)TTRT_h)tz+tA1kk_4qaMzeWwXk)zD_QD?V0EGXR?Z;wMu1N45qrO1*H+ zRn-$Ny5#%`PT@Y)$JAY)amn}#s;c{Y#Kp6og3@an7gUo}&HSHCI zq-ZJ6}`1r+Bhj<6qJ$<(lNDcoU_&h)SnY&MF10i$tVyC%ycLTWCN(q@h zh{I=Sl<+s7Jb)uz=Hi$Cs3Pa{Tk1)vYiSXRe$=d7;$RhK_!a-!2DOXVUU-$kZy~FR zLYxIsXnu}-X&HVbu(1wCz7vT=B9g{qrFE7Gu3m@=f4ay|bxgy%mu7?G~A>__;+GppVqQlPu$0(2~>$$9N9I9I)1 z&bBI!G+~f?$BC{ifqfmti00j5@@#G`N;o()WuyG!tWNp$7R&aatn<`+oPwtlvyxbG zKKW;`F1Kf?!RcmCzSj;+?i|}I#^I`_V6XmtwCz=G0Rp_b5?*MsTDInnMn5e?xDs{7 zTz&-T8~KayN3vNBFa}Bu#Q&+#F-6;sgnV4Wqq&-yD_VsBNz^CfJ`RDz_qqIzK+0LX zGs=l(N5Tva?p=?cNYO7_S-z(e4P4C6n9ztNRkxgm6(%%ABkI*9!clghMWCA_j{%S6*}0$Nc$tPl2x-o`H1W=Hp+8n{LiZDucB6VW=55JpP;Ou=}$WaS$|{7JgXp0|0pX zud?3tUO7ITf)8TCwzJp&g{t6RE~QoD(5i8)s=yKqps8@8-Ew*SyjblVUNB*Sl`$3^ ze_C19Wl58V9A#v8Kk`ahU)UWx3K_yACy?JsMLIdjFtD+YTQzk2+lMn>m-5 za35C^p~?x$65bqO9GbG{MC{HQ!hnYNSq?Z;wh2QKvMN zi73h1o`=NCqB}rh5+yn2!DBrU03@J3ZI}|>*ss8w$FPj(48b-^`J|d$E&p ze)0{9U(`IF8eIMa@;BM30Wb{VuyB;}Da%}8C(43raI{_Gg@+)!^mg{32YQg5Ej>Q|#Jk0HW#HcXO3 z9^+n}Zn;E*dGdp}-fJJfjzmkg@$A;^+bALOs3CwOv;jn!Kcut~?~F>!bz?!DOFXsO zjy}&3OC79Va_0eR%*R@P9>K>StMWjHOaaC}i!;>=lb(jjqwUHxj+$z|wzQ)_6&z{Y zEWAifV47uSLpq`-LU-v-nGf4QBVfUzO-r+x^rVcN4~{{zf{W&ci@yY(nR^ynFDK%X>*Y=Qj{Y= zViI{H&EggpCyxO<<)Ksg8%0M!}KWyWcco1)AA?)?!6ev$)Hsq!xHe z%5Qp9`GB}_E~-WR&v$A~MyIjucz|sx9Ols~0P#Ip+oN_AeLKWXBQr?GEX-~?sPyF2 zN*A&YTj^P>^Z{FGEt+(^kX_lz#TY1hwLX*-T=5Fe72X?|vyqKeY50BBc;2O$64CqE zz9|vCfR+4_Vb2~~ppy^Q`PTr}@1QgoJlk?d!aHfE{(6;z zQmdpr;C26ORymhduEnL=eT2d@**Qp?a{p{m0*ok}b~u)FcyG&3?>kF=9^^zm$#BvU z^JHfV*k=Q+Rsp#@+$Wb+6x_uk%$!~}vFa$VRdJ%<@+LcXh**-xz3aplvE7o`bT(KL zyGfdlEaDH8(!+Es3Ug!3$H~Vqka*CrYN$aavAgu?Wo93N?Ns$oh%^k$m5Z^>FLSI9 zk1Ajh^3cqcBGm8ToUjt-A6`DI+6)_qN^4^gH}kOT$>r8R4a!MPP)Myz#&^kv7ScrX z1zP6Y0iQ;2U#Y@7WY`-;0Hrz)_+WngtOH-*dRw{v+Ig-|1RNJvZ%7`_XA)yE9;jK< z%r~F=L?&jbD?4uPnag6aTW9kpf$C#O5un;hdd9IS`Dx7?mAp8nx<1H05_{q#og>Hd zi%pV5u;jG}Ms4K&DlcEh2yU1j*cAkqMSTc9n7wd+9l>{e`u_pJji2HEzzj+iP=O)b zizp>-#8j(-eHS~*&I^MLABxJdxiEy4#uk-r{G-FcdiDM|?P#A6i5$PbxJ%`1bve zpul4fiFx*r{=ELMyxpO1UyVYpG02s$*^>6C3ttgy6MHSTClFM(X_3g*0=eVJaqTbF zC%;RKFZZy}Fn6=}K9Q)x?0`xJXi>bGmM&^`!%T*PX1SGvDT) zj|7Rz!oYJ-95TQ&dYPeO4P51zyX25|F~LERu#x>+&K+Cu`YBQua*AAf%wZ3P3!NNb-7_{CK86 zgT8r^S{bs?eiQJ8J!sR;-(TC#Cz0~lcF5Ou9@<7U%~B(9e=hudCNf-uIqCgt*c$HiSBQ1`oTH^k9Qa10XxqP}3w2CLkfp~P9&0vML78z6YSlP~ zy3+`bmDYglWp!4(6vv)t&y{BT~60UZD#6$K#aM{f?r9uYJ|-e#ZpKS3vS9XPj9XDe5Ai z1@$xpE~dpl^$oseKQ!O+IgUdBVpp3z3FkdBEL^6N#VZ8SJM~pwS3`WUo^-$_SSTe zkJbQoZ5MeYNC@td&sb>>PiPaP#ak`+V;16d{`E__c9Q5hS&6-_IxBIygSDp2t)HmN z#gq7Udg2UejKbMO+VJiUv875E089MpEy&?7t zJ*Jj|v^7YS5;Tp}5*61I{9pf+j*4p_S_XhDeqy%>AG>4WiF%r-DTyf>3ctIy*x~2s z-ON$!4qP26dWyAFAA#E{R+E}#;x-iWuMW=om#7$P^3^S;CAiEyc@fC>7RK&F^HrhQ z;X;NY87{`C#08)Wa{=iNnYEH4uUgY$mSdKNW1-L9mOj8IZYY)lmMi1;qo+7TZttgg zh#ZVyX3YxhV_(J&VNBynN;WS!F(f*KJ8-s zdrp?lzYvOG47IOEKzCA&DdyJ`xk5RJPg}mn(|}=kD#cUMUYB^n5oD>zZ>^u4FhtLp z18<4HTI7{`M=V8c05t(AoDF1IJm_t!@BZwGHOK>H(NQMHEm8lcu7hUS3i3jDFf*}!obb(q8mNOt z3o-7sl*0$})QLK>O26|GvIvDpA+UX>n9$R$eKfBP0jBQ+OXw6SiEnq97Z1LUNZ&y` zI0!jcDpb=SOW@A+XhjhqoSSOZFvDZ%6M*4Uo2R2KiOl{Iq*J_9o@j0dw3EF z?&A&eII;)%%v9PDH2K5CO5}F@(~+38fqJQ$4*(m8DZH$R~&uK+sQ^QW#{6u zWXVgO@5hpH%WDj;D~X*NE-4%uLN%D1AcD~S6Z;+Og^1~EGU|7CA~%H7sy-p5L|DuE z{}^W^bfXhHkQ@l%#Vrfx^0wPYpP(Qj^a{^U*yl?26@PeT5442POhk?Y2$g6D@>ch@ zj-(LtRHDSkaO_2}Ny{yql-Cka8xw9`4}<))lk5z+Bl;geeZ6D)FOrTY1H0$Sy9yKd zA(Py*ZKYHAX3%X#Qc0}amJx-6!4D&1r3E8mW%(mw<>3+T|9~GpyY{#d?uF?iqU8mn z+}yV!MgRW5@z6E(151ef~hMSYHxd*YYRY?_dlrOVP>DRV0x-p>7=V z1Q=sH7-Pid4pg-=MmSP*le9Jzi~%j)afh53o1zewK)00Qu|at>lNJWhz6A256wIo zJhTjI9X#aYpZZ*f!@6_6LA3p8L1{uK!va|4fzQdu@1NysP6i%8LK?}PHe zhIQQV2ni^alIZ^|4S9`@${>jx`TYAV&!0lGOl@*Fvgqnd2o_T=^Sf({ASJld1S^R45>ldSF3{?*;K8*D(2Z zjkR)n_by`O{T%Vg@Uv8cu{BRB3rzc35h0_93<9nflj@D^^cFH%@3Jd;)9+U$M&?Qv zrNdbNdRLHm4?P4??LBZQNP~ga@Elvkhp_x|3D)zG=qfBtXPg&>=t1?Q*znLMHc_}N zhy_5_D<&g7C{|Co+3WJy4R{ImddlK3Qgn=hq6<2+EIoyWs@!O^deC#~Keo(?O(;c3 zn^WSBOfN2c_u4!GB09Dd)?6#%pVm_~bcHq7Dhk@9bK#jcU=k8xW;gK1p57?I5mRke zOhlIvlH*Z&;&EB}F?S(M2%#9aDz|;+A!Y-t+j? zT!k-=dp;W8>_j)n&KSj!Ia^XDp`RK!Xom4awAsP2gBA_(HpoADq+F)JAd{olisEV zi=tna++jA88hJEk^UZL3@t#9_EldQkX7*9XIy8}mCOUmYV!{9u{wFBr!v}Oy3VltV zjmsk|SPVS)Av4p-L_3L@Syv9rhs?a+(NMCIz|(0^I-lvKPE2-cdR74rGz5Q_%Lz8% zs`;n}!|3i}-+UBwpJuhOfvs4QL@4xZyp_a;=irz~JsacIZn!u8v#p7a=DMQtN$0RfiAFQg9uNGeOl0n<-qp6|hnZ6|ZmWJ9+B zJplJ$7I;ytWggUZf1Cx3|Mx2Cbkn`%xt4qERKoK{RH378;JRy-kdAAY^HY%sZ02~_ z44GfB$i>mHfa7AGk`HW?zc*LN7@;Q(K zk1h>O@iBA`MBzOfP@AfZH=;lgO1PB;-ON+3B+T~qSvUKs6R2gq6{+pE3ar_vN#d(GRYYcjG^|Vb=6!Ocp=dj)x+= z1|L$!W0^l~CV-JmHH?p{WPDU5>s7GjM8aaQK=w~tX+lAafC`R6D6&LCj7upaS*FX^ zRGf)&lo>GN7?{^|3dT?evX%G$kxWrao8b?_$4;!lE&`#_<0&whpAi3azGKhsr-Wm=gOB(xik@|1qgWtUsO|Z#S8?Ifq~Ny!=)*f zqcl4%FCMpEY5}S6-QbKkQxKC(nBnhT5h)6;mC<^cRNrHT;||8Le9gf~Hi3!_dqdPH zdTiM*c3qfAEJJWa0VTPTm_DD#Ej=wZ5CP=JdFqqC739nj<>v=FkGb>BPn1I7x3t6! z15%tJX%#USqwyVWa;GYgUshb$HhB&&&1w=TJrBSf9YTQW#J)hfzpgw32$v`uzz45( z_I>}hoP|zE$3?jS2mpw2nOF^(`CpQ~I69#1d{VeTQE1T#U@GFP0JC{=hA@1WaW(4ND=MvVxaeDKJ}NuJnk?MM~Fb(mug|Y zzdY5#q_;jg1e2u;-lW#+h0|~G!P>o;T?$s~md{1KSn|CNY0c)cQdmZ?pU}PW*ZCDW zOb5<|9v0a0SmX2ggaGdAF?C3AAN&x!%=-& zfyRSbAeUmTxaCXIl~Qc}f>(H>p{Lr!8;yCrj<)7*Nx2RJZx^m-@&g>x;^Vr$KX`GX zPKHwS3y|Eb{MZv1=3+CufXR?(5b&e?qRu9MS91=h2)fzDn|7d$(RXU&NpaQ2wj5*3jT*;AD31C2?RQ*vQ2e=XEoH6sc?2)eH`FFX(6Ur*Of&aEKM%1@7V!&IM( zj~qk@y|^gMAiEX;EO)JkERUZ0FA9i-M(QQSS=tLfndGC_30xpWuwofazyNm(h~HU$U3F} zr}3{iy5M~y-b*kz8~k$8(aK+FjD`G##~nY*%)q132_C)y+2KE*KOy0dTnRGm&>!WE z5n|2UGGE$afKMzsSDvv$L-$=#4EiL*fQ*kM3J*@QYIUMpAr2)ttdWrd+}TKJDrMh6 zd+|0wcR4n20QAcKWIt*r%*ytkYc(9!zh4EFf(_5GVQ>)<;zTiYaLs{-MXU^G;Smo&)S6NbbS{EN7)P)yprP=3nRXQiiCn|6^FcmvKoG6VH z4hqU#sY?|jJ}0TgRF|QZL%myuhFO6JBEi9;l}=;{w3&ArmErHfIhe>|iYp$ka&xnM zo|J`sNA-LJ5@CumMml+|rj3}glc()`MHniRu};BRmcuZF6mM%PE^G?APaO8pi#I)*% zL60}*bP;-(&i5yH;)rJ935~X%rI3Rs-0Y=qanLJ;>#K`q`3Kto+}b8)qGIa0*QC=F zE-xuuaV<`9Q&39WZW|&+Z>}V#^aTfOAVDjWs$8c+CGeaAS+%G)zMBx~=aT4~W|c$I zZGc}J9bL~x-M}4_6mnLvk)M>A#LEs7fpQQsX`lL;NvDBgu6qkdwtHCrTZ_ICd>heK zlVxW#?3-}}fc5bM1SWBxkf0`CzPAwuzQ@;rO-{ke?-f)ivB7zSx0b-gMu$lB)p({< zA4aLJDb~SFGk8INnhA&)5p5RAk3+>IXfw)EH)GVq)LDf6v{)w?(bn{LGk3d}D1ix6 zXk%4Dsq6&H9eMg&qH*b$kU&_GG_RZxhRGq_3~2F*gw9MT50=@CItz6de1 z>(*}Xi|!@{;3~N1o`kHuw0sBTd1tjpo_jTmN1oYe-XjlGvXaM1kcZh+)-GZ>OCFuz zh%8MxMad%(-2iSq>%;vn6O-hTraBU*r#J2_d3q9jh*P*dc?iDQjJ4B_$n&v$PbCkH znwcn6ylrWTRgopJhb8*21VeKp`-?d$#jhmVS`z)ZB>Dx0$KvSb5^hw+2>HHK_)gG$ zOfqH-i}iYXMC`(>5f{BbqHt_ZaQX}Q&ar@PkZ`s56)~eSZN*Dt@sdwEogN$3D+5Lm z?uGv=})`^05*vsKdg)OgVv8aP_Hv|4b1R7n$53y(y%ISw<`JjOJ%IK2zaZKLj~zCOI+U-NB>Pd%+_hS*UB$yE-u_0bX)L7Teh4_ zu(18GB2W^2ScpC})@f#=b5RrYn7We?P?u&-EzsSHSg%t)|6#ui1+0yX?Jm4 z#Qd3zm1c%T>6o@Y0=cb-#|NT{Jn;AL$9ViL_P@Ai=rnq{jm&}*9T=dOE`7zx&~}hh z|AW%VBLsPZw2FU4ud2;y+OVeEvX;y|7ofnjCTA{_Xsf>>A8eodnBC=xfEeML%}Nvi z2ICX(*}QNtm^~X$+uPqw%I}$6PO96~#LB_%qR_za{51prr2O8D7mwdhcv<*;F{i!J znUb9t0ou#t5+{f(yM-98yTQ!j=qq-4{<>$&Gd2Q>sur0@Lw3iS%0C5NIo6*hIR=EE zIUp#B5oeormyPKIV^N2IiXc1q04-bkyMd=(*^YKIXQV7Dc)KF){7;nF{-0rSk9||aL)&BVx`gl~r5GeI(|$-|abmN@;^M^#EY4bA=~ZubY5z zBM)CV?ekW8Tu!B_0^PvL%M?|~g((h*&_a-VlbM~;c`T(=A75K=baj97EEvv{2u~Qs zhPawMUqGFZM|I{Pa^O??T|Bl$<=_Z1n;TfVbUQNL+k-7~`3ssZujMYigy(eXP$&@L z+`8pWXaL^4Me?dT zH_6pBcxiZ4M%|fO7Q3`YL%S5?(lng$GKEQi2aD%%IpKi=H5SXKVq5^zAXfSYM4_LW zQCzsX8u3BatgS2|cYp@~q0B@6(p<3;25{2S* z^QK_9r2%O32xmG;QRJ{I&vVgi5Ke3vzue61b2%i>(g6x|twl0{7EZ=@$p&s;#P4q4 z-ur#~&CZc;-jWP~*nY*XL5^j#orK;GtJDLD8uiJQBL;0PXI-#oq-&8C(4kO%veqVj z21JrVi$*!)m_{d7!)Vy=Mt6qIdFWTdrL&|JUZ2$V*c#j3j4F!t!q(WDG zj-{!)0M)3en>r>``Kl2Uw~V}93N9-p-WmmNZ~>U?evau)WPzIaw&XL1y8>$%SkG2L z{1c=*u|}mNxE!Mf52%F4|qQpxCYY*~>I87Le@3XQec>FCrx z9#TFkO+kwIo`{rr_TXh8MaFWR^rymFK`yRwqTa!nct?F!L_LY!PbGFYrNBN;;prJw za$`mcEoYTLX9b@dmV1J3RUne%rPPE%C2uBSuKVGi+n^$H(yA7V?6j;#Y~kz5xgHJ7 z*~r8lH-J+WMSL@~8zQd;PS>c}Ce)7CBKx`;uSq$w$9O?`sVv#R3Xk#>64yIWkxhbs z+r`fQbph!l>*^%yacJE1*$+x~4yG^GRkpo-X6GZ>833kklgd)+e1tGABCK4Y+K8Ym zT+&^)`OC3A#|CH2gQ~0B+_TG~!-6voh7zmW{7UC-`vel1QB+@l^l z+=26xr%Wbo?C@j$WqDh9EeoP@{q;0}RXpSbRH|uYFJc}LYSc0x%t?>y$Tyc?t?BH< zb|({=r_R?g#|sG)DReVuj#OnPuV~u#XAO9R#fbBTtW8E@G_UzO?$bE*DLz?dFz>#I zLTPfXAl<4j!$3(vpn5sO!RN42oSFLot|?D%PFQYk;EeyI`41mO^SmC4c6Jk*e@S3q zn1)i=`!06?)ouQH>VroI8_pM^XNQln95RUSwt{biS-S`8*_FD@`SbpMHnuC^8T_>O zX*PEQ-(&kQZnkQSGGjG@_cNbHmAK@ocN!#{K`DE{28>cvd5YP5#np{7~757q0hM;BH#$}`S$Gb7rAI)7ZGqW z!T3W044%zcxB1y|+cpLpI;)mmJQ}T$2R8U93nK)d1)(pTx?k-3(?1irwgqB_PCY!PO_lf$RfJF`dS`|ivR)4sh4zWTw98GAkuG zi^S%>a%-hwIxvfBKT(DjYNuRWgO{;~8SoCB8SN)gcJ>ed{;A4_ruQ^Tgg3VYT4ZR_ zz%UreV=|m0$K*uOVO=`MmppU{QK9b#Z*GSDRlA61)B>;P5fV4>#+KAx*;GFy7HT_NWcn}+z43`v-2i8;b?!+BP*fO5 zSp>}nkGKK%7{*6Hd0*@Wm}>P=_!Q6%y2AS$CO#$(%&i0z_?^pNuH#!&zMtOTTeu?nli%c{RAA#0!@w}|g&gGX|@dW`=IpTvy45|c3)iR|=@!Mp0gjXJM*D{Ho$ujN)2#R2@m9L34F|46DvAvwwIUpei1~w#G z^Wbl_?h4DvJVt-=!US|4^I;4ij^j&V6+q|d0J0lipb&o->qI>m{{iDCf4{_Udo5;O z-2-F753;z0Q6V`VNW5^2uy%A_-%Lf7YW;+((E}bP!&OgG*>DC884rQqu%4fm;@pH( zJJ^-75lNAveI6k%c1H}gRy-aKu87=Q^a4Ma+&u7~F}(?F8Tis0z*69ycrjoF`uc%z z_z&8H0d8RfPV8=}7w47q<<0a_{rb~;&XO%SQR|=Sup9P?6uI*V1qfBAP@s~?@(g%B zpBEq=I2=I4&FrrDnXV8d+jr}8WkFoxRbJBlP7eA_muHy2aCypaEbzd;`U0ZNM*cK3 z-2jCI7V^%g7S)j)2w_Lb7x0AR#K7(tL*$S|m>d{3OQi*jY|8MCWfnPs`e`zYWQfTb zch*o|1bhVHifgvN(p8)iWAM&@j%#DHQcv$b9D$8`N{km+Z$0yF_GSJ3K3m8Pn;`MC z%;FhpB0?xR-hyitAl%}bl z#W%o(2rg*KGapwyC_sK7MoW;u&F`WErI}iz*hQ{~G}n#H1w8@Y089+3#(?i3Ufue1 zkxqcsG9;(OJso>gmjq|L3FTkn4#mFZAz6+)@S{l4Sz6r!+9%OYAJslDW?VHe*c`uy z!{6_dg8TZa80V<>3I z{sB_xLlQDgE9swvbVI-r^0|o#LcTXw`m=%UqXP6&2#GqjBP1%HfTb54lHYDeVV3SF zyqQ(m9fd<-OPHtnV6-WuRpGgHuprRLmfXNwhbSzxxzKA&%&1awD8?c4`C=b)f&|w3 zlA_TwaWYb_G<7g`7NRWH5xt#-v!xp<_whf7{dIkYIUI1`SUTCn*3r)wm zhDqmV7*#xl7kp>F2?6?71p4*nQ@&gyFU@8hUuZ3vzw?Q=9(T~gZw}TTT5AmR2C*-- zhn;?_heIA9GLt<-bfGLEr1bEA>7IAd!&3l9qKD@jBQW`P?Xks1E*#1(t8<3qH*JD}OMwkD{FBU}%^7 zibJXQ6^B%vB?fhmn=J5k1R}=s7h1UT|V;CbB$#nc180{n2L%wS&*C&#fe3 z#U2^A5AajBDNB^%f?S?CNP9$nG0bq!M}0c%pZi3ZHt&sOV32!^VGEID=Ax+-Io^#_ zp_yKkOj;J1<}=gDiA+N^)0EUqbD3$sM5Y5Z)1cH$V(!EO_q+oXx{GspS_~|gc6Tk^ z0eeubk<6&Q-cwZ~x-I9+0Pk7mI8Sk}>)@ zl}XHx8)z|q;XQ)+fA1x*5Aa~u`yVxJIn%&&QeWZ%$iA95OAC(Eg3uq?b;q)5-g(?v zvy7B1z4!ZNFMRi|>HXqvX}71OW&ZI1;!N*^6kGsal>>TKL@VM!5Ay83$%ixaT&4pY zyqE(Vmu9|h@#Tow=!Vf4O6|@@yZAgC_(2Hb$qYSFVdbG&L?ygk=7|36wRL>T-U5$I zSm`5X?Ti)CiBL@^@yd2oK4Pvu6)Wc3ssgox(yCW#$Kio7{m)95jw?@U)rrnxszy{XzNTei zve#iBJOzZO_E&p75?$L7Zdo$XoZuEDG2^7WtdS!rA}0pi4+}wm+>R(XI!#5z0i!EMmC0%?osX z4^cRw`pzW?zvaG<5l4>BIVGK;IeFWCs$~yHARM$r`(6^8P4jmIHnR1X&(WF8fisMj zMv9y}(c9|Ir$>)l+A>RGQ(Mg?J=NftB(|A%`RTKI+K3yNH$Y7-8&wL?WoW52ChvZx zLt|3K-MaGLzJqNdc0*lxw$pSFEF!7kS1SX2*xpyHemdn*;72!%A=;LRH!tlAGi*sC ziKLWfpvIUiCx*=l#TicFtHBw23K7Ap19P3eZy^NSJC?l9TTVK*cf)XT`mT|QI;W30 z=7mLHp5ZVGo&Wrgr%o|*MymkN@KOg~Wtj&O>IW z???2VHL_S=MEKtI8N>si{D#- zr?L{e-ON6Ww!|BMApwMd*m!;tCxrO2JVeZ6=a1dAbkU&XT8ih6_I3&d`t|H$ms7yb zC7@>$s#IUnH+HKvFf8_O@Hr5zer?qsgAK=v8lv|B_^QFQ<%xYj`dH@u{9(HU6fiC1 zuO*%gbZ9`+FnV-gvu>TCxUM8;*TmoCd=tgzOE-1lq@|7?XqkA_E$4g$(RPTO#Ngw< zsSYmtV=hpa{UX4C*JJH#vw()JyB5UN9e~IpV%G_XU_kKyFg?`6oGTzIP2zIPL&weE zR-V%Q?e_Km+WZIb=EOJ2{Iy>9oB-W3385R9`x%E$4BG2#@Fet8z4(lwKQo7X&QzGA z&r7Ox#;8gf4#BW-RN{YmZ{B)3~p>glW;F8Tw%Aus^6a`b1;ux8pB7Ur?7 zoX57B`~$q%m8NovYm>4QNdroO6IsZhh{Hr`N%+s%3-4VzD&Ikub!soSF(V=JUZ^IgJr)>Z)*PD+6t{ z%;Cb(D_8(G-2Lb`3|PcbP7TYfKncUd!jSA)mWjM;`C#DM2tObJ{4-0Aj{?GPS5UdP zwU6``i_jBL!F52_8F0dGMbIDF1uYvw!2Z$Uy4taeBz?Yh+;00Qg8O2{7rr|x*c?+R z+s8S=p~*amYFndt_3!feztyi+$x8I|Qqo&;ZFy=DR3OyfY#);SzSU54@eo z<(LgLW}yt;&^qA>nRh-*F_C}*sU5xN0Y2?D7~#@>uqt#~C_<%;{VNg3=Tvxoo|nm! z8~A!QTuO(FzLXWt0u(lPW1*QG;IX~Bg!`%|nvZ|=J=0*&0B#cyfHueH^P^ki zFa*X8jLHnAnJ>B#*5>%T-$+scU@~`$vGjB@L`uKyIgh6~Ml2+}BQqM}#>iET) z1UyUcDIjLHP3xy=;4&6FhQ+4Xr0-j$F`IPR9!R>-CiPB9n$s0Y!)?+-U;9g~$v{#+ zo76WYsWX$h+oY%H$?z-|_j!(~=7&9jq5l;pfwe8&=jSrv113yLO_j!c;N0^ki7gR@9)wu-2Ht3;@;n0NYz@2wSxV$+;oC(yPMB2Q%t@Ul%%( zFLRVXhwUVAVh+W=Jtsy96t##Tq=r)<;M?Kjmbq*&rnl_~GNEzI3CAfVM7c^g+|0j- zXA4yy@rNXtPCkOP1DS@+6f&*gvX+~D7x-Vu?GER=%M2q*^+Oz{%T_ zG8GTQ-}@~*9Eu#6H+0JN3gTo4An=W?9M{|NKyd{?Tpsdy&&MbO+*xweEa*IZ0kH zScNkX`4?$R56(J}pWIStw`ES>)m&frX}ztOsqrxeAvUT7QezK=m*snG ztz6I1m`a@^SGnA05z8m|Kc@%XH7F{l{~noa=S4Tccmx(pk18MZR zfwNLz6$-nVf4E8Aogu=V2h0fE`Ly%QU6(4{VRAnP0IMX-`Te)&>jQ9g33He;yl_^~ z_EKCyCVV}9} zxdgruilT4_$l}ls02X0!L^)OJRvnzOaJCI6Dkqy&h*{wVvJ$n@-Zb;1Mw&yYse+Z1 z+l#T5VaxkgSSL6Ma#eg8&6NK~+PA=2HFp0`m(i3?XTo8~c!$O-_fSj}lZq3Q24N&5 z${;l|qd}N)W@wzYLNB4nJ#y(KsiY=FgD~Y%?#XR$6CzYn{l4F|);?#SndyCd|9_uP zW}m&D^<37oZqItw^K2O(4R-HcFuvujIlg-DLIwGDUWPc!U{}cY8OcJlx6^_4F9RJy z5X7d4o@NE;(nPy7uTj4{qA}6?nnsQy*$saP4+?<(LP9EWtLrVt}-j*S^461kCR(cll^ zk#=C_mQxPd6*r9dZpT(Kbq(_Y=%RCT2HJHux77Ey;(f||u2F#Ak(*$HcEowZKw)yT zpyA-eYWI10z23VV4l!OE2h42+jC%~DlYr85ZzPEzz@5%ZQufHsM%nI_LfJ=@vPHmG zlhC|xFn5OU8*Hs0MbB5ifFxcgFS=rt*;y(n!oY+6g0J_~ng7QJAl*Ckp@l;9d)Ku@ z-&bMl6vJ!43sOjixbH?fct2Ik%AB_?8TFMlA<6%Hm0nELF$8wqpBs zWJnK19@a=$mY8JhsRBjEy1G|G$zt)*Fo%WES-()DpKiakAk-S@&m?`|FHhIaYdOhV zxo(Y&>{+{0#r{Hrxk9)9gWh~;}+!!y$N#8 z2QA)<9*ijE`_YY`L>F&{tMW;-#foTbJ6x4jbX5{Zjd2Y#T$Q)N6HWu_B;|5WzmvX4 z^-j1d-A-)cs^~%+p%G2v=4X5@Y#CdY3H>4Q8Mx-Nt62Xg4nb}DAQ-baE?}kS)t{c1 z^D?-A7m4s(^doqdx3}{4hW^{@2GlI>zj1YcIAZ-{Yg!bvSjKQ9n0Fj}M?V|g{kBVj zG5z=;BaxgmFds@&g)j08S@dQuC>plRMND)3eq>ueRO=re*252cUnjF}L2@U(asbs1 zWeI^E0Wq53WbY}Slb;r^VVl_&hA4$_(Vr403lAE$d8I@T9{Ne*$;SZ$m&1Xj zu?|d62L8TTCD9NFph-mK(lrY+BEP*L1q6r3Ha9hP97vv|Y528QR`%3(lU%hi>-qT@Yi4o_@upC`+ms$3m;DMgmepbj|DU!* zD+=f@oM0ivCI6-cQ(SPbF!+f1z~%gl{2TcTj*(a&n{px->=RgsVG_T;ofAT4pxerz zlw0(4LTzbci=Q~@M3%|Yz>ks%FJp4ESV0bGKBq!ww+k!l3ZkXCyMCbD1z$w2ll9%F zJ_iN_bdAgh0@dty99Qhc&(BLRu>|Gdre&h{@1-;LO9u@N06D zKm)7U02VQFQxB}uM`tJy@)`2>G3)e8xp)!xXR;G|pQN}EPGpx>;$*==dq>NhFJ-2x ztzc9EN?STl1p|txH||R{gN68B(c74<)X8`+D|Ip!R0byliaE`F=c&YGfNyY>d~!05 zmk&OsP6iA$+vj8qx-B>v+@*7GUeWwy%;_AU)f$upS;okzW6A zQt9w@UE;tsBWN@{UFGZ#NiiP4W?Bb)3mwL2S$;xGSWBZYjInwLK=&;`jy|v@5D}Uw&nG7 za$((!->pkX>#jKmFTCYC4k2;1W2H}r{7#f z9*{OjvWS0a1HBJjUHZcje}wBzC;LLF7@-(vwpCn8bFsiKE`cHAd4i#mDC@3&RvA*# z2z~O`s54(8I`B^9-@tFrL?;fHPS|!>y$q90!oI@Gz#i#rbxDyAG2sd^q_ z4Ktx#*|%jf*{g3$v?19NxYv*KW3 zF(HVc&63F-!bQGZunHf{{o@@~2wlkp6+#{CH6@%s#4nNNAWkx7oPwk?4ytKw2$FEK zrI?JGSRBX!4gFOVlE*?~=*WrMVw%ujRXx!*cQlW^586iPZWW^0^w7g;NND4U%v=kIg0b z+MD*}^IGK`sZLLe3qBWoHwsUt^CoFZx|`ECDURKcd@Byf@uP$Vj-g(4B8P(l8v1HZ zWJFbf9J*n5i8Za=mc_w|FrR@?K~`d+!-`Yt)n!xScG!=cvK2vK?48g)oN1+Jq~a3V#D z*rjDP9K_7QraL|Hvie1T!K|@!=3CECByvJoV9d!8!8}#Ut zlY@?RutC?1ltD+d@6Y}c9Q4%+`vMac@TzUlg$jIvKqqpKBJR|n$1ZF#=s^-TPI}yh zV}pYhkNeCAwf9X2efwTb2OS%3gTA46a?p2%Y|xXhl0m=6xo{#sAUQy|RA#zdVfPZ& zWTr15P_|}X7o_M;4fwX#0s{tvHr<-JOiI`axpFBN&WzS}(XE+tnZ3|)9ko)OY|UT_ zBrv{)JhZ7nl)pDvZ3ei3`xd(q=L-WJpdeI7&<{TW^typgr>#gv&ZWjD4Ys?&tj0-1 ziyP=OwQW}8aDqw<)LKC)eH>)4^Sixd#T`gH7h)P?n&=fz*c`70%AX$CA> zPpl}fxq>r|1MR-E+Y@9!qVK2PN+z9P%M8eLp4{>uWn%o24XZ)o++D4!(8JOKmJPs{ z1pr+=bTP+$p*kg00N*!H`-hHt#hfxxWFA0T{ZQPL5Jm*Kzaf0c!90xZV zi{C-e=~LvGB!fMg>v1@KJ(*b7>w6;uYiNPn>_EJznKYT!RV?UD0d9WmGU#Us9{0f#PTl*cK1@ zs-{2MEugW8N9HUMHI9d<8n9WxLehp4Dv<9U!GJy1GpW{I5lQ^gPs>G@3Z1Q>8#r^iJd;MeG9O1`oJcVWQ{h`Lee)QSpN77D4mu408L$}5FB2?E~XOq)^gue)Dyeue)65DC(jf;W|cOej|=^} zP(byb>3IxQtO^I|K58&i^yn(l{{8`Iw;Sj&Dteg(s3^BZrt!4JcSLra&_26xs{CwS zTa(~;_&$uB+L#VTgHb1#>h61m9C8l*MEB(LbrS*x7rS-V#tb6*aS}8#i@$>ub1bP` z_zHDtCZ%7y+Y2^Rj@R;PQ|{Yfn4H9ZkD8{%2fyONcD_mw`G+#_vS_XVE0$5hhAJ{dsFr52C$xn22^8^|sFWJ}BC6D(rn3d}GmmT7maT zBay=t5lleQb_gpQA&x5HJ1N$$%ueOYrtZwYq{M&b%ih>5ra$ATpF{4t^E+_Y!ScRd zzTzElOoS;z29xhiB(|kbCE9P;Qe|d`2cN~Q&XPTlFPFjq)gb7UFhBwOgChv!U)itN z_h^j1a$Q&GZthnwpNRVv@)zusFYmGBnbt!mT?8A(h?XazhM)s7-3M_A0NEmkY*{Ze zViBSB=0$5|xObxB1g#A9m>(mc_+Xei-uZRCoGiRRYNFw#6m3E!3O!4qdOcV_{HQnq z2Im-go4qxQYsv0E^AFBltY*{5wHCb-KRF+PP^hN`xp^|KgxY2QPhX>RE4{6u(elsC za7~rno~&sE(IaxRWLTocCg&E3z2n(UBz6m+BtNnJ=Jb00SaNgET=%=~K8u4&g<`Hk zzqT+|-*~aG`dMAkX;><$6Cs^RV36nLw?PG%h{vS@?AS^pVz=d*>y~E!LVoLMC-8(zy2iHc60ZI?0F^yT z#*8ivS3iX35tY}s9(_!B@?z8MTmfN=a}xfbLOY89W|1vLG%uosxCa-`<1wqsLx*>> z&@c49Za$K0kHfvmi6s8?k1M|4R%F=|av>zm1;Dywp%QnlTX zP5N-Owiqc#pjp-;*Z=`%d_6=sV-I3tQBh1v%4!9~5wgbf;TeVAX;AhOV-$68DS|XX z(Vlf0$$)^c(336U-Vr`at2L*Bx5jBByr+Nw?Oq!Q-tR}VS_s~uNBffNgihK zYcY+T5*x#?Gn)vbi0~sjG-dRcG0(CR=6*-|Oa4k2gP0T?#B`~i5=Kd$mfp;KDIef2 zH5{fPs*`<+97x$W*S+aTpIcFHo=`Ycv&Fb};`t&`al{dm)24Q&-)yrpJ*5I1F_J!E zTy|Ic$#`r>VFHKp@}53g7o-FO#Q{m*-=&>7NMXFClK`0`voka-P3_E|Mbfcn1i|`k zc4j>h$R4OjRUpZ7TkB@XA`=2OX3<)qB8y%SEZS8mve6IfpJ6$qG)ZeuFftWuZ_=bU zlkNN!cUU4P$$2r_q`q2aK5c@Necb0{abzLX6v8BRQP{0wFJ_x`l)xr2Npx2Q_7TMH z9R#rixmU`W0}$IRa6Z4Hiz=Er({ex6WfEBcM?nJDTgjP+WkFW=-#C;ijUIuKR_ z*ihJih26=4f)QoFHTVz^XwuZ?N&W~WOg80LJgurp4V~^HgU`9KZTeseYNbAyVSndJ zD{#PNlAv?!xAHKuu=v}FjJu2?j;IxXV#9kD{xX(L+oSUf)g`EY>}Ymwt)TWg{BWA8 zp1B23?5thZo$h(bIprBw7&nmKKMChVrVRVv>>EdjuXfPB-SpiK?b~k_fC$((JTmL+ zb=(*x{5I9Drh$@^-?sT@_N@f=ZCAwF@Q?Pb#kn%IF(JfkJ0@4UE94Al(j&2N4d3q2 zzSWDxHTz~ZP0^)w+PA6apb=bnh&sEFqBU*2C$T*6f4k3pj0MAFdovWRx)1V=?8bqj zQmNDZhii5LYB%VlA(VgdCB(a6Q18=gsLJ@^t2k3oF&PNz;oeUD)G%xC)@oR_*e)j^ zQ@Y2XodPUhhH3B=A7!nD*$sVyl}(m_YB3$#R%1h{vzCYg8^`9{zdlmL^%_2fapRui zQj~PR0!a6KMt4YP)?BlaT#LNGJ?a$+B;B`{uz5p*SS zZk8hTdIgm;Fo%hrAZ;FN9tN1#Ujn!EsWxnLhe45wb0A)V8^RDwS#83kP+4W51pl%Cwa+FX@ISsw z!=&tq+U8%yH zZTX~el^(B;7vd|*@!hZo|HfLj2nl!Kyhw3addBM9PM4C$e1r_SWMKTD+<}vjBM8}; zs_{|W?ErOAjzM67(fvH(0MtgG4x_}FdS1Z0JQn|Q67q$kD>H+H#nxNoF-Ly$&u z1O*ALt|7AcPWZv<`9u8q@din~!QENOjI4wnLcAhB;gkcsc29~f+=J!A{cy4XmAV_ZG!_layr7CZBKbx1McxmV zGhbxpU{W5=_v@CBNnhmSUrm@lA1IRW3!97ko;L3n!`-aXHQed%biceOi>zyl|ixn{DC+s7!B9Qx5)dxbUxS_I1x~$^g2ceAQLwXzbgpkQLk%43D-gc z&B1H;ntCeYTKSeBlo&D%YRM>~-Oo{2!wUeQHR{+g#Oa0iJT`~#x#Fi+s@rr~M8$EG ze^`zE^fhKnRIg~pR)T5gv5;JOAjt+D7|%`Wz=zix*`7E<$ksWVvl_{gLFlb)O`RZ+ zQ56Uu+~w2%lMd|gSL2CxLha;h2$;YYfu2PCo^;Zl+{{ai5Z_p7+E{ep_5sq%Q{;l9 z#N}K)7o%gVk zq&Z!q%T}wK-_L82s%vodWmRsia4J*{bjDGPj+Mv@UF=q%3FwSoorUGGPW5$0fz!G_ zj~d`h4+C1%^Xn-!rgKb|V;O zTD>p~G#)+|BUHP90)Jhe2t3&2RVmsN!jA4xsGpG+klpNS1h*(pKEF-@RXH4t*Y3;9 zMGn2cRjj+106v7*5b1{5C=Nbkh`JMt-zLTD(V_PE>5XbeJ}=cG-thuUpDjm@AfFAE zs7ST8eVvUyot+F<@42@~#p?HW-bXoXnlhs@H;)SYk+|9{k}?^In-~W>@P&% zrr?Difvd)IA_B)#E`6ZUslC>d$edSb@Z@@P&p(^a?{1P71i5b;7-6|ifFw5yuw}~42aSZp28HPc9#NgQN+HA z7;Rnwrut}e9{^#U^snVO5?DGbFrdTy0UfQ?r)%|pyu0%(eLkxP>osNR7cx1JBuhUm zzx4oGY%^H;cD$%OUW3Y|cpg!Cg9eq!(u3sEhiIlA2lFP1^7EIb3-mq~Cv=s^8Nq}) zgJGG!^l#gWeUlk&fzR#Af=_s$lz!J#y|x9fbEp=Gy9{m zX1U-OjW=7HhgF&--Ljk9VH+}OKp07vq;{ApRt72WT`pot>mXMheDj)WZHNtzCqo~L zVT-b9CvuL=)gHO-NXhAhGfPe`(%9AQrwD&lN>8fvCOrN6viME>DzuqM9_|~PIUjYV zg=73coA>#itUtZGOR7=*vuboIlV!wa$^+KOId1JRS_`=XMlOg}v&%Y37`D~$G@saK zxAQVvcVn#4t}-Kuv2I+zv0A2!e6$+Ih-+?8*fOAd{2IP}tHdi8*c2g+2la9!>J3^! z`QY}THc-cV;3L%I`UxpsB4*9L*e}|V2HfM7bxORX~6J(K@DgTENJMb4&-~&WXgbI*C!~c zpemG92pRL4GszVfe<*u$w+}h!r&D{9^q3j0^We{h{9~AKPFy0YV=y6c-I4Hfjn*tp zvu5{=UmBAWx-~<5Ckvg_w;aJWmt?MJ-8RehqBLuvL0Zb=y$m}5H z;|l9x!A+UTL{`iw1-4Mc7K&)P^(=+GB}?GOy0yCk?;_BNtbR#ajP8tX9r7>Ht<`d_ z3A%NG<#TdC_21fnK0a9nw3k+2qt#=2nu`ad$f3J+a*A$EI15WiYM$ezrkNu@e6<=5 zSHDZanRof<(U*@Lend&MN4sz}bwK3}8Q8uX9j<;3KcH&c4=W2-^LT8<4IM^=tM4Ng zmhjk7!2W_z7ABPq6i5TUE7CSx-Hk8ipHVh)*r5D(}-! znO3w(s+AP!s&(>=kuwE$g5E9)^;b+zRm-f5R`0X0JLIQk7_EraQ0IeLi*=)+TdByDU%|YiyGBj z)WK-WtzJxjS#we0PiRCCGv3Crl~2&C z2I6NHby1KU%)x1v!}rtB;e@}EuUyx7U|GlBB*8+!v-#1dA;SgWW(C6eNJTJ8uBVdBI&oF zcL{e!tn@w?B&@W=jY=86h6~`^TdW6%vVwdtv-bpV!`Pvb{Kac5Y)+`*I1{3^yC;q0 zpI?~}{oPCWeVQ7{_m>2PXpO>#H)|x9DDZGaJoh;hqGsg*{H(4CAKV`&>JS3Ugk@i_ zkDwC`4rKf+F?95(AS)WDTsl&FpCh~bh*FC4gW~RAZsS3t6U{FZ-VYWP+1_E%$Ad-F zs4ksQ{&_~q`z%qEeVzHGk@DX?g_PV`f?65$Y><@yQdnKHR2PDp%7( z6jo%2sru+71?DJXOGS(Vu`t%Fv%*}OEGTCgK}{hX&?q+Pc2VFg0-eYwGo`Cg;?3E! z)IGYx@1(G#pDPEDU@o1GNv3+_3!}tSCkQ2u)#~ri>R~jRs~$|9bX(o`9I1XIKDfvU zc8>^Df3jbFRI6VglM*@Mf2e-6RzJnB{(Z}!Uq{ePcd#LT7X{j_Mca$@zXyF4mq*Qwul7?}@D8`zUO9vli~33Orm9`zvCX<|lwM zDPqP4cfbUhfa~OR5hmcdaB_YZe`XX~)Nf%XQzN3BWR(4o=-8E$=7_5uJGPJb;M5{BLtg{hbp|>c zAowJA;_w6h+%A7`bH~MaNMd*kfYH}58h#d#5n~}i2OH=b1*H%pWUw9zv#yUN+HbEY zF@A$dNOq(v(OxysT?(=q(+Qexpo#pDMk9W!GT3YAGCelv0Vyf-yqrlm!rB6}Bo$|-8lnc6d6lZvLO=B`S zp&3Wm*dMm^QjYzlk8SMpy2;qX+LPt;f@7biuvN`!=?VottXldpMcgSZ{S-gh=A_rR zGc(yH(63H@zxLPa57g=}^ZT_ES~{xLU*lIlqixa%EcnQV{rWL7?3ro=BL746UbXao zH^2J+f$A^xtG|@hm%$T`yghg4jli9#+I!g*@i7sJ1KmAkwkrQulfrl@-yfmxz2JtQ zlb%P=?gn~CwYbUY)>i=9^pZ;cnF>mg{Lc+0AIeTFisle)v4Or;4IfnzjuZ5xfqE(^ zMFrhqFgxXE9qCK7(FU?ZekmO}+hD1u{I<>kTAqQ1z%W2<-t>d~xsHE$bnOg0BYrhdtN*~@g*fR>t&=DU@wAlt4lLGn~!8Z4P1HHR8*w|wP z-E5$1zHHjqFoX3_m^C(pXr~&eMGELBf(|p#kT0Z0!+H~;C%2=4p7;Ya6DjIz#DQhP`r>)Xd5d~?`d3<2N>psJKdWQpmNVP&@~Feya-wz zyL_C%dML~W{cob}E1-JsuX@%vFvl{C3OV*Pz`R=&fMEBgWQI`%YyEl_JG06=3?t)RX=$>j>bX>H@uIGBHe^M6{=gj;@e`u)3o_!z#y+ zb;P!`#>Z9gRC!YAn6lyF>W}!=$$p`GyR?Pq3HmdG7g;=&!qOKfUj zmYAJ;`Ryqjf=JsWDNto0UR%%MQ#P>^I)tl-qZy2HaE|o!3^p1+hP_Pj2AF@%HZtA0 zV?Z{9qjSiBSx~W;ACH8^9xKAt`2HpO@jAY6j|i2nw2@%QEp%z0(K>!n1xvH-D_H|t zuqfetK|okga+~D`fcm?70DjL!qyPgC4eH5(Coh*-&DV%=pyso>$TqVywXd~+9R|h( zPyo#$Vkjg-2s_h#bRZ7?_yoliOGN_4kMU9oDC>5*O=;Pc6`_Fy?V>`hrRWxDhYV_b z&8KP_R=eRj$L3ez`58du%EBrf4Vo-*j_kWm#7uHU43y*XjjnJNG81ty5gQk`fVh6U z6Rb1-T{ES*MFsKGvUBD&R!+B2G}>IG<=zaITa>{5d=O4~x z80uOnnjAE>2l@TF9+)Xf>9QTdG*$x%k^=KNbpYc)ED3N#u)R$Lp$(URK?Odm9$#Tge{I!!_ zPWqo$k>f3Vj-7dQy~>i78Bb-PFoSRLki!S}*8TLH2KF-h@_?}<%;;t${VvCi zpd&DdfC~4>kJfw;UHs!o_|#W)#b2b#6aqxwjOnY21VR=F;*){3410keGXz1B1lcUw zPR;hY>KWZP&S#JEsMrG6RB_V}F;K8CDsb~-0W*-pDa;a4sj?JHvvZY8U65)C4Cq5# z>HA7TVyWyotj!uSA?p~?k5I)nzBfVYSy`=7Ox%s@TEYItUkN`hRUIEe+fTp@TgzH+FQB@}|_s|pFM9*~d zM#zPrFo(Tk8zc}u9)-yMtL3k+!cD#69*H7ubC)xbP^v@83Y07WH?u8oJ^~N@Fq#+T z?_2#4BACcnMEv9&F>>ge%pt?dSQr9D=2$4`WdDS#)5LHJlY!K{Ur%`p7PofX#d3z+ zs=&QHx8rsId^`@fbG@Cog}08qmx^1+qYflEfSOgzfx-xMtU5;T1I9iu4DFuwtzqF& z7)`A=fx(Z@j{4IZErn*AzCV##{v_<(!8$GBP~wY76#31N9lk6E4UM~VspTKUi^`K! z%d_DTmA634=Z7aR%dgsAItH4%bVM|U&vb_;FRA*h^lVg(@0H_izt{<_^j$Z;%i_Dv z@lMW-+hg0?jBO`|%X=NW6|p57Vq4O$`x)ea2|w}YS^dMU45R?QhBpu3Q7{@F#IFei zZ1-+NA{YKJMN`Ln8lV33E(SQkUvA-t{o$Q@#9AChz*2 zRjl$w0=?0=zgupv=XY_qY1Ll-zCIV^Nb`QhrQ1T}S$yCn_wxvLvOhT#-|hJ)UcwP9 z+m)FsHCwz+_-&7w0%~9SU2I#2vIgcGyQq%|%aiaIG%Eq~z|9y1kuHeu5{+MnSxH7E zOxQ{x4sEYMr4S?-XJmCibIt8acdb5LeW0j=cf!?s@FCtCH6Xpx$=*u}ED2ZtB0BV) zvZJFlv>)a_f;7?=J3>0)e*f*;&;zXtV`7Cy z)ck4gwk)!OPK?(DtDpIJYv)^P-t>lXJyi3~JbBqhethDsV@$z+xdK0+J0M0A@g&>3 z({O1Gw8dMc{bM~^%9^OOqrV=yicH?{n-$27^?=MHJs?@&R2Fy}1!PNju{<<CFjFy!z|)qDA^S= zU}*!H?zGM%2t^$LSW}Vw0wmpIl7{Mvf)_~F_{#~w#XQOsqE1oqV&2d06I@R8MHSi< zs}&hpd40edi&IfT^m1N0AH~h|g-hJ8Vi@EhP*cf4f@j+w2#tkx>Lr=s+fIXm!uWtW z65Yc1ijyioinE;Ywz17vSKbC^IkvfVc;aeIdu(&d@We^-&>~#@Gugulg`oCuHXlnA z{tqd+?eGFxr5xHBihnUm#ZGEPMb1uQFvtLdN)J~L6P8<$TR}8@Wq1%)FO%?r+O$an zxDLnzcz~`8bif$kCIoTDLhYD&4-Gfv2BxMSyA-T9Ih*7jIw%Dbu)1fN|(AM6mT(w_fc^mPS|jN zY;!B=*vm(tW3;^dxDa{qTxx~U)H_aSN&+ah+38+}7v5O_B7^jnlVY3GrH*S7#jK7H z>o`>F$T`X%xz%wL>*yeLv=Q`;T^p5X%M$z!W^8kYl*mjpfR!#g`QAY&@it1JlRXas zIvak~8h8>upZA=ghr$!%V6)ifUBeThBk+K9tZ666z_7U4~+rt{losvdq}djd|Q1RF=vp<|pE)&cW7oZyVffQN!in#hvcl z%%T6SbLZ1lPIm6o1DbU1mC_w_?%OVY=Pn6$F1ES7%*h)**eCmFPWrJZiaEI$o||%& z&B?KN;q47zY;!m~kttfS%^k{0{gIYJ)oKo1ati$Ql>5fT|811liWAMeVyF)IK?wq{ zLZ74`-ZT(GIDZYoc5%Z(*@pNzD zOHP=R4t?aO-auhO8E^p#CWR4(nRMUA_3!fSmol8cX9cmPc?czog``zB6fnP?Gs|?( zyC{{~`8m-V--$xo6{_aVm!iWu;wkn5cXcI1Lfh_emSz3mxM4%3d&@WscOP(fVz|qb z(MfxB6D_DC$t?8a9XRU>Sq(A;e2UQw8!^LQ_rm&_&8GQl!1cGLnXA?&?P|2ki zz|Sc?6s_E~A6u~qGmgiy&tlaZRfeLc30YE$ial*wbXsoHT1Cbh6?M-1Gxk@@@NEx@ zdxco~l_|ROM!ZgF6^rfF&}~d8mXQ}ItLKpY8B6cfnTxZx!_`L17;H4&2jYX3Rjiy>wYwkz{h5+zd>44;@XFrh8$>7gyjY&QN~9JH zQABS7hJR}AbU~vKQL@m*O!sD4FPM8gRJ#Z$d{$no2C;WXuII|noa!XY0uCF+QQ~Q+ zR7UR0V%->OU$lsyUHF6!@a#qB(PYb=W(_VudV$uM)?Esk&Q(|jnaWNOKA-EA5)Vru zbdlM}?NxcW4Yd|SwzXje3pt_IuV@fdeuCY`%j@(L>ex1BltI8Q@~$dZ%QU}Aop7YA zQjc$jYvHqFl2ZFD5d+vB#yvum1SkE59P&V2SqH=#7;db2-P=Gnr=}jurl0YXnjpARj26If_a6)G`Yg;!QoAl+&M5_jqtH>@2_jLz z0$KJonj}0A@UG3kllocKKU>k|#_J!wWfF~`YBNOcfr~hcHcf1qp*dUOfqTy^BuhdD z&Ik9I%?5TUSk>t@Pfir|%yrjW4kx&SY>M-Lv&jUw`yzdJWEX_1H77+FT(6;7cy$|L z2lr(|#jwz^j#YBkS>ros7VRdrwB?w12Mt9-E;@Ts0V_m%ARvmj=p7H@ENgtl*^OG1 z%R3XMQ$@ZoNc~bke3F_8@;Bts-F0DNkA&-CG)j7)pZKPsSWp)F{GxZ_KUgjwWL$kzItGkwnTbDWGt7s1>?Nb^(;bB>Pl#SK+Cne3 z`lA()cz4ZsEpU|;=z_PNN+HJ*;zX{wRT4h{XExAT3Tt6lg}}-KBtOl)_bEm~j(-n>fev(J|I^;noX z0AFQMs$}5@e7cE|xHz{6J z65E0WSs&nVdCK5q1q+BWfW&~f!q{{97T=h|r+*QY7`v;~0Z}Ui!F*1C0be4c)~RO& zbP)Ag3Gr#*qSeal!KhI_N;U>Oh)e(FR zN7R8Maw2EkY`J85|3Q1500=WZ@ENQxp^Mfk@F4=7$bpL31&_zC7exk@v`C8#6MS)~ ze3kTsLJqTXlMn9q7X}B(i)@mvr<2_- zhYZ1!zf`pn--LTx!5Z)u%p*5D)9gFh#k*_SB=gWr=8;|U-R+kt8x@j`qAKU0y1Q&n zW43idv9CEQ7`6G90m`Ai_pA-|!*(*%!L@{8&!xhS0zr((0}<)-63dxMSl?XQwz^W{t%@3(DbydAYa zPu&<4n>vMk!ube_O|!J1IE$eax&E1}B`19^ITr<5oDpbynBR6W>z8A8CrP_xkN-~Q zdssE-P$z8C+$SHdkrHM{Dwoo{@R%Kp-(vLXgBxHl_q#)_HNVE4B}P%znwu_wdT%ea zzQCc8ok*M?Ylu_teHE~!PWoj8y>Fmy0T8-411-BR8El@|RR4%sHqoXS=tY`PxllbQ z9VbVF(t+dtU|Yrz!0`}>&>|5YCObfQxInD$zc?K=8L>VQo*yr?YnYFH)oS z#Y)evR4ZMQYNh1Grt~~ax(|9@`gxL`W90+XSclxSi*#Sk`~HtKeXK~xvs?}ffjq4O z_3!1^pRM(urD9w$cIU~{SF69;um17RlHH&Cl(ECYbm{(TlE;bk{vWFU?mX#z2fzA$ zf$GoqtG}4liz4{*I`(|$6u}*=`addyVkxmBMQ{h&awE4T6@dx+Fuvbft-_ADN`jf4 z^n(amYoLdk5%xC?);Rz}R!$kvW*W#&(MC<{&}DEZ8f@uCX$@9QeEt&mIs@FP0PrBy zQ3dO}z(8jyC`F5%WUze{W&`U%v|IzNWd=hs?{_-8kpY;ui8%pIitn$>bJxSxF7tk8 zNY+4|`w6#tub1L<|4rX5;oBU%OL7aWl#Z7s>yyB_7-(s{D&{qAs#ItwrSm`WmWVlU`D zgGl2^X#caoP%?0+HOgY}XfYJjP^zB0hr3<#VRl@_{BXT zMw;Ar&i9o+IwX!Iq>t$;7!xTOAB+Vlw(yS$p$l8m!xP(~)z}vF8Kq)ue6`Dq+b(k7XddW z^Eakb2?p2C@%PpJHJFTqgyVzz;-4D%E%bMGnL}4XG8ZyMrGnLgK0`TdFa?wB5W*^9 zk{!o6ATDbYNzdK*j4!KL2Fk?x6Bj=-3fcJKVJ^`anWjZ`B4a`%FjEuR8(H>zYd0b1 zsKW!W@4W6aGr)zD*elSbSgbA{Fo#?i{$V|UbojB|&|Pw;2Uykp(C?lT`g^*uYRm11 z&~tbe%M0|V-!;anPGs;DmSCXjt8G#QF+sHHCo2?z4;ZU@U4h*NKRY7${vBvfDr_q@ zE{Q0et|`g`BEnTQ3Vee=CwpB98!o~y7_PcnVU8in;;*I%gy*U4LIuj#o1kwL5qhCH z8IeU3iOUCfY@zBu&YOrxyHezt>>93qQ5J=MDgc-cO>u$rx2eAmjwPG%`1b2 zbYgtAfw*FBhHAOJiW*f;zwP1+SNw`r5n=82oSVBcpT?MZr{57>D)VmGWz zj_A&ZY($f_`e~3naNBYIh?@{)F?ncTvtrI=MNrNzKjZ(=p+cEAVGsGBkf#I|&s z2>MZ0xyZ0g9nzfSV@BYU+!cPyxc`5eQT4o|6f->Ami>%~;ny|~Z zzXbmQ0-ea$R}0yUTh01XhMOZ4yZiEyL7_s&%hG|O-}8Scdf+b_jC-8>R# zeGQblN_~%@gAMd<%1ZPef;t%JYz3j?>_;&{8*Wff*sgf-`%bBHR~hUPUGhoy!DBM6 zR}EIIu$2BkY_QRG`Pc zH8G9#RIr?BtjB&MOMw#~crVF`&p%+CID34V$D&@CDI6 zxdLd98|YO9fk1*Log8nln8H9+a^c-XyIMf?USEQI=O-?APmZ~dy2v8ckk(Nx)$3EI z1BMUhXaAYdMQ{OA0sv)$)J0L3b1&f$KLCKnk2{cH?tsI{c7>~#<{nT;$B>6PkwBDB z9xX(x`)_ZX#;-JhE#N$P)404!?dRL~ruOsA7ESuO%&un6@pWc0P*I4~ICZPgk<3i# zCw)g)=p6KOs>Cr;`gy~^=K48gEBZ;lQ2Y4@7HZD5TVvZ=j6DFOI57crviCm&3mx1- zXeHl4N&30f$KU})cMlZ(b3jVb=~A@KE&XF#b}3`EKm6@C>ST918)b#gLa0)$?TtW* zwP&T2I7@2FC}lRu*(@|x(pS_(F-(T)E@%`g>5#P%+ zPLgr?&fCv@PvwO2D-ft$CtW& zg*ig?#%rfM0?UQ~X|y8kloGl0lZ zrPQ@Y6Yj=R)id|uJy=bQmPqQC3h=NWN*t5ay5YcCVxU7)K+_1CVW0^xkFhNskp7Hu zVkJ&SX(x;_{I6sOACI7e?GpTVx^yqpCs3jQ*;Wfh6odl~MhPtErJ{WU#Rej;ZlT0a zrC3W8bFSS0mJi>?OIW;N$X1VS$-JdQY)d#?#dKDWL7Lc>j#AYjtV$%t$-d)URF#$J z(<_3B48DKh0qnVbbF%2z)S?qu6bZf^{l)2&EF||`g!^me$rznT8n(y00eHb1SF7^m zp-pLh!&gW|z2z{ZQ2|#1luo1;>niU6DbcQM5w2tqR=O0r%4?6e&Y6G2{%UdE3gl0g zPC}Mqxa!CC+qXB|o1ERBFU551eXUydn*nS*!CSF=%V75@3bP4*ifC&M)Bzy(qd|y! zl;9ecKs=%Nx7+<0FPmRU7{F3b- zSmKJQz9_>R&0tk9=X$h)3lRT)LatRlvZCT1Fu#o8deR3bJ+M}JE?91p&@be*p@K$x z)8F*lb3(K4Hq|kIy{L}Y^djNcKnXaWT;%R{2TRZgy-$nWZ1)LEPZN=k8x(ko;ya2D zVdIMBB87D@MCo@T?V+~FH^)Q5DR0y4pi7fgu#K8fiUv{gN_QxF=(nOiEd-D zsarIBa8Ezk;whX1Kc3Pa6-hj01H=mV$A+ty;K66v^^iy!oFYzB9c#lBN;`2ZY@P1z zL=vzYn&h6IlYK2r1fK)T|L^Qd;~d|@QJcytv(tkCMe0woG-5M{Ryo5P9te~ZN;#qT zH=Dx!era;%{=&v*lu1BozsSsesWGQxh6NSww?7N)Nefn`PT4XAj#9*SifB_dQ(?y% zV(OILslaUzOfbl=mq?4U$ZR?*smq6#^C3A2s)~Pe_noPJLpE$6NfDsx#O#EB!`L~% zK2_hiKR_)RofBFtH|K)S=PpT7YxzW@*2`zoTCsHTG!M~PtzKDf0fQ30iUazGiTJ15YuZhpUx*Xny|_3sX~S!|Zm!O?+D z=u23=DH~yQMD4!KAb;cF&F=`D2**#72Sn{$hzH+P9ghb_?b`m+qIP7z-)Cyn4$Eh_ zi3rnufUB9p{-<3s(?7JIIU;^lcFKB!9>(@3meb=*kh`3PsYN`+#E>R@aR0`)jQpz< z&Vd~1p$s`7iQ^|sNLkN8A{V7X{z_T`K7NNE1<;bN{FO8eQvvS$`x>(XXvgx@c^nN~ z8;Ow-muK84SjM`>|t6Jb) zY{{Pt)876A2tF6TfgbApJB3TqUX!Pghss=Hg@HcE+{vN?{W|(Hlw~9giHkR`W)F#Hd=NdldFFM+R~wERsYvuT$V0 zp>^bGMJ#UKTBSxdr=1`w;>|@IG*rY^%Z?-^I>wC>d$IbmK6rJJRIU4nO|=gO6;KZ+ zvueb`#3!j-N>?S2F0cn`a(}sk-cVh`EVxOSC;G?hhT#1wd0%heqOklv{i>7us=->S z9}Myk?FphyH_+P}CdxCF4>fqenx~ei)E_43^cYvhSL{Y3ewmIl7FD<9w=y;g>9Fs`#VNq zLTV>{#$b^18v`A$AfYtSWEPegtR-Q-veziZa$E-!j8fG7N*eiAT%r_jMG{s#L!uN8 zF5wW``oRqw{nCGEP(nu!2QAIbKI!}Iyo8}k0mjtTHyr!ox}y2A@^P{cVkE=q{>h(h z(-zSI^yV^fliJCH8g;UB(@y3lJE^V)IyocJNr@P9P)_=hO*>hBB4>FV^SNV1 z^vLhzJqTmqXeBJ1w>P@SgNH}@gXePfn-9Lu1Uqlu)obM1F@{8vLinl^> z+(g9#oUD2wit$h)&ZeX%>;L7CWc@4Id8hj|jq0xs)L+ZuM%&MEjxSLEMN)s8WYv=c zWgq65Kd1YdcqQ{-eL6&NGRh9}`#&_$oj&MJp#E*x*7u9`V6li&W$JM$#a5wMY%`8E zrqkH*SmPtG5pt}t0MY>u920?k5v&!%x3&RKM4gkNAzqJeTpeA!3A^5FuC@4QzMVVtTfWWfB zFiWi!396^LC5>3^gdbVn9dt26K4=~2g7p*zm7R@!-~jm+N$P_i=y>d02z7_cMBW?j z53GYlqW`#56~S=T;v(%%`o+Zg)If(5ltN3KKKO66Jp9h4v^-dnWMJlV<|>f1>{ey8 zJbrDEmRrvW(sDnAHBZYH1PU!zE7DHU^0016T4pqWmJ(@mvOhaAg_hS!)Xk^mSTx|i zK5PfHd|ClsDlLy8&YcD#EqQ1(Aq9gWf%7E@>15x~Bc~G< z_XdiC!;On;&IaZ8xI`KJC5d496L}Fqn};f>hk{c4jV}z=LSa_pUPOD{KyM)ug~p=l zimW>epr;J-m23WPs0ldz2Q?Uc-TSctskO+-o~F5Q=k&ZOj7=;;;HWvbI z4+9+okh|(%lFU@Ee>UeMwwH^`hM9qMS=7JZ!s(l9`9@c8E&l(IZ`8FWp!}wYjt(6r zR}4e>b+%+xD!=1yG3D3m3sHVw@W2T2jWAvbzDZDGe}z3k7z~NjmoOx)6?nBGUap9u z09Ui!nqYh^)tDT5B-Of~H3f$Z!9L&VMW)NQbl?2cb*|Xy%z@}Q*y~Q}uHG!nt2oW6 z2}9)!G%#Uk2?GsSfL8ww7lsE2iTUCs@%}SR2KYqVf6S7B2pwRkU(D z--l!PsA1Y7ae0}$6Rp9ixYKU;t%$#e?}Xm`hy(?dU;DQYbV4g`GAgh7OsI@_CaHV} z*uz4cN0zY!L!7g<$muN7Bvs}<1@12R*@FeYXs3w1@Ng2F%Wf{^{}%6rd%yg(zx>jP z*iq(!?aR35-sTT0Ip&og+L+&(?j09UCDb)AL%^3_w&z|W0L>8a^&1h+ z*Z1B)aX|btKYqC9ooXGeM8c)tPUuvLuwnWaT1F;?Y~_tciq)TRoL7PjU!4&Yuv&R9 zyVr^F2ZI-~dV~|!=nkVFu><7wNnNYTcpe!nx=(hmZ9JpUpj%__YbbWBIU%}qy6gJX zrPIDY1eZ>-LcKF1v2n$EQJfLT+eT zB&hgDe*x#BB_OgT-*W73deRYBJJm&NHhV6X#L)if<>7AxDKkq&zzC5`k_ z`#B4(GT&4G{_km|S1o56shTqOS?&lrmy7f*ZEiV|JN+p`dGd1%%cb26j)dvIbr%T8%otc;j&Z>^uXFC8mN8iga(4I5J)iz zhOI6V!_Kq~bUBC2#fB>QR|X;$5KoMf4gO4r7YJNs$?*7naEuZ1pPUTuU1s{Hc6xAW zYNx-$jnyPzVBhGxR*6nGQk%{#JEt~>2g{k-?Cl>dDzb!7TA7jJLSQ#;%m<=2k5aYy z-Kjyfd9K1X3t<|&ay=Bdm_R48KoOx)s5Y||R%3|LkwmyUjli-ZAl;`(JEb}gJ&+Vt z5@R}k`NZ}Wd?)QoyztJ|P(oByULLAM-H4Mox!r`47_6uv*zI zAWc0E{SVSKM6z=Hq=~&?V!W+r5J?l^swxaOwgt=6fvH_M|NCGUB*3puvj}vg0C#b* zhuQ@{6$>=vWg|}d;vcn#Q3_8X)v0^C^pFY2kR0rKn?Ufc)CE{p2S$H=O4C%*L0uBL z`GdbWd_GdQ5+C4`2W{=5?rP7zpU@#Ma5hamEeY(p{r4{RljC zd8X{B`*)Q1=dgJ-$>dxah}}*C2E;Y49J$z7r&pF7XTnl!pyionB#zHJp$kgPkG$kP zQHb4OmB_(@i_DTqVEMfcZUbsyyQ_m#;CBJ@Za0;*jK)vHuW{TN83^SX(Yn4A!-mW1 zC0Ao$R;<_G?@A+&5s+|z^?HEvrq=_!r=^ETX*=*=qt^qdYDGvG{09nx3EfMs57-Ln zK3b^f3^%#2fB`_Y%%R+^%kq%GJozA}r^YVxS zXYi#H`MtLwMs+u|ny|7`c1MPgxRqq20Jv58fgn&$n{($yNkSC#e8+uov74mr%a$Zp zku|8v?K^;)Mz<=9%>1xv_fP@Ud*jr`po26&{fLukAW7RwS}hLK{k=dnS7wUU`Z*tH zpBQMhS|(L$Shc&g26!xBvLH@m4fk<_jS$$t9Q*DFsppOd%;U9_P0k-y5PXH8uJTSr z33mv~c9ODCnSSl3@a^j`MsCj|@N^LDk7&!3_*GRPKdtvZn6>|wpB9BbS=cqPd*_y1 z7hw1`ye_n{o$l^&A!TpF#jzX!lPL!-Gts@V$d`N zUP+)6>8jn#YQCFLD!M}DgS)g7r#t;8IT8d-mm6q1&u{xgt$sax0#yI?iAFw1OqA45 zSpefjU~_*ss|OXdTywVt^sy4$h(^Gnn5F?HtZ*pRdk$XW?s5^%|JKxB`~0`2R!a#+ zxtt=o?q1upLxpTB+T)$DQ_8J47*e#_`qShA96PvKQXZ}8W;t^|T+4~7(p<>oJvOR) zP36P~Lk$d}LDYL}R6*N4He@#3V>24(i{u`gC#U%{kNBCY!qAIX7zfNnjk4ApR{z&E`aJ2X@ywXQ2zSB)4dC?p!HvlW0Zv7r%vwMs*^K=;CzoytCAhEJ6x zU#!;wihxge1Hn2?TZQumwd^=}sy>lF>V&>6w$c3fri{jdozr?6PdV8qKSN_t1g>7D zMKsuHHvrX?K+iFE=@|uTu(SKsf?v|5d6rL&EU(B?MiGk;2aOO}78a)2+ha_#Q@Vy@ z_N|CbDf|tc(zyamozkgOZAw3|yh^lDr5R^V=&Q?(2;aRSM94GWgQR81m%hh?IX0zt zO9j3+wBsqgU+Y>+r$MI_jK?XhP{32-P57U4(J7szQ`u-r2P(paf?%CC_d{uB8`lY< zeO01t3pS~;OgsNe4>*^a;#SNK7R}&zozQyuA}JK#Q5r+zmVU`6et7aW8;-C##648wgBXr~daT54PmTAYBN-Ujs`K&&?@+~gB? zm=^I~O}HJ5DgK=Y>{A7_8e9H9;ioq))&Jnkxw%rL-s_d>e`K=e48Xj5oAW;?VXoJQ zqh00oq5ttYerOUEN#ghIO};nZTV5)X(l9wis3b*nboKDGfSM(YxKHhE?7I%#hoKWf`=TY4rQN8{Zzs zw~eh|8XDNK^@E01L(2#E@7-C!e=@Y6N{Jm=Kei>-ZxSC8)-P^W57)UtlhZb5xWA5U zM%vYsp4k;wAA+B_lH(csH-kk@+8=#~JPv7}XQ`Hy_IHOF<9|>q((ZC_PGlF59r6aA zrs~7e zB~kAlW!R_+#M5}~mi8vot@p|m1YF@9k)tAoHN2qQMll#poP2ptF*p}L<;yB4k!45i zM2NDrh=+7@eDzh$nyJ-78cnsuM?8u+3qyS~ zB`YMXRmGUI7w|m(_?MZf!~W%KA*k?8Lj6$QB{nH1E|N+4l>5y|7g@~I?|Yk>YM87& z(k>*;RO8D$e_JSZRkALFu)XY&|v`RY<;Q zY}b2Uxnriq@*;StXUAYsPBi%Qxz)zBt!0>u{Wzhlp+=wmv@_@FE_Y?OAk(%~*gvGB zjh7eSy(Yx?0asUGzKayG3m$ttA}eO_@9SD*CW|1dUJi~26Ow^vDC9ap&OTI-{R<8z zDC|VRnrfWyUvMy5fx9STOGPYh-gc!ffbR{fmQiVE%o_9KhiyJ7ZcJh)^bzvTMc9|$ z?emutT62-n?fV5X{9)~6_%+7_>Grn5@WFr}&q0VN?9V9>Sx2N>i6TNonp=>hI)5K_ zpunYXm19M)zTE=-iu(OJL#r>>>i75i)ok_PkHC7TOsjv$ul}RElEd~cv|<19stkKu zhV*{r(KhUzsD4jY{~xvd@1c|#Do$BWtw&#XY*121GSe!GQUIX)<(g;mJsla;gZ*MD zu_J@Rw#1;c;V=^h1=?jgA)?XnX{N+l>Op*rj6+lDP234uCxtEM6CYg2dq->K-56-M zQbrq7HCpGpOrs5+HnnEE+4K#gb*hE?&(6E zGgYbiFEWXmg)p%icnxuAWwP~{-d=7`@w&B{%P*K-88bBAC1c;^tR3I{(4!U zRnw2}`k4*i-sw}_32ho|)ZR8%##O;ZCC+0V8I<$23X95uv$0WsLxF7tF}qF>krZ;=73evJg zY?i`qmPKP@iru5YlLRq)jv#_!;tGvbSQ|lX><$f9;QL(kIo%yWEZHeaRpQ$`lw2J? zD@-o+4|;&j&L^2zw3Tr4 zXBp_FlipemO+oRW5NLa#-}X6L|23RYCo<#ko!89cSbc&B<0lC#R7~L?Stc`3KlhTR zwCE;*H?YCXc#;;2&NEuP@v_ij5vy?`UHtxtH~h51WP9g-q{aJfgch6PYzDMAGSGG( zzwQ34UzVV?hbbMrrA!b=EJ2^fYj@DGx&(b%LC`0XMnaKr^8~iq!*}%pXv2t>t!Nn3 z+4w2n@=8|Rl_j=x*NSgZ$2+CsuLQQ*Ypt*hT@rhT0&S_Hq2f>R(|bcB)aKE@!V-^4 ziS^$83WBCcdi1v$%u6gG>C~4H?J8{(PW>gU_!%vc(ygc#@y003x^)1t4;K)f`rV0r zjFw1QmA69?uGn>zS)OMr_6p3s`*Syi{Zkg2%nV|`<{pBYKL7|lZ6&@p(J%4F=j=|nknAMm=vt-pb8P*9$raX+T30s5tEOkYWyh=A(7whBt={N|%|%qw)$+B)BvXkQxW zegP%si|aP`b-=veB`>_ue9a*EF+pABJv-mu_aiWcl2FER?!42^nRmsDqiUnhklZ4kXz|*DC;D$+Qc&~r0B#-p2nr93=dLbrMz!eQW9!(H zql>?9UEp*dwYmeml5WQoI6e0p;M{_!X2T2Au5AixE;}Zp;k9VZwt^Z+{~EV7$A$6N zqo!!h#)d}=%;7Dld0ck{u)jT>K*)c|E~39B)>$(P2G51A}0Egw@iAnvUNEfYbLbfWL+#)djFHwF1^&c=#UV_5vp# zqpZ8>ylCw8OsKAccuRb5Jp(8Ufij>6zR45CG4=s9?{F_iT7jR+*2C55SmqCi_a4f_ z(rgbOW-sQqi`gbWA^aStsQS;FOSqpu9WRfnZD=nMcodF0_&6@;GKJ4pWi*bD!%oof zaQtkriXR2JCWlMZ?H`j4a88(jRsB}kX$c~4uTA)FJ?h3y<@+2?I}9VehYYmMZ+`P5 zf0^#T($FnvF=3F(rQ{o&==5XcvXkV0M1Ub1>jT?gF^M&IVa?2U@Na(P0@|Vim@M>9 zW|3Do!c})aUe4lJaB062-hAZiCF-ura!kLHk?;ZJ>h|P4?l~|G&&_6WG6P1`6;#8o z#D}hWx1pb(=r-DtZ<5*JNAxO6S`&**B1?a)+P1G?$1>S5e5$K9eA`$=IOP7;e=x4F zy^b>8=p>sTr{UKkVt=&`SJ%Taugn`Zdi2O}H8yZDv7vUawY9GUqOnYAR5I#k+aBTs zJJP?vcJw7A!leo0jpr5xJgiBAJVAR-Ck)duUWPshMGp-Y9dAXcK*e9fsG#;4?Q9h+ zS7GI%{3})3K8F-teO{pTau#tyd-w~ZcPf+q-B$z5zx!^c_;=5VM~=M>sn!p7)+w;m zfYQgr#`H`Db{9WCaztnG(7LFfKT%;@h1b9cQmY>|8l%941UlL2g6Kz$&Q;iLf;ij0 zOkYw&`B0ItB_O#-KLO2Pfb43F+sgD*6P@^Yb$s=f82dof8gwI!iyGG3U*z(Fq5O{t zPtGMgIYpCmUHhHGzmO5)ku}TtV-tR`GQSd)E7b}mEa-Iqw1PCjR;{x@>xOR3a9i7S z!g2vys-#B1{0*H1FDQKuk?;u;flSSny1@N){Ehdsuld3GPRPy|E^qVJpuEsW2U;hvBlpN4OThyxEsNs8OWE~fOOi@$D7l`s?o z0b)=5qw#qDXnvLBp*ErP03@A{5f-QFS9g3J$92^G67>j6zbe) z&8dQ3tIvqG_h%#U|4~4@*2b%oT?+l}4nE|E?G5V)X8Z2x_$l8Kr)rZLo$mL&!46;w zn5RSeP2aQRSn8MbCUTTF^FG2FvURD#~>dqOAq3Viugk6qX51Ny^Ip?MQfIU zr@nm=X}6=u2MJ@8{^3G4!zrd-putQASa>K46{$XuyYfP5&$D>&o&fiZv|y;IVFJle zwjahe>XNd(Fzivdd#fGmb+Ye&3mrI!D@xuUQ=N^c$`cO1ViYLT5zq5rg;?y+4^Rxo zn#Ec*yrhK(LFH)SvbKEh%_Wbqtv$7^u(YMHse~nn#Vzjuu~v{+9ZL5DMb4kooWb%= zeS{I;Ro4N`*-%rOERHn9{o3g z<@mPYDV#cf+x}IVq1m~4e1SF-{tL|#MK06*{3*W;s2UMZX$#CTRFEbsGCUP`F_zo` z+wRXZhA%~#9Y|WJ))=J96Y8{YF8W_(m+FXE%c(H<8}8_B6!mdPBZe-6l!p#{*=Xi< zmStg;8ELp&sA9Yf2mIvTR%jO0Y)C!(>VzIXh4vGfi~Nc4td`g5%Z4(G*xWWKFBC;a zvXo&rX{+!l73nwSVviiSp0iZe_UVWgMvMhHWt zq%xUF9cLb*5JGb6^@fmyFkNWel3PkHxj)CmTP_vS{J-C|)^pDD%sDmV|Ns4cKAQ79 zYp=c6ZLhud-fQnCHq=Zgwun9nL0A^5j#bNpCk?V?!pLyXxKpk*Vo(Q}4X4iG7OQ1( zavGGsOPI`IQw8+0FM*2#ib>6qx?bUCzlPuci{Y3`pPKFSn)*>x=Zjb=M=gUc$%hP) zgM^Z7mFl_#E#x1Z_D0{l!_wU2JG!EE=!lUa2HJwKGs{jmF&?Gb)rF%Hw~eS&bS^!) zd7hG*Jp$c93)30M_7U0wankwIcYQ*AMIsV)2X1R%9Tjj8;&o!_nC|0SOUO?XjR*Ln zw{+T;@Y9Yj=R}d!I(A*-2orGhP#xHF2|1JIs=@4Y&#tTV&h1yE-*lu+OI4}+CFavrq^7g z^Se?Imr*L+c(il~J3Zut5lHZw7mS_gdkgd;kit!4aGUaCt#rxy=CGxf5EQ!I83-Ll zKEzSIE1W`0^kOejOlN19xTQbE_y-oYg&rR+i!vi7xrzMmkyvjVWkHzLCvmvR_--ghR7wp<6GebfUTtTX;t_+13wq#uu3O$T{;~aeJSh= z0}$s;(ZQg<``^9N0byiC;X3W6KFMwccOYJlI~neuE7f@7ls zGvFq!`+#7bZCE{kh31*Fu~H#&^4Q6~U9qJ5H4wdoCeT3+f4E!uja?_by&QGIvUb_1 z#FT49vC(?1*8PM?IJ=+L-MCt3Y2B~Osbti>O;SJ6FCm94ukO8B_vqvB>hElF$_?^H z%%!h<7nt@~xqJYES>|^!nS3!SaJL-DaJRPZMSag`bq3#mDerMRDB~MT7lF0N^>o7%yk-QWG1*(Jj6Y z@P1p=QEEkbIhETh4gGK&ep&K2{`@-}zrUa=4+)sI{KY{RP(F#Bad+ zFz}Z3w{H)@4+I?*cmYcI0ZIo)TIyPJ=?OD}(#Y!4Xdf&+WuEvStX37`OO=lS1>YmV zzopLESf|2NtA#uqu%)tS#4NGBwH*PCG~W_-%A17?SB`(CKQ64RdQRTTOmne%HMpg* zVy4t6`j|J`wHx%X_B#!IQ3P72N7m6U^K3++{H>!M))3R&i+|Ta3FeNuFcDxP=rMMF z96V}E`yp)ywR$ZT{WynJA?lPMTU(O3lngZOUiefA(Uy2kiu=cJ+7c@FB6?Z#skV8q z*V16{)YaEgMT(ZhaqE`=qq33gttDZt2j}M!EpY?|L*ULfyunbph)(=gzvF{`Yt>vO z+vm6X*rmlYxJf17B^NWM!1NM|UeQy~ul zUJh-*%d?LsNhi!}R(t*7$N0w??Bt2m%wy7bGHiBYD-aW=}dnJNC|wD!Pqvg<=$ z@K9|lN;{4pj+V(_(BGgL(wX62ccQihmse%8`D(lWkK?zUhoe2ar}~Q)OCK_+Mzp9b z0!YzZf6*RRR2Y_`{C1O++uFz1dI8H}eRDB6Mqp59sh%7V>wB0O((e{Abj}qqWO!nb z{p;9W0{iVC3U-FA?s})e-cjIU0+Ii)yT}iN8KZ;w3ac_i;Vpg|Y`OwV6>*^=hJiSs zvS^IL+8Uy88b1*>Sb?7%C@ngQ2*&xX>Jt?92w@;qSdZ`vUQ;Vz7L`Q@D*O_~y-;wc zO%;ntrEs2|l{iff(e}YY7vo+T3pj=2xW^Kr@v7cFnR7XY;57aZIA39B8e&k5(-pYCBJQn-!znZwGbl84 zdv*6RIc4<7AMQ)IB!hY=6Cva3UVIz#920mlE@lO)L;i3l8t!bqm23l7f=25M0%2xBO z%o}2IGzrz``l|2dRezjTU#%wr|8Cv%>MvyVFf28qRGE~$tVF^E_!q$@6*W{otXV<{ zaRC-dh@G76FDgCC$^2!yb?uT%6L#{iqfKfT-!4+S7c)*s?HG?O>DnhN>>|RFy7plT z>|{XezOWU#=u8D}(gTAVTZynRflH-};2f^oH!7^LP*J#H68D&%4JF}Zj+E>F(G4z_ z1X7)mP3&syRZSE2`YR!0ln@vvj}r`6ST&k?3TE~hDCergVazTjHi9F95C zkz6-`30ud;K|;EA&k8`M`=Wzc5Z*`$JCRr`#&6m0AS#z)D13YT^XPyja@+~_Sz&3P zH2)c0jMIB>6HZ4Xh6TZ&XEfbDmwYAW|Kl*$gzDS-s_*Vqf4o-z7qo@yZ~X_=U&QJ? z#-nnjey^h#vs+LDCXSfN*o^C-^v2>*d)fulxw2)3s5I^iuRX4z5x}g}T=3QPbD>;T zjAaow>@O(>ijpc}{XV-#f_tF9qzoud=1cN%Ul`UNmhVb&cPub*AAYNd`%P*Y@@Q$| z7Q+fD>~_ME{Om7|Af6$J?S=_rnRT1h3foT*7ub;KomY8Lf$Ok7gax3Uf`|l7iEQpy z7_S##0tY!j5^NcOLvj93fmaA((O!axYqV2##^8|nIKE;A!&`N+Sw>6CW2GeaKguN0 zUaQ|kOLelBw`jWIg;_nwmBEo|7`!jPur}meL;=L7d(}21w_V~b?_!X|R&VrLMDJXg z9tB+w>CwI@LG8z(DBjw+g^x>*M6uQ1p&5AF>n+V8u`hA#~MR6NFZ*AhK! zPndn${XmPvR_nfOzD6r;i2Z_q)*z<&dskrJttDVJiJ)bM7KvS;FyrP`6nC!|5aX7o ziJcoLQOy$PXo=YGfyBxS3F>K}8x&+z9YauiYqC5=43%!M9ttyZ{Q4@~;G2yLoKwp={v>TuSZRX8s=g z`xIe$Kf;nijx`GW3d>3aN@MXQ@s}0&9|Cd1zt-BMi0bRLDheGUbpbOz@O3=8p(OAr zy-8FM98!*tz0RFXYh9HP=I?=!jsf=eR@l4PgHLAfkDG<}I|+2Mx21_(n&gmj$pPXY zIX}htXGlWqGxCkDd$s!gwfZNudbr-`LZ-uT~ zr-uu4w-tMLbhjMHb3jT-;UA&uv0O2)UluO>a6%VGm5R`9EhkKCP#E+K=QL6gPm;7s zBICOKx>q5)OgZ=j+4VgyA-l3eO?Kx`7S$|oEvlJRp9%eQtE+L@P5wkw^VE5)3Dti$ zI8pr{hgkLXRZ{&aT7B1lQ2ilV{pnuyH~Xr;*QwUAm>C~@SE!1z6b4sB8 zP+#@Od)4>W>d)5dXZ(ZehqL;fx~Y?_L=9CaZi?&YT%d5HM>Xu3P{$%E$JLzp#i~@?IVo8w1MhitONiFqK)-*TEaP;8 zy`nJV`XHkHxK#y$?@ECFMN>I+%F^2=d=J)r$Dp@-C6$gf77ED1e1nxL%s797Xm=W@ zt%3raUvIF_)=QPf`Nc##-$0KjD8P9igN;y_aee^N4mD6W1?3o#;w*ME*tRdFHRJr_ zpMkbj!@L0~~*#I)s9=Zt&aHH4aGYFAiVmIM$Z%*sdVyEM0zb+q0Vq0t^9^5T! zzQ=W{Yf|L19?ET=$_JB_q6sCo$BK+|u67BYt z^67()$Ol^HS^OjNx{M?n#L0iX;pYe=w13_G1R=mLpgkyua5#F8_9G@OnY19JVy15+BIUs=r|A7t zNEfb=&WIC>8G0Gm*vF%|ol+cQnCwwJ4Q8}@rJ9lZZi(`V7D3t`RcTe2`|Z-;_UKPW z3g7pz7QMj{orf36ysCf;rFxQQ_hR81?vwLj#fYrE>o})tQ4PvTrQXHa|4IvR`Whje zP?lwzz|U8tRqPN>_A}^MB625t;n{Kx6*fzc*CI1m1RSErd#O6@6>@Os@;hy@s>T4R`A_w|b9${i!MTKC!tzV_RQ;+vbD>&Z!1Ye>wSA>1pQhZQDK<8jfm^k?kExAv< zPp6c=B5YFJesaQW_iSrY%(<3fBC~&Q`-u`{n3yC4FzK7zowS@nVDGJ5Uha$iPD2Im zAHUG;G5a^NB-WP;fbl@@K*HAwd{ylBcz|uGzBL9I5{S(|-2j|N4U{XO({tsb2bhUl z4M6Ne3AO{b1|YG~Ef=IuViADdi&=1}6y(K==+Eu|zRL7oG2G6<1 zhe+m@NquCV?zAJByOt(z!(Y;5|B?OF8qn(!OBw40V<1Ghuh0xRXSn11CFin)lX>>_ zv>z;9T-i5aRFksIsHR*c{`6>)pJcJm&rvo4)72ZC?0o%=DPZ_syEmj%(+@QiZi(3;C!&Za+B-!F(%h+OAY04 z(J5qdJ?cu4>lyhXp08cMT=!DgeuO2-b@K>8{Q6Kqd{GfiuAeIG3BrIFli1P98410002x_ls?eyXIQK;J{T?ZYSyWKPLcwc&mYj2vHt zx2y{<`KwpB@|&!1Go0z7Q$pl|uEunJEZNPLI%K=b4s4dOK!H0^mSnx}T`-{Z?w@9Z z7;uO4xS6yH5`e^^+Pj#9@u8Z#4(8Ls(cU`bB5KQMjW*rgzs6oRoNNx8E2fhLQKdZ4 zmt866uaH-LZ!wj_@EZk-c|N_e==sYb#nIRDO}T_f^wZo}12V?YKbnondWj=!s1iv> z^|3)B?ey|C6pI(kCxwng&UOE~nL#}x8;$I(LN+x3DUEE=y|nK8`np?^y65`rWHb6q za%NygA6n`r&FF{S%#41zOst`Mo|w_b@BBUJeTDtqA(a^|P~htXVtq{!^HV#Rpc$>h zea%#(x(&Oa0rZVLh3}ylI$+VLrw!=X_A(+^nuTbfV)_^Sg2ovrIobD=tEb6fM9!cy z&E2!>&r%`!wRa~R53fPUupI9@99rRUsnDI>wxRscEoP%Gx^@}|Y@D8ItiPOjszD>w z_CwpYZU zr`k(__Yvr1pRI`D)CvlY0LQ%qML6jfpPWaz0@#?XRGg`xIZeM^s_ly0OM zB?z@}A2`ij_oCksvP&ZeZcj|@aNz09T(WWo?s37xVtK&vBRp6B8468)gfCvY^y;fG z9Wm_4@^Il^p~<)4)ubCTuDyEH)uGAP;o*`=H?+BEbZGL$_+4?s?l_Ep2C<@;Rmyzv zczJ3izmJmNnt|t}Ker3VF2>{O6|*^M6jSuVaJQRX5}j+uBTol232#I;ye8h0w0>=3 znf$gSKSXe}v$42z1I7zW?1qsKzR=CzGs*6}cpXLuBpThW{z7JSU&^?DCK7sO{$pD1vF9wQj6h-P#zD{Q{)Xw zP-F5c_eFswpaK5~{AgB^3M^LA$R;~I7}?CeHYu{%bB0!tn-tlE{gs>Q^5knpP~Gvz zB~*8M3sc=${}%OxG+lTuQgLJ|A`xSu!aiX}aFV|`K!Fcxy6}yPXsSz7*rkRTRNXfh zON&P-;@OJWB-OQEm{N7oQ-*UdN+!I~GcZcx_zo^CIH@Tv=!NH5r7Y3t2U6Cjky)=c z9t0}ncr{YdV-h7 zfD38lwVnB<6JUhk`7K%CarYYhlhA~Kg*OPWko3zdc5i4o_`a^JazMG~TQ(?t=e5mE zxnnO9QU4@uX8-l2DHm~21z$z?N0wpw>2j|u7CcVT(yFa81S&iv(VZ{llKFQ89eaf` zB(#(FeYwcTE}gi5wz&W>QWpJJ5XOdMBXw3TcR%7hFJ8N$Z@4&F6Dw1Ycl9Hya)13= zVE#+y2M}i+-s`=Oz3~{oWZn+wzoJ;Ne!6Usp)18Li8x0PSHU%H{Q`*Fq|NjVa@Ggi z*BvZHm7+U#R})>)g(AAE_M#TEHv&(m=&9y4p89my`8V#>@cC3DM!>Z5ry( z8_2Zx@6#;U`{!Jh)ce~`(<*Y4djBc@%B}Ywas?TJffOBM_6aTr?qXb?GgP>|a!=v% zFpo>={l_b;J7Gz^|3C%)jbpbEPcua{)7V8}uM-BuVDJC#0%_4v#5JFbT$|MU+dS)+ zYXh%(`fd&7>SVqxYgb^sPxl1tXE!s}hbSSjEaBh+B?MN(a}vc0dxkJS>z=M4PaU-x zS?|KG#Gr#e+)JJTmH584oJxXmz0obv_NQsq_WJWh2*+sKzkb$q<7&z3<5QCcLO7*$ zvJg&^yc+7?N60{rkaLufJ2WA6oJWZ2Utxm@^9w=T!hs4rSP=&*Vt#6m8;r{P&EE+J zQ(Gl-P$j85;NS+!++;t!t)5;B^P@ZeC8C_DxulJpA<(|^Hpc9*88=^p* zT%-j*t%yzHpz>)^@jN+D1QmbNHKF1y+l{WjhX`FWG--6GM^{P<3i^*cR=*<^Uz(9D zpo=9B2Lc-GBjhTNkWos=M$Ho4f-hPm2KX|CEwb#@pn#57V1**CRKz9;=%T0m95l$k zeY9mV2M?WPPHJYCged3zZK8bkJQ3w*ykybIJ}bb%T?%`Iup}eBUV$SNvGYIRU^Xt} zL@$0*&H_QjX+FBzdUWll)&J63==ywZ(|d7mR=*<^SG8y;AkS!Yi1_VK3M;Ynb>r}) zA!1WRtH@0nA`bOeZbQVbatsRgvtL0%`bSFKf)3VgutB0jH(;ncn*IH8RF*Du!whSxd0pjzm*DSgY)f0^MGDj`>92)x2ztju$$^tT zK#m&0@TOQYDCxTIPowLhGLdYhR{zl_O*g#SC;S4+2+mA)Yo08imXam}0c}4bVHEq2C1$*##9^c!ftrKgXB z0e_e%&sIX-h8=-}7gzhe<8ca`PFRwP+bQroMVzLHP2!;Me?-Ms%6TWK_z_F_q>2}9 zHM(9sTcr1uCcO6c=t^lp!Qtb(xjRvD{w~P^${Sz;+TTaWQ63@Pm5?GOr1oRKfc8~b zy6l5DRPna6goAfs-;nHsir6FpbqH|Kpch}#ESZCgPB#wDwQNs{^2#kH%8^P)Cne;N z00-wNY!gDaWECH$z!wR`_s~8v2bNL?!CrhJuO4*LZ;@j~Q1KGW?<8FxZ#KHt4H5zM z(&}H;>d_?|pJD7GHye8E(?IcO5cf-KC?Ky!9X_7_EjWA>Uz9X_JX@(%%;4joTDs@+Bwi!tR+Ue&3V67zI(Z_@Hr zXq@}kVZFWTNVMe^ex&=?%w6nZsXipm%@x3^*xXpb=M40W?oUHz#3~|arh$%CP@u8#2CENb%x-=k zXcro2g@UZcw+TAQKphkmsPQm^)djY!tB4jd&~pLMxdi=&%~vw5pBNl#jU7qQS_9pw zM+^gvy<)I`Da>T`!z!T7F;GVZS&fScnqr_ye~1_ZHC|z`5`|ffqlq@aKzjs0rx4WL zKv()wN1gN#LHil#*I?$TsCxVR%Js{E^w8S(fcA}nDist~ecn${t%1JO^w1t=JYsY6 z4EDIfjO(+BcDsSDR#1TJ(FQvt+CaOw}3k}vIkf@qQwEGN{7685eE7Ti#Qy?+WCwe)SH} zJ~Pny0nkE%mKf-z|0P@TqXz4xFcb0BM7za6Efo}2!|F@W)dsrwXQ?q@SZ5mSaD^Fb zf4>d19tQgLr({A7FxblqGeQ;;t(k!;1E3oS`hKMfi!i>f{i1sf7eZ_=d%-wc8P+a`rP9m_!w)#d;wu!-V z&Pg_c-g9tb1by;n8$q8dl@atZ~U59A(EwuVp9$hH|j9^^e zpVjYZ&OdE)vVf}lnt&=Tmy~hU-5X3m_n#sHx=5qPX)F8!nxwG9Qbx7^R^TrhkX@>X zO%hNP_k+hRU#(*Jk3p;W^_(QD7proH*A60Gu!_wGCg^JI(UryON8{Gm>~lPt znqU#fqw3hRnk{dhCI{&5uWyRWt9v<-{kZXUykDp9y&aCgxbd37G6TCG{~_8V2Ev(B zMvCSNuOcX7pzSHb!7B~+hA+#}Nk5cmXBg<#0BGBCfQ~iLkAX<>eS!`!PHv@ysPO`V-ZD@p4I%>qdCFj$0^wi|(WV>dMSzeonXd;A!aDkWzYHa= zu@dw2j6h&yIm=+96lUUlkZ8vlsHcJg^c-lg<_a?o%ZRqCf!@Ixfi7?22;K4CkN3Wm z%V#(1pa1C}SO0vae?H|OjnV8awIT&)t)z7#T3N3;X zzF}&CaKPIuaE-jpMxJ)%){OCY8}Bs| z-lUJal<3G=kVmApNp)3uwRoli%kj*=74~-;;b?X)7sZ``SSG%k;7Y)#mS}E^d7dJ1 z#X&-m$Oo>%6B43%y8zpd;v9}K>s^Lj)(@XZJA&VBsu9+PL=RkGSCuC>97KhfYaroPYD%M!Ce?W;OG!qj zeiMiGCN$=Vys{7POids)Wa-|F8JO3JR;LLwh9N1Q9~4Ve(~7N=7Z$*G;uDt=--vw@ zHDB&G1B@pzSeUST=RJC7ZvmUnr=>^>kv=#@GgfPUfO%PwQ$QQycjlYG%4N%1_pZ@- zRKxfP6e`zaBspPx?%&i>H z17^MPjfg5a7A2ZN)($I&4B2`qI(;d{A-}!OubIF=&vkdpV*7HQjgk`|0pYm2*7@Sn zsnmw23e?ONB$b1zV!n<}f}G6P&ezaa^FmvLZ1>N*1FDHPFy}{Wz`7e}IqXMi(tk3a zThDN}I*+fZPa%PF;WOS#G4PG-J9M-3JtJ(`GKr9`f_M0In3SdK^D-0oL(^549j*CA zU>WXD^d;%4iR;U$BiyCXgUYR7O_SG!Chv+AxGtNEtMK)mb#f8y0#$5uBJ|p)M``r7 z3N+sTV%$YPWh#D!ZcgjWD};K&U*S@DREfmM`cTz$AeTm4_UBh1rr>vf7+3!&)YUw% zRB~iK9KzONA*3%$gkbJ@D&_5De~@n->$1Ik9c!$VLA`^ed zI^?9CbgZ6tsrJyP0 zSQ=zMTi)}~S5^ETUFl5GS1IAr=*<*4B`03qEpcgBp3@2=v0DZ|HKAxL7@&L14{CcE zW_xKEVrYB337&s*@fY*VqrOlZB-n3*83N9p_A$XT1PiAz_I;2uF*r_vcK=173$!kh zF0a!s80a%p3=wE&ah^1Q?wGg;Qw$ZV!g^^JHB@wW`;H3U6-PA}@eW(B7stz@^R(Gan&`yYJ)jYAYx+Pjai=`DP48O(Mr-@9 zIKSJ5;v@q170ggG89*W{SQhPurJvH?yhfeutP}mlMqD09V8p>15v@RA($pvfCQi|Y z-Ym`|w`i&W0J$EEmO}4|?glB~ExQcPtNDp2_Y>g)0a>gwqytK}^TRo8c|Z2)s=MX) z(c$QMxF5QC9vXpC(idK*LeV>;v-ncZPk>BNmf2q@qjWsV+=}TcgklPzmIx36+y_Q8 z^5O=zYH(H_vE&el!HexVU&KBuFKo}08Sw|$vj`N=W%evQ;d!V%3&VIG z&S&(B0{L5=*F)fDt&l~zJ#Q6>R_Bei=QMFlh(7IEtO(_26D1U&J)O|7iZ}f89xZJuT+DREYjuz{hTCdo-H(4L41R;)Jd=F z%TM?=-#zT~?4n;`%vVz0&L*FIcgK*O@HGgHkY8D=o;mEy%3HbRT(fVVBrE6FZst^tH_^<6L!Z3s!SZ$i9!roIPLMF~skbJ0iDB;nOIh7~u7Mi@R zt=Rg=T=_)YcX+}jaUk*-)~v3Ao)W3t$NgmPs~Y;7K`KW*fOg`lBfei2g z@oEbnUm1SB#!6d0rw;up^)MnTTcibx%A&6nn)O&$;tX`IdyK#OX~K$)85_|SzN`kL z5}8&0*(~JrL~?7Fb=2FzOmpSCo4R+vull$6m9;IOhL`+_(_~*`rnEq%+w2$31Bd8q zg!lzYR&-)cRf}k^%6iyg9$Y3Gx=!sd6Hhz0!#Vp=B;J?F;5R4;sD)!ZHR4J`)*wR- z4C_N>Lg1dWzG1A2&Lia`nDXMc*1=;PoxP%|qt2q$|0wG02 z1I6fh=r?%ag&!5idE0J7>`(x^|HMCVMr%X>unuX+)_7OaIk&yU+4|f_8Pk1X367P-7Uy>;yF`R|O)#%d}3!f=751X`QkXVf6 z8VkeF8Cd0Dgp)~nE`PYYAL3a8Dk(GJ!g<4An{ZRa!k0<5IIMx1@M7U8hfd&S$Y1;H zj+1@=%PsL55n5YI5yi*{|DpQXLk7VxF%UW8oZK`_zH?;?myehIqnN=J^X0$-`JNc- z?jPN+KTp(w-f}#aMmvrh&4A*Oyp58$xHxaC{Ox`PUi%`sTVB-=rZoD9tTK2Qd=7(g zJ`N5GkK&>MWmY&+Gzx&bQ}W!!NMs8iV)1Gqsl{e`n-n@GlHl zWDRW=+p{PF&tW|C(%b>^7YY*iz?|rw01manYOyo&hTF4PF5u<%EWHHJW9?bG5S}aW zTnb{Q%3myK7+e*Ier(TUX%#3x8_$(RIUBph}o&Ip(_-VpuAj|E4H3M9=bq_r@4|{I7;HV$=XMV%}749a+l4a~8 z{KOjO2eF0t5ubM{nOycj=zX-#z;s#)6{fjQPWJor*l}9N=GaE=V&Ut6u^+h86(1om zK8o}iPeKs%(n2SK^gE<-26%8Y1c2RHx}XQyKq3q5Lph^xF8(oVwwNxYN9nh*}$m{OoDjfX!GqQX^D_*L+-l?irVVRgZ~(PTJ^94<&Xoig&4*+Bfff zA}E~$F+)X-LejYs;SL48T{hQsqNxk1&X{JQg#jcF0do&wZuNv4X ztXKaXFgChs2TV=4ESagZgsG~U(G&cN7iBQep*f1YC`(w?JzbKl>YPfyRnb=~LPM1f z&ZRq4QSl=bs#<)g=s;LF+tG0%+(V{;n_fzUa=~ff4~07YM+66ZsLBhA;pl>`GHymB zyEWbf&x`rjP{6Y>;1KE72d>Rc%+0|jOC4c@nJJBfYg)!XMcqomY2+{11;NTPl2UzP_ikJPdwbP%rvN*3;qkzw^2t)x@ z3%w{nT@wdDmMn!$gdt%*hwWLT0CY%u)+hk;MSIpLU{+qaJ!=#&D{rhlQ{}9$!k%dl zGT_=XHOl7!@(j)Lp$rcUqo&DUxLf&)!H$JsRCDo0V9KB{Z0=l84&T05;?AkFmhMn`_+Rq(c;`H2DS=5CUk3LV_2`Vj# zG~WnS_wj~tX6U0u|1eJHBctMq-PAoa9L6~?$NGF5AI9ma@XFot815UH17G#jIQBno z2}oTGis1!t9U-O^Ztp(Yd-K`n3pj9KsT=k{(~F#0URiWwM^e0BICA39xJ^b@%1Pn1 zv4c2rI5!M+Z((C!qOnO&YhxaV^buHH!^)k=j>G#^@+mPj?-*__(qaA0*m1~#!I+K# zet-OuOpGl^M_B|Vq{SSj2ZJ>lpnCvXi(QIz&@S~Dtv4a(va)`6Tql5noC+=0g_p{D zEK4|ehf4cZ)r=Y&=9`=D;qpZNdnJ*r;VoZ=m(*iX;)iBj1MWfFZT23;RL%i*6`DeA zvi2~lTWRz(C?|RSi(<@j4{J^Gh=_`a7`qu%AxOax_zs%_QLMl2Au_>V)Cj_$E{D@k zFswoZkwsSBFE0A3zAuMLnVV0;D^|J@Fe;!%{tn55HoWx``zAN?#)WJImdm0I8(G78 zCrUjHrspVJV=~NTW2H#?g^k@?Cx5QTA3CYD*dV^3J?)DhB#pj}eSs#&CTrvw0U&E> z!PH^AT*R(c{V?ot>W|3nxQV|C@C#kxm^-}ad4WaGqpUAW|6?4T>n=Hg{g0cnu$}@g zKO%b8yZu=;H9s5e#_p3e+RU3KaPi+4HOs=hnBYG0r7@)_b~1`f0#rJ3Y$c|>l=t0w zF|8OJ?3|&@>7D(d3+ zc|R6I5}w88qnVF~QYjtQwIDFMD>^{dvkY*+k%Kv*tW_a)C24L8J1L6&^B!r%p&4(m zG76tUsR5mFe*`6QJtX#o#{^f$H~oYc=noZ2>|x!E*val?O>)Q^|+;YbN|B6Le4ID zJU!a^t5WB>X8ohDRG_N<(JRN66mB1LY&&INU^ zgn8XDt`TwFng%LQ22*i6QM=X+p$3|ohKXBu zxI7AKy{Sc}`Vg4QXS`n}f3bcn@PXw>nY-u-dUH<8xB@|!E@iNu?tWs&P0=F4T-i)T zY6ikx?xnURRgh`1RV@~Prl^lF_E1sv<3Dl2)eWdU@&AojB>Q$h;phzs;jz*pxT7+} zeUk^A<^)ZdEB|97jE17vqmzOhVxE&bAS`atHcu9GX*Y5*E-<-K8#!GX@d%U+R$ciB z51`ToH##6pvGhRoa%qxBKl9&U#p>K`>~^Oz3`HN1mTbLDYxHW)U0Rn;8)MDgvX^YUR(& z8vb$S%O7}@d~)iHLoALMu#_=ZxbVHul;7p`DVRP^6+A8$NBZu?95X4M2SO~r35yjaUcHijdAc%{RI z%R){+qQ~u8KOr|&y4u9tsuoz7VE5@Yt)y}*=3b8jz*rDhy;V)eZ+UyuZdhI^sjuxH zSyHlPP05n2y-F(AH!E$nf-bi}ECCa4sj?4DFLS^Pf!>?GE>A7oXL|kZQs~?y)2m$C z(Da=D9lZ-zjwuQ|0c%7uglCOq*|5gZt&rrhS8Oh(?})nj<%DbRV!&M+ zyHj52N-&pnW{PR2@AZNP4!S`tgraj}VUf#`k9A48G@)*EIy+Ql(N}HR>|xhr%t+Gj-d~N) zH#;vrQ)cI+60K-=33e;ml5{C_C+!yRdC38tGuViU3c5|`LxGaxZc!g`~( zv`RUZ9KN55E3qBoJ~M)(4ZqKX-|oWt?n?T?CMPi$pVSjOg?-y(a{j<+#kiYa@ zo*!XUfHtrizf7)y|93drrX!?>b0oN*{z}|W58vMz295t^bb&&0!iDdTJe68ODADb0 zj45x+@KaK_YGk)lqRp3`;v%v>1n!kNYq#ODYs;FF^vCN%$2YL7;9NFkP z_*wUzdx+9?<0#NI4vi;nqz}*&y7?x^EY+R)Agvhp+mFP)(jYEFHplf1Ww}*wi@Qo% zC6-Cb!i6hGo&ffK!HI@keg^}~!rUyt$P8-$n+P=-OXRrwoC@F1%=@&^tiD_>8-Zc9 zl6U4$SRqnfJraaoNJ10zIeqhH>*1S^XaJKotS7CQ`K;kz$Ns{CTs|}J`cal+?r|wn zRq?&*gECOw;slhz1J?&XJzVV*2FOK12RZi`77)g+_pK+taUX5(N{$LI-DiUoY)_g( zEg1JpxmCmZF1O3e%BfF&W1w9aqyvb-e|NjUuS{Ut`5+eQfn#Map^|j*%1StRxb@B? zs*Fyz*x2Z~s0ASC5jXO_(1aakG&`Iv4p99`KuhjMysX1E4&h`L9L`Bd8*RtEY40B)B0;Ot zxeXpbwU^Y)E4}fMCQ31FOYHy8Ssq7O%tX2Jgz-V~VhDD;n zdAgSe{m&QCRas`Pu0!di>UG$hKz{zlQXHJ&CrSEBIBhFcph-eF$ha)Du&{XQ_`H*g zE9!@gx~|kY2^$4##_U%-wP)9GeJ#)3Y*`aVToguJ6mC{qHy37g*t4Gd7a@%@=f|~b ze8SJq&c*+y$(x z(kD_=2zrKq9?*u0W8>+?5SPmgo2J*hV(Zw@?vyO7$$`i5TE)gA9o#tIiBdbaFAe+!n6V&vT^LIjd`vm12Q&NeP10<^g;Sc|INLp+R zNp^bgB1X;W0%(Jt5K)4$+ibS+gx1S&=ZA=HX@=LCLL-SAAOueZ z*S5yL$A)gc8BK<<6Bou#-2U+nhN%Wbf;FHI!}y5Sdyq;gENrfnO|QY1qkQhj>uD;D zy@Z%SDhQcA!>{2B0-iGBJq#MS``4(3IAE zp&r(2a!JBWK(i$~HiImn1EB{rWRZphF%KOUG}6h>5}c&;Qcs6edR!Wd^D0=n(^hU5 znp11PmHnj#?@OJwSP9I$dK2UXI8Ei3*!g0kbmLBX_a{viJF}09jytrE0YYc&GBHzj zE08@r?6heXc1kd*=3we|vNPhH47w=i40kpuZ?;Bc1BOU2rI`^|3h=Ysi|*x+J%syy za!LFG!HfMtE}V9w<~5;*y_QD?q;pBs143ihiPx)*wPii=O`Cx0cUN3QJotaImCsRc zmC#siiR?C3OU&V=$ZH%lOq$|37pP=KsM4RnNP!uQw*!kL6);ny%zzF*C*nuBknk|u z0w-{$phe2Usj?<981!(S2Y`9Y94CUw4eAlvy<-M!fTMgC<%4R5z$f4DefXUUh|Al| z0PAJajvO?gOWvududO42e$|yA7Xgcbqj?=MmAn4yVaYcb=ei*ccF2A>=J8i{sA@KL+4LB}ZQO6G ze^cDtu_*j9xJ{cnB=7VvU8%S$k&BbQX}6?l=UeaU;)cjIu;}T@+!j6YEgkS_2Qn}U zNFRbg#7b#6HrPpn?$Pso>q%K6es8r_zNPf=BMjRa6w{cU>?8N|dv`2+rMa{1>gC*| z#j4d$`zp_1Gcfv7d}^GE4cumJwet_aaXlQYPJlii|<3*l-#PYp@t}g#J^E>jRNx(ak(OfDI~REi_VE!|k8vT?$y_U!=7RB6YZ8oq`-n0A<1WJZ&D;`m zvimC;#`sEwoo3r*LB^j^;NFUu=P{m=ei>*vD)WcC22mq>iu7WkpPiUy=(bBi|Gpmm zSw8ynJo*n)GDfu)`k%bXuejY6){`)d(Lwq*H5100D`J%*!lYBlKS+NL=|_H!+{lZ5 zJ@%7?T&o{8x!$4G--1O7$hEsimlrB9GtcRM;Lp3j&dOn97i;mpEFSSbb8wozY%6uN zYbJHzQwL2TarBugVjah{?^V!K3P zM=;t7J{?Q=cd|OH{PA~0e%rxPbH{FW3J&-1ILz>Ic!0;@!Ahtku{hZs101$cm<#Wb ztfAO;VShe>PWHAN&4D$+$g;?xlU^vtjnEIuEp?QRwQ9CW{uZtN7_I(Etv(~Q4RctM zc$q)kX9oBL2se?O$#EM>FuUvYs+!Q`lNqGbtBAZSIDpc;*W<5k8}tAqgl&Vc{VkJ{ z)iyvOYt5dg3Mw|b_>5hSmK=GiHT@iStqj0xIs{fFRXCZOTLt3B;___G<_I){CL@JRe zqDIU+b$OfUvCkQ^$IXaaw%Iwe$eR}_VQHcj4T9BjNRuHs+wOSIO$tR$eY~NsV$UL> z5!ef8u#vBWl(X3pLvesWceR`ljHbc<-K@tv&j!2R$|_KmdU#glO-(tDer!dv%=Cvt zbhOv8_IIlNor%9N@zt}~TdVU}Ea4%rsmEu$CmP>p$TJTA@GtJqoB8+^)`D!ew>`TYkQ zYxRH7%5-Dx18&FY#@fC&aQVG9_L{uHX(F^-3JGr%0@Gi*k4%DS>1&+#Q1|H5+*s?s zchH(-+G$xg5!+asD$V*g)}#g4n6wbzSX%^X>BgG#at*n!7za~-PYy@PWy$5^c>fh% z;(SZ&B_6DaU!2#EpaBLdRuD*(OPjM$uiMRF845$U;PuPfuLs(`23m!wtRy;)=8jUl z>bF?t_v^LQT@@6ldac3U<|b48KIlrKy=tK83d+}3%LsbdK$~PcDSjcE5Iea~ zt|zFufi`dtDsf+%kmrt7VJuLX)!3D2?;2>lf~>}t1U+k@PlGoOOO1CKY);_D;hHf( zyTL%0D=4fYypy1z2CCJogL|01*-72L2AifZBjhxqbuv(yf&#kCG+3^}jI}M-0qvJD z%C*beh=_KM7rBJO=<7{J~@wzaMz{X6X2Zw%c$4uJ;t z_r`K-3j;s@f#0YAMPY9$J`lPUw}a&d2$CO}!`8GchP1_3;pn(9gLbD&&Mh}JEJI2w z0fHz6ACw#aW};3go@?fEy%|o}q0SQ7AUP%42Azs^a+G;cmX4rhZ;!;Qvj^)0x=_Kb zM&v%^mlSRt|5CVq8P+T&fK-8XLps+)=pJAk4+zt#%Kd3bXt#)YV6n#@>>GBn1NPb) zDM{?XPADB=uX0f>B!}&ReHkk{={L$TC5)^K-}FXSC-bd4EplD;t3*B@&~%*aT}RuT zAwJGx%oPKLnX?o7BG)bb)U;F_Q)>vcVGGxG+`53z)ERg|^7A09z9YL*R&AG&M~Fd$ z!|VWT7c=mH)w<0dj7JjOsB&8wA(oTgUz&u(s(ek(lrR8`C=dL?0d^!v`)(wq#WOgKH~3~>MDf_c zHNy_=Q9&(L77dWvvcoGXYVgeexba+$jpwoO`HO1sqDzf?9=4wAzSnVQ2`Ib*ExRY- zC5H663U54$LSk-#yj>OBEKADXhYJoPLbieQ;GoxvyL}Kk=VeGEi7)Xc`lo}L0EHs! zyN7ZWWYUHLaWnHY_{A1yKA*u?vHXRL$nN|H1!J+KJF(qHI7ZkHqdhLqW)fVuDm3{y zEK5{1t1LQolNjN6u2QU+M4tIyqJ~*#{312Li*peO)fCX8(3_ZzfZ4+u7Drg0%Y54k zKEMPg*S5kBCw<~cEl?NK`TQH61=*AdI(!JXjEa+^fulU~AIJReHRfNvv1M|)1QGye z#n3gbd1erFypfm*B)9M6-|MIG&3cj)4P&}8061l+0RmVXn(|*#h|qI3;SHxMATrG_ zTC&jfeO+CJ>++&#iJ-Zuh7q6#%R}(Vv&fP@+FMmgAO`m;f;99#h;*pk;YX812%EiO zI{O^-2ccx(9i(_bF?Yb0)b$EC`!)PNvQv=%CPZ`K>b#oat+J1ouZc#ZBI6;r@HsNsV6!aLo&iX3P;?w@jq9NBClAWUFT zIF}NfOQK*F`E)Os*K{ww&6`D1bNDpjHjYz)c}NN=!zii3len z;>9>doa!$p0WS=rM&!eCgE;(ieCpsY=Ms+F3o~?5>F#YAs-*I;Y2u%$(`mwyZ7_Ah zP-45UovxitH=vgpsBq(eO{3p(BVUrie?hy1wE`-Q?Tk`m~V zLv{S-=n@6CSHwI;ge4X!bCCl?Xk1_31Hj_SqNxgeP*y;?|8Cj?SwE8CL}1~el|{!X#_n3%yIR|D_BOR}zhlRWmX1pN;a=Fw0v@Rg z)(BHWOB`Aro7qsAxc~oq8(r?P>`My&$y-JExc_T|h;al{DDi!5A;ViQzguD52!ock zN_*ZH4#z1FYq~@{LJ{**(~mMrKYzFnok02}Ed||u66HS>spMyqA81On z3DX}Cdq%vHmozY*hj?}KF|@FG7n{4wq}$29_BK*!b8x3!j_hXGIv3*TK ziQTJBiO2sa8d@ri#BB?{DV6(oP7$z6ftw z7hdvLuW(j^5ERE5$5R{@qfA=P&;?-?qaub;%P&V%RDYRWYYxcw3#|9L`-0Yx%!>`PhmC@<6g!OeBh@M(DZ7rE7ZMpJ4V=!H(T z!59I+Lo}GkO#J-s`q)RZmhoZ@_(Z&2cPT<*E^oNcJRq~-C-l$5@+Zu$?W7-qtBGV} z!S6o@cr)Jlw{cSJ{-*>rEWmOGgKA$q-Pg+(EM%8#EMJfpLD_B!SL3~-H&wr~17h0b z9mSa~9g^v==!IpZ&+YN5Mv7S!733w^0N%JsU*{f^!Ajuk$V8aMAmLI5gO=&TyTP39 z^^?5-N|xc<-SR8hX5dX{ixE1_-PU$TXL-8b9`}8W+~eMt@haL9J%VTnrP;LjU(gyR zBf0L;a@twW0!l^&T`J?Pb<=#+!qo{XBdt6zo@HG278-L+TmflSF zV$(OYJC=jbRKoC*WhpqgH7}vi3)S_MGGgWQOZ?|3yye~ssexfHWdzOXfW#l}Yio76 zw}x+{fq8Ru<|@8qnl0B7B)>Xb_{Eq$VO|OqnORGyp6b~HWBLJmR2F4@OSjk-=MP{F z!4#e_JMfq8LBlY2{Dwmj#$8R6dPiab6Q&J(vUkAM-V4%FuJ#JK-fHi?->}t#;)erR zH!KO!97Yc$wXTVsB2#Hy;=TXhpy1QE@}XI{H>w=c`%(LlZyl{yPqv?!;#JAKA=VCV zSQc(~!w>hAlhC~$_2#UJ{)PPY(9O-*8}JmL5SA%FglE5_S%op76*T zw2Z-@3kaAyfVv?}DC^$5(ldRUDn5O^F=_75Y|kB;{;{|EY*e}z#G^J^tTvkMm9Xhr zS!j>G2t=IB&Q-KZnbTQU7|O@t?5O25x)-p8E?x-cm61a}9Sd{S;vfLEIR0?^f1(yA zcHK0K>$PKxd*CbT9!oZ~I0|;s@(Q$q$U)3){zbA>0dpHbb1Me5|EeTAJ21D6e}4;A z#Je~YftjB-xwOrN!=*{TxecJX6(`KCzt7x`Bn6+khxUbuAQ=fBIAI?U(?(s)=&1fz zO=6z*c`RnAjIf&nmLy;QU5L>1Go1Q?A?Y4mMd1aZ$&Uhx$?Nd4moVt0g=Q=ZEnN3% zE^!_7iMm~7B@pM}j%6*CPvBqVDL3D@cg5BVMjuh?oQhQLB@^;Ol@UOu0aUs#@=^b| zFm%&))Q4Z=dWY^>f&+1*7fu6CLFlG0Hc;aCw_=!!;n4gClA+B8Pey~QZt{#dg)BQHH`oMO zo*esB8hSH^3)FcVM(kkwi(A?fxragJxm$XupU$PT%x3^JmpozInlHSWEl*lb6JPcc z{z;3Shwfklq7=r6AqH=S-03qU+Nst*ll9LR#pp;cdcHOo&+xp^4OqKJR~*4TX8wbo z8J6yjA8>i_P<&O!Uv&Amew*a-OCO78Fb9VDzKo%PD=`doDyv5HgYY{&utZwC%mR!tbLo-o0kj?-MIwa z>BtvhmTCC0JDM$Ei?~;0dG4~xtrv{?32wLG0@fOTJxyx6agWNa1>-X+w-$yTSW>qX zACP%99L@ah)vJh2?}NS%Kr0fN}eMfqY|>`UUa8Q9!Z=vq3T;$kuHcAb3uGc zHD6%fh+%!p+VGM;Fj=gnx%I$-4yprf$f7%43rBS)^G<1lgL}MjPF2nR*q9d zQW1JItc8{WS?Yl+QeRxRUYUT~DXyFDcA74hd9eOD^#q87E8ME}a5Q~jem=C3*@u57 z*G$aE5vS(i$|bOzeZ!U4XQYqbebVulUft!$(Jd-&XkIv~Rk(gBT+sN>mc5bgtm%~2 zOb^1D5jBu6eJ<>0DCJv5`Iccel0l-wPlOJNNffy3E|C6LS^{QwIfbVkK` z@(c$}ijKUFQ3W%Y*)^EK%)vd!UD(P(iHaV`)Ov!Vryxur<&fF<2a!xQ@lw7X4hFHU z!Z@XJ87jbiI%`ynq7g1+Vwu_LzGSq8F!1n@v-m7(2PEaVRbKG&20uvDpshL5j5njF zU(vC#FNQ!k8yPsEvNH6Fq04X~D6R;gVK}`}6@>!(ajM9K*vXRh&G`dj;95&`$SxqT z+b)Tia1=$sNrlty%Jno;#-lJHUBo%OtNJ?hL;5<}1bH8hD!l{6E!Q$E!I`Qyd&RCr zXTi>hn>QF{GK>#W7|MYNHu8iCa?);n4)%i`+H>*89eg}Wrh5j}K>wFc!t=sYrpb$HHrK8*~8RJVLRy=f`J-DYA^tzJ@}0u zO|nDQX9dvSzl04DO?scSmbv9SqIsQ8rey!|p;Z?B_z8p)nk;#mikM!$M?Qj-^oK@T zeUNnqKGh*%V;26VxyJ~P@DyaK08EaSvI!rzvt(Hf>U&bx1~A9z^^2T2D5<)&?aL=>*XpNQL&VpZ%K1pghhFqFtH_tw`oG zo=9Xx`k)|MK`OL!0_Gwjad!{s{f}!>@HQb}E~0>Ef@n)qp}j6!ARdv})Jt>61<|6Z z(6)Tx7m3*Pi9xhMsnDX*oxRqCw>CkvcB#+?eeQ1!;W5^qG6N#{zC49UIwrUFKoITe zRA?JMOKR=XAlleeXf34UdAwoMB+V@dqV-ONw)ZA~Ypsa(N1Fg|ty7`h8W4#nU}+HT z!>dz>WH;B}n%HDCh&C$~+T#J66yq8cL>rb0ty7@CiAdT7(T+@o);t;QdpnnGPGQSc zDR^5O=mFB&(?PVFRA^5nqm2!sMN*-a26}*)a_=D88L7~A4H%c`t+fvg``;gkd;S<8 z`gM59^tHR?(>?Fv)kpVCx6Cn7-SgcGbbUeGb3WYj>MJRrgnNGKQ@`G&+3BqVR`!Ts z=opmmx#wL2<|3YNND%GHRA~DJWFzL%F^G0dDzyB7m5Bm>_TnHN4C=A{rXwDQej7uk zZ1D3YJ?MoXT5T${p8`Edh^z>r-JS~Vj=H4QN`h#EQ=wh_yB|&b?4Cii4yn)<$tsiQ zR1kaM`@?p8-@3wvD^iGLMKanWLA2*np?#K2Z)z4c;<;kg?wjr$hmReQ1?M_pL;K z9lbaEDv;8(@kQJ%a2(4BL-EWSELt?X5SdmCQG+RN@xQC&-7B9e2j z=i3oT(R8owf?wmX_mG&;Hi$=`qaX0y(Ggmh{^r}A(t0+#4l#IVy>DZ5OZToRoHD(U zJ`b>F?$kg2SMToC@n_5@hy7mf-g7^s?$8N;*SpcR z0BrsdfcJ0SQ15Pg2fxN_h}F9vjQ*kC{nsma+?wU0zF&T=cYmG=jM(eH)w|2*;MZ%| z^l&dn{^T3!UD5I`agy9S3&2@{gyW1`ng1;k_gtDSvq{{a4<4~#4`&!V|IpujvY=Eb zvWzNt1y$G(5~@A!Ohr}f7UI6PRR)VE`LVj~XwXXUs3!}9NR+FAW3maN!luUKRB zZu1J72{l%}x@q*r7FfB)>TB~4<(sm7({G&nPag8rtNM@YD|ST3p!kyDc{_#2TNv$? z3-TAczo7vJ;k3X4G1qfyXt6!`PdK(BK~=DPY{DTsr6*z0%dKD#-{{SceVm%!IKCBZ z*qJ@FMR%bW%mZ`?7+T`dB78R%J#EjuNPWHJAjXF1pZxWcznQkw8zft z@0c1M$M4=4JazkV`Nc+Afgpd4)gQN~eu4HI+VkVHJn=TP*LK|+C@9!|tliN&g~!_; z=9O!J?;NvJeDa^dU%rr_szH5MHZ-UpJR#2oRxk*U+w^y>m~u8-dQ*xzoVsGtPO zd)*_M&tV>)f%2YONJf6F%jSmk#vbs*=#dxXCvNU!}dU-*kx zE;W3$M}Dw<@)^|6{oi>NS%azS%ZV+l^NI!F$#Uzz!7G@mK9&#ar|A2CR{mXFP~?e5 z{t7(}``45ww|k{h!cYGH2yfX4eq-LPcv75GT zH10~|QVzbihL1cmTTxdrxPamAf0r*gOBQf?aAl*Iv&dY`BJ-EIThEX@vI{$40(l#= z2@1l6$B+JRIMSi+v0(cX(0(!7$3_JIvG%boCHt>Pcd5oe!6)p7aS0yVCpp{^0jY9N z7VGxXov^dRU3q3a&6dC3X9v7f(YUvU??I^Tz`k}cW_6cyRtF-(B=TkwImxH-AiXDo z-dxg~LwZ4p$_rAWydt1?+i?MUA(?W{^~SPQ-Gy~a&}!Y|Y!Y`LA3qw|Cmrfu^_mQ} zSBUl?;}P6k;y>12C$cQC*l70nW^=E zBI}1*ef9h052nT@HrFiaETR6(*z(?VP}y4c*F(ND((zgp0&))WZf@Qwz$;v_|dqNv_sto zo^1IyXg`hD-x;Bcul^?w`bYIQ-XBV({7^@l>X*|h%9I6ns*8{p^j1OEv>p_?D4 zgQ(n4Mx9_cod2j!LX+W?(@lH`8mI*D?qfSV`$#uUn zQRLH=70{Kz;mP*8Z0=U&)k=lll>zp}Y2>P}m-qTL2I>m?=F7{Lxy`^^tfzUep)iNg z8lE^T*rM!~gClpV*@*eCNV_KMt8xF;M(mqHgz)_Ss{>nU z%zxpq;Rg7r5fCSI1(~WpzL>;^Jv~kJ>uH)jh@Nz~fS%mvyJ|PbxFSpSmPLo5MYIf| z7eMGembujjKj+Yl_!@Co$naD0=*F)=(z z=p91uYi9*<1WDKffi|Yq?GFO4^N(qFkU+->4AR%AJ-A#C^wEd@3w|hEv}pElJz8vH z|82azA&s}!>i@F6@r}24&wfqj?^x(NCwaU+loHGjN8rylV z#YgM+sIs@HvVW?t&Zxf;eZ9Hw|0O@L-xT}|V;hb0)406mrIuHE)9P>B|FC|_OZ<;t zBM;|*gU0+%a<8-e0z1owX5tuidA~`fhxDopmtVi^n4q{vYPABR3EP&Mgeq z(jPHv4ZB^_t(qX$8F9^@I3qNF;*2E8I8rOM;*6+mbPtW#>0~$~i=}Q{#W_HvWxrk42Mn)iY&Et;hGxkdi4*De~o&HE?<3Y1OzwR0Lc(tt$jx@T&=z|;B zN?ZCMuVsH^h#{}z1m{wmMmtCj%P)gSH{_E8RGM8kM4U0swm@ieKz1b__+q(vANSHy z%#V<_8GYNHUoYE5Til-ifltcHpx1PBBy~Tvh3`em^OJTd*fKrM3S7+>xo8hC#g5Fc z&jtNpC!4QFoJkVF&x8H!(kT{ScxfvP!A3)H9aA7;D-!SS4x-J8Oi34$Xb%a|{Ps1D z_EY{!`{(}8+8_Ow+JASq|5g7#+VwB>KhF01WBfBX{{HoqUL5~S8UG{w?PKU0Z0Lmr zFyy8cK2JlJ@8XclDhodQcksrg&Hbsi$Gh0yo~}Q%$#3J>`2U387X796zf6s<{Zl~i z7W~yCNpHv@*B`8X=tG;=g2ZXM#8k~z9*H=uI6rsr##f@M=r76F?7!6CpF73Z-?qoQ zC4Jboewi3&`)&JIT>_M^h=0|U702x_Ol-UUj}m?LKZg(A?m+!*%jYJkKk8q#DxZDX za$EA*c7K-bNuw`nH4XJ#CH`y+u`^)-N@r^s=rO^dtK8hF#+rueSBcA|pym z`XrN0?2tYwYuVrOum6ZIpe|R9c``O`>dw&d>epV!%5}WlyB}w(ivxi)_iOep7=*aj ze=ch7&zKpb(+z)yD?Z#4Ooj<_hGw}zvEq?WTMiOgM65IJ`zD*^p&wZu$L7xtAX%M9 z=lcDb+}QRp$AvG=`-yt(QgsTpci{Pr!oQ)(!CpDZm1#X1z`UL&g0*|%XvkUr)Dp zVyki3*X{8m{0!K)*)MDR!jB?&QTsMOc}MxN&Gsm7D&CMcXWMIRJYr8X|M%@VvyHwj z^{-*)9qnH}_zB}y4Cesrtx#;b-a3r_g81j`pN<*(SGrn>+nM~15tfUtX6s;La7WtU z<}w8t^a!2vH==bl-3nZ7cXHJNx)pc09Omb*?agn39ADz2&6s|Zw%n<4p&&r{zwvFw z)Z|~}0~nS`hS_?*E;MwtVQTZ6D|gz#`OP`aW&1)eZdj0B&;iL#^;!>6Foull z#)buky^`3@>88Y-ZC3=lvir{mnYM6>zATYq9S zTc0n`en5{z*I((DaK3H_$R_hkrKoM=vrcc|Blg2J7=)s&1YIL{118--NcONhCQEj_CiR;i zqB{#(gWuk?sZX3YH~rwX2T&A1FebiCr~dA&e~wM~=jqLk*o*HhHe{LI-$u`B8gKZx z=nwR6`|ID^?{E0w@0#_{-@mr!SH-A+ZJ0ff{z36HfreCwIs>)^eHcGmFTd}1ut|&a zt2Xfc^S{M+*N|B@fNpn@Iehq=GTMc+ug@LWh$ zOY+#ZKQY=bk6=|@zOj{?sDGA7lw$p}miaT>&!wARe%kckoQ_7XWJ-(dE&&De->SC& zg*N;*A3hQK+_&+s(x(_DJ>%CpeLnwX2k7JK*YH0hh?zq6)2nTLbBZ6oIQ7j5ME0-f zo45X3d}se9d}sW;WB7)Da`E)jvu*xcX85(le+k6mFY(`87oBGF?KtGqPp{VbFaM{% z!hgNPu3-E{{`-=*tF>6D=hgWU*Z|N}`HF(D3;s5Li zJ?M^RiaY8%K6`V7I?dLz;@WS@4c6+qR+>1KwyvcfrqHcM-As7)64KLMr>7lI8!QgS3KNR#d$UheKNADn4|HEG(jK;bXw-|pcrn_Ry2;}h5XbhG&G z#uqv>F}_GJj_K@7M*|!hThE5?l5B%7Tm>H{Q{$PJeYYd?=Q!r4C$HW9{1j*;IO7g! zWq$g1ptGI%X-S;((}QGw3h_8Qt!I4G)8VhjPEVIPcYF)#OlduSZ9>cIt+^z97SB)h zOI^YZHvG>UBe;`>ahoZdA+q8wi$M|#E@O3u-Zk0X`Dr3gSw%+azOHhjDwXJ5=3Q-_ z%hlHF%vLh-^HVwS%iw(8ji<4&4%HCce{||rd&UdfIzzCYV0dEx#s{0W9Cf){lEWe} zbO{Rs5y8Cp8z5Qb(#(fX>WufvyD@7FD2_Ql*Xa1!-MV9fy+$Ud*33X&8OO_`yOiZP z_EOfl@=STp-Agd|C@8$487R}ewcShZv+{;Mr(}h1_cB=91tTKRNBtp9hj|FQQw%Qj5v^lJ!(2As(h+*6i{ zM+Scsrl#@rZusgde#q_1Y5XPk{DLO#h0(Iq;+~6>adJ;KfI*$_ zE>kXxT!ifO-cK0qzK!TeA7L~*V8GKQd3=F@&htDy^!0DzNdMUOXdt8Y+;}9}zH^Wl zDPnCUGuUojkTy>E?|0D`CJ~)^W8}0g$(OGpFpFGeD-wGGqm9=$58qs?Jh1b1OKG>3sOE^Lw?Hf?!MRPN7@z?#W@c^Lie+D3n0 zq7{l${>zY;a-Ldq5lclP6;ubL)*KXp@22n!)dl6E3sP(T4ccn?mqe}xVEjiy#grrT zA=tB-egUuHlL2+**uxqbjOv#GInXU5Q7#A35hGjDFVu$;9l=G;PA@mpFFw7o`6Z8y ziPbNW7>gCL`9#0qcI81Lg1%aBZ6Wv0$cEerlG~@_id)G2G;b4K8Gal|Gfj7D3%M`h zrK8io!eD3MmrwpvXZ)%B+`ai4GR2*$KxO_HULge&3A0E~H8dnQ%6q@V5c^$t9-xV!nB3V$_Im(LflYyRjj zD4GxhFi%8LUGgO;^Cc*wV&9BD50X=3_#a~Fqt9!g50ng)e@&sVwy5!7Zm>>#`ce3S zZ>jVuFHEgDFd_tW?CJ)T^$M1yPM2Y*n^{ei>qbrnUr!G9n#IS|8eS=_VzEfTvxGjq zW->{gK1bgPE$VK*S)LZlQ?Fb3R5?^kFGOYL0|Km`FUhTv^qR$&Er|*G7Y!o%s$qL# zvQnUCh9R%$^TydQ!!z-(MoqTtD!^tqx5wrUAE?Z~uO@ql3`C@qcD}HMLeG%-!BN^C zq+uc1{Eja$n7tx{>GQ8Vx0tzc6yR|(H7xfY_3j-{V9_J>UNfg@4;oj7X<*mn&1%mV8&KMsb$pQ8nZoub?3vb zRWj=0)rwPtbxGgTcfvge_Muo|dshL8wRT>71{^-^a$KO0I*%S|)UtIyQ7*LJO}gV; z_Bm+Ok5smZoz&@aZ!sK&3-EUP{hO}+gL?)dh49ZJQZA!lgOV#NFS3utpl7^Sxz`&N zI1O;z2lxQ`2mFviM*m(bDvldam-OO*P{$Xi^?vqB-fxFbJS2TEp!T>Iqr_i}J=I_> z4%TgUR&aZDgOhiHbYsBo;_^K48M<+yb%W!RI$h!#(2X)rH=4=wkBWaA`fg`_URhWp zR^RRVs;fv0){?$Ep|f9C4e{u^*I)5h;MaG~L(Rb=(=y(eia4|V;Hk?+s%t4P1W$;7 zo2j{)PeHElypqwPzS|U+zIzWJi#B~H3KFD(c~pIu2_7zl0?UPAhQ7;>=)0lRcfqn= z1EB9tV>5N4;E)~qt_=E4)L&}N9~dIlcN;}wM9~H7ZdDccIMrUT*UfxNt)Y9ac})+h z0#xNzw^*Kf-8>(;V)Wpxi}5yCcfHWB*UfxtNe|M+icCk=Kif09FcpSCaaM&YvP0!3QcA<9VtwdP<%XI zIK}J17r)4-ON1eO^72>a2Oqvh_V&*Yc8;AN{P@ZLe15R=Uzs1wek0!b!Rf%bjrqY} zq1QvAPyF=i5KFI@KmMQ7tHWQR*J$`r@y(}p2gYsCD|Lo_PXhCmV%R#wz~N7z^Vdmm z>=67_I`~t5)E0^j-&@$_S$w-9Gz3$&t~>K*-SL~BLDK7kNqyvXZMwtf<)0?u;`euM zOQCPr31$cXuEe*LhfblPNrjs1gxc89w3l;Ua*DaL`yG{M7Fyo=r?woGKYBr(`NfG0 z=dl}OKOa<^{tq-dt@n?USv$Us6*!+r)V@lrv%>jepL(B#cTRh@w88oPLy*PuJ&91@ z(`mdqmW~LPr#sVM_Ix42Cy%K!Hc)9b^Dhv0TeI`D-j@=E)ag%(T4Q%=cSeso%x2~A z=1_MsFXR@78fk*l?h3sb2p&&1=glcIm#`~;ldgLIixTV}&j?Wk5`DMN~huv2j83`cr58 zD~lzh>mza<)20$+$@T;l241;`v0CaBr66 zO`rRFN4(CVdz?*IHu}|e;XQZ{!i3ypNpRkOji?4*e}b%*@+^~Dj6b{PbUjepO5-Df zs8hO>vO#>~eGd;7hq+k%U9q?mTn;6YVORv^W5&BF47WI=8P4l!-B0lTQYp9}uce-8 zN7a+ly%pROUEKM@>8iNzrMT}cxZC(Uc^S=c&n+?BM+}Hk@RGfZf|n{5_;x&TKcl^1 zk*v6%qp*tz^W%Q9LJrqb&ugjpaL;@7Pu0#CAhgr5g-?N>iYyrV@dJn>6#5Ap`!~I`^zNT~Qe&-gF?#vND zWB6YR03!Uz?YEFkXNrNUeV~I0y3j!D;Si%bD>X6!puPqgs~{l33Pam~Uv~q&%4ISy z5~&8bP61Zk!mTLtBep~NY2wievg)q*6QK7E^sM*Wz3fwi0cQ9<+FvfWG`UMv-P=%PyVm7gLCUq5-+hR)xBuWF{I1y-GwA{#E)UJ0zR z-;=qUqVqtQ{vnz8axIuiKD*7!{X*Hifdlq|4iQv>dNcgtq!lxwIWXm6k@m|Z5sS>D zD6*OXXD}LL zrU$??L3~JkjzXSM9d?#d3!8-Li?*0ow*G{ z&O1+4a$^4~u)u!9mV3$B6XZnI;=~Mxpo5&jR>-;hVj<^Ai-epfOTutn{c4zO)$njq zM4?`~Pg~?1?9D-P4#LOhg`EBRM#*_zs*&@e2|~_c9<^%Z?5B|ZMXjbk@S`vv$$7yq zE;$d8r0Nj6i6uW0T8FtHyfnC)E^kSW~AEdX_O7+0g z{(S zoF{J^!<|&!V!){Bru~2dry6LDM|Gl1Pv;N=+^zsrCLg8CbUF%PUASD;rd2lMKd9_` z?7mV3p5RfoQrS8KwDSN$fxEv)ndc1jZ|b=^f9IU}tDw?O2E?P%qW*9Q^dfdA_rZ62 zC!PR;PTk~?0csa@YZ6AV6ojQ>kdeD!FB>_bFRl%gj42b7IEeWCrIg1-3-UT}bd_ha zC8idQY94obhm10k8T{ewpUcnX$|^QYA;xr0w*)pleNAf3zmCU`x_xoKYii9x`HgE! zxhlM@+ZGhguG_hOAiktna}{6%5w0K)Rq~L`X9mEk%APF&NQ6({d|X08|Jrr^v7riG zHaUn`_%v1qmBjthWapGx64qvPX?~0rp)gmd=}VWf`;1Yk7X)VsXg~RV1%9V4*>C3P zZX<+CHzQZDH4m}NGWr*wI5XA4w}KW$-Bg}==@ET^%NwN3%czdTN|IZ*Td&p$Z!|UZu&~9vZj!k!=>v*WcfLbg83LoFf6_z@%eBs9 z*qET`0M97DN^y?(9tKTrnM?0UR*ljkmxj^<2?Wn+&a6L9@+cfx-3iSzX2puM*mtNC zRXF_NJbb=>pIfO9Wn!*Prt&SsiFzT;`DufaO7e+Vx}pckWGRuoG=4r?h{9DeCsTO9 z0va=-l5q2G%?T4q8Gec}T;0i0hP!iTzQk(4y#=(5yLqJ`yqDMJD1n_vuz5=p@|#$S zz_ycF9tQUWPo)FgN^@9g>hvB*2{Y!yoREv-WuA(s%;>tL!=T0*-GQ2m`f=KpcBxnG zOwRX;A-zs;Pl7Y-WY6(A3{_G$yah(2uV@-@61>$Q`e)o3{W9*fPr`3f#p^ZellcFP$zLSl_eq)7bpB^bh`*yQe^ta^; zY$0J$ePyEmnF24>f`=%z)gg^T^aD%Ce}S!ciSM|LNu(3~Q)4^P?*i+@DZQed$O%{{ z&Q)AqKSDaO(ASBR6m~sfF`ekDz)@PTS_{VAiL8I26QMv+FQNgioZmBw+mqr!fYqNF zBSie@aKY{GhFiQ``SFwSaOG3T6|oHXP?n!1qZaqOl;)JJOPMyGLy%s{q}F!BoL9XW z>rE??uSMux^?>=0H{VRc@%`G%ZK$q0F-nem6K$v-$`f+zN+d(+M}6nzw`&!)wmUn} z+|-mS@HPUWFSTHIm?12YoU5>WD<}xp=JW(GYg+GK3Oqs!e)O%h7z8Y5TJNq3`{6Kc zQF>6DGZMhuX}uE^h`k85_=FZLY<=Y1)%VW);T-&gjhvDV5*kqrJx^5C0QE|Vj;IEx z4vH~e!<7|ci=S3wrvkCG;!JqDWx-GH*nDI|DZ7obfk-|fIuKpj+dv$YD+BT3q0+kz z-*^XNCxy)-EM_3W7fHdPTJTLR7`M!Hd|YJa_!Ec*WTyD|C~np547VBD#J>*_+@=_A zty3Pf@=Tu=J{FJ6Ohc{+>G65tak@#P7XV3x5w&jKGE5?u=tJoT%wk?zRt#xoM~-&C zr8+L)IlHO|Lz~3{xul?aIJnjaw@EofwyqpQ{iIyT(PLY`9u57lU%Qk5R15Z-XA2xp zs$a;}HcShYlP*W-V;yXV#6M=kTS)`9*=VVAHUx8WHVs5JtjA_lmkqn!J-cpfx7_U7 zvE4GWF{A1!xr@2JE!zT^-#g=JGSS^8Vi1}vjuVTMKRx)nxGUb->$(2aZ|dYPQ(2)4ADKsfzmtcT#72Zt z-YPI1`9-D?78Y#FA0!iO_tsIO>UtbVK1gpD_Ug#b6!vQdk!o(NUQyt30z>KR94Xjc zjnzVh)mlNnv6`*GAzJWJEf{QF^I65sxAl=$&Hp~Mu{8A?A<@q!BD+T}Wh^^x|PQ{q_#cF=;Ij1sMP z$Uj5;&GL!7I5JA(eYO~l4>(uIQNNFnMc=WBMFO9Z(p7x1v9kZ6fM|Y)!XX|b2@85 zzj}LEfr|+YrRQkDAPT}4zfNJ3t)TQE;)_=*FiQ&_rUm2n#c#Ubc$wpAsxVho;YSJ0 zhXL#LgN$l#A0DOJ=i)HHD1?Vg=WpFx`mpG8FV)^s*cifMsJ2*vhik!US}<1oFaxCHJ(pqC0?yG}FmtQoyT|d;BbZ z?ZzYNp*Df;{kJWTmYQw%mZ`SwU%Mq(yFR=24SI(wkXIZ+R!KF?hcSE@~Qz(^ZCdjEmdpCuh*}?e1JZg!S0kJhr{CV$7Pw ziLq9C{V?eyI^H)E1)fW)&E6YPEgkos*8B6J;DV|S;HJI9`*0(r_BTW`JAY!=HCX#z zcqe&P6S>T(L8=bi@gqf#wm7<^1EYpOAV#EhmQ8l&Z>4m4F6W-4U{}e&7PVD5LR_ThHY`w*oIVYH`ymUTmN)pkt5Dz%Juc4WTr8RD4BP>8SB|fDCM!yCI%}Gi;BTV zKZx?6-kBT>br~A0{Uo@2<7vTmKTPZW_7IVbJ@#br<6mr|WR#(MbP}FW*oS+t15eu8 zcNu!jW#qXETtHyx_*=A~>66P8c8L`f+-l1(d$HMw%<<3BOh;%1g<3(}ZqsCZ?Yq7n z!gZSX$2L_5HHFqPUt9evT@U#Q4oY*T7pr564*0T1=jv%35;7mTtuu#mGJj=^!<@1E zK?yjWb~yaoH3)(SC`@cq9(nh$X(Wp9a> zfy>e9(CEk=^dD3E-E(A^KHrVhPCt9SSAlg@*h7THD6sDaOTh{)c#IZ|TY>G4FS?T^ zTRd!9sC^jmdu$(u^*8PtU}uvVPIjRhe7yoIF>EX3Q>eof=oF6;#6P%TWlw;30fzncZ&|hEt_p1?i?iaT!MKf24Z(# zC#EUv3c_MKF;0PJYQgZw()+kOQHzgpM^$m`wo4(H7EX0yaNA3=Q?isH95~{Eoxqr-o{Nv8>HBH#lH)aE58>O}V#I=!J#L`Bf;k1_SNQvB z`E8%joUI3Yp&ApAml`0ww=ftC3K#1{1BANtkLtMK>ffWLi2Er2ENo2=G)b4aTLhkG z{iX-(G;xe7s95Du1u#bpNpPpk^zX=Iuo6@S!TYt*3~G(;Q4UPo63c-dB}fOVAn~9m zsrUZYNZmDCNIexxHRyc9hh8yir?CEnVL9Ug>B30U*k7D21vTcb>rGP7!cjIeWAlhk zkX=1#{&052=ekK2VGEcuF}%H2q)vN`j*A>i#*%{6Gdd0SJP94AnBhQ_a|ABDrpm-C zTOSFf9M;doY<~*}rLH*U8|!3G#kDW%3#I@5fwz-g6t=6h)x4A221qB@68BKoHBvDC zP9AhSIvEO_eW3CBRTl0^+~#gF+~%=~s?osf2E!{}K7R?{(2 z1*T=93FrJbWWvM`f-)uqv3P+k@8f-6dB0B9YyiSIBf`VB;SMv{2G15^|(li#W)b8v2tl+;v@6 zYh;KcPZh8UKd07wh=)Ws`f zw`#$Cj$9)tj^UxgE?!S>`(|O>n7GVBXW~MYPD#^7n|p|(SEyNlMX>edtf*Ot>?OlM zbar~&)v|~9YxH9U5smqi8>q4g7feu{lGHfE0(9VA?R2J)x`D0OK#R7|IYTJ0yAm%E9aVrS+>n(W@GcflIJH#cNW^ zq6wdY;ztai-<|Q?LpQwTJ8NbyA!+MIRcfYSeu_Xec@!N#Q@OaH( zR&^zF%(24r)g1aNo@}r}pQ*fx#V&|cT)~R}h8(b}Yr;GEM)xdcJw~&JZ$%7wkDtRM zG&zt_=Al3p;)*GJ&Z51e`lI1<8}3*8h=lB~qE(C9c4WxIHz?V+Pzvf2U^n2nuha+m z{ha)U0$>oNI}hIDn^<$3D)B;aes}Uwijz;<^ZU!Jkd^Md7B6XAEdgA3mV=pF+dhNJ1~ zo<>`pX|V5p_6pJ%7Moz8r+lCj2^wmkGzCGp*x0;P0G(){2RFwywx7Yu6$Xm2*f}hg zV4#x}WHla6(1sV3FgJV`TjNTDov$#f@$=6SUtRSm#DM2?F=%3%l);P&v{S;<3 z=CRml1EnY^$fK;GzzGEP5zyxFE1RUoo^r|+F~;Bx=MaNUR~QgsvG3kQv0V&=eI*+i z9F8@9`1W~rdviElVL*h%9$>Mx2KsoT6f+$ENzhUOHHOa!3kZ#o#6tu$^v%(Dj-(N?u`wWyzP+j1u9}k6QOj*h#GT+$U ziB*8BcBh(#0t~p(sZcWed}2!GfK#YsdVA&*aj&xUy9Q?YpbgRqLDU`bKbA?~H!g|V z>%XxFU+DYrwO>dXqsi8l0If98SD(hx$$bOB*V-lCUKQde% zIO#8websD`{jjE3vQK|DhU{0Z0Ffr>`|$3ntb@wIBM2I5pgY$~bv_P0!C>PRW}}tH zV*45BXa#jP#(#kFvh5jV{9itaVi*dnd=16EFwhG=&>aM=G*Fihq?9#QLC_-xy5oHT z`5L?4VB-{KtkH$VCK>1`1r=(qzkd~=(FQtxozyte&=+yfGT5K*2`s3^9%QjY4D^bE ze8lQtu#mzG|9lqv_Gu-^ISTUOzs6u)73Sj4Vow=p!@EGFF3`AH_-;9q2;Uw2MJ(T~ zm$OIUyS+L^y|TkUFuu#|`Iq_b+*#ne``;0=2%@gIrzoagaUbvsdhpXy?f9Nr#%OW? zK_3`s?!TovA5ES&*o6u+nyh;n#TFRoPz70y4-+)gKv%Aft+Ci(XDQ5T+=<187%0^T zI^rdOPB735tEEP3EcZo#_A}7lZ^t&a?J4c``c(q6#-=Psu`djCzkmYArmRVr1Rd2$7{4jjQ80EscS5A2L6Nj67a@Uyk zap#)#g&%vJVQdnkc{P6a_z=^fbMV7?bmM2ZK+JhSlhvE#>9?D3O08g}ol+Yctm}9P zuA72uRMU+YSLyk*FSy_|byFJAtzD#h*En*UjAvOK$RvRCp2uZnN>{1w^R7}!FxMR0 z!Ej?mE*ypi>TGemo}H|dGXrukHa(${1I^v?^mit3sghwMb@@8z8M4B#S(bGy&S`oB ziIT~*@eNE-TaxRSx^+rS0Cnu!V9LW}^ui-j(!qfc2;mviI z?|>g7ozZ^;-Le>VcJZ)1{C4-_x5r6d{4g8|&gMGL0$ZjRzto!XQa`S~WnUu=dA|9hWfZGr3d7h6Lzt4{4a9-r0*N@rZ4dhh+nZVFIDR zWqlN5Y$0PuStz={Q8b5*1lceQo_xRF9a3^bBtr7-k7-i^Bg?p)E!#~NzE+o>&3B?k z$Tas!Mt2j2w1=!zGp%Jz5~GGGe9jeG;Q>-%N}41R?0|zE*Io=9yCJ2>Gc54%) zlby^+rqD9k-@v>Um;W^Ka+1xwoMf}po{nEbDPwNyPMD-qD`1jNW$_X?zP|DxxnLP$u}|uf-D}pQPQRHG zX3RipR|IQUhxf$H8VmMcBJajEqOCd*K7CF2eXa;0UCnhLs<9lti140!pp?tO;8X}Z zQ4R$TJyAI;%6QHfGbszUB;B1eCR17Aceo3~HKmdG;cU7d+VB@F8rhlMv0i-`jOfFB zo+g;ONqfFX>w-RHoshE{4f>=$Je(O3n#A?e{pI%%;EFgLiJNyLV`}VsiIh0|f}^n6 zw;y<%CLt^Mwm}9*`PMk?RX3l7YLfJ+IC3hY8A^GtQCW+x$r4f%SfVqZF@P$;H7dNJ zz(c)BKHEK@T#_ZEtk9P%0X?BC!5_|72fHkR422|fcUDUd6|FOw?J&lEk3;ao&Jgb` zzg5G@^&H$S9f%8$Ih36_l#^K#wsbTg%U@GNH`avPzNx>SkcWt}%#v>Tl=+4wT5kq- zVXJ``t41TUB}T?y^=PeH_3+>}tDY69npOI%+C{69-heyxV?^9os>I$6PbXuc9JXQl zp$7}4>|>tOe#c3@-|&je5Og~OvUA)LoP~*PAIHgIDLbrJ&+f(?){}bmuwH^RA@smm z4Cm?TuGs*sL=&K6nN*NDWFDn1^|1Tp2Miozq@+#Q&oqXh$&e$at+VssFG_l_gc%l8 zhjDN}jXlS-jcWEBwemmVnr!j`M!!bc6^yT%i;V9^LQrSF?#(JnE|hYg9M{3b;<Mtg@aQ-4!f_O0!rXmqf1?ek4D@UzFdp;h(+J0!uVXld1~~SwXV%j5nY0 z!`$O+%JA?ut%TE;@a_j|BA5Dmo(9wlJw{#x7x0_2%G8~j|(n)!v$;WtrD#1(+^O08tl7lG%EcX(D><-Ax z>~4c*4(~P?Ic}94S;&Ekuz!oP{4(@F4v=afRn}@5D4bo_G-n=UZQ`&2T{4-djb!Ji z=+{9kP&kybI@6fUvG7X@@gJ|*0JT3<256H6^QND()GNea9wM+O35#K}l?uFE3m&Nj zO^6>>*cn#Puhi=m*ij26YQeaL_=!n+?qU#c$9Q6Q(k{E(U?}nFvk|Y#54R75r(9E> zMw|oF^D&*NOPRrh;wYM~v9UQZLn+zrlG;la-bo_8_o@-;<8DHTc2a3Xn}Jst^4y@n zl^Uga@IyjDIy9|Fo9hFLGw6KIFV2Jl9pwZTSiG;N{Sj{a7ibe_YZHwR?wAx+qlvaz zd=wFBS#{m{b}Yee>uOwe{jX86zwZ?z*rJ1lU{`j+D1_3FHiVU4^$I(Suo$kYP++PS z+(`?@t-9t`u@8Z3^JLWPnM6kYgH^GeIJcv9;w=lQXTHYaN7`8QvB*!3#W^q8Se$>Lj75JS1zL16S|~%Erm)=zi(#mP6!<<&8wzfC zK*q_`)J_V!i!c=QtEq5?v{+Xj4VMa;I?2H%kg1;sxAR=wF487OXcJc%Zt=>& zRocWucILzR%;Gi4UOzWj_y5>my8k{|75Zuin>aw52)a#N>1pByw~1TWMAaCy+H@bO zYoQ)-IF$`$K1mjaiVgL+6}iI0xy}=b@0f&!oS}De5q`zS>!LfggZcg>dEXe`TNbU| zfUj-@9blkau)u^;kQQ#thwlX_$w2!l2s3oq4^PI}IL;lqE%LdBbwE+F*xfAlmVt0C z*YG1~5>dX+U4~Qu%U#U-?XsOMIbx##;O)rEl_c*7+;;lg?)=Dy#4Ic7BY)_H0r4^i$wR zsu`AQ!MK%A;RI1W*U4EBD4!LZqXYBNGQ;h&eFe7*wTS}5Enejl&?b&@n<(%!F~x1- zN^PP^mCx=w*u>q%(u+6bv=MsI-qXZhZWCSDL{$+6`lY*+y7Bg)FRDjgca<7K-O~K1 zD{|3ufU^)@#f7U#6z4Fs=d8L_Hv(rx-ygyEOZ0s>&8LGB2)fNc*ZXwPJM#gmHW1gp zQK3)1#~SP-pQ5>f#rhlQ9-pEaM$l0P+S-Dm+1+4vE3he=jx6@eEvoRYX+hC^Xs~k? z2D(w>y>cgtH5h1rf?8HIf5!*SA__zV9*RbGCS<ACb!eV@>+ZAX+RIdf& z)-?@9!r|d>h(9 z@0bv6#j%#Qg=igenfo2S{70`4U4izTT5LGulDv%`Av%}uFV*+15CxUfjv(k<1DO!{ z4CqM)8|4$QFXo}x0R}p#1p!Mm*w;P*yPd_Hxhf8i`#|Lcy=9=&eu#=J&Ic0oxPg}c zC)#5Og?JQm4OXi#lfBKiq1ZnR^y&A}8r@`eeYMZ zf6h@}-QbI#hl%KZ4}V~NwlU8Lx4k)KrNr#xxIIem8_&H^RQD{y2P@u(BG zLkX+GH|iowR^~LO2%ry$(+#+xK-|PR4)^BEdO^4*5+Y2)_R&q~<5$=OriOaFIbBv6 zU}}^o`_biIqVMJNLI4F-b!~<(>fC0aFEno0r@F2**dm45&@5!Ju?DJCkO;9WsX>FC zqA(DNn2%wxzZ)nCARIm{{TgFFz2O-UH6h$rA0+l9+=UMjp5KdQzrRiuz$^`8wrV%R zjdR{LP)7j;4wExUuwWNjFeyi}{Baw}$!Ri@Pv}V2?VuZY+ZZvDFU#>DH1Yd}s3fJj zO{B94IiGXN4px5(st-lQF|4845d#h(>Lv$ZO%MDblVbi`L zy4PUGDa>lTh{a|Z=nr4m^l=208t7aF1$AIM5H#FC>okVh$3{I3HeX?eg0pq_Cp|kLG$Hpg^p?u;5577`HCyo(q

;2hlL|}xa@ObtabM$KfI1D;d)!wU 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�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≶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

0LYi*ag6SSzms@GC-QPU`{tMs< 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ℜLn<9WuR@e5Y&g$XIq3U$9`p`1 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

e0Y1OpbfaVgC&hU$kCv0SRv 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
iQu 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%0D`=Hs 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

gMa74n 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%0DNO=Z7Amz9$!P1!} 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

qgo!1_s}|3=#G{dj)y}j2xA*n86RdIh7LK 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

X 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 z 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�p0ri3tszD2T(WuRnTYjOc~&7Eal4kZL(1OL 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

  • *E8mb>n=B`GyWioe3s$R7E(bQ1=kZ7oWNHkPG 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 MY&PHVU!3-T0qYzHDF6Tf literal 0 HcmV?d00001 diff --git a/common/api/protoc/include/google/protobuf/any.proto b/common/api/protoc/include/google/protobuf/any.proto new file mode 100644 index 000000000..c9be85416 --- /dev/null +++ b/common/api/protoc/include/google/protobuf/any.proto @@ -0,0 +1,155 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "github.com/golang/protobuf/ptypes/any"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "AnyProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// `Any` contains an arbitrary serialized protocol buffer message along with a +// URL that describes the type of the serialized message. +// +// Protobuf library provides support to pack/unpack Any values in the form +// of utility functions or additional generated methods of the Any type. +// +// Example 1: Pack and unpack a message in C++. +// +// Foo foo = ...; +// Any any; +// any.PackFrom(foo); +// ... +// if (any.UnpackTo(&foo)) { +// ... +// } +// +// Example 2: Pack and unpack a message in Java. +// +// Foo foo = ...; +// Any any = Any.pack(foo); +// ... +// if (any.is(Foo.class)) { +// foo = any.unpack(Foo.class); +// } +// +// Example 3: Pack and unpack a message in Python. +// +// foo = Foo(...) +// any = Any() +// any.Pack(foo) +// ... +// if any.Is(Foo.DESCRIPTOR): +// any.Unpack(foo) +// ... +// +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := ptypes.MarshalAny(foo) +// ... +// foo := &pb.Foo{} +// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// ... +// } +// +// The pack methods provided by protobuf library will by default use +// 'type.googleapis.com/full.type.name' as the type URL and the unpack +// methods only use the fully qualified type name after the last '/' +// in the type URL, for example "foo.bar.com/x/y.z" will yield type +// name "y.z". +// +// +// JSON +// ==== +// The JSON representation of an `Any` value uses the regular +// representation of the deserialized, embedded message, with an +// additional field `@type` which contains the type URL. Example: +// +// package google.profile; +// message Person { +// string first_name = 1; +// string last_name = 2; +// } +// +// { +// "@type": "type.googleapis.com/google.profile.Person", +// "firstName": , +// "lastName": +// } +// +// If the embedded message type is well-known and has a custom JSON +// representation, that representation will be embedded adding a field +// `value` which holds the custom JSON in addition to the `@type` +// field. Example (for message [google.protobuf.Duration][]): +// +// { +// "@type": "type.googleapis.com/google.protobuf.Duration", +// "value": "1.212s" +// } +// +message Any { + // A URL/resource name that uniquely identifies the type of the serialized + // protocol buffer message. This string must contain at least + // one "/" character. The last segment of the URL's path must represent + // the fully qualified name of the type (as in + // `path/google.protobuf.Duration`). The name should be in a canonical form + // (e.g., leading "." is not accepted). + // + // In practice, teams usually precompile into the binary all types that they + // expect it to use in the context of Any. However, for URLs which use the + // scheme `http`, `https`, or no scheme, one can optionally set up a type + // server that maps type URLs to message definitions as follows: + // + // * If no scheme is provided, `https` is assumed. + // * An HTTP GET on the URL must yield a [google.protobuf.Type][] + // value in binary format, or produce an error. + // * Applications are allowed to cache lookup results based on the + // URL, or have them precompiled into a binary to avoid any + // lookup. Therefore, binary compatibility needs to be preserved + // on changes to types. (Use versioned type names to manage + // breaking changes.) + // + // Note: this functionality is not currently available in the official + // protobuf release, and it is not used for type URLs beginning with + // type.googleapis.com. + // + // Schemes other than `http`, `https` (or the empty scheme) might be + // used with implementation specific semantics. + // + string type_url = 1; + + // Must be a valid serialized protocol buffer of the above specified type. + bytes value = 2; +} diff --git a/common/api/protoc/include/google/protobuf/api.proto b/common/api/protoc/include/google/protobuf/api.proto new file mode 100644 index 000000000..bd6beed3e --- /dev/null +++ b/common/api/protoc/include/google/protobuf/api.proto @@ -0,0 +1,210 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +import "google/protobuf/source_context.proto"; +import "google/protobuf/type.proto"; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "ApiProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option go_package = "google.golang.org/genproto/protobuf/api;api"; + +// Api is a light-weight descriptor for an API Interface. +// +// Interfaces are also described as "protocol buffer services" in some contexts, +// such as by the "service" keyword in a .proto file, but they are different +// from API Services, which represent a concrete implementation of an interface +// as opposed to simply a description of methods and bindings. They are also +// sometimes simply referred to as "APIs" in other contexts, such as the name of +// this message itself. See https://cloud.google.com/apis/design/glossary for +// detailed terminology. +message Api { + + // The fully qualified name of this interface, including package name + // followed by the interface's simple name. + string name = 1; + + // The methods of this interface, in unspecified order. + repeated Method methods = 2; + + // Any metadata attached to the interface. + repeated Option options = 3; + + // A version string for this interface. If specified, must have the form + // `major-version.minor-version`, as in `1.10`. If the minor version is + // omitted, it defaults to zero. If the entire version field is empty, the + // major version is derived from the package name, as outlined below. If the + // field is not empty, the version in the package name will be verified to be + // consistent with what is provided here. + // + // The versioning schema uses [semantic + // versioning](http://semver.org) where the major version number + // indicates a breaking change and the minor version an additive, + // non-breaking change. Both version numbers are signals to users + // what to expect from different versions, and should be carefully + // chosen based on the product plan. + // + // The major version is also reflected in the package name of the + // interface, which must end in `v`, as in + // `google.feature.v1`. For major versions 0 and 1, the suffix can + // be omitted. Zero major versions must only be used for + // experimental, non-GA interfaces. + // + // + string version = 4; + + // Source context for the protocol buffer service represented by this + // message. + SourceContext source_context = 5; + + // Included interfaces. See [Mixin][]. + repeated Mixin mixins = 6; + + // The source syntax of the service. + Syntax syntax = 7; +} + +// Method represents a method of an API interface. +message Method { + + // The simple name of this method. + string name = 1; + + // A URL of the input message type. + string request_type_url = 2; + + // If true, the request is streamed. + bool request_streaming = 3; + + // The URL of the output message type. + string response_type_url = 4; + + // If true, the response is streamed. + bool response_streaming = 5; + + // Any metadata attached to the method. + repeated Option options = 6; + + // The source syntax of this method. + Syntax syntax = 7; +} + +// Declares an API Interface to be included in this interface. The including +// interface must redeclare all the methods from the included interface, but +// documentation and options are inherited as follows: +// +// - If after comment and whitespace stripping, the documentation +// string of the redeclared method is empty, it will be inherited +// from the original method. +// +// - Each annotation belonging to the service config (http, +// visibility) which is not set in the redeclared method will be +// inherited. +// +// - If an http annotation is inherited, the path pattern will be +// modified as follows. Any version prefix will be replaced by the +// version of the including interface plus the [root][] path if +// specified. +// +// Example of a simple mixin: +// +// package google.acl.v1; +// service AccessControl { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v1/{resource=**}:getAcl"; +// } +// } +// +// package google.storage.v1; +// service Storage { +// rpc GetAcl(GetAclRequest) returns (Acl); +// +// // Get a data record. +// rpc GetData(GetDataRequest) returns (Data) { +// option (google.api.http).get = "/v1/{resource=**}"; +// } +// } +// +// Example of a mixin configuration: +// +// apis: +// - name: google.storage.v1.Storage +// mixins: +// - name: google.acl.v1.AccessControl +// +// The mixin construct implies that all methods in `AccessControl` are +// also declared with same name and request/response types in +// `Storage`. A documentation generator or annotation processor will +// see the effective `Storage.GetAcl` method after inherting +// documentation and annotations as follows: +// +// service Storage { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v1/{resource=**}:getAcl"; +// } +// ... +// } +// +// Note how the version in the path pattern changed from `v1` to `v1`. +// +// If the `root` field in the mixin is specified, it should be a +// relative path under which inherited HTTP paths are placed. Example: +// +// apis: +// - name: google.storage.v1.Storage +// mixins: +// - name: google.acl.v1.AccessControl +// root: acls +// +// This implies the following inherited HTTP annotation: +// +// service Storage { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v1/acls/{resource=**}:getAcl"; +// } +// ... +// } +message Mixin { + // The fully qualified name of the interface which is included. + string name = 1; + + // If non-empty specifies a path under which inherited HTTP paths + // are rooted. + string root = 2; +} diff --git a/common/api/protoc/include/google/protobuf/compiler/plugin.proto b/common/api/protoc/include/google/protobuf/compiler/plugin.proto new file mode 100644 index 000000000..665e5a725 --- /dev/null +++ b/common/api/protoc/include/google/protobuf/compiler/plugin.proto @@ -0,0 +1,168 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// +// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to +// change. +// +// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is +// just a program that reads a CodeGeneratorRequest from stdin and writes a +// CodeGeneratorResponse to stdout. +// +// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead +// of dealing with the raw protocol defined here. +// +// A plugin executable needs only to be placed somewhere in the path. The +// plugin should be named "protoc-gen-$NAME", and will then be used when the +// flag "--${NAME}_out" is passed to protoc. + +syntax = "proto2"; + +package google.protobuf.compiler; +option java_package = "com.google.protobuf.compiler"; +option java_outer_classname = "PluginProtos"; + +option go_package = "github.com/golang/protobuf/protoc-gen-go/plugin;plugin_go"; + +import "google/protobuf/descriptor.proto"; + +// The version number of protocol compiler. +message Version { + optional int32 major = 1; + optional int32 minor = 2; + optional int32 patch = 3; + // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should + // be empty for mainline stable releases. + optional string suffix = 4; +} + +// An encoded CodeGeneratorRequest is written to the plugin's stdin. +message CodeGeneratorRequest { + // The .proto files that were explicitly listed on the command-line. The + // code generator should generate code only for these files. Each file's + // descriptor will be included in proto_file, below. + repeated string file_to_generate = 1; + + // The generator parameter passed on the command-line. + optional string parameter = 2; + + // FileDescriptorProtos for all files in files_to_generate and everything + // they import. The files will appear in topological order, so each file + // appears before any file that imports it. + // + // protoc guarantees that all proto_files will be written after + // the fields above, even though this is not technically guaranteed by the + // protobuf wire format. This theoretically could allow a plugin to stream + // in the FileDescriptorProtos and handle them one by one rather than read + // the entire set into memory at once. However, as of this writing, this + // is not similarly optimized on protoc's end -- it will store all fields in + // memory at once before sending them to the plugin. + // + // Type names of fields and extensions in the FileDescriptorProto are always + // fully qualified. + repeated FileDescriptorProto proto_file = 15; + + // The version number of protocol compiler. + optional Version compiler_version = 3; + +} + +// The plugin writes an encoded CodeGeneratorResponse to stdout. +message CodeGeneratorResponse { + // Error message. If non-empty, code generation failed. The plugin process + // should exit with status code zero even if it reports an error in this way. + // + // This should be used to indicate errors in .proto files which prevent the + // code generator from generating correct code. Errors which indicate a + // problem in protoc itself -- such as the input CodeGeneratorRequest being + // unparseable -- should be reported by writing a message to stderr and + // exiting with a non-zero status code. + optional string error = 1; + + // Represents a single generated file. + message File { + // The file name, relative to the output directory. The name must not + // contain "." or ".." components and must be relative, not be absolute (so, + // the file cannot lie outside the output directory). "/" must be used as + // the path separator, not "\". + // + // If the name is omitted, the content will be appended to the previous + // file. This allows the generator to break large files into small chunks, + // and allows the generated text to be streamed back to protoc so that large + // files need not reside completely in memory at one time. Note that as of + // this writing protoc does not optimize for this -- it will read the entire + // CodeGeneratorResponse before writing files to disk. + optional string name = 1; + + // If non-empty, indicates that the named file should already exist, and the + // content here is to be inserted into that file at a defined insertion + // point. This feature allows a code generator to extend the output + // produced by another code generator. The original generator may provide + // insertion points by placing special annotations in the file that look + // like: + // @@protoc_insertion_point(NAME) + // The annotation can have arbitrary text before and after it on the line, + // which allows it to be placed in a comment. NAME should be replaced with + // an identifier naming the point -- this is what other generators will use + // as the insertion_point. Code inserted at this point will be placed + // immediately above the line containing the insertion point (thus multiple + // insertions to the same point will come out in the order they were added). + // The double-@ is intended to make it unlikely that the generated code + // could contain things that look like insertion points by accident. + // + // For example, the C++ code generator places the following line in the + // .pb.h files that it generates: + // // @@protoc_insertion_point(namespace_scope) + // This line appears within the scope of the file's package namespace, but + // outside of any particular class. Another plugin can then specify the + // insertion_point "namespace_scope" to generate additional classes or + // other declarations that should be placed in this scope. + // + // Note that if the line containing the insertion point begins with + // whitespace, the same whitespace will be added to every line of the + // inserted text. This is useful for languages like Python, where + // indentation matters. In these languages, the insertion point comment + // should be indented the same amount as any inserted code will need to be + // in order to work correctly in that context. + // + // The code generator that generates the initial file and the one which + // inserts into it must both run as part of a single invocation of protoc. + // Code generators are executed in the order in which they appear on the + // command line. + // + // If |insertion_point| is present, |name| must also be present. + optional string insertion_point = 2; + + // The file contents. + optional string content = 15; + } + repeated File file = 15; +} diff --git a/common/api/protoc/include/google/protobuf/descriptor.proto b/common/api/protoc/include/google/protobuf/descriptor.proto new file mode 100644 index 000000000..a2102d7aa --- /dev/null +++ b/common/api/protoc/include/google/protobuf/descriptor.proto @@ -0,0 +1,885 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + + +syntax = "proto2"; + +package google.protobuf; + +option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DescriptorProtos"; +option csharp_namespace = "Google.Protobuf.Reflection"; +option objc_class_prefix = "GPB"; +option cc_enable_arenas = true; + +// descriptor.proto must be optimized for speed because reflection-based +// algorithms don't work during bootstrapping. +option optimize_for = SPEED; + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +message FileDescriptorSet { + repeated FileDescriptorProto file = 1; +} + +// Describes a complete .proto file. +message FileDescriptorProto { + optional string name = 1; // file name, relative to root of source tree + optional string package = 2; // e.g. "foo", "foo.bar", etc. + + // Names of files imported by this file. + repeated string dependency = 3; + // Indexes of the public imported files in the dependency list above. + repeated int32 public_dependency = 10; + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + repeated int32 weak_dependency = 11; + + // All top-level definitions in this file. + repeated DescriptorProto message_type = 4; + repeated EnumDescriptorProto enum_type = 5; + repeated ServiceDescriptorProto service = 6; + repeated FieldDescriptorProto extension = 7; + + optional FileOptions options = 8; + + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + optional SourceCodeInfo source_code_info = 9; + + // The syntax of the proto file. + // The supported values are "proto2" and "proto3". + optional string syntax = 12; +} + +// Describes a message type. +message DescriptorProto { + optional string name = 1; + + repeated FieldDescriptorProto field = 2; + repeated FieldDescriptorProto extension = 6; + + repeated DescriptorProto nested_type = 3; + repeated EnumDescriptorProto enum_type = 4; + + message ExtensionRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. + + optional ExtensionRangeOptions options = 3; + } + repeated ExtensionRange extension_range = 5; + + repeated OneofDescriptorProto oneof_decl = 8; + + optional MessageOptions options = 7; + + // Range of reserved tag numbers. Reserved tag numbers may not be used by + // fields or extension ranges in the same message. Reserved ranges may + // not overlap. + message ReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. + } + repeated ReservedRange reserved_range = 9; + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + repeated string reserved_name = 10; +} + +message ExtensionRangeOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +// Describes a field within a message. +message FieldDescriptorProto { + enum Type { + // 0 is reserved for errors. + // Order is weird for historical reasons. + TYPE_DOUBLE = 1; + TYPE_FLOAT = 2; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + TYPE_INT64 = 3; + TYPE_UINT64 = 4; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + TYPE_INT32 = 5; + TYPE_FIXED64 = 6; + TYPE_FIXED32 = 7; + TYPE_BOOL = 8; + TYPE_STRING = 9; + // Tag-delimited aggregate. + // Group type is deprecated and not supported in proto3. However, Proto3 + // implementations should still be able to parse the group wire format and + // treat group fields as unknown fields. + TYPE_GROUP = 10; + TYPE_MESSAGE = 11; // Length-delimited aggregate. + + // New in version 2. + TYPE_BYTES = 12; + TYPE_UINT32 = 13; + TYPE_ENUM = 14; + TYPE_SFIXED32 = 15; + TYPE_SFIXED64 = 16; + TYPE_SINT32 = 17; // Uses ZigZag encoding. + TYPE_SINT64 = 18; // Uses ZigZag encoding. + } + + enum Label { + // 0 is reserved for errors + LABEL_OPTIONAL = 1; + LABEL_REQUIRED = 2; + LABEL_REPEATED = 3; + } + + optional string name = 1; + optional int32 number = 3; + optional Label label = 4; + + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + optional Type type = 5; + + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + optional string type_name = 6; + + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + optional string extendee = 2; + + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + // TODO(kenton): Base-64 encode? + optional string default_value = 7; + + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + optional int32 oneof_index = 9; + + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + optional string json_name = 10; + + optional FieldOptions options = 8; +} + +// Describes a oneof. +message OneofDescriptorProto { + optional string name = 1; + optional OneofOptions options = 2; +} + +// Describes an enum type. +message EnumDescriptorProto { + optional string name = 1; + + repeated EnumValueDescriptorProto value = 2; + + optional EnumOptions options = 3; + + // Range of reserved numeric values. Reserved values may not be used by + // entries in the same enum. Reserved ranges may not overlap. + // + // Note that this is distinct from DescriptorProto.ReservedRange in that it + // is inclusive such that it can appropriately represent the entire int32 + // domain. + message EnumReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Inclusive. + } + + // Range of reserved numeric values. Reserved numeric values may not be used + // by enum values in the same enum declaration. Reserved ranges may not + // overlap. + repeated EnumReservedRange reserved_range = 4; + + // Reserved enum value names, which may not be reused. A given name may only + // be reserved once. + repeated string reserved_name = 5; +} + +// Describes a value within an enum. +message EnumValueDescriptorProto { + optional string name = 1; + optional int32 number = 2; + + optional EnumValueOptions options = 3; +} + +// Describes a service. +message ServiceDescriptorProto { + optional string name = 1; + repeated MethodDescriptorProto method = 2; + + optional ServiceOptions options = 3; +} + +// Describes a method of a service. +message MethodDescriptorProto { + optional string name = 1; + + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + optional string input_type = 2; + optional string output_type = 3; + + optional MethodOptions options = 4; + + // Identifies if client streams multiple client messages + optional bool client_streaming = 5 [default = false]; + // Identifies if server streams multiple server messages + optional bool server_streaming = 6 [default = false]; +} + + +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Objective-C plugin) and your project website (if available) -- there's no +// need to explain how you intend to use them. Usually you only need one +// extension number. You can declare multiple options with only one extension +// number by putting them in a sub-message. See the Custom Options section of +// the docs for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + +message FileOptions { + + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + optional string java_package = 1; + + + // If set, all the classes from the .proto file are wrapped in a single + // outer class with the given name. This applies to both Proto1 + // (equivalent to the old "--one_java_file" option) and Proto2 (where + // a .proto always translates to a single class, but you may want to + // explicitly choose the class name). + optional string java_outer_classname = 8; + + // If set true, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the outer class + // named by java_outer_classname. However, the outer class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + optional bool java_multiple_files = 10 [default = false]; + + // This option does nothing. + optional bool java_generate_equals_and_hash = 20 [deprecated=true]; + + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + optional bool java_string_check_utf8 = 27 [default = false]; + + + // Generated classes can be optimized for speed or code size. + enum OptimizeMode { + SPEED = 1; // Generate complete code for parsing, serialization, + // etc. + CODE_SIZE = 2; // Use ReflectionOps to implement these methods. + LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. + } + optional OptimizeMode optimize_for = 9 [default = SPEED]; + + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + optional string go_package = 11; + + + + + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + optional bool cc_generic_services = 16 [default = false]; + optional bool java_generic_services = 17 [default = false]; + optional bool py_generic_services = 18 [default = false]; + optional bool php_generic_services = 42 [default = false]; + + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + optional bool deprecated = 23 [default = false]; + + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + optional bool cc_enable_arenas = 31 [default = false]; + + + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + optional string objc_class_prefix = 36; + + // Namespace for generated classes; defaults to the package. + optional string csharp_namespace = 37; + + // By default Swift generators will take the proto package and CamelCase it + // replacing '.' with underscore and use that to prefix the types/symbols + // defined. When this options is provided, they will use this value instead + // to prefix the types/symbols defined. + optional string swift_prefix = 39; + + // Sets the php class prefix which is prepended to all php generated classes + // from this .proto. Default is empty. + optional string php_class_prefix = 40; + + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + optional string php_namespace = 41; + + // Use this option to change the namespace of php generated metadata classes. + // Default is empty. When this option is empty, the proto file name will be + // used for determining the namespace. + optional string php_metadata_namespace = 44; + + // Use this option to change the package of ruby generated classes. Default + // is empty. When this option is not set, the package name will be used for + // determining the ruby package. + optional string ruby_package = 45; + + + // The parser stores options it doesn't recognize here. + // See the documentation for the "Options" section above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. + // See the documentation for the "Options" section above. + extensions 1000 to max; + + reserved 38; +} + +message MessageOptions { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + optional bool message_set_wire_format = 1 [default = false]; + + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + optional bool no_standard_descriptor_accessor = 2 [default = false]; + + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + optional bool deprecated = 3 [default = false]; + + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // map map_field = 1; + // The parsed descriptor looks like: + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementations still need to work as + // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + optional bool map_entry = 7; + + reserved 8; // javalite_serializable + reserved 9; // javanano_as_lite + + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message FieldOptions { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + optional CType ctype = 1 [default = STRING]; + enum CType { + // Default mode. + STRING = 0; + + CORD = 1; + + STRING_PIECE = 2; + } + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. + optional bool packed = 2; + + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. + optional JSType jstype = 6 [default = JS_NORMAL]; + enum JSType { + // Use the default type. + JS_NORMAL = 0; + + // Use JavaScript strings. + JS_STRING = 1; + + // Use JavaScript numbers. + JS_NUMBER = 2; + } + + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outer message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + optional bool lazy = 5 [default = false]; + + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + optional bool deprecated = 3 [default = false]; + + // For Google-internal migration only. Do not use. + optional bool weak = 10 [default = false]; + + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; + + reserved 4; // removed jtype +} + +message OneofOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumOptions { + + // Set this option to true to allow mapping different tag names to the same + // value. + optional bool allow_alias = 2; + + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + optional bool deprecated = 3 [default = false]; + + reserved 5; // javanano_as_lite + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumValueOptions { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + optional bool deprecated = 1 [default = false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message ServiceOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + optional bool deprecated = 33 [default = false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MethodOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + optional bool deprecated = 33 [default = false]; + + // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, + // or neither? HTTP based RPC implementation may choose GET verb for safe + // methods, and PUT verb for idempotent methods instead of the default POST. + enum IdempotencyLevel { + IDEMPOTENCY_UNKNOWN = 0; + NO_SIDE_EFFECTS = 1; // implies idempotent + IDEMPOTENT = 2; // idempotent, but may have side effects + } + optional IdempotencyLevel idempotency_level = 34 + [default = IDEMPOTENCY_UNKNOWN]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +message UninterpretedOption { + // The name of the uninterpreted option. Each string represents a segment in + // a dot-separated name. is_extension is true iff a segment represents an + // extension (denoted with parentheses in options specs in .proto files). + // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents + // "foo.(bar.baz).qux". + message NamePart { + required string name_part = 1; + required bool is_extension = 2; + } + repeated NamePart name = 2; + + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + optional string identifier_value = 3; + optional uint64 positive_int_value = 4; + optional int64 negative_int_value = 5; + optional double double_value = 6; + optional bytes string_value = 7; + optional string aggregate_value = 8; +} + +// =================================================================== +// Optional source code info + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +message SourceCodeInfo { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendant. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + repeated Location location = 1; + message Location { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition. For + // example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + repeated int32 path = 1 [packed = true]; + + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + repeated int32 span = 2 [packed = true]; + + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to qux or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + optional string leading_comments = 3; + optional string trailing_comments = 4; + repeated string leading_detached_comments = 6; + } +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +message GeneratedCodeInfo { + // An Annotation connects some span of text in generated code to an element + // of its generating .proto file. + repeated Annotation annotation = 1; + message Annotation { + // Identifies the element in the original source .proto file. This field + // is formatted the same as SourceCodeInfo.Location.path. + repeated int32 path = 1 [packed = true]; + + // Identifies the filesystem path to the original source .proto. + optional string source_file = 2; + + // Identifies the starting offset in bytes in the generated code + // that relates to the identified object. + optional int32 begin = 3; + + // Identifies the ending offset in bytes in the generated code that + // relates to the identified offset. The end offset should be one past + // the last relevant byte (so the length of the text = end - begin). + optional int32 end = 4; + } +} diff --git a/common/api/protoc/include/google/protobuf/duration.proto b/common/api/protoc/include/google/protobuf/duration.proto new file mode 100644 index 000000000..9d8a52de2 --- /dev/null +++ b/common/api/protoc/include/google/protobuf/duration.proto @@ -0,0 +1,116 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/duration"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DurationProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// A Duration represents a signed, fixed-length span of time represented +// as a count of seconds and fractions of seconds at nanosecond +// resolution. It is independent of any calendar and concepts like "day" +// or "month". It is related to Timestamp in that the difference between +// two Timestamp values is a Duration and it can be added or subtracted +// from a Timestamp. Range is approximately +-10,000 years. +// +// # Examples +// +// Example 1: Compute Duration from two Timestamps in pseudo code. +// +// Timestamp start = ...; +// Timestamp end = ...; +// Duration duration = ...; +// +// duration.seconds = end.seconds - start.seconds; +// duration.nanos = end.nanos - start.nanos; +// +// if (duration.seconds < 0 && duration.nanos > 0) { +// duration.seconds += 1; +// duration.nanos -= 1000000000; +// } else if (durations.seconds > 0 && duration.nanos < 0) { +// duration.seconds -= 1; +// duration.nanos += 1000000000; +// } +// +// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. +// +// Timestamp start = ...; +// Duration duration = ...; +// Timestamp end = ...; +// +// end.seconds = start.seconds + duration.seconds; +// end.nanos = start.nanos + duration.nanos; +// +// if (end.nanos < 0) { +// end.seconds -= 1; +// end.nanos += 1000000000; +// } else if (end.nanos >= 1000000000) { +// end.seconds += 1; +// end.nanos -= 1000000000; +// } +// +// Example 3: Compute Duration from datetime.timedelta in Python. +// +// td = datetime.timedelta(days=3, minutes=10) +// duration = Duration() +// duration.FromTimedelta(td) +// +// # JSON Mapping +// +// In JSON format, the Duration type is encoded as a string rather than an +// object, where the string ends in the suffix "s" (indicating seconds) and +// is preceded by the number of seconds, with nanoseconds expressed as +// fractional seconds. For example, 3 seconds with 0 nanoseconds should be +// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should +// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 +// microsecond should be expressed in JSON format as "3.000001s". +// +// +message Duration { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. Note: these bounds are computed from: + // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + int64 seconds = 1; + + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + int32 nanos = 2; +} diff --git a/common/api/protoc/include/google/protobuf/empty.proto b/common/api/protoc/include/google/protobuf/empty.proto new file mode 100644 index 000000000..03cacd233 --- /dev/null +++ b/common/api/protoc/include/google/protobuf/empty.proto @@ -0,0 +1,52 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "github.com/golang/protobuf/ptypes/empty"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "EmptyProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option cc_enable_arenas = true; + +// A generic empty message that you can re-use to avoid defining duplicated +// empty messages in your APIs. A typical example is to use it as the request +// or the response type of an API method. For instance: +// +// service Foo { +// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); +// } +// +// The JSON representation for `Empty` is empty JSON object `{}`. +message Empty {} diff --git a/common/api/protoc/include/google/protobuf/field_mask.proto b/common/api/protoc/include/google/protobuf/field_mask.proto new file mode 100644 index 000000000..4015b1a3e --- /dev/null +++ b/common/api/protoc/include/google/protobuf/field_mask.proto @@ -0,0 +1,245 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "FieldMaskProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option go_package = "google.golang.org/genproto/protobuf/field_mask;field_mask"; +option cc_enable_arenas = true; + +// `FieldMask` represents a set of symbolic field paths, for example: +// +// paths: "f.a" +// paths: "f.b.d" +// +// Here `f` represents a field in some root message, `a` and `b` +// fields in the message found in `f`, and `d` a field found in the +// message in `f.b`. +// +// Field masks are used to specify a subset of fields that should be +// returned by a get operation or modified by an update operation. +// Field masks also have a custom JSON encoding (see below). +// +// # Field Masks in Projections +// +// When used in the context of a projection, a response message or +// sub-message is filtered by the API to only contain those fields as +// specified in the mask. For example, if the mask in the previous +// example is applied to a response message as follows: +// +// f { +// a : 22 +// b { +// d : 1 +// x : 2 +// } +// y : 13 +// } +// z: 8 +// +// The result will not contain specific values for fields x,y and z +// (their value will be set to the default, and omitted in proto text +// output): +// +// +// f { +// a : 22 +// b { +// d : 1 +// } +// } +// +// A repeated field is not allowed except at the last position of a +// paths string. +// +// If a FieldMask object is not present in a get operation, the +// operation applies to all fields (as if a FieldMask of all fields +// had been specified). +// +// Note that a field mask does not necessarily apply to the +// top-level response message. In case of a REST get operation, the +// field mask applies directly to the response, but in case of a REST +// list operation, the mask instead applies to each individual message +// in the returned resource list. In case of a REST custom method, +// other definitions may be used. Where the mask applies will be +// clearly documented together with its declaration in the API. In +// any case, the effect on the returned resource/resources is required +// behavior for APIs. +// +// # Field Masks in Update Operations +// +// A field mask in update operations specifies which fields of the +// targeted resource are going to be updated. The API is required +// to only change the values of the fields as specified in the mask +// and leave the others untouched. If a resource is passed in to +// describe the updated values, the API ignores the values of all +// fields not covered by the mask. +// +// If a repeated field is specified for an update operation, new values will +// be appended to the existing repeated field in the target resource. Note that +// a repeated field is only allowed in the last position of a `paths` string. +// +// If a sub-message is specified in the last position of the field mask for an +// update operation, then new value will be merged into the existing sub-message +// in the target resource. +// +// For example, given the target message: +// +// f { +// b { +// d: 1 +// x: 2 +// } +// c: [1] +// } +// +// And an update message: +// +// f { +// b { +// d: 10 +// } +// c: [2] +// } +// +// then if the field mask is: +// +// paths: ["f.b", "f.c"] +// +// then the result will be: +// +// f { +// b { +// d: 10 +// x: 2 +// } +// c: [1, 2] +// } +// +// An implementation may provide options to override this default behavior for +// repeated and message fields. +// +// In order to reset a field's value to the default, the field must +// be in the mask and set to the default value in the provided resource. +// Hence, in order to reset all fields of a resource, provide a default +// instance of the resource and set all fields in the mask, or do +// not provide a mask as described below. +// +// If a field mask is not present on update, the operation applies to +// all fields (as if a field mask of all fields has been specified). +// Note that in the presence of schema evolution, this may mean that +// fields the client does not know and has therefore not filled into +// the request will be reset to their default. If this is unwanted +// behavior, a specific service may require a client to always specify +// a field mask, producing an error if not. +// +// As with get operations, the location of the resource which +// describes the updated values in the request message depends on the +// operation kind. In any case, the effect of the field mask is +// required to be honored by the API. +// +// ## Considerations for HTTP REST +// +// The HTTP kind of an update operation which uses a field mask must +// be set to PATCH instead of PUT in order to satisfy HTTP semantics +// (PUT must only be used for full updates). +// +// # JSON Encoding of Field Masks +// +// In JSON, a field mask is encoded as a single string where paths are +// separated by a comma. Fields name in each path are converted +// to/from lower-camel naming conventions. +// +// As an example, consider the following message declarations: +// +// message Profile { +// User user = 1; +// Photo photo = 2; +// } +// message User { +// string display_name = 1; +// string address = 2; +// } +// +// In proto a field mask for `Profile` may look as such: +// +// mask { +// paths: "user.display_name" +// paths: "photo" +// } +// +// In JSON, the same mask is represented as below: +// +// { +// mask: "user.displayName,photo" +// } +// +// # Field Masks and Oneof Fields +// +// Field masks treat fields in oneofs just as regular fields. Consider the +// following message: +// +// message SampleMessage { +// oneof test_oneof { +// string name = 4; +// SubMessage sub_message = 9; +// } +// } +// +// The field mask can be: +// +// mask { +// paths: "name" +// } +// +// Or: +// +// mask { +// paths: "sub_message" +// } +// +// Note that oneof type names ("test_oneof" in this case) cannot be used in +// paths. +// +// ## Field Mask Verification +// +// The implementation of any API method which has a FieldMask type field in the +// request should verify the included field paths, and return an +// `INVALID_ARGUMENT` error if any path is duplicated or unmappable. +message FieldMask { + // The set of field mask paths. + repeated string paths = 1; +} diff --git a/common/api/protoc/include/google/protobuf/source_context.proto b/common/api/protoc/include/google/protobuf/source_context.proto new file mode 100644 index 000000000..f3b2c9668 --- /dev/null +++ b/common/api/protoc/include/google/protobuf/source_context.proto @@ -0,0 +1,48 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "SourceContextProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option go_package = "google.golang.org/genproto/protobuf/source_context;source_context"; + +// `SourceContext` represents information about the source of a +// protobuf element, like the file in which it is defined. +message SourceContext { + // The path-qualified name of the .proto file that contained the associated + // protobuf element. For example: `"google/protobuf/source_context.proto"`. + string file_name = 1; +} diff --git a/common/api/protoc/include/google/protobuf/struct.proto b/common/api/protoc/include/google/protobuf/struct.proto new file mode 100644 index 000000000..ed990e31d --- /dev/null +++ b/common/api/protoc/include/google/protobuf/struct.proto @@ -0,0 +1,95 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/struct;structpb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "StructProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// `Struct` represents a structured data value, consisting of fields +// which map to dynamically typed values. In some languages, `Struct` +// might be supported by a native representation. For example, in +// scripting languages like JS a struct is represented as an +// object. The details of that representation are described together +// with the proto support for the language. +// +// The JSON representation for `Struct` is JSON object. +message Struct { + // Unordered map of dynamically typed values. + map fields = 1; +} + +// `Value` represents a dynamically typed value which can be either +// null, a number, a string, a boolean, a recursive struct value, or a +// list of values. A producer of value is expected to set one of that +// variants, absence of any variant indicates an error. +// +// The JSON representation for `Value` is JSON value. +message Value { + // The kind of value. + oneof kind { + // Represents a null value. + NullValue null_value = 1; + // Represents a double value. + double number_value = 2; + // Represents a string value. + string string_value = 3; + // Represents a boolean value. + bool bool_value = 4; + // Represents a structured value. + Struct struct_value = 5; + // Represents a repeated `Value`. + ListValue list_value = 6; + } +} + +// `NullValue` is a singleton enumeration to represent the null value for the +// `Value` type union. +// +// The JSON representation for `NullValue` is JSON `null`. +enum NullValue { + // Null value. + NULL_VALUE = 0; +} + +// `ListValue` is a wrapper around a repeated field of values. +// +// The JSON representation for `ListValue` is JSON array. +message ListValue { + // Repeated field of dynamically typed values. + repeated Value values = 1; +} diff --git a/common/api/protoc/include/google/protobuf/timestamp.proto b/common/api/protoc/include/google/protobuf/timestamp.proto new file mode 100644 index 000000000..cd357864a --- /dev/null +++ b/common/api/protoc/include/google/protobuf/timestamp.proto @@ -0,0 +1,138 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/timestamp"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "TimestampProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// A Timestamp represents a point in time independent of any time zone or local +// calendar, encoded as a count of seconds and fractions of seconds at +// nanosecond resolution. The count is relative to an epoch at UTC midnight on +// January 1, 1970, in the proleptic Gregorian calendar which extends the +// Gregorian calendar backwards to year one. +// +// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap +// second table is needed for interpretation, using a [24-hour linear +// smear](https://developers.google.com/time/smear). +// +// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By +// restricting to that range, we ensure that we can convert to and from [RFC +// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. +// +// # Examples +// +// Example 1: Compute Timestamp from POSIX `time()`. +// +// Timestamp timestamp; +// timestamp.set_seconds(time(NULL)); +// timestamp.set_nanos(0); +// +// Example 2: Compute Timestamp from POSIX `gettimeofday()`. +// +// struct timeval tv; +// gettimeofday(&tv, NULL); +// +// Timestamp timestamp; +// timestamp.set_seconds(tv.tv_sec); +// timestamp.set_nanos(tv.tv_usec * 1000); +// +// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. +// +// FILETIME ft; +// GetSystemTimeAsFileTime(&ft); +// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +// +// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z +// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. +// Timestamp timestamp; +// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); +// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); +// +// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. +// +// long millis = System.currentTimeMillis(); +// +// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) +// .setNanos((int) ((millis % 1000) * 1000000)).build(); +// +// +// Example 5: Compute Timestamp from current time in Python. +// +// timestamp = Timestamp() +// timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required. A proto3 JSON serializer should always use UTC (as indicated by +// "Z") when printing the Timestamp type and a proto3 JSON parser should be +// able to accept both UTC and other timezones (as indicated by an offset). +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard +// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using +// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with +// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use +// the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D +// ) to obtain a formatter capable of generating timestamps in this format. +// +// +message Timestamp { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + int64 seconds = 1; + + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + int32 nanos = 2; +} diff --git a/common/api/protoc/include/google/protobuf/type.proto b/common/api/protoc/include/google/protobuf/type.proto new file mode 100644 index 000000000..e4b1d3a4a --- /dev/null +++ b/common/api/protoc/include/google/protobuf/type.proto @@ -0,0 +1,187 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +import "google/protobuf/any.proto"; +import "google/protobuf/source_context.proto"; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option java_package = "com.google.protobuf"; +option java_outer_classname = "TypeProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option go_package = "google.golang.org/genproto/protobuf/ptype;ptype"; + +// A protocol buffer message type. +message Type { + // The fully qualified message name. + string name = 1; + // The list of fields. + repeated Field fields = 2; + // The list of types appearing in `oneof` definitions in this type. + repeated string oneofs = 3; + // The protocol buffer options. + repeated Option options = 4; + // The source context. + SourceContext source_context = 5; + // The source syntax. + Syntax syntax = 6; +} + +// A single field of a message type. +message Field { + // Basic field types. + enum Kind { + // Field type unknown. + TYPE_UNKNOWN = 0; + // Field type double. + TYPE_DOUBLE = 1; + // Field type float. + TYPE_FLOAT = 2; + // Field type int64. + TYPE_INT64 = 3; + // Field type uint64. + TYPE_UINT64 = 4; + // Field type int32. + TYPE_INT32 = 5; + // Field type fixed64. + TYPE_FIXED64 = 6; + // Field type fixed32. + TYPE_FIXED32 = 7; + // Field type bool. + TYPE_BOOL = 8; + // Field type string. + TYPE_STRING = 9; + // Field type group. Proto2 syntax only, and deprecated. + TYPE_GROUP = 10; + // Field type message. + TYPE_MESSAGE = 11; + // Field type bytes. + TYPE_BYTES = 12; + // Field type uint32. + TYPE_UINT32 = 13; + // Field type enum. + TYPE_ENUM = 14; + // Field type sfixed32. + TYPE_SFIXED32 = 15; + // Field type sfixed64. + TYPE_SFIXED64 = 16; + // Field type sint32. + TYPE_SINT32 = 17; + // Field type sint64. + TYPE_SINT64 = 18; + } + + // Whether a field is optional, required, or repeated. + enum Cardinality { + // For fields with unknown cardinality. + CARDINALITY_UNKNOWN = 0; + // For optional fields. + CARDINALITY_OPTIONAL = 1; + // For required fields. Proto2 syntax only. + CARDINALITY_REQUIRED = 2; + // For repeated fields. + CARDINALITY_REPEATED = 3; + }; + + // The field type. + Kind kind = 1; + // The field cardinality. + Cardinality cardinality = 2; + // The field number. + int32 number = 3; + // The field name. + string name = 4; + // The field type URL, without the scheme, for message or enumeration + // types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. + string type_url = 6; + // The index of the field type in `Type.oneofs`, for message or enumeration + // types. The first type has index 1; zero means the type is not in the list. + int32 oneof_index = 7; + // Whether to use alternative packed wire representation. + bool packed = 8; + // The protocol buffer options. + repeated Option options = 9; + // The field JSON name. + string json_name = 10; + // The string value of the default value of this field. Proto2 syntax only. + string default_value = 11; +} + +// Enum type definition. +message Enum { + // Enum type name. + string name = 1; + // Enum value definitions. + repeated EnumValue enumvalue = 2; + // Protocol buffer options. + repeated Option options = 3; + // The source context. + SourceContext source_context = 4; + // The source syntax. + Syntax syntax = 5; +} + +// Enum value definition. +message EnumValue { + // Enum value name. + string name = 1; + // Enum value number. + int32 number = 2; + // Protocol buffer options. + repeated Option options = 3; +} + +// A protocol buffer option, which can be attached to a message, field, +// enumeration, etc. +message Option { + // The option's name. For protobuf built-in options (options defined in + // descriptor.proto), this is the short name. For example, `"map_entry"`. + // For custom options, it should be the fully-qualified name. For example, + // `"google.api.http"`. + string name = 1; + // The option's value packed in an Any message. If the value is a primitive, + // the corresponding wrapper type defined in google/protobuf/wrappers.proto + // should be used. If the value is an enum, it should be stored as an int32 + // value using the google.protobuf.Int32Value type. + Any value = 2; +} + +// The syntax in which a protocol buffer element is defined. +enum Syntax { + // Syntax `proto2`. + SYNTAX_PROTO2 = 0; + // Syntax `proto3`. + SYNTAX_PROTO3 = 1; +} diff --git a/common/api/protoc/include/google/protobuf/wrappers.proto b/common/api/protoc/include/google/protobuf/wrappers.proto new file mode 100644 index 000000000..9ee41e384 --- /dev/null +++ b/common/api/protoc/include/google/protobuf/wrappers.proto @@ -0,0 +1,123 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Wrappers for primitive (non-message) types. These types are useful +// for embedding primitives in the `google.protobuf.Any` type and for places +// where we need to distinguish between the absence of a primitive +// typed field and its default value. +// +// These wrappers have no meaningful use within repeated fields as they lack +// the ability to detect presence on individual elements. +// These wrappers have no meaningful use within a map or a oneof since +// individual entries of a map or fields of a oneof can already detect presence. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/wrappers"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "WrappersProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// Wrapper message for `double`. +// +// The JSON representation for `DoubleValue` is JSON number. +message DoubleValue { + // The double value. + double value = 1; +} + +// Wrapper message for `float`. +// +// The JSON representation for `FloatValue` is JSON number. +message FloatValue { + // The float value. + float value = 1; +} + +// Wrapper message for `int64`. +// +// The JSON representation for `Int64Value` is JSON string. +message Int64Value { + // The int64 value. + int64 value = 1; +} + +// Wrapper message for `uint64`. +// +// The JSON representation for `UInt64Value` is JSON string. +message UInt64Value { + // The uint64 value. + uint64 value = 1; +} + +// Wrapper message for `int32`. +// +// The JSON representation for `Int32Value` is JSON number. +message Int32Value { + // The int32 value. + int32 value = 1; +} + +// Wrapper message for `uint32`. +// +// The JSON representation for `UInt32Value` is JSON number. +message UInt32Value { + // The uint32 value. + uint32 value = 1; +} + +// Wrapper message for `bool`. +// +// The JSON representation for `BoolValue` is JSON `true` and `false`. +message BoolValue { + // The bool value. + bool value = 1; +} + +// Wrapper message for `string`. +// +// The JSON representation for `StringValue` is JSON string. +message StringValue { + // The string value. + string value = 1; +} + +// Wrapper message for `bytes`. +// +// The JSON representation for `BytesValue` is JSON string. +message BytesValue { + // The bytes value. + bytes value = 1; +} diff --git a/common/api/protoc/readme.txt b/common/api/protoc/readme.txt new file mode 100644 index 000000000..b6c9f9b48 --- /dev/null +++ b/common/api/protoc/readme.txt @@ -0,0 +1,15 @@ +Protocol Buffers - Google's data interchange format +Copyright 2008 Google Inc. +https://developers.google.com/protocol-buffers/ + +This package contains a precompiled binary version of the protocol buffer +compiler (protoc). This binary is intended for users who want to use Protocol +Buffers in languages other than C++ but do not want to compile protoc +themselves. To install, simply place this binary somewhere in your PATH. + +If you intend to use the included well known types then don't forget to +copy the contents of the 'include' directory somewhere as well, for example +into '/usr/local/include/'. + +Please refer to our official github site for more installation instructions: + https://github.com/protocolbuffers/protobuf diff --git a/common/api/v1/build.sh b/common/api/v1/build.sh new file mode 100644 index 000000000..72c82fa61 --- /dev/null +++ b/common/api/v1/build.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# 安装protoc和protoc-gen-go插件 +# +# 注意: +# grpc包引入github.com/golang/protobuf/proto v1.2.0 +# protoc-gen-go插件和引入proto包的版本必须保持一致 +# +# github.com/golang/protobuf/ +# protoc-gen-go:在pb.go文件中插入proto.ProtoPackageIsVersionX +# proto:在lib.go中定义ProtoPackageIsVersionX +# +# ProtoPackageIsVersion并非表示proto2/proto3 + +PROTOC=../protoc + +${PROTOC}/bin/protoc \ +--plugin=protoc-gen-go=${PROTOC}/bin/protoc-gen-go \ +--go_out=plugins=grpc:. \ +--proto_path=${PROTOC}/include \ +--proto_path=. \ +model.proto client.proto service.proto routing.proto ratelimit.proto circuitbreaker.proto configrelease.proto \ +platform.proto request.proto response.proto grpcapi.proto \ No newline at end of file diff --git a/common/api/v1/circuitbreaker.pb.go b/common/api/v1/circuitbreaker.pb.go new file mode 100644 index 000000000..f9141c7dd --- /dev/null +++ b/common/api/v1/circuitbreaker.pb.go @@ -0,0 +1,1081 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: circuitbreaker.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import duration "github.com/golang/protobuf/ptypes/duration" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +// 主动探测配置 +type RecoverConfig_OutlierDetectWhen int32 + +const ( + // 不开启监控探测 + RecoverConfig_NEVER RecoverConfig_OutlierDetectWhen = 0 + // 只有在熔断恢复时才开启健康探测 + RecoverConfig_ON_RECOVER RecoverConfig_OutlierDetectWhen = 1 + // 一直开启健康探测 + RecoverConfig_ALWAYS RecoverConfig_OutlierDetectWhen = 2 +) + +var RecoverConfig_OutlierDetectWhen_name = map[int32]string{ + 0: "NEVER", + 1: "ON_RECOVER", + 2: "ALWAYS", +} +var RecoverConfig_OutlierDetectWhen_value = map[string]int32{ + "NEVER": 0, + "ON_RECOVER": 1, + "ALWAYS": 2, +} + +func (x RecoverConfig_OutlierDetectWhen) String() string { + return proto.EnumName(RecoverConfig_OutlierDetectWhen_name, int32(x)) +} +func (RecoverConfig_OutlierDetectWhen) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{2, 0} +} + +// 需要进行熔断的资源 +// 支持SUBSET(子集群),以及INSTANCE(单个实例),默认为SUBSET +type DestinationSet_Resource int32 + +const ( + // 针对实例分组进行熔断 + DestinationSet_SUBSET DestinationSet_Resource = 0 + // 针对实例进行熔断 + DestinationSet_INSTANCE DestinationSet_Resource = 1 +) + +var DestinationSet_Resource_name = map[int32]string{ + 0: "SUBSET", + 1: "INSTANCE", +} +var DestinationSet_Resource_value = map[string]int32{ + "SUBSET": 0, + "INSTANCE": 1, +} + +func (x DestinationSet_Resource) String() string { + return proto.EnumName(DestinationSet_Resource_name, int32(x)) +} +func (DestinationSet_Resource) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{4, 0} +} + +// 熔断决策类型,支持GLOBAL(分布式决策)以及LOCAL(本地决策),默认GLOBAL +// 当指定为GLOBAL时,则会定期上报统计数据并根据汇总数据进行熔断决策 +type DestinationSet_Type int32 + +const ( + DestinationSet_GLOBAL DestinationSet_Type = 0 + DestinationSet_LOCAL DestinationSet_Type = 1 +) + +var DestinationSet_Type_name = map[int32]string{ + 0: "GLOBAL", + 1: "LOCAL", +} +var DestinationSet_Type_value = map[string]int32{ + "GLOBAL": 0, + "LOCAL": 1, +} + +func (x DestinationSet_Type) String() string { + return proto.EnumName(DestinationSet_Type_name, int32(x)) +} +func (DestinationSet_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{4, 1} +} + +// 熔断范围,是否扩散针对相同服务下所有接口进行熔断 +type DestinationSet_Scope int32 + +const ( + // 触发熔断条件,扩散熔断所有接口 + DestinationSet_ALL DestinationSet_Scope = 0 + // 触发熔断条件,只熔断当前接口 + DestinationSet_CURRENT DestinationSet_Scope = 1 +) + +var DestinationSet_Scope_name = map[int32]string{ + 0: "ALL", + 1: "CURRENT", +} +var DestinationSet_Scope_value = map[string]int32{ + "ALL": 0, + "CURRENT": 1, +} + +func (x DestinationSet_Scope) String() string { + return proto.EnumName(DestinationSet_Scope_name, int32(x)) +} +func (DestinationSet_Scope) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{4, 2} +} + +// 单个熔断规则定义 +type CircuitBreaker struct { + Id *wrappers.StringValue `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // 规则版本 + Version *wrappers.StringValue `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // 规则名 + Name *wrappers.StringValue `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // 规则命名空间 + Namespace *wrappers.StringValue `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` + // 规则所属服务 + Service *wrappers.StringValue `protobuf:"bytes,5,opt,name=service,proto3" json:"service,omitempty"` + ServiceNamespace *wrappers.StringValue `protobuf:"bytes,6,opt,name=service_namespace,json=serviceNamespace,proto3" json:"service_namespace,omitempty"` + // 熔断规则可以分为被调规则和主调规则 + // 被调规则针对所有的指定主调生效,假如不指定则对所有的主调生效 + // 主调规则为当前主调方的规则,假如不指定则针对所有被调生效 + Inbounds []*CbRule `protobuf:"bytes,7,rep,name=inbounds,proto3" json:"inbounds,omitempty"` + Outbounds []*CbRule `protobuf:"bytes,8,rep,name=outbounds,proto3" json:"outbounds,omitempty"` + Token *wrappers.StringValue `protobuf:"bytes,9,opt,name=token,proto3" json:"token,omitempty"` + Owners *wrappers.StringValue `protobuf:"bytes,10,opt,name=owners,proto3" json:"owners,omitempty"` + // 业务 + Business *wrappers.StringValue `protobuf:"bytes,11,opt,name=business,proto3" json:"business,omitempty"` + // 部门 + Department *wrappers.StringValue `protobuf:"bytes,12,opt,name=department,proto3" json:"department,omitempty"` + // 规则描述 + Comment *wrappers.StringValue `protobuf:"bytes,13,opt,name=comment,proto3" json:"comment,omitempty"` + Ctime *wrappers.StringValue `protobuf:"bytes,14,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *wrappers.StringValue `protobuf:"bytes,15,opt,name=mtime,proto3" json:"mtime,omitempty"` + Revision *wrappers.StringValue `protobuf:"bytes,16,opt,name=revision,proto3" json:"revision,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CircuitBreaker) Reset() { *m = CircuitBreaker{} } +func (m *CircuitBreaker) String() string { return proto.CompactTextString(m) } +func (*CircuitBreaker) ProtoMessage() {} +func (*CircuitBreaker) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{0} +} +func (m *CircuitBreaker) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CircuitBreaker.Unmarshal(m, b) +} +func (m *CircuitBreaker) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CircuitBreaker.Marshal(b, m, deterministic) +} +func (dst *CircuitBreaker) XXX_Merge(src proto.Message) { + xxx_messageInfo_CircuitBreaker.Merge(dst, src) +} +func (m *CircuitBreaker) XXX_Size() int { + return xxx_messageInfo_CircuitBreaker.Size(m) +} +func (m *CircuitBreaker) XXX_DiscardUnknown() { + xxx_messageInfo_CircuitBreaker.DiscardUnknown(m) +} + +var xxx_messageInfo_CircuitBreaker proto.InternalMessageInfo + +func (m *CircuitBreaker) GetId() *wrappers.StringValue { + if m != nil { + return m.Id + } + return nil +} + +func (m *CircuitBreaker) GetVersion() *wrappers.StringValue { + if m != nil { + return m.Version + } + return nil +} + +func (m *CircuitBreaker) GetName() *wrappers.StringValue { + if m != nil { + return m.Name + } + return nil +} + +func (m *CircuitBreaker) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *CircuitBreaker) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *CircuitBreaker) GetServiceNamespace() *wrappers.StringValue { + if m != nil { + return m.ServiceNamespace + } + return nil +} + +func (m *CircuitBreaker) GetInbounds() []*CbRule { + if m != nil { + return m.Inbounds + } + return nil +} + +func (m *CircuitBreaker) GetOutbounds() []*CbRule { + if m != nil { + return m.Outbounds + } + return nil +} + +func (m *CircuitBreaker) GetToken() *wrappers.StringValue { + if m != nil { + return m.Token + } + return nil +} + +func (m *CircuitBreaker) GetOwners() *wrappers.StringValue { + if m != nil { + return m.Owners + } + return nil +} + +func (m *CircuitBreaker) GetBusiness() *wrappers.StringValue { + if m != nil { + return m.Business + } + return nil +} + +func (m *CircuitBreaker) GetDepartment() *wrappers.StringValue { + if m != nil { + return m.Department + } + return nil +} + +func (m *CircuitBreaker) GetComment() *wrappers.StringValue { + if m != nil { + return m.Comment + } + return nil +} + +func (m *CircuitBreaker) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *CircuitBreaker) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +func (m *CircuitBreaker) GetRevision() *wrappers.StringValue { + if m != nil { + return m.Revision + } + return nil +} + +// 主调匹配规则 +type SourceMatcher struct { + // 主调命名空间以及服务名,可以为*,代表全匹配 + Service *wrappers.StringValue `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Namespace *wrappers.StringValue `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // 可选,主调业务标签,用于匹配是否使用该熔断规则,可放置用户的接口信息等 + Labels map[string]*MatchString `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SourceMatcher) Reset() { *m = SourceMatcher{} } +func (m *SourceMatcher) String() string { return proto.CompactTextString(m) } +func (*SourceMatcher) ProtoMessage() {} +func (*SourceMatcher) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{1} +} +func (m *SourceMatcher) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SourceMatcher.Unmarshal(m, b) +} +func (m *SourceMatcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SourceMatcher.Marshal(b, m, deterministic) +} +func (dst *SourceMatcher) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceMatcher.Merge(dst, src) +} +func (m *SourceMatcher) XXX_Size() int { + return xxx_messageInfo_SourceMatcher.Size(m) +} +func (m *SourceMatcher) XXX_DiscardUnknown() { + xxx_messageInfo_SourceMatcher.DiscardUnknown(m) +} + +var xxx_messageInfo_SourceMatcher proto.InternalMessageInfo + +func (m *SourceMatcher) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *SourceMatcher) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *SourceMatcher) GetLabels() map[string]*MatchString { + if m != nil { + return m.Labels + } + return nil +} + +// 熔断恢复配置 +type RecoverConfig struct { + // 触发熔断后到半开状态之间的等待间隔 + SleepWindow *duration.Duration `protobuf:"bytes,1,opt,name=sleepWindow,proto3" json:"sleepWindow,omitempty"` + // 半开后,最多重试多少次恢复 + MaxRetryAfterHalfOpen *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=maxRetryAfterHalfOpen,proto3" json:"maxRetryAfterHalfOpen,omitempty"` + // 半开后放量的最大百分比 + RequestRateAfterHalfOpen []*wrappers.UInt32Value `protobuf:"bytes,3,rep,name=requestRateAfterHalfOpen,proto3" json:"requestRateAfterHalfOpen,omitempty"` + // 熔断器半开到关闭所必须的最少成功率,默认100% + SuccessRateToClose *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=successRateToClose,proto3" json:"successRateToClose,omitempty"` + // 半开后最大放量数(用户不配置最大百分比时默认使用该配置) + RequestCountAfterHalfOpen *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=requestCountAfterHalfOpen,proto3" json:"requestCountAfterHalfOpen,omitempty"` + OutlierDetectWhen RecoverConfig_OutlierDetectWhen `protobuf:"varint,6,opt,name=outlierDetectWhen,proto3,enum=v1.RecoverConfig_OutlierDetectWhen" json:"outlierDetectWhen,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RecoverConfig) Reset() { *m = RecoverConfig{} } +func (m *RecoverConfig) String() string { return proto.CompactTextString(m) } +func (*RecoverConfig) ProtoMessage() {} +func (*RecoverConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{2} +} +func (m *RecoverConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RecoverConfig.Unmarshal(m, b) +} +func (m *RecoverConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RecoverConfig.Marshal(b, m, deterministic) +} +func (dst *RecoverConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_RecoverConfig.Merge(dst, src) +} +func (m *RecoverConfig) XXX_Size() int { + return xxx_messageInfo_RecoverConfig.Size(m) +} +func (m *RecoverConfig) XXX_DiscardUnknown() { + xxx_messageInfo_RecoverConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_RecoverConfig proto.InternalMessageInfo + +func (m *RecoverConfig) GetSleepWindow() *duration.Duration { + if m != nil { + return m.SleepWindow + } + return nil +} + +func (m *RecoverConfig) GetMaxRetryAfterHalfOpen() *wrappers.UInt32Value { + if m != nil { + return m.MaxRetryAfterHalfOpen + } + return nil +} + +func (m *RecoverConfig) GetRequestRateAfterHalfOpen() []*wrappers.UInt32Value { + if m != nil { + return m.RequestRateAfterHalfOpen + } + return nil +} + +func (m *RecoverConfig) GetSuccessRateToClose() *wrappers.UInt32Value { + if m != nil { + return m.SuccessRateToClose + } + return nil +} + +func (m *RecoverConfig) GetRequestCountAfterHalfOpen() *wrappers.UInt32Value { + if m != nil { + return m.RequestCountAfterHalfOpen + } + return nil +} + +func (m *RecoverConfig) GetOutlierDetectWhen() RecoverConfig_OutlierDetectWhen { + if m != nil { + return m.OutlierDetectWhen + } + return RecoverConfig_NEVER +} + +// 熔断策略 +type CbPolicy struct { + ErrorRate *CbPolicy_ErrRateConfig `protobuf:"bytes,1,opt,name=errorRate,proto3" json:"errorRate,omitempty"` + SlowRate *CbPolicy_SlowRateConfig `protobuf:"bytes,2,opt,name=slowRate,proto3" json:"slowRate,omitempty"` + // 熔断的决策周期,多久触发一次熔断决策 + JudgeDuration *duration.Duration `protobuf:"bytes,3,opt,name=judgeDuration,proto3" json:"judgeDuration,omitempty"` + // 最大熔断比例,超过多少比例后不会继续熔断 + MaxEjectionPercent *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=maxEjectionPercent,proto3" json:"maxEjectionPercent,omitempty"` + Consecutive *CbPolicy_ConsecutiveErrConfig `protobuf:"bytes,5,opt,name=consecutive,proto3" json:"consecutive,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CbPolicy) Reset() { *m = CbPolicy{} } +func (m *CbPolicy) String() string { return proto.CompactTextString(m) } +func (*CbPolicy) ProtoMessage() {} +func (*CbPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{3} +} +func (m *CbPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CbPolicy.Unmarshal(m, b) +} +func (m *CbPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CbPolicy.Marshal(b, m, deterministic) +} +func (dst *CbPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_CbPolicy.Merge(dst, src) +} +func (m *CbPolicy) XXX_Size() int { + return xxx_messageInfo_CbPolicy.Size(m) +} +func (m *CbPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_CbPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_CbPolicy proto.InternalMessageInfo + +func (m *CbPolicy) GetErrorRate() *CbPolicy_ErrRateConfig { + if m != nil { + return m.ErrorRate + } + return nil +} + +func (m *CbPolicy) GetSlowRate() *CbPolicy_SlowRateConfig { + if m != nil { + return m.SlowRate + } + return nil +} + +func (m *CbPolicy) GetJudgeDuration() *duration.Duration { + if m != nil { + return m.JudgeDuration + } + return nil +} + +func (m *CbPolicy) GetMaxEjectionPercent() *wrappers.UInt32Value { + if m != nil { + return m.MaxEjectionPercent + } + return nil +} + +func (m *CbPolicy) GetConsecutive() *CbPolicy_ConsecutiveErrConfig { + if m != nil { + return m.Consecutive + } + return nil +} + +// 错误率熔断配置 +type CbPolicy_ErrRateConfig struct { + // 是否启用错误率配置 + Enable *wrappers.BoolValue `protobuf:"bytes,1,opt,name=enable,proto3" json:"enable,omitempty"` + // 触发错误率熔断的最低请求阈值 + RequestVolumeThreshold *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=requestVolumeThreshold,proto3" json:"requestVolumeThreshold,omitempty"` + // 可选。触发保持状态的错误率阈值,假如不配置,则默认不会进入Preserved状态 + ErrorRateToPreserved *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=errorRateToPreserved,proto3" json:"errorRateToPreserved,omitempty"` + // 触发熔断的错误率阈值 + ErrorRateToOpen *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=errorRateToOpen,proto3" json:"errorRateToOpen,omitempty"` + Specials []*CbPolicy_ErrRateConfig_SpecialConfig `protobuf:"bytes,5,rep,name=specials,proto3" json:"specials,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CbPolicy_ErrRateConfig) Reset() { *m = CbPolicy_ErrRateConfig{} } +func (m *CbPolicy_ErrRateConfig) String() string { return proto.CompactTextString(m) } +func (*CbPolicy_ErrRateConfig) ProtoMessage() {} +func (*CbPolicy_ErrRateConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{3, 0} +} +func (m *CbPolicy_ErrRateConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CbPolicy_ErrRateConfig.Unmarshal(m, b) +} +func (m *CbPolicy_ErrRateConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CbPolicy_ErrRateConfig.Marshal(b, m, deterministic) +} +func (dst *CbPolicy_ErrRateConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_CbPolicy_ErrRateConfig.Merge(dst, src) +} +func (m *CbPolicy_ErrRateConfig) XXX_Size() int { + return xxx_messageInfo_CbPolicy_ErrRateConfig.Size(m) +} +func (m *CbPolicy_ErrRateConfig) XXX_DiscardUnknown() { + xxx_messageInfo_CbPolicy_ErrRateConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_CbPolicy_ErrRateConfig proto.InternalMessageInfo + +func (m *CbPolicy_ErrRateConfig) GetEnable() *wrappers.BoolValue { + if m != nil { + return m.Enable + } + return nil +} + +func (m *CbPolicy_ErrRateConfig) GetRequestVolumeThreshold() *wrappers.UInt32Value { + if m != nil { + return m.RequestVolumeThreshold + } + return nil +} + +func (m *CbPolicy_ErrRateConfig) GetErrorRateToPreserved() *wrappers.UInt32Value { + if m != nil { + return m.ErrorRateToPreserved + } + return nil +} + +func (m *CbPolicy_ErrRateConfig) GetErrorRateToOpen() *wrappers.UInt32Value { + if m != nil { + return m.ErrorRateToOpen + } + return nil +} + +func (m *CbPolicy_ErrRateConfig) GetSpecials() []*CbPolicy_ErrRateConfig_SpecialConfig { + if m != nil { + return m.Specials + } + return nil +} + +// 错误码相关特定配置 +type CbPolicy_ErrRateConfig_SpecialConfig struct { + // 熔断关心的错误类型,用户可以自己定义 + Type *wrappers.StringValue `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + ErrorCodes []*wrappers.Int64Value `protobuf:"bytes,2,rep,name=errorCodes,proto3" json:"errorCodes,omitempty"` + ErrorRateToPreserved *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=errorRateToPreserved,proto3" json:"errorRateToPreserved,omitempty"` + ErrorRateToOpen *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=errorRateToOpen,proto3" json:"errorRateToOpen,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CbPolicy_ErrRateConfig_SpecialConfig) Reset() { *m = CbPolicy_ErrRateConfig_SpecialConfig{} } +func (m *CbPolicy_ErrRateConfig_SpecialConfig) String() string { return proto.CompactTextString(m) } +func (*CbPolicy_ErrRateConfig_SpecialConfig) ProtoMessage() {} +func (*CbPolicy_ErrRateConfig_SpecialConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{3, 0, 0} +} +func (m *CbPolicy_ErrRateConfig_SpecialConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CbPolicy_ErrRateConfig_SpecialConfig.Unmarshal(m, b) +} +func (m *CbPolicy_ErrRateConfig_SpecialConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CbPolicy_ErrRateConfig_SpecialConfig.Marshal(b, m, deterministic) +} +func (dst *CbPolicy_ErrRateConfig_SpecialConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_CbPolicy_ErrRateConfig_SpecialConfig.Merge(dst, src) +} +func (m *CbPolicy_ErrRateConfig_SpecialConfig) XXX_Size() int { + return xxx_messageInfo_CbPolicy_ErrRateConfig_SpecialConfig.Size(m) +} +func (m *CbPolicy_ErrRateConfig_SpecialConfig) XXX_DiscardUnknown() { + xxx_messageInfo_CbPolicy_ErrRateConfig_SpecialConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_CbPolicy_ErrRateConfig_SpecialConfig proto.InternalMessageInfo + +func (m *CbPolicy_ErrRateConfig_SpecialConfig) GetType() *wrappers.StringValue { + if m != nil { + return m.Type + } + return nil +} + +func (m *CbPolicy_ErrRateConfig_SpecialConfig) GetErrorCodes() []*wrappers.Int64Value { + if m != nil { + return m.ErrorCodes + } + return nil +} + +func (m *CbPolicy_ErrRateConfig_SpecialConfig) GetErrorRateToPreserved() *wrappers.UInt32Value { + if m != nil { + return m.ErrorRateToPreserved + } + return nil +} + +func (m *CbPolicy_ErrRateConfig_SpecialConfig) GetErrorRateToOpen() *wrappers.UInt32Value { + if m != nil { + return m.ErrorRateToOpen + } + return nil +} + +// 慢调用率熔断策略配置 +type CbPolicy_SlowRateConfig struct { + // 是否启用慢调用率配置 + Enable *wrappers.BoolValue `protobuf:"bytes,1,opt,name=enable,proto3" json:"enable,omitempty"` + // 最大响应时间,超过该时间属于慢调用请求 + MaxRt *duration.Duration `protobuf:"bytes,2,opt,name=maxRt,proto3" json:"maxRt,omitempty"` + // 可选。触发保持状态的超时率阈值,假如不配置,则默认不会进入Preserved状态 + SlowRateToPreserved *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=slowRateToPreserved,proto3" json:"slowRateToPreserved,omitempty"` + // 触发熔断的超时率阈值 + SlowRateToOpen *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=slowRateToOpen,proto3" json:"slowRateToOpen,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CbPolicy_SlowRateConfig) Reset() { *m = CbPolicy_SlowRateConfig{} } +func (m *CbPolicy_SlowRateConfig) String() string { return proto.CompactTextString(m) } +func (*CbPolicy_SlowRateConfig) ProtoMessage() {} +func (*CbPolicy_SlowRateConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{3, 1} +} +func (m *CbPolicy_SlowRateConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CbPolicy_SlowRateConfig.Unmarshal(m, b) +} +func (m *CbPolicy_SlowRateConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CbPolicy_SlowRateConfig.Marshal(b, m, deterministic) +} +func (dst *CbPolicy_SlowRateConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_CbPolicy_SlowRateConfig.Merge(dst, src) +} +func (m *CbPolicy_SlowRateConfig) XXX_Size() int { + return xxx_messageInfo_CbPolicy_SlowRateConfig.Size(m) +} +func (m *CbPolicy_SlowRateConfig) XXX_DiscardUnknown() { + xxx_messageInfo_CbPolicy_SlowRateConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_CbPolicy_SlowRateConfig proto.InternalMessageInfo + +func (m *CbPolicy_SlowRateConfig) GetEnable() *wrappers.BoolValue { + if m != nil { + return m.Enable + } + return nil +} + +func (m *CbPolicy_SlowRateConfig) GetMaxRt() *duration.Duration { + if m != nil { + return m.MaxRt + } + return nil +} + +func (m *CbPolicy_SlowRateConfig) GetSlowRateToPreserved() *wrappers.UInt32Value { + if m != nil { + return m.SlowRateToPreserved + } + return nil +} + +func (m *CbPolicy_SlowRateConfig) GetSlowRateToOpen() *wrappers.UInt32Value { + if m != nil { + return m.SlowRateToOpen + } + return nil +} + +// 连续错误数熔断配置 +type CbPolicy_ConsecutiveErrConfig struct { + // 是否启用连续错误数配置 + Enable *wrappers.BoolValue `protobuf:"bytes,1,opt,name=enable,proto3" json:"enable,omitempty"` + // 连续错误数阈值,进入Preserved状态 + ConsecutiveErrorToPreserved *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=consecutiveErrorToPreserved,proto3" json:"consecutiveErrorToPreserved,omitempty"` + // 连续错误数阈值,进入Open状态 + ConsecutiveErrorToOpen *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=consecutiveErrorToOpen,proto3" json:"consecutiveErrorToOpen,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CbPolicy_ConsecutiveErrConfig) Reset() { *m = CbPolicy_ConsecutiveErrConfig{} } +func (m *CbPolicy_ConsecutiveErrConfig) String() string { return proto.CompactTextString(m) } +func (*CbPolicy_ConsecutiveErrConfig) ProtoMessage() {} +func (*CbPolicy_ConsecutiveErrConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{3, 2} +} +func (m *CbPolicy_ConsecutiveErrConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CbPolicy_ConsecutiveErrConfig.Unmarshal(m, b) +} +func (m *CbPolicy_ConsecutiveErrConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CbPolicy_ConsecutiveErrConfig.Marshal(b, m, deterministic) +} +func (dst *CbPolicy_ConsecutiveErrConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_CbPolicy_ConsecutiveErrConfig.Merge(dst, src) +} +func (m *CbPolicy_ConsecutiveErrConfig) XXX_Size() int { + return xxx_messageInfo_CbPolicy_ConsecutiveErrConfig.Size(m) +} +func (m *CbPolicy_ConsecutiveErrConfig) XXX_DiscardUnknown() { + xxx_messageInfo_CbPolicy_ConsecutiveErrConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_CbPolicy_ConsecutiveErrConfig proto.InternalMessageInfo + +func (m *CbPolicy_ConsecutiveErrConfig) GetEnable() *wrappers.BoolValue { + if m != nil { + return m.Enable + } + return nil +} + +func (m *CbPolicy_ConsecutiveErrConfig) GetConsecutiveErrorToPreserved() *wrappers.UInt32Value { + if m != nil { + return m.ConsecutiveErrorToPreserved + } + return nil +} + +func (m *CbPolicy_ConsecutiveErrConfig) GetConsecutiveErrorToOpen() *wrappers.UInt32Value { + if m != nil { + return m.ConsecutiveErrorToOpen + } + return nil +} + +// 目标set的规则 +type DestinationSet struct { + // 被调命名空间以及服务名,可以为*,代表全匹配 + Service *wrappers.StringValue `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Namespace *wrappers.StringValue `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // 可选,SUBSET标识 + Metadata map[string]*MatchString `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Resource DestinationSet_Resource `protobuf:"varint,4,opt,name=resource,proto3,enum=v1.DestinationSet_Resource" json:"resource,omitempty"` + Type DestinationSet_Type `protobuf:"varint,5,opt,name=type,proto3,enum=v1.DestinationSet_Type" json:"type,omitempty"` + Scope DestinationSet_Scope `protobuf:"varint,6,opt,name=scope,proto3,enum=v1.DestinationSet_Scope" json:"scope,omitempty"` + // 熔断数据度量周期 + // 所有的阈值指标按此周期进行统计 + MetricWindow *duration.Duration `protobuf:"bytes,7,opt,name=metricWindow,proto3" json:"metricWindow,omitempty"` + // 熔断数据统计精度,决定数据度量的最小周期 + // 度量滑窗的步长=window/precision + MetricPrecision *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=metricPrecision,proto3" json:"metricPrecision,omitempty"` + // 熔断数据上报周期,对分布式熔断有效 + UpdateInterval *duration.Duration `protobuf:"bytes,9,opt,name=updateInterval,proto3" json:"updateInterval,omitempty"` + // 触发熔断后恢复配置 + Recover *RecoverConfig `protobuf:"bytes,10,opt,name=recover,proto3" json:"recover,omitempty"` + // 熔断策略 + Policy *CbPolicy `protobuf:"bytes,11,opt,name=policy,proto3" json:"policy,omitempty"` + // 被调的接口信息,指定哪些接口会使用该规则 + Method *MatchString `protobuf:"bytes,12,opt,name=method,proto3" json:"method,omitempty"` + // 返回码,指定哪些返回码会使用该规则 + ErrorCodes []*wrappers.Int64Value `protobuf:"bytes,13,rep,name=errorCodes,proto3" json:"errorCodes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DestinationSet) Reset() { *m = DestinationSet{} } +func (m *DestinationSet) String() string { return proto.CompactTextString(m) } +func (*DestinationSet) ProtoMessage() {} +func (*DestinationSet) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{4} +} +func (m *DestinationSet) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DestinationSet.Unmarshal(m, b) +} +func (m *DestinationSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DestinationSet.Marshal(b, m, deterministic) +} +func (dst *DestinationSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_DestinationSet.Merge(dst, src) +} +func (m *DestinationSet) XXX_Size() int { + return xxx_messageInfo_DestinationSet.Size(m) +} +func (m *DestinationSet) XXX_DiscardUnknown() { + xxx_messageInfo_DestinationSet.DiscardUnknown(m) +} + +var xxx_messageInfo_DestinationSet proto.InternalMessageInfo + +func (m *DestinationSet) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *DestinationSet) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *DestinationSet) GetMetadata() map[string]*MatchString { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *DestinationSet) GetResource() DestinationSet_Resource { + if m != nil { + return m.Resource + } + return DestinationSet_SUBSET +} + +func (m *DestinationSet) GetType() DestinationSet_Type { + if m != nil { + return m.Type + } + return DestinationSet_GLOBAL +} + +func (m *DestinationSet) GetScope() DestinationSet_Scope { + if m != nil { + return m.Scope + } + return DestinationSet_ALL +} + +func (m *DestinationSet) GetMetricWindow() *duration.Duration { + if m != nil { + return m.MetricWindow + } + return nil +} + +func (m *DestinationSet) GetMetricPrecision() *wrappers.UInt32Value { + if m != nil { + return m.MetricPrecision + } + return nil +} + +func (m *DestinationSet) GetUpdateInterval() *duration.Duration { + if m != nil { + return m.UpdateInterval + } + return nil +} + +func (m *DestinationSet) GetRecover() *RecoverConfig { + if m != nil { + return m.Recover + } + return nil +} + +func (m *DestinationSet) GetPolicy() *CbPolicy { + if m != nil { + return m.Policy + } + return nil +} + +func (m *DestinationSet) GetMethod() *MatchString { + if m != nil { + return m.Method + } + return nil +} + +func (m *DestinationSet) GetErrorCodes() []*wrappers.Int64Value { + if m != nil { + return m.ErrorCodes + } + return nil +} + +// 具体熔断规则 +type CbRule struct { + // 如果匹配Source规则,按照Destination进行熔断 + // 多个Source之间的关系为或 + Sources []*SourceMatcher `protobuf:"bytes,1,rep,name=sources,proto3" json:"sources,omitempty"` + Destinations []*DestinationSet `protobuf:"bytes,2,rep,name=destinations,proto3" json:"destinations,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *CbRule) Reset() { *m = CbRule{} } +func (m *CbRule) String() string { return proto.CompactTextString(m) } +func (*CbRule) ProtoMessage() {} +func (*CbRule) Descriptor() ([]byte, []int) { + return fileDescriptor_circuitbreaker_893772a31588c4ee, []int{5} +} +func (m *CbRule) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_CbRule.Unmarshal(m, b) +} +func (m *CbRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_CbRule.Marshal(b, m, deterministic) +} +func (dst *CbRule) XXX_Merge(src proto.Message) { + xxx_messageInfo_CbRule.Merge(dst, src) +} +func (m *CbRule) XXX_Size() int { + return xxx_messageInfo_CbRule.Size(m) +} +func (m *CbRule) XXX_DiscardUnknown() { + xxx_messageInfo_CbRule.DiscardUnknown(m) +} + +var xxx_messageInfo_CbRule proto.InternalMessageInfo + +func (m *CbRule) GetSources() []*SourceMatcher { + if m != nil { + return m.Sources + } + return nil +} + +func (m *CbRule) GetDestinations() []*DestinationSet { + if m != nil { + return m.Destinations + } + return nil +} + +func init() { + proto.RegisterType((*CircuitBreaker)(nil), "v1.CircuitBreaker") + proto.RegisterType((*SourceMatcher)(nil), "v1.SourceMatcher") + proto.RegisterMapType((map[string]*MatchString)(nil), "v1.SourceMatcher.LabelsEntry") + proto.RegisterType((*RecoverConfig)(nil), "v1.RecoverConfig") + proto.RegisterType((*CbPolicy)(nil), "v1.CbPolicy") + proto.RegisterType((*CbPolicy_ErrRateConfig)(nil), "v1.CbPolicy.ErrRateConfig") + proto.RegisterType((*CbPolicy_ErrRateConfig_SpecialConfig)(nil), "v1.CbPolicy.ErrRateConfig.SpecialConfig") + proto.RegisterType((*CbPolicy_SlowRateConfig)(nil), "v1.CbPolicy.SlowRateConfig") + proto.RegisterType((*CbPolicy_ConsecutiveErrConfig)(nil), "v1.CbPolicy.ConsecutiveErrConfig") + proto.RegisterType((*DestinationSet)(nil), "v1.DestinationSet") + proto.RegisterMapType((map[string]*MatchString)(nil), "v1.DestinationSet.MetadataEntry") + proto.RegisterType((*CbRule)(nil), "v1.CbRule") + proto.RegisterEnum("v1.RecoverConfig_OutlierDetectWhen", RecoverConfig_OutlierDetectWhen_name, RecoverConfig_OutlierDetectWhen_value) + proto.RegisterEnum("v1.DestinationSet_Resource", DestinationSet_Resource_name, DestinationSet_Resource_value) + proto.RegisterEnum("v1.DestinationSet_Type", DestinationSet_Type_name, DestinationSet_Type_value) + proto.RegisterEnum("v1.DestinationSet_Scope", DestinationSet_Scope_name, DestinationSet_Scope_value) +} + +func init() { + proto.RegisterFile("circuitbreaker.proto", fileDescriptor_circuitbreaker_893772a31588c4ee) +} + +var fileDescriptor_circuitbreaker_893772a31588c4ee = []byte{ + // 1326 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xcd, 0x73, 0x1b, 0xc5, + 0x12, 0x8f, 0x64, 0xeb, 0xc3, 0x2d, 0x4b, 0x91, 0xe7, 0xe5, 0xbd, 0xb7, 0x51, 0x5e, 0x5e, 0x05, + 0x11, 0xc0, 0x55, 0xa1, 0x14, 0xe2, 0x84, 0x90, 0x4a, 0x42, 0x51, 0xf2, 0x5a, 0x80, 0x29, 0x45, + 0x36, 0x2b, 0x25, 0x01, 0x0e, 0xa4, 0x56, 0xbb, 0x6d, 0x7b, 0x93, 0xdd, 0x9d, 0x65, 0x66, 0x56, + 0x8e, 0x6f, 0x9c, 0xb8, 0x50, 0xdc, 0x38, 0xf0, 0x7f, 0xf0, 0xb7, 0x71, 0xe0, 0x46, 0xcd, 0xec, + 0xe8, 0x63, 0xf5, 0x61, 0xd6, 0xe1, 0x00, 0x27, 0x69, 0xb7, 0x7f, 0xbf, 0x9e, 0xde, 0x9e, 0x5f, + 0xf7, 0xf4, 0xc0, 0x15, 0xc7, 0x63, 0x4e, 0xec, 0x89, 0x21, 0x43, 0xfb, 0x15, 0xb2, 0x56, 0xc4, + 0xa8, 0xa0, 0x24, 0x3f, 0xba, 0xd3, 0xf8, 0xff, 0x31, 0xa5, 0xc7, 0x3e, 0xde, 0x56, 0x6f, 0x86, + 0xf1, 0xd1, 0xed, 0x53, 0x66, 0x47, 0x11, 0x32, 0x9e, 0x60, 0x16, 0xed, 0x6e, 0xcc, 0x6c, 0xe1, + 0xd1, 0x50, 0xdb, 0x2b, 0x01, 0x75, 0xd1, 0x4f, 0x1e, 0x9a, 0xbf, 0x15, 0xa1, 0x66, 0x26, 0x2b, + 0xed, 0x26, 0x2b, 0x91, 0xf7, 0x21, 0xef, 0xb9, 0x46, 0xee, 0x46, 0x6e, 0xbb, 0xb2, 0xf3, 0xbf, + 0x56, 0xe2, 0xac, 0x35, 0x76, 0xd6, 0xea, 0x0b, 0xe6, 0x85, 0xc7, 0xcf, 0x6c, 0x3f, 0x46, 0x2b, + 0xef, 0xb9, 0xe4, 0x3e, 0x94, 0x46, 0xc8, 0xb8, 0x47, 0x43, 0x23, 0x9f, 0x81, 0x32, 0x06, 0x93, + 0x0f, 0x60, 0x3d, 0xb4, 0x03, 0x34, 0xd6, 0x32, 0x90, 0x14, 0x92, 0x3c, 0x84, 0x0d, 0xf9, 0xcb, + 0x23, 0xdb, 0x41, 0x63, 0x3d, 0x03, 0x6d, 0x0a, 0x97, 0x51, 0x72, 0x64, 0x23, 0xcf, 0x41, 0xa3, + 0x90, 0x25, 0x4a, 0x0d, 0x26, 0xfb, 0xb0, 0xa5, 0xff, 0xbe, 0x98, 0xae, 0x5d, 0xcc, 0xe0, 0xa1, + 0xae, 0x69, 0xbd, 0x49, 0x08, 0xef, 0x42, 0xd9, 0x0b, 0x87, 0x34, 0x0e, 0x5d, 0x6e, 0x94, 0x6e, + 0xac, 0x6d, 0x57, 0x76, 0xa0, 0x35, 0xba, 0xd3, 0x32, 0x87, 0x56, 0xec, 0xa3, 0x35, 0xb1, 0x91, + 0x6d, 0xd8, 0xa0, 0xb1, 0xd0, 0xc0, 0xf2, 0x02, 0x70, 0x6a, 0x24, 0x3b, 0x50, 0x10, 0xf4, 0x15, + 0x86, 0xc6, 0x46, 0x86, 0x80, 0x12, 0x28, 0xb9, 0x07, 0x45, 0x7a, 0x1a, 0x22, 0xe3, 0x06, 0x64, + 0x20, 0x69, 0x2c, 0x79, 0x00, 0xe5, 0x61, 0xcc, 0xbd, 0x10, 0x39, 0x37, 0x2a, 0x19, 0x78, 0x13, + 0x34, 0x79, 0x0c, 0xe0, 0x62, 0x64, 0x33, 0x11, 0x60, 0x28, 0x8c, 0xcd, 0x0c, 0xdc, 0x19, 0xbc, + 0xdc, 0x36, 0x87, 0x06, 0x8a, 0x5a, 0xcd, 0xb2, 0x6d, 0x1a, 0x2c, 0x33, 0xe3, 0x08, 0x2f, 0x40, + 0xa3, 0x96, 0x25, 0x33, 0x0a, 0x2a, 0x39, 0x81, 0xe2, 0x5c, 0xce, 0xc2, 0x51, 0x50, 0x99, 0x17, + 0x86, 0x23, 0x4f, 0xa9, 0xbf, 0x9e, 0x25, 0x2f, 0x63, 0x74, 0xf3, 0x87, 0x3c, 0x54, 0xfb, 0x34, + 0x66, 0x0e, 0x3e, 0xb1, 0x85, 0x73, 0x82, 0x6c, 0x56, 0xa2, 0xb9, 0x8b, 0x48, 0x34, 0x55, 0x16, + 0xf9, 0x8b, 0x95, 0xc5, 0x87, 0x50, 0xf4, 0xed, 0x21, 0xfa, 0xdc, 0x58, 0x53, 0x42, 0xbb, 0x2e, + 0x85, 0x96, 0x0a, 0xab, 0xd5, 0x55, 0xf6, 0x4e, 0x28, 0xd8, 0x99, 0xa5, 0xc1, 0x8d, 0x2f, 0xa0, + 0x32, 0xf3, 0x9a, 0xd4, 0x61, 0xed, 0x15, 0x9e, 0xa9, 0xa8, 0x37, 0x2c, 0xf9, 0x97, 0xbc, 0x03, + 0x85, 0x91, 0x5c, 0x4b, 0xc7, 0x73, 0x59, 0xba, 0x55, 0x0e, 0x93, 0x38, 0xac, 0xc4, 0xfa, 0x30, + 0xff, 0x20, 0xd7, 0xfc, 0x75, 0x1d, 0xaa, 0x16, 0x3a, 0x74, 0x84, 0xcc, 0xa4, 0xe1, 0x91, 0x77, + 0x4c, 0x1e, 0x41, 0x85, 0xfb, 0x88, 0xd1, 0x73, 0x2f, 0x74, 0xe9, 0xa9, 0x4e, 0xc6, 0xd5, 0x85, + 0x4f, 0xda, 0xd3, 0x5d, 0xcd, 0x9a, 0x45, 0x13, 0x0b, 0xfe, 0x1d, 0xd8, 0xaf, 0x2d, 0x14, 0xec, + 0xac, 0x7d, 0x24, 0x90, 0x7d, 0x6e, 0xfb, 0x47, 0x07, 0x11, 0xae, 0x6e, 0x4e, 0x4f, 0xf7, 0x43, + 0x71, 0x77, 0x27, 0xc9, 0xcc, 0x72, 0x2a, 0xf9, 0x0a, 0x0c, 0x86, 0xdf, 0xc5, 0xc8, 0x85, 0x65, + 0x0b, 0x4c, 0xbb, 0x4d, 0xf2, 0x76, 0xbe, 0xdb, 0x95, 0x6c, 0xd2, 0x05, 0xc2, 0x63, 0xc7, 0x41, + 0xce, 0xa5, 0x6d, 0x40, 0x4d, 0x9f, 0xf2, 0xd5, 0xbd, 0x6d, 0xd6, 0xe7, 0x12, 0x1e, 0xf9, 0x06, + 0xae, 0xea, 0x95, 0x4c, 0x1a, 0x87, 0x22, 0x1d, 0x68, 0x21, 0x83, 0xd3, 0xd5, 0x74, 0xf2, 0x25, + 0x6c, 0xd1, 0x58, 0xf8, 0x1e, 0xb2, 0x3d, 0x14, 0xe8, 0x88, 0xe7, 0x27, 0x18, 0xaa, 0x46, 0x58, + 0xdb, 0x79, 0x5b, 0xee, 0x6e, 0x6a, 0x0b, 0x5b, 0x07, 0xf3, 0x50, 0x6b, 0x91, 0xdd, 0x7c, 0x08, + 0x5b, 0x0b, 0x38, 0xb2, 0x01, 0x85, 0x5e, 0xe7, 0x59, 0xc7, 0xaa, 0x5f, 0x22, 0x35, 0x80, 0x83, + 0xde, 0x0b, 0xab, 0x63, 0x1e, 0xc8, 0xe7, 0x1c, 0x01, 0x28, 0xb6, 0xbb, 0xcf, 0xdb, 0x5f, 0xf7, + 0xeb, 0xf9, 0xe6, 0xef, 0x15, 0x28, 0x9b, 0xc3, 0x43, 0xea, 0x7b, 0xce, 0x19, 0x79, 0x00, 0x1b, + 0xc8, 0x18, 0x65, 0x32, 0x17, 0x5a, 0x2e, 0x8d, 0xa4, 0x63, 0x26, 0x80, 0x56, 0x87, 0x29, 0x5b, + 0x12, 0x9c, 0x35, 0x05, 0x93, 0x8f, 0xa0, 0xcc, 0x7d, 0x7a, 0xaa, 0x88, 0x89, 0x40, 0xae, 0xa5, + 0x88, 0x7d, 0x6d, 0xd4, 0xcc, 0x09, 0x98, 0x7c, 0x02, 0xd5, 0x97, 0xb1, 0x7b, 0x8c, 0x63, 0x11, + 0xea, 0x63, 0xec, 0x1c, 0x95, 0xa6, 0xf1, 0x72, 0xe7, 0x03, 0xfb, 0x75, 0xe7, 0x25, 0x3a, 0xf2, + 0xf1, 0x10, 0x99, 0x23, 0x9b, 0x5c, 0xa6, 0x9d, 0x5f, 0xe4, 0x11, 0x13, 0x2a, 0x0e, 0x0d, 0x39, + 0x3a, 0xb1, 0xf0, 0x46, 0xe3, 0x23, 0xee, 0xad, 0xd4, 0xa7, 0x98, 0x53, 0x7b, 0x87, 0xe9, 0x7d, + 0xb2, 0x66, 0x59, 0x8d, 0x9f, 0x0b, 0x50, 0x4d, 0x65, 0x8a, 0xec, 0x40, 0x11, 0x43, 0x7b, 0xe8, + 0x4f, 0xb3, 0x3a, 0x1f, 0xd8, 0x2e, 0xa5, 0xbe, 0x3e, 0x2a, 0x12, 0x24, 0x19, 0xc0, 0x7f, 0xb4, + 0x8a, 0x9e, 0x51, 0x3f, 0x0e, 0x70, 0x70, 0xc2, 0x90, 0x9f, 0x50, 0xdf, 0xcd, 0x54, 0x81, 0x2b, + 0xb8, 0xe4, 0x10, 0xae, 0x4c, 0x76, 0x6d, 0x40, 0x0f, 0x19, 0xca, 0xee, 0x87, 0xee, 0xca, 0xe9, + 0x61, 0xd6, 0xe7, 0x52, 0x26, 0xf9, 0x14, 0x2e, 0xcf, 0xbc, 0x57, 0x25, 0x92, 0x25, 0xfb, 0xf3, + 0x24, 0xb2, 0x07, 0x65, 0x1e, 0xa1, 0xe3, 0xd9, 0x3e, 0x37, 0x0a, 0xaa, 0x19, 0x6c, 0xaf, 0xd6, + 0x5e, 0xab, 0x9f, 0x40, 0x27, 0x7a, 0xd2, 0xcc, 0xc6, 0x2f, 0xf2, 0x38, 0x98, 0xb5, 0xc9, 0xf9, + 0x48, 0x9c, 0x45, 0xd9, 0xce, 0x02, 0x85, 0x24, 0x8f, 0x00, 0x54, 0x70, 0x26, 0x75, 0x91, 0x1b, + 0x79, 0x15, 0xcb, 0xb5, 0x05, 0xde, 0x7e, 0x28, 0xee, 0xdf, 0xd3, 0x27, 0xed, 0x14, 0xfe, 0xcf, + 0x4d, 0x70, 0xe3, 0xc7, 0x3c, 0xd4, 0xd2, 0x75, 0xf8, 0x46, 0xba, 0xbc, 0x0d, 0x05, 0xd9, 0xdd, + 0x85, 0x96, 0xe1, 0x39, 0x95, 0x9a, 0xe0, 0x48, 0x0f, 0xfe, 0x35, 0x2e, 0xf7, 0x8b, 0x26, 0x64, + 0x19, 0x91, 0xec, 0x41, 0x6d, 0xfa, 0x3a, 0x73, 0x3a, 0xe6, 0x38, 0x8d, 0xef, 0xf3, 0x70, 0x65, + 0x59, 0x29, 0xbf, 0x51, 0x4e, 0xbe, 0x85, 0x6b, 0x4e, 0xca, 0x17, 0x65, 0xb3, 0x9f, 0x9a, 0xa5, + 0x60, 0xcf, 0x73, 0x20, 0x7b, 0xc1, 0xa2, 0x59, 0x1f, 0x9b, 0x19, 0x7a, 0xc1, 0x72, 0x6e, 0xf3, + 0xa7, 0x12, 0xd4, 0xf6, 0x90, 0x0b, 0x2f, 0x54, 0xfb, 0xd5, 0x47, 0xf1, 0xb7, 0xcc, 0x4e, 0x8f, + 0xa1, 0x1c, 0xa0, 0xb0, 0x5d, 0x5b, 0xd8, 0x7a, 0x0a, 0xb8, 0x21, 0x0b, 0x3f, 0x1d, 0x59, 0xeb, + 0x89, 0x86, 0x24, 0x03, 0xd4, 0x84, 0x21, 0x4f, 0x1e, 0x86, 0x5c, 0x4d, 0x5a, 0x4a, 0x07, 0xb5, + 0xe4, 0xe4, 0x99, 0x63, 0x5b, 0x1a, 0x62, 0x4d, 0xc0, 0xe4, 0x96, 0xee, 0x0b, 0x05, 0x45, 0xfa, + 0xef, 0x12, 0xd2, 0xe0, 0x2c, 0x1a, 0xb7, 0x84, 0x16, 0x14, 0xb8, 0x43, 0x23, 0xd4, 0x27, 0xb5, + 0xb1, 0x04, 0xdd, 0x97, 0x76, 0x2b, 0x81, 0x91, 0x8f, 0x61, 0x33, 0x40, 0xc1, 0x3c, 0x47, 0xcf, + 0x5e, 0xa5, 0x3f, 0xab, 0x95, 0x14, 0x5c, 0x96, 0x7c, 0xf2, 0x7c, 0xc8, 0xd0, 0x49, 0xa6, 0xe2, + 0x72, 0x96, 0x92, 0x9f, 0x23, 0x91, 0x36, 0xd4, 0xe2, 0xc8, 0xb5, 0x05, 0xee, 0x87, 0x02, 0xd9, + 0xc8, 0xf6, 0xf5, 0x0d, 0xe7, 0x9c, 0x40, 0xe6, 0x08, 0xe4, 0x16, 0x94, 0x58, 0x32, 0x92, 0xe8, + 0x8b, 0xce, 0xd6, 0xc2, 0x94, 0x62, 0x8d, 0x11, 0xe4, 0x26, 0x14, 0x23, 0xd5, 0xad, 0xf5, 0xe5, + 0x66, 0x73, 0xb6, 0x83, 0x5b, 0xda, 0x46, 0xde, 0x83, 0x62, 0x80, 0xe2, 0x84, 0xba, 0xfa, 0x1a, + 0xb3, 0x30, 0xd5, 0x6a, 0xf3, 0x5c, 0x23, 0xae, 0x5e, 0xa8, 0x11, 0x37, 0xba, 0x50, 0x4d, 0x69, + 0xe6, 0xaf, 0x4d, 0xd7, 0x37, 0xa1, 0x3c, 0xd6, 0x90, 0x9c, 0x9f, 0xfa, 0x4f, 0x77, 0xfb, 0x9d, + 0x41, 0xfd, 0x12, 0xd9, 0x84, 0xf2, 0x7e, 0xaf, 0x3f, 0x68, 0xf7, 0xcc, 0x4e, 0x3d, 0xd7, 0xbc, + 0x0e, 0xeb, 0x52, 0x34, 0x12, 0xf1, 0x59, 0xf7, 0x60, 0xb7, 0xdd, 0xad, 0x5f, 0x92, 0x83, 0x58, + 0xf7, 0xc0, 0x6c, 0x77, 0x95, 0xb9, 0xa0, 0x54, 0x42, 0x4a, 0xb0, 0xd6, 0xee, 0x4a, 0x63, 0x05, + 0x4a, 0xe6, 0x53, 0xcb, 0xea, 0xf4, 0x06, 0xf5, 0x5c, 0x33, 0x80, 0x62, 0x72, 0x37, 0x95, 0x49, + 0x4f, 0xd6, 0xe2, 0x46, 0x4e, 0x7d, 0xf5, 0xd6, 0xc2, 0x7d, 0xc2, 0x1a, 0x23, 0xc8, 0x7d, 0xd8, + 0x74, 0xa7, 0x52, 0x1c, 0x1f, 0x58, 0x64, 0x51, 0xa2, 0x56, 0x0a, 0x37, 0x2c, 0xaa, 0x0c, 0xde, + 0xfd, 0x23, 0x00, 0x00, 0xff, 0xff, 0xbb, 0xb0, 0x2d, 0x9f, 0x21, 0x11, 0x00, 0x00, +} diff --git a/common/api/v1/circuitbreaker.proto b/common/api/v1/circuitbreaker.proto new file mode 100644 index 000000000..3051a37f9 --- /dev/null +++ b/common/api/v1/circuitbreaker.proto @@ -0,0 +1,191 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; +import "google/protobuf/duration.proto"; +import "model.proto"; + +//单个熔断规则定义 +message CircuitBreaker { + google.protobuf.StringValue id = 1; + // 规则版本 + google.protobuf.StringValue version = 2; + // 规则名 + google.protobuf.StringValue name = 3; + // 规则命名空间 + google.protobuf.StringValue namespace = 4; + + // 规则所属服务 + google.protobuf.StringValue service = 5; + google.protobuf.StringValue service_namespace = 6; + + //熔断规则可以分为被调规则和主调规则 + //被调规则针对所有的指定主调生效,假如不指定则对所有的主调生效 + //主调规则为当前主调方的规则,假如不指定则针对所有被调生效 + repeated CbRule inbounds = 7; + repeated CbRule outbounds = 8; + + google.protobuf.StringValue token = 9; + google.protobuf.StringValue owners = 10; + // 业务 + google.protobuf.StringValue business = 11; + // 部门 + google.protobuf.StringValue department = 12; + + // 规则描述 + google.protobuf.StringValue comment = 13; + google.protobuf.StringValue ctime = 14; + google.protobuf.StringValue mtime = 15; + google.protobuf.StringValue revision = 16; +} + +// 主调匹配规则 +message SourceMatcher { + // 主调命名空间以及服务名,可以为*,代表全匹配 + google.protobuf.StringValue service = 1; + google.protobuf.StringValue namespace = 2; + // 可选,主调业务标签,用于匹配是否使用该熔断规则,可放置用户的接口信息等 + map labels = 3; +} + +// 熔断恢复配置 +message RecoverConfig { + // 触发熔断后到半开状态之间的等待间隔 + google.protobuf.Duration sleepWindow = 1; + // 半开后,最多重试多少次恢复 + google.protobuf.UInt32Value maxRetryAfterHalfOpen = 2; + // 半开后放量的最大百分比 + repeated google.protobuf.UInt32Value requestRateAfterHalfOpen = 3; + // 熔断器半开到关闭所必须的最少成功率,默认100% + google.protobuf.UInt32Value successRateToClose = 4; + // 半开后最大放量数(用户不配置最大百分比时默认使用该配置) + google.protobuf.UInt32Value requestCountAfterHalfOpen = 5; + //主动探测配置 + enum OutlierDetectWhen { + //不开启监控探测 + NEVER = 0; + //只有在熔断恢复时才开启健康探测 + ON_RECOVER = 1; + //一直开启健康探测 + ALWAYS = 2; + } + OutlierDetectWhen outlierDetectWhen = 6; +} + +// 熔断策略 +message CbPolicy { + // 错误率熔断配置 + message ErrRateConfig { + //是否启用错误率配置 + google.protobuf.BoolValue enable = 1; + // 触发错误率熔断的最低请求阈值 + google.protobuf.UInt32Value requestVolumeThreshold = 2; + // 可选。触发保持状态的错误率阈值,假如不配置,则默认不会进入Preserved状态 + google.protobuf.UInt32Value errorRateToPreserved = 3; + // 触发熔断的错误率阈值 + google.protobuf.UInt32Value errorRateToOpen = 4; + //错误码相关特定配置 + message SpecialConfig { + // 熔断关心的错误类型,用户可以自己定义 + google.protobuf.StringValue type = 1; + repeated google.protobuf.Int64Value errorCodes = 2; + google.protobuf.UInt32Value errorRateToPreserved = 3; + google.protobuf.UInt32Value errorRateToOpen = 4; + } + repeated SpecialConfig specials = 5; + } + ErrRateConfig errorRate = 1; + // 慢调用率熔断策略配置 + message SlowRateConfig { + // 是否启用慢调用率配置 + google.protobuf.BoolValue enable = 1; + // 最大响应时间,超过该时间属于慢调用请求 + google.protobuf.Duration maxRt = 2; + // 可选。触发保持状态的超时率阈值,假如不配置,则默认不会进入Preserved状态 + google.protobuf.UInt32Value slowRateToPreserved = 3; + // 触发熔断的超时率阈值 + google.protobuf.UInt32Value slowRateToOpen = 4; + } + SlowRateConfig slowRate = 2; + // 熔断的决策周期,多久触发一次熔断决策 + google.protobuf.Duration judgeDuration = 3; + //最大熔断比例,超过多少比例后不会继续熔断 + google.protobuf.UInt32Value maxEjectionPercent = 4; + //连续错误数熔断配置 + message ConsecutiveErrConfig { + // 是否启用连续错误数配置 + google.protobuf.BoolValue enable = 1; + // 连续错误数阈值,进入Preserved状态 + google.protobuf.UInt32Value consecutiveErrorToPreserved = 2; + // 连续错误数阈值,进入Open状态 + google.protobuf.UInt32Value consecutiveErrorToOpen = 3; + } + ConsecutiveErrConfig consecutive = 5; +} + +// 目标set的规则 +message DestinationSet { + // 被调命名空间以及服务名,可以为*,代表全匹配 + google.protobuf.StringValue service = 1; + google.protobuf.StringValue namespace = 2; + // 可选,SUBSET标识 + map metadata = 3; + // 需要进行熔断的资源 + // 支持SUBSET(子集群),以及INSTANCE(单个实例),默认为SUBSET + enum Resource { + // 针对实例分组进行熔断 + SUBSET = 0; + // 针对实例进行熔断 + INSTANCE = 1; + } + Resource resource = 4; + // 熔断决策类型,支持GLOBAL(分布式决策)以及LOCAL(本地决策),默认GLOBAL + // 当指定为GLOBAL时,则会定期上报统计数据并根据汇总数据进行熔断决策 + enum Type { + GLOBAL = 0; + LOCAL = 1; + } + Type type = 5; + + //熔断范围,是否扩散针对相同服务下所有接口进行熔断 + enum Scope { + //触发熔断条件,扩散熔断所有接口 + ALL = 0; + //触发熔断条件,只熔断当前接口 + CURRENT = 1; + } + Scope scope = 6; + + // 熔断数据度量周期 + // 所有的阈值指标按此周期进行统计 + google.protobuf.Duration metricWindow = 7; + + // 熔断数据统计精度,决定数据度量的最小周期 + // 度量滑窗的步长=window/precision + google.protobuf.UInt32Value metricPrecision = 8; + + // 熔断数据上报周期,对分布式熔断有效 + google.protobuf.Duration updateInterval = 9; + + // 触发熔断后恢复配置 + RecoverConfig recover = 10; + + // 熔断策略 + CbPolicy policy = 11; + + // 被调的接口信息,指定哪些接口会使用该规则 + MatchString method = 12; + + // 返回码,指定哪些返回码会使用该规则 + repeated google.protobuf.Int64Value errorCodes = 13; +} + +// 具体熔断规则 +message CbRule { + // 如果匹配Source规则,按照Destination进行熔断 + // 多个Source之间的关系为或 + repeated SourceMatcher sources = 1; + repeated DestinationSet destinations = 2; +} + diff --git a/common/api/v1/client.pb.go b/common/api/v1/client.pb.go new file mode 100644 index 000000000..f9c740e47 --- /dev/null +++ b/common/api/v1/client.pb.go @@ -0,0 +1,134 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: client.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type Client_ClientType int32 + +const ( + Client_UNKNOWN Client_ClientType = 0 + Client_SDK Client_ClientType = 1 + Client_AGENT Client_ClientType = 2 +) + +var Client_ClientType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SDK", + 2: "AGENT", +} +var Client_ClientType_value = map[string]int32{ + "UNKNOWN": 0, + "SDK": 1, + "AGENT": 2, +} + +func (x Client_ClientType) String() string { + return proto.EnumName(Client_ClientType_name, int32(x)) +} +func (Client_ClientType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_client_7fce320934922288, []int{0, 0} +} + +type Client struct { + Host *wrappers.StringValue `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` + Type Client_ClientType `protobuf:"varint,2,opt,name=type,proto3,enum=v1.Client_ClientType" json:"type,omitempty"` + Version *wrappers.StringValue `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + Location *Location `protobuf:"bytes,4,opt,name=location,proto3" json:"location,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Client) Reset() { *m = Client{} } +func (m *Client) String() string { return proto.CompactTextString(m) } +func (*Client) ProtoMessage() {} +func (*Client) Descriptor() ([]byte, []int) { + return fileDescriptor_client_7fce320934922288, []int{0} +} +func (m *Client) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Client.Unmarshal(m, b) +} +func (m *Client) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Client.Marshal(b, m, deterministic) +} +func (dst *Client) XXX_Merge(src proto.Message) { + xxx_messageInfo_Client.Merge(dst, src) +} +func (m *Client) XXX_Size() int { + return xxx_messageInfo_Client.Size(m) +} +func (m *Client) XXX_DiscardUnknown() { + xxx_messageInfo_Client.DiscardUnknown(m) +} + +var xxx_messageInfo_Client proto.InternalMessageInfo + +func (m *Client) GetHost() *wrappers.StringValue { + if m != nil { + return m.Host + } + return nil +} + +func (m *Client) GetType() Client_ClientType { + if m != nil { + return m.Type + } + return Client_UNKNOWN +} + +func (m *Client) GetVersion() *wrappers.StringValue { + if m != nil { + return m.Version + } + return nil +} + +func (m *Client) GetLocation() *Location { + if m != nil { + return m.Location + } + return nil +} + +func init() { + proto.RegisterType((*Client)(nil), "v1.Client") + proto.RegisterEnum("v1.Client_ClientType", Client_ClientType_name, Client_ClientType_value) +} + +func init() { proto.RegisterFile("client.proto", fileDescriptor_client_7fce320934922288) } + +var fileDescriptor_client_7fce320934922288 = []byte{ + // 237 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x49, 0xce, 0xc9, 0x4c, + 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2a, 0x33, 0x94, 0x92, 0x4b, 0xcf, + 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x07, 0x8b, 0x24, 0x95, 0xa6, 0xe9, 0x97, 0x17, 0x25, 0x16, 0x14, + 0xa4, 0x16, 0x15, 0x43, 0xd4, 0x48, 0x71, 0xe7, 0xe6, 0xa7, 0xa4, 0xe6, 0x40, 0x38, 0x4a, 0xdf, + 0x18, 0xb9, 0xd8, 0x9c, 0xc1, 0x26, 0x08, 0x19, 0x70, 0xb1, 0x64, 0xe4, 0x17, 0x97, 0x48, 0x30, + 0x2a, 0x30, 0x6a, 0x70, 0x1b, 0xc9, 0xe8, 0x41, 0x8c, 0xd1, 0x83, 0x19, 0xa3, 0x17, 0x5c, 0x52, + 0x94, 0x99, 0x97, 0x1e, 0x96, 0x98, 0x53, 0x9a, 0x1a, 0x04, 0x56, 0x29, 0xa4, 0xc9, 0xc5, 0x52, + 0x52, 0x59, 0x90, 0x2a, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0x67, 0x24, 0xaa, 0x57, 0x66, 0xa8, 0x07, + 0x31, 0x0b, 0x4a, 0x85, 0x54, 0x16, 0xa4, 0x06, 0x81, 0x95, 0x08, 0x99, 0x71, 0xb1, 0x97, 0xa5, + 0x16, 0x15, 0x67, 0xe6, 0xe7, 0x49, 0x30, 0x13, 0x61, 0x3e, 0x4c, 0xb1, 0x90, 0x06, 0x17, 0x47, + 0x4e, 0x7e, 0x72, 0x62, 0x09, 0x48, 0x23, 0x0b, 0x58, 0x23, 0x0f, 0xc8, 0x1a, 0x1f, 0xa8, 0x58, + 0x10, 0x5c, 0x56, 0x49, 0x97, 0x8b, 0x0b, 0x61, 0xab, 0x10, 0x37, 0x17, 0x7b, 0xa8, 0x9f, 0xb7, + 0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0x83, 0x10, 0x3b, 0x17, 0x73, 0xb0, 0x8b, 0xb7, 0x00, 0xa3, 0x10, + 0x27, 0x17, 0xab, 0xa3, 0xbb, 0xab, 0x5f, 0x88, 0x00, 0x53, 0x12, 0x1b, 0xd8, 0x5e, 0x63, 0x40, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x03, 0xfc, 0x88, 0x40, 0x01, 0x00, 0x00, +} diff --git a/common/api/v1/client.proto b/common/api/v1/client.proto new file mode 100644 index 000000000..ea6a1be97 --- /dev/null +++ b/common/api/v1/client.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; +import "model.proto"; + +message Client { + google.protobuf.StringValue host = 1; + + enum ClientType { + UNKNOWN = 0; + SDK = 1; + AGENT = 2; + } + + ClientType type = 2; + + google.protobuf.StringValue version = 3; + + Location location = 4; +} diff --git a/common/api/v1/codeinfo.go b/common/api/v1/codeinfo.go new file mode 100644 index 000000000..5fd1ba861 --- /dev/null +++ b/common/api/v1/codeinfo.go @@ -0,0 +1,277 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 v1 + +// 北极星错误码 +// 六位构成,前面三位参照HTTP Status的标准 +// 后面三位,依据内部的具体错误自定义 +const ( + ExecuteSuccess uint32 = 200000 + DataNoChange = 200001 + NoNeedUpdate = 200002 + BadRequest = 400000 + ParseException = 400001 + EmptyRequest = 400002 + BatchSizeOverLimit = 400003 + InvalidDiscoverResource = 400004 + InvalidRequestID = 400100 + InvalidUserName = 400101 + InvalidUserToken = 400102 + InvalidParameter = 400103 + EmptyQueryParameter = 400104 + InvalidQueryInsParameter = 400105 + InvalidNamespaceName = 400110 + InvalidNamespaceOwners = 400111 + InvalidNamespaceToken = 400112 + InvalidServiceName = 400120 + InvalidServiceOwners = 400121 + InvalidServiceToken = 400122 + InvalidServiceMetadata = 400123 + InvalidServicePorts = 400124 + InvalidServiceBusiness = 400125 + InvalidServiceDepartment = 400126 + InvalidServiceCMDB = 400127 + InvalidServiceComment = 400128 + InvalidServiceAliasComment = 400129 + InvalidInstanceID = 400130 + InvalidInstanceHost = 400131 + InvalidInstancePort = 400132 + InvalidServiceAlias = 400133 + InvalidNamespaceWithAlias = 400134 + InvalidServiceAliasOwners = 400135 + InvalidInstanceProtocol = 400136 + InvalidInstanceVersion = 400137 + InvalidInstanceLogicSet = 400138 + InvalidInstanceIsolate = 400139 + HealthCheckNotOpen = 400140 + HeartbeatOnDisabledIns = 400141 + HeartbeatExceedLimit = 400142 + InvalidMetadata = 400150 + InvalidRateLimitID = 400151 + InvalidRateLimitLabels = 400152 + InvalidRateLimitAmounts = 400153 + InvalidCircuitBreakerID = 400160 + InvalidCircuitBreakerVersion = 400161 + InvalidCircuitBreakerName = 400162 + InvalidCircuitBreakerNamespace = 400163 + InvalidCircuitBreakerOwners = 400164 + InvalidCircuitBreakerToken = 400165 + InvalidCircuitBreakerBusiness = 400166 + InvalidCircuitBreakerDepartment = 400167 + InvalidCircuitBreakerComment = 400168 + + // 网格相关错误码 + ServicesExistedMesh = 400170 + ResourcesExistedMesh = 400171 + InvalidMeshParameter = 400172 + + // 平台信息相关错误码 + InvalidPlatformID = 400180 + InvalidPlatformName = 400181 + InvalidPlatformDomain = 400182 + InvalidPlatformQPS = 400183 + InvalidPlatformToken = 400184 + InvalidPlatformOwner = 400185 + InvalidPlatformDepartment = 400186 + InvalidPlatformComment = 400187 + NotFoundPlatform = 400188 + + // flux相关错误码 + InvalidFluxRateLimitId = 400190 + InvalidFluxRateLimitQps = 400191 + InvalidFluxRateLimitSetKey = 400192 + + ExistedResource = 400201 + NotFoundResource = 400202 + NamespaceExistedServices = 400203 + ServiceExistedInstances = 400204 + ServiceExistedRoutings = 400205 + ServiceExistedRateLimits = 400206 + ExistReleasedConfig = 400207 + SameInstanceRequest = 400208 + ServiceExistedCircuitBreakers = 400209 + ServiceExistedAlias = 400210 + NamespaceExistedMeshResources = 400211 + NamespaceExistedCircuitBreakers = 400212 + ServiceSubscribedByMeshes = 400213 + ServiceExistedFluxRateLimits = 400214 + NotFoundService = 400301 + NotFoundRouting = 400302 + NotFoundInstance = 400303 + NotFoundServiceAlias = 400304 + NotFoundNamespace = 400305 + NotFoundSourceService = 400306 + NotFoundRateLimit = 400307 + NotFoundCircuitBreaker = 400308 + NotFoundMasterConfig = 400309 + NotFoundTagConfig = 400310 + NotFoundTagConfigOrService = 400311 + ClientAPINotOpen = 400401 + NotAllowBusinessService = 400402 + NotAllowAliasUpdate = 400501 + NotAllowAliasCreateInstance = 400502 + NotAllowAliasCreateRouting = 400503 + NotAllowCreateAliasForAlias = 400504 + NotAllowAliasCreateRateLimit = 400505 + NotAllowAliasBindRule = 400506 + NotAllowDifferentNamespaceBindRule = 400507 + Unauthorized = 401000 + NotAllowedAccess = 401001 + IPRateLimit = 403001 + APIRateLimit = 403002 + CMDBNotFindHost = 404001 + DataConflict = 409000 + InstanceTooManyRequests = 429001 + ExecuteException = 500000 + StoreLayerException = 500001 + CMDBPluginException = 500002 + ParseRoutingException = 500004 + ParseRateLimitException = 500005 + ParseCircuitBreakerException = 500006 + HeartbeatException = 500007 +) + +// code to string +// code的字符串描述信息 +var code2info = map[uint32]string{ + ExecuteSuccess: "execute success", + DataNoChange: "discover data is no change", + NoNeedUpdate: "update data is no change, no need to update", + BadRequest: "bad request", + ParseException: "request decode failed", + EmptyRequest: "empty request", + BatchSizeOverLimit: "batch size over the limit", + InvalidDiscoverResource: "invalid discover resource", + InvalidRequestID: "invalid request id", + InvalidUserName: "invalid user name", + InvalidUserToken: "invalid user token", + InvalidParameter: "invalid parameter", + EmptyQueryParameter: "query instance parameter is empty", + InvalidQueryInsParameter: "query instance, (service,namespace) or host is required", + InvalidNamespaceName: "invalid namespace name", + InvalidNamespaceOwners: "invalid namespace owners", + InvalidNamespaceToken: "invalid namespace token", + InvalidServiceName: "invalid service name", + InvalidServiceOwners: "invalid service owners", + InvalidServiceToken: "invalid service token", + InvalidServiceMetadata: "invalid service metadata", + InvalidServicePorts: "invalid service ports", + InvalidServiceBusiness: "invalid service business", + InvalidServiceDepartment: "invalid service department", + InvalidServiceCMDB: "invalid service CMDB", + InvalidServiceComment: "invalid service comment", + InvalidServiceAliasComment: "invalid service alias comment", + InvalidInstanceID: "invalid instance id", + InvalidInstanceHost: "invalid instance host", + InvalidInstancePort: "invalid instance port", + InvalidInstanceProtocol: "invalid instance protocol", + InvalidInstanceVersion: "invalid instance version", + InvalidInstanceLogicSet: "invalid instance logic set", + InvalidInstanceIsolate: "invalid instance isolate", + InvalidServiceAlias: "invalid service alias", + InvalidNamespaceWithAlias: "request namespace is not allow to create sid type alias", + InvalidServiceAliasOwners: "invalid service alias owners", + HealthCheckNotOpen: "server not open health check", + HeartbeatOnDisabledIns: "heartbeat on disabled instance", + HeartbeatExceedLimit: "instance can only heartbeat 1 time per second", + InvalidMetadata: "the length of metadata is too long or metadata contains invalid characters", + InvalidRateLimitID: "invalid rate limit id", + InvalidRateLimitLabels: "invalid rate limit labels", + InvalidRateLimitAmounts: "invalid rate limit amounts", + InvalidCircuitBreakerID: "invalid circuit breaker id", + InvalidCircuitBreakerVersion: "invalid circuit breaker version", + InvalidCircuitBreakerName: "invalid circuit breaker name", + InvalidCircuitBreakerNamespace: "invalid circuit breaker namespace", + InvalidCircuitBreakerOwners: "invalid circuit breaker owners", + InvalidCircuitBreakerToken: "invalid circuit breaker token", + InvalidCircuitBreakerBusiness: "invalid circuit breaker business", + InvalidCircuitBreakerDepartment: "invalid circuit breaker department", + InvalidCircuitBreakerComment: "invalid circuit breaker comment", + ExistedResource: "existed resource", + SameInstanceRequest: "the same instance request", + NotFoundResource: "not found resource", + ClientAPINotOpen: "client api is not open", + NotAllowBusinessService: "not allow requesting business service", + NotAllowAliasUpdate: "not allow service alias updating", + NotAllowAliasCreateInstance: "not allow service alias creating instance", + NotAllowAliasCreateRouting: "not allow service alias creating routing config", + NotAllowCreateAliasForAlias: "only source service can create alias", + NotAllowAliasCreateRateLimit: "not allow service alias creating rate limit", + NotAllowAliasBindRule: "not allow service alias binding rule", + NotAllowDifferentNamespaceBindRule: "not allow different namespace binding rule", + NamespaceExistedServices: "some services existed in namespace", + ServiceExistedInstances: "some instances existed in service", + ServiceExistedRoutings: "some routings existed in service", + ServiceExistedRateLimits: "some rate limits existed in service", + ServiceExistedCircuitBreakers: "some circuit breakers existed in service", + ServiceExistedAlias: "some aliases existed in service", + NamespaceExistedMeshResources: "some mesh resources existed in namespace", + NamespaceExistedCircuitBreakers: "some circuit breakers existed in namespace", + ExistReleasedConfig: "exist released config", + NotFoundService: "not found service", + NotFoundRouting: "not found routing", + NotFoundInstance: "not found instances", + NotFoundServiceAlias: "not found service alias", + NotFoundNamespace: "not found namespace", + NotFoundSourceService: "not found the source service link with the alias", + NotFoundRateLimit: "not found rate limit", + NotFoundCircuitBreaker: "not found circuit breaker", + NotFoundTagConfig: "not found tag config", + NotFoundMasterConfig: "not found master config", + NotFoundTagConfigOrService: "not found tag config or service, or relation already exists", + Unauthorized: "unauthorized", + NotAllowedAccess: "access is not approved", + IPRateLimit: "server limit the ip access", + APIRateLimit: "server limit the api access", + CMDBNotFindHost: "not found the host cmdb", + DataConflict: "data is conflict, please try again", + InstanceTooManyRequests: "your instance has too many requests", + ExecuteException: "execute exception", + StoreLayerException: "store layer exception", + CMDBPluginException: "cmdb plugin exception", + ParseRoutingException: "parsing routing failed", + ParseRateLimitException: "parse rate limit failed", + ParseCircuitBreakerException: "parse circuit breaker failed", + HeartbeatException: "heartbeat execute exception", + InvalidPlatformID: "invalid platform id", + InvalidPlatformName: "invalid platform name", + InvalidPlatformDomain: "invalid platform domain", + InvalidPlatformQPS: "invalid platform qps", + InvalidPlatformToken: "invalid platform token", + InvalidPlatformOwner: "invalid platform owner", + InvalidPlatformDepartment: "invalid platform department", + InvalidPlatformComment: "invalid platform comment", + NotFoundPlatform: "not found platform", + ServicesExistedMesh: "services existed mesh", + ResourcesExistedMesh: "resources existed mesh", + ServiceSubscribedByMeshes: "service subscribed by some mesh", + InvalidMeshParameter: "invalid mesh parameter", + InvalidFluxRateLimitId: "invalid flux ratelimit id", + InvalidFluxRateLimitQps: "invalid flux ratelimit qps", + InvalidFluxRateLimitSetKey: "invalid flux ratelimit key", +} + +// code to info +func Code2Info(code uint32) string { + info, ok := code2info[code] + if ok { + return info + } + + return "" +} diff --git a/common/api/v1/configrelease.pb.go b/common/api/v1/configrelease.pb.go new file mode 100644 index 000000000..86e838e6f --- /dev/null +++ b/common/api/v1/configrelease.pb.go @@ -0,0 +1,155 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: configrelease.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type ConfigRelease struct { + Service *Service `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Ctime *wrappers.StringValue `protobuf:"bytes,2,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *wrappers.StringValue `protobuf:"bytes,3,opt,name=mtime,proto3" json:"mtime,omitempty"` + CircuitBreaker *CircuitBreaker `protobuf:"bytes,4,opt,name=circuitBreaker,proto3" json:"circuitBreaker,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ConfigRelease) Reset() { *m = ConfigRelease{} } +func (m *ConfigRelease) String() string { return proto.CompactTextString(m) } +func (*ConfigRelease) ProtoMessage() {} +func (*ConfigRelease) Descriptor() ([]byte, []int) { + return fileDescriptor_configrelease_c3cd47f6dfc8ea11, []int{0} +} +func (m *ConfigRelease) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ConfigRelease.Unmarshal(m, b) +} +func (m *ConfigRelease) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ConfigRelease.Marshal(b, m, deterministic) +} +func (dst *ConfigRelease) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigRelease.Merge(dst, src) +} +func (m *ConfigRelease) XXX_Size() int { + return xxx_messageInfo_ConfigRelease.Size(m) +} +func (m *ConfigRelease) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigRelease.DiscardUnknown(m) +} + +var xxx_messageInfo_ConfigRelease proto.InternalMessageInfo + +func (m *ConfigRelease) GetService() *Service { + if m != nil { + return m.Service + } + return nil +} + +func (m *ConfigRelease) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *ConfigRelease) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +func (m *ConfigRelease) GetCircuitBreaker() *CircuitBreaker { + if m != nil { + return m.CircuitBreaker + } + return nil +} + +type ConfigWithService struct { + Services []*Service `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` + CircuitBreaker *CircuitBreaker `protobuf:"bytes,2,opt,name=circuitBreaker,proto3" json:"circuitBreaker,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ConfigWithService) Reset() { *m = ConfigWithService{} } +func (m *ConfigWithService) String() string { return proto.CompactTextString(m) } +func (*ConfigWithService) ProtoMessage() {} +func (*ConfigWithService) Descriptor() ([]byte, []int) { + return fileDescriptor_configrelease_c3cd47f6dfc8ea11, []int{1} +} +func (m *ConfigWithService) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ConfigWithService.Unmarshal(m, b) +} +func (m *ConfigWithService) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ConfigWithService.Marshal(b, m, deterministic) +} +func (dst *ConfigWithService) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConfigWithService.Merge(dst, src) +} +func (m *ConfigWithService) XXX_Size() int { + return xxx_messageInfo_ConfigWithService.Size(m) +} +func (m *ConfigWithService) XXX_DiscardUnknown() { + xxx_messageInfo_ConfigWithService.DiscardUnknown(m) +} + +var xxx_messageInfo_ConfigWithService proto.InternalMessageInfo + +func (m *ConfigWithService) GetServices() []*Service { + if m != nil { + return m.Services + } + return nil +} + +func (m *ConfigWithService) GetCircuitBreaker() *CircuitBreaker { + if m != nil { + return m.CircuitBreaker + } + return nil +} + +func init() { + proto.RegisterType((*ConfigRelease)(nil), "v1.ConfigRelease") + proto.RegisterType((*ConfigWithService)(nil), "v1.ConfigWithService") +} + +func init() { proto.RegisterFile("configrelease.proto", fileDescriptor_configrelease_c3cd47f6dfc8ea11) } + +var fileDescriptor_configrelease_c3cd47f6dfc8ea11 = []byte{ + // 242 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x8f, 0xcf, 0x4a, 0x03, 0x31, + 0x18, 0xc4, 0xd9, 0xad, 0xff, 0x48, 0xa9, 0x60, 0xf4, 0x10, 0x16, 0x91, 0x52, 0x10, 0x3d, 0xa5, + 0xb4, 0xde, 0x3c, 0xda, 0x37, 0x48, 0x41, 0xcf, 0xd9, 0xf0, 0x35, 0x06, 0xb7, 0xcd, 0xf2, 0x25, + 0xbb, 0xfa, 0xac, 0x3e, 0x8d, 0x34, 0x5f, 0x2a, 0x58, 0x3c, 0xec, 0x75, 0x66, 0x7e, 0xcc, 0x0c, + 0xbb, 0x36, 0x7e, 0xb7, 0x71, 0x16, 0xa1, 0x01, 0x1d, 0x40, 0xb6, 0xe8, 0xa3, 0xe7, 0x65, 0xbf, + 0xa8, 0xee, 0xac, 0xf7, 0xb6, 0x81, 0x79, 0x52, 0xea, 0x6e, 0x33, 0xff, 0x44, 0xdd, 0xb6, 0x80, + 0x81, 0x32, 0xd5, 0x24, 0x00, 0xf6, 0xce, 0x64, 0xa4, 0xba, 0x31, 0x0e, 0x4d, 0xe7, 0x62, 0x8d, + 0xa0, 0x3f, 0x00, 0x49, 0x9d, 0x7d, 0x17, 0x6c, 0xb2, 0x4a, 0x05, 0x8a, 0x0a, 0xf8, 0x3d, 0x3b, + 0xcf, 0xa0, 0x28, 0xa6, 0xc5, 0xe3, 0x78, 0x39, 0x96, 0xfd, 0x42, 0xae, 0x49, 0x52, 0x07, 0x8f, + 0x2f, 0xd9, 0xa9, 0x89, 0x6e, 0x0b, 0xa2, 0x4c, 0xa1, 0x5b, 0x49, 0x6b, 0xe4, 0x61, 0x8d, 0x5c, + 0x47, 0x74, 0x3b, 0xfb, 0xaa, 0x9b, 0x0e, 0x14, 0x45, 0xf7, 0xcc, 0x36, 0x31, 0xa3, 0x21, 0x4c, + 0x8a, 0xf2, 0x67, 0x76, 0x99, 0x87, 0xbf, 0xd0, 0x70, 0x71, 0x92, 0x60, 0xbe, 0x5f, 0xb5, 0xfa, + 0xe3, 0xa8, 0xa3, 0xe4, 0xec, 0x8b, 0x5d, 0xd1, 0xb7, 0x37, 0x17, 0xdf, 0xf3, 0x03, 0xfe, 0xc0, + 0x2e, 0xf2, 0x87, 0x20, 0x8a, 0xe9, 0xe8, 0xf8, 0xe0, 0xaf, 0xf9, 0x4f, 0x73, 0x39, 0xb4, 0xb9, + 0x3e, 0x4b, 0x97, 0x9e, 0x7e, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa6, 0x30, 0x71, 0xf6, 0xbd, 0x01, + 0x00, 0x00, +} diff --git a/common/api/v1/configrelease.proto b/common/api/v1/configrelease.proto new file mode 100644 index 000000000..b5e5b6c07 --- /dev/null +++ b/common/api/v1/configrelease.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; +import "service.proto"; +import "circuitbreaker.proto"; + +message ConfigRelease { + Service service = 1; + google.protobuf.StringValue ctime = 2; + google.protobuf.StringValue mtime = 3; + + CircuitBreaker circuitBreaker = 4; +} + +message ConfigWithService { + repeated Service services = 1; + CircuitBreaker circuitBreaker = 2; +} \ No newline at end of file diff --git a/common/api/v1/grpcapi.pb.go b/common/api/v1/grpcapi.pb.go new file mode 100644 index 000000000..7748d261e --- /dev/null +++ b/common/api/v1/grpcapi.pb.go @@ -0,0 +1,290 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: grpcapi.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// 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.SupportPackageIsVersion4 + +// PolarisGRPCClient is the client API for PolarisGRPC service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type PolarisGRPCClient interface { + // 客户端上报 + ReportClient(ctx context.Context, in *Client, opts ...grpc.CallOption) (*Response, error) + // 被调方注册服务实例 + RegisterInstance(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Response, error) + // 被调方反注册服务实例 + DeregisterInstance(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Response, error) + // 统一发现接口 + Discover(ctx context.Context, opts ...grpc.CallOption) (PolarisGRPC_DiscoverClient, error) + // 被调方上报心跳 + Heartbeat(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Response, error) +} + +type polarisGRPCClient struct { + cc *grpc.ClientConn +} + +func NewPolarisGRPCClient(cc *grpc.ClientConn) PolarisGRPCClient { + return &polarisGRPCClient{cc} +} + +func (c *polarisGRPCClient) ReportClient(ctx context.Context, in *Client, opts ...grpc.CallOption) (*Response, error) { + out := new(Response) + err := c.cc.Invoke(ctx, "/v1.PolarisGRPC/ReportClient", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *polarisGRPCClient) RegisterInstance(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Response, error) { + out := new(Response) + err := c.cc.Invoke(ctx, "/v1.PolarisGRPC/RegisterInstance", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *polarisGRPCClient) DeregisterInstance(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Response, error) { + out := new(Response) + err := c.cc.Invoke(ctx, "/v1.PolarisGRPC/DeregisterInstance", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *polarisGRPCClient) Discover(ctx context.Context, opts ...grpc.CallOption) (PolarisGRPC_DiscoverClient, error) { + stream, err := c.cc.NewStream(ctx, &_PolarisGRPC_serviceDesc.Streams[0], "/v1.PolarisGRPC/Discover", opts...) + if err != nil { + return nil, err + } + x := &polarisGRPCDiscoverClient{stream} + return x, nil +} + +type PolarisGRPC_DiscoverClient interface { + Send(*DiscoverRequest) error + Recv() (*DiscoverResponse, error) + grpc.ClientStream +} + +type polarisGRPCDiscoverClient struct { + grpc.ClientStream +} + +func (x *polarisGRPCDiscoverClient) Send(m *DiscoverRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *polarisGRPCDiscoverClient) Recv() (*DiscoverResponse, error) { + m := new(DiscoverResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *polarisGRPCClient) Heartbeat(ctx context.Context, in *Instance, opts ...grpc.CallOption) (*Response, error) { + out := new(Response) + err := c.cc.Invoke(ctx, "/v1.PolarisGRPC/Heartbeat", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// PolarisGRPCServer is the server API for PolarisGRPC service. +type PolarisGRPCServer interface { + // 客户端上报 + ReportClient(context.Context, *Client) (*Response, error) + // 被调方注册服务实例 + RegisterInstance(context.Context, *Instance) (*Response, error) + // 被调方反注册服务实例 + DeregisterInstance(context.Context, *Instance) (*Response, error) + // 统一发现接口 + Discover(PolarisGRPC_DiscoverServer) error + // 被调方上报心跳 + Heartbeat(context.Context, *Instance) (*Response, error) +} + +func RegisterPolarisGRPCServer(s *grpc.Server, srv PolarisGRPCServer) { + s.RegisterService(&_PolarisGRPC_serviceDesc, srv) +} + +func _PolarisGRPC_ReportClient_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Client) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PolarisGRPCServer).ReportClient(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/v1.PolarisGRPC/ReportClient", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PolarisGRPCServer).ReportClient(ctx, req.(*Client)) + } + return interceptor(ctx, in, info, handler) +} + +func _PolarisGRPC_RegisterInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Instance) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PolarisGRPCServer).RegisterInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/v1.PolarisGRPC/RegisterInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PolarisGRPCServer).RegisterInstance(ctx, req.(*Instance)) + } + return interceptor(ctx, in, info, handler) +} + +func _PolarisGRPC_DeregisterInstance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Instance) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PolarisGRPCServer).DeregisterInstance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/v1.PolarisGRPC/DeregisterInstance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PolarisGRPCServer).DeregisterInstance(ctx, req.(*Instance)) + } + return interceptor(ctx, in, info, handler) +} + +func _PolarisGRPC_Discover_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(PolarisGRPCServer).Discover(&polarisGRPCDiscoverServer{stream}) +} + +type PolarisGRPC_DiscoverServer interface { + Send(*DiscoverResponse) error + Recv() (*DiscoverRequest, error) + grpc.ServerStream +} + +type polarisGRPCDiscoverServer struct { + grpc.ServerStream +} + +func (x *polarisGRPCDiscoverServer) Send(m *DiscoverResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *polarisGRPCDiscoverServer) Recv() (*DiscoverRequest, error) { + m := new(DiscoverRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _PolarisGRPC_Heartbeat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Instance) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PolarisGRPCServer).Heartbeat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/v1.PolarisGRPC/Heartbeat", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PolarisGRPCServer).Heartbeat(ctx, req.(*Instance)) + } + return interceptor(ctx, in, info, handler) +} + +var _PolarisGRPC_serviceDesc = grpc.ServiceDesc{ + ServiceName: "v1.PolarisGRPC", + HandlerType: (*PolarisGRPCServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ReportClient", + Handler: _PolarisGRPC_ReportClient_Handler, + }, + { + MethodName: "RegisterInstance", + Handler: _PolarisGRPC_RegisterInstance_Handler, + }, + { + MethodName: "DeregisterInstance", + Handler: _PolarisGRPC_DeregisterInstance_Handler, + }, + { + MethodName: "Heartbeat", + Handler: _PolarisGRPC_Heartbeat_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "Discover", + Handler: _PolarisGRPC_Discover_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "grpcapi.proto", +} + +func init() { proto.RegisterFile("grpcapi.proto", fileDescriptor_grpcapi_1bc1b7fe180cc761) } + +var fileDescriptor_grpcapi_1bc1b7fe180cc761 = []byte{ + // 208 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x90, 0xbd, 0x4a, 0x04, 0x31, + 0x10, 0xc7, 0xbd, 0x2b, 0x44, 0xc7, 0x3d, 0x91, 0xd1, 0x2a, 0xa5, 0x95, 0x5a, 0x2c, 0x77, 0x6b, + 0x69, 0xb9, 0x0b, 0x6a, 0xb7, 0xe4, 0x0d, 0xb2, 0x61, 0x58, 0x02, 0x4b, 0x12, 0x67, 0x62, 0x5e, + 0xc1, 0xd7, 0x96, 0xfd, 0x48, 0x21, 0x82, 0x60, 0xf7, 0xff, 0xc8, 0x2f, 0xc3, 0x0c, 0x1c, 0x46, + 0x8e, 0xd6, 0x44, 0x57, 0x47, 0x0e, 0x29, 0xe0, 0x3e, 0x9f, 0x54, 0x65, 0x27, 0x47, 0x3e, 0xad, + 0x89, 0x3a, 0x08, 0x71, 0x76, 0x96, 0x8a, 0x65, 0xfa, 0xf8, 0x24, 0x29, 0xed, 0x35, 0x93, 0xc4, + 0xe0, 0x65, 0xab, 0x9b, 0xaf, 0x3d, 0x5c, 0xf5, 0x61, 0x32, 0xec, 0xe4, 0x55, 0xf7, 0x2d, 0x3e, + 0x41, 0xa5, 0x29, 0x06, 0x4e, 0xed, 0xf2, 0x27, 0x42, 0x9d, 0x4f, 0xf5, 0xaa, 0x55, 0x35, 0x6b, + 0xbd, 0xf1, 0xf7, 0x67, 0x78, 0x84, 0x1b, 0x4d, 0xa3, 0x93, 0x44, 0xfc, 0xee, 0x25, 0x19, 0x6f, + 0x09, 0x97, 0x37, 0xc5, 0xfd, 0x22, 0x1a, 0xc0, 0x8e, 0xf8, 0x7f, 0xcc, 0x0b, 0x5c, 0x74, 0x4e, + 0x6c, 0xc8, 0xc4, 0x78, 0x3b, 0x77, 0xc5, 0xe9, 0x75, 0x31, 0x75, 0xf7, 0x33, 0x2c, 0xe0, 0xc3, + 0xee, 0xb8, 0xc3, 0x47, 0xb8, 0x7c, 0x23, 0xc3, 0x69, 0x20, 0x93, 0xfe, 0x9e, 0x33, 0x9c, 0x2f, + 0x07, 0x79, 0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xa5, 0x5a, 0x87, 0xc9, 0x61, 0x01, 0x00, 0x00, +} diff --git a/common/api/v1/grpcapi.proto b/common/api/v1/grpcapi.proto new file mode 100644 index 000000000..1fede7da0 --- /dev/null +++ b/common/api/v1/grpcapi.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; + +package v1; + +import "client.proto"; +import "service.proto"; +import "request.proto"; +import "response.proto"; + +service PolarisGRPC { + // 客户端上报 + rpc ReportClient(Client) returns(Response) {} + + // 被调方注册服务实例 + rpc RegisterInstance(Instance) returns(Response) {} + // 被调方反注册服务实例 + rpc DeregisterInstance(Instance) returns(Response) {} + + // 统一发现接口 + rpc Discover(stream DiscoverRequest) returns(stream DiscoverResponse) {} + + // 被调方上报心跳 + rpc Heartbeat(Instance) returns(Response) {} +} diff --git a/common/api/v1/model.pb.go b/common/api/v1/model.pb.go new file mode 100644 index 000000000..74600cab6 --- /dev/null +++ b/common/api/v1/model.pb.go @@ -0,0 +1,209 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: model.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type MatchString_MatchStringType int32 + +const ( + MatchString_EXACT MatchString_MatchStringType = 0 + MatchString_REGEX MatchString_MatchStringType = 1 +) + +var MatchString_MatchStringType_name = map[int32]string{ + 0: "EXACT", + 1: "REGEX", +} +var MatchString_MatchStringType_value = map[string]int32{ + "EXACT": 0, + "REGEX": 1, +} + +func (x MatchString_MatchStringType) String() string { + return proto.EnumName(MatchString_MatchStringType_name, int32(x)) +} +func (MatchString_MatchStringType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_model_534f8598bf3352f4, []int{1, 0} +} + +type MatchString_ValueType int32 + +const ( + MatchString_TEXT MatchString_ValueType = 0 + MatchString_PARAMETER MatchString_ValueType = 1 + MatchString_VARIABLE MatchString_ValueType = 2 +) + +var MatchString_ValueType_name = map[int32]string{ + 0: "TEXT", + 1: "PARAMETER", + 2: "VARIABLE", +} +var MatchString_ValueType_value = map[string]int32{ + "TEXT": 0, + "PARAMETER": 1, + "VARIABLE": 2, +} + +func (x MatchString_ValueType) String() string { + return proto.EnumName(MatchString_ValueType_name, int32(x)) +} +func (MatchString_ValueType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_model_534f8598bf3352f4, []int{1, 1} +} + +type Location struct { + Region *wrappers.StringValue `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` + Zone *wrappers.StringValue `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` + Campus *wrappers.StringValue `protobuf:"bytes,3,opt,name=campus,proto3" json:"campus,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Location) Reset() { *m = Location{} } +func (m *Location) String() string { return proto.CompactTextString(m) } +func (*Location) ProtoMessage() {} +func (*Location) Descriptor() ([]byte, []int) { + return fileDescriptor_model_534f8598bf3352f4, []int{0} +} +func (m *Location) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Location.Unmarshal(m, b) +} +func (m *Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Location.Marshal(b, m, deterministic) +} +func (dst *Location) XXX_Merge(src proto.Message) { + xxx_messageInfo_Location.Merge(dst, src) +} +func (m *Location) XXX_Size() int { + return xxx_messageInfo_Location.Size(m) +} +func (m *Location) XXX_DiscardUnknown() { + xxx_messageInfo_Location.DiscardUnknown(m) +} + +var xxx_messageInfo_Location proto.InternalMessageInfo + +func (m *Location) GetRegion() *wrappers.StringValue { + if m != nil { + return m.Region + } + return nil +} + +func (m *Location) GetZone() *wrappers.StringValue { + if m != nil { + return m.Zone + } + return nil +} + +func (m *Location) GetCampus() *wrappers.StringValue { + if m != nil { + return m.Campus + } + return nil +} + +type MatchString struct { + Type MatchString_MatchStringType `protobuf:"varint,1,opt,name=type,proto3,enum=v1.MatchString_MatchStringType" json:"type,omitempty"` + Value *wrappers.StringValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + ValueType MatchString_ValueType `protobuf:"varint,3,opt,name=value_type,json=valueType,proto3,enum=v1.MatchString_ValueType" json:"value_type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MatchString) Reset() { *m = MatchString{} } +func (m *MatchString) String() string { return proto.CompactTextString(m) } +func (*MatchString) ProtoMessage() {} +func (*MatchString) Descriptor() ([]byte, []int) { + return fileDescriptor_model_534f8598bf3352f4, []int{1} +} +func (m *MatchString) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MatchString.Unmarshal(m, b) +} +func (m *MatchString) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MatchString.Marshal(b, m, deterministic) +} +func (dst *MatchString) XXX_Merge(src proto.Message) { + xxx_messageInfo_MatchString.Merge(dst, src) +} +func (m *MatchString) XXX_Size() int { + return xxx_messageInfo_MatchString.Size(m) +} +func (m *MatchString) XXX_DiscardUnknown() { + xxx_messageInfo_MatchString.DiscardUnknown(m) +} + +var xxx_messageInfo_MatchString proto.InternalMessageInfo + +func (m *MatchString) GetType() MatchString_MatchStringType { + if m != nil { + return m.Type + } + return MatchString_EXACT +} + +func (m *MatchString) GetValue() *wrappers.StringValue { + if m != nil { + return m.Value + } + return nil +} + +func (m *MatchString) GetValueType() MatchString_ValueType { + if m != nil { + return m.ValueType + } + return MatchString_TEXT +} + +func init() { + proto.RegisterType((*Location)(nil), "v1.Location") + proto.RegisterType((*MatchString)(nil), "v1.MatchString") + proto.RegisterEnum("v1.MatchString_MatchStringType", MatchString_MatchStringType_name, MatchString_MatchStringType_value) + proto.RegisterEnum("v1.MatchString_ValueType", MatchString_ValueType_name, MatchString_ValueType_value) +} + +func init() { proto.RegisterFile("model.proto", fileDescriptor_model_534f8598bf3352f4) } + +var fileDescriptor_model_534f8598bf3352f4 = []byte{ + // 291 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x8e, 0xc1, 0x4e, 0xb3, 0x40, + 0x14, 0x85, 0x7f, 0x28, 0x6d, 0xe0, 0xf2, 0xab, 0x64, 0x56, 0x68, 0x8c, 0x1a, 0x36, 0xba, 0x9a, + 0x5a, 0xea, 0xc2, 0x2d, 0x9a, 0x89, 0x31, 0x69, 0x13, 0x33, 0x92, 0x86, 0x9d, 0xa1, 0x38, 0x22, + 0x09, 0x65, 0x26, 0x14, 0x30, 0xf5, 0x1d, 0x7c, 0x0f, 0x1f, 0xd3, 0x70, 0xb1, 0xa6, 0xe9, 0x8a, + 0xdd, 0xc9, 0xcc, 0x77, 0xee, 0x77, 0xc0, 0x5e, 0xc9, 0x57, 0x91, 0x53, 0x55, 0xca, 0x4a, 0x12, + 0xbd, 0x99, 0x9c, 0x9c, 0xa5, 0x52, 0xa6, 0xb9, 0x18, 0xe3, 0xcb, 0xb2, 0x7e, 0x1b, 0x7f, 0x94, + 0xb1, 0x52, 0xa2, 0x5c, 0x77, 0x8c, 0xf7, 0xad, 0x81, 0x39, 0x93, 0x49, 0x5c, 0x65, 0xb2, 0x20, + 0x37, 0x30, 0x2a, 0x45, 0x9a, 0xc9, 0xc2, 0xd5, 0x2e, 0xb4, 0x2b, 0xdb, 0x3f, 0xa5, 0x5d, 0x9b, + 0x6e, 0xdb, 0xf4, 0xb9, 0x2a, 0xb3, 0x22, 0x5d, 0xc4, 0x79, 0x2d, 0xf8, 0x2f, 0x4b, 0xae, 0xc1, + 0xf8, 0x94, 0x85, 0x70, 0xf5, 0x1e, 0x1d, 0x24, 0x5b, 0x4f, 0x12, 0xaf, 0x54, 0xbd, 0x76, 0x07, + 0x7d, 0x3c, 0x1d, 0xeb, 0x7d, 0xe9, 0x60, 0xcf, 0xe3, 0x2a, 0x79, 0xef, 0x3e, 0xc9, 0x14, 0x8c, + 0x6a, 0xa3, 0x04, 0x6e, 0x3d, 0xf4, 0xcf, 0x69, 0x33, 0xa1, 0x3b, 0xdf, 0xbb, 0x39, 0xdc, 0x28, + 0xc1, 0x11, 0x26, 0x3e, 0x0c, 0x9b, 0xf6, 0x6a, 0xaf, 0xb5, 0x1d, 0x4a, 0x6e, 0x01, 0x30, 0xbc, + 0xa0, 0x6e, 0x80, 0xba, 0xe3, 0x7d, 0x1d, 0x36, 0x50, 0x64, 0x35, 0xdb, 0xe8, 0x5d, 0xc2, 0xd1, + 0xde, 0x0c, 0x62, 0xc1, 0x90, 0x45, 0xc1, 0x7d, 0xe8, 0xfc, 0x6b, 0x23, 0x67, 0x0f, 0x2c, 0x72, + 0x34, 0xcf, 0x07, 0xeb, 0xef, 0x00, 0x31, 0xc1, 0x08, 0x59, 0xd4, 0x12, 0x07, 0x60, 0x3d, 0x05, + 0x3c, 0x98, 0xb3, 0x90, 0x71, 0x47, 0x23, 0xff, 0xc1, 0x5c, 0x04, 0xfc, 0x31, 0xb8, 0x9b, 0x31, + 0x47, 0x5f, 0x8e, 0x70, 0xf3, 0xf4, 0x27, 0x00, 0x00, 0xff, 0xff, 0x28, 0x8b, 0x9e, 0xbf, 0xf4, + 0x01, 0x00, 0x00, +} diff --git a/common/api/v1/model.proto b/common/api/v1/model.proto new file mode 100644 index 000000000..bef9a01ca --- /dev/null +++ b/common/api/v1/model.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; + +message Location { + google.protobuf.StringValue region = 1; + google.protobuf.StringValue zone = 2; + google.protobuf.StringValue campus = 3; +} + +message MatchString { + enum MatchStringType { + EXACT = 0; + REGEX = 1; + } + + enum ValueType { + TEXT = 0; + PARAMETER = 1; + VARIABLE = 2; + } + + MatchStringType type = 1; + google.protobuf.StringValue value = 2; + ValueType value_type = 3; +} diff --git a/common/api/v1/platform.pb.go b/common/api/v1/platform.pb.go new file mode 100644 index 000000000..14bc7148f --- /dev/null +++ b/common/api/v1/platform.pb.go @@ -0,0 +1,166 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: platform.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type Platform struct { + // 平台ID,唯一标识 + Id *wrappers.StringValue `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // 平台名称 + Name *wrappers.StringValue `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // 平台域名 + Domain *wrappers.StringValue `protobuf:"bytes,3,opt,name=domain,proto3" json:"domain,omitempty"` + // 调用频率 + Qps *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=qps,proto3" json:"qps,omitempty"` + // 平台token + Token *wrappers.StringValue `protobuf:"bytes,5,opt,name=token,proto3" json:"token,omitempty"` + // 负责人 + Owner *wrappers.StringValue `protobuf:"bytes,6,opt,name=owner,proto3" json:"owner,omitempty"` + // 部门 + Department *wrappers.StringValue `protobuf:"bytes,7,opt,name=department,proto3" json:"department,omitempty"` + // 描述 + Comment *wrappers.StringValue `protobuf:"bytes,8,opt,name=comment,proto3" json:"comment,omitempty"` + // 申请时间 + Ctime *wrappers.StringValue `protobuf:"bytes,9,opt,name=ctime,proto3" json:"ctime,omitempty"` + // 修改时间 + Mtime *wrappers.StringValue `protobuf:"bytes,10,opt,name=mtime,proto3" json:"mtime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Platform) Reset() { *m = Platform{} } +func (m *Platform) String() string { return proto.CompactTextString(m) } +func (*Platform) ProtoMessage() {} +func (*Platform) Descriptor() ([]byte, []int) { + return fileDescriptor_platform_91ca9823fa0e864e, []int{0} +} +func (m *Platform) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Platform.Unmarshal(m, b) +} +func (m *Platform) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Platform.Marshal(b, m, deterministic) +} +func (dst *Platform) XXX_Merge(src proto.Message) { + xxx_messageInfo_Platform.Merge(dst, src) +} +func (m *Platform) XXX_Size() int { + return xxx_messageInfo_Platform.Size(m) +} +func (m *Platform) XXX_DiscardUnknown() { + xxx_messageInfo_Platform.DiscardUnknown(m) +} + +var xxx_messageInfo_Platform proto.InternalMessageInfo + +func (m *Platform) GetId() *wrappers.StringValue { + if m != nil { + return m.Id + } + return nil +} + +func (m *Platform) GetName() *wrappers.StringValue { + if m != nil { + return m.Name + } + return nil +} + +func (m *Platform) GetDomain() *wrappers.StringValue { + if m != nil { + return m.Domain + } + return nil +} + +func (m *Platform) GetQps() *wrappers.UInt32Value { + if m != nil { + return m.Qps + } + return nil +} + +func (m *Platform) GetToken() *wrappers.StringValue { + if m != nil { + return m.Token + } + return nil +} + +func (m *Platform) GetOwner() *wrappers.StringValue { + if m != nil { + return m.Owner + } + return nil +} + +func (m *Platform) GetDepartment() *wrappers.StringValue { + if m != nil { + return m.Department + } + return nil +} + +func (m *Platform) GetComment() *wrappers.StringValue { + if m != nil { + return m.Comment + } + return nil +} + +func (m *Platform) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *Platform) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +func init() { + proto.RegisterType((*Platform)(nil), "v1.Platform") +} + +func init() { proto.RegisterFile("platform.proto", fileDescriptor_platform_91ca9823fa0e864e) } + +var fileDescriptor_platform_91ca9823fa0e864e = []byte{ + // 244 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0xce, 0xc1, 0x4a, 0x03, 0x31, + 0x10, 0xc6, 0x71, 0xba, 0xdd, 0x6e, 0xeb, 0x08, 0x1e, 0x72, 0x0a, 0x22, 0x22, 0x9e, 0x3c, 0x48, + 0xaa, 0x5b, 0xf1, 0xe4, 0x0b, 0x78, 0x13, 0x45, 0xef, 0x69, 0x77, 0xba, 0x04, 0x37, 0x99, 0x98, + 0xa6, 0xf6, 0x4d, 0x7c, 0x5e, 0xd9, 0xd9, 0x2e, 0x78, 0x11, 0xe6, 0x9a, 0xfc, 0x7f, 0xcc, 0x07, + 0x67, 0xb1, 0xb3, 0x79, 0x4b, 0xc9, 0x9b, 0x98, 0x28, 0x93, 0x2a, 0xbe, 0xef, 0xcf, 0x2f, 0x5b, + 0xa2, 0xb6, 0xc3, 0x25, 0xbf, 0xac, 0xf7, 0xdb, 0xe5, 0x21, 0xd9, 0x18, 0x31, 0xed, 0x86, 0xe6, + 0xfa, 0xa7, 0x84, 0xc5, 0xcb, 0x91, 0xa9, 0x5b, 0x28, 0x5c, 0xa3, 0x27, 0x57, 0x93, 0x9b, 0xd3, + 0xfa, 0xc2, 0x0c, 0xd2, 0x8c, 0xd2, 0xbc, 0xe5, 0xe4, 0x42, 0xfb, 0x61, 0xbb, 0x3d, 0xbe, 0x16, + 0xae, 0x51, 0x77, 0x50, 0x06, 0xeb, 0x51, 0x17, 0x82, 0x9e, 0x4b, 0xf5, 0x00, 0x55, 0x43, 0xde, + 0xba, 0xa0, 0xa7, 0x02, 0x73, 0x6c, 0x95, 0x81, 0xe9, 0x57, 0xdc, 0xe9, 0xf2, 0x1f, 0xf2, 0xfe, + 0x1c, 0xf2, 0xaa, 0x1e, 0x48, 0x1f, 0xaa, 0x1a, 0x66, 0x99, 0x3e, 0x31, 0xe8, 0x99, 0xe0, 0xc8, + 0x90, 0xf6, 0x86, 0x0e, 0x01, 0x93, 0xae, 0x24, 0x86, 0x53, 0xf5, 0x04, 0xd0, 0x60, 0xb4, 0x29, + 0x7b, 0x0c, 0x59, 0xcf, 0x05, 0xf0, 0x4f, 0xaf, 0x1e, 0x61, 0xbe, 0x21, 0xcf, 0x74, 0x21, 0xa0, + 0x63, 0xdc, 0x2f, 0xdd, 0x64, 0xe7, 0x51, 0x9f, 0x48, 0x96, 0x72, 0xda, 0x1b, 0xcf, 0x06, 0x24, + 0x86, 0xd3, 0x75, 0xc5, 0x9f, 0xab, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xbb, 0xb7, 0x05, + 0x55, 0x02, 0x00, 0x00, +} diff --git a/common/api/v1/platform.proto b/common/api/v1/platform.proto new file mode 100644 index 000000000..92285efee --- /dev/null +++ b/common/api/v1/platform.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; + +message Platform { + // 平台ID,唯一标识 + google.protobuf.StringValue id = 1; + // 平台名称 + google.protobuf.StringValue name = 2; + // 平台域名 + google.protobuf.StringValue domain = 3; + // 调用频率 + google.protobuf.UInt32Value qps = 4; + // 平台token + google.protobuf.StringValue token = 5; + // 负责人 + google.protobuf.StringValue owner = 6; + // 部门 + google.protobuf.StringValue department = 7; + // 描述 + google.protobuf.StringValue comment = 8; + // 申请时间 + google.protobuf.StringValue ctime = 9; + // 修改时间 + google.protobuf.StringValue mtime = 10; +} \ No newline at end of file diff --git a/common/api/v1/ratelimit.pb.go b/common/api/v1/ratelimit.pb.go new file mode 100644 index 000000000..9a66fb3a4 --- /dev/null +++ b/common/api/v1/ratelimit.pb.go @@ -0,0 +1,1160 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: ratelimit.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import duration "github.com/golang/protobuf/ptypes/duration" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +// 限流资源 +type Rule_Resource int32 + +const ( + // 针对QPS进行限流 + Rule_QPS Rule_Resource = 0 + // 针对并发数进行限流 + Rule_CONCURRENCY Rule_Resource = 1 +) + +var Rule_Resource_name = map[int32]string{ + 0: "QPS", + 1: "CONCURRENCY", +} +var Rule_Resource_value = map[string]int32{ + "QPS": 0, + "CONCURRENCY": 1, +} + +func (x Rule_Resource) String() string { + return proto.EnumName(Rule_Resource_name, int32(x)) +} +func (Rule_Resource) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{1, 0} +} + +// 限流类型 +// global全局限流(默认)或者local单机限流 +type Rule_Type int32 + +const ( + Rule_GLOBAL Rule_Type = 0 + Rule_LOCAL Rule_Type = 1 +) + +var Rule_Type_name = map[int32]string{ + 0: "GLOBAL", + 1: "LOCAL", +} +var Rule_Type_value = map[string]int32{ + "GLOBAL": 0, + "LOCAL": 1, +} + +func (x Rule_Type) String() string { + return proto.EnumName(Rule_Type_name, int32(x)) +} +func (Rule_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{1, 1} +} + +// 限流阈值模式 +type Rule_AmountMode int32 + +const ( + Rule_GLOBAL_TOTAL Rule_AmountMode = 0 + Rule_SHARE_EQUALLY Rule_AmountMode = 1 +) + +var Rule_AmountMode_name = map[int32]string{ + 0: "GLOBAL_TOTAL", + 1: "SHARE_EQUALLY", +} +var Rule_AmountMode_value = map[string]int32{ + "GLOBAL_TOTAL": 0, + "SHARE_EQUALLY": 1, +} + +func (x Rule_AmountMode) String() string { + return proto.EnumName(Rule_AmountMode_name, int32(x)) +} +func (Rule_AmountMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{1, 2} +} + +// 与限流集群连接失败时降级模式 +type Rule_FailoverType int32 + +const ( + Rule_FAILOVER_LOCAL Rule_FailoverType = 0 + Rule_FAILOVER_PASS Rule_FailoverType = 1 +) + +var Rule_FailoverType_name = map[int32]string{ + 0: "FAILOVER_LOCAL", + 1: "FAILOVER_PASS", +} +var Rule_FailoverType_value = map[string]int32{ + "FAILOVER_LOCAL": 0, + "FAILOVER_PASS": 1, +} + +func (x Rule_FailoverType) String() string { + return proto.EnumName(Rule_FailoverType_name, int32(x)) +} +func (Rule_FailoverType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{1, 3} +} + +// 同一服务下限流规则集合 +type RateLimit struct { + // 限流规则集合 + Rules []*Rule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` + // 限流规则汇总的revision信息 + Revision *wrappers.StringValue `protobuf:"bytes,2,opt,name=revision,proto3" json:"revision,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimit) Reset() { *m = RateLimit{} } +func (m *RateLimit) String() string { return proto.CompactTextString(m) } +func (*RateLimit) ProtoMessage() {} +func (*RateLimit) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{0} +} +func (m *RateLimit) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimit.Unmarshal(m, b) +} +func (m *RateLimit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimit.Marshal(b, m, deterministic) +} +func (dst *RateLimit) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimit.Merge(dst, src) +} +func (m *RateLimit) XXX_Size() int { + return xxx_messageInfo_RateLimit.Size(m) +} +func (m *RateLimit) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimit.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimit proto.InternalMessageInfo + +func (m *RateLimit) GetRules() []*Rule { + if m != nil { + return m.Rules + } + return nil +} + +func (m *RateLimit) GetRevision() *wrappers.StringValue { + if m != nil { + return m.Revision + } + return nil +} + +// 单个限流规则信息 +type Rule struct { + // 限流规则唯一标识 + Id *wrappers.StringValue `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // 限流规则所属服务名 + Service *wrappers.StringValue `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"` + // 限流规则所属命名空间 + Namespace *wrappers.StringValue `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` + // 可选,SUBSET标识 + Subset map[string]*MatchString `protobuf:"bytes,4,rep,name=subset,proto3" json:"subset,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // 限流规则优先级,0值最高 + Priority *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=priority,proto3" json:"priority,omitempty"` + Resource Rule_Resource `protobuf:"varint,6,opt,name=resource,proto3,enum=v1.Rule_Resource" json:"resource,omitempty"` + Type Rule_Type `protobuf:"varint,7,opt,name=type,proto3,enum=v1.Rule_Type" json:"type,omitempty"` + // 业务标签集合,通过KV进行匹配,全部匹配才使用该规则 + Labels map[string]*MatchString `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // 限流阈值 + // 可以有多个粒度的配置(比如同时针对秒级,分钟级,天级),匹配一个则进行限流 + // 全局限流模式下,该值为服务配额总量;单机限流模式下,该值为单个节点能处理的配额量 + Amounts []*Amount `protobuf:"bytes,9,rep,name=amounts,proto3" json:"amounts,omitempty"` + // 限流动作,对应着客户端的插件名字 + Action *wrappers.StringValue `protobuf:"bytes,10,opt,name=action,proto3" json:"action,omitempty"` + // 是否停用该限流规则,默认启用 + Disable *wrappers.BoolValue `protobuf:"bytes,11,opt,name=disable,proto3" json:"disable,omitempty"` + // 限流上报方式,同时支持按固定周期上报,以及达到配额百分比后上报 + Report *Report `protobuf:"bytes,12,opt,name=report,proto3" json:"report,omitempty"` + // 限流规则创建时间 + Ctime *wrappers.StringValue `protobuf:"bytes,13,opt,name=ctime,proto3" json:"ctime,omitempty"` + // 限流规则修改时间 + Mtime *wrappers.StringValue `protobuf:"bytes,14,opt,name=mtime,proto3" json:"mtime,omitempty"` + // 限流规则revision信息 + Revision *wrappers.StringValue `protobuf:"bytes,15,opt,name=revision,proto3" json:"revision,omitempty"` + // 服务的TOKEN信息,仅用于控制台,discover接口不下发 + ServiceToken *wrappers.StringValue `protobuf:"bytes,16,opt,name=service_token,proto3" json:"service_token,omitempty"` + // 配额调整算法 + Adjuster *AmountAdjuster `protobuf:"bytes,17,opt,name=adjuster,proto3" json:"adjuster,omitempty"` + // 通配符是否合并计算,默认分开计数 + RegexCombine *wrappers.BoolValue `protobuf:"bytes,18,opt,name=regex_combine,json=regexCombine,proto3" json:"regex_combine,omitempty"` + AmountMode Rule_AmountMode `protobuf:"varint,19,opt,name=amount_mode,json=amountMode,proto3,enum=v1.Rule_AmountMode" json:"amount_mode,omitempty"` + Failover Rule_FailoverType `protobuf:"varint,20,opt,name=failover,proto3,enum=v1.Rule_FailoverType" json:"failover,omitempty"` + // 分布式限流服务集群 + Cluster *RateLimitCluster `protobuf:"bytes,21,opt,name=cluster,proto3" json:"cluster,omitempty"` + // 被调接口名 + Method *MatchString `protobuf:"bytes,22,opt,name=method,proto3" json:"method,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Rule) Reset() { *m = Rule{} } +func (m *Rule) String() string { return proto.CompactTextString(m) } +func (*Rule) ProtoMessage() {} +func (*Rule) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{1} +} +func (m *Rule) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Rule.Unmarshal(m, b) +} +func (m *Rule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Rule.Marshal(b, m, deterministic) +} +func (dst *Rule) XXX_Merge(src proto.Message) { + xxx_messageInfo_Rule.Merge(dst, src) +} +func (m *Rule) XXX_Size() int { + return xxx_messageInfo_Rule.Size(m) +} +func (m *Rule) XXX_DiscardUnknown() { + xxx_messageInfo_Rule.DiscardUnknown(m) +} + +var xxx_messageInfo_Rule proto.InternalMessageInfo + +func (m *Rule) GetId() *wrappers.StringValue { + if m != nil { + return m.Id + } + return nil +} + +func (m *Rule) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *Rule) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *Rule) GetSubset() map[string]*MatchString { + if m != nil { + return m.Subset + } + return nil +} + +func (m *Rule) GetPriority() *wrappers.UInt32Value { + if m != nil { + return m.Priority + } + return nil +} + +func (m *Rule) GetResource() Rule_Resource { + if m != nil { + return m.Resource + } + return Rule_QPS +} + +func (m *Rule) GetType() Rule_Type { + if m != nil { + return m.Type + } + return Rule_GLOBAL +} + +func (m *Rule) GetLabels() map[string]*MatchString { + if m != nil { + return m.Labels + } + return nil +} + +func (m *Rule) GetAmounts() []*Amount { + if m != nil { + return m.Amounts + } + return nil +} + +func (m *Rule) GetAction() *wrappers.StringValue { + if m != nil { + return m.Action + } + return nil +} + +func (m *Rule) GetDisable() *wrappers.BoolValue { + if m != nil { + return m.Disable + } + return nil +} + +func (m *Rule) GetReport() *Report { + if m != nil { + return m.Report + } + return nil +} + +func (m *Rule) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *Rule) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +func (m *Rule) GetRevision() *wrappers.StringValue { + if m != nil { + return m.Revision + } + return nil +} + +func (m *Rule) GetServiceToken() *wrappers.StringValue { + if m != nil { + return m.ServiceToken + } + return nil +} + +func (m *Rule) GetAdjuster() *AmountAdjuster { + if m != nil { + return m.Adjuster + } + return nil +} + +func (m *Rule) GetRegexCombine() *wrappers.BoolValue { + if m != nil { + return m.RegexCombine + } + return nil +} + +func (m *Rule) GetAmountMode() Rule_AmountMode { + if m != nil { + return m.AmountMode + } + return Rule_GLOBAL_TOTAL +} + +func (m *Rule) GetFailover() Rule_FailoverType { + if m != nil { + return m.Failover + } + return Rule_FAILOVER_LOCAL +} + +func (m *Rule) GetCluster() *RateLimitCluster { + if m != nil { + return m.Cluster + } + return nil +} + +func (m *Rule) GetMethod() *MatchString { + if m != nil { + return m.Method + } + return nil +} + +// 分布式限流服务集群 +type RateLimitCluster struct { + Service *wrappers.StringValue `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + // 限流规则所属命名空间 + Namespace *wrappers.StringValue `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RateLimitCluster) Reset() { *m = RateLimitCluster{} } +func (m *RateLimitCluster) String() string { return proto.CompactTextString(m) } +func (*RateLimitCluster) ProtoMessage() {} +func (*RateLimitCluster) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{2} +} +func (m *RateLimitCluster) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RateLimitCluster.Unmarshal(m, b) +} +func (m *RateLimitCluster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RateLimitCluster.Marshal(b, m, deterministic) +} +func (dst *RateLimitCluster) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimitCluster.Merge(dst, src) +} +func (m *RateLimitCluster) XXX_Size() int { + return xxx_messageInfo_RateLimitCluster.Size(m) +} +func (m *RateLimitCluster) XXX_DiscardUnknown() { + xxx_messageInfo_RateLimitCluster.DiscardUnknown(m) +} + +var xxx_messageInfo_RateLimitCluster proto.InternalMessageInfo + +func (m *RateLimitCluster) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *RateLimitCluster) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +// 限流配额 +type Amount struct { + // 时间周期内的最大配额数 + MaxAmount *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=maxAmount,proto3" json:"maxAmount,omitempty"` + // 配额生效的时间周期,必须大于等于1s + ValidDuration *duration.Duration `protobuf:"bytes,2,opt,name=validDuration,proto3" json:"validDuration,omitempty"` + // 请求统计精度 + Precision *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=precision,proto3" json:"precision,omitempty"` + // 可选,起始限流阈值,爬坡起始值 + StartAmount *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=startAmount,proto3" json:"startAmount,omitempty"` + // 可选,最小限流阈值,降低时最小值 + MinAmount *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=minAmount,proto3" json:"minAmount,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Amount) Reset() { *m = Amount{} } +func (m *Amount) String() string { return proto.CompactTextString(m) } +func (*Amount) ProtoMessage() {} +func (*Amount) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{3} +} +func (m *Amount) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Amount.Unmarshal(m, b) +} +func (m *Amount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Amount.Marshal(b, m, deterministic) +} +func (dst *Amount) XXX_Merge(src proto.Message) { + xxx_messageInfo_Amount.Merge(dst, src) +} +func (m *Amount) XXX_Size() int { + return xxx_messageInfo_Amount.Size(m) +} +func (m *Amount) XXX_DiscardUnknown() { + xxx_messageInfo_Amount.DiscardUnknown(m) +} + +var xxx_messageInfo_Amount proto.InternalMessageInfo + +func (m *Amount) GetMaxAmount() *wrappers.UInt32Value { + if m != nil { + return m.MaxAmount + } + return nil +} + +func (m *Amount) GetValidDuration() *duration.Duration { + if m != nil { + return m.ValidDuration + } + return nil +} + +func (m *Amount) GetPrecision() *wrappers.UInt32Value { + if m != nil { + return m.Precision + } + return nil +} + +func (m *Amount) GetStartAmount() *wrappers.UInt32Value { + if m != nil { + return m.StartAmount + } + return nil +} + +func (m *Amount) GetMinAmount() *wrappers.UInt32Value { + if m != nil { + return m.MinAmount + } + return nil +} + +// 限流上报方式 +type Report struct { + // 配额固定上报周期,单位毫秒 + Interval *duration.Duration `protobuf:"bytes,1,opt,name=interval,proto3" json:"interval,omitempty"` + // 使用了百分之多少配额后启动一次实时上报,值范围(0,100] + AmountPercent *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=amountPercent,proto3" json:"amountPercent,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Report) Reset() { *m = Report{} } +func (m *Report) String() string { return proto.CompactTextString(m) } +func (*Report) ProtoMessage() {} +func (*Report) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{4} +} +func (m *Report) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Report.Unmarshal(m, b) +} +func (m *Report) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Report.Marshal(b, m, deterministic) +} +func (dst *Report) XXX_Merge(src proto.Message) { + xxx_messageInfo_Report.Merge(dst, src) +} +func (m *Report) XXX_Size() int { + return xxx_messageInfo_Report.Size(m) +} +func (m *Report) XXX_DiscardUnknown() { + xxx_messageInfo_Report.DiscardUnknown(m) +} + +var xxx_messageInfo_Report proto.InternalMessageInfo + +func (m *Report) GetInterval() *duration.Duration { + if m != nil { + return m.Interval + } + return nil +} + +func (m *Report) GetAmountPercent() *wrappers.UInt32Value { + if m != nil { + return m.AmountPercent + } + return nil +} + +// 配额调整算法 +type AmountAdjuster struct { + Climb *ClimbConfig `protobuf:"bytes,1,opt,name=climb,proto3" json:"climb,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AmountAdjuster) Reset() { *m = AmountAdjuster{} } +func (m *AmountAdjuster) String() string { return proto.CompactTextString(m) } +func (*AmountAdjuster) ProtoMessage() {} +func (*AmountAdjuster) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{5} +} +func (m *AmountAdjuster) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AmountAdjuster.Unmarshal(m, b) +} +func (m *AmountAdjuster) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AmountAdjuster.Marshal(b, m, deterministic) +} +func (dst *AmountAdjuster) XXX_Merge(src proto.Message) { + xxx_messageInfo_AmountAdjuster.Merge(dst, src) +} +func (m *AmountAdjuster) XXX_Size() int { + return xxx_messageInfo_AmountAdjuster.Size(m) +} +func (m *AmountAdjuster) XXX_DiscardUnknown() { + xxx_messageInfo_AmountAdjuster.DiscardUnknown(m) +} + +var xxx_messageInfo_AmountAdjuster proto.InternalMessageInfo + +func (m *AmountAdjuster) GetClimb() *ClimbConfig { + if m != nil { + return m.Climb + } + return nil +} + +// 限流调整算法Climb相关配置 +type ClimbConfig struct { + Enable *wrappers.BoolValue `protobuf:"bytes,1,opt,name=enable,proto3" json:"enable,omitempty"` + Metric *ClimbConfig_MetricConfig `protobuf:"bytes,2,opt,name=metric,proto3" json:"metric,omitempty"` + Policy *ClimbConfig_TriggerPolicy `protobuf:"bytes,3,opt,name=policy,proto3" json:"policy,omitempty"` + Throttling *ClimbConfig_ClimbThrottling `protobuf:"bytes,4,opt,name=throttling,proto3" json:"throttling,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClimbConfig) Reset() { *m = ClimbConfig{} } +func (m *ClimbConfig) String() string { return proto.CompactTextString(m) } +func (*ClimbConfig) ProtoMessage() {} +func (*ClimbConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{6} +} +func (m *ClimbConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClimbConfig.Unmarshal(m, b) +} +func (m *ClimbConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClimbConfig.Marshal(b, m, deterministic) +} +func (dst *ClimbConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClimbConfig.Merge(dst, src) +} +func (m *ClimbConfig) XXX_Size() int { + return xxx_messageInfo_ClimbConfig.Size(m) +} +func (m *ClimbConfig) XXX_DiscardUnknown() { + xxx_messageInfo_ClimbConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_ClimbConfig proto.InternalMessageInfo + +func (m *ClimbConfig) GetEnable() *wrappers.BoolValue { + if m != nil { + return m.Enable + } + return nil +} + +func (m *ClimbConfig) GetMetric() *ClimbConfig_MetricConfig { + if m != nil { + return m.Metric + } + return nil +} + +func (m *ClimbConfig) GetPolicy() *ClimbConfig_TriggerPolicy { + if m != nil { + return m.Policy + } + return nil +} + +func (m *ClimbConfig) GetThrottling() *ClimbConfig_ClimbThrottling { + if m != nil { + return m.Throttling + } + return nil +} + +// 限流数据统计配置 +type ClimbConfig_MetricConfig struct { + // 限流数据度量周期,默认60s + Window *duration.Duration `protobuf:"bytes,1,opt,name=window,proto3" json:"window,omitempty"` + // 数据统计精度,决定数据度量的最小周期,度量滑窗的步长=window/precision + Precision *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=precision,proto3" json:"precision,omitempty"` + // 上报周期,默认20s + ReportInterval *duration.Duration `protobuf:"bytes,3,opt,name=reportInterval,proto3" json:"reportInterval,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClimbConfig_MetricConfig) Reset() { *m = ClimbConfig_MetricConfig{} } +func (m *ClimbConfig_MetricConfig) String() string { return proto.CompactTextString(m) } +func (*ClimbConfig_MetricConfig) ProtoMessage() {} +func (*ClimbConfig_MetricConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{6, 0} +} +func (m *ClimbConfig_MetricConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClimbConfig_MetricConfig.Unmarshal(m, b) +} +func (m *ClimbConfig_MetricConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClimbConfig_MetricConfig.Marshal(b, m, deterministic) +} +func (dst *ClimbConfig_MetricConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClimbConfig_MetricConfig.Merge(dst, src) +} +func (m *ClimbConfig_MetricConfig) XXX_Size() int { + return xxx_messageInfo_ClimbConfig_MetricConfig.Size(m) +} +func (m *ClimbConfig_MetricConfig) XXX_DiscardUnknown() { + xxx_messageInfo_ClimbConfig_MetricConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_ClimbConfig_MetricConfig proto.InternalMessageInfo + +func (m *ClimbConfig_MetricConfig) GetWindow() *duration.Duration { + if m != nil { + return m.Window + } + return nil +} + +func (m *ClimbConfig_MetricConfig) GetPrecision() *wrappers.UInt32Value { + if m != nil { + return m.Precision + } + return nil +} + +func (m *ClimbConfig_MetricConfig) GetReportInterval() *duration.Duration { + if m != nil { + return m.ReportInterval + } + return nil +} + +// 触发调整的策略 +type ClimbConfig_TriggerPolicy struct { + ErrorRate *ClimbConfig_TriggerPolicy_ErrorRate `protobuf:"bytes,1,opt,name=errorRate,proto3" json:"errorRate,omitempty"` + SlowRate *ClimbConfig_TriggerPolicy_SlowRate `protobuf:"bytes,2,opt,name=slowRate,proto3" json:"slowRate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClimbConfig_TriggerPolicy) Reset() { *m = ClimbConfig_TriggerPolicy{} } +func (m *ClimbConfig_TriggerPolicy) String() string { return proto.CompactTextString(m) } +func (*ClimbConfig_TriggerPolicy) ProtoMessage() {} +func (*ClimbConfig_TriggerPolicy) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{6, 1} +} +func (m *ClimbConfig_TriggerPolicy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClimbConfig_TriggerPolicy.Unmarshal(m, b) +} +func (m *ClimbConfig_TriggerPolicy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClimbConfig_TriggerPolicy.Marshal(b, m, deterministic) +} +func (dst *ClimbConfig_TriggerPolicy) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClimbConfig_TriggerPolicy.Merge(dst, src) +} +func (m *ClimbConfig_TriggerPolicy) XXX_Size() int { + return xxx_messageInfo_ClimbConfig_TriggerPolicy.Size(m) +} +func (m *ClimbConfig_TriggerPolicy) XXX_DiscardUnknown() { + xxx_messageInfo_ClimbConfig_TriggerPolicy.DiscardUnknown(m) +} + +var xxx_messageInfo_ClimbConfig_TriggerPolicy proto.InternalMessageInfo + +func (m *ClimbConfig_TriggerPolicy) GetErrorRate() *ClimbConfig_TriggerPolicy_ErrorRate { + if m != nil { + return m.ErrorRate + } + return nil +} + +func (m *ClimbConfig_TriggerPolicy) GetSlowRate() *ClimbConfig_TriggerPolicy_SlowRate { + if m != nil { + return m.SlowRate + } + return nil +} + +// 错误率触发调整配置 +type ClimbConfig_TriggerPolicy_ErrorRate struct { + Enable *wrappers.BoolValue `protobuf:"bytes,1,opt,name=enable,proto3" json:"enable,omitempty"` + RequestVolumeThreshold *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=requestVolumeThreshold,proto3" json:"requestVolumeThreshold,omitempty"` + ErrorRate *wrappers.Int32Value `protobuf:"bytes,3,opt,name=errorRate,proto3" json:"errorRate,omitempty"` + Specials []*ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig `protobuf:"bytes,4,rep,name=specials,proto3" json:"specials,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClimbConfig_TriggerPolicy_ErrorRate) Reset() { *m = ClimbConfig_TriggerPolicy_ErrorRate{} } +func (m *ClimbConfig_TriggerPolicy_ErrorRate) String() string { return proto.CompactTextString(m) } +func (*ClimbConfig_TriggerPolicy_ErrorRate) ProtoMessage() {} +func (*ClimbConfig_TriggerPolicy_ErrorRate) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{6, 1, 0} +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate.Unmarshal(m, b) +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate.Marshal(b, m, deterministic) +} +func (dst *ClimbConfig_TriggerPolicy_ErrorRate) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate.Merge(dst, src) +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate) XXX_Size() int { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate.Size(m) +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate) XXX_DiscardUnknown() { + xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate.DiscardUnknown(m) +} + +var xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate proto.InternalMessageInfo + +func (m *ClimbConfig_TriggerPolicy_ErrorRate) GetEnable() *wrappers.BoolValue { + if m != nil { + return m.Enable + } + return nil +} + +func (m *ClimbConfig_TriggerPolicy_ErrorRate) GetRequestVolumeThreshold() *wrappers.UInt32Value { + if m != nil { + return m.RequestVolumeThreshold + } + return nil +} + +func (m *ClimbConfig_TriggerPolicy_ErrorRate) GetErrorRate() *wrappers.Int32Value { + if m != nil { + return m.ErrorRate + } + return nil +} + +func (m *ClimbConfig_TriggerPolicy_ErrorRate) GetSpecials() []*ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig { + if m != nil { + return m.Specials + } + return nil +} + +// 特殊错误码触发调整配置 +type ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig struct { + Type *wrappers.StringValue `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + ErrorCodes []*wrappers.Int64Value `protobuf:"bytes,2,rep,name=errorCodes,proto3" json:"errorCodes,omitempty"` + ErrorRate *wrappers.Int32Value `protobuf:"bytes,3,opt,name=errorRate,proto3" json:"errorRate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) Reset() { + *m = ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig{} +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) String() string { + return proto.CompactTextString(m) +} +func (*ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) ProtoMessage() {} +func (*ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{6, 1, 0, 0} +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig.Unmarshal(m, b) +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig.Marshal(b, m, deterministic) +} +func (dst *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig.Merge(dst, src) +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) XXX_Size() int { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig.Size(m) +} +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) XXX_DiscardUnknown() { + xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig proto.InternalMessageInfo + +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) GetType() *wrappers.StringValue { + if m != nil { + return m.Type + } + return nil +} + +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) GetErrorCodes() []*wrappers.Int64Value { + if m != nil { + return m.ErrorCodes + } + return nil +} + +func (m *ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig) GetErrorRate() *wrappers.Int32Value { + if m != nil { + return m.ErrorRate + } + return nil +} + +// 慢调用触发调整配置 +type ClimbConfig_TriggerPolicy_SlowRate struct { + Enable *wrappers.BoolValue `protobuf:"bytes,1,opt,name=enable,proto3" json:"enable,omitempty"` + MaxRt *duration.Duration `protobuf:"bytes,2,opt,name=maxRt,proto3" json:"maxRt,omitempty"` + SlowRate *wrappers.Int32Value `protobuf:"bytes,3,opt,name=slowRate,proto3" json:"slowRate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClimbConfig_TriggerPolicy_SlowRate) Reset() { *m = ClimbConfig_TriggerPolicy_SlowRate{} } +func (m *ClimbConfig_TriggerPolicy_SlowRate) String() string { return proto.CompactTextString(m) } +func (*ClimbConfig_TriggerPolicy_SlowRate) ProtoMessage() {} +func (*ClimbConfig_TriggerPolicy_SlowRate) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{6, 1, 1} +} +func (m *ClimbConfig_TriggerPolicy_SlowRate) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_SlowRate.Unmarshal(m, b) +} +func (m *ClimbConfig_TriggerPolicy_SlowRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_SlowRate.Marshal(b, m, deterministic) +} +func (dst *ClimbConfig_TriggerPolicy_SlowRate) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClimbConfig_TriggerPolicy_SlowRate.Merge(dst, src) +} +func (m *ClimbConfig_TriggerPolicy_SlowRate) XXX_Size() int { + return xxx_messageInfo_ClimbConfig_TriggerPolicy_SlowRate.Size(m) +} +func (m *ClimbConfig_TriggerPolicy_SlowRate) XXX_DiscardUnknown() { + xxx_messageInfo_ClimbConfig_TriggerPolicy_SlowRate.DiscardUnknown(m) +} + +var xxx_messageInfo_ClimbConfig_TriggerPolicy_SlowRate proto.InternalMessageInfo + +func (m *ClimbConfig_TriggerPolicy_SlowRate) GetEnable() *wrappers.BoolValue { + if m != nil { + return m.Enable + } + return nil +} + +func (m *ClimbConfig_TriggerPolicy_SlowRate) GetMaxRt() *duration.Duration { + if m != nil { + return m.MaxRt + } + return nil +} + +func (m *ClimbConfig_TriggerPolicy_SlowRate) GetSlowRate() *wrappers.Int32Value { + if m != nil { + return m.SlowRate + } + return nil +} + +// 爬坡调整相关参数 +type ClimbConfig_ClimbThrottling struct { + ColdBelowTuneDownRate *wrappers.Int32Value `protobuf:"bytes,1,opt,name=coldBelowTuneDownRate,proto3" json:"coldBelowTuneDownRate,omitempty"` + ColdBelowTuneUpRate *wrappers.Int32Value `protobuf:"bytes,2,opt,name=coldBelowTuneUpRate,proto3" json:"coldBelowTuneUpRate,omitempty"` + ColdAboveTuneDownRate *wrappers.Int32Value `protobuf:"bytes,3,opt,name=coldAboveTuneDownRate,proto3" json:"coldAboveTuneDownRate,omitempty"` + ColdAboveTuneUpRate *wrappers.Int32Value `protobuf:"bytes,4,opt,name=coldAboveTuneUpRate,proto3" json:"coldAboveTuneUpRate,omitempty"` + LimitThresholdToTuneUp *wrappers.Int32Value `protobuf:"bytes,5,opt,name=limitThresholdToTuneUp,proto3" json:"limitThresholdToTuneUp,omitempty"` + JudgeDuration *duration.Duration `protobuf:"bytes,6,opt,name=judgeDuration,proto3" json:"judgeDuration,omitempty"` + TuneUpPeriod *wrappers.Int32Value `protobuf:"bytes,7,opt,name=tuneUpPeriod,proto3" json:"tuneUpPeriod,omitempty"` + TuneDownPeriod *wrappers.Int32Value `protobuf:"bytes,8,opt,name=tuneDownPeriod,proto3" json:"tuneDownPeriod,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClimbConfig_ClimbThrottling) Reset() { *m = ClimbConfig_ClimbThrottling{} } +func (m *ClimbConfig_ClimbThrottling) String() string { return proto.CompactTextString(m) } +func (*ClimbConfig_ClimbThrottling) ProtoMessage() {} +func (*ClimbConfig_ClimbThrottling) Descriptor() ([]byte, []int) { + return fileDescriptor_ratelimit_2b495c7362132910, []int{6, 2} +} +func (m *ClimbConfig_ClimbThrottling) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClimbConfig_ClimbThrottling.Unmarshal(m, b) +} +func (m *ClimbConfig_ClimbThrottling) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClimbConfig_ClimbThrottling.Marshal(b, m, deterministic) +} +func (dst *ClimbConfig_ClimbThrottling) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClimbConfig_ClimbThrottling.Merge(dst, src) +} +func (m *ClimbConfig_ClimbThrottling) XXX_Size() int { + return xxx_messageInfo_ClimbConfig_ClimbThrottling.Size(m) +} +func (m *ClimbConfig_ClimbThrottling) XXX_DiscardUnknown() { + xxx_messageInfo_ClimbConfig_ClimbThrottling.DiscardUnknown(m) +} + +var xxx_messageInfo_ClimbConfig_ClimbThrottling proto.InternalMessageInfo + +func (m *ClimbConfig_ClimbThrottling) GetColdBelowTuneDownRate() *wrappers.Int32Value { + if m != nil { + return m.ColdBelowTuneDownRate + } + return nil +} + +func (m *ClimbConfig_ClimbThrottling) GetColdBelowTuneUpRate() *wrappers.Int32Value { + if m != nil { + return m.ColdBelowTuneUpRate + } + return nil +} + +func (m *ClimbConfig_ClimbThrottling) GetColdAboveTuneDownRate() *wrappers.Int32Value { + if m != nil { + return m.ColdAboveTuneDownRate + } + return nil +} + +func (m *ClimbConfig_ClimbThrottling) GetColdAboveTuneUpRate() *wrappers.Int32Value { + if m != nil { + return m.ColdAboveTuneUpRate + } + return nil +} + +func (m *ClimbConfig_ClimbThrottling) GetLimitThresholdToTuneUp() *wrappers.Int32Value { + if m != nil { + return m.LimitThresholdToTuneUp + } + return nil +} + +func (m *ClimbConfig_ClimbThrottling) GetJudgeDuration() *duration.Duration { + if m != nil { + return m.JudgeDuration + } + return nil +} + +func (m *ClimbConfig_ClimbThrottling) GetTuneUpPeriod() *wrappers.Int32Value { + if m != nil { + return m.TuneUpPeriod + } + return nil +} + +func (m *ClimbConfig_ClimbThrottling) GetTuneDownPeriod() *wrappers.Int32Value { + if m != nil { + return m.TuneDownPeriod + } + return nil +} + +func init() { + proto.RegisterType((*RateLimit)(nil), "v1.RateLimit") + proto.RegisterType((*Rule)(nil), "v1.Rule") + proto.RegisterMapType((map[string]*MatchString)(nil), "v1.Rule.LabelsEntry") + proto.RegisterMapType((map[string]*MatchString)(nil), "v1.Rule.SubsetEntry") + proto.RegisterType((*RateLimitCluster)(nil), "v1.RateLimitCluster") + proto.RegisterType((*Amount)(nil), "v1.Amount") + proto.RegisterType((*Report)(nil), "v1.Report") + proto.RegisterType((*AmountAdjuster)(nil), "v1.AmountAdjuster") + proto.RegisterType((*ClimbConfig)(nil), "v1.ClimbConfig") + proto.RegisterType((*ClimbConfig_MetricConfig)(nil), "v1.ClimbConfig.MetricConfig") + proto.RegisterType((*ClimbConfig_TriggerPolicy)(nil), "v1.ClimbConfig.TriggerPolicy") + proto.RegisterType((*ClimbConfig_TriggerPolicy_ErrorRate)(nil), "v1.ClimbConfig.TriggerPolicy.ErrorRate") + proto.RegisterType((*ClimbConfig_TriggerPolicy_ErrorRate_SpecialConfig)(nil), "v1.ClimbConfig.TriggerPolicy.ErrorRate.SpecialConfig") + proto.RegisterType((*ClimbConfig_TriggerPolicy_SlowRate)(nil), "v1.ClimbConfig.TriggerPolicy.SlowRate") + proto.RegisterType((*ClimbConfig_ClimbThrottling)(nil), "v1.ClimbConfig.ClimbThrottling") + proto.RegisterEnum("v1.Rule_Resource", Rule_Resource_name, Rule_Resource_value) + proto.RegisterEnum("v1.Rule_Type", Rule_Type_name, Rule_Type_value) + proto.RegisterEnum("v1.Rule_AmountMode", Rule_AmountMode_name, Rule_AmountMode_value) + proto.RegisterEnum("v1.Rule_FailoverType", Rule_FailoverType_name, Rule_FailoverType_value) +} + +func init() { proto.RegisterFile("ratelimit.proto", fileDescriptor_ratelimit_2b495c7362132910) } + +var fileDescriptor_ratelimit_2b495c7362132910 = []byte{ + // 1341 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xdd, 0x72, 0xdb, 0x36, + 0x13, 0x0d, 0xf5, 0x43, 0x4b, 0x2b, 0x4b, 0x56, 0x90, 0x9f, 0xe1, 0xa7, 0xaf, 0x49, 0x53, 0x4d, + 0xda, 0xe4, 0x22, 0x55, 0x6a, 0xc7, 0x4e, 0xd2, 0x74, 0xa6, 0x19, 0x59, 0x51, 0xda, 0x74, 0xe4, + 0xd8, 0x86, 0xe4, 0xcc, 0xf4, 0xca, 0x43, 0x91, 0x88, 0x8c, 0x84, 0x22, 0x54, 0x10, 0x92, 0xe3, + 0xeb, 0xce, 0xf4, 0x51, 0xda, 0xbe, 0x42, 0x2f, 0x3a, 0xd3, 0x47, 0xe8, 0x1b, 0xf4, 0x19, 0xfa, + 0x06, 0x1d, 0x02, 0x20, 0x45, 0xca, 0xb1, 0xc5, 0x38, 0x77, 0x14, 0xf6, 0x9c, 0xdd, 0x83, 0xdd, + 0xc5, 0x02, 0x82, 0x35, 0x6e, 0x0b, 0xe2, 0xd1, 0x31, 0x15, 0xad, 0x09, 0x67, 0x82, 0xa1, 0xdc, + 0x6c, 0xbd, 0x71, 0x73, 0xc4, 0xd8, 0xc8, 0x23, 0xf7, 0xe5, 0xca, 0x70, 0xfa, 0xfa, 0xfe, 0x31, + 0xb7, 0x27, 0x13, 0xc2, 0x03, 0x85, 0x39, 0x6d, 0x77, 0xa7, 0xdc, 0x16, 0x94, 0xf9, 0xda, 0x5e, + 0x19, 0x33, 0x97, 0x78, 0xea, 0x47, 0x93, 0x40, 0x19, 0xdb, 0x82, 0xf4, 0xc2, 0x18, 0xe8, 0x26, + 0x14, 0xf9, 0xd4, 0x23, 0x81, 0x65, 0xdc, 0xca, 0xdf, 0xad, 0x6c, 0x94, 0x5a, 0xb3, 0xf5, 0x16, + 0x9e, 0x7a, 0x04, 0xab, 0x65, 0xf4, 0x18, 0x4a, 0x9c, 0xcc, 0x68, 0x40, 0x99, 0x6f, 0xe5, 0x6e, + 0x19, 0x77, 0x2b, 0x1b, 0x9f, 0xb4, 0x54, 0xb0, 0x56, 0x14, 0xac, 0xd5, 0x17, 0x9c, 0xfa, 0xa3, + 0x57, 0xb6, 0x37, 0x25, 0x38, 0x46, 0x37, 0x7f, 0xad, 0x40, 0x21, 0xf4, 0x84, 0xee, 0x41, 0x8e, + 0xba, 0x96, 0x91, 0x81, 0x9c, 0xa3, 0x2e, 0x7a, 0x08, 0x2b, 0x01, 0xe1, 0x33, 0xea, 0x90, 0x4c, + 0xf1, 0x22, 0x30, 0x7a, 0x02, 0x65, 0xdf, 0x1e, 0x93, 0x60, 0x62, 0x3b, 0xc4, 0xca, 0x67, 0x60, + 0xce, 0xe1, 0xe8, 0x1e, 0x98, 0xc1, 0x74, 0x18, 0x10, 0x61, 0x15, 0x64, 0x16, 0xae, 0x46, 0x59, + 0x68, 0xf5, 0xe5, 0x72, 0xd7, 0x17, 0xfc, 0x04, 0x6b, 0x4c, 0x98, 0x92, 0x09, 0xa7, 0x8c, 0x53, + 0x71, 0x62, 0x15, 0xcf, 0x08, 0x74, 0xf0, 0xc2, 0x17, 0x0f, 0x36, 0x74, 0x4a, 0x22, 0x34, 0xfa, + 0x32, 0x4c, 0x66, 0xc0, 0xa6, 0xdc, 0x21, 0x96, 0x79, 0xcb, 0xb8, 0x5b, 0xdb, 0xb8, 0x1c, 0x47, + 0xc2, 0xda, 0x80, 0x63, 0x08, 0xfa, 0x0c, 0x0a, 0xe2, 0x64, 0x42, 0xac, 0x15, 0x09, 0xad, 0xc6, + 0xd0, 0xc1, 0xc9, 0x84, 0x60, 0x69, 0x0a, 0x95, 0x7b, 0xf6, 0x90, 0x78, 0x81, 0x55, 0x5a, 0x50, + 0xde, 0x93, 0xcb, 0x5a, 0xb9, 0xc2, 0xa0, 0xdb, 0xb0, 0x62, 0x8f, 0xd9, 0xd4, 0x17, 0x81, 0x55, + 0x96, 0x70, 0x08, 0xe1, 0x6d, 0xb9, 0x84, 0x23, 0x13, 0xda, 0x04, 0xd3, 0x76, 0xc2, 0xe6, 0xb1, + 0x20, 0x43, 0x1a, 0x35, 0x16, 0x6d, 0xc2, 0x8a, 0x4b, 0x03, 0x7b, 0xe8, 0x11, 0xab, 0x22, 0x69, + 0x8d, 0x53, 0xb4, 0x6d, 0xc6, 0x3c, 0x5d, 0x35, 0x0d, 0x45, 0x4d, 0x30, 0x39, 0x99, 0x30, 0x2e, + 0xac, 0x55, 0x49, 0x92, 0x82, 0xb0, 0x5c, 0xc1, 0xda, 0x82, 0x36, 0xa0, 0xe8, 0x08, 0x3a, 0x26, + 0x56, 0x35, 0x83, 0x1c, 0x05, 0x0d, 0x39, 0x63, 0xc9, 0xa9, 0x65, 0xe1, 0x48, 0x68, 0xaa, 0xd5, + 0xd7, 0x3e, 0xa4, 0xd5, 0xd1, 0x36, 0x54, 0x75, 0x1b, 0x1e, 0x0a, 0xf6, 0x96, 0xf8, 0x56, 0x3d, + 0x03, 0x3d, 0x4d, 0x41, 0x2d, 0x28, 0xd9, 0xee, 0x9b, 0x69, 0x20, 0x08, 0xb7, 0x2e, 0x4b, 0x3a, + 0x9a, 0x17, 0xa7, 0xad, 0x2d, 0x38, 0xc6, 0xa0, 0xa7, 0x50, 0xe5, 0x64, 0x44, 0xde, 0x1d, 0x3a, + 0x6c, 0x3c, 0xa4, 0x3e, 0xb1, 0xd0, 0xd2, 0xac, 0xaf, 0x4a, 0x42, 0x47, 0xe1, 0xd1, 0x26, 0x54, + 0x54, 0xc5, 0x0f, 0xc3, 0xe1, 0x60, 0x5d, 0x91, 0x4d, 0x76, 0x25, 0xee, 0x1f, 0x15, 0x78, 0x87, + 0xb9, 0x04, 0x83, 0x1d, 0x7f, 0xa3, 0x75, 0x28, 0xbd, 0xb6, 0xa9, 0xc7, 0x66, 0x84, 0x5b, 0x57, + 0x25, 0xe5, 0x5a, 0x4c, 0x79, 0xae, 0x0d, 0xb2, 0x3f, 0x63, 0x18, 0x6a, 0xc1, 0x8a, 0xe3, 0xa9, + 0x8d, 0x5d, 0x93, 0x1a, 0x55, 0x93, 0x46, 0x23, 0xa8, 0xa3, 0x6c, 0x38, 0x02, 0xa1, 0x3b, 0x60, + 0x8e, 0x89, 0x38, 0x62, 0xae, 0x75, 0x5d, 0xc2, 0xd7, 0x42, 0xf8, 0x8e, 0x2d, 0x9c, 0x23, 0x95, + 0x3e, 0xac, 0xcd, 0x8d, 0x1f, 0xa0, 0x92, 0x38, 0x9f, 0xa8, 0x0e, 0xf9, 0xb7, 0xe4, 0x44, 0x0e, + 0x9a, 0x32, 0x0e, 0x3f, 0xd1, 0xe7, 0x50, 0x9c, 0x85, 0x3b, 0xd7, 0x93, 0xe4, 0x94, 0x23, 0x65, + 0x7d, 0x92, 0x7b, 0x6c, 0x84, 0xbe, 0x12, 0x27, 0xe6, 0xa3, 0x7c, 0x35, 0x6f, 0x43, 0x29, 0x3a, + 0xcd, 0x68, 0x05, 0xf2, 0xfb, 0x7b, 0xfd, 0xfa, 0x25, 0xb4, 0x06, 0x95, 0xce, 0xee, 0xcb, 0xce, + 0x01, 0xc6, 0xdd, 0x97, 0x9d, 0x1f, 0xeb, 0x46, 0xf3, 0x06, 0x14, 0xc2, 0x44, 0x21, 0x00, 0xf3, + 0xbb, 0xde, 0xee, 0x76, 0xbb, 0x57, 0xbf, 0x84, 0xca, 0x50, 0xec, 0xed, 0x76, 0xda, 0xbd, 0xba, + 0xd1, 0x5c, 0x07, 0x98, 0x97, 0x00, 0xd5, 0x61, 0x55, 0x81, 0x0e, 0x07, 0xbb, 0x03, 0x09, 0xbd, + 0x0c, 0xd5, 0xfe, 0xf7, 0x6d, 0xdc, 0x3d, 0xec, 0xee, 0x1f, 0xb4, 0x7b, 0xbd, 0xd0, 0xe3, 0x16, + 0xac, 0x26, 0x4b, 0x80, 0x10, 0xd4, 0x9e, 0xb7, 0x5f, 0xf4, 0x76, 0x5f, 0x75, 0xf1, 0xa1, 0x72, + 0x2b, 0x69, 0xf1, 0xda, 0x5e, 0xbb, 0xdf, 0xaf, 0x1b, 0xcd, 0x5f, 0x0c, 0xa8, 0x2f, 0x56, 0x23, + 0x39, 0x86, 0x8d, 0x0b, 0x8f, 0xe1, 0xdc, 0x07, 0x8d, 0xe1, 0xe6, 0x9f, 0x39, 0x30, 0xd5, 0x9e, + 0x43, 0x37, 0x63, 0xfb, 0x9d, 0xfa, 0x71, 0xa6, 0x80, 0xe4, 0x90, 0x9d, 0xc3, 0xc3, 0x93, 0x31, + 0xb3, 0x3d, 0xea, 0x3e, 0xd3, 0x77, 0xa0, 0x96, 0xf1, 0xbf, 0x53, 0xfc, 0x08, 0x80, 0xd3, 0xf8, + 0x30, 0xf8, 0x84, 0x13, 0x47, 0x4d, 0x82, 0x7c, 0x96, 0xe0, 0x31, 0x1c, 0x7d, 0x0b, 0x95, 0x40, + 0xd8, 0x5c, 0x68, 0xe9, 0x85, 0x0c, 0xec, 0x24, 0x41, 0x6e, 0x9c, 0xfa, 0x9a, 0x5d, 0xcc, 0xb4, + 0xf1, 0x08, 0xde, 0xfc, 0xd9, 0x00, 0x53, 0xcd, 0x4e, 0xb4, 0x05, 0x25, 0xea, 0x0b, 0xc2, 0x67, + 0xb6, 0xa7, 0xd3, 0x77, 0xce, 0xf6, 0x63, 0x68, 0x38, 0xc8, 0xd4, 0x59, 0xdf, 0x23, 0xdc, 0x21, + 0xbe, 0x38, 0xb3, 0x82, 0x49, 0x05, 0x69, 0x4a, 0xf3, 0x11, 0xd4, 0xd2, 0x43, 0x2b, 0x3c, 0x3a, + 0x8e, 0x47, 0xc7, 0x43, 0xad, 0x44, 0x1e, 0x9d, 0x4e, 0xb8, 0xd0, 0x61, 0xfe, 0x6b, 0x3a, 0xc2, + 0xca, 0xda, 0xfc, 0xbb, 0x06, 0x95, 0xc4, 0x32, 0xda, 0x00, 0x93, 0xf8, 0xf2, 0x42, 0x31, 0x96, + 0x8e, 0x36, 0x8d, 0x0c, 0xef, 0xae, 0x31, 0x11, 0x9c, 0x3a, 0xb1, 0xf2, 0x74, 0xac, 0xd6, 0x8e, + 0xb4, 0xea, 0xc0, 0x1a, 0x8b, 0xb6, 0xc0, 0x9c, 0x30, 0x8f, 0x3a, 0x27, 0xba, 0xda, 0x37, 0x16, + 0x59, 0x03, 0x4e, 0x47, 0x23, 0xc2, 0xf7, 0x24, 0x08, 0x6b, 0x30, 0x7a, 0x0a, 0x20, 0x8e, 0x38, + 0x13, 0xc2, 0xa3, 0xfe, 0x48, 0x97, 0xfa, 0xd3, 0x45, 0xaa, 0xfc, 0x1e, 0xc4, 0x30, 0x9c, 0xa0, + 0x34, 0xfe, 0x32, 0x60, 0x35, 0x29, 0x08, 0xad, 0x83, 0x79, 0x4c, 0x7d, 0x97, 0x1d, 0x2f, 0x2f, + 0x9a, 0x06, 0xa6, 0x9b, 0x35, 0xf7, 0x61, 0xcd, 0xda, 0x86, 0x9a, 0xba, 0x63, 0x5f, 0x44, 0xbd, + 0x92, 0x5f, 0x16, 0x76, 0x81, 0xd0, 0xf8, 0xcd, 0x84, 0x6a, 0x2a, 0x3b, 0xa8, 0x0b, 0x65, 0xc2, + 0x39, 0xe3, 0xe1, 0x48, 0xd1, 0xdb, 0xb8, 0x73, 0x6e, 0x3e, 0x5b, 0xdd, 0x08, 0x8e, 0xe7, 0x4c, + 0xb4, 0x0d, 0xa5, 0xc0, 0x63, 0xc7, 0xd2, 0x8b, 0xda, 0xd6, 0x17, 0xe7, 0x7b, 0xe9, 0x6b, 0x34, + 0x8e, 0x79, 0x8d, 0x7f, 0xf2, 0x50, 0x8e, 0x9d, 0x5f, 0xa8, 0x9f, 0x06, 0x70, 0x9d, 0x93, 0x9f, + 0xa6, 0x24, 0x10, 0xaf, 0x98, 0x37, 0x1d, 0x93, 0xc1, 0x11, 0x27, 0xc1, 0x11, 0xf3, 0xdc, 0x4c, + 0xa9, 0x3e, 0x83, 0x8b, 0xbe, 0x4e, 0xa6, 0x48, 0xa5, 0xfc, 0xff, 0xa7, 0x1c, 0x25, 0x4b, 0x36, + 0x4f, 0xcb, 0x3e, 0x94, 0x82, 0x09, 0x71, 0xa8, 0xed, 0x05, 0xfa, 0xb1, 0xba, 0x95, 0x31, 0xb9, + 0xad, 0xbe, 0xe2, 0xe9, 0xde, 0x8f, 0xdd, 0x34, 0xfe, 0x30, 0xa0, 0x9a, 0xb2, 0xa1, 0xaf, 0xf4, + 0xc3, 0x33, 0xcb, 0xe4, 0x57, 0xef, 0xd0, 0x6f, 0x00, 0xa4, 0xc6, 0x0e, 0x73, 0x49, 0x60, 0xe5, + 0xa4, 0xb0, 0xf7, 0x6e, 0xe9, 0xe1, 0xa6, 0xa2, 0x25, 0xe0, 0x1f, 0x91, 0x8e, 0xc6, 0xef, 0x06, + 0x94, 0xa2, 0xc2, 0x5f, 0xa8, 0xc0, 0xf7, 0xa1, 0x38, 0xb6, 0xdf, 0x61, 0xb1, 0xfc, 0x92, 0x50, + 0x38, 0xf4, 0x28, 0xd1, 0x97, 0x19, 0xb4, 0xce, 0x9b, 0xf1, 0xdf, 0x02, 0xac, 0x2d, 0x0c, 0x03, + 0xb4, 0x0f, 0xd7, 0x1c, 0xe6, 0xb9, 0xdb, 0xc4, 0x63, 0xc7, 0x83, 0xa9, 0x4f, 0x9e, 0xb1, 0x63, + 0x3f, 0x71, 0x6e, 0xce, 0xf5, 0xfc, 0x7e, 0x26, 0xda, 0x81, 0x2b, 0x29, 0xc3, 0xc1, 0x24, 0x71, + 0x84, 0xce, 0x75, 0xf8, 0x3e, 0x5e, 0xa4, 0xb0, 0x3d, 0x64, 0x33, 0x92, 0x52, 0x98, 0xcf, 0xa8, + 0xf0, 0x14, 0x33, 0x52, 0x18, 0x1b, 0xb4, 0xc2, 0x42, 0x46, 0x85, 0x0b, 0x3c, 0xd4, 0x87, 0xeb, + 0xf2, 0xef, 0x72, 0x7c, 0xbc, 0x06, 0x4c, 0x59, 0xf5, 0xf5, 0x79, 0xae, 0xc7, 0x33, 0xa8, 0xe1, + 0x1b, 0xe2, 0xcd, 0xd4, 0x1d, 0x91, 0xf8, 0x0d, 0x61, 0x2e, 0x7d, 0x43, 0xa4, 0xf0, 0xe8, 0x29, + 0xac, 0x0a, 0xe9, 0x6a, 0x8f, 0x70, 0xca, 0x5c, 0xf9, 0x1f, 0x6e, 0x89, 0x96, 0x14, 0x01, 0x75, + 0xa0, 0x26, 0x74, 0xd6, 0xb4, 0x8b, 0xd2, 0x72, 0x17, 0x0b, 0x94, 0xa1, 0x29, 0x41, 0x0f, 0xfe, + 0x0b, 0x00, 0x00, 0xff, 0xff, 0x09, 0xad, 0x9c, 0x23, 0x55, 0x10, 0x00, 0x00, +} diff --git a/common/api/v1/ratelimit.proto b/common/api/v1/ratelimit.proto new file mode 100644 index 000000000..b0e9943b5 --- /dev/null +++ b/common/api/v1/ratelimit.proto @@ -0,0 +1,179 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; +import "google/protobuf/duration.proto"; +import "model.proto"; + +// 同一服务下限流规则集合 +message RateLimit { + // 限流规则集合 + repeated Rule rules = 1; + // 限流规则汇总的revision信息 + google.protobuf.StringValue revision = 2; +} + +// 单个限流规则信息 +message Rule { + // 限流规则唯一标识 + google.protobuf.StringValue id = 1; + // 限流规则所属服务名 + google.protobuf.StringValue service = 2; + // 限流规则所属命名空间 + google.protobuf.StringValue namespace = 3; + // 可选,SUBSET标识 + map subset = 4; + // 限流规则优先级,0值最高 + google.protobuf.UInt32Value priority = 5; + // 限流资源 + enum Resource { + // 针对QPS进行限流 + QPS = 0; + // 针对并发数进行限流 + CONCURRENCY = 1; + } + Resource resource = 6; + // 限流类型 + // global全局限流(默认)或者local单机限流 + enum Type { + GLOBAL = 0; + LOCAL = 1; + } + Type type = 7; + // 业务标签集合,通过KV进行匹配,全部匹配才使用该规则 + map labels = 8; + // 限流阈值 + // 可以有多个粒度的配置(比如同时针对秒级,分钟级,天级),匹配一个则进行限流 + // 全局限流模式下,该值为服务配额总量;单机限流模式下,该值为单个节点能处理的配额量 + repeated Amount amounts = 9; + // 限流动作,对应着客户端的插件名字 + google.protobuf.StringValue action = 10; + // 是否停用该限流规则,默认启用 + google.protobuf.BoolValue disable = 11; + // 限流上报方式,同时支持按固定周期上报,以及达到配额百分比后上报 + Report report = 12; + // 限流规则创建时间 + google.protobuf.StringValue ctime = 13; + // 限流规则修改时间 + google.protobuf.StringValue mtime = 14; + // 限流规则revision信息 + google.protobuf.StringValue revision = 15; + // 服务的TOKEN信息,仅用于控制台,discover接口不下发 + google.protobuf.StringValue service_token = 16 [json_name="service_token"]; + // 配额调整算法 + AmountAdjuster adjuster = 17; + // 通配符是否合并计算,默认分开计数 + google.protobuf.BoolValue regex_combine = 18; + + // 限流阈值模式 + enum AmountMode { + GLOBAL_TOTAL = 0; // 总体阈值 + SHARE_EQUALLY = 1; // 单机均摊阈值 + } + AmountMode amount_mode = 19; + // 与限流集群连接失败时降级模式 + enum FailoverType { + FAILOVER_LOCAL = 0; // 降级成本地阈值 + FAILOVER_PASS = 1; // 降级成直接通过 + } + FailoverType failover = 20; + // 分布式限流服务集群 + RateLimitCluster cluster = 21; + // 被调接口名 + MatchString method = 22; +} + +// 分布式限流服务集群 +message RateLimitCluster { + google.protobuf.StringValue service = 1; + // 限流规则所属命名空间 + google.protobuf.StringValue namespace = 2; +} + +// 限流配额 +message Amount { + // 时间周期内的最大配额数 + google.protobuf.UInt32Value maxAmount = 1; + // 配额生效的时间周期,必须大于等于1s + google.protobuf.Duration validDuration = 2; + // 请求统计精度 + google.protobuf.UInt32Value precision = 3; + // 可选,起始限流阈值,爬坡起始值 + google.protobuf.UInt32Value startAmount = 4; + // 可选,最小限流阈值,降低时最小值 + google.protobuf.UInt32Value minAmount = 5; +} + +// 限流上报方式 +message Report { + // 配额固定上报周期,单位毫秒 + google.protobuf.Duration interval = 1; + // 使用了百分之多少配额后启动一次实时上报,值范围(0,100] + google.protobuf.UInt32Value amountPercent = 2; +} + +// 配额调整算法 +message AmountAdjuster { + ClimbConfig climb = 1; +} + +// 限流调整算法Climb相关配置 +message ClimbConfig { + google.protobuf.BoolValue enable = 1; // 是否开启 + + // 限流数据统计配置 + message MetricConfig { + // 限流数据度量周期,默认60s + google.protobuf.Duration window = 1; + // 数据统计精度,决定数据度量的最小周期,度量滑窗的步长=window/precision + google.protobuf.UInt32Value precision = 2; + // 上报周期,默认20s + google.protobuf.Duration reportInterval = 3; + } + MetricConfig metric = 2; // 限流数据统计配置 + + // 触发调整的策略 + message TriggerPolicy { + // 错误率触发调整配置 + message ErrorRate { + google.protobuf.BoolValue enable = 1; // 是否开启 + google.protobuf.UInt32Value requestVolumeThreshold =2; // 触发限流调整的最小的请求数 + google.protobuf.Int32Value errorRate = 3; // 触发限流的错误率配置 + + // 特殊错误码触发调整配置 + message SpecialConfig { + google.protobuf.StringValue type = 1; // 自定义错误类型 + repeated google.protobuf.Int64Value errorCodes = 2; // 特定规则针对的错误码 + google.protobuf.Int32Value errorRate = 3; //特定规则错误率 + } + repeated SpecialConfig specials = 4; // 针对部分错误码,使用额外的错误率统计,可设置多组特殊规则 + } + + // 慢调用触发调整配置 + message SlowRate { + google.protobuf.BoolValue enable = 1; // 是否开启 + google.protobuf.Duration maxRt = 2; // 最大响应时间,超过该响应时间属于慢调用 + google.protobuf.Int32Value slowRate = 3; // 慢请求率阈值,达到该阈值进行限流 + } + + ErrorRate errorRate = 1; // 按错误率阈值调整 + SlowRate slowRate = 2; // 慢调用进行触发调整 + } + + TriggerPolicy policy = 3; // 触发调整策略 + + // 爬坡调整相关参数 + message ClimbThrottling { + google.protobuf.Int32Value coldBelowTuneDownRate = 1; // 冷水位以下区间的下调百分比 + google.protobuf.Int32Value coldBelowTuneUpRate = 2; // 冷水位以下区间的上调百分比 + google.protobuf.Int32Value coldAboveTuneDownRate = 3; // 冷水位以上区间的下调百分比 + google.protobuf.Int32Value coldAboveTuneUpRate = 4; // 冷水位以上区间的上调百分比 + google.protobuf.Int32Value limitThresholdToTuneUp = 5; // 冷水位以上,超过该百分的请求被限流后进行阈值上调 + google.protobuf.Duration judgeDuration = 6; // 阈值调整规则的决策间隔 + google.protobuf.Int32Value tuneUpPeriod = 7; // 阈值上调周期数,连续N个决策间隔都为上调,才执行上调 + google.protobuf.Int32Value tuneDownPeriod = 8; // 阈值下调周期数,连续N个决策间隔都为下调,才执行下调 + } + + ClimbThrottling throttling = 4; // 限流调整相关参数 +} diff --git a/common/api/v1/request.pb.go b/common/api/v1/request.pb.go new file mode 100644 index 000000000..91128dbba --- /dev/null +++ b/common/api/v1/request.pb.go @@ -0,0 +1,130 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: request.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type DiscoverRequest_DiscoverRequestType int32 + +const ( + DiscoverRequest_UNKNOWN DiscoverRequest_DiscoverRequestType = 0 + DiscoverRequest_INSTANCE DiscoverRequest_DiscoverRequestType = 1 + DiscoverRequest_CLUSTER DiscoverRequest_DiscoverRequestType = 2 + DiscoverRequest_ROUTING DiscoverRequest_DiscoverRequestType = 3 + DiscoverRequest_RATE_LIMIT DiscoverRequest_DiscoverRequestType = 4 + DiscoverRequest_CIRCUIT_BREAKER DiscoverRequest_DiscoverRequestType = 5 + DiscoverRequest_SERVICES DiscoverRequest_DiscoverRequestType = 6 +) + +var DiscoverRequest_DiscoverRequestType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "INSTANCE", + 2: "CLUSTER", + 3: "ROUTING", + 4: "RATE_LIMIT", + 5: "CIRCUIT_BREAKER", + 6: "SERVICES", +} +var DiscoverRequest_DiscoverRequestType_value = map[string]int32{ + "UNKNOWN": 0, + "INSTANCE": 1, + "CLUSTER": 2, + "ROUTING": 3, + "RATE_LIMIT": 4, + "CIRCUIT_BREAKER": 5, + "SERVICES": 6, +} + +func (x DiscoverRequest_DiscoverRequestType) String() string { + return proto.EnumName(DiscoverRequest_DiscoverRequestType_name, int32(x)) +} +func (DiscoverRequest_DiscoverRequestType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_request_89a70c847f5ccd5b, []int{0, 0} +} + +type DiscoverRequest struct { + Type DiscoverRequest_DiscoverRequestType `protobuf:"varint,1,opt,name=type,proto3,enum=v1.DiscoverRequest_DiscoverRequestType" json:"type,omitempty"` + Service *Service `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DiscoverRequest) Reset() { *m = DiscoverRequest{} } +func (m *DiscoverRequest) String() string { return proto.CompactTextString(m) } +func (*DiscoverRequest) ProtoMessage() {} +func (*DiscoverRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_request_89a70c847f5ccd5b, []int{0} +} +func (m *DiscoverRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DiscoverRequest.Unmarshal(m, b) +} +func (m *DiscoverRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DiscoverRequest.Marshal(b, m, deterministic) +} +func (dst *DiscoverRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_DiscoverRequest.Merge(dst, src) +} +func (m *DiscoverRequest) XXX_Size() int { + return xxx_messageInfo_DiscoverRequest.Size(m) +} +func (m *DiscoverRequest) XXX_DiscardUnknown() { + xxx_messageInfo_DiscoverRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_DiscoverRequest proto.InternalMessageInfo + +func (m *DiscoverRequest) GetType() DiscoverRequest_DiscoverRequestType { + if m != nil { + return m.Type + } + return DiscoverRequest_UNKNOWN +} + +func (m *DiscoverRequest) GetService() *Service { + if m != nil { + return m.Service + } + return nil +} + +func init() { + proto.RegisterType((*DiscoverRequest)(nil), "v1.DiscoverRequest") + proto.RegisterEnum("v1.DiscoverRequest_DiscoverRequestType", DiscoverRequest_DiscoverRequestType_name, DiscoverRequest_DiscoverRequestType_value) +} + +func init() { proto.RegisterFile("request.proto", fileDescriptor_request_89a70c847f5ccd5b) } + +var fileDescriptor_request_89a70c847f5ccd5b = []byte{ + // 242 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xbf, 0x4b, 0xc3, 0x40, + 0x14, 0xc7, 0xbd, 0x34, 0x6d, 0xc2, 0x8b, 0x6d, 0x1f, 0xd7, 0xa5, 0x38, 0x95, 0x80, 0xd8, 0x29, + 0xd0, 0x3a, 0x3a, 0xc5, 0xf3, 0x90, 0xb3, 0xf5, 0x0a, 0xef, 0x2e, 0x3a, 0x16, 0x2c, 0x37, 0x74, + 0x4a, 0x4c, 0x62, 0xa0, 0xa3, 0xf8, 0x8f, 0x4b, 0x1a, 0x5d, 0x42, 0xc7, 0xef, 0xaf, 0xcf, 0x83, + 0x07, 0xe3, 0xd2, 0x7d, 0x7e, 0xb9, 0xaa, 0x4e, 0x8a, 0x32, 0xaf, 0x73, 0xee, 0x35, 0xab, 0x9b, + 0x71, 0xe5, 0xca, 0xe6, 0x78, 0x70, 0x9d, 0x15, 0x7f, 0x7b, 0x30, 0x7d, 0x3a, 0x56, 0x87, 0xbc, + 0x71, 0x25, 0x75, 0x65, 0xfe, 0x00, 0x7e, 0x7d, 0x2a, 0xdc, 0x9c, 0x2d, 0xd8, 0x72, 0xb2, 0xbe, + 0x4b, 0x9a, 0x55, 0xd2, 0xab, 0xf4, 0xb5, 0x3d, 0x15, 0x8e, 0xce, 0x23, 0x7e, 0x0b, 0xc1, 0xdf, + 0x85, 0xb9, 0xb7, 0x60, 0xcb, 0x68, 0x1d, 0xb5, 0x7b, 0xd3, 0x59, 0xf4, 0x9f, 0xc5, 0x3f, 0x0c, + 0x66, 0x17, 0x20, 0x3c, 0x82, 0x20, 0xd3, 0x1b, 0xbd, 0x7b, 0xd7, 0x78, 0xc5, 0xaf, 0x21, 0x54, + 0xda, 0xd8, 0x54, 0x0b, 0x89, 0xac, 0x8d, 0xc4, 0x36, 0x33, 0x56, 0x12, 0x7a, 0xad, 0xa0, 0x5d, + 0x66, 0x95, 0x7e, 0xc6, 0x01, 0x9f, 0x00, 0x50, 0x6a, 0xe5, 0x7e, 0xab, 0x5e, 0x95, 0x45, 0x9f, + 0xcf, 0x60, 0x2a, 0x14, 0x89, 0x4c, 0xd9, 0xfd, 0x23, 0xc9, 0x74, 0x23, 0x09, 0x87, 0x2d, 0xcc, + 0x48, 0x7a, 0x53, 0x42, 0x1a, 0x1c, 0xc5, 0x7e, 0x18, 0x60, 0xf4, 0xe2, 0x87, 0x03, 0x1c, 0x7e, + 0x8c, 0xce, 0xaf, 0xb8, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x54, 0x58, 0xfb, 0xdf, 0x2e, 0x01, + 0x00, 0x00, +} diff --git a/common/api/v1/request.proto b/common/api/v1/request.proto new file mode 100644 index 000000000..10425774d --- /dev/null +++ b/common/api/v1/request.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; + +package v1; + +import "service.proto"; + +message DiscoverRequest { + enum DiscoverRequestType { + UNKNOWN = 0; + INSTANCE = 1; + CLUSTER = 2; + ROUTING = 3; + RATE_LIMIT = 4; + CIRCUIT_BREAKER = 5; + SERVICES = 6; + reserved 7 to 11; + } + + DiscoverRequestType type = 1; + Service service = 2; + reserved 3 to 4; +} diff --git a/common/api/v1/response.go b/common/api/v1/response.go new file mode 100644 index 000000000..68ea7c56d --- /dev/null +++ b/common/api/v1/response.go @@ -0,0 +1,376 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 v1 + +import ( + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/wrappers" +) + +/** + * @brief 回复消息接口 + */ +type ResponseMessage interface { + proto.Message + GetCode() *wrappers.UInt32Value +} + +/** + * @brief 获取返回码前三位 + * @note 返回码前三位和HTTP返回码定义一致 + */ +func CalcCode(rm ResponseMessage) int { + return int(rm.GetCode().GetValue() / 1000) +} + +/** + * @brief BatchWriteResponse添加Response + */ +func (b *BatchWriteResponse) Collect(response *Response) { + // 非200的code,都归为异常 + if CalcCode(response) != 200 { + b.Code.Value = ExecuteException + b.Info.Value = code2info[ExecuteException] + } + + b.Size.Value++ + b.Responses = append(b.Responses, response) +} + +/** + * @brief BatchWriteResponse添加Response + */ +func (b *BatchWriteResponse) CollectBatch(response []*Response) { + for _, resp := range response { + b.Collect(resp) + } +} + +/** + * @brief BatchQueryResponse添加命名空间 + */ +func (b *BatchQueryResponse) AddNamespace(namespace *Namespace) { + b.Namespaces = append(b.Namespaces, namespace) +} + +/** + * @brief 创建简单回复 + */ +func NewSimpleResponse(code uint32) *SimpleResponse { + return &SimpleResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + } +} + +/** + * @brief 创建回复 + */ +func NewResponse(code uint32) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + } +} + +// 带上具体的错误信息 +func NewResponseWithMsg(code uint32, msg string) *Response { + resp := NewResponse(code) + resp.Info.Value += ": " + msg + return resp +} + +/** + * @brief 创建回复带客户端信息 + */ +func NewClientResponse(code uint32, client *Client) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Client: client, + } +} + +/** + * @brief 创建回复带命名空间信息 + */ +func NewNamespaceResponse(code uint32, namespace *Namespace) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Namespace: namespace, + } +} + +/** + * @brief 创建回复带服务信息 + */ +func NewServiceResponse(code uint32, service *Service) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Service: service, + } +} + +// 创建带别名信息的答复 +func NewServiceAliasResponse(code uint32, alias *ServiceAlias) *Response { + resp := NewResponse(code) + resp.Alias = alias + return resp +} + +/** + * @brief 创建回复带服务实例信息 + */ +func NewInstanceResponse(code uint32, instance *Instance) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Instance: instance, + } +} + +// 创建带自定义error的服务实例response +func NewInstanceRespWithError(code uint32, err error, instance *Instance) *Response { + resp := NewInstanceResponse(code, instance) + resp.Info.Value += " : " + err.Error() + + return resp +} + +/** + * @brief 创建回复带服务路由信息 + */ +func NewRoutingResponse(code uint32, routing *Routing) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Routing: routing, + } +} + +/** + * @brief 创建回复带限流规则信息 + */ +func NewRateLimitResponse(code uint32, rule *Rule) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + RateLimit: rule, + } +} + +/** + * @brief 创建回复带熔断规则信息 + */ +func NewCircuitBreakerResponse(code uint32, circuitBreaker *CircuitBreaker) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + CircuitBreaker: circuitBreaker, + } +} + +/** + * @brief 创建回复带发布信息 + */ +func NewConfigResponse(code uint32, configRelease *ConfigRelease) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + ConfigRelease: configRelease, + } +} + +/** + * @brief 创建回复带平台信息 + */ +func NewPlatformResponse(code uint32, platform *Platform) *Response { + return &Response{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Platform: platform, + } +} + +/** + * @brief 创建带详细信息的平台回复信息 + */ +func NewPlatformResponseWithMsg(code uint32, platform *Platform, msg string) *Response { + response := NewPlatformResponse(code, platform) + response.Info.Value += ": " + msg + return response +} + +/** + * @brief 创建批量回复 + */ +func NewBatchWriteResponse(code uint32) *BatchWriteResponse { + return &BatchWriteResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Size: &wrappers.UInt32Value{Value: 0}, + } +} + +/** + * @brief 创建带详细信息的批量回复 + */ +func NewBatchWriteResponseWithMsg(code uint32, msg string) *BatchWriteResponse { + resp := NewBatchWriteResponse(code) + resp.Info.Value += ": " + msg + return resp +} + +/** + * @brief 创建批量查询回复 + */ +func NewBatchQueryResponse(code uint32) *BatchQueryResponse { + return &BatchQueryResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Amount: &wrappers.UInt32Value{Value: 0}, + Size: &wrappers.UInt32Value{Value: 0}, + } +} + +/** + * @brief 创建带详细信息的批量查询回复 + */ +func NewBatchQueryResponseWithMsg(code uint32, msg string) *BatchQueryResponse { + resp := NewBatchQueryResponse(code) + resp.Info.Value += ": " + msg + return resp +} + +// 创建一个空白的discoverResponse +func NewDiscoverResponse(code uint32) *DiscoverResponse { + return &DiscoverResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + } +} + +/** + * @brief 创建查询服务回复 + */ +func NewDiscoverServiceResponse(code uint32, service *Service) *DiscoverResponse { + return &DiscoverResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Type: DiscoverResponse_SERVICES, + Service: service, + } +} + +/** + * @brief 创建查询服务实例回复 + */ +func NewDiscoverInstanceResponse(code uint32, service *Service) *DiscoverResponse { + return &DiscoverResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Type: DiscoverResponse_INSTANCE, + Service: service, + } +} + +/** + * @brief 创建查询服务路由回复 + */ +func NewDiscoverRoutingResponse(code uint32, service *Service) *DiscoverResponse { + return &DiscoverResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Type: DiscoverResponse_ROUTING, + Service: service, + } +} + +/** + * @brief 创建查询限流规则回复 + */ +func NewDiscoverRateLimitResponse(code uint32, service *Service) *DiscoverResponse { + return &DiscoverResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Type: DiscoverResponse_RATE_LIMIT, + Service: service, + } +} + +/** + * @brief 创建查询熔断规则回复 + */ +func NewDiscoverCircuitBreakerResponse(code uint32, service *Service) *DiscoverResponse { + return &DiscoverResponse{ + Code: &wrappers.UInt32Value{Value: code}, + Info: &wrappers.StringValue{Value: code2info[code]}, + Type: DiscoverResponse_CIRCUIT_BREAKER, + Service: service, + } +} + +// 格式化responses +// batch操作 +// 如果所有子错误码一致,那么使用子错误码 +// 如果包含任意一个5xx,那么返回500 +func FormatBatchWriteResponse(response *BatchWriteResponse) *BatchWriteResponse { + var code uint32 + for _, resp := range response.Responses { + if code == 0 { + code = resp.GetCode().GetValue() + continue + } + if code == resp.GetCode().GetValue() { + continue + } + // 发现不一样 + code = 0 + break + } + // code不等于0,意味着所有的resp都是一样的错误码,则合并为同一个错误码 + if code != 0 { + response.Code.Value = code + response.Info.Value = code2info[code] + return response + } + + // 错误都不一致 + // 存在5XX,则返回500 + // 不存在5XX,但是存在4XX,则返回4XX + // 除去以上两个情况,不修改返回值 + hasBadRequest := false + for _, resp := range response.Responses { + httpStatus := CalcCode(resp) + if httpStatus >= 500 { + response.Code.Value = ExecuteException + response.Info.Value = code2info[response.Code.Value] + return response + } else if httpStatus >= 400 { + hasBadRequest = true + } + } + + if hasBadRequest { + response.Code.Value = BadRequest + response.Info.Value = code2info[response.Code.Value] + } + return response +} \ No newline at end of file diff --git a/common/api/v1/response.pb.go b/common/api/v1/response.pb.go new file mode 100644 index 000000000..6000804ed --- /dev/null +++ b/common/api/v1/response.pb.go @@ -0,0 +1,588 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: response.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type DiscoverResponse_DiscoverResponseType int32 + +const ( + DiscoverResponse_UNKNOWN DiscoverResponse_DiscoverResponseType = 0 + DiscoverResponse_INSTANCE DiscoverResponse_DiscoverResponseType = 1 + DiscoverResponse_CLUSTER DiscoverResponse_DiscoverResponseType = 2 + DiscoverResponse_ROUTING DiscoverResponse_DiscoverResponseType = 3 + DiscoverResponse_RATE_LIMIT DiscoverResponse_DiscoverResponseType = 4 + DiscoverResponse_CIRCUIT_BREAKER DiscoverResponse_DiscoverResponseType = 5 + DiscoverResponse_SERVICES DiscoverResponse_DiscoverResponseType = 6 +) + +var DiscoverResponse_DiscoverResponseType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "INSTANCE", + 2: "CLUSTER", + 3: "ROUTING", + 4: "RATE_LIMIT", + 5: "CIRCUIT_BREAKER", + 6: "SERVICES", +} +var DiscoverResponse_DiscoverResponseType_value = map[string]int32{ + "UNKNOWN": 0, + "INSTANCE": 1, + "CLUSTER": 2, + "ROUTING": 3, + "RATE_LIMIT": 4, + "CIRCUIT_BREAKER": 5, + "SERVICES": 6, +} + +func (x DiscoverResponse_DiscoverResponseType) String() string { + return proto.EnumName(DiscoverResponse_DiscoverResponseType_name, int32(x)) +} +func (DiscoverResponse_DiscoverResponseType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_response_64a333bb5c94d3ea, []int{4, 0} +} + +type SimpleResponse struct { + Code *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Info *wrappers.StringValue `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SimpleResponse) Reset() { *m = SimpleResponse{} } +func (m *SimpleResponse) String() string { return proto.CompactTextString(m) } +func (*SimpleResponse) ProtoMessage() {} +func (*SimpleResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_response_64a333bb5c94d3ea, []int{0} +} +func (m *SimpleResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SimpleResponse.Unmarshal(m, b) +} +func (m *SimpleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SimpleResponse.Marshal(b, m, deterministic) +} +func (dst *SimpleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_SimpleResponse.Merge(dst, src) +} +func (m *SimpleResponse) XXX_Size() int { + return xxx_messageInfo_SimpleResponse.Size(m) +} +func (m *SimpleResponse) XXX_DiscardUnknown() { + xxx_messageInfo_SimpleResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_SimpleResponse proto.InternalMessageInfo + +func (m *SimpleResponse) GetCode() *wrappers.UInt32Value { + if m != nil { + return m.Code + } + return nil +} + +func (m *SimpleResponse) GetInfo() *wrappers.StringValue { + if m != nil { + return m.Info + } + return nil +} + +type Response struct { + Code *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Info *wrappers.StringValue `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + Client *Client `protobuf:"bytes,3,opt,name=client,proto3" json:"client,omitempty"` + Namespace *Namespace `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` + Service *Service `protobuf:"bytes,5,opt,name=service,proto3" json:"service,omitempty"` + Instance *Instance `protobuf:"bytes,6,opt,name=instance,proto3" json:"instance,omitempty"` + Routing *Routing `protobuf:"bytes,7,opt,name=routing,proto3" json:"routing,omitempty"` + Alias *ServiceAlias `protobuf:"bytes,8,opt,name=alias,proto3" json:"alias,omitempty"` + RateLimit *Rule `protobuf:"bytes,9,opt,name=rateLimit,proto3" json:"rateLimit,omitempty"` + CircuitBreaker *CircuitBreaker `protobuf:"bytes,10,opt,name=circuitBreaker,proto3" json:"circuitBreaker,omitempty"` + ConfigRelease *ConfigRelease `protobuf:"bytes,11,opt,name=configRelease,proto3" json:"configRelease,omitempty"` + Platform *Platform `protobuf:"bytes,15,opt,name=platform,proto3" json:"platform,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Response) Reset() { *m = Response{} } +func (m *Response) String() string { return proto.CompactTextString(m) } +func (*Response) ProtoMessage() {} +func (*Response) Descriptor() ([]byte, []int) { + return fileDescriptor_response_64a333bb5c94d3ea, []int{1} +} +func (m *Response) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Response.Unmarshal(m, b) +} +func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Response.Marshal(b, m, deterministic) +} +func (dst *Response) XXX_Merge(src proto.Message) { + xxx_messageInfo_Response.Merge(dst, src) +} +func (m *Response) XXX_Size() int { + return xxx_messageInfo_Response.Size(m) +} +func (m *Response) XXX_DiscardUnknown() { + xxx_messageInfo_Response.DiscardUnknown(m) +} + +var xxx_messageInfo_Response proto.InternalMessageInfo + +func (m *Response) GetCode() *wrappers.UInt32Value { + if m != nil { + return m.Code + } + return nil +} + +func (m *Response) GetInfo() *wrappers.StringValue { + if m != nil { + return m.Info + } + return nil +} + +func (m *Response) GetClient() *Client { + if m != nil { + return m.Client + } + return nil +} + +func (m *Response) GetNamespace() *Namespace { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *Response) GetService() *Service { + if m != nil { + return m.Service + } + return nil +} + +func (m *Response) GetInstance() *Instance { + if m != nil { + return m.Instance + } + return nil +} + +func (m *Response) GetRouting() *Routing { + if m != nil { + return m.Routing + } + return nil +} + +func (m *Response) GetAlias() *ServiceAlias { + if m != nil { + return m.Alias + } + return nil +} + +func (m *Response) GetRateLimit() *Rule { + if m != nil { + return m.RateLimit + } + return nil +} + +func (m *Response) GetCircuitBreaker() *CircuitBreaker { + if m != nil { + return m.CircuitBreaker + } + return nil +} + +func (m *Response) GetConfigRelease() *ConfigRelease { + if m != nil { + return m.ConfigRelease + } + return nil +} + +func (m *Response) GetPlatform() *Platform { + if m != nil { + return m.Platform + } + return nil +} + +type BatchWriteResponse struct { + Code *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Info *wrappers.StringValue `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + Size *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=size,proto3" json:"size,omitempty"` + Responses []*Response `protobuf:"bytes,4,rep,name=responses,proto3" json:"responses,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BatchWriteResponse) Reset() { *m = BatchWriteResponse{} } +func (m *BatchWriteResponse) String() string { return proto.CompactTextString(m) } +func (*BatchWriteResponse) ProtoMessage() {} +func (*BatchWriteResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_response_64a333bb5c94d3ea, []int{2} +} +func (m *BatchWriteResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BatchWriteResponse.Unmarshal(m, b) +} +func (m *BatchWriteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BatchWriteResponse.Marshal(b, m, deterministic) +} +func (dst *BatchWriteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BatchWriteResponse.Merge(dst, src) +} +func (m *BatchWriteResponse) XXX_Size() int { + return xxx_messageInfo_BatchWriteResponse.Size(m) +} +func (m *BatchWriteResponse) XXX_DiscardUnknown() { + xxx_messageInfo_BatchWriteResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_BatchWriteResponse proto.InternalMessageInfo + +func (m *BatchWriteResponse) GetCode() *wrappers.UInt32Value { + if m != nil { + return m.Code + } + return nil +} + +func (m *BatchWriteResponse) GetInfo() *wrappers.StringValue { + if m != nil { + return m.Info + } + return nil +} + +func (m *BatchWriteResponse) GetSize() *wrappers.UInt32Value { + if m != nil { + return m.Size + } + return nil +} + +func (m *BatchWriteResponse) GetResponses() []*Response { + if m != nil { + return m.Responses + } + return nil +} + +type BatchQueryResponse struct { + Code *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Info *wrappers.StringValue `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + Amount *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"` + Size *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=size,proto3" json:"size,omitempty"` + Namespaces []*Namespace `protobuf:"bytes,5,rep,name=namespaces,proto3" json:"namespaces,omitempty"` + Services []*Service `protobuf:"bytes,6,rep,name=services,proto3" json:"services,omitempty"` + Instances []*Instance `protobuf:"bytes,7,rep,name=instances,proto3" json:"instances,omitempty"` + Routings []*Routing `protobuf:"bytes,8,rep,name=routings,proto3" json:"routings,omitempty"` + Aliases []*ServiceAlias `protobuf:"bytes,9,rep,name=aliases,proto3" json:"aliases,omitempty"` + RateLimits []*Rule `protobuf:"bytes,10,rep,name=rateLimits,proto3" json:"rateLimits,omitempty"` + ConfigWithServices []*ConfigWithService `protobuf:"bytes,11,rep,name=configWithServices,proto3" json:"configWithServices,omitempty"` + Platforms []*Platform `protobuf:"bytes,15,rep,name=platforms,proto3" json:"platforms,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BatchQueryResponse) Reset() { *m = BatchQueryResponse{} } +func (m *BatchQueryResponse) String() string { return proto.CompactTextString(m) } +func (*BatchQueryResponse) ProtoMessage() {} +func (*BatchQueryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_response_64a333bb5c94d3ea, []int{3} +} +func (m *BatchQueryResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BatchQueryResponse.Unmarshal(m, b) +} +func (m *BatchQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BatchQueryResponse.Marshal(b, m, deterministic) +} +func (dst *BatchQueryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_BatchQueryResponse.Merge(dst, src) +} +func (m *BatchQueryResponse) XXX_Size() int { + return xxx_messageInfo_BatchQueryResponse.Size(m) +} +func (m *BatchQueryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_BatchQueryResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_BatchQueryResponse proto.InternalMessageInfo + +func (m *BatchQueryResponse) GetCode() *wrappers.UInt32Value { + if m != nil { + return m.Code + } + return nil +} + +func (m *BatchQueryResponse) GetInfo() *wrappers.StringValue { + if m != nil { + return m.Info + } + return nil +} + +func (m *BatchQueryResponse) GetAmount() *wrappers.UInt32Value { + if m != nil { + return m.Amount + } + return nil +} + +func (m *BatchQueryResponse) GetSize() *wrappers.UInt32Value { + if m != nil { + return m.Size + } + return nil +} + +func (m *BatchQueryResponse) GetNamespaces() []*Namespace { + if m != nil { + return m.Namespaces + } + return nil +} + +func (m *BatchQueryResponse) GetServices() []*Service { + if m != nil { + return m.Services + } + return nil +} + +func (m *BatchQueryResponse) GetInstances() []*Instance { + if m != nil { + return m.Instances + } + return nil +} + +func (m *BatchQueryResponse) GetRoutings() []*Routing { + if m != nil { + return m.Routings + } + return nil +} + +func (m *BatchQueryResponse) GetAliases() []*ServiceAlias { + if m != nil { + return m.Aliases + } + return nil +} + +func (m *BatchQueryResponse) GetRateLimits() []*Rule { + if m != nil { + return m.RateLimits + } + return nil +} + +func (m *BatchQueryResponse) GetConfigWithServices() []*ConfigWithService { + if m != nil { + return m.ConfigWithServices + } + return nil +} + +func (m *BatchQueryResponse) GetPlatforms() []*Platform { + if m != nil { + return m.Platforms + } + return nil +} + +type DiscoverResponse struct { + Code *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + Info *wrappers.StringValue `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + Type DiscoverResponse_DiscoverResponseType `protobuf:"varint,3,opt,name=type,proto3,enum=v1.DiscoverResponse_DiscoverResponseType" json:"type,omitempty"` + Service *Service `protobuf:"bytes,4,opt,name=service,proto3" json:"service,omitempty"` + Instances []*Instance `protobuf:"bytes,5,rep,name=instances,proto3" json:"instances,omitempty"` + Routing *Routing `protobuf:"bytes,6,opt,name=routing,proto3" json:"routing,omitempty"` + RateLimit *RateLimit `protobuf:"bytes,7,opt,name=rateLimit,proto3" json:"rateLimit,omitempty"` + CircuitBreaker *CircuitBreaker `protobuf:"bytes,8,opt,name=circuitBreaker,proto3" json:"circuitBreaker,omitempty"` + Services []*Service `protobuf:"bytes,9,rep,name=services,proto3" json:"services,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DiscoverResponse) Reset() { *m = DiscoverResponse{} } +func (m *DiscoverResponse) String() string { return proto.CompactTextString(m) } +func (*DiscoverResponse) ProtoMessage() {} +func (*DiscoverResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_response_64a333bb5c94d3ea, []int{4} +} +func (m *DiscoverResponse) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DiscoverResponse.Unmarshal(m, b) +} +func (m *DiscoverResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DiscoverResponse.Marshal(b, m, deterministic) +} +func (dst *DiscoverResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_DiscoverResponse.Merge(dst, src) +} +func (m *DiscoverResponse) XXX_Size() int { + return xxx_messageInfo_DiscoverResponse.Size(m) +} +func (m *DiscoverResponse) XXX_DiscardUnknown() { + xxx_messageInfo_DiscoverResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_DiscoverResponse proto.InternalMessageInfo + +func (m *DiscoverResponse) GetCode() *wrappers.UInt32Value { + if m != nil { + return m.Code + } + return nil +} + +func (m *DiscoverResponse) GetInfo() *wrappers.StringValue { + if m != nil { + return m.Info + } + return nil +} + +func (m *DiscoverResponse) GetType() DiscoverResponse_DiscoverResponseType { + if m != nil { + return m.Type + } + return DiscoverResponse_UNKNOWN +} + +func (m *DiscoverResponse) GetService() *Service { + if m != nil { + return m.Service + } + return nil +} + +func (m *DiscoverResponse) GetInstances() []*Instance { + if m != nil { + return m.Instances + } + return nil +} + +func (m *DiscoverResponse) GetRouting() *Routing { + if m != nil { + return m.Routing + } + return nil +} + +func (m *DiscoverResponse) GetRateLimit() *RateLimit { + if m != nil { + return m.RateLimit + } + return nil +} + +func (m *DiscoverResponse) GetCircuitBreaker() *CircuitBreaker { + if m != nil { + return m.CircuitBreaker + } + return nil +} + +func (m *DiscoverResponse) GetServices() []*Service { + if m != nil { + return m.Services + } + return nil +} + +func init() { + proto.RegisterType((*SimpleResponse)(nil), "v1.SimpleResponse") + proto.RegisterType((*Response)(nil), "v1.Response") + proto.RegisterType((*BatchWriteResponse)(nil), "v1.BatchWriteResponse") + proto.RegisterType((*BatchQueryResponse)(nil), "v1.BatchQueryResponse") + proto.RegisterType((*DiscoverResponse)(nil), "v1.DiscoverResponse") + proto.RegisterEnum("v1.DiscoverResponse_DiscoverResponseType", DiscoverResponse_DiscoverResponseType_name, DiscoverResponse_DiscoverResponseType_value) +} + +func init() { proto.RegisterFile("response.proto", fileDescriptor_response_64a333bb5c94d3ea) } + +var fileDescriptor_response_64a333bb5c94d3ea = []byte{ + // 842 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xd1, 0x6e, 0xe3, 0x44, + 0x14, 0x25, 0xad, 0x93, 0x38, 0x37, 0x6d, 0xe2, 0x9d, 0x2e, 0xd2, 0xa8, 0x42, 0x68, 0x65, 0x89, + 0xa5, 0x64, 0x45, 0x96, 0xed, 0x22, 0x21, 0x21, 0xf1, 0xd0, 0xa6, 0xee, 0xe2, 0xb6, 0xeb, 0xc2, + 0x38, 0x69, 0x79, 0xab, 0x5c, 0x33, 0xcd, 0x8e, 0x70, 0x6c, 0x6b, 0xc6, 0x29, 0x2a, 0x5f, 0xc0, + 0xf7, 0xf0, 0x01, 0x7c, 0x06, 0x1f, 0xc0, 0x97, 0xa0, 0x19, 0xcf, 0xd8, 0x6e, 0x77, 0xc9, 0xf6, + 0x29, 0x2f, 0x55, 0xe7, 0x9e, 0x73, 0x67, 0xee, 0xbd, 0x3e, 0xe7, 0x06, 0x06, 0x9c, 0x8a, 0x3c, + 0x4b, 0x05, 0x1d, 0xe7, 0x3c, 0x2b, 0x32, 0xb4, 0x71, 0xfb, 0x6a, 0xf7, 0xf3, 0x79, 0x96, 0xcd, + 0x13, 0xfa, 0x52, 0x45, 0xae, 0x97, 0x37, 0x2f, 0x7f, 0xe7, 0x51, 0x9e, 0x53, 0x2e, 0x4a, 0xce, + 0xee, 0xb6, 0xa0, 0xfc, 0x96, 0xc5, 0xd4, 0x1c, 0x79, 0xb6, 0x2c, 0x58, 0x3a, 0xd7, 0xc7, 0xad, + 0x38, 0x61, 0x34, 0x2d, 0xf4, 0x69, 0xc8, 0xa3, 0x82, 0x26, 0x6c, 0xc1, 0x4c, 0xe0, 0x69, 0xcc, + 0x78, 0xbc, 0x64, 0xc5, 0x35, 0xa7, 0xd1, 0x6f, 0x94, 0xeb, 0xe8, 0x4e, 0x9c, 0xa5, 0x37, 0x6c, + 0xce, 0x69, 0x42, 0x23, 0x53, 0xcb, 0xee, 0x20, 0x4f, 0xa2, 0xe2, 0x26, 0xe3, 0x8b, 0xf2, 0xec, + 0x16, 0x30, 0x08, 0xd9, 0x22, 0x4f, 0x28, 0xd1, 0x35, 0xa3, 0x6f, 0xc0, 0x8a, 0xb3, 0x5f, 0x29, + 0x6e, 0x3d, 0x6b, 0xed, 0xf5, 0xf7, 0x3f, 0x1b, 0x97, 0x85, 0x8f, 0x4d, 0xe1, 0xe3, 0x99, 0x9f, + 0x16, 0xaf, 0xf7, 0x2f, 0xa2, 0x64, 0x49, 0x89, 0x62, 0xca, 0x0c, 0x96, 0xde, 0x64, 0x78, 0xe3, + 0x7f, 0x32, 0xc2, 0x82, 0xb3, 0x74, 0xae, 0x33, 0x24, 0xd3, 0xfd, 0xcb, 0x02, 0x7b, 0x9d, 0x0f, + 0x22, 0x17, 0x3a, 0xe5, 0x08, 0xf1, 0xa6, 0xca, 0x81, 0xf1, 0xed, 0xab, 0xf1, 0x44, 0x45, 0x88, + 0x46, 0xd0, 0x0b, 0xe8, 0xa5, 0xd1, 0x82, 0x8a, 0x3c, 0x8a, 0x29, 0xb6, 0x14, 0x6d, 0x5b, 0xd2, + 0x02, 0x13, 0x24, 0x35, 0x8e, 0xbe, 0x80, 0xae, 0xfe, 0x62, 0xb8, 0xad, 0xa8, 0x7d, 0x49, 0x0d, + 0xcb, 0x10, 0x31, 0x18, 0xda, 0x03, 0x9b, 0xa5, 0xa2, 0x88, 0xd2, 0x98, 0xe2, 0x8e, 0xe2, 0x6d, + 0x49, 0x9e, 0xaf, 0x63, 0xa4, 0x42, 0xe5, 0x85, 0xfa, 0x9b, 0xe3, 0x6e, 0x7d, 0x21, 0x29, 0x43, + 0xc4, 0x60, 0xe8, 0x39, 0xb4, 0xa3, 0x84, 0x45, 0x02, 0xdb, 0x8a, 0xe4, 0x34, 0x5e, 0x3d, 0x90, + 0x71, 0x52, 0xc2, 0xe8, 0x39, 0xf4, 0xa4, 0x4a, 0xce, 0xa4, 0x4a, 0x70, 0x4f, 0x71, 0x6d, 0x75, + 0xe1, 0x32, 0xa1, 0xa4, 0x86, 0xd0, 0xf7, 0x30, 0xd0, 0xe2, 0x39, 0x2c, 0xc5, 0x83, 0x41, 0x91, + 0x91, 0x1a, 0xd0, 0x3d, 0x84, 0x3c, 0x60, 0xa2, 0xef, 0x60, 0xbb, 0x94, 0x18, 0x29, 0x25, 0x86, + 0xfb, 0x2a, 0xf5, 0x89, 0x4a, 0x6d, 0x02, 0xe4, 0x3e, 0x4f, 0x4e, 0xc5, 0xc8, 0x10, 0x0f, 0xeb, + 0xa9, 0xfc, 0xa4, 0x63, 0xa4, 0x42, 0x4f, 0x2c, 0x7b, 0xcb, 0x19, 0x9e, 0x58, 0xb6, 0xe3, 0xec, + 0xb8, 0xff, 0xb4, 0x00, 0x1d, 0x46, 0x45, 0xfc, 0xee, 0x92, 0xb3, 0x62, 0xad, 0x7a, 0x95, 0x19, + 0x82, 0xfd, 0x41, 0xb5, 0x78, 0x3e, 0xf2, 0x86, 0x64, 0xa2, 0x11, 0xf4, 0xcc, 0x16, 0x10, 0xd8, + 0x7a, 0xb6, 0x69, 0x7a, 0x34, 0x65, 0x93, 0x1a, 0x76, 0xff, 0xb5, 0x74, 0x63, 0x3f, 0x2f, 0x29, + 0xbf, 0x5b, 0x6b, 0x63, 0xdf, 0x42, 0x27, 0x5a, 0x64, 0xcb, 0xca, 0x17, 0xab, 0x5f, 0xd1, 0xdc, + 0x6a, 0x1c, 0xd6, 0xa3, 0xc7, 0xf1, 0x35, 0x40, 0xe5, 0x1d, 0x81, 0xdb, 0x6a, 0x1e, 0x0f, 0xcc, + 0xd5, 0x20, 0xa0, 0x2f, 0xc1, 0xd6, 0x0e, 0x12, 0xb8, 0xa3, 0xc8, 0xf7, 0xec, 0x55, 0x81, 0x72, + 0xcc, 0xc6, 0x41, 0x02, 0x77, 0xeb, 0x31, 0x57, 0x06, 0xab, 0x61, 0x79, 0xa9, 0x76, 0x91, 0x74, + 0xcf, 0xe6, 0x43, 0x8b, 0x55, 0x20, 0x1a, 0x41, 0x57, 0x99, 0x88, 0x0a, 0xdc, 0x53, 0xbc, 0xf7, + 0x5d, 0x66, 0x08, 0x68, 0x0f, 0xa0, 0x32, 0x93, 0xc0, 0xa0, 0xe8, 0xb5, 0xd1, 0x1a, 0x18, 0xf2, + 0x00, 0x95, 0x2e, 0xb8, 0x64, 0xc5, 0xbb, 0xd0, 0x74, 0xd7, 0x57, 0x19, 0x9f, 0xd6, 0x96, 0x69, + 0xa0, 0xe4, 0x03, 0x09, 0xb2, 0x63, 0xe3, 0x0e, 0x81, 0x87, 0x75, 0xc7, 0x95, 0x79, 0x6a, 0xb8, + 0xe1, 0x9e, 0x27, 0xee, 0x9f, 0x6d, 0x70, 0x8e, 0x98, 0x88, 0xb3, 0x5b, 0xca, 0xd7, 0x2a, 0xb1, + 0x1f, 0xc0, 0x2a, 0xee, 0xf2, 0xd2, 0x3b, 0x83, 0xfd, 0xaf, 0x64, 0xad, 0x0f, 0xeb, 0x78, 0x2f, + 0x30, 0xbd, 0xcb, 0x29, 0x51, 0x69, 0xcd, 0x45, 0x6b, 0xad, 0x58, 0xb4, 0xf7, 0x84, 0xd0, 0x5e, + 0x2d, 0x84, 0xc6, 0xaa, 0xed, 0xac, 0x58, 0xb5, 0x2f, 0x9a, 0x2b, 0xb4, 0x5b, 0xff, 0x1e, 0x10, + 0x13, 0x5c, 0xbd, 0x47, 0xed, 0x47, 0xef, 0xd1, 0xa6, 0xda, 0x7b, 0x2b, 0xd4, 0xee, 0xfe, 0xdd, + 0x82, 0xa7, 0x1f, 0x1a, 0x15, 0xea, 0x43, 0x77, 0x16, 0x9c, 0x06, 0xe7, 0x97, 0x81, 0xf3, 0x09, + 0xda, 0x02, 0xdb, 0x0f, 0xc2, 0xe9, 0x41, 0x30, 0xf1, 0x9c, 0x96, 0x84, 0x26, 0x67, 0xb3, 0x70, + 0xea, 0x11, 0x67, 0x43, 0x1e, 0xc8, 0xf9, 0x6c, 0xea, 0x07, 0x6f, 0x9c, 0x4d, 0x34, 0x00, 0x20, + 0x07, 0x53, 0xef, 0xea, 0xcc, 0x7f, 0xeb, 0x4f, 0x1d, 0x0b, 0xed, 0xc0, 0x70, 0xe2, 0x93, 0xc9, + 0xcc, 0x9f, 0x5e, 0x1d, 0x12, 0xef, 0xe0, 0xd4, 0x23, 0x4e, 0x5b, 0x5e, 0x16, 0x7a, 0xe4, 0xc2, + 0x9f, 0x78, 0xa1, 0xd3, 0x71, 0x2d, 0xbb, 0xeb, 0xf4, 0x47, 0xd6, 0x5b, 0x2f, 0xfc, 0x71, 0xd4, + 0x97, 0x7f, 0xaf, 0x26, 0xe7, 0xc1, 0xb1, 0xff, 0x66, 0x34, 0x38, 0x3e, 0x9b, 0xfd, 0x72, 0x75, + 0x74, 0x48, 0xbc, 0x63, 0x22, 0x41, 0x5b, 0x9d, 0xc3, 0xa3, 0xd3, 0x51, 0xbf, 0xfc, 0xcf, 0x23, + 0x17, 0x1e, 0x39, 0xb1, 0x6c, 0x70, 0x06, 0xd7, 0x1d, 0xa5, 0x96, 0xd7, 0xff, 0x05, 0x00, 0x00, + 0xff, 0xff, 0x42, 0xc3, 0xf9, 0x58, 0x28, 0x09, 0x00, 0x00, +} diff --git a/common/api/v1/response.proto b/common/api/v1/response.proto new file mode 100644 index 000000000..2e817dc53 --- /dev/null +++ b/common/api/v1/response.proto @@ -0,0 +1,82 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; +import "service.proto"; +import "routing.proto"; +import "client.proto"; +import "ratelimit.proto"; +import "circuitbreaker.proto"; +import "configrelease.proto"; +import "platform.proto"; + +message SimpleResponse { + google.protobuf.UInt32Value code = 1; + google.protobuf.StringValue info = 2; +} + +message Response { + google.protobuf.UInt32Value code = 1; + google.protobuf.StringValue info = 2; + Client client = 3; + Namespace namespace = 4; + Service service = 5; + Instance instance = 6; + Routing routing = 7; + ServiceAlias alias = 8; + Rule rateLimit = 9; + CircuitBreaker circuitBreaker = 10; + ConfigRelease configRelease = 11; + Platform platform = 15; + reserved 12 to 14, 16 to 18; +} + +message BatchWriteResponse { + google.protobuf.UInt32Value code = 1; + google.protobuf.StringValue info = 2; + google.protobuf.UInt32Value size = 3; + repeated Response responses = 4; +} + +message BatchQueryResponse { + google.protobuf.UInt32Value code = 1; + google.protobuf.StringValue info = 2; + google.protobuf.UInt32Value amount = 3; + google.protobuf.UInt32Value size = 4; + repeated Namespace namespaces = 5; + repeated Service services = 6; + repeated Instance instances = 7; + repeated Routing routings = 8; + repeated ServiceAlias aliases = 9; + repeated Rule rateLimits = 10; + repeated ConfigWithService configWithServices = 11; + repeated Platform platforms = 15; + reserved 12 to 14, 16; +} + +message DiscoverResponse { + google.protobuf.UInt32Value code = 1; + google.protobuf.StringValue info = 2; + + enum DiscoverResponseType { + UNKNOWN = 0; + INSTANCE = 1; + CLUSTER = 2; + ROUTING = 3; + RATE_LIMIT = 4; + CIRCUIT_BREAKER = 5; + SERVICES = 6; + reserved 7 to 11; + reserved "MESH", "MESH_CONFIG", "FLUX_DBREFRESH", "FLUX_SDK", "FLUX_SERVER"; + } + + DiscoverResponseType type = 3; + Service service = 4; + repeated Instance instances = 5; + Routing routing = 6; + RateLimit rateLimit = 7; + CircuitBreaker circuitBreaker = 8; + repeated Service services = 9; + reserved 10 to 13; +} diff --git a/common/api/v1/routing.pb.go b/common/api/v1/routing.pb.go new file mode 100644 index 000000000..673cad9ae --- /dev/null +++ b/common/api/v1/routing.pb.go @@ -0,0 +1,368 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: routing.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type Routing struct { + // 规则所属服务以及命名空间 + Service *wrappers.StringValue `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Namespace *wrappers.StringValue `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // 每个服务可以配置多条入站或者出站规则 + // 对于每个请求,从上到下依次匹配,若命中则终止 + Inbounds []*Route `protobuf:"bytes,3,rep,name=inbounds,proto3" json:"inbounds,omitempty"` + Outbounds []*Route `protobuf:"bytes,4,rep,name=outbounds,proto3" json:"outbounds,omitempty"` + Ctime *wrappers.StringValue `protobuf:"bytes,5,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *wrappers.StringValue `protobuf:"bytes,6,opt,name=mtime,proto3" json:"mtime,omitempty"` + Revision *wrappers.StringValue `protobuf:"bytes,7,opt,name=revision,proto3" json:"revision,omitempty"` + ServiceToken *wrappers.StringValue `protobuf:"bytes,8,opt,name=service_token,proto3" json:"service_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Routing) Reset() { *m = Routing{} } +func (m *Routing) String() string { return proto.CompactTextString(m) } +func (*Routing) ProtoMessage() {} +func (*Routing) Descriptor() ([]byte, []int) { + return fileDescriptor_routing_413c16898e0eee19, []int{0} +} +func (m *Routing) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Routing.Unmarshal(m, b) +} +func (m *Routing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Routing.Marshal(b, m, deterministic) +} +func (dst *Routing) XXX_Merge(src proto.Message) { + xxx_messageInfo_Routing.Merge(dst, src) +} +func (m *Routing) XXX_Size() int { + return xxx_messageInfo_Routing.Size(m) +} +func (m *Routing) XXX_DiscardUnknown() { + xxx_messageInfo_Routing.DiscardUnknown(m) +} + +var xxx_messageInfo_Routing proto.InternalMessageInfo + +func (m *Routing) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *Routing) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *Routing) GetInbounds() []*Route { + if m != nil { + return m.Inbounds + } + return nil +} + +func (m *Routing) GetOutbounds() []*Route { + if m != nil { + return m.Outbounds + } + return nil +} + +func (m *Routing) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *Routing) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +func (m *Routing) GetRevision() *wrappers.StringValue { + if m != nil { + return m.Revision + } + return nil +} + +func (m *Routing) GetServiceToken() *wrappers.StringValue { + if m != nil { + return m.ServiceToken + } + return nil +} + +type Route struct { + // 如果匹配Source规则,按照Destination路由 + // 多个Source之间的关系为或 + Sources []*Source `protobuf:"bytes,1,rep,name=sources,proto3" json:"sources,omitempty"` + Destinations []*Destination `protobuf:"bytes,2,rep,name=destinations,proto3" json:"destinations,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Route) Reset() { *m = Route{} } +func (m *Route) String() string { return proto.CompactTextString(m) } +func (*Route) ProtoMessage() {} +func (*Route) Descriptor() ([]byte, []int) { + return fileDescriptor_routing_413c16898e0eee19, []int{1} +} +func (m *Route) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Route.Unmarshal(m, b) +} +func (m *Route) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Route.Marshal(b, m, deterministic) +} +func (dst *Route) XXX_Merge(src proto.Message) { + xxx_messageInfo_Route.Merge(dst, src) +} +func (m *Route) XXX_Size() int { + return xxx_messageInfo_Route.Size(m) +} +func (m *Route) XXX_DiscardUnknown() { + xxx_messageInfo_Route.DiscardUnknown(m) +} + +var xxx_messageInfo_Route proto.InternalMessageInfo + +func (m *Route) GetSources() []*Source { + if m != nil { + return m.Sources + } + return nil +} + +func (m *Route) GetDestinations() []*Destination { + if m != nil { + return m.Destinations + } + return nil +} + +type Source struct { + // 主调方服务以及命名空间 + Service *wrappers.StringValue `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Namespace *wrappers.StringValue `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // 主调方服务实例标签或者请求标签 + // value支持正则匹配 + Metadata map[string]*MatchString `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Source) Reset() { *m = Source{} } +func (m *Source) String() string { return proto.CompactTextString(m) } +func (*Source) ProtoMessage() {} +func (*Source) Descriptor() ([]byte, []int) { + return fileDescriptor_routing_413c16898e0eee19, []int{2} +} +func (m *Source) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Source.Unmarshal(m, b) +} +func (m *Source) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Source.Marshal(b, m, deterministic) +} +func (dst *Source) XXX_Merge(src proto.Message) { + xxx_messageInfo_Source.Merge(dst, src) +} +func (m *Source) XXX_Size() int { + return xxx_messageInfo_Source.Size(m) +} +func (m *Source) XXX_DiscardUnknown() { + xxx_messageInfo_Source.DiscardUnknown(m) +} + +var xxx_messageInfo_Source proto.InternalMessageInfo + +func (m *Source) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *Source) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *Source) GetMetadata() map[string]*MatchString { + if m != nil { + return m.Metadata + } + return nil +} + +type Destination struct { + // 被调方服务以及命名空间 + Service *wrappers.StringValue `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Namespace *wrappers.StringValue `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // 被调方服务实例标签 + // value支持正则匹配 + Metadata map[string]*MatchString `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // 根据服务名和服务实例metadata筛选符合条件的服务实例子集 + // 服务实例子集可以设置优先级和权重 + // 优先级:整型,范围[0, 9],最高优先级为0 + // 权重:整型 + // 先按优先级路由,如果存在高优先级,不会使用低优先级 + // 如果存在优先级相同的子集,再按权重分配 + // 优先级和权重可以都不设置/设置一个/设置两个 + // 如果部分设置优先级,部分没有设置,认为没有设置的优先级最低 + // 如果部分设置权重,部分没有设置,认为没有设置的权重为0 + // 如果全部没有设置权重,认为权重相同 + Priority *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=priority,proto3" json:"priority,omitempty"` + Weight *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=weight,proto3" json:"weight,omitempty"` + // 将请求转发到代理服务 + Transfer *wrappers.StringValue `protobuf:"bytes,6,opt,name=transfer,proto3" json:"transfer,omitempty"` + // 是否对该set执行隔离,隔离后,不会再分配流量 + Isolate *wrappers.BoolValue `protobuf:"bytes,7,opt,name=isolate,proto3" json:"isolate,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Destination) Reset() { *m = Destination{} } +func (m *Destination) String() string { return proto.CompactTextString(m) } +func (*Destination) ProtoMessage() {} +func (*Destination) Descriptor() ([]byte, []int) { + return fileDescriptor_routing_413c16898e0eee19, []int{3} +} +func (m *Destination) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Destination.Unmarshal(m, b) +} +func (m *Destination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Destination.Marshal(b, m, deterministic) +} +func (dst *Destination) XXX_Merge(src proto.Message) { + xxx_messageInfo_Destination.Merge(dst, src) +} +func (m *Destination) XXX_Size() int { + return xxx_messageInfo_Destination.Size(m) +} +func (m *Destination) XXX_DiscardUnknown() { + xxx_messageInfo_Destination.DiscardUnknown(m) +} + +var xxx_messageInfo_Destination proto.InternalMessageInfo + +func (m *Destination) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *Destination) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *Destination) GetMetadata() map[string]*MatchString { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Destination) GetPriority() *wrappers.UInt32Value { + if m != nil { + return m.Priority + } + return nil +} + +func (m *Destination) GetWeight() *wrappers.UInt32Value { + if m != nil { + return m.Weight + } + return nil +} + +func (m *Destination) GetTransfer() *wrappers.StringValue { + if m != nil { + return m.Transfer + } + return nil +} + +func (m *Destination) GetIsolate() *wrappers.BoolValue { + if m != nil { + return m.Isolate + } + return nil +} + +func init() { + proto.RegisterType((*Routing)(nil), "v1.Routing") + proto.RegisterType((*Route)(nil), "v1.Route") + proto.RegisterType((*Source)(nil), "v1.Source") + proto.RegisterMapType((map[string]*MatchString)(nil), "v1.Source.MetadataEntry") + proto.RegisterType((*Destination)(nil), "v1.Destination") + proto.RegisterMapType((map[string]*MatchString)(nil), "v1.Destination.MetadataEntry") +} + +func init() { proto.RegisterFile("routing.proto", fileDescriptor_routing_413c16898e0eee19) } + +var fileDescriptor_routing_413c16898e0eee19 = []byte{ + // 468 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x93, 0xc1, 0x6a, 0xdb, 0x40, + 0x10, 0x86, 0xb1, 0x15, 0x5b, 0xf6, 0xb8, 0xa6, 0x65, 0x4f, 0x8b, 0x69, 0x4b, 0x30, 0x0d, 0xcd, + 0x49, 0x21, 0xb6, 0x29, 0x69, 0x8e, 0xa1, 0x3d, 0x14, 0x9a, 0x8b, 0x42, 0x7b, 0x2d, 0x6b, 0x79, + 0xa2, 0x2c, 0x91, 0x76, 0xc5, 0xee, 0x48, 0xc1, 0xb7, 0xbe, 0x53, 0xdf, 0xaa, 0x4f, 0x51, 0xb4, + 0x5a, 0xdb, 0x71, 0x82, 0x41, 0x87, 0x42, 0x6e, 0xd2, 0xce, 0xf7, 0xcf, 0xcc, 0xfe, 0x3b, 0x03, + 0x63, 0xa3, 0x4b, 0x92, 0x2a, 0x8d, 0x0a, 0xa3, 0x49, 0xb3, 0x6e, 0x75, 0x3e, 0x79, 0x9f, 0x6a, + 0x9d, 0x66, 0x78, 0xe6, 0x4e, 0x96, 0xe5, 0xed, 0xd9, 0x83, 0x11, 0x45, 0x81, 0xc6, 0x36, 0xcc, + 0x64, 0x94, 0xeb, 0x15, 0x66, 0xcd, 0xcf, 0xf4, 0x4f, 0x00, 0x61, 0xdc, 0xa4, 0x60, 0x9f, 0x20, + 0xb4, 0x68, 0x2a, 0x99, 0x20, 0xef, 0x1c, 0x77, 0x4e, 0x47, 0xb3, 0xb7, 0x51, 0x93, 0x2a, 0xda, + 0xa4, 0x8a, 0x6e, 0xc8, 0x48, 0x95, 0xfe, 0x14, 0x59, 0x89, 0xf1, 0x06, 0x66, 0x97, 0x30, 0x54, + 0x22, 0x47, 0x5b, 0x88, 0x04, 0x79, 0xb7, 0x85, 0x72, 0x87, 0xb3, 0x13, 0x18, 0x48, 0xb5, 0xd4, + 0xa5, 0x5a, 0x59, 0x1e, 0x1c, 0x07, 0xa7, 0xa3, 0xd9, 0x30, 0xaa, 0xce, 0xa3, 0xba, 0x25, 0x8c, + 0xb7, 0x21, 0xf6, 0x11, 0x86, 0xba, 0x24, 0xcf, 0x1d, 0x3d, 0xe5, 0x76, 0x31, 0x36, 0x83, 0x5e, + 0x42, 0x32, 0x47, 0xde, 0x6b, 0xd1, 0x47, 0x83, 0xd6, 0x9a, 0xdc, 0x69, 0xfa, 0x6d, 0x34, 0x0e, + 0x65, 0x17, 0x30, 0x30, 0x58, 0x49, 0x2b, 0xb5, 0xe2, 0x61, 0x0b, 0xd9, 0x96, 0x66, 0x57, 0x30, + 0xf6, 0xc6, 0xfd, 0x22, 0x7d, 0x8f, 0x8a, 0x0f, 0x5a, 0xc8, 0xf7, 0x25, 0xd3, 0x25, 0xf4, 0xdc, + 0xcd, 0xd9, 0x07, 0x08, 0xad, 0x2e, 0x4d, 0x82, 0x96, 0x77, 0x9c, 0x2b, 0x50, 0xbb, 0x72, 0xe3, + 0x8e, 0xe2, 0x4d, 0x88, 0xcd, 0xe1, 0xd5, 0x0a, 0x2d, 0x49, 0x25, 0x48, 0x6a, 0x65, 0x79, 0xd7, + 0xa1, 0xaf, 0x6b, 0xf4, 0xcb, 0xee, 0x3c, 0xde, 0x83, 0xa6, 0xbf, 0xbb, 0xd0, 0x6f, 0x12, 0xbd, + 0xc8, 0x60, 0x2c, 0x60, 0x90, 0x23, 0x89, 0x95, 0x20, 0xe1, 0x07, 0x83, 0xef, 0xae, 0x16, 0x5d, + 0xfb, 0xd0, 0x57, 0x45, 0x66, 0x1d, 0x6f, 0xc9, 0xc9, 0x77, 0x18, 0xef, 0x85, 0xd8, 0x1b, 0x08, + 0xee, 0x71, 0xed, 0xda, 0x1e, 0xc6, 0xf5, 0x27, 0x3b, 0x81, 0x5e, 0x55, 0x17, 0xf3, 0x0d, 0x39, + 0x17, 0xae, 0x05, 0x25, 0x77, 0x4d, 0x23, 0x71, 0x13, 0xbd, 0xec, 0x5e, 0x74, 0xa6, 0x7f, 0x03, + 0x18, 0x3d, 0x32, 0xe8, 0x45, 0x7c, 0xf8, 0xfc, 0xcc, 0x87, 0x77, 0x4f, 0xde, 0xed, 0x90, 0x19, + 0xf5, 0x8c, 0x16, 0x46, 0x6a, 0x23, 0x69, 0xcd, 0x8f, 0x0e, 0x54, 0xfd, 0xf1, 0x4d, 0xd1, 0x7c, + 0xe6, 0x67, 0x74, 0x43, 0xb3, 0x05, 0xf4, 0x1f, 0x50, 0xa6, 0x77, 0x74, 0x70, 0x8d, 0x1e, 0xeb, + 0x3c, 0x5b, 0xd7, 0x23, 0x23, 0x94, 0xbd, 0x45, 0xd3, 0x6a, 0x95, 0xb6, 0x34, 0x5b, 0x40, 0x28, + 0xad, 0xce, 0x04, 0xa1, 0x5f, 0xa6, 0xc9, 0x33, 0xe1, 0x95, 0xd6, 0x99, 0xb7, 0xd5, 0xa3, 0xff, + 0xf7, 0xb1, 0x97, 0x7d, 0x57, 0x6a, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xb3, 0x0a, 0x3d, 0x7c, + 0x52, 0x05, 0x00, 0x00, +} diff --git a/common/api/v1/routing.proto b/common/api/v1/routing.proto new file mode 100644 index 000000000..bbc730298 --- /dev/null +++ b/common/api/v1/routing.proto @@ -0,0 +1,69 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; +import "model.proto"; + +message Routing { + // 规则所属服务以及命名空间 + google.protobuf.StringValue service = 1; + google.protobuf.StringValue namespace = 2; + + // 每个服务可以配置多条入站或者出站规则 + // 对于每个请求,从上到下依次匹配,若命中则终止 + repeated Route inbounds = 3; + repeated Route outbounds = 4; + + google.protobuf.StringValue ctime = 5; + google.protobuf.StringValue mtime = 6; + google.protobuf.StringValue revision = 7; + + google.protobuf.StringValue service_token = 8 [json_name="service_token"]; +} + +message Route { + // 如果匹配Source规则,按照Destination路由 + // 多个Source之间的关系为或 + repeated Source sources = 1; + repeated Destination destinations = 2; +} + +message Source { + // 主调方服务以及命名空间 + google.protobuf.StringValue service = 1; + google.protobuf.StringValue namespace = 2; + + // 主调方服务实例标签或者请求标签 + // value支持正则匹配 + map metadata = 3; +} + +message Destination { + // 被调方服务以及命名空间 + google.protobuf.StringValue service = 1; + google.protobuf.StringValue namespace = 2; + + // 被调方服务实例标签 + // value支持正则匹配 + map metadata = 3; + + // 根据服务名和服务实例metadata筛选符合条件的服务实例子集 + // 服务实例子集可以设置优先级和权重 + // 优先级:整型,范围[0, 9],最高优先级为0 + // 权重:整型 + // 先按优先级路由,如果存在高优先级,不会使用低优先级 + // 如果存在优先级相同的子集,再按权重分配 + // 优先级和权重可以都不设置/设置一个/设置两个 + // 如果部分设置优先级,部分没有设置,认为没有设置的优先级最低 + // 如果部分设置权重,部分没有设置,认为没有设置的权重为0 + // 如果全部没有设置权重,认为权重相同 + google.protobuf.UInt32Value priority = 4; + google.protobuf.UInt32Value weight = 5; + + // 将请求转发到代理服务 + google.protobuf.StringValue transfer = 6; + + //是否对该set执行隔离,隔离后,不会再分配流量 + google.protobuf.BoolValue isolate = 7; +} diff --git a/common/api/v1/service.pb.go b/common/api/v1/service.pb.go new file mode 100644 index 000000000..7a94245c6 --- /dev/null +++ b/common/api/v1/service.pb.go @@ -0,0 +1,761 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: service.proto + +package v1 + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import wrappers "github.com/golang/protobuf/ptypes/wrappers" + +// 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.ProtoPackageIsVersion2 // please upgrade the proto package + +type AliasType int32 + +const ( + AliasType_DEFAULT AliasType = 0 + AliasType_CL5SID AliasType = 1 +) + +var AliasType_name = map[int32]string{ + 0: "DEFAULT", + 1: "CL5SID", +} +var AliasType_value = map[string]int32{ + "DEFAULT": 0, + "CL5SID": 1, +} + +func (x AliasType) String() string { + return proto.EnumName(AliasType_name, int32(x)) +} +func (AliasType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_service_413f75d8eac84e7c, []int{0} +} + +type HealthCheck_HealthCheckType int32 + +const ( + HealthCheck_UNKNOWN HealthCheck_HealthCheckType = 0 + HealthCheck_HEARTBEAT HealthCheck_HealthCheckType = 1 +) + +var HealthCheck_HealthCheckType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "HEARTBEAT", +} +var HealthCheck_HealthCheckType_value = map[string]int32{ + "UNKNOWN": 0, + "HEARTBEAT": 1, +} + +func (x HealthCheck_HealthCheckType) String() string { + return proto.EnumName(HealthCheck_HealthCheckType_name, int32(x)) +} +func (HealthCheck_HealthCheckType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_service_413f75d8eac84e7c, []int{4, 0} +} + +type Namespace struct { + Name *wrappers.StringValue `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Comment *wrappers.StringValue `protobuf:"bytes,2,opt,name=comment,proto3" json:"comment,omitempty"` + Owners *wrappers.StringValue `protobuf:"bytes,3,opt,name=owners,proto3" json:"owners,omitempty"` + Token *wrappers.StringValue `protobuf:"bytes,4,opt,name=token,proto3" json:"token,omitempty"` + Ctime *wrappers.StringValue `protobuf:"bytes,5,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *wrappers.StringValue `protobuf:"bytes,6,opt,name=mtime,proto3" json:"mtime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Namespace) Reset() { *m = Namespace{} } +func (m *Namespace) String() string { return proto.CompactTextString(m) } +func (*Namespace) ProtoMessage() {} +func (*Namespace) Descriptor() ([]byte, []int) { + return fileDescriptor_service_413f75d8eac84e7c, []int{0} +} +func (m *Namespace) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Namespace.Unmarshal(m, b) +} +func (m *Namespace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Namespace.Marshal(b, m, deterministic) +} +func (dst *Namespace) XXX_Merge(src proto.Message) { + xxx_messageInfo_Namespace.Merge(dst, src) +} +func (m *Namespace) XXX_Size() int { + return xxx_messageInfo_Namespace.Size(m) +} +func (m *Namespace) XXX_DiscardUnknown() { + xxx_messageInfo_Namespace.DiscardUnknown(m) +} + +var xxx_messageInfo_Namespace proto.InternalMessageInfo + +func (m *Namespace) GetName() *wrappers.StringValue { + if m != nil { + return m.Name + } + return nil +} + +func (m *Namespace) GetComment() *wrappers.StringValue { + if m != nil { + return m.Comment + } + return nil +} + +func (m *Namespace) GetOwners() *wrappers.StringValue { + if m != nil { + return m.Owners + } + return nil +} + +func (m *Namespace) GetToken() *wrappers.StringValue { + if m != nil { + return m.Token + } + return nil +} + +func (m *Namespace) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *Namespace) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +type Service struct { + Name *wrappers.StringValue `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Namespace *wrappers.StringValue `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Ports *wrappers.StringValue `protobuf:"bytes,4,opt,name=ports,proto3" json:"ports,omitempty"` + Business *wrappers.StringValue `protobuf:"bytes,5,opt,name=business,proto3" json:"business,omitempty"` + Department *wrappers.StringValue `protobuf:"bytes,6,opt,name=department,proto3" json:"department,omitempty"` + CmdbMod1 *wrappers.StringValue `protobuf:"bytes,7,opt,name=cmdb_mod1,proto3" json:"cmdb_mod1,omitempty"` + CmdbMod2 *wrappers.StringValue `protobuf:"bytes,8,opt,name=cmdb_mod2,proto3" json:"cmdb_mod2,omitempty"` + CmdbMod3 *wrappers.StringValue `protobuf:"bytes,9,opt,name=cmdb_mod3,proto3" json:"cmdb_mod3,omitempty"` + Comment *wrappers.StringValue `protobuf:"bytes,10,opt,name=comment,proto3" json:"comment,omitempty"` + Owners *wrappers.StringValue `protobuf:"bytes,11,opt,name=owners,proto3" json:"owners,omitempty"` + Token *wrappers.StringValue `protobuf:"bytes,12,opt,name=token,proto3" json:"token,omitempty"` + Ctime *wrappers.StringValue `protobuf:"bytes,13,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *wrappers.StringValue `protobuf:"bytes,14,opt,name=mtime,proto3" json:"mtime,omitempty"` + Revision *wrappers.StringValue `protobuf:"bytes,15,opt,name=revision,proto3" json:"revision,omitempty"` + PlatformId *wrappers.StringValue `protobuf:"bytes,16,opt,name=platform_id,proto3" json:"platform_id,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Service) Reset() { *m = Service{} } +func (m *Service) String() string { return proto.CompactTextString(m) } +func (*Service) ProtoMessage() {} +func (*Service) Descriptor() ([]byte, []int) { + return fileDescriptor_service_413f75d8eac84e7c, []int{1} +} +func (m *Service) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Service.Unmarshal(m, b) +} +func (m *Service) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Service.Marshal(b, m, deterministic) +} +func (dst *Service) XXX_Merge(src proto.Message) { + xxx_messageInfo_Service.Merge(dst, src) +} +func (m *Service) XXX_Size() int { + return xxx_messageInfo_Service.Size(m) +} +func (m *Service) XXX_DiscardUnknown() { + xxx_messageInfo_Service.DiscardUnknown(m) +} + +var xxx_messageInfo_Service proto.InternalMessageInfo + +func (m *Service) GetName() *wrappers.StringValue { + if m != nil { + return m.Name + } + return nil +} + +func (m *Service) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *Service) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Service) GetPorts() *wrappers.StringValue { + if m != nil { + return m.Ports + } + return nil +} + +func (m *Service) GetBusiness() *wrappers.StringValue { + if m != nil { + return m.Business + } + return nil +} + +func (m *Service) GetDepartment() *wrappers.StringValue { + if m != nil { + return m.Department + } + return nil +} + +func (m *Service) GetCmdbMod1() *wrappers.StringValue { + if m != nil { + return m.CmdbMod1 + } + return nil +} + +func (m *Service) GetCmdbMod2() *wrappers.StringValue { + if m != nil { + return m.CmdbMod2 + } + return nil +} + +func (m *Service) GetCmdbMod3() *wrappers.StringValue { + if m != nil { + return m.CmdbMod3 + } + return nil +} + +func (m *Service) GetComment() *wrappers.StringValue { + if m != nil { + return m.Comment + } + return nil +} + +func (m *Service) GetOwners() *wrappers.StringValue { + if m != nil { + return m.Owners + } + return nil +} + +func (m *Service) GetToken() *wrappers.StringValue { + if m != nil { + return m.Token + } + return nil +} + +func (m *Service) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *Service) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +func (m *Service) GetRevision() *wrappers.StringValue { + if m != nil { + return m.Revision + } + return nil +} + +func (m *Service) GetPlatformId() *wrappers.StringValue { + if m != nil { + return m.PlatformId + } + return nil +} + +type ServiceAlias struct { + Service *wrappers.StringValue `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` + Namespace *wrappers.StringValue `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + Alias *wrappers.StringValue `protobuf:"bytes,3,opt,name=alias,proto3" json:"alias,omitempty"` + Type AliasType `protobuf:"varint,4,opt,name=type,proto3,enum=v1.AliasType" json:"type,omitempty"` + Owners *wrappers.StringValue `protobuf:"bytes,8,opt,name=owners,proto3" json:"owners,omitempty"` + Comment *wrappers.StringValue `protobuf:"bytes,9,opt,name=comment,proto3" json:"comment,omitempty"` + ServiceToken *wrappers.StringValue `protobuf:"bytes,5,opt,name=service_token,proto3" json:"service_token,omitempty"` + Ctime *wrappers.StringValue `protobuf:"bytes,6,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *wrappers.StringValue `protobuf:"bytes,7,opt,name=mtime,proto3" json:"mtime,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ServiceAlias) Reset() { *m = ServiceAlias{} } +func (m *ServiceAlias) String() string { return proto.CompactTextString(m) } +func (*ServiceAlias) ProtoMessage() {} +func (*ServiceAlias) Descriptor() ([]byte, []int) { + return fileDescriptor_service_413f75d8eac84e7c, []int{2} +} +func (m *ServiceAlias) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ServiceAlias.Unmarshal(m, b) +} +func (m *ServiceAlias) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ServiceAlias.Marshal(b, m, deterministic) +} +func (dst *ServiceAlias) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceAlias.Merge(dst, src) +} +func (m *ServiceAlias) XXX_Size() int { + return xxx_messageInfo_ServiceAlias.Size(m) +} +func (m *ServiceAlias) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceAlias.DiscardUnknown(m) +} + +var xxx_messageInfo_ServiceAlias proto.InternalMessageInfo + +func (m *ServiceAlias) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *ServiceAlias) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *ServiceAlias) GetAlias() *wrappers.StringValue { + if m != nil { + return m.Alias + } + return nil +} + +func (m *ServiceAlias) GetType() AliasType { + if m != nil { + return m.Type + } + return AliasType_DEFAULT +} + +func (m *ServiceAlias) GetOwners() *wrappers.StringValue { + if m != nil { + return m.Owners + } + return nil +} + +func (m *ServiceAlias) GetComment() *wrappers.StringValue { + if m != nil { + return m.Comment + } + return nil +} + +func (m *ServiceAlias) GetServiceToken() *wrappers.StringValue { + if m != nil { + return m.ServiceToken + } + return nil +} + +func (m *ServiceAlias) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *ServiceAlias) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +type Instance struct { + Id *wrappers.StringValue `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Service *wrappers.StringValue `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"` + Namespace *wrappers.StringValue `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` + VpcId *wrappers.StringValue `protobuf:"bytes,21,opt,name=vpc_id,proto3" json:"vpc_id,omitempty"` + Host *wrappers.StringValue `protobuf:"bytes,4,opt,name=host,proto3" json:"host,omitempty"` + Port *wrappers.UInt32Value `protobuf:"bytes,5,opt,name=port,proto3" json:"port,omitempty"` + Protocol *wrappers.StringValue `protobuf:"bytes,6,opt,name=protocol,proto3" json:"protocol,omitempty"` + Version *wrappers.StringValue `protobuf:"bytes,7,opt,name=version,proto3" json:"version,omitempty"` + Priority *wrappers.UInt32Value `protobuf:"bytes,8,opt,name=priority,proto3" json:"priority,omitempty"` + Weight *wrappers.UInt32Value `protobuf:"bytes,9,opt,name=weight,proto3" json:"weight,omitempty"` + EnableHealthCheck *wrappers.BoolValue `protobuf:"bytes,20,opt,name=enable_health_check,json=enableHealthCheck,proto3" json:"enable_health_check,omitempty"` + HealthCheck *HealthCheck `protobuf:"bytes,10,opt,name=health_check,json=healthCheck,proto3" json:"health_check,omitempty"` + Healthy *wrappers.BoolValue `protobuf:"bytes,11,opt,name=healthy,proto3" json:"healthy,omitempty"` + Isolate *wrappers.BoolValue `protobuf:"bytes,12,opt,name=isolate,proto3" json:"isolate,omitempty"` + Location *Location `protobuf:"bytes,13,opt,name=location,proto3" json:"location,omitempty"` + Metadata map[string]string `protobuf:"bytes,14,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + LogicSet *wrappers.StringValue `protobuf:"bytes,15,opt,name=logic_set,proto3" json:"logic_set,omitempty"` + Ctime *wrappers.StringValue `protobuf:"bytes,16,opt,name=ctime,proto3" json:"ctime,omitempty"` + Mtime *wrappers.StringValue `protobuf:"bytes,17,opt,name=mtime,proto3" json:"mtime,omitempty"` + Revision *wrappers.StringValue `protobuf:"bytes,18,opt,name=revision,proto3" json:"revision,omitempty"` + ServiceToken *wrappers.StringValue `protobuf:"bytes,19,opt,name=service_token,proto3" json:"service_token,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Instance) Reset() { *m = Instance{} } +func (m *Instance) String() string { return proto.CompactTextString(m) } +func (*Instance) ProtoMessage() {} +func (*Instance) Descriptor() ([]byte, []int) { + return fileDescriptor_service_413f75d8eac84e7c, []int{3} +} +func (m *Instance) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Instance.Unmarshal(m, b) +} +func (m *Instance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Instance.Marshal(b, m, deterministic) +} +func (dst *Instance) XXX_Merge(src proto.Message) { + xxx_messageInfo_Instance.Merge(dst, src) +} +func (m *Instance) XXX_Size() int { + return xxx_messageInfo_Instance.Size(m) +} +func (m *Instance) XXX_DiscardUnknown() { + xxx_messageInfo_Instance.DiscardUnknown(m) +} + +var xxx_messageInfo_Instance proto.InternalMessageInfo + +func (m *Instance) GetId() *wrappers.StringValue { + if m != nil { + return m.Id + } + return nil +} + +func (m *Instance) GetService() *wrappers.StringValue { + if m != nil { + return m.Service + } + return nil +} + +func (m *Instance) GetNamespace() *wrappers.StringValue { + if m != nil { + return m.Namespace + } + return nil +} + +func (m *Instance) GetVpcId() *wrappers.StringValue { + if m != nil { + return m.VpcId + } + return nil +} + +func (m *Instance) GetHost() *wrappers.StringValue { + if m != nil { + return m.Host + } + return nil +} + +func (m *Instance) GetPort() *wrappers.UInt32Value { + if m != nil { + return m.Port + } + return nil +} + +func (m *Instance) GetProtocol() *wrappers.StringValue { + if m != nil { + return m.Protocol + } + return nil +} + +func (m *Instance) GetVersion() *wrappers.StringValue { + if m != nil { + return m.Version + } + return nil +} + +func (m *Instance) GetPriority() *wrappers.UInt32Value { + if m != nil { + return m.Priority + } + return nil +} + +func (m *Instance) GetWeight() *wrappers.UInt32Value { + if m != nil { + return m.Weight + } + return nil +} + +func (m *Instance) GetEnableHealthCheck() *wrappers.BoolValue { + if m != nil { + return m.EnableHealthCheck + } + return nil +} + +func (m *Instance) GetHealthCheck() *HealthCheck { + if m != nil { + return m.HealthCheck + } + return nil +} + +func (m *Instance) GetHealthy() *wrappers.BoolValue { + if m != nil { + return m.Healthy + } + return nil +} + +func (m *Instance) GetIsolate() *wrappers.BoolValue { + if m != nil { + return m.Isolate + } + return nil +} + +func (m *Instance) GetLocation() *Location { + if m != nil { + return m.Location + } + return nil +} + +func (m *Instance) GetMetadata() map[string]string { + if m != nil { + return m.Metadata + } + return nil +} + +func (m *Instance) GetLogicSet() *wrappers.StringValue { + if m != nil { + return m.LogicSet + } + return nil +} + +func (m *Instance) GetCtime() *wrappers.StringValue { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *Instance) GetMtime() *wrappers.StringValue { + if m != nil { + return m.Mtime + } + return nil +} + +func (m *Instance) GetRevision() *wrappers.StringValue { + if m != nil { + return m.Revision + } + return nil +} + +func (m *Instance) GetServiceToken() *wrappers.StringValue { + if m != nil { + return m.ServiceToken + } + return nil +} + +type HealthCheck struct { + Type HealthCheck_HealthCheckType `protobuf:"varint,1,opt,name=type,proto3,enum=v1.HealthCheck_HealthCheckType" json:"type,omitempty"` + Heartbeat *HeartbeatHealthCheck `protobuf:"bytes,2,opt,name=heartbeat,proto3" json:"heartbeat,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HealthCheck) Reset() { *m = HealthCheck{} } +func (m *HealthCheck) String() string { return proto.CompactTextString(m) } +func (*HealthCheck) ProtoMessage() {} +func (*HealthCheck) Descriptor() ([]byte, []int) { + return fileDescriptor_service_413f75d8eac84e7c, []int{4} +} +func (m *HealthCheck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HealthCheck.Unmarshal(m, b) +} +func (m *HealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HealthCheck.Marshal(b, m, deterministic) +} +func (dst *HealthCheck) XXX_Merge(src proto.Message) { + xxx_messageInfo_HealthCheck.Merge(dst, src) +} +func (m *HealthCheck) XXX_Size() int { + return xxx_messageInfo_HealthCheck.Size(m) +} +func (m *HealthCheck) XXX_DiscardUnknown() { + xxx_messageInfo_HealthCheck.DiscardUnknown(m) +} + +var xxx_messageInfo_HealthCheck proto.InternalMessageInfo + +func (m *HealthCheck) GetType() HealthCheck_HealthCheckType { + if m != nil { + return m.Type + } + return HealthCheck_UNKNOWN +} + +func (m *HealthCheck) GetHeartbeat() *HeartbeatHealthCheck { + if m != nil { + return m.Heartbeat + } + return nil +} + +type HeartbeatHealthCheck struct { + Ttl *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=ttl,proto3" json:"ttl,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HeartbeatHealthCheck) Reset() { *m = HeartbeatHealthCheck{} } +func (m *HeartbeatHealthCheck) String() string { return proto.CompactTextString(m) } +func (*HeartbeatHealthCheck) ProtoMessage() {} +func (*HeartbeatHealthCheck) Descriptor() ([]byte, []int) { + return fileDescriptor_service_413f75d8eac84e7c, []int{5} +} +func (m *HeartbeatHealthCheck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HeartbeatHealthCheck.Unmarshal(m, b) +} +func (m *HeartbeatHealthCheck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HeartbeatHealthCheck.Marshal(b, m, deterministic) +} +func (dst *HeartbeatHealthCheck) XXX_Merge(src proto.Message) { + xxx_messageInfo_HeartbeatHealthCheck.Merge(dst, src) +} +func (m *HeartbeatHealthCheck) XXX_Size() int { + return xxx_messageInfo_HeartbeatHealthCheck.Size(m) +} +func (m *HeartbeatHealthCheck) XXX_DiscardUnknown() { + xxx_messageInfo_HeartbeatHealthCheck.DiscardUnknown(m) +} + +var xxx_messageInfo_HeartbeatHealthCheck proto.InternalMessageInfo + +func (m *HeartbeatHealthCheck) GetTtl() *wrappers.UInt32Value { + if m != nil { + return m.Ttl + } + return nil +} + +func init() { + proto.RegisterType((*Namespace)(nil), "v1.Namespace") + proto.RegisterType((*Service)(nil), "v1.Service") + proto.RegisterMapType((map[string]string)(nil), "v1.Service.MetadataEntry") + proto.RegisterType((*ServiceAlias)(nil), "v1.ServiceAlias") + proto.RegisterType((*Instance)(nil), "v1.Instance") + proto.RegisterMapType((map[string]string)(nil), "v1.Instance.MetadataEntry") + proto.RegisterType((*HealthCheck)(nil), "v1.HealthCheck") + proto.RegisterType((*HeartbeatHealthCheck)(nil), "v1.HeartbeatHealthCheck") + proto.RegisterEnum("v1.AliasType", AliasType_name, AliasType_value) + proto.RegisterEnum("v1.HealthCheck_HealthCheckType", HealthCheck_HealthCheckType_name, HealthCheck_HealthCheckType_value) +} + +func init() { proto.RegisterFile("service.proto", fileDescriptor_service_413f75d8eac84e7c) } + +var fileDescriptor_service_413f75d8eac84e7c = []byte{ + // 892 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xd1, 0x6e, 0xdb, 0x36, + 0x14, 0xad, 0xed, 0xc4, 0xb6, 0xae, 0xec, 0xc4, 0x65, 0x33, 0x40, 0x33, 0x86, 0xad, 0x33, 0xf6, + 0x10, 0x0c, 0x9b, 0xba, 0xc8, 0x69, 0x50, 0x64, 0xc3, 0x00, 0xa7, 0x75, 0xd1, 0x6c, 0x99, 0x07, + 0x28, 0xce, 0xf6, 0x68, 0xd0, 0x12, 0x6b, 0x0b, 0x91, 0x44, 0x41, 0x62, 0x1c, 0xf8, 0x93, 0xf6, + 0x25, 0x7b, 0xdc, 0xd3, 0xbe, 0x64, 0x3f, 0x30, 0x90, 0x94, 0x64, 0xa6, 0xad, 0x0b, 0x5a, 0x7d, + 0xb3, 0xa4, 0x73, 0xae, 0xe4, 0x7b, 0xcf, 0xb9, 0x87, 0xd0, 0xcd, 0x48, 0xba, 0x0a, 0x3c, 0x62, + 0x27, 0x29, 0x65, 0x14, 0xd5, 0x57, 0x27, 0xfd, 0x2f, 0x17, 0x94, 0x2e, 0x42, 0xf2, 0x4c, 0xdc, + 0x99, 0xdf, 0xbd, 0x7d, 0x76, 0x9f, 0xe2, 0x24, 0x21, 0x69, 0x26, 0x31, 0x7d, 0x33, 0xa2, 0x3e, + 0x09, 0xe5, 0xc5, 0xe0, 0xef, 0x3a, 0x18, 0x13, 0x1c, 0x91, 0x2c, 0xc1, 0x1e, 0x41, 0x3f, 0xc0, + 0x5e, 0x8c, 0x23, 0x62, 0xd5, 0x9e, 0xd6, 0x8e, 0x4d, 0xe7, 0x0b, 0x5b, 0x56, 0xb2, 0x8b, 0x4a, + 0xf6, 0x35, 0x4b, 0x83, 0x78, 0xf1, 0x07, 0x0e, 0xef, 0x88, 0x2b, 0x90, 0xe8, 0x0c, 0x5a, 0x1e, + 0x8d, 0x22, 0x12, 0x33, 0xab, 0xae, 0x41, 0x2a, 0xc0, 0xe8, 0x14, 0x9a, 0xf4, 0x3e, 0x26, 0x69, + 0x66, 0x35, 0x34, 0x68, 0x39, 0x16, 0x39, 0xb0, 0xcf, 0xe8, 0x2d, 0x89, 0xad, 0x3d, 0x0d, 0x92, + 0x84, 0x72, 0x8e, 0xc7, 0x82, 0x88, 0x58, 0xfb, 0x3a, 0x1c, 0x01, 0xe5, 0x9c, 0x48, 0x70, 0x9a, + 0x3a, 0x1c, 0x01, 0x1d, 0xfc, 0xd3, 0x82, 0xd6, 0xb5, 0x1c, 0x46, 0x85, 0x3e, 0x9e, 0x83, 0x11, + 0x17, 0x63, 0xd0, 0xea, 0xe4, 0x06, 0x8e, 0x9e, 0x43, 0x3b, 0x22, 0x0c, 0xfb, 0x98, 0x61, 0xab, + 0xf1, 0xb4, 0x71, 0x6c, 0x3a, 0x9f, 0xdb, 0xab, 0x13, 0x3b, 0xff, 0x18, 0xfb, 0xb7, 0xfc, 0xd9, + 0x38, 0x66, 0xe9, 0xda, 0x2d, 0xa1, 0xfc, 0x4f, 0x26, 0x34, 0x65, 0x99, 0x5e, 0x33, 0x05, 0x14, + 0xbd, 0x80, 0xf6, 0xfc, 0x2e, 0x0b, 0x62, 0x92, 0x65, 0x5a, 0xfd, 0x2c, 0xd1, 0xe8, 0x27, 0x00, + 0x9f, 0x24, 0x38, 0x65, 0x42, 0x2b, 0x3a, 0x7d, 0x55, 0xf0, 0xbc, 0x3d, 0x5e, 0xe4, 0xcf, 0x67, + 0x11, 0xf5, 0x4f, 0xac, 0x96, 0x4e, 0x7b, 0x4a, 0xb8, 0xca, 0x75, 0xac, 0xf6, 0x2e, 0x5c, 0x47, + 0xe5, 0x0e, 0x2d, 0x63, 0x17, 0xee, 0x50, 0xb5, 0x06, 0x54, 0xb3, 0x86, 0x59, 0xc5, 0x1a, 0x9d, + 0x0a, 0xd6, 0xe8, 0x56, 0xb0, 0xc6, 0x81, 0xb6, 0x35, 0xb8, 0x6a, 0x52, 0xb2, 0x0a, 0xb2, 0x80, + 0xc6, 0xd6, 0xa1, 0x8e, 0x6a, 0x0a, 0x34, 0xfa, 0x19, 0xcc, 0x24, 0xc4, 0xec, 0x2d, 0x4d, 0xa3, + 0x59, 0xe0, 0x5b, 0x3d, 0x0d, 0xb2, 0x4a, 0xe8, 0xff, 0x08, 0xdd, 0x07, 0xf2, 0x47, 0x3d, 0x68, + 0xdc, 0x92, 0xb5, 0x30, 0xa6, 0xe1, 0xf2, 0x9f, 0xe8, 0x08, 0xf6, 0x57, 0x9c, 0x28, 0x5c, 0x67, + 0xb8, 0xf2, 0xe2, 0xbc, 0xfe, 0xa2, 0x36, 0xf8, 0xaf, 0x01, 0x9d, 0xdc, 0x44, 0xa3, 0x30, 0xc0, + 0x19, 0x9f, 0x68, 0xbe, 0x6e, 0xb5, 0x9c, 0x5d, 0x80, 0x3f, 0xc9, 0xdc, 0x0e, 0xec, 0x63, 0xfe, + 0x72, 0xad, 0x3d, 0x29, 0xa1, 0xe8, 0x6b, 0xd8, 0x63, 0xeb, 0x84, 0x08, 0x63, 0x1f, 0x38, 0x5d, + 0xbe, 0x0c, 0xc4, 0x1f, 0x98, 0xae, 0x13, 0xe2, 0x8a, 0x47, 0x8a, 0xc8, 0xda, 0x3b, 0x88, 0x4c, + 0x91, 0xb4, 0xb1, 0x8b, 0xa4, 0x2f, 0xca, 0x9c, 0x9a, 0x49, 0x91, 0xea, 0xec, 0x8e, 0x87, 0x94, + 0x8d, 0x58, 0x9b, 0x15, 0xc4, 0xda, 0xd2, 0xdf, 0xe3, 0xff, 0x1a, 0xd0, 0xbe, 0x8c, 0x33, 0x86, + 0x63, 0x8f, 0xa0, 0xef, 0xa0, 0x1e, 0xf8, 0x5a, 0xc3, 0xae, 0x07, 0xbe, 0xaa, 0x8f, 0x7a, 0x65, + 0x7d, 0x34, 0x76, 0xd3, 0xc7, 0x29, 0x34, 0x57, 0x89, 0xc7, 0xcd, 0xf1, 0x99, 0xce, 0x20, 0x25, + 0x96, 0x07, 0xd4, 0x92, 0x66, 0x4c, 0x6b, 0xf5, 0x0b, 0x24, 0x67, 0xf0, 0x08, 0xd8, 0x3a, 0xb9, + 0x9b, 0xcb, 0x98, 0x0d, 0x9d, 0x9c, 0xc1, 0x91, 0xdc, 0xf5, 0xe2, 0xa9, 0x47, 0x43, 0xad, 0x99, + 0x95, 0x68, 0xde, 0xc7, 0x15, 0x49, 0xc5, 0xba, 0xd0, 0x19, 0x5c, 0x01, 0x96, 0x6f, 0x0c, 0x68, + 0x1a, 0xb0, 0xf5, 0x56, 0x59, 0xab, 0xdf, 0x59, 0xa2, 0x79, 0x17, 0xef, 0x49, 0xb0, 0x58, 0x6e, + 0xd7, 0xb5, 0xca, 0xcb, 0xb1, 0xe8, 0x17, 0x78, 0x42, 0x62, 0x3c, 0x0f, 0xc9, 0x6c, 0x49, 0x70, + 0xc8, 0x96, 0x33, 0x6f, 0x49, 0xbc, 0x5b, 0xeb, 0x48, 0x94, 0xe8, 0xbf, 0x57, 0xe2, 0x82, 0xd2, + 0x50, 0x16, 0x78, 0x2c, 0x69, 0x6f, 0x04, 0xeb, 0x25, 0x27, 0x21, 0x07, 0x3a, 0x0f, 0x8a, 0xc8, + 0xc8, 0x38, 0xe4, 0xde, 0x55, 0x60, 0xae, 0xb9, 0x54, 0x38, 0xa7, 0xd0, 0x92, 0x97, 0xeb, 0x3c, + 0x2a, 0x3e, 0xf6, 0xce, 0x02, 0xca, 0x59, 0x41, 0x46, 0x43, 0xcc, 0x48, 0x9e, 0x15, 0x1f, 0x65, + 0xe5, 0x50, 0x74, 0x0c, 0xed, 0x90, 0x7a, 0x98, 0xf1, 0xa1, 0xc8, 0xb8, 0xe8, 0xf0, 0x6f, 0xbb, + 0xca, 0xef, 0xb9, 0xe5, 0x53, 0x74, 0xa6, 0x1c, 0x47, 0x0e, 0xc4, 0x71, 0xa4, 0xcf, 0x91, 0x85, + 0xa7, 0xb6, 0x9e, 0x47, 0xce, 0xc1, 0x08, 0xe9, 0x22, 0xf0, 0x66, 0x19, 0x61, 0x5a, 0x31, 0xb1, + 0x81, 0x6f, 0x96, 0x43, 0xaf, 0xc2, 0x72, 0x78, 0x5c, 0x2d, 0xc9, 0xd0, 0x4e, 0x49, 0xf6, 0xde, + 0x0a, 0x7c, 0xb2, 0xf3, 0x0a, 0xfc, 0xb4, 0x34, 0xfb, 0xab, 0x06, 0xa6, 0x2a, 0xb8, 0x61, 0x1e, + 0x12, 0x35, 0x11, 0x12, 0x5f, 0xbd, 0x23, 0x34, 0xf5, 0xb7, 0x12, 0x1b, 0x67, 0x60, 0x2c, 0x09, + 0x4e, 0xd9, 0x9c, 0xe0, 0xe2, 0xc0, 0x6f, 0xe5, 0x4c, 0x79, 0x53, 0xd5, 0xea, 0x06, 0x3a, 0xf8, + 0x1e, 0x0e, 0xdf, 0x29, 0x88, 0x4c, 0x68, 0xdd, 0x4c, 0x7e, 0x9d, 0xfc, 0xfe, 0xe7, 0xa4, 0xf7, + 0x08, 0x75, 0xc1, 0x78, 0x33, 0x1e, 0xb9, 0xd3, 0x8b, 0xf1, 0x68, 0xda, 0xab, 0x0d, 0x5e, 0xc3, + 0xd1, 0x87, 0x2a, 0x22, 0x1b, 0x1a, 0x8c, 0x85, 0x5b, 0xf7, 0xb1, 0xea, 0x51, 0x0e, 0xfc, 0xf6, + 0x1b, 0x30, 0xca, 0xe0, 0xe3, 0x2f, 0x7c, 0x35, 0x7e, 0x3d, 0xba, 0xb9, 0x9a, 0xf6, 0x1e, 0x21, + 0x80, 0xe6, 0xcb, 0xab, 0xe7, 0xd7, 0x97, 0xaf, 0x7a, 0xb5, 0x79, 0x53, 0x14, 0x18, 0xfe, 0x1f, + 0x00, 0x00, 0xff, 0xff, 0xc0, 0x18, 0xe5, 0x5a, 0x4c, 0x0d, 0x00, 0x00, +} diff --git a/common/api/v1/service.proto b/common/api/v1/service.proto new file mode 100644 index 000000000..fabecede2 --- /dev/null +++ b/common/api/v1/service.proto @@ -0,0 +1,97 @@ +syntax = "proto3"; + +package v1; + +import "google/protobuf/wrappers.proto"; +import "model.proto"; + +message Namespace { + google.protobuf.StringValue name = 1; + google.protobuf.StringValue comment = 2; + google.protobuf.StringValue owners = 3; + google.protobuf.StringValue token = 4; + google.protobuf.StringValue ctime = 5; + google.protobuf.StringValue mtime = 6; +} + +message Service { + google.protobuf.StringValue name = 1; + google.protobuf.StringValue namespace = 2; + + map metadata = 3; + + google.protobuf.StringValue ports = 4; + google.protobuf.StringValue business = 5; + google.protobuf.StringValue department = 6; + google.protobuf.StringValue cmdb_mod1 = 7 [json_name="cmdb_mod1"]; + google.protobuf.StringValue cmdb_mod2 = 8 [json_name="cmdb_mod2"]; + google.protobuf.StringValue cmdb_mod3 = 9 [json_name="cmdb_mod3"]; + google.protobuf.StringValue comment = 10; + google.protobuf.StringValue owners = 11; + google.protobuf.StringValue token = 12; + + google.protobuf.StringValue ctime = 13; + google.protobuf.StringValue mtime = 14; + google.protobuf.StringValue revision = 15; + google.protobuf.StringValue platform_id = 16 [json_name="platform_id"]; +} + +enum AliasType { + DEFAULT = 0; + CL5SID = 1; +} + +message ServiceAlias { + google.protobuf.StringValue service = 1; + google.protobuf.StringValue namespace = 2; + google.protobuf.StringValue alias = 3; + AliasType type = 4; + google.protobuf.StringValue owners = 8; + google.protobuf.StringValue comment = 9; + google.protobuf.StringValue service_token = 5 [json_name="service_token"]; + + google.protobuf.StringValue ctime = 6; + google.protobuf.StringValue mtime = 7; +} + +message Instance { + google.protobuf.StringValue id = 1; + google.protobuf.StringValue service = 2; + google.protobuf.StringValue namespace = 3; + google.protobuf.StringValue vpc_id = 21 [json_name="vpc_id"]; + google.protobuf.StringValue host = 4; + google.protobuf.UInt32Value port = 5; + google.protobuf.StringValue protocol = 6; + google.protobuf.StringValue version = 7; + google.protobuf.UInt32Value priority = 8; + google.protobuf.UInt32Value weight = 9; + google.protobuf.BoolValue enable_health_check = 20; + HealthCheck health_check = 10; + google.protobuf.BoolValue healthy = 11; + google.protobuf.BoolValue isolate = 12; + Location location = 13; + + map metadata = 14; + google.protobuf.StringValue logic_set = 15 [json_name="logic_set"]; + + google.protobuf.StringValue ctime = 16; + google.protobuf.StringValue mtime = 17; + google.protobuf.StringValue revision = 18; + + google.protobuf.StringValue service_token = 19 [json_name="service_token"]; +} + +message HealthCheck { + enum HealthCheckType { + UNKNOWN = 0; + HEARTBEAT = 1; + } + + HealthCheckType type = 1; + + HeartbeatHealthCheck heartbeat = 2; +} + +message HeartbeatHealthCheck { + google.protobuf.UInt32Value ttl = 1; +} diff --git a/common/ckv/ckv_test.go b/common/ckv/ckv_test.go new file mode 100644 index 000000000..2b3463afd --- /dev/null +++ b/common/ckv/ckv_test.go @@ -0,0 +1,114 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 ckv + +import ( + "fmt" + "math/rand" + "os" + "runtime" + "sync" + "sync/atomic" + "testing" + "time" +) + +// 压测并发无锁加操作 +func BenchmarkAdd(t *testing.B) { + var a uint32 + + //共启动10000 * cpu数量个协程 + t.SetParallelism(10000) + t.RunParallel(func(pb *testing.PB) { + for pb.Next() { + a++ + } + }) +} + +// 压测并发原子加操作 +func BenchmarkAtomicAdd(t *testing.B) { + var a uint32 + + //共启动10000 * cpu数量个协程 + t.SetParallelism(10000) + t.RunParallel(func(pb *testing.PB) { + for pb.Next() { + b := atomic.AddUint32(&a, 1) + _ = b % 500 + } + }) +} + +// 压测并发有锁加操作 +func BenchmarkMutexAdd(t *testing.B) { + var a uint32 + var mu sync.Mutex + + //共启动10000 * cpu数量个协程 + t.SetParallelism(10000) + t.RunParallel(func(pb *testing.PB) { + for pb.Next() { + mu.Lock() + a++ + mu.Unlock() + } + }) +} + +// 压测并发生成随机数操作 +func BenchmarkRand(t *testing.B) { + rand.Seed(time.Now().Unix()) + + //共启动10000 * cpu数量个协程 + t.SetParallelism(10000) + t.RunParallel(func(pb *testing.PB) { + for pb.Next() { + _ = rand.Intn(500) + } + }) +} + +// 压测直接加操作 +func BenchmarkTestAdd(t *testing.B) { + var a = ^uint32(0) + t.Log(a) + a++ + t.Log(a) +} + +// 测试os.Exit() +func TestExit(t *testing.T) { + go func() { + os.Exit(1) + }() + + time.Sleep(time.Second) + fmt.Println("a") +} + +// 测试runtime.Goexit() +func TestGoExit(t *testing.T) { + go func() { + defer fmt.Println("aaa") + runtime.Goexit() + }() + + time.Sleep(time.Second) + fmt.Println("a") +} diff --git a/common/ckv/ckvpool.go b/common/ckv/ckvpool.go new file mode 100644 index 000000000..6aa3dfaad --- /dev/null +++ b/common/ckv/ckvpool.go @@ -0,0 +1,357 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 ckv + +import ( + "errors" + "fmt" + "math/rand" + "strconv" + "sync" + "sync/atomic" + "time" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" +) + +/** +* 健康检查功能使用ckv+缓存实例健康状态 +* 实现一个无锁连接池供健康检查功能使用 +* +* 层次结构:连接池 -> ckv+节点 -> 连接 +* 每个ckv+节点建立n个(n:可配置)连接 +* 每个连接绑定一个chan,chan用于分发请求到此连接 +* 负载均衡方式:轮询 +* +* 当ckv+节点发生变动,连接池支持动态增删,业务无感知 + */ + +const ( + Get = 0 + Set = 1 + Del = 2 +) + +/** + * @brief ckv任务请求结构体 + */ +type Task struct { + taskType int + id string + status int + beatTime int64 + respCh chan *Resp +} + +/** + * @brief ckv任务结果 + */ +type Resp struct { + Value string + Err error +} + +/** + * @brief ckv连接池元数据 + */ +type MetaData struct { + insConnNum int + kvPasswd string + localHost string +} + +/** + * @brief ckv节点结构体 + */ +type Node struct { + // 节点在连接池中的序号 + index int + addr string + conns []*Conn + stopCh chan bool + changeCh chan bool +} + +/** + * @brief ckv连接池结构体 + */ +type Pool struct { + mu sync.Mutex + meta *MetaData + chs []chan *Task + nodes []*Node + connSize uint32 + index uint32 +} + +/** + * @brief 初始化一个ckv节点实例 + */ +func newNode(index, connNum int, kvPasswd string, ins *model.Instance) *Node { + node := &Node{ + index: index, + addr: ins.Host() + ":" + strconv.Itoa(int(ins.Port())), + stopCh: make(chan bool), + changeCh: make(chan bool), + } + log.Infof("[ckv] instance:%s connect, conn num:%d", node.addr, connNum) + + // 计算连接的序号,即连接要与序号为index的chan绑定 + connIndexStart := index * connNum + connIndexEnd := (index + 1) * connNum + for i := connIndexStart; i < connIndexEnd; i++ { + conn, err := newConn(i, node.addr, kvPasswd) + if err != nil { + log.Errorf("[ckv] instance:%s connect failed:%s", node.addr, err) + return nil + } + node.conns = append(node.conns, conn) + } + return node +} + +/** + * @brief 初始化一个ckv连接池实例 + */ +func NewPool(insConnNum int, kvPasswd, localHost string, kvInstances []*model.Instance) (*Pool, error) { + kvPool := &Pool{ + meta: &MetaData{ + insConnNum: insConnNum, + kvPasswd: kvPasswd, + localHost: localHost, + }, + connSize: uint32(len(kvInstances) * insConnNum), + } + err := kvPool.connect(kvInstances) + if err != nil { + log.Errorf("[kv] connect kv err:%s", err) + return nil, err + } + + rand.Seed(time.Now().Unix()) + // 从一个随机位置开始,防止所有server都从一个ckv开始 + kvPool.index = uint32(rand.Intn(int(kvPool.connSize))) + return kvPool, nil +} + +/** + * @brief 启动ckv连接池工作 + */ +func (p *Pool) Start() { + p.mu.Lock() + for _, node := range p.nodes { + for _, conn := range node.conns { + go p.worker(conn, node.changeCh, node.stopCh) + } + } + p.mu.Unlock() + log.Infof("[ckv] ckv pool start") +} + +/** + * @brief 更新ckv连接池中的节点 + * 重新建立ckv连接 + * 对业务无影响 + */ +func (p *Pool) Update(newKvInstances []*model.Instance) error { + p.mu.Lock() + defer p.mu.Unlock() + + change := len(newKvInstances) - len(p.nodes) + log.Infof("[ckv] update, old ins num:%d, new ins num:%d, change:%d", len(p.nodes), len(newKvInstances), change) + newConnSize := len(newKvInstances) * p.meta.insConnNum + oldConnSize := p.connSize + log.Infof("[ckv] update, old conn num:%d, new conn num:%d", oldConnSize, newConnSize) + + if change > 0 { + // ckv+节点数如果增多,则新增对应数量的chan + for i := 0; i < change*p.meta.insConnNum; i++ { + p.chs = append(p.chs, make(chan *Task, 100)) + } + } else if change < 0 { + // ckv+节点数如果减少,修改最大连接数(chan数),防止新的请求进入需要关闭的连接(chan) + // 等待chan中的积留请求被处理完再关闭 + p.connSize = uint32(newConnSize) + } + + var newNodes []*Node + for index, ins := range newKvInstances { + // 建立新连接 + node := newNode(index, p.meta.insConnNum, p.meta.kvPasswd, ins) + if node == nil { + return errors.New("create ckv node failed") + } + newNodes = append(newNodes, node) + + // 关闭原先的连接,绑定chan到新连接 + if index < len(p.nodes) { + close(p.nodes[index].changeCh) + } + for _, conn := range node.conns { + go p.worker(conn, node.changeCh, node.stopCh) + } + } + + if change > 0 { + // 修改最大连接数到正确状态,启用新增的chan + p.connSize = uint32(newConnSize) + } else if change < 0 { + // 如果节点数减少,关闭不需要的连接和chan + for index := len(newKvInstances); index < len(p.nodes); index++ { + close(p.nodes[index].stopCh) + } + time.Sleep(10 * time.Millisecond) + for index := p.connSize; index < oldConnSize; index++ { + close(p.chs[index]) + } + p.chs = p.chs[:p.connSize] + } + p.nodes = newNodes + log.Infof("[ckv] update success, node num:%d, conn num:%d, chan num:%d", len(p.nodes), len(p.chs), p.connSize) + + return nil +} + +/** + * @brief 建立连接 + */ +func (p *Pool) connect(kvInstances []*model.Instance) error { + p.mu.Lock() + defer p.mu.Unlock() + for index, ins := range kvInstances { + node := newNode(index, p.meta.insConnNum, p.meta.kvPasswd, ins) + if node == nil { + return errors.New("create ckv node failed") + } + + for i := 0; i < len(node.conns); i++ { + p.chs = append(p.chs, make(chan *Task, 100)) + } + p.nodes = append(p.nodes, node) + } + return nil +} + +/** + * @brief 使用连接池,向ckv发起Get请求 + */ +func (p *Pool) Get(id string, ch chan *Resp) { // nolint + task := &Task{ + taskType: Get, + id: id, + respCh: ch, + } + + index := atomic.AddUint32(&p.index, 1) % p.connSize + p.chs[index] <- task +} + +/** + * @brief 使用连接池,向ckv发起Set请求 + */ +func (p *Pool) Set(id string, status int, beatTime int64, ch chan *Resp) { // nolint + task := &Task{ + taskType: Set, + id: id, + status: status, + beatTime: beatTime, + respCh: ch, + } + + index := atomic.AddUint32(&p.index, 1) % p.connSize + p.chs[index] <- task +} + +/** + * @brief 使用连接池,向ckv发起Del请求 + */ +func (p *Pool) Del(id string, ch chan *Resp) { // nolint + task := &Task{ + taskType: Del, + id: id, + respCh: ch, + } + + index := atomic.AddUint32(&p.index, 1) % p.connSize + p.chs[index] <- task +} + +/** + * @brief 接收任务worker + */ +func (p *Pool) worker(conn *Conn, changeCh, stopCh chan bool) { + ch := p.chs[conn.index] + for { + select { + case task := <-ch: + p.handleTask(conn, task) + case <-stopCh: + // 发现ckv+节点变少,不再需要此chan + // 处理滞留请求,关闭连接 + for task := range ch { + p.handleTask(conn, task) + } + conn.conn.Close() + log.Infof("[ckv] instance:%s chan:%d close", conn.addr, conn.index) + return + case <-changeCh: + // 发现ckv+节点变动,更新chan绑定的连接 + conn.conn.Close() + log.Infof("[ckv] instance:%s chan:%d change", conn.addr, conn.index) + return + } + } +} + +/** + * @brief 任务处理函数 + */ +func (p *Pool) handleTask(conn *Conn, task *Task) { + if task == nil { + log.Errorf("chan:%d receive nil task", conn.index) + return + } + + var resp Resp + switch task.taskType { + case Get: + value, err := conn.Get(task.id) + if err != nil { + resp.Err = err + } else { + resp.Value = value + } + task.respCh <- &resp + case Set: + value := fmt.Sprintf("%d:%d:%s", task.status, task.beatTime, p.meta.localHost) + err := conn.Set(task.id, value) + if err != nil { + resp.Err = err + } + task.respCh <- &resp + case Del: + err := conn.Del(task.id) + if err != nil { + resp.Err = err + } + task.respCh <- &resp + default: + log.Errorf("[ckv] set key:%s type:%d wrong", task.id, task.taskType) + } +} diff --git a/common/ckv/conn.go b/common/ckv/conn.go new file mode 100644 index 000000000..1cd244d21 --- /dev/null +++ b/common/ckv/conn.go @@ -0,0 +1,74 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 ckv + +import ( + "github.com/gomodule/redigo/redis" +) + +/** + * @brief ckv连接结构体 + */ +type Conn struct { + // conn在连接池的序号 + index int + addr string + conn redis.Conn +} + +/** + * @brief 新建ckv连接 + */ +func newConn(index int, addr, passwd string) (*Conn, error) { + c, err := redis.Dial("tcp", addr, redis.DialPassword(passwd)) + if err != nil { + return nil, err + } + + return &Conn{index, addr, c}, nil +} + +/** + * @brief 返回ckv地址 + */ +func (c *Conn) Addr() string { + return c.addr +} + +/** + * @brief Get请求 + */ +func (c *Conn) Get(key string) (string, error) { + return redis.String(c.conn.Do("GET", key)) +} + +/** + * @brief Set请求 + */ +func (c *Conn) Set(key, value string) (err error) { + _, err = c.conn.Do("SET", key, value) + return +} + +/** + * @brief Del请求 + */ +func (c *Conn) Del(key string) (err error) { + _, err = c.conn.Do("DEL", key) + return +} diff --git a/common/connlimit/api.go b/common/connlimit/api.go new file mode 100644 index 000000000..45fc00c07 --- /dev/null +++ b/common/connlimit/api.go @@ -0,0 +1,65 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 connlimit + +import ( + "errors" + "github.com/polarismesh/polaris-server/common/log" + "sync" +) + +var ( + // 全局对象索引 + connLimitObj = make(map[string]*Listener) + // 全局对象锁 + connLimitMu = new(sync.Mutex) +) + +// 获取当前的listener +func GetLimitListener(protocol string) *Listener { + connLimitMu.Lock() + defer connLimitMu.Unlock() + obj, ok := connLimitObj[protocol] + if !ok { + return nil + } + + return obj +} + +// 设置当前的listener +// 注意:Listener.protocol不能重复 +func SetLimitListener(lis *Listener) error { + connLimitMu.Lock() + defer connLimitMu.Unlock() + + if _, ok := connLimitObj[lis.protocol]; ok { + log.Errorf("[ConnLimit] protocol(%s) is existed", lis.protocol) + return errors.New("protocol is existed") + } + + connLimitObj[lis.protocol] = lis + return nil +} + +// 清理对应协议的链接计数 +func RemoteLimitListener(protocol string) { + connLimitMu.Lock() + defer connLimitMu.Unlock() + delete(connLimitObj, protocol) +} diff --git a/common/connlimit/config.go b/common/connlimit/config.go new file mode 100644 index 000000000..18241fc13 --- /dev/null +++ b/common/connlimit/config.go @@ -0,0 +1,74 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 connlimit + +import ( + "github.com/polarismesh/polaris-server/common/log" + "github.com/mitchellh/mapstructure" + "time" +) + +// 连接限制配置 +type Config struct { + // 开启连接限制 + OpenConnLimit bool `mapstructure:"openConnLimit"` + + // 单个host最大的连接数,必须 > 1 + MaxConnPerHost int `mapstructure:"maxConnPerHost"` + + // 当前协议监听端口的最大连接数 + // 兼容老版本,> 1,则开启listen的全局限制;< 1则不开启listen的全局限制 + MaxConnLimit int `mapstructure:"maxConnLimit"` + + // 白名单,不进行host连接数限制 + WhiteList string `mapstructure:"whiteList"` + + // 读超时 + ReadTimeout time.Duration `mapstructure:"readTimeout"` + + // 回收连接统计数据的周期 + PurgeCounterInterval time.Duration `mapstructure:"purgeCounterInterval"` + + // 回收连接的最大超时时间 + PurgeCounterExpire time.Duration `mapstructure:"purgeCounterExpire"` +} + +// 解析配置 +func ParseConnLimitConfig(raw map[interface{}]interface{}) (*Config, error) { + if raw == nil { + return nil, nil + } + + var config Config + decodeConfig := &mapstructure.DecoderConfig{ + DecodeHook: mapstructure.StringToTimeDurationHookFunc(), + Result: &config, + } + decoder, err := mapstructure.NewDecoder(decodeConfig) + if err != nil { + log.Errorf("conn limit new decoder err: %s", err.Error()) + return nil, err + } + + if err := decoder.Decode(raw); err != nil { + log.Errorf("parse conn limit config(%+v) err: %s", raw, err.Error()) + return nil, err + } + + return &config, nil +} diff --git a/common/connlimit/config_test.go b/common/connlimit/config_test.go new file mode 100644 index 000000000..984218ca3 --- /dev/null +++ b/common/connlimit/config_test.go @@ -0,0 +1,44 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 connlimit + +import ( + . "github.com/smartystreets/goconvey/convey" + "testing" + "time" +) + +// 可以正常解析配置测试 +func TestParseConnLimitConfig(t *testing.T) { + Convey("可以正常解析配置", t, func() { + options := map[interface{}]interface{}{ + "openConnLimit": true, + "maxConnPerHost": 16, + "maxConnLimit": 128, + "whiteList": "127.0.0.1,127.0.0.2,127.0.0.3", + "readTimeout": "120s", + } + config, err := ParseConnLimitConfig(options) + So(err, ShouldBeNil) + So(config.OpenConnLimit, ShouldBeTrue) + So(config.MaxConnPerHost, ShouldEqual, 16) + So(config.MaxConnLimit, ShouldEqual, 128) + So(config.WhiteList, ShouldEqual, "127.0.0.1,127.0.0.2,127.0.0.3") + So(config.ReadTimeout, ShouldEqual, time.Second*120) + }) +} diff --git a/common/connlimit/conn.go b/common/connlimit/conn.go new file mode 100644 index 000000000..8f6dc6f50 --- /dev/null +++ b/common/connlimit/conn.go @@ -0,0 +1,83 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 connlimit + +import ( + "github.com/polarismesh/polaris-server/common/log" + "net" + "sync" + "time" +) + +// 包装net.Conn +// 目的:拦截Close操作,用于listener计数的Release以及activeConns的删除 +type Conn struct { + net.Conn + releaseOnce sync.Once + closed bool + host string + address string + lastAccess time.Time + listener *Listener +} + +// 包装net.Conn.Close, 用于连接计数 +func (c *Conn) Close() error { + if c.closed { + return nil + } + + err := c.Conn.Close() + c.releaseOnce.Do(func() { + // 调用监听的listener,释放计数以及activeConns + // 保证只执行一次 + c.closed = true + c.listener.release(c) + }) + return err +} + +// 封装net.Conn Read方法,处理readTimeout的场景 +func (c *Conn) Read(b []byte) (int, error) { + if c.listener.readTimeout <= 0 { + return c.Conn.Read(b) + } + + c.lastAccess = time.Now() + if err := c.Conn.SetReadDeadline(time.Now().Add(c.listener.readTimeout)); err != nil { + log.Errorf("[connLimit][%s] connection(%s) set read deadline err: %s", + c.listener.protocol, c.address, err.Error()) + } + n, err := c.Conn.Read(b) + if err == nil { + return n, nil + } + + if e, ok := err.(net.Error); ok && e.Timeout() { + if time.Now().Sub(c.lastAccess) >= c.listener.readTimeout { + log.Errorf("[connLimit][%s] read timeout(%v): %s, connection(%s) will be closed by server", + c.listener.protocol, c.listener.readTimeout, err.Error(), c.address) + } + } + return n, err +} + +// 判断conn是否还有效 +func (c *Conn) isValid() bool { + return c.closed == false +} diff --git a/common/connlimit/listener.go b/common/connlimit/listener.go new file mode 100644 index 000000000..ba68713c0 --- /dev/null +++ b/common/connlimit/listener.go @@ -0,0 +1,413 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 connlimit + +import ( + "context" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/pkg/errors" + "net" + "strings" + "sync" + "sync/atomic" + "time" +) + +const ( + // 最少连接数 + minHostConnLimit = 1 +) + +// 计数器 +// limit connections for every ip +type counter struct { + size int32 + actives map[string]*Conn // 活跃的连接 + mu sync.Mutex + lastAccess int64 +} + +// 新增计数器 +func newCounter() *counter { + return &counter{ + size: 1, + actives: make(map[string]*Conn), + mu: sync.Mutex{}, + lastAccess: time.Now().Unix(), + } +} + +/** + * @brief 包装 net.Listener + */ +type Listener struct { + net.Listener + protocol string // 协议,主要用以日志记录与全局对象索引 + conns *sync.Map // 保存 ip -> counter + maxConnPerHost int32 // 每个IP最多的连接数 + maxConnLimit int32 // 当前listener最大的连接数限制 + whiteList map[string]bool // 白名单列表 + readTimeout time.Duration // 读超时 + connCount int32 // 当前listener保持连接的个数 + purgeCounterInterval time.Duration // 回收过期counter的 + purgeCounterExpire int64 // counter过期的秒数 + purgeCancel context.CancelFunc // 停止purge协程的ctx +} + +// returns a new listener +// @param l 网络连接 +// @param protocol 当前listener的七层协议,比如http,grpc等 +func NewListener(l net.Listener, protocol string, config *Config) (net.Listener, error) { + // 参数校验 + if protocol == "" { + log.Errorf("[ConnLimit] listener is missing protocol") + return nil, errors.New("listener is missing protocol") + } + if config == nil || config.OpenConnLimit == false { + log.Infof("[ConnLimit][%s] apiserver is not open conn limit", protocol) + return l, nil + } + if config.PurgeCounterInterval == 0 || config.PurgeCounterExpire == 0 { + log.Errorf("[ConnLimit][%s] purge params invalid", protocol) + return nil, errors.New("purge params invalid") + } + + hostConnLimit := int32(config.MaxConnPerHost) + lisConnLimit := int32(config.MaxConnLimit) + // 参数校验, perHost阈值不能小于1 + if hostConnLimit < minHostConnLimit { + return nil, fmt.Errorf("invalid conn limit: %d, can't be smaller than %d", hostConnLimit, minHostConnLimit) + } + + whiteList := make(map[string]bool) + whites := strings.Split(config.WhiteList, ",") + for _, entry := range whites { + if entry == "" { + continue + } + whiteList[entry] = true + } + log.Infof("[ConnLimit] host conn limit white list: %+v", whites) + + lis := &Listener{ + Listener: l, + protocol: protocol, + conns: new(sync.Map), + maxConnPerHost: hostConnLimit, + maxConnLimit: lisConnLimit, + whiteList: whiteList, + readTimeout: config.ReadTimeout, + purgeCounterInterval: config.PurgeCounterInterval, + purgeCounterExpire: int64(config.PurgeCounterExpire / time.Second), + } + // 把listener放到全局变量中,方便外部访问 + if err := SetLimitListener(lis); err != nil { + return nil, err + } + // 启动回收协程,定时回收过期counter + ctx, cancel := context.WithCancel(context.Background()) + lis.purgeExpireCounter(ctx) + lis.purgeCancel = cancel + return lis, nil +} + +// 接收连接 +func (l *Listener) Accept() (net.Conn, error) { + c, err := l.Listener.Accept() + if err != nil { + return nil, err + } + return l.accept(c), nil +} + +// 关闭连接 +func (l *Listener) Close() error { + log.Infof("[Listener][%s] close the listen fd", l.protocol) + l.purgeCancel() + return l.Listener.Close() +} + +// 查看对应ip的连接数 +func (l *Listener) GetHostConnCount(host string) int32 { + var connNum int32 + if value, ok := l.conns.Load(host); ok { + c := value.(*counter) + c.mu.Lock() + connNum = c.size + c.mu.Unlock() + } + + return connNum +} + +// 遍历当前持有连接的host +func (l *Listener) Range(fn func(host string, count int32) bool) { + l.conns.Range(func(key, value interface{}) bool { + host := key.(string) + return fn(host, l.GetHostConnCount(host)) + }) +} + +// 查看当前监听server保持的连接数 +func (l *Listener) GetListenerConnCount() int32 { + return atomic.LoadInt32(&l.connCount) +} + +// 获取当前缓存的host的个数 +func (l *Listener) GetDistinctHostCount() int32 { + var count int32 + l.conns.Range(func(key, value interface{}) bool { + count++ + return true + }) + return count +} + +// 获取指定host的活跃的连接 +func (l *Listener) GetHostActiveConns(host string) map[string]*Conn { + obj, ok := l.conns.Load(host) + if !ok { + return nil + } + + ct := obj.(*counter) + ct.mu.Lock() + out := make(map[string]*Conn, len(ct.actives)) + for address, conn := range ct.actives { + out[address] = conn + } + ct.mu.Unlock() + + return out +} + +// 获取客户端连接的stat信息 +func (l *Listener) GetHostConnStats(host string) []*HostConnStat { + loadStat := func(h string, ct *counter) *HostConnStat { + ct.mu.Lock() + stat := &HostConnStat{ + Host: h, + Amount: ct.size, + LastAccess: time.Unix(ct.lastAccess, 0), + Actives: make([]string, 0, len(ct.actives)), + } + for client := range ct.actives { + stat.Actives = append(stat.Actives, client) + } + ct.mu.Unlock() + return stat + } + + var out []*HostConnStat + // 只获取一个,推荐每次只获取一个 + if host != "" { + if obj, ok := l.conns.Load(host); ok { + out = append(out, loadStat(host, obj.(*counter))) + return out + } + return nil + } + + // 全量扫描,比较耗时 + l.conns.Range(func(key, value interface{}) bool { + out = append(out, loadStat(key.(string), value.(*counter))) + return true + }) + return out +} + +// 获取指定host和port的连接 +func (l *Listener) GetHostConnection(host string, port int) *Conn { + obj, ok := l.conns.Load(host) + if !ok { + return nil + } + + ct := obj.(*counter) + target := fmt.Sprintf("%s:%d", host, port) + ct.mu.Lock() + defer ct.mu.Unlock() + for address, conn := range ct.actives { + if address == target { + return conn + } + } + + return nil +} + +// 封装一层,让关键函数acquire的更具备可测试性(不需要mock net.Conn) +func (l *Listener) accept(conn net.Conn) net.Conn { + address := conn.RemoteAddr().String() + // addr解析失败, 不做限制 + ipPort := strings.Split(address, ":") + if len(ipPort) != 2 || ipPort[0] == "" { + return conn + } + return l.acquire(conn, address, ipPort[0]) +} + +// 包裹一下conn +// 增加ip的连接计数,如果发现ip连接达到上限,则关闭 +// conn 原始连接 +// address 客户端地址 +// host 处理后的客户端IP地址 +func (l *Listener) acquire(conn net.Conn, address string, host string) *Conn { + limiterConn := &Conn{ + Conn: conn, + closed: false, + address: address, + host: host, + listener: l, + } + + log.Debugf("acquire conn for: %s", address) + if ok := l.incConnCount(); !ok { + log.Errorf("[ConnLimit][%s] host(%s) reach apiserver conn limit(%d)", l.protocol, host, l.maxConnLimit) + limiterConn.closed = true + _ = limiterConn.Conn.Close() + return limiterConn + } + + value, ok := l.conns.Load(host) + // 首次访问, 置1返回ok + if !ok { + ctr := newCounter() + ctr.actives[address] = limiterConn + l.conns.Store(host, ctr) + return limiterConn + } + + c := value.(*counter) + c.mu.Lock() // release是并发的,因此需要加锁 + // 如果连接数已经超过阈值, 则返回失败, 使用方要调用release减少计数 + // 如果在白名单中,则直接忽略host连接限制 + if c.size >= l.maxConnPerHost && !l.ignoreHostConnLimit(host) { + c.mu.Unlock() + l.descConnCount() // 前面已经增加了计数,因此这里失败,必须减少计数 + log.Errorf("[ConnLimit][%s] host(%s) reach host conn limit(%d)", l.protocol, host, l.maxConnPerHost) + limiterConn.closed = true + _ = limiterConn.Conn.Close() + return limiterConn + } + + // 单个IP的连接,还有冗余,则增加计数 + c.size++ + c.actives[address] = limiterConn + c.lastAccess = time.Now().Unix() + // map里面存储的是指针,可以不用store,这里直接对指针的内存操作 + //l.conns.Store(host, c) + c.mu.Unlock() + return limiterConn +} + +// 减少连接计数 +func (l *Listener) release(conn *Conn) { + log.Debugf("release conn for: %s", conn.host) + l.descConnCount() + + if value, ok := l.conns.Load(conn.host); ok { + c := value.(*counter) + c.mu.Lock() + c.size-- + // map里面存储的是指针,可以不用store,这里直接对指针的内存操作 + //l.conns.Store(host, c) + delete(c.actives, conn.address) + c.mu.Unlock() + } + +} + +// 增加监听server的连接计数 +// 这里使用了原子变量来增加计数,先判断是否超过最大限制 +// 如果超过了,则立即返回false,否则计数+1 +// 在计数+1的过程中,即使有Desc释放过程,也不影响 +func (l *Listener) incConnCount() bool { + if l.maxConnLimit <= 0 { + return true + } + if count := atomic.LoadInt32(&l.connCount); count >= l.maxConnLimit { + return false + } + + atomic.AddInt32(&l.connCount, 1) + return true +} + +// 释放监听server的连接计数 +func (l *Listener) descConnCount() { + if l.maxConnLimit <= 0 { + return + } + + atomic.AddInt32(&l.connCount, -1) +} + +// 判断host是否在白名单中 +// 如果host在白名单中,则忽略host连接限制 +func (l *Listener) ignoreHostConnLimit(host string) bool { + if l.whiteList == nil { + return false + } + if _, ok := l.whiteList[host]; !ok { + return false + } + + return true +} + +// 回收长时间没有访问的IP +// 定时扫描 +func (l *Listener) purgeExpireCounter(ctx context.Context) { + go func() { + ticker := time.NewTicker(l.purgeCounterInterval) + defer ticker.Stop() + log.Infof("[Listener][%s] start doing purge expire counter", l.protocol) + for { + select { + case <-ticker.C: + l.purgeExpireCounterHandler() + case <-ctx.Done(): + log.Infof("[Listener][%s] purge expire counter exit", l.protocol) + return + } + } + }() +} + +// 回收过期counter执行函数 +func (l *Listener) purgeExpireCounterHandler() { + start := time.Now() + scanCount := 0 + purgeCount := 0 + l.conns.Range(func(key, value interface{}) bool { + scanCount++ + ct := value.(*counter) + ct.mu.Lock() + if ct.size == 0 && time.Now().Unix()-ct.lastAccess > l.purgeCounterExpire { + // log.Infof("[Listener][%s] purge expire counter: %s", l.protocol, key.(string)) + l.conns.Delete(key) + purgeCount++ + } + ct.mu.Unlock() + return true + }) + log.Infof("[Listener][%s] purge expire counter total(%d), use time: %+v, scan total(%d), scan qps: %.2f", + l.protocol, purgeCount, time.Now().Sub(start), scanCount, float64(scanCount)/time.Now().Sub(start).Seconds()) +} diff --git a/common/connlimit/listener_test.go b/common/connlimit/listener_test.go new file mode 100644 index 000000000..9a3c241c4 --- /dev/null +++ b/common/connlimit/listener_test.go @@ -0,0 +1,448 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 connlimit + +import ( + "context" + "fmt" + "github.com/polarismesh/polaris-server/common/connlimit/mock_net" + "github.com/golang/mock/gomock" + . "github.com/smartystreets/goconvey/convey" + "math/rand" + "net" + "sync" + "sync/atomic" + "testing" + "time" +) + +// 模拟一下连接限制 +func TestConnLimit(t *testing.T) { + addr := "127.0.0.1:44444" + host := "127.0.0.1" + config := &Config{ + OpenConnLimit: true, + MaxConnPerHost: 5, + MaxConnLimit: 3, + PurgeCounterInterval: time.Hour, + PurgeCounterExpire: time.Minute, + } + connCount := 100 + lis, err := net.Listen("tcp", addr) + if err != nil { + t.Fatalf("%s", err) + } + + lis, err = NewListener(lis, "tcp", config) + if err != nil { + t.Fatalf("%s", err) + } + + if lis.(*Listener).GetHostConnCount(host) != 0 { + t.Fatalf("%s connNum should be 0 when no connections", host) + } + + // 启动Server + go func() { + for { + conn, _ := lis.Accept() + go func(c net.Conn) { + buf := make([]byte, 10) + if _, err := c.Read(buf); err != nil { + t.Logf("server read err: %s", err.Error()) + _ = c.Close() + return + } + t.Logf("server read data: %s", string(buf)) + time.Sleep(time.Millisecond * 200) + _ = c.Close() + }(conn) + } + }() + time.Sleep(1 * time.Second) + + var total int32 + for i := 0; i < connCount; i++ { + go func(index int) { + conn, err := net.Dial("tcp", addr) + atomic.AddInt32(&total, 1) + if err != nil { + t.Logf("client conn server error: %s", err.Error()) + return + } + buf := []byte("hello") + if _, err := conn.Write(buf); err != nil { + t.Logf("client write error: %s", err.Error()) + _ = conn.Close() + return + } + }(i) + } + + // 等待连接全部关闭 + //time.Sleep(5 * time.Second) + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + if atomic.LoadInt32(&total) != int32(connCount) { + t.Logf("connection is not finished") + continue + } + hostCnt := lis.(*Listener).GetHostConnCount(host) + lisCnt := lis.(*Listener).GetListenerConnCount() + if hostCnt == 0 && lisCnt == 0 { + t.Logf("pass") + return + } + + t.Logf("host conn count:%d: lis conn count:%d", hostCnt, lisCnt) + } + } +} + +// test readTimeout场景 +/*func TestConnLimiterReadTimeout(t *testing.T) { + lis, err := net.Listen("tcp", "127.0.0.1:55555") + if err != nil { + t.Fatalf("%s", err) + } + + cfg := &Config{ + OpenConnLimit: true, + MaxConnLimit: 16, + MaxConnPerHost: 8, + ReadTimeout: time.Millisecond * 500, + } + lis, err = NewListener(lis, "http", cfg) + if err != nil { + t.Fatalf("error: %s", err.Error()) + } + defer lis.Close() + handler := func(conn net.Conn) { + for { + reader := bufio.NewReader(conn) + buf := make([]byte, 12) + if _, err := io.ReadFull(reader, buf); err != nil { + t.Logf("read full return: %s", err.Error()) + if e, ok := err.(net.Error); ok && e.Timeout() { + t.Logf("pass") + } else { + t.Fatalf("error") + } + return + } + t.Logf("%s", string(buf)) + go func() {conn.Close()}() + } + } + go func() { + conn, err := lis.Accept() + if err != nil { + t.Fatalf("error: %s", err.Error()) + } + go handler(conn) + }() + + conn, err := net.Dial("tcp", "127.0.0.1:55555") + if err != nil { + t.Fatalf("error: %s", err.Error()) + } + //time.Sleep(time.Second * 1) + _, err = conn.Write([]byte("hello world!")) + if err != nil { + t.Logf("%s", err.Error()) + } + time.Sleep(time.Second) + conn.Close() + time.Sleep(time.Second) +}*/ + +// test invalid conn limit param +func TestInvalidParams(t *testing.T) { + lis, err := net.Listen("tcp", "127.0.0.1:44445") + if err != nil { + t.Fatalf("%s", err) + } + defer func() { _ = lis.Close() }() + config := &Config{ + OpenConnLimit: true, + MaxConnPerHost: 0, + MaxConnLimit: 10, + PurgeCounterInterval: time.Hour, + PurgeCounterExpire: time.Minute, + } + + t.Run("host连接限制小于1", func(t *testing.T) { + if _, newErr := NewListener(lis, "tcp", config); newErr == nil { + t.Fatalf("must be wrong for invalidMaxConnNum") + } + }) + t.Run("protocol为空", func(t *testing.T) { + config.MaxConnPerHost = 10 + if _, err := NewListener(lis, "", config); err == nil { + t.Fatalf("error") + } else { + t.Logf("%s", err.Error()) + } + }) + t.Run("purge参数错误", func(t *testing.T) { + config.PurgeCounterInterval = 0 + if _, err := NewListener(lis, "tcp1", config); err == nil { + t.Fatalf("error") + } + config.PurgeCounterInterval = time.Hour + config.PurgeCounterExpire = 0 + if _, err := NewListener(lis, "tcp2", config); err == nil { + t.Fatalf("error") + } else { + t.Logf("%s", err.Error()) + } + }) +} + +// 测试accept +func TestListener_Accept(t *testing.T) { + Convey("正常accept", t, func() { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + addr := mock_net.NewMockAddr(ctrl) + conn := mock_net.NewMockConn(ctrl) + conn.EXPECT().Close().Return(nil).AnyTimes() + addr.EXPECT().String().Return("1.2.3.4:8080").AnyTimes() + conn.EXPECT().RemoteAddr().Return(addr).AnyTimes() + lis := NewTestLimitListener(100, 10) + So(lis.accept(conn).(*Conn).isValid(), ShouldBeTrue) + }) +} + +// 测试acquire +func TestLimitListener_Acquire(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + conn := mock_net.NewMockConn(ctrl) + conn.EXPECT().Close().Return(nil).AnyTimes() + Convey("acquire测试", t, func() { + Convey("超过server监听的最大限制,返回false", func() { + lis := &Listener{maxConnPerHost: 1, maxConnLimit: 10, connCount: 10} + c := lis.acquire(conn, "1.2.3.4:8080", "1.2.3.4") + So(c.isValid(), ShouldBeFalse) + }) + Convey("host首次请求,可以正常获取连接", func() { + lis := NewTestLimitListener(100, 10) + c := lis.acquire(conn, "2.3.4.5:8080", "2.3.4.5") + So(c.isValid(), ShouldBeTrue) + }) + Convey("host多次获取,正常", func() { + lis := NewTestLimitListener(15, 10) + for i := 0; i < 10; i++ { + So(lis.acquire(conn, fmt.Sprintf("1.2.3.4:%d", i), "1.2.3.4").isValid(), ShouldBeTrue) + } + So(lis.acquire(conn, fmt.Sprintf("1.2.3.4:%d", 20), "1.2.3.4").isValid(), ShouldBeFalse) + + // 其他host没有超过限制,true + So(lis.acquire(conn, fmt.Sprintf("1.2.3.9:%d", 200), "1.2.3.9").isValid(), ShouldBeTrue) + // 占满listen的最大连接,前面成功了11个,剩下4个还没有满 + for i := 0; i < 4; i++ { + So(lis.acquire(conn, fmt.Sprintf("1.2.3.8:%d", i), "1.2.3.8").isValid(), ShouldBeTrue) + } + + // 总连接数被占满,false + So(lis.acquire(conn, fmt.Sprintf("1.2.3.19:%d", 123), "1.2.3.9").isValid(), ShouldBeFalse) + }) + }) +} + +// release +func TestLimitListener_ReLease(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + conn := mock_net.NewMockConn(ctrl) + conn.EXPECT().Close().Return(nil).AnyTimes() + t.Run("并发释放测试", func(t *testing.T) { + lis := NewTestLimitListener(2048000, 204800) + conns := make([]net.Conn, 0, 10240) + for i := 0; i < 10240; i++ { + c := lis.acquire(conn, "1.2.3.4:8080", "1.2.3.4") + conns = append(conns, c) + } + + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + for i := 0; i < 10240; i++ { + lis.acquire(conn, "1.2.3.4:8080", "1.2.3.4") + } + }() + + for i := 0; i < 2048; i++ { + wg.Add(1) + go func(index int) { + for j := 0; j < 5; j++ { + c := conns[index*5+j] + _ = c.Close() + } + wg.Done() + }(i) + } + + wg.Wait() + var remain int32 = 10240 + 10240 - 2048*5 + if lis.GetListenerConnCount() == remain && lis.GetHostConnCount("1.2.3.4") == remain { + t.Logf("pass") + } else { + t.Fatalf("error: %d, %d", lis.GetListenerConnCount(), lis.GetHostConnCount("1.2.3.4")) + } + }) +} + +// 白名单测试 +func TestWhiteList(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + conn := mock_net.NewMockConn(ctrl) + conn.EXPECT().Close().Return(nil).AnyTimes() + + Convey("白名单下,限制不生效", t, func() { + listener := NewTestLimitListener(100, 2) + listener.whiteList = map[string]bool{ + "8.8.8.8": true, + } + for i := 0; i < 100; i++ { + So(listener.acquire(conn, "8.8.8.8:123", "8.8.8.8").isValid(), ShouldBeTrue) + } + // 超过了机器的100限制,白名单也不放过 + So(listener.acquire(conn, "8.8.8.8:123", "8.8.8.8").isValid(), ShouldBeFalse) + So(listener.acquire(conn, "8.8.8.9:123", "8.8.8.9").isValid(), ShouldBeFalse) + So(listener.acquire(conn, "8.8.8.10:123", "8.8.8.10").isValid(), ShouldBeFalse) + }) +} + +// 测试activeConns +func TestActiveConns(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + conn := mock_net.NewMockConn(ctrl) + conn.EXPECT().Close().Return(nil).AnyTimes() + listener := NewTestLimitListener(1024, 64) + var conns []*Conn + Convey("初始化", t, func() { + for i := 0; i < 32; i++ { + c := listener.acquire(conn, fmt.Sprintf("8.8.8.8:%d", i), "8.8.8.8") + So(c.isValid(), ShouldBeTrue) + conns = append(conns, c) + } + }) + Convey("测试活跃连接", t, func() { + Convey("已活跃的连接可以正常存储", func() { + actives := listener.GetHostActiveConns("8.8.8.8") + So(actives, ShouldNotBeNil) + So(len(actives), ShouldEqual, 32) + }) + Convey("连接关闭,活跃连接map会剔除", func() { + for i := 0; i < 8; i++ { + _ = conns[i].Close() + } + actives := listener.GetHostActiveConns("8.8.8.8") + So(actives, ShouldNotBeNil) + So(len(actives), ShouldEqual, 24) // 32 - 8 + }) + Convey("重复关闭连接,活跃连接map不受影响,size不受影响", func() { + for i := 0; i < 8; i++ { + _ = conns[i].Close() + } + actives := listener.GetHostActiveConns("8.8.8.8") + So(actives, ShouldNotBeNil) + So(len(actives), ShouldEqual, 24) + So(listener.GetHostConnCount("8.8.8.8"), ShouldEqual, 24) + }) + Convey("多主机数据,可以正常存储", func() { + for i := 0; i < 16; i++ { + c := listener.acquire(conn, fmt.Sprintf("8.8.8.16:%d", i), "8.8.8.16") + So(c.isValid(), ShouldBeTrue) + conns = append(conns, c) + } + actives := listener.GetHostActiveConns("8.8.8.16") + So(actives, ShouldNotBeNil) + So(len(actives), ShouldEqual, 16) + }) + }) +} + +// 测试回收过期Counter函数 +func TestPurgeExpireCounterHandler(t *testing.T) { + Convey("可以正常purge", t, func() { + listener := NewTestLimitListener(1024, 16) + listener.purgeCounterExpire = 3 + for i := 0; i < 102400; i++ { + ct := newCounter() + ct.size = 0 + listener.conns.Store(fmt.Sprintf("127.0.0.:%d", i), ct) + } + time.Sleep(time.Second * 4) + for i := 0; i < 102400; i++ { + ct := newCounter() + ct.size = 0 + listener.conns.Store(fmt.Sprintf("127.0.1.%d", i), ct) + } + So(listener.GetDistinctHostCount(), ShouldEqual, 204800) + listener.purgeExpireCounterHandler() + So(listener.GetDistinctHostCount(), ShouldEqual, 102400) + }) + Convey("并发store和range,扫描的速度测试", t, func() { + listener := NewTestLimitListener(1024, 16) + listener.purgeCounterInterval = time.Microsecond * 10 + listener.purgeCounterExpire = 1 + rand.Seed(time.Now().UnixNano()) + ctx, cancel := context.WithCancel(context.Background()) + for i := 0; i < 10240; i++ { + go func(index int) { + for { + select { + case <-ctx.Done(): + return + default: + } + for j := 0; j < 100; j++ { + ct := newCounter() + ct.size = 0 + listener.conns.Store(fmt.Sprintf("%d.%d", index, j), ct) + time.Sleep(time.Millisecond) + } + } + + }(i) + } + listener.purgeExpireCounter(ctx) + <-time.After(time.Second * 5) + cancel() + }) +} + +// 返回一个测试listener +func NewTestLimitListener(maxLimit int32, hostLimit int32) *Listener { + return &Listener{ + maxConnLimit: maxLimit, + maxConnPerHost: hostLimit, + conns: new(sync.Map), + purgeCounterInterval: time.Hour, + purgeCounterExpire: 300, + } +} diff --git a/common/connlimit/mock_net/mock_conn.go b/common/connlimit/mock_net/mock_conn.go new file mode 100644 index 000000000..eddb9918f --- /dev/null +++ b/common/connlimit/mock_net/mock_conn.go @@ -0,0 +1,200 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: net (interfaces: Conn,Addr) + +// Package mock_net is a generated GoMock package. +package mock_net + +import ( + gomock "github.com/golang/mock/gomock" + net "net" + reflect "reflect" + time "time" +) + +// MockConn is a mock of Conn interface +type MockConn struct { + ctrl *gomock.Controller + recorder *MockConnMockRecorder +} + +// MockConnMockRecorder is the mock recorder for MockConn +type MockConnMockRecorder struct { + mock *MockConn +} + +// NewMockConn creates a new mock instance +func NewMockConn(ctrl *gomock.Controller) *MockConn { + mock := &MockConn{ctrl: ctrl} + mock.recorder = &MockConnMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockConn) EXPECT() *MockConnMockRecorder { + return m.recorder +} + +// Close mocks base method +func (m *MockConn) Close() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Close") + ret0, _ := ret[0].(error) + return ret0 +} + +// Close indicates an expected call of Close +func (mr *MockConnMockRecorder) Close() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockConn)(nil).Close)) +} + +// LocalAddr mocks base method +func (m *MockConn) LocalAddr() net.Addr { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LocalAddr") + ret0, _ := ret[0].(net.Addr) + return ret0 +} + +// LocalAddr indicates an expected call of LocalAddr +func (mr *MockConnMockRecorder) LocalAddr() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LocalAddr", reflect.TypeOf((*MockConn)(nil).LocalAddr)) +} + +// Read mocks base method +func (m *MockConn) Read(arg0 []byte) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Read", arg0) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Read indicates an expected call of Read +func (mr *MockConnMockRecorder) Read(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Read", reflect.TypeOf((*MockConn)(nil).Read), arg0) +} + +// RemoteAddr mocks base method +func (m *MockConn) RemoteAddr() net.Addr { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RemoteAddr") + ret0, _ := ret[0].(net.Addr) + return ret0 +} + +// RemoteAddr indicates an expected call of RemoteAddr +func (mr *MockConnMockRecorder) RemoteAddr() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RemoteAddr", reflect.TypeOf((*MockConn)(nil).RemoteAddr)) +} + +// SetDeadline mocks base method +func (m *MockConn) SetDeadline(arg0 time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetDeadline", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetDeadline indicates an expected call of SetDeadline +func (mr *MockConnMockRecorder) SetDeadline(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetDeadline", reflect.TypeOf((*MockConn)(nil).SetDeadline), arg0) +} + +// SetReadDeadline mocks base method +func (m *MockConn) SetReadDeadline(arg0 time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetReadDeadline", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetReadDeadline indicates an expected call of SetReadDeadline +func (mr *MockConnMockRecorder) SetReadDeadline(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetReadDeadline", reflect.TypeOf((*MockConn)(nil).SetReadDeadline), arg0) +} + +// SetWriteDeadline mocks base method +func (m *MockConn) SetWriteDeadline(arg0 time.Time) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetWriteDeadline", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetWriteDeadline indicates an expected call of SetWriteDeadline +func (mr *MockConnMockRecorder) SetWriteDeadline(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetWriteDeadline", reflect.TypeOf((*MockConn)(nil).SetWriteDeadline), arg0) +} + +// Write mocks base method +func (m *MockConn) Write(arg0 []byte) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Write", arg0) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Write indicates an expected call of Write +func (mr *MockConnMockRecorder) Write(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Write", reflect.TypeOf((*MockConn)(nil).Write), arg0) +} + +// MockAddr is a mock of Addr interface +type MockAddr struct { + ctrl *gomock.Controller + recorder *MockAddrMockRecorder +} + +// MockAddrMockRecorder is the mock recorder for MockAddr +type MockAddrMockRecorder struct { + mock *MockAddr +} + +// NewMockAddr creates a new mock instance +func NewMockAddr(ctrl *gomock.Controller) *MockAddr { + mock := &MockAddr{ctrl: ctrl} + mock.recorder = &MockAddrMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockAddr) EXPECT() *MockAddrMockRecorder { + return m.recorder +} + +// Network mocks base method +func (m *MockAddr) Network() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Network") + ret0, _ := ret[0].(string) + return ret0 +} + +// Network indicates an expected call of Network +func (mr *MockAddrMockRecorder) Network() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Network", reflect.TypeOf((*MockAddr)(nil).Network)) +} + +// String mocks base method +func (m *MockAddr) String() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "String") + ret0, _ := ret[0].(string) + return ret0 +} + +// String indicates an expected call of String +func (mr *MockAddrMockRecorder) String() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "String", reflect.TypeOf((*MockAddr)(nil).String)) +} diff --git a/common/connlimit/stats.go b/common/connlimit/stats.go new file mode 100644 index 000000000..085c2c4c1 --- /dev/null +++ b/common/connlimit/stats.go @@ -0,0 +1,28 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 connlimit + +import "time" + +// 连接的统计信息 +type HostConnStat struct { + Host string + Amount int32 + LastAccess time.Time + Actives []string +} diff --git a/common/log/config.go b/common/log/config.go new file mode 100644 index 000000000..b53fab967 --- /dev/null +++ b/common/log/config.go @@ -0,0 +1,339 @@ +// Copyright 2017 Istio Authors +// +// Licensed 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 log provides the canonical logging functionality used by Go-based +// Istio components. +// +// Istio's logging subsystem is built on top of the [Zap](https://godoc.org/go.uber.org/zap) package. +// High performance scenarios should use the Error, Warn, Info, and Debug methods. Lower perf +// scenarios can use the more expensive convenience methods such as Debugf and Warnw. +// +// The package provides direct integration with the Cobra command-line processor which makes it +// easy to build programs that use a consistent interface for logging. Here's an example +// of a simple Cobra-based program using this log package: +// +// func main() { +// // get the default logging options +// options := log.DefaultOptions() +// +// rootCmd := &cobra.Command{ +// Run: func(cmd *cobra.Command, args []string) { +// +// // configure the logging system +// if err := log.Configure(options); err != nil { +// // print an error and quit +// } +// +// // output some logs +// log.Info("Hello") +// log.Sync() +// }, +// } +// +// // add logging-specific flags to the cobra command +// options.AttachCobraFlags(rootCmd) +// rootCmd.SetArgs(os.Args[1:]) +// rootCmd.Execute() +// } +// +// Once configured, this package intercepts the output of the standard golang "log" package as well as anything +// sent to the global zap logger (zap.L()). +package log + +import ( + "fmt" + "os" + "strings" + "sync/atomic" + "time" + + "github.com/natefinch/lumberjack" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "go.uber.org/zap/zapgrpc" + "google.golang.org/grpc/grpclog" +) + +// none is used to disable logging output as well as to disable stack tracing. +const none zapcore.Level = 100 + +var levelToZap = map[Level]zapcore.Level{ + DebugLevel: zapcore.DebugLevel, + InfoLevel: zapcore.InfoLevel, + WarnLevel: zapcore.WarnLevel, + ErrorLevel: zapcore.ErrorLevel, + FatalLevel: zapcore.FatalLevel, + NoneLevel: none, +} + +// functions that can be replaced in a test setting +type patchTable struct { + write func(ent zapcore.Entry, fields []zapcore.Field) error + sync func() error + exitProcess func(code int) + errorSink zapcore.WriteSyncer +} + +// function table that can be replaced by tests +var funcs = &atomic.Value{} + +func init() { + // use our defaults for starters so that logging works even before everything is fully configured + _ = Configure(DefaultOptions()) +} + +// prepZap is a utility function used by the Configure function. +func prepZap(options *Options) (zapcore.Core, zapcore.Core, zapcore.WriteSyncer, error) { + encCfg := zapcore.EncoderConfig{ + TimeKey: "time", + LevelKey: "level", + NameKey: "scope", + CallerKey: "caller", + MessageKey: "msg", + StacktraceKey: "stack", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.LowercaseLevelEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + EncodeDuration: zapcore.StringDurationEncoder, + EncodeTime: formatDate, + } + + var enc zapcore.Encoder + if options.JSONEncoding { + enc = zapcore.NewJSONEncoder(encCfg) + } else { + enc = zapcore.NewConsoleEncoder(encCfg) + } + + var rotaterSink zapcore.WriteSyncer + if options.RotateOutputPath != "" { + rotaterSink = zapcore.AddSync(&lumberjack.Logger{ + Filename: options.RotateOutputPath, + MaxSize: options.RotationMaxSize, + MaxBackups: options.RotationMaxBackups, + MaxAge: options.RotationMaxAge, + }) + } + + errSink, closeErrorSink, err := zap.Open(options.ErrorOutputPaths...) + if err != nil { + return nil, nil, nil, err + } + + var outputSink zapcore.WriteSyncer + if len(options.OutputPaths) > 0 { + outputSink, _, err = zap.Open(options.OutputPaths...) + if err != nil { + closeErrorSink() + return nil, nil, nil, err + } + } + + var sink zapcore.WriteSyncer + if rotaterSink != nil && outputSink != nil { + sink = zapcore.NewMultiWriteSyncer(outputSink, rotaterSink) + } else if rotaterSink != nil { + sink = rotaterSink + } else { + sink = outputSink + } + + var enabler zap.LevelEnablerFunc = func(lvl zapcore.Level) bool { + switch lvl { + case zapcore.ErrorLevel: + return defaultScope.ErrorEnabled() + case zapcore.WarnLevel: + return defaultScope.WarnEnabled() + case zapcore.InfoLevel: + return defaultScope.InfoEnabled() + } + return defaultScope.DebugEnabled() + } + + return zapcore.NewCore(enc, sink, zap.NewAtomicLevelAt(zapcore.DebugLevel)), + zapcore.NewCore(enc, sink, enabler), + errSink, nil +} + +func formatDate(t time.Time, enc zapcore.PrimitiveArrayEncoder) { + //t = t.UTC() 不用utc时间 + year, month, day := t.Date() + hour, minute, second := t.Clock() + micros := t.Nanosecond() / 1000 + + buf := make([]byte, 27) + + buf[0] = byte((year/1000)%10) + '0' + buf[1] = byte((year/100)%10) + '0' + buf[2] = byte((year/10)%10) + '0' + buf[3] = byte(year%10) + '0' + buf[4] = '-' + buf[5] = byte((month)/10) + '0' + buf[6] = byte((month)%10) + '0' + buf[7] = '-' + buf[8] = byte((day)/10) + '0' + buf[9] = byte((day)%10) + '0' + buf[10] = 'T' + buf[11] = byte((hour)/10) + '0' + buf[12] = byte((hour)%10) + '0' + buf[13] = ':' + buf[14] = byte((minute)/10) + '0' + buf[15] = byte((minute)%10) + '0' + buf[16] = ':' + buf[17] = byte((second)/10) + '0' + buf[18] = byte((second)%10) + '0' + buf[19] = '.' + buf[20] = byte((micros/100000)%10) + '0' + buf[21] = byte((micros/10000)%10) + '0' + buf[22] = byte((micros/1000)%10) + '0' + buf[23] = byte((micros/100)%10) + '0' + buf[24] = byte((micros/10)%10) + '0' + buf[25] = byte((micros)%10) + '0' + buf[26] = 'Z' + + enc.AppendString(string(buf)) +} + +func updateScopes(options *Options) error { + // snapshot what's there + allScopes := Scopes() + + // update the output levels of all listed scopes + if err := processLevels(allScopes, options.outputLevels, func(s *Scope, l Level) { s.SetOutputLevel(l) }); err != nil { + return err + } + + // update the stack tracing levels of all listed scopes + if err := processLevels( + allScopes, options.stackTraceLevels, func(s *Scope, l Level) { s.SetStackTraceLevel(l) }); err != nil { + return err + } + + // update the caller location setting of all listed scopes + sc := strings.Split(options.logCallers, ",") + for _, s := range sc { + if s == "" { + continue + } + + if s == OverrideScopeName { + // ignore everything else and just apply the override value + for _, scope := range allScopes { + scope.SetLogCallers(true) + } + + return nil + } + + if scope, ok := allScopes[s]; ok { + scope.SetLogCallers(true) + } else { + return fmt.Errorf("unknown scope '%s' specified", s) + } + } + + return nil +} + +// processLevels breaks down an argument string into a set of scope & levels and then +// tries to apply the result to the scopes. It supports the use of a global override. +func processLevels(allScopes map[string]*Scope, arg string, setter func(*Scope, Level)) error { + levels := strings.Split(arg, ",") + for _, sl := range levels { + s, l, err := convertScopedLevel(sl) + if err != nil { + return err + } + + if scope, ok := allScopes[s]; ok { + setter(scope, l) + } else if s == OverrideScopeName { + // override replaces everything + for _, scope := range allScopes { + setter(scope, l) + } + return nil + } else { + return fmt.Errorf("unknown scope '%s' specified", s) + } + } + + return nil +} + +// Configure initializes Istio's logging subsystem. +// +// You typically call this once at process startup. +// Once this call returns, the logging system is ready to accept data. +// nolint: staticcheck +func Configure(options *Options) error { + core, captureCore, errSink, err := prepZap(options) + if err != nil { + return err + } + + if err = updateScopes(options); err != nil { + return err + } + + pt := patchTable{ + write: func(ent zapcore.Entry, fields []zapcore.Field) error { + err := core.Write(ent, fields) + if ent.Level == zapcore.FatalLevel { + funcs.Load().(patchTable).exitProcess(1) + } + + return err + }, + sync: core.Sync, + exitProcess: os.Exit, + errorSink: errSink, + } + funcs.Store(pt) + + opts := []zap.Option{ + zap.ErrorOutput(errSink), + zap.AddCallerSkip(1), + } + + if defaultScope.GetLogCallers() { + opts = append(opts, zap.AddCaller()) + } + + l := defaultScope.GetStackTraceLevel() + if l != NoneLevel { + opts = append(opts, zap.AddStacktrace(levelToZap[l])) + } + + captureLogger := zap.New(captureCore, opts...) + + // capture global zap logging and force it through our logger + _ = zap.ReplaceGlobals(captureLogger) + + // capture standard golang "log" package output and force it through our logger + _ = zap.RedirectStdLog(captureLogger) + + // capture gRPC logging + if options.LogGrpc { + grpclog.SetLogger(zapgrpc.NewLogger(captureLogger.WithOptions(zap.AddCallerSkip(2)))) + } + + return nil +} + +// Sync flushes any buffered log entries. +// Processes should normally take care to call Sync before exiting. +func Sync() error { + return funcs.Load().(patchTable).sync() +} diff --git a/common/log/default.go b/common/log/default.go new file mode 100644 index 000000000..076ec1830 --- /dev/null +++ b/common/log/default.go @@ -0,0 +1,173 @@ +// Copyright 2017 Istio Authors +// +// Licensed 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 log + +import ( + "fmt" + + "go.uber.org/zap/zapcore" +) + +var defaultScope = RegisterScope(DefaultScopeName, "Unscoped logging messages.", 0) + +// Fatal outputs a message at fatal level. +func Fatal(msg string, fields ...zapcore.Field) { + if defaultScope.GetOutputLevel() >= FatalLevel { + defaultScope.emit(zapcore.FatalLevel, defaultScope.GetStackTraceLevel() >= FatalLevel, msg, fields) + } +} + +// Fatala uses fmt.Sprint to construct and log a message at fatal level. +func Fatala(args ...interface{}) { + if defaultScope.GetOutputLevel() >= FatalLevel { + defaultScope.emit(zapcore.FatalLevel, defaultScope.GetStackTraceLevel() >= FatalLevel, fmt.Sprint(args...), nil) + } +} + +// Fatalf uses fmt.Sprintf to construct and log a message at fatal level. +func Fatalf(template string, args ...interface{}) { + if defaultScope.GetOutputLevel() >= FatalLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + defaultScope.emit(zapcore.FatalLevel, defaultScope.GetStackTraceLevel() >= FatalLevel, msg, nil) + } +} + +// FatalEnabled returns whether output of messages using this scope is currently enabled for fatal-level output. +func FatalEnabled() bool { + return defaultScope.GetOutputLevel() >= FatalLevel +} + +// Error outputs a message at error level. +func Error(msg string, fields ...zapcore.Field) { + if defaultScope.GetOutputLevel() >= ErrorLevel { + defaultScope.emit(zapcore.ErrorLevel, defaultScope.GetStackTraceLevel() >= ErrorLevel, msg, fields) + } +} + +// Errora uses fmt.Sprint to construct and log a message at error level. +func Errora(args ...interface{}) { + if defaultScope.GetOutputLevel() >= ErrorLevel { + defaultScope.emit(zapcore.ErrorLevel, defaultScope.GetStackTraceLevel() >= ErrorLevel, fmt.Sprint(args...), nil) + } +} + +// Errorf uses fmt.Sprintf to construct and log a message at error level. +func Errorf(template string, args ...interface{}) { + if defaultScope.GetOutputLevel() >= ErrorLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + defaultScope.emit(zapcore.ErrorLevel, defaultScope.GetStackTraceLevel() >= ErrorLevel, msg, nil) + } +} + +// ErrorEnabled returns whether output of messages using this scope is currently enabled for error-level output. +func ErrorEnabled() bool { + return defaultScope.GetOutputLevel() >= ErrorLevel +} + +// Warn outputs a message at warn level. +func Warn(msg string, fields ...zapcore.Field) { + if defaultScope.GetOutputLevel() >= WarnLevel { + defaultScope.emit(zapcore.WarnLevel, defaultScope.GetStackTraceLevel() >= WarnLevel, msg, fields) + } +} + +// Warna uses fmt.Sprint to construct and log a message at warn level. +func Warna(args ...interface{}) { + if defaultScope.GetOutputLevel() >= WarnLevel { + defaultScope.emit(zapcore.WarnLevel, defaultScope.GetStackTraceLevel() >= WarnLevel, fmt.Sprint(args...), nil) + } +} + +// Warnf uses fmt.Sprintf to construct and log a message at warn level. +func Warnf(template string, args ...interface{}) { + if defaultScope.GetOutputLevel() >= WarnLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + defaultScope.emit(zapcore.WarnLevel, defaultScope.GetStackTraceLevel() >= WarnLevel, msg, nil) + } +} + +// WarnEnabled returns whether output of messages using this scope is currently enabled for warn-level output. +func WarnEnabled() bool { + return defaultScope.GetOutputLevel() >= WarnLevel +} + +// Info outputs a message at info level. +func Info(msg string, fields ...zapcore.Field) { + if defaultScope.GetOutputLevel() >= InfoLevel { + defaultScope.emit(zapcore.InfoLevel, defaultScope.GetStackTraceLevel() >= InfoLevel, msg, fields) + } +} + +// Infoa uses fmt.Sprint to construct and log a message at info level. +func Infoa(args ...interface{}) { + if defaultScope.GetOutputLevel() >= InfoLevel { + defaultScope.emit(zapcore.InfoLevel, defaultScope.GetStackTraceLevel() >= InfoLevel, fmt.Sprint(args...), nil) + } +} + +// Infof uses fmt.Sprintf to construct and log a message at info level. +func Infof(template string, args ...interface{}) { + if defaultScope.GetOutputLevel() >= InfoLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + defaultScope.emit(zapcore.InfoLevel, defaultScope.GetStackTraceLevel() >= InfoLevel, msg, nil) + } +} + +// InfoEnabled returns whether output of messages using this scope is currently enabled for info-level output. +func InfoEnabled() bool { + return defaultScope.GetOutputLevel() >= InfoLevel +} + +// Debug outputs a message at debug level. +func Debug(msg string, fields ...zapcore.Field) { + if defaultScope.GetOutputLevel() >= DebugLevel { + defaultScope.emit(zapcore.DebugLevel, defaultScope.GetStackTraceLevel() >= DebugLevel, msg, fields) + } +} + +// Debuga uses fmt.Sprint to construct and log a message at debug level. +func Debuga(args ...interface{}) { + if defaultScope.GetOutputLevel() >= DebugLevel { + defaultScope.emit(zapcore.DebugLevel, defaultScope.GetStackTraceLevel() >= DebugLevel, fmt.Sprint(args...), nil) + } +} + +// Debugf uses fmt.Sprintf to construct and log a message at debug level. +func Debugf(template string, args ...interface{}) { + if defaultScope.GetOutputLevel() >= DebugLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + defaultScope.emit(zapcore.DebugLevel, defaultScope.GetStackTraceLevel() >= DebugLevel, msg, nil) + } +} + +// DebugEnabled returns whether output of messages using this scope is currently enabled for debug-level output. +func DebugEnabled() bool { + return defaultScope.GetOutputLevel() >= DebugLevel +} diff --git a/common/log/options.go b/common/log/options.go new file mode 100644 index 000000000..85a29f8ac --- /dev/null +++ b/common/log/options.go @@ -0,0 +1,295 @@ +// Copyright 2017 Istio Authors +// +// Licensed 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 log + +import ( + "errors" + "fmt" + "strings" +) + +const ( + DefaultScopeName = "default" + OverrideScopeName = "all" + defaultOutputLevel = InfoLevel + defaultStackTraceLevel = NoneLevel + defaultOutputPath = "stdout" + defaultErrorOutputPath = "stderr" + defaultRotationMaxAge = 30 + defaultRotationMaxSize = 100 * 1024 * 1024 + defaultRotationMaxBackups = 1000 +) + +// Level is an enumeration of all supported log levels. +type Level int + +const ( + // NoneLevel disables logging + NoneLevel Level = iota + // FatalLevel enables fatal level logging + FatalLevel + // ErrorLevel enables error level logging + ErrorLevel + // WarnLevel enables warn level logging + WarnLevel + // InfoLevel enables info level logging + InfoLevel + // DebugLevel enables debug level logging + DebugLevel +) + +var levelToString = map[Level]string{ + DebugLevel: "debug", + InfoLevel: "info", + WarnLevel: "warn", + ErrorLevel: "error", + FatalLevel: "fatal", + NoneLevel: "none", +} + +var stringToLevel = map[string]Level{ + "debug": DebugLevel, + "info": InfoLevel, + "warn": WarnLevel, + "error": ErrorLevel, + "fatal": FatalLevel, + "none": NoneLevel, +} + +// Options defines the set of options supported by Istio's component logging package. +type Options struct { + // OutputPaths is a list of file system paths to write the log data to. + // The special values stdout and stderr can be used to output to the + // standard I/O streams. This defaults to stdout. + OutputPaths []string + + // ErrorOutputPaths is a list of file system paths to write logger errors to. + // The special values stdout and stderr can be used to output to the + // standard I/O streams. This defaults to stderr. + ErrorOutputPaths []string + + // RotateOutputPath is the path to a rotating log file. This file should + // be automatically rotated over time, based on the rotation parameters such + // as RotationMaxSize and RotationMaxAge. The default is to not rotate. + // + // This path is used as a foundational path. This is where log output is normally + // saved. When a rotation needs to take place because the file got too big or too + // old, then the file is renamed by appending a timestamp to the name. Such renamed + // files are called backups. Once a backup has been created, + // output resumes to this path. + RotateOutputPath string `yaml:"RotateOutputPath"` + + // RotationMaxSize is the maximum size in megabytes of a log file before it gets + // rotated. It defaults to 100 megabytes. + RotationMaxSize int `yaml:"RotationMaxSize"` + + // RotationMaxAge is the maximum number of days to retain old log files based on the + // timestamp encoded in their filename. Note that a day is defined as 24 + // hours and may not exactly correspond to calendar days due to daylight + // savings, leap seconds, etc. The default is to remove log files + // older than 30 days. + RotationMaxAge int `yaml:"RotationMaxAge"` + + // RotationMaxBackups is the maximum number of old log files to retain. The default + // is to retain at most 1000 logs. + RotationMaxBackups int `yaml:"RotationMaxBackups"` + + // JSONEncoding controls whether the log is formatted as JSON. + JSONEncoding bool + + // LogGrpc indicates that Grpc logs should be captured. The default is true. + // This is not exposed through the command-line flags, as this flag is mainly useful for testing: Grpc + // stack will hold on to the logger even though it gets closed. This causes data races. + LogGrpc bool + + Level string + + outputLevels string + logCallers string + stackTraceLevels string +} + +// DefaultOptions returns a new set of options, initialized to the defaults +func DefaultOptions() *Options { + return &Options{ + OutputPaths: []string{defaultOutputPath}, + ErrorOutputPaths: []string{defaultErrorOutputPath}, + RotationMaxSize: defaultRotationMaxSize, + RotationMaxAge: defaultRotationMaxAge, + RotationMaxBackups: defaultRotationMaxBackups, + outputLevels: DefaultScopeName + ":" + levelToString[defaultOutputLevel], + stackTraceLevels: DefaultScopeName + ":" + levelToString[defaultStackTraceLevel], + LogGrpc: false, + } +} + +// SetOutputLevel sets the minimum log output level for a given scope. +func (o *Options) SetOutputLevel(scope, level string) error { + _, exist := stringToLevel[level] + if !exist { + return errors.New("invalid log level") + } + sl := scope + ":" + level + + levels := strings.Split(o.outputLevels, ",") + + if scope == DefaultScopeName { + // see if we have an entry without a scope prefix (which represents the default scope) + for i, ol := range levels { + if !strings.Contains(ol, ":") { + levels[i] = sl + o.outputLevels = strings.Join(levels, ",") + return nil + } + } + } + + prefix := scope + ":" + for i, ol := range levels { + if strings.HasPrefix(ol, prefix) { + levels[i] = sl + o.outputLevels = strings.Join(levels, ",") + return nil + } + } + + levels = append(levels, sl) + o.outputLevels = strings.Join(levels, ",") + + return nil +} + +// GetOutputLevel returns the minimum log output level for a given scope. +func (o *Options) GetOutputLevel(scope string) (Level, error) { + return o.GetStackTraceLevel(scope) +} + +// SetStackTraceLevel sets the minimum stack tracing level for a given scope. +func (o *Options) SetStackTraceLevel(scope, level string) { + sl := scope + ":" + level + + levels := strings.Split(o.stackTraceLevels, ",") + + if scope == DefaultScopeName { + // see if we have an entry without a scope prefix (which represents the default scope) + for i, ol := range levels { + if !strings.Contains(ol, ":") { + levels[i] = sl + o.stackTraceLevels = strings.Join(levels, ",") + return + } + } + } + + prefix := scope + ":" + for i, ol := range levels { + if strings.HasPrefix(ol, prefix) { + levels[i] = sl + o.stackTraceLevels = strings.Join(levels, ",") + return + } + } + + levels = append(levels, sl) + o.stackTraceLevels = strings.Join(levels, ",") +} + +// GetStackTraceLevel returns the minimum stack tracing level for a given scope. +func (o *Options) GetStackTraceLevel(scope string) (Level, error) { + levels := strings.Split(o.stackTraceLevels, ",") + + if scope == DefaultScopeName { + // see if we have an entry without a scope prefix (which represents the default scope) + for _, ol := range levels { + if !strings.Contains(ol, ":") { + _, l, err := convertScopedLevel(ol) + return l, err + } + } + } + + prefix := scope + ":" + for _, ol := range levels { + if strings.HasPrefix(ol, prefix) { + _, l, err := convertScopedLevel(ol) + return l, err + } + } + + return NoneLevel, fmt.Errorf("no level defined for scope '%s'", scope) +} + +// SetLogCallers sets whether to output the caller's source code location for a given scope. +func (o *Options) SetLogCallers(scope string, include bool) { + scopes := strings.Split(o.logCallers, ",") + + // remove any occurrence of the scope + for i, s := range scopes { + if s == scope { + scopes[i] = "" + } + } + + if include { + // find a free slot if there is one + for i, s := range scopes { + if s == "" { + scopes[i] = scope + o.logCallers = strings.Join(scopes, ",") + return + } + } + + scopes = append(scopes, scope) + } + + o.logCallers = strings.Join(scopes, ",") +} + +// GetLogCallers returns whether the caller's source code location is output for a given scope. +func (o *Options) GetLogCallers(scope string) bool { + scopes := strings.Split(o.logCallers, ",") + + for _, s := range scopes { + if s == scope { + return true + } + } + + return false +} + +func convertScopedLevel(sl string) (string, Level, error) { + var s string + var l string + + pieces := strings.Split(sl, ":") + if len(pieces) == 1 { + s = DefaultScopeName + l = pieces[0] + } else if len(pieces) == 2 { + s = pieces[0] + l = pieces[1] + } else { + return "", NoneLevel, fmt.Errorf("invalid output level format '%s'", sl) + } + + level, ok := stringToLevel[l] + if !ok { + return "", NoneLevel, fmt.Errorf("invalid output level '%s'", sl) + } + + return s, level, nil +} diff --git a/common/log/scope.go b/common/log/scope.go new file mode 100644 index 000000000..d1688f486 --- /dev/null +++ b/common/log/scope.go @@ -0,0 +1,317 @@ +// Copyright 2018 Istio Authors +// +// Licensed 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 log + +import ( + "fmt" + "runtime" + "strings" + "sync" + "sync/atomic" + "time" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +// Scope let's you log data for an area of code, enabling the user full control over +// the level of logging output produced. +type Scope struct { + // immutable, set at creation + name string + nameToEmit string + description string + callerSkip int + + // set by the Configure method and adjustable dynamically + outputLevel atomic.Value + stackTraceLevel atomic.Value + logCallers atomic.Value +} + +var scopes = make(map[string]*Scope) +var lock = sync.RWMutex{} + +// RegisterScope registers a new logging scope. If the same name is used multiple times +// for a single process, the same Scope struct is returned. +// +// Scope names cannot include colons, commas, or periods. +func RegisterScope(name string, description string, callerSkip int) *Scope { + if strings.ContainsAny(name, ":,.") { + panic(fmt.Sprintf("scope name %s is invalid, it cannot contain colons, commas, or periods", name)) + } + + lock.Lock() + defer lock.Unlock() + + s, ok := scopes[name] + if !ok { + s = &Scope{ + name: name, + description: description, + callerSkip: callerSkip, + } + s.SetOutputLevel(InfoLevel) + s.SetStackTraceLevel(NoneLevel) + s.SetLogCallers(false) + + if name != DefaultScopeName { + s.nameToEmit = name + } + + scopes[name] = s + } + + return s +} + +// FindScope returns a previously registered scope, or nil if the named scope wasn't previously registered +func FindScope(scope string) *Scope { + lock.RLock() + defer lock.RUnlock() + + s := scopes[scope] + return s +} + +// Scopes returns a snapshot of the currently defined set of scopes +func Scopes() map[string]*Scope { + lock.RLock() + defer lock.RUnlock() + + s := make(map[string]*Scope, len(scopes)) + for k, v := range scopes { + s[k] = v + } + + return s +} + +// Fatal outputs a message at fatal level. +func (s *Scope) Fatal(msg string, fields ...zapcore.Field) { + if s.GetOutputLevel() >= FatalLevel { + s.emit(zapcore.FatalLevel, s.GetStackTraceLevel() >= FatalLevel, msg, fields) + } +} + +// Fatala uses fmt.Sprint to construct and log a message at fatal level. +func (s *Scope) Fatala(args ...interface{}) { + if s.GetOutputLevel() >= FatalLevel { + s.emit(zapcore.FatalLevel, s.GetStackTraceLevel() >= FatalLevel, fmt.Sprint(args...), nil) + } +} + +// Fatalf uses fmt.Sprintf to construct and log a message at fatal level. +func (s *Scope) Fatalf(template string, args ...interface{}) { + if s.GetOutputLevel() >= FatalLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + s.emit(zapcore.FatalLevel, s.GetStackTraceLevel() >= FatalLevel, msg, nil) + } +} + +// FatalEnabled returns whether output of messages using this scope is currently enabled for fatal-level output. +func (s *Scope) FatalEnabled() bool { + return s.GetOutputLevel() >= FatalLevel +} + +// Error outputs a message at error level. +func (s *Scope) Error(msg string, fields ...zapcore.Field) { + if s.GetOutputLevel() >= ErrorLevel { + s.emit(zapcore.ErrorLevel, s.GetStackTraceLevel() >= ErrorLevel, msg, fields) + } +} + +// Errora uses fmt.Sprint to construct and log a message at error level. +func (s *Scope) Errora(args ...interface{}) { + if s.GetOutputLevel() >= ErrorLevel { + s.emit(zapcore.ErrorLevel, s.GetStackTraceLevel() >= ErrorLevel, fmt.Sprint(args...), nil) + } +} + +// Errorf uses fmt.Sprintf to construct and log a message at error level. +func (s *Scope) Errorf(template string, args ...interface{}) { + if s.GetOutputLevel() >= ErrorLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + s.emit(zapcore.ErrorLevel, s.GetStackTraceLevel() >= ErrorLevel, msg, nil) + } +} + +// ErrorEnabled returns whether output of messages using this scope is currently enabled for error-level output. +func (s *Scope) ErrorEnabled() bool { + return s.GetOutputLevel() >= ErrorLevel +} + +// Warn outputs a message at warn level. +func (s *Scope) Warn(msg string, fields ...zapcore.Field) { + if s.GetOutputLevel() >= WarnLevel { + s.emit(zapcore.WarnLevel, s.GetStackTraceLevel() >= ErrorLevel, msg, fields) + } +} + +// Warna uses fmt.Sprint to construct and log a message at warn level. +func (s *Scope) Warna(args ...interface{}) { + if s.GetOutputLevel() >= WarnLevel { + s.emit(zapcore.WarnLevel, s.GetStackTraceLevel() >= ErrorLevel, fmt.Sprint(args...), nil) + } +} + +// Warnf uses fmt.Sprintf to construct and log a message at warn level. +func (s *Scope) Warnf(template string, args ...interface{}) { + if s.GetOutputLevel() >= WarnLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + s.emit(zapcore.WarnLevel, s.GetStackTraceLevel() >= ErrorLevel, msg, nil) + } +} + +// WarnEnabled returns whether output of messages using this scope is currently enabled for warn-level output. +func (s *Scope) WarnEnabled() bool { + return s.GetOutputLevel() >= WarnLevel +} + +// Info outputs a message at info level. +func (s *Scope) Info(msg string, fields ...zapcore.Field) { + if s.GetOutputLevel() >= InfoLevel { + s.emit(zapcore.InfoLevel, s.GetStackTraceLevel() >= ErrorLevel, msg, fields) + } +} + +// Infoa uses fmt.Sprint to construct and log a message at info level. +func (s *Scope) Infoa(args ...interface{}) { + if s.GetOutputLevel() >= InfoLevel { + s.emit(zapcore.InfoLevel, s.GetStackTraceLevel() >= ErrorLevel, fmt.Sprint(args...), nil) + } +} + +// Infof uses fmt.Sprintf to construct and log a message at info level. +func (s *Scope) Infof(template string, args ...interface{}) { + if s.GetOutputLevel() >= InfoLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + s.emit(zapcore.InfoLevel, s.GetStackTraceLevel() >= ErrorLevel, msg, nil) + } +} + +// InfoEnabled returns whether output of messages using this scope is currently enabled for info-level output. +func (s *Scope) InfoEnabled() bool { + return s.GetOutputLevel() >= InfoLevel +} + +// Debug outputs a message at debug level. +func (s *Scope) Debug(msg string, fields ...zapcore.Field) { + if s.GetOutputLevel() >= DebugLevel { + s.emit(zapcore.DebugLevel, s.GetStackTraceLevel() >= ErrorLevel, msg, fields) + } +} + +// Debuga uses fmt.Sprint to construct and log a message at debug level. +func (s *Scope) Debuga(args ...interface{}) { + if s.GetOutputLevel() >= DebugLevel { + s.emit(zapcore.DebugLevel, s.GetStackTraceLevel() >= ErrorLevel, fmt.Sprint(args...), nil) + } +} + +// Debugf uses fmt.Sprintf to construct and log a message at debug level. +func (s *Scope) Debugf(template string, args ...interface{}) { + if s.GetOutputLevel() >= DebugLevel { + msg := template + if len(args) > 0 { + msg = fmt.Sprintf(template, args...) + } + s.emit(zapcore.DebugLevel, s.GetStackTraceLevel() >= ErrorLevel, msg, nil) + } +} + +// DebugEnabled returns whether output of messages using this scope is currently enabled for debug-level output. +func (s *Scope) DebugEnabled() bool { + return s.GetOutputLevel() >= DebugLevel +} + +// Name returns this scope's name. +func (s *Scope) Name() string { + return s.name +} + +// Description returns this scope's description +func (s *Scope) Description() string { + return s.description +} + +const callerSkipOffset = 2 + +func (s *Scope) emit(level zapcore.Level, dumpStack bool, msg string, fields []zapcore.Field) { + e := zapcore.Entry{ + Message: msg, + Level: level, + Time: time.Now(), + LoggerName: s.nameToEmit, + } + + if s.GetLogCallers() { + e.Caller = zapcore.NewEntryCaller(runtime.Caller(s.callerSkip + callerSkipOffset)) + } + + if dumpStack { + e.Stack = zap.Stack("").String + } + + pt := funcs.Load().(patchTable) + if pt.write != nil { + if err := pt.write(e, fields); err != nil { + _, _ = fmt.Fprintf(pt.errorSink, "%v log write error: %v\n", time.Now(), err) + _ = pt.errorSink.Sync() + } + } +} + +// SetOutputLevel adjusts the output level associated with the scope. +func (s *Scope) SetOutputLevel(l Level) { + s.outputLevel.Store(l) +} + +// GetOutputLevel returns the output level associated with the scope. +func (s *Scope) GetOutputLevel() Level { + return s.outputLevel.Load().(Level) +} + +// SetStackTraceLevel adjusts the stack tracing level associated with the scope. +func (s *Scope) SetStackTraceLevel(l Level) { + s.stackTraceLevel.Store(l) +} + +// GetStackTraceLevel returns the stack tracing level associated with the scope. +func (s *Scope) GetStackTraceLevel() Level { + return s.stackTraceLevel.Load().(Level) +} + +// SetLogCallers adjusts the output level associated with the scope. +func (s *Scope) SetLogCallers(logCallers bool) { + s.logCallers.Store(logCallers) +} + +// GetLogCallers returns the output level associated with the scope. +func (s *Scope) GetLogCallers() bool { + return s.logCallers.Load().(bool) +} diff --git a/common/model/instance.go b/common/model/instance.go new file mode 100644 index 000000000..6f03a6687 --- /dev/null +++ b/common/model/instance.go @@ -0,0 +1,302 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 model + +import ( + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/ptypes/wrappers" + "time" +) + +// 组合了api的Instance对象 +type Instance struct { + Proto *api.Instance + ServiceID string + ServicePlatformID string + Valid bool + ModifyTime time.Time +} + +// get id +func (i *Instance) ID() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetId().GetValue() +} + +// get service +func (i *Instance) Service() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetService().GetValue() +} + +// get namespace +func (i *Instance) Namespace() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetNamespace().GetValue() +} + +// get vpcid +func (i *Instance) VpcID() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetVpcId().GetValue() +} + +// get host +func (i *Instance) Host() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetHost().GetValue() +} + +// get port +func (i *Instance) Port() uint32 { + if i.Proto == nil { + return 0 + } + return i.Proto.GetPort().GetValue() +} + +// get protocol +func (i *Instance) Protocol() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetProtocol().GetValue() +} + +// get version +func (i *Instance) Version() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetVersion().GetValue() +} + +// get priority +func (i *Instance) Priority() uint32 { + if i.Proto == nil { + return 0 + } + return i.Proto.GetPriority().GetValue() +} + +// get weight +func (i *Instance) Weight() uint32 { + if i.Proto == nil { + return 0 + } + return i.Proto.GetWeight().GetValue() +} + +// get enable health check +func (i *Instance) EnableHealthCheck() bool { + if i.Proto == nil { + return false + } + return i.Proto.GetEnableHealthCheck().GetValue() +} + +// get health check +func (i *Instance) HealthCheck() *api.HealthCheck { + if i.Proto == nil { + return nil + } + return i.Proto.GetHealthCheck() +} + +// get healthy +func (i *Instance) Healthy() bool { + if i.Proto == nil { + return false + } + return i.Proto.GetHealthy().GetValue() +} + +// get isolate +func (i *Instance) Isolate() bool { + if i.Proto == nil { + return false + } + return i.Proto.GetIsolate().GetValue() +} + +// get location +func (i *Instance) Location() *api.Location { + if i.Proto == nil { + return nil + } + return i.Proto.GetLocation() +} + +// get metadata +func (i *Instance) Metadata() map[string]string { + if i.Proto == nil { + return nil + } + return i.Proto.GetMetadata() +} + +// get logic set +func (i *Instance) LogicSet() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetLogicSet().GetValue() +} + +// get ctime +func (i *Instance) Ctime() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetCtime().GetValue() +} + +// get mtime +func (i *Instance) Mtime() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetMtime().GetValue() +} + +// get revision +func (i *Instance) Revision() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetRevision().GetValue() +} + +// get service token +func (i *Instance) ServiceToken() string { + if i.Proto == nil { + return "" + } + return i.Proto.GetServiceToken().GetValue() +} + +// malloc proto if proto is null +func (i *Instance) MallocProto() { + if i.Proto == nil { + i.Proto = &api.Instance{} + } +} + +// 对应store层(database)的对象 +type InstanceStore struct { + ID string + ServiceID string + Host string + VpcID string + Port uint32 + Protocol string + Version string + HealthStatus int + Isolate int + Weight uint32 + EnableHealthCheck int + CheckType int32 + TTL uint32 + Priority uint32 + Revision string + LogicSet string + Region string + Zone string + Campus string + Meta map[string]string + Flag int + CreateTime int64 + ModifyTime int64 +} + +// 包含服务名的store信息 +type ExpandInstanceStore struct { + ServiceName string + Namespace string + ServiceToken string + ServicePlatformID string + ServiceInstance *InstanceStore +} + +// store的数据转换为组合了api的数据结构 +func Store2Instance(is *InstanceStore) *Instance { + ins := &Instance{ + Proto: &api.Instance{ + Id: &wrappers.StringValue{Value: is.ID}, + VpcId: &wrappers.StringValue{Value: is.VpcID}, + Host: &wrappers.StringValue{Value: is.Host}, + Port: &wrappers.UInt32Value{Value: is.Port}, + Protocol: &wrappers.StringValue{Value: is.Protocol}, + Version: &wrappers.StringValue{Value: is.Version}, + Priority: &wrappers.UInt32Value{Value: is.Priority}, + Weight: &wrappers.UInt32Value{Value: is.Weight}, + EnableHealthCheck: &wrappers.BoolValue{Value: int2bool(is.EnableHealthCheck)}, + Healthy: &wrappers.BoolValue{Value: int2bool(is.HealthStatus)}, + Isolate: &wrappers.BoolValue{Value: int2bool(is.Isolate)}, + Metadata: is.Meta, + LogicSet: &wrappers.StringValue{Value: is.LogicSet}, + Ctime: &wrappers.StringValue{Value: int64Time2String(is.CreateTime)}, + Mtime: &wrappers.StringValue{Value: int64Time2String(is.ModifyTime)}, + Revision: &wrappers.StringValue{Value: is.Revision}, + }, + ServiceID: is.ServiceID, + Valid: flag2valid(is.Flag), + ModifyTime: time.Unix(is.ModifyTime, 0), + } + // 如果不存在checkType,即checkType==-1。HealthCheck置为nil + if is.CheckType != -1 { + ins.Proto.HealthCheck = &api.HealthCheck{ + Type: api.HealthCheck_HealthCheckType(is.CheckType), + Heartbeat: &api.HeartbeatHealthCheck{ + Ttl: &wrappers.UInt32Value{Value: is.TTL}, + }, + } + } + // 如果location不为空,那么填充一下location + if is.Region != "" { + ins.Proto.Location = &api.Location{ + Region: &wrappers.StringValue{Value: is.Region}, + Zone: &wrappers.StringValue{Value: is.Zone}, + Campus: &wrappers.StringValue{Value: is.Campus}, + } + } + + return ins +} + +// 扩展store转换 +func ExpandStore2Instance(es *ExpandInstanceStore) *Instance { + out := Store2Instance(es.ServiceInstance) + out.Proto.Service = &wrappers.StringValue{Value: es.ServiceName} + out.Proto.Namespace = &wrappers.StringValue{Value: es.Namespace} + if es.ServiceToken != "" { + out.Proto.ServiceToken = &wrappers.StringValue{Value: es.ServiceToken} + } + out.ServicePlatformID = es.ServicePlatformID + return out +} diff --git a/common/model/l5.go b/common/model/l5.go new file mode 100644 index 000000000..91e01a00b --- /dev/null +++ b/common/model/l5.go @@ -0,0 +1,99 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 model + +/** + * @brief 访问关系 + */ +type Route struct { + IP uint32 + ModID uint32 + CmdID uint32 + SetID string + Valid bool + Flow uint32 +} + +/** + * @brief 有状态规则路由策略信息 + */ +type Policy struct { + ModID uint32 + Div uint32 + Mod uint32 + Valid bool + Flow uint32 +} + +/** + * @brief 有状态规则路由分段信息 + */ +type Section struct { + ModID uint32 + From uint32 + To uint32 + Xid uint32 + Valid bool + Flow uint32 +} + +/** + * @brief IP的区域信息 + */ +type IPConfig struct { + IP uint32 + AreaID uint32 + CityID uint32 + IdcID uint32 + Valid bool + Flow uint32 +} + +/** + * @brief sid信息 + */ +type Sid struct { + ModID uint32 + CmdID uint32 +} + +/** + * @brief 被调信息,对应t_server+t_ip_config + */ +type Callee struct { + ModID uint32 + CmdID uint32 + SetID string + IP uint32 + Port uint32 + Weight uint32 + Location *Location + //AreaID uint32 + //CityID uint32 + //IdcID uint32 +} + +/** + * @brief sid信息,对应t_sid表 + */ +type SidConfig struct { + ModID uint32 + CmdID uint32 + Name string + Policy uint32 +} diff --git a/common/model/naming.go b/common/model/naming.go new file mode 100644 index 000000000..410ddca3f --- /dev/null +++ b/common/model/naming.go @@ -0,0 +1,416 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 model + +import ( + "time" + + v1 "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/ptypes/wrappers" +) + +/** + * @brief 命名空间结构体 + */ +type Namespace struct { + Name string + Comment string + Token string + Owner string + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 业务集 + */ +type Business struct { + ID string + Name string + Token string + Owner string + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 服务数据 + */ +type Service struct { + ID string + Name string + Namespace string + Business string + Ports string + Meta map[string]string + Comment string + Department string + CmdbMod1 string + CmdbMod2 string + CmdbMod3 string + Token string + Owner string + Revision string + Reference string + ReferFilter string + PlatformID string + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 服务名 + */ +type ServiceKey struct { + Namespace string + Name string +} + +// 便捷函数封装 +func (s *Service) IsAlias() bool { + if s.Reference != "" { + return true + } + + return false +} + +// 服务别名结构体 +type ServiceAlias struct { + ID string + Alias string + ServiceID string + Service string + Namespace string + Owner string + Comment string + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 服务下实例的权重类型 + */ +type WeightType uint32 + +const ( + // 动态权重 + WEIGHTDYNAMIC WeightType = 0 + + // 静态权重 + WEIGHTSTATIC WeightType = 1 +) + +var WeightString = map[WeightType]string{ + WEIGHTDYNAMIC: "dynamic", + WEIGHTSTATIC: "static", +} + +var WeightEnum = map[string]WeightType{ + "dynamic": WEIGHTDYNAMIC, + "static": WEIGHTSTATIC, +} + +/** + * @brief 地域信息,对应数据库字段 + */ +type LocationStore struct { + IP string + Region string + Zone string + Campus string + RegionID uint32 + ZoneID uint32 + CampusID uint32 + Flag int + ModifyTime int64 +} + +// cmdb信息,对应内存结构体 +type Location struct { + Proto *v1.Location + RegionID uint32 + ZoneID uint32 + CampusID uint32 + Valid bool +} + +// 转成内存数据结构 +func Store2Location(s *LocationStore) *Location { + return &Location{ + Proto: &v1.Location{ + Region: &wrappers.StringValue{Value: s.Region}, + Zone: &wrappers.StringValue{Value: s.Zone}, + Campus: &wrappers.StringValue{Value: s.Campus}, + }, + RegionID: s.RegionID, + ZoneID: s.ZoneID, + CampusID: s.CampusID, + Valid: flag2valid(s.Flag), + } +} + +/** + * @brief 客户端上报信息表 + */ +type Client struct { + VpcID string + Host string + Typ int + Version string + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 路由配置 + */ +type RoutingConfig struct { + ID string + InBounds string + OutBounds string + Revision string + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 路由配置的扩展结构体 + */ +type ExtendRoutingConfig struct { + ServiceName string + NamespaceName string + Config *RoutingConfig +} + +/** + * @brief 限流规则 + */ +type RateLimit struct { + ID string + ServiceID string + ClusterID string + Labels string + Priority uint32 + Rule string + Revision string + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 包含服务信息的限流规则 + */ +type ExtendRateLimit struct { + ServiceName string + NamespaceName string + RateLimit *RateLimit +} + +/** + * @brief 包含最新版本号的限流规则 + */ +type RateLimitRevision struct { + ServiceID string + LastRevision string +} + +/** + * @brief 熔断规则 + */ +type CircuitBreaker struct { + ID string + Version string + Name string + Namespace string + Business string + Department string + Comment string + Inbounds string + Outbounds string + Token string + Owner string + Revision string + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 与服务关系绑定的熔断规则 + */ +type ServiceWithCircuitBreaker struct { + ServiceID string + CircuitBreaker *CircuitBreaker + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 熔断规则绑定关系 + */ +type CircuitBreakerRelation struct { + ServiceID string + RuleID string + RuleVersion string + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +/** + * @brief 返回给控制台的熔断规则及服务数据 + */ +type CircuitBreakerDetail struct { + Total uint32 + CircuitBreakerInfos []*CircuitBreakerInfo +} + +/** + * @brief 熔断规则及绑定服务 + */ +type CircuitBreakerInfo struct { + CircuitBreaker *CircuitBreaker + Services []*Service +} + +/** + * @brief 平台信息 + */ +type Platform struct { + ID string + Name string + Domain string + QPS uint32 + Token string + Owner string + Department string + Comment string + Valid bool + CreateTime time.Time + ModifyTime time.Time +} + +// 整数转换为bool值 +func int2bool(entry int) bool { + if entry == 0 { + return false + } + return true +} + +// store的flag转换为valid +// flag==1为无效,其他情况为有效 +func flag2valid(flag int) bool { + if flag == 1 { + return false + } + return true + +} + +// int64的时间戳转为字符串时间 +func int64Time2String(t int64) string { + return time.Unix(t, 0).Format("2006-01-02 15:04:05") +} + +// 操作类型 +type OperationType string + +// 定义包含的操作类型 +const ( + // 新建 + OCreate OperationType = "Create" + + // 删除 + ODelete OperationType = "Delete" + + // 更新 + OUpdate OperationType = "Update" + + // 更新隔离状态 + OUpdateIsolate OperationType = "UpdateIsolate" + + // 查看token + OGetToken OperationType = "GetToken" // nolint + + // 更新token + OUpdateToken OperationType = "UpdateToken" // nolint +) + +// 操作资源 +type Resource string + +// 定义包含的资源类型 +const ( + RNamespace Resource = "Namespace" + RService Resource = "Service" + RRouting Resource = "Routing" + RInstance Resource = "Instance" + RRateLimit Resource = "RateLimit" + RMeshResource Resource = "MeshResource" + RMesh Resource = "Mesh" + RMeshService Resource = "MeshService" + RFluxRateLimit Resource = "FluxRateLimit" +) + +// 资源类型 +type ResourceType int + +const ( + // 网格类型资源 + MeshType ResourceType = 0 + // 北极星服务类型资源 + ServiceType ResourceType = 1 +) + +var ResourceTypeMap = map[Resource]ResourceType{ + RNamespace: ServiceType, + RService: ServiceType, + RRouting: ServiceType, + RInstance: ServiceType, + RRateLimit: ServiceType, + RMesh: MeshType, + RMeshResource: MeshType, + RMeshService: MeshType, +} + +// 获取资源的大类型 +func GetResourceType(r Resource) ResourceType { + return ResourceTypeMap[r] +} + +// 操作记录entry +type RecordEntry struct { + ResourceType Resource + OperationType OperationType + Namespace string + Service string + MeshID string + MeshName string + Context string + Operator string + Revision string + CreateTime time.Time +} diff --git a/common/redispool/redisPool.go b/common/redispool/redisPool.go new file mode 100644 index 000000000..73c9dd1d0 --- /dev/null +++ b/common/redispool/redisPool.go @@ -0,0 +1,356 @@ +/* + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2020. Lorem THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 redispool + +import ( + "fmt" + "github.com/gomodule/redigo/redis" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "hash/crc32" + "math/rand" + "strconv" + "sync" + "sync/atomic" + "time" +) + +const ( + Get = 0 + Set = 1 + Del = 2 +) + +/** + * @brief ckv任务请求结构体 + */ +type Task struct { + taskType int + id string + status int + beatTime int64 + respCh chan *Resp +} + +/** + * @brief ckv任务结果 + */ +type Resp struct { + Value string + Err error + Local bool +} + +/** + * @brief ckv连接池元数据 + */ +type MetaData struct { + insConnNum int + kvPasswd string + localHost string + MaxIdle int + IdleTimeout int +} + +/** + * @brief ckv节点结构体 + */ +type Instance struct { + // 节点在连接池中的序号 + index uint32 + addr string + redisPool *redis.Pool + ch []chan *Task + stopCh chan bool +} + +/** + * @brief ckv连接池结构体 + */ +type Pool struct { + mu sync.Mutex + meta *MetaData + instances []*Instance + instanceNum int32 +} + +/** + * @brief 初始化一个redis连接池实例 + */ +func NewPool(insConnNum int, kvPasswd, localHost string, redisInstances []*model.Instance, + maxIdle, idleTimeout int) (*Pool, error) { + var instances []*Instance + if len(redisInstances) > 0 { + for _, instance := range redisInstances { + instance := &Instance{ + redisPool: genRedisPool(insConnNum, kvPasswd, instance, maxIdle, idleTimeout), + stopCh: make(chan bool), + } + instance.ch = make([]chan *Task, 0, 100*insConnNum) + for i := 0; i < 100*insConnNum; i++ { + instance.ch = append(instance.ch, make(chan *Task)) + } + rand.Seed(time.Now().Unix()) + // 从一个随机位置开始,防止所有server都从一个ckv开始 + instance.index = uint32(rand.Intn(100 * insConnNum)) + instances = append(instances, instance) + } + } + + pool := &Pool{ + meta: &MetaData{ + insConnNum: insConnNum, + kvPasswd: kvPasswd, + localHost: localHost, + MaxIdle: maxIdle, + IdleTimeout: idleTimeout, + }, + instances: instances, + instanceNum: int32(len(redisInstances)), + } + + return pool, nil +} + +func genRedisPool(insConnNum int, kvPasswd string, instance *model.Instance, maxIdle, idleTimeout int) *redis.Pool { + pool := &redis.Pool{ + MaxIdle: maxIdle, + MaxActive: 0, + IdleTimeout: time.Duration(idleTimeout), + Dial: func() (redis.Conn, error) { + conn, err := redis.Dial("tcp", instance.Host()+":"+ + strconv.Itoa(int(instance.Port())), redis.DialPassword(kvPasswd)) + if err != nil { + log.Infof("ERROR: fail init redis: %s", err.Error()) + return nil, err + } + return conn, err + }, + TestOnBorrow: func(c redis.Conn, t time.Time) error { + _, err := c.Do("PING") + return err + }, + } + return pool +} + +/** + * @brief 更新ckv连接池中的节点 + * 重新建立ckv连接 + * 对业务无影响 + */ +func (p *Pool) Update(newKvInstances []*model.Instance) error { + p.mu.Lock() + defer p.mu.Unlock() + + change := len(newKvInstances) - int(atomic.LoadInt32(&p.instanceNum)) + log.Infof("[ckv] update, old ins num:%d, new ins num:%d, change:%d", p.instanceNum, len(newKvInstances), change) + + // 新建一个pool.instances数组 + var instances []*Instance + for _, instance := range newKvInstances { + instance := &Instance{ + redisPool: genRedisPool(p.meta.insConnNum, p.meta.kvPasswd, instance, p.meta.MaxIdle, p.meta.IdleTimeout), + stopCh: make(chan bool), + } + instance.ch = make([]chan *Task, 0, 100*p.meta.insConnNum) + for i := 0; i < 100*p.meta.insConnNum; i++ { + instance.ch = append(instance.ch, make(chan *Task)) + } + instance.index = uint32(rand.Intn(100 * p.meta.insConnNum)) + instances = append(instances, instance) + } + + // 关闭前一个连接池 + for i := 0; i < len(p.instances); i++ { + close(p.instances[i].stopCh) + time.Sleep(10 * time.Millisecond) + for j := 0; j < len(p.instances[i].ch); j++ { + close(p.instances[i].ch[j]) + } + err := p.instances[i].redisPool.Close() + if err != nil { + log.Errorf("close redis pool :%s", err) + } + } + + time.Sleep(10 * time.Millisecond) + // 结构体属性重新赋值,并重新开始消费 + p.instances = instances + atomic.StoreInt32(&p.instanceNum, int32(len(p.instances))) + + for i := 0; i < len(p.instances); i++ { + for k := 0; k < len(p.instances[i].ch); k++ { + go p.worker(i, k) + } + } + + log.Infof("[redis] update success, node num:%d", len(p.instances)) + + return nil +} + +func (p *Pool) checkHasKvInstances(ch chan *Resp) bool { + if atomic.LoadInt32(&p.instanceNum) == 0 { + go func() { + ch <- &Resp{ + Local: true, + } + }() + return true + } + return false +} + +/** + * @brief 使用连接池,向redis发起Get请求 + */ +func (p *Pool) Get(id string, ch chan *Resp) { // nolint + if p.checkHasKvInstances(ch) { + return + } + task := &Task{ + taskType: Get, + id: id, + respCh: ch, + } + + insIndex, chIndex := p.genInsChIndex(id) + p.instances[insIndex].ch[chIndex] <- task +} + +/** + * @brief 使用连接池,向redis发起Set请求 + */ +func (p *Pool) Set(id string, status int, beatTime int64, ch chan *Resp) { // nolint + if p.checkHasKvInstances(ch) { + return + } + task := &Task{ + taskType: Set, + id: id, + status: status, + beatTime: beatTime, + respCh: ch, + } + + insIndex, chIndex := p.genInsChIndex(id) + p.instances[insIndex].ch[chIndex] <- task +} + +/** + * @brief 使用连接池,向redis发起Del请求 + */ +func (p *Pool) Del(id string, ch chan *Resp) { // nolint + task := &Task{ + taskType: Del, + id: id, + respCh: ch, + } + + insIndex, chIndex := p.genInsChIndex(id) + p.instances[insIndex].ch[chIndex] <- task +} + +/** + * @brief 生成index公共方法 + */ +func (p *Pool) genInsChIndex(id string) (int, uint32) { + insIndex := String(id) % int(atomic.LoadInt32(&p.instanceNum)) + + chIndex := atomic.AddUint32(&p.instances[insIndex].index, 1) % uint32(p.meta.insConnNum*100) + return insIndex, chIndex +} + +/** + * @brief 启动ckv连接池工作 + */ +func (p *Pool) Start() { + p.mu.Lock() + for i := 0; i < len(p.instances); i++ { + for k := 0; k < len(p.instances[i].ch); k++ { + go p.worker(i, k) + } + } + p.mu.Unlock() + log.Infof("[redis] redis pool start") +} + +/** + * @brief 接收任务worker + */ +func (p *Pool) worker(instanceIndex, chIndex int) { + for { + select { + case task := <-p.instances[instanceIndex].ch[chIndex]: + p.handleTask(task, instanceIndex) + case <-p.instances[instanceIndex].stopCh: + return + } + } +} + +/** + * @brief 任务处理函数 + */ +func (p *Pool) handleTask(task *Task, index int) { + if task == nil { + log.Errorf("receive nil task") + return + } + con := p.instances[index].redisPool.Get() + defer con.Close() + var resp Resp + switch task.taskType { + case Get: + value, err := redis.String(con.Do("GET", task.id)) + if err != nil { + resp.Err = err + } else { + resp.Value = value + } + task.respCh <- &resp + case Set: + value := fmt.Sprintf("%d:%d:%s", task.status, task.beatTime, p.meta.localHost) + _, err := con.Do("SET", task.id, value) + if err != nil { + resp.Err = err + } + task.respCh <- &resp + case Del: + _, err := con.Do("DEL", task.id) + if err != nil { + resp.Err = err + } + task.respCh <- &resp + default: + log.Errorf("[ckv] set key:%s type:%d wrong", task.id, task.taskType) + } +} + +// 字符串转hash值 +func String(s string) int { + v := int(crc32.ChecksumIEEE([]byte(s))) + if v >= 0 { + return v + } + if -v >= 0 { + return -v + } + return 0 +} diff --git a/common/timewheel/README.md b/common/timewheel/README.md new file mode 100644 index 000000000..dc9c5e674 --- /dev/null +++ b/common/timewheel/README.md @@ -0,0 +1,52 @@ +# timewheel + +为心跳上报定制实现的、线程安全的多层时间轮,简化功能以追求更好的性能。 + +基于链表和ticker实现。 +只有插入操作:插入任务后就必须执行。 + +## 测试/压测记录 +覆盖率: 90%+ + +1. 功能测试:正常 + +2. 压力测试: + 16c 16g机器 + + 开启5w个协程并发往同一个slot加10w个任务,单个操作用时280ns + + ``` + goos: windows + goarch: amd64 + pkg: github.com/polarismesh/polaris-server/common/timewheel + BenchmarkAddTask1-8 100000 280 ns/op 103 B/op 2 allocs/op + PASS + ``` + + 开启16w个协程并发往同一个slot加500w个任务,单个操作用时376ns + + ``` + goos: windows + goarch: amd64 + pkg: github.com/polarismesh/polaris-server/common/timewheel + BenchmarkAddTask1-8 5000000 376 ns/op 97 B/op 2 allocs/op + PASS + ``` + + 对比nosix/timewheel: + ``` + goos: linux + goarch: amd64 + BenchmarkAddTask1-8 100000 2021 ns/op 721 B/op 3 allocs/op + --- BENCH: BenchmarkAddTask1-8 + timewheel_test.go:40: N:100000, use time:255.514068ms + timewheel_test.go:40: N:100000, use time:324.360456ms + timewheel_test.go:40: N:100000, use time:402.377702ms + timewheel_test.go:40: N:100000, use time:419.118132ms + timewheel_test.go:40: N:100000, use time:195.719517ms + timewheel_test.go:40: N:100000, use time:215.3815ms + timewheel_test.go:40: N:100000, use time:176.733241ms + timewheel_test.go:40: N:100000, use time:188.846803ms + timewheel_test.go:40: N:100000, use time:164.038559ms + timewheel_test.go:40: N:100000, use time:200.684048ms + ``` \ No newline at end of file diff --git a/common/timewheel/timewheel.go b/common/timewheel/timewheel.go new file mode 100644 index 000000000..ddc231f7a --- /dev/null +++ b/common/timewheel/timewheel.go @@ -0,0 +1,191 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 timewheel + +import ( + "container/list" + "errors" + "sync" + "time" + + "github.com/polarismesh/polaris-server/common/log" +) + +// a simple routine-safe timewheel, can only add task +// not support update/delete + +/** + * @brief 时间轮结构体 + */ +type TimeWheel struct { + name string + interval time.Duration + ticker *time.Ticker + currentPos int + slots []*list.List + locks []sync.Mutex + slotNum int + stopCh chan bool +} + +/** + * @brief 时间轮回调函数定义 + */ +type Callback func(interface{}) + +/** + * @brief 时间轮任务结构体 + */ +type Task struct { + delayTime time.Duration + circle int + callback Callback + taskData interface{} +} + +/** + * @brief 初始化时间轮 + */ +func New(interval time.Duration, slotNum int, name string) *TimeWheel { + if interval <= 0 || slotNum <= 0 { + return nil + } + + timewheel := &TimeWheel{ + name: name, + interval: interval, + slots: make([]*list.List, slotNum), + locks: make([]sync.Mutex, slotNum), + currentPos: 0, + slotNum: slotNum, + stopCh: make(chan bool), + } + + for i := 0; i < slotNum; i++ { + timewheel.slots[i] = list.New() + } + + return timewheel +} + +/** + * @brief 启动时间轮 + */ +func (tw *TimeWheel) Start() { + tw.ticker = time.NewTicker(tw.interval) + go tw.start() +} + +/** + * @brief 停止时间轮 + */ +func (tw *TimeWheel) Stop() { + tw.stopCh <- true +} + +/** + * @brief 时间轮运转函数 + */ +func (tw *TimeWheel) start() { + for { + select { + case <-tw.ticker.C: + tw.taskRunner() + case <-tw.stopCh: + tw.ticker.Stop() + return + } + } +} + +/** + * @brief 时间轮到期处理函数 + */ +func (tw *TimeWheel) taskRunner() { + now := time.Now() + + l := tw.slots[tw.currentPos] + tw.locks[tw.currentPos].Lock() + execNum := tw.scanAddRunTask(l) + tw.locks[tw.currentPos].Unlock() + + duration := time.Now().Sub(now) + log.Debugf("%s task start time:%d, use time:%v, exec num:%d", tw.name, now.Unix(), duration, execNum) + if tw.currentPos == tw.slotNum-1 { + tw.currentPos = 0 + } else { + tw.currentPos++ + } +} + +/** + * @brief 新增时间轮任务 + */ +func (tw *TimeWheel) AddTask(delayTime time.Duration, data interface{}, cb Callback) error { + if delayTime <= 0 { + return errors.New("illegal task delayTime") + } + + task := &Task{delayTime: delayTime, taskData: data, callback: cb} + pos, circle := tw.getSlots(task.delayTime) + task.circle = circle + + tw.locks[pos].Lock() + tw.slots[pos].PushBack(task) + tw.locks[pos].Unlock() + + return nil +} + +/** + * @brief 运行时间轮任务 + */ +func (tw *TimeWheel) scanAddRunTask(l *list.List) int { + if l == nil { + return 0 + } + + execNum := l.Len() + for item := l.Front(); item != nil; { + task := item.Value.(*Task) + + if task.circle > 0 { + task.circle-- + item = item.Next() + continue + } + + go task.callback(task.taskData) + next := item.Next() + l.Remove(item) + item = next + } + + return execNum +} + +/** + * @brief 获取当前时间轮位置 + */ +func (tw *TimeWheel) getSlots(d time.Duration) (pos int, circle int) { + delayTime := int(d.Seconds()) + interval := int(tw.interval.Seconds()) + circle = int(delayTime / interval / tw.slotNum) + pos = int(tw.currentPos+delayTime/interval) % tw.slotNum + return +} diff --git a/common/timewheel/timewheel_test.go b/common/timewheel/timewheel_test.go new file mode 100644 index 000000000..ab8ca0d33 --- /dev/null +++ b/common/timewheel/timewheel_test.go @@ -0,0 +1,215 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 timewheel + +import ( + "fmt" + "strconv" + "testing" + "time" +) + +// test timewheel task run +func TestTaskRun1(t *testing.T) { + tw := New(time.Second, 5, "test tw") + tw.Start() + callback := func(data interface{}) { + fmt.Println(data.(string)) + } + + t.Logf("add task time:%d", time.Now().Unix()) + for i := 0; i < 10; i++ { + tw.AddTask(time.Second, "polaris 1s "+strconv.Itoa(i), callback) + } + t.Logf("add task time end:%d", time.Now().Unix()) + + time.Sleep(2 * time.Second) + t.Logf("add task time:%d", time.Now().Unix()) + for i := 0; i < 10; i++ { + tw.AddTask(3*time.Second, "polaris 3s "+strconv.Itoa(i), callback) + } + t.Logf("add task time end:%d", time.Now().Unix()) + + time.Sleep(5 * time.Second) + t.Logf("add task time:%d", time.Now().Unix()) + for i := 0; i < 10; i++ { + tw.AddTask(10*time.Second, "polaris 10s "+strconv.Itoa(i), callback) + } + t.Logf("add task time end:%d", time.Now().Unix()) + time.Sleep(15 * time.Second) + + tw.Stop() +} + +// test timewheel task run +func TestTaskRun2(t *testing.T) { + tw := New(time.Second, 5, "test tw") + tw.Start() + callback := func(data interface{}) { + now := time.Now().Unix() + if now != 3123124121 { + _ = fmt.Sprintf("%s%+v", data.(string), time.Now()) + } else { + _ = fmt.Sprintf("%s%+v", data.(string), time.Now()) + } + } + + t.Logf("add task time:%d", time.Now().Unix()) + for i := 0; i < 50000; i++ { + tw.AddTask(3*time.Second, "polaris 3s "+strconv.Itoa(i), callback) + } + t.Logf("add task time end:%d", time.Now().Unix()) + time.Sleep(8 * time.Second) + + tw.Stop() +} + +// test timewheel task run +func TestTaskRunBoth(t *testing.T) { + tw := New(time.Second, 5, "test tw") + tw.Start() + callback := func(data interface{}) { + fmt.Println(data.(string)) + } + + for i := 0; i < 10; i++ { + go tw.AddTask(time.Second, "polaris 1s_"+strconv.Itoa(i), callback) + go tw.AddTask(3*time.Second, "polaris 3s_"+strconv.Itoa(i), callback) + go tw.AddTask(7*time.Second, "polaris 10s_"+strconv.Itoa(i), callback) + } + time.Sleep(12 * time.Second) + tw.Stop() +} + +// timewheel task struct +type Info struct { + id string + ttl int + ms int64 +} + +// bench-test timewheel task add +func BenchmarkAddTask1(t *testing.B) { + tw := New(time.Second, 5, "test tw") + info := &Info{ + "abcdefghijklmnopqrstuvwxyz", + 2, + time.Now().Unix(), + } + + callback := func(data interface{}) { + dataInfo := data.(*Info) + if dataInfo.ms < time.Now().Unix() { + fmt.Println("overtime") + } + } + + //t.N = 100000 + t.SetParallelism(10000) + t.RunParallel(func(pb *testing.PB) { + for pb.Next() { + tw.AddTask(2*time.Second, info, callback) + } + }) +} + +// bench-test timewheel task add +// use 2 slot +func BenchmarkAddTask2(t *testing.B) { + tw := New(time.Second, 5, "test tw") + info := &Info{ + "abcdefghijklmnopqrstuvwxyz", + 2, + time.Now().Unix(), + } + + callback := func(data interface{}) { + dataInfo := data.(*Info) + if dataInfo.ms < time.Now().Unix() { + fmt.Println("overtime") + } + } + + t.SetParallelism(10000) + t.RunParallel(func(pb *testing.PB) { + for pb.Next() { + tw.AddTask(2*time.Second, info, callback) + tw.AddTask(3*time.Second, info, callback) + } + }) +} + +// bench-test timewheel task add +//use 2 timewheel +func BenchmarkAddTask3(t *testing.B) { + tw := New(time.Second, 5, "test tw") + tw2 := New(time.Second, 5, "test tw") + + info := &Info{ + "abcdefghijklmnopqrstuvwxyz", + 2, + time.Now().Unix(), + } + + callback := func(data interface{}) { + dataInfo := data.(*Info) + if dataInfo.ms < time.Now().Unix() { + fmt.Println("overtime") + } + } + + t.SetParallelism(10000) + t.RunParallel(func(pb *testing.PB) { + for pb.Next() { + tw.AddTask(2*time.Second, info, callback) + tw2.AddTask(2*time.Second, info, callback) + } + }) +} + +// result:select random get ch +func TestSelect(t *testing.T) { + ch := make(chan int, 20) + ch2 := make(chan int, 20) + stopCh := make(chan bool) + + go func() { + for i := 0; i < 10; i++ { + ch <- i + ch2 <- i + 20 + } + time.Sleep(10 * time.Second) + close(stopCh) + }() + + for { + select { + case i := <-ch: + fmt.Println(i) + time.Sleep(time.Second) + case i := <-ch2: + fmt.Println(i) + time.Sleep(time.Second) + case <-stopCh: + for i := range ch { + fmt.Println(i) + } + return + } + } +} diff --git a/common/utils/cl5.go b/common/utils/cl5.go new file mode 100644 index 000000000..35de410ba --- /dev/null +++ b/common/utils/cl5.go @@ -0,0 +1,65 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 utils + +import ( + "errors" + "fmt" + "github.com/polarismesh/polaris-server/common/model" + "strconv" + "strings" +) + +// cl5集群的ctx的key +type Cl5ServerCluster struct{} + +// cl5.server的协议ctx +type Cl5ServerProtocol struct{} + +// Sid结构体,序列化转为sid字符串 +func MarshalSid(sid *model.Sid) string { + return fmt.Sprintf("%d:%d", sid.ModID, sid.CmdID) +} + +// mod cmd转为sid +func MarshalModCmd(modID uint32, cmdID uint32) string { + return fmt.Sprintf("%d:%d", modID, cmdID) +} + +// 把sid字符串反序列化为结构体Sid +func UnmarshalSid(sidStr string) (*model.Sid, error) { + items := strings.Split(sidStr, ":") + if len(items) != 2 { + return nil, errors.New("invalid format sid string") + } + + modID, err := strconv.ParseUint(items[0], 10, 32) + if err != nil { + return nil, err + } + cmdID, err := strconv.ParseUint(items[1], 10, 32) + if err != nil { + return nil, err + } + + out := &model.Sid{ + ModID: uint32(modID), + CmdID: uint32(cmdID), + } + return out, nil +} diff --git a/common/utils/const.go b/common/utils/const.go new file mode 100644 index 000000000..4431f5a5f --- /dev/null +++ b/common/utils/const.go @@ -0,0 +1,24 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 utils + +const ( + PolarisCode = "X-Polaris-Code" + PolarisMessage = "X-Polaris-Message" + PolarisRequestID = "Request-Id" +) diff --git a/common/utils/context.go b/common/utils/context.go new file mode 100644 index 000000000..d837145bf --- /dev/null +++ b/common/utils/context.go @@ -0,0 +1,44 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 utils + +import "context" + +type StringContext string + +// 存储localhost的ctx +type localhostCtx struct{} + +// 存储localhost +func WithLocalhost(ctx context.Context, localhost string) context.Context { + return context.WithValue(ctx, localhostCtx{}, localhost) +} + +// 获取localhost +func ValueLocalhost(ctx context.Context) string { + if ctx == nil { + return "" + } + + value, ok := ctx.Value(localhostCtx{}).(string) + if !ok { + return "" + } + + return value +} diff --git a/common/utils/funcs.go b/common/utils/funcs.go new file mode 100644 index 000000000..b21a129d3 --- /dev/null +++ b/common/utils/funcs.go @@ -0,0 +1,90 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 utils + +import ( + "encoding/hex" + uuid "github.com/google/uuid" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/model" + "strings" +) + +// 创建存储层服务实例模型 +func CreateInstanceModel(serviceID string, req *api.Instance) *model.Instance { + // 默认为健康的 + healthy := true + if req.GetHealthy() != nil { + healthy = req.GetHealthy().GetValue() + } + + // 默认为不隔离的 + isolate := false + if req.GetIsolate() != nil { + isolate = req.GetIsolate().GetValue() + } + + // 权重默认是100 + var weight uint32 = 100 + if req.GetWeight() != nil { + weight = req.GetWeight().GetValue() + } + + instance := &model.Instance{ + ServiceID: serviceID, + } + uuidBytes := uuid.New() + protoIns := &api.Instance{ + Id: req.GetId(), + Host: NewStringValue(strings.TrimSpace(req.GetHost().GetValue())), + VpcId: req.GetVpcId(), + Port: req.GetPort(), + Protocol: req.GetProtocol(), + Version: req.GetVersion(), + Priority: req.GetPriority(), + Weight: NewUInt32Value(weight), + Healthy: NewBoolValue(healthy), + Isolate: NewBoolValue(isolate), + Location: req.Location, + Metadata: req.Metadata, + LogicSet: req.GetLogicSet(), + Revision: NewStringValue(hex.EncodeToString(uuidBytes[:])), // 更新版本号 + } + + // health Check,healthCheck不能为空,且没有显示把enable_health_check置为false + // 如果create的时候,打开了healthCheck,那么实例模式是unhealthy,必须要一次心跳才会healthy + if req.GetHealthCheck().GetHeartbeat() != nil && + (req.GetEnableHealthCheck() == nil || req.GetEnableHealthCheck().GetValue()) { + protoIns.EnableHealthCheck = NewBoolValue(true) + protoIns.HealthCheck = req.HealthCheck + protoIns.HealthCheck.Type = api.HealthCheck_HEARTBEAT + // ttl range: (0, 60] + ttl := protoIns.GetHealthCheck().GetHeartbeat().GetTtl().GetValue() + if ttl == 0 || ttl > 60 { + if protoIns.HealthCheck.Heartbeat.Ttl == nil { + protoIns.HealthCheck.Heartbeat.Ttl = NewUInt32Value(5) + } + protoIns.HealthCheck.Heartbeat.Ttl.Value = 5 + } + // 开启健康检查,且没有代入健康状态,则健康状态默认都是false + protoIns.Healthy.Value = false + } + + instance.Proto = protoIns + return instance +} diff --git a/common/utils/ptypes.go b/common/utils/ptypes.go new file mode 100644 index 000000000..1b8e5c1f9 --- /dev/null +++ b/common/utils/ptypes.go @@ -0,0 +1,37 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 utils + +import ( + "github.com/golang/protobuf/ptypes/wrappers" +) + +// +func NewStringValue(value string) *wrappers.StringValue { + return &wrappers.StringValue{Value: value} +} + +// +func NewUInt32Value(value uint32) *wrappers.UInt32Value { + return &wrappers.UInt32Value{Value: value} +} + +// +func NewBoolValue(value bool) *wrappers.BoolValue { + return &wrappers.BoolValue{Value: value} +} diff --git a/common/version/version.go b/common/version/version.go new file mode 100644 index 000000000..94a28650b --- /dev/null +++ b/common/version/version.go @@ -0,0 +1,43 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 version + +var ( + Version string + BuildDate string +) + +/** + * @brief 获取版本号 + */ +func Get() string { + if Version == "" { + return "v0.1.0" + } + + return Version +} + +// 获取完整版本号信息,包括时间戳的 +func GetRevision() string { + if Version == "" || BuildDate == "" { + return "v0.1.0" + } + + return Version + "." + BuildDate +} diff --git a/config/README.md b/config/README.md new file mode 100644 index 000000000..df71ccd59 --- /dev/null +++ b/config/README.md @@ -0,0 +1 @@ +# Config Service diff --git a/config/config.go b/config/config.go new file mode 100644 index 000000000..c0098a943 --- /dev/null +++ b/config/config.go @@ -0,0 +1,114 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 config + +import ( + "errors" + "fmt" + "github.com/polarismesh/polaris-server/apiserver" + "github.com/polarismesh/polaris-server/naming" + "github.com/polarismesh/polaris-server/naming/cache" + "os" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/plugin" + "github.com/polarismesh/polaris-server/store" + yaml "gopkg.in/yaml.v2" +) + +/** + * @brief 配置 + */ +type Config struct { + Bootstrap Bootstrap `yaml:"bootstrap"` + APIServers []apiserver.Config `yaml:"apiservers"` + Cache cache.Config `yaml:"cache"` + Naming naming.Config `yaml:"naming"` + Store store.Config `yaml:"store"` + Plugin plugin.Config `yaml:"plugin"` +} + +/** + * @brief 启动引导配置 + */ +type Bootstrap struct { + Logger log.Options + StartInOrder map[string]interface{} `yaml:"startInOrder"` + PolarisService PolarisService `yaml:"polaris_service"` +} + +/** + * @brief polaris-server的自注册配置 + */ +type PolarisService struct { + EnableRegister bool `yaml:"enable_register"` + ProbeAddress string `yaml:"probe_address"` + Isolated bool `yaml:"isolated"` + Services []*Service `yaml:"services"` +} + +/** + * @brief 服务的自注册的配置 + */ +type Service struct { + Name string `yaml:"name"` + Namespace string `yaml:"namespace"` + Protocols []string `yaml:"protocols"` +} + +/** + * @brief 对外提供的apiServers + */ +type APIEntries struct { + Name string `yaml:"name"` + Protocols []string `yaml:"protocols"` +} + +const ( + DefaultPolarisName = "polaris-server" + DefaultPolarisNamespace = "Polaris" + DefaultFilePath = "polaris-server.yaml" +) + +/** + * @brief 加载配置 + */ +func Load(filePath string) (*Config, error) { + if filePath == "" { + err := errors.New("invalid config file path") + fmt.Printf("[ERROR] %v\n", err) + return nil, err + } + + fmt.Printf("[INFO] load config from %v\n", filePath) + + file, err := os.Open(filePath) + if err != nil { + fmt.Printf("[ERROR] %v\n", err) + return nil, err + } + + config := &Config{} + err = yaml.NewDecoder(file).Decode(config) + if err != nil { + fmt.Printf("[ERROR] %v\n", err) + return nil, err + } + + return config, nil +} diff --git a/go.mod b/go.mod new file mode 100644 index 000000000..9e1299f10 --- /dev/null +++ b/go.mod @@ -0,0 +1,39 @@ +module github.com/polarismesh/polaris-server + +go 1.12 + +require ( + github.com/emicklei/go-restful v2.9.6+incompatible + github.com/go-sql-driver/mysql v1.5.0 + github.com/gogo/protobuf v1.3.1 + github.com/golang/mock v1.6.0 + github.com/golang/protobuf v1.3.5 + github.com/gomodule/redigo v2.0.0+incompatible + github.com/google/uuid v1.2.0 + github.com/hashicorp/golang-lru v0.5.3 + github.com/json-iterator/go v1.1.9 // indirect + github.com/mitchellh/mapstructure v1.1.2 + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/natefinch/lumberjack v2.0.0+incompatible + github.com/pkg/errors v0.8.1 + github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945 + github.com/spf13/cobra v0.0.5 + github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/testify v1.4.0 + go.uber.org/atomic v1.5.1 // indirect + go.uber.org/multierr v1.4.0 // indirect + go.uber.org/zap v1.14.0 + golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f // indirect + golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 + golang.org/x/time v0.0.0-20191024005414-555d28b269f0 + google.golang.org/grpc v1.22.0 + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + gopkg.in/yaml.v2 v2.2.8 +) + +replace ( + github.com/golang/protobuf => github.com/golang/protobuf v1.3.4 + google.golang.org/grpc => google.golang.org/grpc v1.22.0 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.2 +) diff --git a/go.sum b/go.sum new file mode 100644 index 000000000..f083dfd31 --- /dev/null +++ b/go.sum @@ -0,0 +1,190 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +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/emicklei/go-restful v2.9.6+incompatible h1:tfrHha8zJ01ywiOEC1miGY8st1/igzWB8OmvPgoYX7w= +github.com/emicklei/go-restful v2.9.6+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +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/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +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/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= +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-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= +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/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= +github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= +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/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +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/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +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-20190710185942-9d28bd7c0945 h1:N8Bg45zpk/UcpNGnfJt2y/3lRWASHNTUET8owPYCgYI= +github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +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.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= +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 v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +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 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM= +go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +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.14.0 h1:/pduUoebOeeJzTDFuoMgC6nRkiasr1sBCIEorly7m4o= +go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628= +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-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +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/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +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-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/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 h1:kDxGY2VmgABOe55qheT/TFqUMtcTHnomIPS1iv3G4Ms= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= +golang.org/x/tools v0.1.1/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-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/grpc v1.22.0 h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw= +google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +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/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +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= diff --git a/images/polaris_logo_white.png b/images/polaris_logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe5087d9acf2e947cfe2c8e3f079b3d9a316e62 GIT binary patch literal 77652 zcmZ_0Wmwd2&;}}^pi(MGhqNft-QA5yNq2Xbh?H~*NC|?ZAYD=d3rjcBAV_z!u)F8k z|2fzB@V>ksytqL4#WOSa%-nO&MyjdE;yfaKbmz_;9Cv6hjn9eAAJANSx(pO&K=xN)IYQyry}z^caR10 zQsQsC4R^EdUmA4Ro;xYpII%waMD!5%_2c<0u@U1A?gsr4VyrYjWLoYc>LOa1A|-FhT4hv9B^~ggJYIMg7_as{_lv1KZTIMv0tNqTWCYV4|Z#(4g2e6 zZA-%vhIucK_!qrbEyh&@9Xt_N8_f}7(zm||@u%SbuF<(bWaOVf5p;7j;}mo~7ZyCs zi@1_$ZwOx(z{F5iq;| z!xjW6TYUKt9Y_^$s?OtmxV$^vhVY;*u<9MzNNNj?Vr}*2@xMIW4W|kuK6`Vk`%4M} z@6Tm2KE2*=KB#(C-awP#yIo8c_RB^3N?aPwML{)(_?qC^gN>XZ#BO=>ejfrjo524Orn%fGLzwxW4D!yzQ%hDwGG;gQ zFbN0rZ8Dnjk+T_#ozL1;r2ik`g9HAS?d{_QOypTbkVR)W-tc<1-@Z(~;VYT8Un>U} zZO8!6-wzqh!GrkFwiFgz-RjZSxZo9{pGhslH$;)pMer#0ojAPMq$hd>*za5XE{4D% z@}#cghvY0A+=?0_xE3zgV)WpLbQ{>BQ#b${KQecd8j+swQ-~98#?+3an)V_L<$L-=$%VLuZpIr!*2livd!7to) z`)Cr&(;e3rpKwi21^-6SRxQEzy=J^uV~7?uFZzuT9COAYI8||?h(9FsIJd^3N!n;d ze{f}-oItc~s-dq9&*U3TEzj_!hTdyNkPlE`NA_3hTto6siQ)GD>^B8fd+ZolM@Gi1m}j`I;!fw5=vBcwUHz0Yrd2w*Z4i# zcY7B^p93-c>#Zr)gl=GS+M-=&UADgkAdqg3NI;d*&0iuY37lZ7@Xa?V8WF_h>i?0# zdOM;64IYr(ppMlZel|TEcvfn}jcrf8s;{&iC{BU^q3lSMemm-1J^`oge5vjNBMk&L zo#C0YPlBJe z5cY>;L;_O#CNemY!|aBZ-e##a0OkB_*TX>wv)j{&0S+h3gYV`=LlAt&Xy&VUNEHf! zue(_TSE8+`SM^GgJ5(WUMo8GSE-FQ%Qs?a_J2J`k%_v-4rd25DawU9sIRtNrA;Z2( zui%uN%;HktB1NkT)D6Zp*SA|$vL2uT1qR74^E<0a$=R5c-o~i}~5B4Mo)He3# zQ~FLZZ@q5INMVj3Eel|Cz@V3B3tmeW=$N!@n6#n0+u!7C>z#GK~pHrukf z(+q5CyY+shNBsYpVZmd15U~-2V6-ORd1HD?`;RfKjl?RGz4`Dr)DQf(f~IHSrrwL&zt{#dQ~M70BgA3GM7?>#$zzy z$%y1_p>Q$A@)QdmprkPcu!WC|&G@}y3T(zI#{vah%*VHNIg)!IiteqD-GB;oXE!&T zvJV57d~^R>r&=i5Yw2%P7FPgS5(e2iv2~FMcy%a|;U5yjoArslm;Ap`fzdFiuX87kyJCqid`*Jv5{1qX4wleR6 zJE|nw+NYr7Z~-;_aNt$H5rej&QP^Lnz>^I7AGK3`Tg;vyL7%=HyXD1T7*;jTAzcasJY1> zl^*C*-z5%$GWeVHjd&}rFe`(_O@<4Eq&nbYf!A+27_$o0xOt;IHA%C5x5WrGecC81 zT5r+mzf>bj&@KdlYTY>1kwa@WO|`E#D_~rSQ`vJw9Mgg-@G`eFY9B(YwO){F_~muO z@&}wwqY|&1D-8KOd?Ew)(cOmC*nXL4;uY+)iJsdXUjw9L8g$yH81&eRpbhz@_;0JQ zvn*uPX}h>^2$yg9PU@H@hA0XAO&bb~xjKz(WkjKRVWJ7iIj<^yRVh~Y1q3YxAzMn5 zZcBQS3Lp~bjQL=o*+>ya-ki+nT4kmDsOoz;)K0gWM9iVqoo~bvZJK{d_Zu&S%HyfU zA^v~qG1Vy0rw)Le6%xLL+(Yno!^9^?H$at__ybsB24H$J98}?hp!*D0e{JJ+Yu^?D zVo2)_NvQc9TD@H;W6r>k(8+*3DAqhN=t(+^dmpDfdWI(ZX^6x!jaqQ`XD2C>aF4~! z??bOiEo}=$=1M7^j(hmgmY0exi?(EWq`WicNxJ|~h7G+}?prkslJWJ>W8NBUc>v`e zJ^%JtrUJB6e+rIvrz?z5$v)RaDoLHmW0lAP{$D(R$JuXfRu#GGnv8SLUghvS^25%S z496XOt78(HBgGT8nEHr`%47OMQ;A)=Zb)FqyfDl23+J*1>)QYF907dSOVtDrICnr6 zK@+*&t=09kNC)s=N8LxNUOuj|s9`-ga)q265I4>WV54ccIn6;&XJSp`9{Q&rK1Xj0e4 z_JR4nJ49}b%2Ih0b3}T-S7rJwfeiDH(Q?w1C zltDKxylwNoJ3kx)q=E!DGTr7c{g0uH%_6=N>azSjd@v?6eluU|vI^Q_JhLGbATEFc zbp{;N0fddJb+_ar(y-U}yJp5Z94H{*SII;0J=wCPtTb3M5hnk*zF;{d=jx$P*zFK>)f~^|1l4 zt-@+hu(ij$;+=Pv1UWXfIa)daLCqY zKi6T$1ZioU+&#HxcL2Or1fVi}DJOa1kd_W_HmP+$WF1_{^W@C{kCwg$2ISt9EpRQB z+`S^JLn!~&PDR^3gc$Pb-14Plkw0XrS7$gdP04LDV=3D2;;xc}9}SzTwCvT* z%_IJSY}sq*eqeV`e+0}!-sRkG@oKhxmifuh|_>TA*w~yEN`25^^26ist>M870m^ zt}jPLj$L0vM-Na0PTc@Ue}nWLGP7-kg*h}N5)`SH;1^33Q=xu0)=g?Y8VnY|jgG4M z*VAa{K!>$7S2;)*I9vWI zQxc-b;F}aJry(3Dv^fRGm#5iO!+eACTjwm9xp6 zo$vHYiIj(kLSrj%x}UQeA?wC^WaJ_CS}@Q&A7@82#jqSh)aWxbI1Ma z8Ow~D&Kb;N-ZW^P(4#RZ>TR}~HxTNcvM&33x*Rd=V_qklvTpQ6L=1%w<$w07vFBb1RNz7Z|n6^1SI zZaS)?s)Tyh)b+>>gLifvO?Gn*^@9K(@OYpRWF)XZ#tEONapD4^xloiH8+ID> zy@@RFqdEGh6Si##29E2{beV(ZOku9(<|t@>Qh&6Z&pKue<^D1X?2H>plSV?I@hvY% zYEWb|-E1<48sU^}CeBDs)Mn02TXyHKPt>-61#|bS0BvYjjJ$`w-9+$ifUX@YAgCN2 zLL@0y!^)GP2ncs%V{iQ?#l-=(=jkM6TroxxKxPFU?74}}Dr6-`y)e}paMQdM^@zD*zF zXftXAVhjMvzFE>GC}~oYo(%t#{MWOi2IF{(=jEmIH?Akp?{-@SsY3u)iFkEQ)DH2O zq(gFTf2RF?9~a0Aur0Rk&u84}lt8M1=^i9W{-QmP&b-NE^GsR}vO*l(pCr@l(J=Tk zLUsfRuoIM#%mktkJ?gzw`O`9CFwA0zf5SaogL&CTl(5i$eNKBRe0Clgfbdfvw%A{d zPm>mfnBq3+ENk)zA(BC6DU>)%+F#x3UBSgV2}Z|kQr1b4V)bUFbS95*Z7<@MW~`T- zRBJBXJ9^N4CzgnLl@9Z*{YMwlmG}pppRlE8g-YVC0%AZ$35ebE^2pz&b-j#Tu>tL{ zml?&5tN=T^O`H`mW$s^s@4t|{%NLPnv`M1! zjd;@e`M;kD9s;<^Bp27t)PqNZ5IQ=y7> z@$Phcq0qA5h76p3J1~uCDD)vC1&4VIklhLp(Dic_A0g|1@|lw#1{l8ilG6_HGX8Q)KIl77#D|eP6 zrCQ@X7;(MKMe<&Er5*MMqdgL)rG0R6KYe^833METgRl7VmIq4DiYqupPR^+CPl66a zX;0k(_K?`{g1E2!)k6ZMg0GAhb-ikaw1;vxLm_EecvmnYdpIVlep z(OiZ)R+LrfT$|o3n5q5KF%G^z&#(AW%rF^~49_AtGauhVQvmZUFnV}!Gl~SRcjxy% z|vs6$9XSi*%gm=g{_=3)JNq}0SH6!>SPh;uSD zQ1(s6j@1Na#eH1J;fVQfi^`sR)8nzWYy|h+V{v%N_mM(U zZA-`8l*8o4peH_dyjgY5ux1_mSv0J-^ctf#;V5U~Oa4^5{M`d#p#k0H>l2&S*OIG0 zTGu&|Zb&c0u>bY}`~oJr`aa6X7F6#Zn0iu>pU#%}OHcvv1*s_!aygoCokgfE9(FZ( zL{;u@u?mk*xdG2**COj*hu4xzaZYLyWw ztKcVop7rzK@mqRtsvUK5Qa-h*??x7<{eu@U0S^twlm(;!^7`iBCa1WSeD^t-dv*(D z!25{^z9470?!cc(J>=UElh-i$tjNpXS27SrC<}%S*;FNQx{mC`!`|f9I3-;(*Y_cT zCPHR=v{!lI+fgt>qo`J;W6=}j5Yh+XWd@tOxyWrJ8$Sp!M?Hoe&&GwP8#X=R%OcB8N$L0=)AjksSw3SA<5vO_mT(-QBg0Tu~Lf zGBgca%`^QRJ~HEvHuV%&K^p8;ZM1jOt#+~k7tU;$!&)8Ljh@!7%l?Jj8~QeT?e=+y zpDBzpuPCDZ+fB0mz_f#X+sPKv&?p?y6ZEwI&@RpO%9Q0QZj zDsi|QCO51MNiI46DU{>ovLD;QYUJ1!tEFkt9`Wf!?&b6LsIyN?ImZ^~JL+6Mt&63@ z#f8~TOaWVZ-;4~!{3~*{>~h|VAE#SoLs^t%CK>2wy5Tdb%ML>L+6 zc!X_>m1tq#>$6<$rz7+cW%6S;oG=*Dl5ilUQ74ukDwC+Rkm_5w6D|hM1llLdlu$*mzlET3K zAcK2wtI+JZ{btCi5)F@BA%yhPRp^@$DVccJ9BaI_e8jy{aw<)dO|<(%^N4A z0irpkdn}dJs(Bd946Fro32x5Mw}wMA3s$A%rpV77a$ADrsJ6e;uD)bl<;UR7V~w=! zO#ig$tue6rAjEAiZ76K+{_wJ+1o@vAR<>0ILd0+sN2g97iw^ywdam#%z_jlb(h%m# zd19wc28T!!W_V|t*sL2TKGt!?H2ZPUc?8EO;w;89e@@elcY(QS-26$JY`CXCt~rA^ zqPIKRf5texPv45h3fJ#&zOxrf{W6SrKLoUmcp=3hQqVpm7ct~MjLo-O;sblxIHclb z#IHX;f9BE`@{;k6RgdD;Qfr9rt+y7#>=s8D-Co+Pfo`3-KGM8$7{W`p)1>A`5alIA zK+-Som#)goH1*6@b{2PdDW2IhfoFMwFhmE;&oKpJw(xdiq10;Q15me6saGMI?)pj+LBttk7}q z8U(EttxJahKQT!(TOttB(1%6{3(kH#SSZYbJ^4d_vp#oh$JL1fLwzmOjM)l3(W+hy zc3R&CACwLbGf#cVztk?C=)Sy-zVK-4wK;ivV-_dRsqmS{GYj*ekWRa5hZpeBiL4#c z21Xsbn33z~e@SNyb_BJ`3BC1=LmXFKBN6zy=LllvkqR}E=9E)z4&_RQ4g0hR8xFKy zCN+DanumMhFW1%hO*I69H7Q~(D}&4KjLwj@X^hTw6Y7^SWr0DnEC&5p2zVD-mif;U z`1yyws}ry;kLdDq13de>3Sh>EW?wtZ64lI=K|}GU)j-hPh8%YAQJTbFhqB z9otxPo{q>Y*h!<&g`EgFTfo*$??GzloYwk^9QA zZa=D}wP`#Y8Sba%(Y;9&C>r7@C+$^eg66(FrnQYM!otNMUfs+wmD`7$LmR}Cqw+rX z-y0^HIbc({no*GW#~GWRNR}TL|Li@13P>2?B*iX*CcEMD>e*jn<@O)TPNs>;kg8H& z^F+6iADh*5WaOX=_id-@pY=}v(3e|~hDsfO6?Ksv%ko;>I%n;z&3LckQqRYve&VW_ zUPI+YwbJ|U;;6!)2vJtq@G|@?rLFD}l=azIY^Lgy;0b%O;|m&_pYmA4{3Y9zzB!ft zPYnha%xyDhR_ghEhqI3=dnnyDRBA+Vzaeyei~JW9pi=p9n?h*euZBJ(*gSE2zSkKT zcN(8t)kWuF6>YrOBTvH<|IChm-&BcdHv7V@uob4SIx;CEia|Rj>s-n3gluh^evgKX z=eNVr@A1FmRtT$HND&rXz&XB0CPi9aq(DX;eeloMi%9a%i5!^UUZIP%?s{0tRY>8S zD#c30eogZBTc(!Ww_EUg&QF59dN+W`fcnQ>%B{_G_fh05pJ&MuEQk57^CMl*nZBc< zmu*>F`0;hWcNx$kUWYr#tP80%%YSF{94lkZ$g(qG}bja}+zS z@7VY+(VkN%A<}ezJ#dQafv%H$g|xc>otN3QRBL`eeTqm%KZkfm zR2d@?pazjkb)rKyxyK|y3T;Lah~ebE9Cyon*Eef9vtL!d{@P7tZ&$027cx~pUdIn# zNKFk_6jh|BttyPFsri6Vda?2!$ci=?}FvS_>!^cRK_8g%Z9yLDCV9a5S#d3P z{I!+1MW$v^i_6G!>)__4#vUz|kH3ttQ!3`R`g^Eo8}L)lnrIg1?(gtdMfKhxd#R}O zlu1R(+FmY)zm59UCnE^K8pI%N@N~6Erj7lXh6E*%WYA70k{|u?#p`*X%VGI+07OK+ zJhRrcR`QTfv9%e>da9)A6db3`6Y`DRD=>4hm3C5+e=Gf!3Wp+uQ7FO8&du>-jdU%l zfQ91x7Ph-jwWRdKe>p%yT0lE%0Z5+KBs|LJ91{wjW@ZSdn**FI%-NL46+n&2b0`$D zoc2%zAa<>2gTjxTnzp{Xojkfo_*tZpv)vW=Z(81C;%~^+=bAtB_hmj|Kq?%GOLMoG zT+@cXhj-$+ZYsY032Z@L^7Kc%so;K9Kg&>LsiW%;(pE$QM_4EEK0U2NWM*l8bF06m z{fP>7l|`1U)Z-JG8MW(blQ$)Xc1!EUfqyxXyi)3keKC!XH}KYF+VDOVhcqf)SNKzy zB_5A>=}iB9p~ro^Cx^7y>lBFRf?Y}0PONDYxr&U(oCuz^fJvHdDuxj}vG)FxrwbE~ z6Iy=MPZ;lvWj$3|?k~b!?Ep+=8mb*puFo|Bv!hjS$V z$poUa1}umX9_!>U<6Pz^_=5NHUSK}T9N{}r^}zlu=MO0IxR(w>a)k+kR{ObC5Sl$m z3PUYB>`E<|-Z}xMg_9nI(F{2h{3e|ByQEQgmcE8NiIDa8e)HFRcl?0Ci zgPzdp<9Ky%GPPRBhb1Ek(edf9p}Tv1m-1`&a)r^|@h%aa53vp2L6qKLS9?V{F7IUlx?zb$%< z>5%s@Ca(lsQm$SSI)czdy=G6W1i>{G4k4e?JF9rb?~aOaQlL7_F8(Gz0{@tVb625V zDv?AJd50GA$rLHg2ZxB)Dm*8eRWW<%wdVZ#!QMa`>C1{rZdXgm?`UiD%Emt;+%W8V zL5YDBoR8lmx|5ex&egi_MwbrRxbxC?TaZ zv1r2`UodI(ViM4Gc0SxBYkd3`QLW#L@sI{@?Zd{C#w?Eq=}&J$@r}l}_}IGNm-t*NpeZtEfH3(fEJ0Ll~Bik5DHb|pf zlyw!p+((`ut`C}<=XZ22RA~JQl2inWM|t)>Sp5t%QLXI2AZuvHmafNPms0q8F zh@P+FzGS#gDuR1lM6;38#p9B-% zZ8ZAmR|{kl!bG7`eUJCW5;x>Z1dOezYF=f;O$ccT#BBR*2YLIs5%qwf7 zM8`}Dj`pIJiSFHRz24u2?Nki2fU)ZCT9WDzF8|tNuk?+#`VRkS;u_*fDqc%KD?0AF=;+ah4+%QdcBC`STq5m8hh_#U184Hck3IfidjOSbV(e*TPSUkKQc)r*DkZ zjlNXR6ro24eH?YXA9JJIhmMp9tbB^UV)1@U1nC5Mxq%~mgTFgqGTakoMDcFZE&+=M)m`?8?UX>IwsYqn)^&OC2a4$;+rd&>=C_;s(d## zbt*b_f8OIGyP=!yCo^ITg|qh$G#E08OVcEM!h3Zw{nUnDrV&Y6aMr2LroPy8R9sRv zaEYj>cEfP!p|l3=ojcRNP2Q}qr=zEQiW65iiJX$>Oh0N!kmykRM7?AsUiE8k z5$Jx$LeZC3`VQI%s_=UnU2YarX&)RxPLP`cN~+p|^S%%(;|RtRwNKY#=Y_;I8fmY* zMK@MD!*HTl7|+bkILQ}Yr$S5 zysO>5HxMFcRo{6s?YTTjI{Gj(*SSWn5sv27j#9ejj_1O1> zd%-@tE~H$=YZ_ZF5#)opIK!tG)@NE4R@VK8iW77BBlOqHo-fJoD?{OaC94<~rZ=qm zj;Cac9gFydmgn+Kc#~6;{}SaY1*EzOV^DJ+6K6bV0Snz2maGFz)pk{X)EK)5`uRO3 zWH4T6TjB#-LtSo4U=OlA1W)A89=_x-?^{U--uer2_)KT1!xvzQY{WGf7&O2|cZjms zrvsuD(!pHk2j>*eoFO$EkBewfiG$21_x%hfY0)T*16jk&(4NmJONRbW^T*5l^>|<_ z=@Dbb%*0854>{pOR)~XW(Dkz$;j8}~7P&TOZ8=TUG$f=Ga4+Yq;b*vaiJJA=yn_1K zC#kxfUKh1mKDFZPU%m!{mr;_F>$9B=!o4t9aG)!gr!<}8Y`w1}FEQG(!}Z(%bP!7M zOtKfKJj?j+NXO#i0DQhcQ2-C}U~>46Py&V5j$;*+0q2`m$?{?3o7!alT9LG}c!4w=^5uPtvcmIO zxzUc?rY^dGaA6j8Zi~2UA*#-CFm2r{S3JDP;Q9PncKvmE-Uw+;hVvlzG~dQm(+<%p zCT5|z&Gsoz7tEMh?PLaM#`FD`;WiRT6 zYU9T|W=~V-2F%TP;Y?VI!_zis#9nkDggtF%T*HBNC=*4V)a~fr+oa+fbVd3Um9ZCj z@D+c9x6Y%&V3mGe7KljaqCLHrgT5CjEr>z0LOIZHz#pw*V3EL#8HwR9+6c0x37kcI?O+YEnv8HJbGu zHbPC22osAo__>=+!!vfSs@N46S&xc2=8RAR;tVB;e-T-Txt~MxDARR(|Ej5r=9qTY zC}DGu<%1we^y@NYT3dP#+(phzQ|>!tyAe<%e3*4r;!EufU5kUWqLh<(S6^BqBuCz( zq0bvK)E;3m<|K2TI?FO)a$1D&uY-jH_w<;XqY22EE420=(4*Du5G`=ke{-_Rbdiyq zmZ&PmVnPBP-$D5uaPn)Un8?^+l;4xXvjbr^+7*^_F>O|H&BuMO<}Qg75{1LGML#Im zV-VjwxN}H5?;}#<^Hb>WO|GzGwZmsj66qU1Q%yV0^=mK)`WfF;hqZ_VvYrNE_o6Z_ z4LJ7S%`nM|zCW7$wH}33n2%J2&yp2|mx+1>0zHy{opjj|D>iEQc%t*|nyJzKW5nF{ z#*$+UprI0xJmy01p&dd^+<_D-E46@uToNv}v@G^;VYt4&(s!)>@b16zd)UIoXRrD~ zh9dljvs(0>T56*ZwMW(7Rgu51W0k8|FVdFbG)%s0F4-E_nhg6ToY5a=vEV+S`l|-p z2(g}G6p6X)B9XsJx3e9_YTc~Dwj>429Z-6fh9ZmeDFk`DRmzAU_h)A(JoURwernQK68 z>94!N?#JKtEX&c)qjBP5UZIyJtuNmcwL|`H^=G29@x;uxjoVeN;_u`oK~X()99Nr~g_DLxf*PnSIs_H8;C3Ck@=K_D_rq@vEP-ET)_#lO4LR zZRk_rR#tKsrP!+LdaBrPF{_gekOjtg@hcHAchK+u_Tgf&s$6~;1Ws@kDtExK@0YZz zE1I+=^<=zP;`l*Ij}EgJkhhGU=PumMEVH#NjF|~{a9JCN+whos2bY|0E_f+C z$7h|yOS=#m`=%FG0>q#(Rln1Wl~9u1B%On+1JG~p>FZ(DQfy%Y1>S;vIEAP4eF-+E z2Zb3$9hqq96A$x^^9@YBK9}U8Nq7`WKK|?nws>Z9z4>=6+Z-rG>cWomgHQ^ZnZuRN zB>58=l0$cWu+<>@s=hT=8XDV}rT7nrRy>DZnNFQa3irw^@X?;-4U-KK&zV-)oDTx% zbM~r&(?s$mXFps$QxQI!*f*AObB^}lJs^~q&E6)K@Bu1*+|<$U*!=29pl+KViet+5uB3yUOyI z@^HO9zd|5Uw>}B4^tEmMog2Y9YAKdcjikj7U05-qNT{BTIUyn!o4xMk>?VX8-8ouhI$T9Ub>~^4?efcduu-ac~lkWw|V#&y2_RoN#*MK2=QB2J$=t5`qJ)^fEdX# z(0%M{_>#$d@VQ12d=RrKf$i!kuW@?A`uxAsUrLn@{WF!mr1su~>W6*EC@)Y($>!172 zi(bE(BF@J7SqX}q+c-e)D8P@tl32ekpF%n5VwIr*2%#mlyz4C^Y{uV zX6En7D6sKFA#&4HjSyK7f8i@B3~vt#uof~@EzZH|j==&nT%)H#75EUoH~NpIy*6{h zn<|B-BxDbsHAZJou;`f+_ZPw#%}rPWUhIgu*~e2J8VXf=c)7illG$YNT6Er!tN(3u zeFR10)1``!Ia~0Jcjw6gDd}5V%0tl4&i;|KMzDYH`EQK_!0g^>u6@=6@l{a_BB2{e z3#DMrA-->l@S@{7tTS;D_9jZtKPEAfb~~(->L-F2R^_j@2<76anJfgQFWz9zx_?i% z?Ar&lHRO+s!4Afc<`;r0V^Y=X^(xkkljtFwduu!9obAR^0^0iF5PAowE@QD(&t%xm z;bU4;@W`?)DSr2ve`~4XwAP+2%;lLx z(Jw7cI9~YE^Qa$R*}hTXNPbZj@)qdmq^B=gwL|*_WP1W;R7{y%d{LExawUhDcp{B- zry!3H0RIyqTKLS12%QC*k?Ew?z7@PA7&@NN@~J$V!8W;b@5YX|9BZ^oQL7vQ$6{V3 z#3d%-SI(QK^DALPMgF-}WKjj?I96#U7^!cu8Ka2>r~}@E=0}fbkZb&2KY2*v6E`9< znzivCYGl;tRl?4^fkAkml4w=_oX$12fow0I+}#eH($WUf&q!vkj})lRkn|1y@>VwP!jl^m@ewc4_GYL zA(G~t=qGCYPYLoP;LE7)rk*+{g3lIQ_Jgy;r# zuFG%t@1!(VM(e18MR7;``YXQH2d_`_J00%;@G;X+VJB$6bLlR6>cx0-hMl^{`s?tw zWmyG@yj3TI3jBwX(8atPYTra4FiYQSOeDGy=sp$aFhvF>d>`19x z@U7TBCk8$?6Y?m0UDozS(L81V%G2?sM*nM|Y?iK<{K0m)pRMYoS#Bty>qe+ngyMkqxnf}(b;40C00}ZXjT#k=DQ2Z{+MrimIGg7MjdD} zdml?TNe5w9)s@BeW(n`3w4@~-df_lu^%L_ZtQJ-V?)7Esul%_v0D4}b=41Albj|*;y~E)?#)o{dqT2ay&Mr7lgs0~t>o00 zd--GSd>lYx-1x9clabdQOY)csc_~ZO(UFI{b|zcJK0#JPO?~o(&3^PV#tD{n>pEr5 zN@sX;WwF9n+F$r_J}eI`5mPkLs^jU~n>+Ut;PX3q*Y+hJ-9K4hLyx^L(i$gxI&Ol3Zau{{R8B`!cm^8b3Ih+%0t)kvkO!C%v` z8q3aPyjaWjo=xXJ1ag4Bx4>&4X{#4YHzzUOnyw7b@5{D$iZ@HlYI((dmzYd(b!b=# zi>dll+1~8(Qbl@$JB-q~9nEoY?$IM&n0Uce*H2?~=`>rRwZBwlPxm@#OzUPW`%xXFF(<1pU=$1K@(3J$T$H^M{!iRIp7#8O$U|8JK>lWRe3bZJWM26~cQa`a zixMuiYCH)xb5_at9SYvJBWKl^>Fl0RShB-X+ivJH?8+N6Q=^x{JZOAnM5TrwOfnka z5iM!TVsJ}ZNi_LS8+hG6`<+G@bY7hh;BoaY)yu}ox|t)_B~}#@EK3!@wKG@mWM;?# zVRR7x#5=ZD)6{GCj8qgXEQ=8BJ$Y%wOheQFHct5&s~s^MKGxp=&8~Goy-YH0lI;c< zu{hOOjH-!-MPGnR)hJp}y-Z@KP!Q#FZkJc}60sd(!5>QnBfbuPk+43ZsMdEc$N~!G z8sm8)uNO5-z3LNqESLIpHF)?NdBs> z{Vo<)dC0@bit;xBKmyye`^B!Dgg!W1(p4hdYu2W4v^=u6tzQQxL3HEMCd(cN&!Hc= zO)rMY9${)PWjJejt}W52d{xI!gz67vElTY1AJP2M601aO1N7YCR#Q@C{Y*x$UI>lF zp`lkfGYDfa-E&wb&g#8eWt`?dCSMIUZUiLc6(5ydyiHW|0vE=Z3{{R|4204~5 z4AN*sR$;SMxKh({+6okMp`Bt33m?LULfq3-aYH11O_ZX(5V0L+0s-*Qt5PL7QR0n; zvaC)2b=!=Jahkmj*z&llD8;1fq?jAJp#|u^azZSkq)+i1$^8#I44&P8d>4KJM)kv> zy`DrXzua+S!HA%o;>>x zZ8iWg!t4i#B$-JOWovtrOzIs7sHGa+r72~ReWZz>o? zAi`;}Rv$TV^2A$2*xejj=3R><-F^e?C{0blS5+M|G9SMt*o^L(19v}jwK-_1KQxO*p6dF{TyZ7i zt?fFIlbA=I(t5F=t7o01o{D*234u*W$FYkYn@y#nfE7Z0`zI4vW_lC9@4ANT&0Ji{ ziR!H7xDD~g_}$o-tAvkX&VnP&wqcely$cink~*RBOPq#%h;J2J8{&w;1O?2q=}t3u z-fSd~Sxh7*%ShTguG4q8+W!$<4W_U}7Wg?ehg+(FXR-ZWx!3ZWgjqN%O_g{m{6Vj0 zu;dyz)P0Sy8E?|KF}THNT?W)j2~UYf6Z$4c!ZrCXuO`H3&!*kGVhs<5D9{->d;S(e z&2byg`2H0J6iK!kdVGgbj{X~5EGYItPo(i_{P%gsn?fav_y#51b=P*_WH=OzW--4J zuW-PPmR*bOoCLc*+mLKe@j25ZUBFr=*=hEnH%>*ruS`>;3N}wTycV->JPPEnu5-h4 z%#{(PB8ZT_1k7gIYfy82^TBaH7RwWm*j6&QqSJnz@YbDALq-IQ+d>UQ9IYw0Cuo`; z>3aW#hK9c)ixu#7yMl#xxT5H5N=hYiX(h_A)0G__8#xJIQ>D05eF)k9BpHu=+D?US zPhN+254qHK@5C4{sjLR9o$<}(O;L^*_!bY`UH|Hqtn>h?<6qaXlBmv)4 zj2(@@L_RC~?W=46S1D0Io zg*$UOy7Shh%zwjKQ7wAW(|QbOqAIQr!9z0N`btt;`+3{aAM=5~GM)?1gH6g0Ra*ol zR40vKg`=m&`!r3EW3jO$H~3iV!at~E%ucD`}JnNrcuKmqG?NWuOhAY>wr za|Q^n^J(QV_^WnZ)|D6@MhkCiv*E!rcO~-Yx}gtzBB^~y`x!|*<(w#Nt1UY?BfhAf zQEI@}UY3?=$QjIq!XC|lnLv#6tOE!!NAr*N_X|J?8k*<)u@FX`Xj-JIPOLJ^5!Rb-pNRsvSChoNZ^!W}7dNb}z~KT<6%N;Bz!Ye}+>mKgu7CSyGrQ z_&(MxO)lR`PBq#_-3ulT$)=4Hs(J!3Iu*)2LTy>P$z(OfxGZ!fz}Uu4KBKd3NsbCU zxyvLC7E?Ou&O$sU0k#{ZGi%&C5x8(t0w0&)IPd@pO=H;7oF9HqU9M!s9Q2D=z`aNj zo$O^CyF(&{Wmm)#$Hj8fU!5x<*9`3Cp?&yC(H`*x5qpc6>lb+BUmN-(T5as|8l(_> z0#Beb%3^rHzR$dLs1g+mnONlC8~Pz-5D(mmq0%kz8f!zyCwG*+YR*@5flXR*8Vm1NeY4M9j{Y&G8@GQd=^j zmw=^f2$3eO)x>Q55+QEO4NcgG6l39%dU0xcuZYcVMz2x!1&lM9)M z5U%xblZt-@Kb*4Uf*U<1NyX%S(hkf?r|E()>c`{0ezFg`2-=vYL<===>sV!&Ddk4fpvmKC6$BYV_Ijz3#x^ zYvTSe*aN$Hrov1P9ZIuVDQ(ou4YF7XI0%{ump~<#cP0T{{+FOruWKnBZGEsxogfsL zEV;P=v6Uk;n~2HUFSQ-H_|wcBwa*xC-4)8$vWslOfJZf8TRtd(SLll!A$ zDm1Jg--kAWo)_mve#dH|Wf-jm^-Rs_4(D2dC1O8vrYuF@a2B zYu3y;^KG&U2(=7utPi3(OJ9-2wM_r0EsjAuXasye7@IMwyKla)7CE3qx{qBifUAv{uOS1Rgi@fnO9A7@g+wa@^pm~dL9(Z@W1 zaGZ`=Z8w#;9&^JYc)`RyB&%mA?R045N=@I$rTZC_6yCS3y^U`n{Qq!t9*$JLZx~NP zHrad6?7cS~BjXsE*(rNwWbbistZbrVuPDhTTe33ZYws-_gz$UL?;lXS@B2LWecjjf zxjVJ4?F&IvCckVctL-c&>RPT)hA?6X6yGm3C4F#%fZRxrH}iK7t>`%J)y_hXursD3_)+@jAN48M|Ih3Kv1I}( z{YO48#O4!(OT#=sjpm77?;L}DO}t@*$FC5;R-yj~dk_Y~Hggzt5F;B%LBD6*LY&AA z2xmHruX05^&3U1%(-(r zW-k56Z8p~VsK_~0^gZO46UCQyJlUUC4#U}B)A*1Vn;ToLS*THuNU18Tb4dtSog2mXcLvp23e!eNopP4CX zmlL_DuVBCa2eR(IZ$kGub6q!W5_q@7&^{bAVvcc$-k@AQdBN^uVCvg)^3pExuv%Q5 zs&MVE9J^!nkbdWn``d3>I&sx?X8uMQ22@S|xk~$H>SZguV2m+GF(f|8)W_m|A$Z)F zy+L~2-1(N0vVZGYN2YF?wujbw{0D?U5+a4;0Vh-@QvS*-eW+`D&D=?vEZ7V zU9T5JcKVY;mqmYlytx5prxuX^tzMlXCz*em zVoLsuin&19{>Z@d_w$RYSN|#6awTbj(*4z+IYIT1@4LHy*OT4sv;<+!;xjP_O#C5U z`^nOEo1Oc>q{9$o1E4iE!}}8?&{7b^E%NwEOar@B$^X1X zkReWvy;oES?J&~Io**n?`?<~6dXT!I7JjO5zY>b+&@hme^Ro-2($e@~Z&N8N~SM@teeH_;MPksN-1=h@{TkY z^E*!oBes&x5p;88J1EY-8HgcfK!92`U%3zPXjY5MGC}AKGcKO!Dj0-v-i8d^pU@Iu z|IzK0&c{bA>mYr~Ww_GbVP%OYWWDgi#FQU24y$I%lo~FjiMzZ3L;=${agi|xl2~PR z$Lp{cjM{cEk3*i&{m1hdo)Tj2D_zlAd*d;NYKf9IcgLpIRAW2|+zc@~5?1N>$f&_1 z(&IQK@{x&=ITd}lM+9dk2%R@agl50W8FG0m8Jh>1NmNbWDoZuXxgiPism;sxyE-AB z`!>bhvGDZ=s{4#`eSs!W_Wqz56+>F1VtyE}Ck{>q2Rj$ZJNmZS|1f;)37SEOF|Q+X zDU&-zx!`UL1WZ0>-&6e>`@wt+SW_X^6+ibLZJ{5nSDJ3ss|O9qC?Q=B#I|oGqHQDX z_;yRbS`}Ek{Z6V6dsmuWr8JhTKA+Oq2d;$$pY`Eyp(zv}bs@mKC}wy+HCuFiTX9Y9-e;NpiuiZ)Ko#4Ha^CZP{g~AloXNrl!Gv6Q0-a=k+9CUE1l>tOGxh@;s<4$n-+g1kKao|0ga#yk;Hz?nUNTfzKbMDih8qNW4dgJ!|l{K2X54X$ozb zOpfzZBpCe2cbh5bFsaV*^A%9>9KNmI5#`B2m~gLJOiuA&vb3Ym!GvQ}H)SnvJME$v zhR|PguhA+GSqQnmbv-8I*3r@+uO32)?-bn$g6W*TcsC2SzTj<@a?m{b+p-!>vrym+ zY~*ub(wB-)BUY^#+<&a@Ga<&bWpAxgRLMPT`PMlwz3}#6KO{!$U-j2x#uNfNN>@7z@~&afuS-JL!11%xDyY$X z*R2-&%igL7d0el2kp6lm^llsEtY#%MjB0M`)o~LrmEP>?e8zA~-6OWGTwO7aJySSUxV_>o zhEhD(zKmF;OafXJLx!zM*2E;qTd~> zLYG$s;}uUp26k9%Inav&fAFC;aJ?0B42RvgSLnA|kqqQrfIFqtUuV65G9ZNKdJ{V% zO~*S|nVbBWR`*F?1E3N)r$;=s5BNWp_UOcT%0sH4ro&5%MNE|yCI4~R*m zHVhxZ^DMYxu%91`Mxrfldbt%JX-mrrm4_F%|4#Rc9qG?aTtqQ7@FanZ(e5>~V&i!v zU{k&InJRTD-NEXh`)Of2#%+WTy>GE+Y+?M}HA05gy`jQw)4hhOJlPzK21f;`xpjCd zT`1F<#p9+#Wux|{^;1{Tk1g=xB!sR0e!w@tq~x~M=+(Ug!ejGwI`)ixyu12yzI3c0 zu3?E#9+RiGv;^(^Y}bd1rFaB9LkcQ5N_dMBhU)?YXbeC6Nbh`zXh03;N-&myi*4~b-e;z=s&=p6i@;b? zqVIKVhkFq2=r7v$o*k1guO>_Jf~Yhl@t4_3xvLZW*?)!h>?&_Pexok)XX>^a9VIxg z3mzcJka@RC;*DsmLi7WEmh`ewcUUoaGl50h1I0+EKC&0yzA>U^P1@101s{*-Vwi;I zdRL!mp=7)d-Nbd?@~;r8XH00)IroF(16Npw$!U^jZ2OP%1|)7A2)i@L&4a>aL$$;y zO$T)c{r7>8o7WzCLM6+*PC6=_$Ga+`?C&nqiyd=@ec{05uR)9L`Z&QK8njsHTZC-v|R2eH3< zSEOLPatk-w9K|E z+`kmn$LyXXfuXN8QJTKZ?nJ>&X){rsmY>sM!t-&M@26KA3j7A|vs83q`Bv_%=WDeX zv9=UprU$rLgaU{+{|Gbq**rf*u9iBx8>egBX+8tLr5AtrwIC1&i1H6sKgdN-6Q;YS}b^d*#9_riAiL z9607PYe}|wn0Wmx84;}KCG{1e z_86%S?XnGIkt%F%b>1dQRIa9x)MP#snJX2b_q+?8faA&7Wm@GY_Kct!4_oP^BuZQl z=AGHP!v8wG#O0%viqAZ>5ptB*Sy*urc1yh`W#v+Ou3PqvZjLS^9g#jN8fUU5c1ob? z9z77@4>#I0Xr3U1z9x_34C2Aq$fv!oCkg`K#b-|~tG;-*ie+WI!USACbwVf>PjxeuZ-*%U^ z)=T3Gc!QwPYS_=>uNDHwp1Nu{u=IU=LtkQB26`WWnaI>!?*E;1wDF&~PFGpK1~WPw zEk@s&8e-k|d$04UK|wlXK81VoC2`#5v&iUSD4QX{e5^9nVwBNWS}6Lt{oTMXk*K#P zyG_LF``~0cgbnP4>?H(}FS=ei2+OTd4KW$T-%`)P!-{dNoHvP>MI8utabs>#K7sPd z_gK5pgOuU*;gCPNS5TH16M^=og11+?qU4dguUgoHor@+=8%6`Ik4Smj@K9 zBe8>LA0LPu8Dh6f>)ZnlnrFvaUK9j(=2qp!r;Zg@-kEho?tpG=ll+ZY-ml>t4k)Hi z$sJ`Lbl=xr-xi{VI0MD#?Hjx4nNLXx5(I5?a8J(g zm{ge+E1U=f({uQDZo?k(f_Wb2;Ten0M?F-sgfPPYs9?Hw0C-rq0&j;$YG-hPYguEAoX z@}@#LV7$U0=nBD~T0l+*C&<9|hV}RpEDRBJQRjNbUNyYsu6R1J;mPg%^%(f9I8&ap zsW#X9c9olbm7B(wC?rnFZ|NYxA8jU|IJ|3H`>YkYBrb+iv>cUHr?1B-mGb!AyjY{K z`)~wFF!*#Utn@wL28FEX4-a?tAx~ppAwRC5pbwh2B%0qIr$Q*dw@a#={BVFUT%o1D zrX;8J(^|pLmR~U1KJj5BySD!|ix<6+(iMcW;1)Vy_qte^@>GEzf}Xp!m2yh7Y0(!} zwydLaO_a6`hQ-IQX_M|%$9DGXdg)`c&`~ZiLVNTp5*^j!Ya!f|922_ z*mEy^?{+G$OepXmEj8kCycFFRcS6F1jbf&`KhAAjZz9HTY;~{0IE14AxMBqSxb@}Q zDqfMM3aJJ-7{)vg{VD&C6i+5s*>?!Zl73ZI^`!6S314 zCeK0j7IRon`ZK%?adyFLA}&Krc*G|VM`X>Wez{SQk1}p2MjeI+2p4iU2qHU32g5`! z_ll}24$;r-hlC^ljh)@E&(@oTYNt{2O`nu$U7y?Idw@GkItFi7apI3pg0Fjj1Hexv zi(&oU+{bLdTI)D4vLC(wB*qqG9WTV1!92$>JYFUhVf7HI6K(e%hl*rS<|C&;p&*<; z!jjN2p+$^}f+ zFye$iHXLGMtui*qHg5g0R<0{D?jYt~v1mUq{Se`yAHUY1DAkTZVJ={jzuG}E(`=~R z0BR!ZCwlbh&%E@?+XU4gjil+w?GBr>!XpO%CVzfDtSz9@THnuGe5`9ZqlO$Z*vD;N zLVJeRs7LH0j=*4UX!ex>&ql*Wf|<9PSt0(>n7(|t-EG$u1IM`Qd+8fK<_gxrSKarY zmU4V%Ow!U>oET|kOe@SdA`G%0X&|a^cDBH{ZvI+tl0DED7sQTqj%(fsVjf>+st@j9#BepgVr+2YH64r zLAX?gPC|hP&bzP+_cJ_F`}B<>&&IKk=FZdu_g;V~I6WrB)b-2F!vYSsAh57xP`rnzRO zx51A*F18NJ7xgBWAhZoiYvD6e1Zd8-6SY}+lQeStYr-+MMkW(p?@KrFANf9$z=*m4 z2M9^L5FN)IgJT41&hr$TXol__W<%u~2&Jy3bT(M`M3b%U&`s|QL~61@mirb1iZos*M#ej^WIC08@Q(I~5M!!)hur-Jx)03^S;iZPQVcmlH&e zA4BQ+W362Kx|HddMnw_6>&#ZW%8uvLzZ1{KzT@)e0aII0Eg0blF>$knl__GuZcO?Dg~ATGc|Nb=zjbH@7N_Kfw@hJlnwXwt9%v4=}*{ zsMjylEfD~;1JOy*Qn8NJJnuoK7?lZ%A%?ZTiW-s|AA?j--%G$#Wa;a_o-6Z-|15Su zVwXAQY-F0-t+ne47GwwXK#w@K_wH&;oi%v*70?(0C52JaBD}(}0_J+>83~N(EkAssWhN(s+BndYaBSrD^h>+%= zTR})Zlb+%iJu1wxmQegBo{xvP#C8X0wO>s84q)yI*~(~J7o8fZ?+UQ`@ZHd7)N8@j za;3+SN4j%1siHDm)wcV11m%EMnU+QzkXKv{k=L-(n1ItO3E{37G6aO+n0pSfEz+rg zBI9-)h^d4fPubS8M)J>t&8YSW8%st-H>#;7!(5q#x|kwi41=X~kdEL&>ox||5X)(B zN%{CdZ0_cKb5uI9rlUFlr+8DnJ8SKqI?ZQ-hO@@PH83bvmulqQ{J!%n6uz8ULpOjo z6oVJNU)$=cTU!r#7oT^9u=Di?m02Dyca)%((0Ah4sby8hmI<9g6=8REe;&oNC4esy zC!db~`+<%Ty$#b}W)MJ!-6`;uuCeCvqvu8Ji`RLSjHf(9e{{>`UKvLdDYrA_>lK=W z+@9xq@b-0dvnJQ-kG>W6I$Q%NFt3-g^&FQ(TqH3!v?^bjIfgQ0Umq!gAq`n^nX?q+ zbA*HGv~FiN<@0zNJO1clngoRZiWg9~`1*FR;OH?QxJpzIbmJ+&(D6GXQRwZ{+P2f- z4I~ti2sQ*v?dS*=3Bg+mpPK{2;v|DUL?5yLX!t!ziZwbW9>mB2Vm3&ZZ#Zbie+OGo9@smDe-IoKtgq)&QD%xb}X^Vl}OEZUADjT-BBdhK*uBL#iL^C+fdRp92by&NhB318qQQ*8nB9S zxB=p)4T%!-2Re~163-v@`zW;@g<5VE({J6~*Zr?lgWzmJ94`yxbgHGh3@z}ZjaDu* zfs3?tLR{&ZBJBr%XPa3pI7FB}GJtQw2vO1s2)3rFB=^dZE8rkIBu5r)mnq>*Y4SFv zYdV>qQ*z2i!g^4UGnzvEycY)SV%xM&GSKW4MDp7T^%;F$$*|mV>&1dt;pKwxoDbn< zcNq2;p;u(s?FZ#H5`kCt=q>vX9dN3pG&1h)RC$sM0CQ~WyCzA( z$BjYass5=x1jKS0_cH`j4vb?c{#`zkqL*hm-lD>Eptxq(7)}rdW|_rhui_MaMulo7x#nvR$89!MasFA z_%i-^zz6E8pIw~C=)3RUY4LRZ;eAh#C@i0A<|l`qJ#D0Ba#iFK_QW&1mv=HG+-~3n zZ(vThMk-^ftUjS44e-^1x*bt%bacC_0fIP9OLk6h1HrF${dz?z$SNCF7I-3v`Goo- zpas4e39|nY@5Ao2O?r;u`l%ap4me=vjnM}lwuIY)VmAChXBK!sp?1B(Oau%nFH74B zZSom8hM4Wb>Z7FD^bZ-B?Q`FhW;XyV+O)kgr!pblv~s|Rh3&#Lt>cX=+d5G|vS7OM z-P=%DwylI0Q^V}?Wy!*E74sYWp)brq>1{b^mmFzB9IDxCBXQ`}d$0ZyQ{F<4(5bNo z6}s||5LU4Em(}R*M6H)g@6w#i=1Ce#+yAa5Jj)Qn|J1MD_duJ9@r_G@)N!0El4PgN z`5#1+;^{nLs@OgN6Ta5M6Dv>0wd@acWQ^gIq-X*or-q|ZRs4Upj-BIUwkZv#T(@GXrNf*>32<<<3Z)d81B z`KaA1yhCyKOvO*0Q5TQ}JmYcHiuB8>1v^RRz`!}JSLqH2lAiRhxh>28)t3wX1k9~O zIRjSsE%@}aYrvtVK9es(0lJa3^2xV^Qydb1*FFtfTB547>R-l9dP~1=vo3+Q^xsiI zj;@I<`~q0Znj3&?&DwzL2Zqo%olBdvXpr@<^u)fT~_+hTKyf!1BwJu%8IRQB>4KqyA*J|gA^~uz1^t9ogY~iRt5?2Yh4;o z_AZlW<%_K;duK%Xmn`OH6K;1gqGzBn*(-PvbN7-g1*76D`#w;F#o>;8ok#o7v1z>3 zCZ)Xxc(;}t?!1M5pOv(1gYNjZ?Mixl5!A~PXB(3%+?hGAsbr=!J;q1uEB#R#3_B5P zk_B4iNJwPn+Qxv+DppY}6v%3iR9-O-k{rju{(z$`G{icGstgAy@bEVk=$@}Q4dtWJ z)rrf{%(R@dI9-H%|`kvow|?f&oh-caF~ z6bo2H34U>A4re{dG`7L^)lqutX_Mj(T!^CNXDET!l73^%LL<1f_YsZqBHH`4wul1( zyL5Xbi%{(AWKy5#o4nYO9rkkhKkB5Vo%9;d<<&bs`gk1#kKCYkOHiB_r1I4@&Y1FT zYR`SRbG`-v`7E`TwJ9V<49)N}lRo3WV4|O=OfRHlRFN1$>Dr9jfF}t?&JHZC3Ol#; zJ57CHYs40eMK%1bJczoaIvo>DJfHDGAOO?$=b|-{)0@O5IsEg``S>24VuaG+(odD` z>`wQW6aIN}xo9^`4Jtg~MLO~?^7VO|BDl{AlmDr7{lnrj%6Gkf@Pnbrc7neLB*_;C ztL<$!c2;0v!Wu&(nbwXfof5*vAU4y0%lEBoH@|ULCyZzCF`#csv(A>9+Srlqz(sh`AYjdu^DbPu5+jFYrM?vJHHu>a^zGLVSm74b$vvORReON^zm2x4Z}W(G~$1j|u_LHjcltyk0YJN&(kqYh`bZ613*`?>yq1~nx9 z0%}j`UUn?ht7kLj<_jGmmG2gOQ&WG14wj}jT07syqMZ{mL*Y^0!lHD2gQcR{2XEJI zVTIK_HgycsZdcc+)aZV91LIr|a9&q<5N!)vb{KCkX7;!y-UyKYHufrv*+@&xV|*hH zh99fYZ3wgI#z`R#Nbd0$BE)&;twytZ$X=Ke2l{FtHyJ&%ewtv9I@yi?IhKOWW#Y+V z9rl{$PsM+EQ-0W*GU*ZYlSw{X({#cm@9*Wj6F&tLLM}bTQk-O4vtd}ENd&hM%Zp_9 z&8?WG>Zl#5)iM0L6pQL7ZPs`>*48P`_F{&QO~^N+2PQAf$Qv2Ll1Nm9K_WnP`F^9~ z>wh4xlDd;XP2wJ~e$X>puX|O+N<|0Rd`X(Bd5o)`dK)~4Sz(+pC0VnhAf%gj-Y#9vFVIzbO)a5VsF$)9sxF`hc zPPmZ&jML?;+Sd3wrvT_*_?u@byLifDDuTc9k6L=z6;l+8F8epYY%0Y9j0EvzkIBn* z&W0?=ndW+Jf}Pd-Lec%?wdo9B;ZxD1ki;Mny1fFXaMfVMzfUU|vZ$@Fmm8-<_u%FXXjf==Yu+TMkjyk~y^KuH z9(gp9j78@S-`BaL9GM*lE+3Zb^KL8#T4&33NP{Ktu!&Mj$%^f`{bdc}$3!FO6itdO zSpK>3A$Q-~6ip~P&o^b78~lQZnhBawat}VyNX7J5U;~Zgth~X?nZFX9&TS|CM>r*c zDrNoQt`Fa#^3`)xvruRKc{~;~9C(s5*iJEYK*4m_AN0$vkXs`pP5AmmJ%%ljfLks*VkcFF3_FoQ|L@szfyW z%li#l<8Fb+0UZPG+A3s1V%~C77l?3!oM?mcj)#)zuSKIE#D8uc`>G6nOJh!7UR5a|3hK3~HfAW#p#f z_4jM3Ex>MJIcxx1p;~-|>@$`Ouy?u6Hc`z2jN^+ww-k#_?0T2k{=edGVM*hzPg$mm zOfKK)_rZnZ<6_vo13zh0S3y~Md)Ti%C5C6@-=jshWs zF;j1z)b%+pNn1?MgF(eVz%^LN3q*uD@K-k*#+-xGBW!6;JtSQr4z_x@1ai%tWjl{c zUMW}-tGDN#F1jFUzJYp-W|NNMU(2cl%b09I-{16*U@a&gd64X4*9+|7w1x>nR79}^ z$x^a|-7YNFyga!)=tEM@k9$x0t5)e6yPr)`Dy(5vcKti><{!>vav`mUyC_FmV1jkd z$)tBF8*D7z?|qYsAg1= zPlinAmX?Z@`*qxmo_!z+qxh7&rLYxrjks2Tyb>I04oM+)t_ial9t=DyN!5MEG+?Xd=A9pb_iJhELEUwCQ@;S z7^cI%6^8kk%qd({HwxO7lnTRzo&y`;9QeUU!+W1KcJhHz7w{E1sVP3Z6;i4|z!JMu zY?(3L1PS?nGIE(A?F)J@ZmzeXD!NH3l|2x6v@3s_F>N~Jh2`bL?#hV|0gh)P4}A&uz5(O2f4t54S0h0f12MzRkJ#{v7sz$eA-$^QBS!5E&bn z1j|YA;FVBzk7SpQYeT+d!Uy0x2Fy zKqGd*F{T|imC{pQFjJ$UOMi6#I73>jga)y~V@u)%nupe_x!E4lSQhkxa;ZPs&mD#% z_X2@7g=r65*t&(3awaGD5e{YlCL6i)d4_K2?Ikq?-I`o>z=IOflAXt@$6Q*I?W!*5)66Dn)R` z(5ig5o^$Bl;`dW(&`C+p5PI4|7=cEduweab&!(abZhkd&3BN=U>-cQqy5pat+xL7x z5xOpKv~vgXY%!(6#JwH4#29bO+?G3BwUV*z0EdmC`Nm`C2SDMijRjwPn&DDD-0c1{F>M&u81{iuv}*D3qF;Q z-IsIKCWYIaceVOX6vHe}Oenm7$O#X&VukFECkqkP7^+3O(oYq(=RE;d~;K%xQ4ctNz@Q(SEIfen#2;fh^;& zY@>4F+qi{sr;A63gaMPs+h#KalSM+vp>Z#`5v&@zcU<(gI<+F5MP)dOZ+&G%imrV+ zF!?0CPV(Rt@AupH^O_|_3>jQe4T7Bl_l;5nf8@=h(rp4v?W8x;^`KRLB)4uD|Bk`(w-=ega*Z961QiL_RPWFlI96r2wkZ;j4v z&h!1-x@$>>kt5i6&Rurv$~E*1!3c_N7qA5ALPBfmCOl7^2h78bMyI@)b^ z_j^Er#Gj{H4;X%f-L&}DOgyabk*5?;O=*ZXDiRgB34^G|So+5cE^P1Aa5>4Ft{lo# z`fGkCvb(_7v-pIE7wH=@NqhPx#4{`$smPM$&V!rDpJ+} z=56e@cH6JG$1~SyV^QR$Q zCjW1h@F-LzfR~Q{iA)-@biNRnt`i1Bg;wo`!h%!&4B#=-N$tKAwPUXYnWWTv{*Wup zo>0?hIjR7H3zrHBq%J0m)$={}?Q#m+1T z@}?5PI`#71;q+-RUUM3C>T4uuZi$&z5Vo)zJdj6JdPNUZ_q1Y^v$pa)5f=Ili)BuK`qOf z6(Qv+LnH>{*@28njr0e6Y=qXNx^5^6>4A?IU7$!pwDg(Bu35j&azP=8F7;g{qKz`l z?b|A5(}{s>)weVaI(kn?SQ!p3)pI-lIai=f9R(}ibxdP~76mi9`8!ffT+6IRlAzWA z1sJ?p50%DfUXk1sjBOw$1L*X zgLM$AFV?~c02VkhHb-d^C@nHWSTu->W{(9m#ICjYa>sbgOAxYRwFPKp*x0W{opFHtrKr(X?QS{F_W z^;LIy{F+)CmI7IsMf}vl?iWmSuH|?>tezivuOjb)iAMzoXpaI*Myj~**89Q1e+<2< z%2#qRA)816%ZLB7S5o(&g$KG%GD7o$t4`qcDf=wHmrr~ z$U_rb|GP}W%CH+lVE{IVL_Dkr_v^4#5RB|z35T9y&nXbm4beU1A`n?GX2-yP50@qe ztC(IiaUqiI(c8CW_t4=OycO`QjRDfDN})9FM?HwU+3~9n`OTo&_lQEWke6hlcFnGG zVGm%O(_ND!z@CfEA*{!VmF<(%hkG}Fwe*yk5LwU#xN2=}Cayn(cmx(Zw=8ps-hPll zmY~pP@MehDBNeybv^R&Ox!kx{_a`dnKNfgD)T-DcC=(Hiq zf=hE_sx#!ipRNYLqmsS9!N|Dw@b*ce*qOYz1$DlEDg;Tc{vEo7{CIC{6BiAGrjcwG zkMV=(QEi)jczq!xk#tkR|C<+1gg@0aGu`TV`fDX-OK7_C1R|K$Q;-iOC?}4H%I)&2 zRtw|V_5+*5DszMWxOhKJzkTtJQm0Ow%BUAbv3G_R8Mt1R8@%X)5*zef8J33&0jo4dIwZ5)U)I@Us!BqobYNFx~^hC7~bYCC|_wW`s@d| zGdA-|QqWYQ?dzI{A8Z<#?a3XJ{s;GfSH&_?nb@RhDRD^z+_;E>!Hxq87FPbAmq4B7 zR`;cx_zG)FDv_T?%Vb~`;J#8e!HMT@V$Z4y|KO=fW&zmn`8>GoO*kGI9!B7wPfE{jI#c#n0GqvGki z5z$%mUsRofdDmW+79V`@HkRBc8_VXCxG7F!iaIOeQwi;d?`s{Qk)#x} z2>R)N8O5{{>mVM`K-64;zXFI3Ia3zV+~~P;KrkN3n09Ci{kp1~WM45+1 zrBuB1quqY`cLyoy=y;yY7&D-tHHTA;Vedxexsq)f^T}ud2%`)10-`~jIa508 z5gnzLpDyh3*8UiKa+%$?kmVH;*;lwc5$%$F|w$|QwMk8f|e2I$g>J3}KY(6|;oAKuuG7HEE||;| zPssk4mGcDRk$w7473nWs&@2a+bqOm&f<^&ukY6H<@=Cm&P^AzZ&dKRW$KTVGDkt@U zx_E;udsH_+9mhZwc(Y zHxCFLQf*ijZfqpM`m<11B9)F&FqUt_g%HO{5lXoV?HLh5Mmby~3ISmEOLw~who01! zL&3ssKQ-yPj-joQ_(P6JFirh2BolQKbB0N9$25ll^%i-OLNyV5z}t*&(UNP^shU*% zpXhcyKU<^4fhV*U4INWtW*R(En2N+nWPw|C^kmRO{@58OjL9(YM*4hdU9{bQosHb* z6bc>z8-C_cDS4q+y-Tx5(l7a2j_xv(oeQ=YB!S1(7%0Tyt=bN;34jZ*Xr! zVe;mCv)cLxih8Hv+-V5SG>4$4X*T(aLD_i!RMFJ9$oWAt;%w`ct`YMlde0o*$AT_P zzmNFELz7yfLq4zdo7SE0Q`f^pG!OHL;^47uFq+K{0=(sqOEx>?M3|$hUt}jTE7kok z7JV(7LY2n;Q|(yZ2#Kyw9`Zybfq+NrKS)Amj`=AfF#SB1CCR;D=4W_|Q#}Q!HlX5( zjVf*Bi_nMm-<7r1ei>{+xakP$6H=MRy6fY&qnD^6CMo2yahpHZm?_@CJ!|)T+;ku` z*5j3X9qaXIl8XJ>ZL_G>wK(_oCT1A(wom>seg+r$1QpB#)_B#U79=aScZ{TB9_T9c@1Imb#xd#2n`~`J`-$ zlFtU_4=}AXLEB(R=q%wKbJxk;@V2K&X*2w1xR$g2b5X-TSN)EhLF)n0Mv1`>cX_eB znf5iCE^h#CZV}__r?NlWazCRg!W!yJTY<6}elA$5b8de$&AUDfo2R@bklOh$@%>Wy zJ9mPLjz{^@aHO&C-&{{jNwEn8bR`L+F=`C{4@A;R{_zAzY%JQPJvWzg#&fIm%7)AM zQyjB;u7mr~Q%}J8E9;L}8yZ2Vs1xg?GgT$VrNE~@+VzCcQs7V-qvIn(yH1kli=)L6 zl$%IKfdif6xk_KR$*VR;LIO&Fsjd0C@gd)twjmZ}p#;P>Pm_3uh*663ZppfW`Fs-;sL}!_RT)i7qo(1OwY-jP^JRM+P|HhR~Tprp(81rW^ zy*^5=w~_Z>;vF9n#vS`v+5yYa>o;Ec7!X*ti+lf%ygk=B;$jbSZe=WyxZ#r(M~=EO z-lm;%bIE&PP6mZAHcE~k_r%b8LO#j$f2p`r6MHf`ltY*NE*w1G*!eCA659vN&k15| z?${g67<)*uE`Vp|;I*%992d{a95(yDSXj){7<3g(Jst2mZe6uuY09l4!Aj6@X_+*c zpt%c`+JE@D>mbzcK1GAK_y`Ye;}5~EnsdX+>bM%_`CG;1lN-XI%*WzlP;ii?o$Zv# z|D}0zUKTh9WwvLVkMFa8x=wiCvnJ9P02PM}H;}TVlw_iMGc)(7JvdI>S`mL^F$>cl zS|}1uFM;f!REa4O1`9BQHB;*H!~Z{+aHkwoYKT{#kMr(D#3bS)DcAlA{2!b~lOW-h zLZ`gRLqe44HnoL5!vz?hpQVkz4?T>KoA6_55F1S^Jd^*&|3*ulSMv)R7M;ZF zC;80$KK+D2rN2W0EAu&@zDon~Ayi=z1L8;740_7RsK z92Vj#4wM!lHH8ycdA4x@K!3+Fe`IXvGO^336r3cvSpqgg+25YAL<4#Us8 zb>CtsiyObE9MH0hW;v4F&RgH$%5E@{x<&pXd3~G`^TX~+H^lXAfi-^0TpRy~%tmvBZSLrqN=>15${Rc5M z`6F9KZ>k~zldUL2c9Zn_dOI8Ex6o>qe^Q>`Vh@JgVA~ZN{F@uU9A3WVO2r?+6CN3t z@Pk|HR~ILyJbfAL7wUoCAeMQz)>-B`eS9+GvdJf)d|MC7oo^U9b%Yf}$-Ai4z`U#{ z^qaa*Z0UM63kMAbmAG|+N0(QJ#$Lst$AGG4*~MVoCr|NP0v@5bsu=8zaNig-Em0?r z%U$8aXbnv9AEB*!ypKWa2>3hH{?tcruszsb`F&~n{P}yz=h?{#Ib{aNntaWy&8>_n zvN4yZa>qtiz28}A{1K(e=`qR-{oB9cd}(Wez&DBy-~~el;aFn!JZ70DFOEQ~iXWt| z=fLRna_a!4Ym5>N{#Eww(3v67*OuIT&AOKn@%p;=_XRU^$j9ZIO-Ld)ho=e9)EC1l z`>%?9)W#w?3jB)GgpalL)PMt}RQNlY=yoE$OyT7xjyB+gvl#xTo81z&Cq1btNA*Je zDsI9;uiU;#z3gH0>UhK|#++l@aFep(#-fIzI>Unz6N&R)J~O(VA2AnsfTy+)tkkeU z!u$*DB2;toS}K!E)JqK#bKw(1r*#J_NIr6&3nXc8=uELW@Ej`KqGU&RFSor>C`c)| zT;mHh-{0M&`MfN>70}(E?fU#L{Bzm{T-ysld>dKY z9nYB)PqqdI2hgnYDG=0|Nc9{ByzH7Jb%`f%4fZ|{({t8DPsiPu>Es9Wo}OKhlm&bx zod1lFERPD5-;Fmx4>W1jynNmD&TG&EgErEnOFRse=qnPB)3;IS-Dq~^THCaaBGO%y zJJk+-_XVP<-@jz!yc8LY?q6(sey2MJ+toXaQcUxXw^wR;sNQ(px_rxLTxyK;$wWT| z&0AMSqw^nvbG^JDC`{7?Oz6t!PTI`Fs!gW09xS-{DF1N6gadkQu{? zV+Vv5ARgjDrC;I5g zJU{jRvunzvQDAkEWS{Eai4h|C`K0Hs3Wq$H0aE9;rYYW*bM&)7AEkIgBZ8(q-7>kw zRooz!(I;VHrZgmbPv2uNMLi?qDiE;x^rkqF+qV3lY{?zNIuEXf@^;Ux8G%&Xht%4p zDjn5d{1nJ@IhFg6ek7h=XB`Vy=Z3eF&`s7+2J&0FbBAm$n9sO=zqj&xOy_qXj&GUrld-J0&C{_WDtt(hGx&(P%@GBm zUuD2yEjZd)eWlz`oAZV1a^+#??cbc&y#P3XaX%)JI;e9Sf$m#^aL_@U-Xbc?0~>o? zrtV<}IzQxZAKZrNK zK+sbH1XF^P^~au-=(c@{75$f(ub`Bl9`{rc9FxtDTgINq7TSk7tVfMnXsK|mMkUDv zMGr6QJAPP^t3x@%r_Av4@pk#_Qn$6q&nKp?-*o(srnB&is%yKjiom0^pmcXg4Bg#b z0@4gfcL@lHNDtl8IHZJ>q%=cGO1ILjgve0u9)I8W7l>@mIrqNTTGvt&XZ?7qaJHZ3 zAf8pUchBIZeUX9#W!}i!fceNjPQGHSp$@!5hP}mbC8e2ffn_T(tWVCvF1+hnc$j`s zpww0_0aWQz)z^|V??(|QB!#*M-?i3>H)Bi{Qe|x(->9eR3A+i%M(~dkP5TD!WWK2# zMYRnoCM$xos#g-VR7wnK0?$)h)L=d#$ncjRf6k>{45bJwPm1~TUT)i?F|q2|qtpgt zrJI}I?=>e~lWjIYhJ#~@v@DsH)SapGDZQVtf%1ZuiEWNInaydGE{Shg*>bETV{L)! z0KU{i4rpZX4E%WTw2wF5#9v`#g`K@?N$7g3W~V>f^;g%betR#1Zf*bQ zW4y$N^TWm2U7yBk=9?Sz4X5meE+gBV&Fm^@XpnLqZt8M|!~`pn)M)g-Cv0e-N9aC` ziDGEtx6A|fWY7o`s3@n+!?Mve#vLvWKFXX=;$llM8n0=Hlhi>O<0V61H_+>kPE6Rv zzhxK_os4y(B?X{Gx&6lBo%}&(J;Y1Hx)9yeJDVW!W|`5Hsf@D-la?|{Id#}}=eT$L zH~`tb(YG zgO=u&5+n~Nn225zj^O*7J0(T8mc}}nN@Yb-G}UaWdoO)7k&q46Wn>MVF)Ua$P)-d~ zVmng&z1V>L%LGP`V)#I*l%#PHxrwrde=_SW=RM(P31?1A=u{}|g0C{p*p0BwpDeL6 zPJ$j510MXE#gRZ2?=ix!Ibb)NeP8M#4LK0(O2SG=;l+a=W^Kwi9VfT1x_uvtZ%*h9 z`;jB6cY3!Syc(N=ow5A`1v#g?WKbN`>WzB4&%pqqHsy53uVSTMynR*RUqHN+2m8_E zMa!8exvz#GS|~By@J{<=czaeN$yoO#PJWLQxmqUxz!TzZtpP$08;Exo^d+D-14f*- z5Sv}CO1hgBP?e1cTh~uk;+drA-T5Zp9q$&3tu>G;%D|lvwr55R8RubjZ&G_XiCQED z0NOFzvYcb*HsKf^(=ce?nsK4E7BS_b+?(6t)YDRPHT`{EVg4iQS@Mt(`I{Rr$=f6f2ysF)pOm7|8(8 z*&{>hp;e;7Xv{@0C=ey!U_<;|wgmTACwkGQK=vg_hzjD{OQIPQt`@ zKA&N|C>Zm8xA89fRfc7FzSt+YS7yNUsg_Z5nl&)Ml2?M%VZpXH+VsWwqh_mhU<@W% zzr_$P=9c`l1hX**V9V0UbBf7F6uVHxax%pvfxaENfJp)QPIcrT9%sl{z-~If z^vM#i^j6g;SjhS(w7ZieUUc)#gv#B4O8UO4RRK|j-DCdT^%}0~VWNHyF#=L@UG?KZ zjI;m(8Jl?d;LyGTGHpyYSAzWKO;7>(o+o8Xz`s^4vu}*4Wl+gHDsknMF7q698dE}Q z4}FX-c>mj@m(wA9{tN)qo)=Pos4fAp@bnp7Prv!~9Kf{Z1|WtLi%Xp~5SaV$6*yQv zs+fv1FmEYC?tgBy7Asz!@+t7}1s(#8d9Y*d@MQSoO-dH@5Gi*ixa%leTM=EKi6}r} zTRy5>&`l&VVJ@W&1)tHLLaS%aFZy zXjY(FA@rF0h3Z1e*9Y_OqA{FfHF%5hKs{I`G5lg#4CDR4!dw0aT}&e12|nFJAX0dH zNcz>YFEV3>Co^A?-q7R*N53jf0_IkWb+b5;&=X#gnl+S2mF=s;jJ*bDTN?*azY8C; z%-dJ8;3U@ESOSo{CAQ#k2$n5Iro0(W;5}Yzuc+O(SHi64S4d$@Gwf~%20ZKCC$d=K zOhs)Vvg=?H>NFJf=UY5KYoe&4@>3a8-FMbt9XH(K$DsGeP|sNAC~(8fvSWF%PxAIR z-nL)%&%Zq2mSzp|KovBcom2|bH4$~ zpw?w;;s9Dw?&Cm&A$yKOTzI0?Gm6n9OIn70HrAU>GlAu-UD@@AEx|xzVCd*CjV_nm zxHZA%e8^~5K|(mU-xt?g@U5P9e)#2X`eYOe8CJxL^R>tDxsl?yq>UZh6ERKyk(=Xe zBR9sVkzh$iNY}4^GgG6jXqR}NkP8bA8Dbe5-kHz}KUw?97@0#@5U}-HrpV&cVIPBu zaY)4NQ$jXEE+s0GTW4q&V!783AYYyidPbK-tb)GyI@Ds7-0!qBrO!FZ+d`Fp0|&f2 zxlBhzyVLn8-5{^9P!srx*vmfA;*8IrM8}y{-{X8UlJ5*RsbQoSr8VwWOLj%8Cz5nn zYR|I7jIja6zZxuh6&7Mrr2Kv*Fih)|pVAyEBcIWQU;DTcgFl2^RY?+mTPF|Aaj>q{ zGc?_QIGu@2$dkPUJ4}{PRe@&L425suZ{0V>n+n~*3=9BUR{N#C^*TVfqmcNeqUk;= zD^QU*F!%1GmfBzE?gBQ?C%7`Vx0#xO%atkEG~trC)rRKvE$xSTG*~lPsGZ;w5n0lv z1;&Tw7f~P;_-j%4tj&e?yx-6tXxoCLIpgQ}46;X8^zv3ae)`(ZiYbCN4$sQ5wj-CC z$^0W~UKU1xE*>4#!+FAACb8>n5#sdok6t&PDSu0^%u>2B(sajIsy6R9K;dx*Dl5MH z=JDFma*QBL_W90l3f@@YMBr+$#G$zR8kkzFp(mH2umQv_FjjbDxnpO@@xlE&g_(5B zaLV!5xnid26sH`$2hNO;wAEgKl7zf{6SO@z40Fj zq0Qb=rW2r+WCy$yAKM5n#hQra8MOkFTINn9U8Pm_CM8KV0HAB8$D*5BsjYqA>ZBh0 zD^;#wEq_;C=q!ZQ=u^ryK|1O+n4p!`4z4!L6u^n5J(>8qi8-kvI&Kk{B@csyAao97 zwz8fB6w{z$C@l7+)5-iNgKCt(Hw;WToarxUeOf_ufYToFJ)*Q=&VySI?c7;s&?8UhucuHAqq}jcn6Q*pVLMn$zKeJ1P z>mDC>p6zLbh}&aN#M3!zwE;0{W_g{grHeCs~m zPRef2jf-Cf&mGrW8yS(Q40NBdc*i;V1vVWzbf zs#i$WF|ttVlEj3Dke6H(2Hl{%5U=mmGSy{Fer(U7>=#Dm7Wr*Mw^+Z8R11Tti^PK; z;50*g!j~@J%gX%w{kz{UiTPI^9;ij`(B|^xcrTddLJt0Bryh9vM2}yk3IZD;%0pJk zu9Hn@Zvc~AO4Ma2y}%J%TARcvdf_@_Oi}9KqWRB*7Q-wMzLW32~)Oy*i0O8aE~?i=JsXm z7_s@A37fG3@!-p0bBz7(m2jNIM~9I$1Kdw`M*q=C`JwUCdyc38XgqQrSQ)dN!4MUD zhb3O8TZZ(Ao9PG+p1t6?y^wRc#<|J^JrCTEn%&K&%4u_3EV!4zHL^tmQ)d%6va?b8 zMU}IEVf^8{=J>Cqj-x0xY#W^T$WNMsYTl^j7)2|&Z@Y$!7SvhZ{O$VHY zslO(+Ysb~{@jGx6@uF+uQFUYoBfsa>0(Z%* zGtG&&#{HD_0s43toq^5|L;ta(`-f_hpnP*WSz~|h@T{Nf=$JNV22j&ZlCc_%cN<0C z{tUvObm}GXMJRL}i5@k5Y?Wo{`yB;wH{ix)EE~kHb*G6v2kSkd^4`9ClpCXPqJBJF zMhrZvg9U{HCN1;Ym%VOoyw7A2S71q6nIt+mPMrM!1Dgb&Bc{ebeCtV2xFA=iLF6|W zfBWxtRPk$U9qXuHiaj9BssCKSpbiRSt1wUf|nzmxYbx9^+o8e0_-EY zwqJ~ZA*FCrV&D#7=5#p;6&vGS%YK12E!QQq8HZK@w6B<;@9QA(^26GbKc9Bc^9pKx z2ouprGu(!lc<=3_oBPN=D0wiiP+>lk44-F0GbBaQPNBjhtQc_#okL8R))Xm44=Jys zUz=Hwn1T?nsh3oaNC#7l*gT&bi|S*6LgF%JtnI0{K^_s(u)(;LM)+ek$9!%$`a))V z`>$@S#h+}Jke~^PgdT|_o1VXYBr}|R%s(m*NR%e2@w zIMa;JiX@Gl8&X?E;Yx3AFSkc!^_+rtWTFaGtg19E28~Xy$rU3aehLw!lsWK0=1gWN z-&Gd-3cmV}<*-yFdRm0$aHnP38uI@NXmdlF^-N`_VQ*W)JBj=(Azj_#+=?1I!6Tzw zVE+sq+qa%H6PobMv#pC08%Sdr1fDeJzX#<}gs(pBJKRP%dMhn2jzC{N2E5@xtklqDJ0= zJK=M2`WN8ittP;OD`Zd7=JVS@>CwP@>Gx>Uid25Rn|MsU=}~W`1@+SPqF^_%PkKwG z6~}E#$+!XYL0K{an-ubrxhmQTf(q*xV4$)hO!5qY;&43Bp+ce{k^%6Yw4%T(oKx@u zYS=pN*~H5@9Z7?bc@6rDTY0ihiUkw^eJx;cMYr(s7ntPOuk$koXkbz0zAD}*l=<>Y zO_AIWqbZN3eE~O6nU1V;j!c-S6*aC+n688{{|5ega@11-$%S0VBHVF@qLP$pf9CAe zgM>~EPsjTq>X?*>`UJ?6BJ2h2D;*_1as^ZC7<#6Yr@G0Wsn%4+KqxcaV;k9Bemt6h z3v4+IXCaUZkie_TJBO>=iQ-nFZar(KBB=w9N=8t~(;{!7+D(^Ly=-0-&0Cw%k!mVz zYARU`qHGXv&l9yIpRHyVbZIloX$1<^NXd7|EBu;uq8;fCuig)>K0jNu2UQcE_l0dn zf*&&0xcoFNs0D-OVIMN#i>##o-rMhN4z_3OE47A%%x2hd9aV4|ZsS0B`(8wR*+YHH zy`Vs^7q7>6|)EdGg2`6=$mhVSB+N+t(+9%-}%U+M3ax z*mh|7!KMi*Ei^27$5swdsWg&ntFaJNafSwZ3SKxkl7ZM8YEQGh_4X~MJfXFu+xSl` zZcN>4sXrGARm#-?jdn_9lClIF7ZFvfE=|pXcG3Cg%tZw8e5L@!wh(oEEM7-Ac>W0Z z`dWtLCWhu>wNnEX*c9+h6ThpNlB_16$89Z(756dKMu3$1wcXWz?%6tBfp4KIk}N_8 zdl;U0IOD`vAG;MO5f#L6BSFw%Q$GQ8)rEl<4`pp2#mWmY=L8s@9n`5I3#2!{UR5sa zlxPqQ@07G$$?>pYt^6`69R}259l6cXSw=?WCeb6!SD~o4NoyC6b#LKq*-y}B6vyOy z;-4O9Q~_=km`#!%;8zr1?25?KaW44nG{josr6625c>TLIl1FXK2n3*(yR6zdc*>Bn zbQDdzax8^MhcdOHP8Qyc1lZHeOoQLS@?@;BUV5x2T|5H+HFdF$?O)&7aT@C=`ScCT>Q!@cl1HC2@|$s+@OiQu{wNlusZOo4k+2Jp7@C1UD%k`jYwE| z-rmrM82FgivJ%S$lF{7-`K||_uvn|DhnfBEFu?~Gw@pX&qX=hd>=AhH*r9R7sE9@3EZ@gX zR-)Bw3|bwWGQ?<}LIU#oAj(3nvxS`-g~@7ft0O9vgiT{MveftCG2e?Al(zjRYxTNV z`{<3SRWe`5$%Yeg(AVm(e_r~sRQf#r+Nz?1fy8r`_RpZ(Ggj0(MvW|#0%3slpSJ_S z41)#e@BBttE{_PYQu_=k`O_eA1ZBfHWpHnH5tUXWyKlq*7BAN*q3tK@9VI_h2Vyg= zdI|bxIS}bq&jeY%r=-+|B?aW47hyqDnP)xUoGVE*M9@j%Ba>7MjwhJl7zg$N`kmVIsTNi^n)eToZZ_}Vi8mwg^mfl zkc};QleGDK+Eel@<|{jEb+hZsQ7$XySWP!Hs=bG)>8e%GdbH!-PN|pN;A`R@8EJ?NUPcBoC;xd1_x_370YuOa#`vM! zw>%N(-sJ?+Y~O!GP#-PW7@$fA#Ps@+aiGiWka(7u)7lP~g}N{GjPnI?S2 z{3&Db*(JzDkm>)V{$~^gfrLC`;(w>&bkq#}SYrQu0X<9p=#@$VwJ$qkz@$-S?GW41 ztpx60_iwDwTi0h~ia&tse_6Z}l-+F>ys5}3-x0NWck=zuf#dw@ldh@;1qTnV*^tqPJ>PL(O1cpS~`M zcxd>HG+RkfMx>$~(_rtL=)8~w`165W-ZfmavD$8A=+cEr%r4epeH`0`2f>=C7pPRJ+m1G%LE*~d-8+P;bD zJQs}*cIhzPgp%A0t39^&pCqS5DD`S69dl$l;%RvMpvaWq$1}V$nSQj*)4A+oLdLUK*66vfvD4 zb#Lv-!=r6RgGkedin6(@&X7u8{&1P2&I-C7OR)C!dV&Efj16jEJC(F`*U$wpu_M?Lj}?B_Z79JQJV2L5^o-=^b-jyCtgTpjz^kbLRJ1W!2(z|B)YJXdfa_SLqw(~$05-IOp#>CA` zkY<~>hsd39WyjTR?pFt`ZNJ`BiCef@kl&t^{$|w->X#lxt$cAPMWzmCiGCRQEDEBf zVn*=%NxDQ9$%xI&Z#Q~!=a4Z3?8!~xIrdJ!Fdm8hO$MsNrj_-+Dmg2wh*;CkdqJlD zyluV#x*u!?ap?=7Xvy)R_bCpFa z4zcFC>z&hAb|B5_EXKU%ZPNLxo<`}X^AMB(gD#4n=k;k|jH_wQ%f2wEgbPX{eDkYWPVubJ`7@^NRJww*As*CdYd=e5-^h=``U2dybc5V4 zN)JKl5=Y)Zt~`b3B&xSl?3%Rk6Uq12n7FLp^b2bH;9gHkGQlmvRxj%NTZH{azu0>; zmG3H1s4~RmQv3U6ZhW2OU(tMDjF@?~{|9t0 zTcb9g>zV#8kKr6UbQ($4HuN8w)K22qR_OOk!S3O6s{uIIJt0MvV{U)T9gB{V21nSf zHsiGIHBp{K7W(1X{J*jQ?3DsvME;&~z~q;Ljwt!cWm+3-pwz;#t+QHyMy=4`&|Iny zrxpUCIKWOzNs^gV{Y|Cg{+Cda5<3lNMOx(Eq*+pT{D4Bo8}Q&L4VA~C&o3Qx+}(1v zbmx68Pjbvmh`WbzmLN7%xB+{ktZ2FOW;}lH+4*9W^?e@TpBJ(v$|kwyQD2ufTDx2# zED*Jl*^E)AAkb;;=yS~jMON&)t=~~z0TeQ-szQF3aO{V~Gt=vw#}k%bezE*BZV`pc zk0+ULe#Zyb*L+2696iBp_>=+QH{H?{j-6UYus-bw&@~>Jf|yg;$fm2IbvBc41&<+) z8NiB-etuSN{@CPIrcJhP^w6SmzQhj3+UGb9L2x%p=Y6=#t+F0e5_=PrW7z0{J09gM z#-yb=DxOjx5BY7Q_w?NCZisBxhPRWJs=vqZoFzJi+T)Ke7=~@lgKxYoTLzb;L?pk` zhgY1Ljbe{WkE<+mPg#79*NyO=hRcJ2S52k%W8BN(&w2gL?~%owDCtptM5lcYk}UC=${(b*6dIhG zOHJX_SlE-LVGrkU39dnVX9lVa@JI?qL=oMjyRCz{UdOS<8qLgQLfcf$`zH zZSK3DIL6*&d$|d*tKd~8P+q?r1zc2p%iqh+b(J&_UV}fx3B)Rk)g7Nv^a9P*r(uD7 zDi!2jy}y7BQL|D#SkMg1AN@W3YS?$ZihW&6>E27Atk{^0j8?)(ZA{KbmbxS;(GQn zoxxmZ=gHOk7=KoR0wpdt2pfxk`lo0u`aIs{J);~&@mW?CQuv*oAv?w-@0NrM!d8f5 z%9-;}7$nj`cX+ysndufSR8iP9z2h{w4gBs0K)>}N z7iQ{%6tw&`=XI;|+fG^r(g6R}d3A8kdmRDUp}pa!9yQ{aG;-`LlK#xyuDWe6-ejgM zhx=oCC`ORZ0hHk`F>rj0hSZ)93Hh&1&f-H+HK5x9BYyO)h>+T@`!b-s&BRZ}Ml%GH z!tE_@Wbwm=h|9DAwbgwQbd`>A!FI`w1X&Zlx5%K@HPU*_MCnW4ex~zW(1yG8!&X0# z1-;a{57l7ftRe$}6syM4J9Rd@7O7FDRo$DJ0awyD(1U^WVMFZ1=T~w%9lI?NEmFwt zwulfR`3OAse;n|)?Qy;$rOc-gU(cUAp|Y7B>9~Vsqt-z^`|WXD)HynOboTC)kY0Po1rN=O?nNer{+!*$Y|m}(;!mDjlRJcyP5+=|Jt z80}V)5&lF1{Xn}JLUDkPlSsCsD3=T6!%3BVR%DyBI$j`4ezEceYww$96O^DwXXl1T zIZ#=&d%&%4~OW+?zWeT=pU9v^Nl}}R1Z$#oh%F`={97KkD zVoF^0kJ4cNPt}v|TPZ|2a`s%4k9eyP@2z9ngsu#MAJ61+yol&5>gz4AK+e_kDts!9 zoruSv7ZkWiYgp8}mQ3^_nHTyCrQayYesA+``&2?ni5b&v>Bq^i`EBhC8u=!ZKH17= zR7bG!!A@r_Ig{n|F%X!@)tTC1Lo~17`~cJg%Jb@pMPSUkV6fpS_Z|*83p>9@+*#-Q zYxu{%CyZTzRi}aVxtS?Vpyf@HgC6b)?6mhzG{Vm^yt#dqBCNHag38K7Pqe_;b1qwl%6B3>clp%^%DS!e{w8oq9#@z8 z359uZzh4_&j}|G>$)e8!a(wxO?`4I5(9G3e>q;rgtdPBKBPvpCFG`u|a}wftQT!++ zqZkK8+4KD6fiL~@K%%8S!d9$k%|}#gtN{@0K^0Wz&fytSaw`Q=CFU3b!-09vJpehm zP;JII%)vbrmF}Qgb~8@83VV&C`YELydV|WbvKKm{CSlEAg^aw1)^ZJgadNzDQCMnK zyLKrj=~f_O*41%2;!2jofGEsoNt&?(HYRs0mO^62;qnbK!gBIF4tT0WN%@zQ+x$g+ z)BhYwpY1&R=W&pxfny@9qO_e+7Ke0oPnzo30usXQ+yECnyh-;&o+w$wD{<9fjKD~= z45H)H?{B)cL419!ZG*)%vE>g?Qmnx$*Ve{US2K!=tETsf>E;cdo`HlSj3iMV6yXm3 zv0u+9@5%G6-|JB@o4#WE|Dv%hJ?|+65=%X*$FTpaArXB zZ3o!M$Df`U`0X>S(@6z3e6fywrwtqEM|DQ6BhP`UX?tcm2e*M$AsI{x!Ynattl~d8 z+kGfc;GeQD@r5&j4L~UF+qB%Gg^40=xvDl4cdP*1eAjc@xL#0ieU(dj15W0n%B-gr zo|4Fr&6dNS3Uhdk7-yb`F zs-BmCrggN|85%zvue)EdPUrEI(E!^-t*IVwmyRT|g%W#bfQg|8GAR0+%z|Klzo1}6 z%XqSpyW;LoV+YQc4)>+0xy^VRWOGn|7nOZm&>A7Y8|)8 zeeFtP-0`Oaf4N`(TC?!8()MIGzkSp3c#D$AFFB*WX`*FwBq>z*)~t|dp^W;K8a<2v$rpjG+;;3s6Pe* z)fSpsWWUBmt+WrjSKfa!JY6_d&jLG5}Tcd{otx>*FQz zz*=VQZG2mq6Jow1^%0pya(w$%avwV8AjO_rXW!3{E}>~mMuTbNQz&sZ?AMol{u$-Y z7?A7o6HZe;Qla4z5HaYZv0|ZiP(|QBYt-M@V@~|7dUnNp(TYpL-Rbw?d+;3m(;a*+ z-e=KSaC@Lo*Ac_9QNN`8uc+#LU#2V|p z{9u|G;#=~;V@AklGVgXf_?8)jN4~4fn(t!y>Y>Ezu9IFmkMZpCYW@|eyW{KQn~vGL zza6S!DOhOOxYG5~`dJ`)LfRYW@p157EAPVIt%kV^ z>qR<`J1CLy+WoRO?z<3zz@*@_67^FxaLeWTc@(_IWF@t~-0CaKC3_sNJWYwp!*fn1 zo^uC&vZI_j9e7!@^}!KiSeHMl*NHKQ-Mb(V@NDOuK>QRB9HPDI84j~T)hf3a)wuZR z0Z+ap=&01dv}wZIl`|b6`L_IZ&wL~fBp)=U=LmJOuJ|$WHp?4F~FvXF4P%Svf#?TLmYUGGG+%eN{aVf z-VaVapg-iN&OvN0dz9T@bgV6f4CZ+>Cr9Cd)#6tkGcW>JGKK ze!m`Y^kChB5S4d$5kN$W;Gr-g60090Tjn9 zqVKFM@heW^b9gtn?q!pJCEXiaB5@$LEeAda68z^F7%JDA-4zUeo$gRx`-Vi@=yhHO zama1OuSo!74QephXdUm|(*A3a?zwy20~f?4=R z7TaL4J9zoG_CRVIru7@z->LL()#IaD5?K zW&VrAAg6kNGD<}<82U5API>2iuMbPZAJzhYy&*V$*v9^Jew+N7r9@(1YACjZjNFfo zu{6ti*j8V~7&GA`F{;outxuULv$v@Fqqr4bQ@B-ryL`|o(Xn+I7HLP*Ksr&`lB=v- z9)f#qjDYS}hXy(veSEo~ERhF~IUP9Y1%;avRYF?5psut24}`Um%1m3xlA{dG9(7}&#K2y{IpWN2=O ziwXImM(No7z}~`wZL9n>4v1bZoAR`_wpH`Qfp(}W2Sq0&vaV6`&}IrkR`%)sQp>1UDFQ=K0O_sw>$*8Ouuq7-{8f=ZqRqGk*+ zDFY8;LJ@OX#xY>ARB`$Q4l5f}M-C&4{?j}VbHmvEUZR-gI7;pV*Zbg7DDIS2wjr>jZ zU$rNmia*WI@mXMHi71b9Nr;Nvc}FKL9`%aBnH^c`j<^%i%dO1_77XYDZY|*}V6A7H z5MH2QUY-lo_OLLW95Q05l`$9<-ln+72A{kn$PcN`6~wsdYoM6b0d`g?&vsF19+b{j zFoMdzblY?iSK(DuA$nZG3ey(y)iXC;4 zxL&+e72DmQ%gI$|N|yzmvtgHRbbXQ%xL!h-(26*atDzodJmLiy8iPbnij-_=(Q`M9 zijrmsNS;M{NypI&rz5wpd-pFh%PsD?s19m*ObNZP<@kCwsX^6# zphJgv0TZg(tPt2HRE&K3!mw*F7E)+%>Cw-Ggkg#~Mits9=H=(TUm*urG|b7@F`+FN zBd??b?LBeZWly5|5*<6K`?pgNq#bHyXV94&>cBJYUF7hoy90x|k%}|jB$Y{Jr+<-= zmSCIt?-e|8(Wf4b3qYgQkEw}oOOFHtAwkce5;v8ILZ=@vAeEJKS-r6LZV8{Kl*!+^cgM-co&;721w?P z1%`YZYm?M#XH%wm-$CqxagFClw!p6-8W$^hcd4{&b!=f@(2BRiWQ%R>qQbvFk)ha2N15(=^|B1KM{T28s@{8}|HBSeD5URgxx$gHuGu-OaJ- zC4l*sGbn9ErDRhj5ahO2!p9w+?O?Iq8fKMD#nXDMCEGb<^Jk%Zg9pD)FGZq^`GUX- z5P-_!jZ3mUqW1;MhP)~pW;_mEc7)-+sL}`C!h+=bY6)2njj)Ov<%u-^4twH?R>Rqy z+{pxva)xaYxdEc*zPXB~;Lh}8lJ{!=TlxOTm4XOI>^6n$)%kup`1@9^dSjI-^$bLk zIj~c!RVFbG8jNGzjlAdlL=8am;4e933bniq+t7B%f5GIqrL)XlyB<&6Pp zK_M(f$dkM?P`UgzIJfq_OFfjnyKEVM4>(Ms}Vqpokq#UqMvcZCDC;hA;VhzYzu9aTJ69`AUde0l>qrsIo4*o zL&}Hy0EuNkoT&&s6wYGYHy9<>ITk&9hYSSV-Kx==#juO@GX=k)d){I2mnffOHa)ZU zs|rV&I9dG!-`{2wO3I&xZsyLO);!LkXJnc;)Y*xtN8i7Du{UxjhRRQQ>N~7I-Ym$8 zlBpDbe(#7Q_8XE3TX<^c-TVd;7xc0z3tS#Ti!7Yjx1%AmuN(%Q<9(lXwp> zbcWkescHeb&!3WXYZWBwpROd=1QQGfML$Sl?z7O0^2LQ6PwO%D}M#4*PoLuf1d+mDWi5 zx?FE_YD)bcdzja8))!Z{;7kRK@XxAo%Huf8iv9qGY}KKB0<^vUga%ga^#Vx06(Cd9 z0hPN3a?@Av6L`EmKXdS~f^w+Gg;*cL7ErKs7uYNrv&C&7k1z^s2W+eEQ$Z7i78SOj z&J>##Df1`%xZ^HJFA8Vm!8&i*u&(pE7*C`axMQTort?UX>3WGVM6gAft+B|Ejn;0C zw&aQa^CKSst9NDg64$^Lw1U-d6%6N_5c=Mun6^70IM`j@%e|vLgc!ZnAva*b3y7eV z4cA*ig!4(Y%EFkf(^Ocm`sW7t#o>4Qms#k$Y~Wq{lVK}W%pUD1L4(l~54y_ssUqpU zMk%)3Ql2}4)FrneCh-?*w?r@sq2Yb>ML0(G64lTpyqscIn`X!8@JXpuv-4jo!dp?jEkg!$ zZ~cfln7yXNrFBxG@tOS=BksBJeeX~b{`q(~_lwx5l$igPr*ihqKz-37b~qU1k&jt~?*2cBpfpVsZK5%A~%lTH#Lq`S-bq)bI)kn9G|p{BRti1@6)vJc#CS>jg* zb+L~s*w%@T-%?mWGCl7z6S#W`d5Z*6I;`mdmatHhDAw40rq|Qc<09kgh5Wxhm;2}c z_WqsiIqGiDgnf>Id~fg{R6~U@T}dSsWihOc8ct}Ib;UK9h#>NQ2XQBMWuKsueaK?~#)NW%30wyN}9Nlr5Et6MmA&vT?ON z!kM-N0Qh<0R#f@rYJ#ASk;(-`j^#`%Vsj3^z#7q#ivNwkWD>Pd`m2pghK1Qk`$SDp!xj<#f@|P!^BR#7r)^+nRn}ZYhdQ&=# zmTjsuy-l$P%X^zW*}d7x+VVJ_m~=g3b4)!u_dw~;qwQ=^eGiqD9mNt0&zO?v!mD!p zI1GZwf<#1DOkBb@EoiZd`Jfz=icJ2z-7;`byM*YZnzW)PF-P!%C2>iz=poM}jlmJk zVFy;cV_U+m=uT~eyLgE09aEOmnQ-yz!;ZSUm^7=g(5Y1zGe;l4VA`pWjZs+ zEwaeNgEnep!1U$@1y$UpM^@v15_oWIr6`OiVu{YDnP>029p?;5a{dkOe;M^QXWSDyk$!F& zK{=DL7@*S#>AFHu_7KQfE>CO~u187I`@mZ?{iW6k5CY9Xrhq^*GhM4(?&~{nN`0+qByn^xHJe$PrnEFdV)|&by)hJNK zETr|5?q!2(`v^4Y#HnSsnA6qgDYVX#;os_Q3a>%g$>AUbCHC-=*r{OPErP ztJ3Xj=T%@Xt7@MNnM9Vnr<2Tyft#av6=+ZDjsQI z%$L_c!v#<&&X%1*P7n4}o^su;3{kKFV4lEx^x`k*k0w8ru3I~@5Uwf_s9O6QCj0V} zH}4d+1IV!6t=Oa|K;J|o*>pIoo_{B6CSBfiRi=c|d+yBFDESEQ^@%Ai==_NpnW@C) zp8Y|SnRJ6e`lE?#eXkNue`CiHO!)ky4$>tm#6U0e7*9ilIJQ@Ye_GmF4c?YQ{%3ER z9sD}aO+IkZalM(}bCj*I&<&+xrF7EA3SMC}ML`8}8lPdZ*j!M`3e%ixm;2UgQE@&^ zv+UQx`Bj`$K*OJ7k*(W2m*GxRo+6|FZIz=Kg<^FAX&cvXi)^}J<}dYd$CD;apEwnZ zJbkiTFJluazl*6Y4Fr2q{hvo@j_<);yUd-1I!Ry6qlCqnfEL{}Ja6QR{?5YZc?@Vb{8%BLDMrR?Cb z!M%n0rdvPYuE&_%=fy2r(0ubGHY8b&EwD(Es65Iqr(A3zKMl3R71&f ztgAtZMDFFT?KNJ2ppKz#I-uVs@v2jZ;w)pK3b-rqtzi>FyflN&Axx|eus z0sGgE?^uavDzYr;BAJ5qzRSX%q`AGpZ}Tr9tj72ytU+c~}>^N!!}8r0dWPlfHq^Yh@(PC8sLCixS$?Qr|w z_R<|2bRhLlJb)jVpA)2L8@o8klE%P3KL>=f)w&?P44$+R?Lzz;i*?3sK;IILz}-kJ zY)^WD1VVn?3ezOcQFIoV-jWlZ+PnqfB>g`?4{iZ>P~5*fN#njcQ^dIRO5&yu6PPjS z;deIK*k8GxPDY@D&uQEBg$1|&L{T6s;H3$p>j)H14JBpeV%=2BRuHmqorfG8^VCOd zWIg78(G4v9&5-ozEuO^LlJi+}Nu=TPW^-UniY=|yNDfe0Q=w__n?4-9dM(H>{Fp$? zVgJ=)wh{wu#^2@Ev}RBw!7*AbuOD}inQvv!S7QHOYN|-$4H`Y!tU=fr!_#s+cWP>l z#StlRH|YRAltJMx`--0V51nOtZ`FaRZ_7S~OYcv4^Eb$_HJi*q1zo!tD z>9-$pO!nF8rUEIkF@JtzyS%^!nyVZFzC(McP>Nlnv`p)m3Vc{a6S+16v^K!djP63n z;`iSAY4Xw|wfa<~35Sv(ihST3VOCn9uX7mYxeR8fW7r@49j-(&@KrZY0)!;fo|kq1 z8SQ|%AMVujZs)#zx>vA{ladcgFn@Amqt;vYHsIqBnK=U{pbqco9-nqpVX<&|ib78T zF8xsFR~YKF%w($6yY5%Sc~BGUQBPO;97Ie(5$eS9B@qs;rGa>) z?QRMVPpu2qBq}nzNeP8Z7z32q0|s0|C0CVST;^S>{g0)yV2iSAyRgcGpmaz#(u0&B zjdXViQo;Zu-CZIrEscb9$IwVgcZzgKcXxk#-sAfLdH{RozV~&lwa!KEqtgl)7K9N+ z_B=T(OrwY5z_CyfreO7aBA%z?_cef}UNekDDgKQrk=zgGlk`7lo65gBiIVNF7?UDx zaI7HOlFQEE$BIQZpm7t45f0KYe-Jey$HX{Y`xGVahKUT2H^{KH%(5(MOrio=*;nEj zIXwX_j;+C&6r))i!16T6GyMrE|DAC`8mM%5*5smT@R^Y^2c8OYZKU@C6Fi03XpfNo$)j!&ygGZc#cvKcf? zydm-rjXQ~;H|?d-{FlkxJT$<_!-S{0F(?Y33%JZ4F;V>O2b#W%LcK!XXJZwEu5W?l zNnjZ>>EU*|2IXEXIh4D^6UiaOxt2;X)hPR4k<6JrS^GtEo?kiy^`}0on>I#E49r3G ze&GkBLAkgctdd}bns|ZokV-(=8zLU6zxe9@y|oaHk%g%Zi*GI33ZNg9T?CJ0iDj)_ zz=g4~DztJ|kVk_JGw1JRfoC|+xM$zl`)}T@UO^6DX#LrITZQ`R5C1F%!(Zh;Y905p zl-C!~Y^!W}!>>TdgnkYrQ5L3cehIqBNa>Y}t}!GVQtjUYr)}f;D`@=q?>zJf{b=t# zgy!h<_PkkGL&P|3+UjlUj>4}+jkNlLIUH%S9WJ8^)G!Mu_k6Daf;5#l5ng;o-cI9sF?J7iwP`$bu2 zDax3>HE>A=bo2JZI-SXig0iC%IG&AP^#g6*+}U*OyRCO zJ&4eDtg7Zon+(Thsw2-LC9|$VC6;Q@ADSD~oD4GO3Dp@8mcsFZz06?^nWnpk1jFEd z^Sr$XA7HE=B^BF+xI`akK4B&s^-qCnlx}S@qG{UIf?A+dBVOUju~@{YSLB}60H)W; z_bk>SZem~_*8fh>ydBaG0m?eX}OlKVQ3z^D33jf+*$3 zd$P4v!G8mb*w6Vxj}t9l*B`vdetW3`;QB!`V9}9?n8}B=9cRt+O#y`}Q+H$$+_q-G zK7I8-!Gx?sH0aoW^PklK7xYW*#(i8U-;Ynvw;Rh@n7(taT!oJXza0Ry*FVDGKI49L z4VS&IFUpSp75{Y7n-_n#C=uT&ppxAN9u)3Z#&KhA{OPB$xSYvv63dch!Tnu!?U1423e8a?U^6r-Np7KT%>SK!f+xD50AF1< zQ#l$55A>YhXpl#9he^}q7E!3r(w!2Z_((8U9{(GrA18BYI7UFhnq~k(>S7u?Ow_rt z3J8);Xa<Ev?eon)W8kB7rZ)C5${XBF#(A6?b0lqG(bP$y9 zLN`IN|HVXl_!d~fLns_2#Z)O)#|1)SQFcH46{z{8PO(u9`uPM?2+Ofdx_zQiui{MB z>nKm_vP=e^{gQFYNM#W-#Wfe%Fij0%--xBKMQj<;uX*e2KhUMGk^xps03Kb;bFyeo zrAhsH-gsv?V=D=wu~tV9?5z%PY2@RBO)4qX_Fx8h ze5#iIaX*@iaLh|`Y%C`Qs*8fL-j2l8eY|i~RoohdMPg;4E8dgQz4$jpD6905$Rtoi zBVf^MZ&_z(xEVyl9RvDYiJR!W9`p4?&<*j4X{5=52xxn&cVx)g;$>kF$0~g2qj6n} zkv2nsW?T?C$BC4^xv^IlI}+HOOSr0_b?Ktc#D2^`);hOb9Q{5W7HyN@p5R)AB_ovU zoZg!pV!1Z?G8$>qx-iYNKpEG2KvS#Q8FIznq4R7vLM0iBO}v~F2qj(*LwvF_1JJ!7 z{e5*2bzo$^=k*I9VboMJcn;%XM5hXr8M!hKR;eEGw@3VCG zWUouBw;?uk-($p`G3%!T6aQYO~$!n3)K7|9J@PJyF zw-kjB&sm8jdjVootfWrDoCs`Hm9jwZm4l!P+`*Y&A;ZQUCaenI8o^MQ1|n zk`~c_>}7E;`Y2bQ2D5nhTJf#PPF#cg%N(O^BY($Zan!PrQk<5YL8GuHeYk{MX3ulZ zRcxj088OpH$^MR15ddc3A35S|YjFep6Q4^+#ny@O{^mVQMOS7Amq>>MP^+cEzn{Ov z2|#Sb!wPy*dhNe`zp@hDD=SS3lBclkmH~xZ$8yw zlJ|F4JkBY0hjEIu?bwUri%L*E)SDy`#9zoCC+Ax)~tJT|DMOA>rbp9H4(s{Qo~} zc07qhc1Mg8-Mq?R5ypz@Zst$8DonD?x7I$V)GX1g{3=2qdR z?k*{Q{eIYOVmV$~H(-`Y(?W3N59JSuhwjIZXOHw}xBStZu_-}{*ap!L^ZIYyc+3YI zTp`Xng+en5G?bDbApi~V2E&4R?Nj0eFM`NCu%Gux`-&>aW+!9iV;ly3_mI}E&TF?v zAanj047`u?Lm!=jEwVY6C3oV}jloI#7H#_tPMH653=2WF!1KcL5wdia z(WfNc=viqdM`$(FB9?X5_pmL?jHVw2s>5Z;Q4NWa%_AUhv_AX&8WRaaNiMqPX`#Rj zN@d?UgyzDeDc ze_@}=*-67+=zz1_ac?U*kV$-GK+~z#jDq71B<7EAK4wFr#{xd{MZhv0&H{w4eIGA{ zybYDpi9O0jMwfD>`lVX6fhknp`cUKj67B7a7%Xac4Ox?@KZL4S@a`;|FWnwAUgG;I zuedSo>hA!LC7fA*M3h{6qzPob-h}x*&QC+bH@wF49m+Wh;{^hFt3}CzLOjGDn>7M`w#Yq{XAW6Xi1_-3bKqITN0+>xaJMszo0;%n@&CnjKCd)Jr!9(O zsSyLp-~rKVmExHTwwL74v)HFdGztWIjFiFuxs4bZO$9+FunWIO<~TTxN=%<28c;Be z3yL!--ZL!ME&1#ov;k1-Ds0y$!bA)?zaOoj^M zK9x>Z$=H2SE~1)Lies%6KJ}SY&H2r&%k%va;O$nj6vfv=WowXw<@xpAh|`C|a+FM3 ziD=w?pWB=n>Tr z)7Z;2^mErUekrXC!5E=PKhyl52WD5Rf~t*~E(PC6RzEg(sGd`Wp~rMzZ}#ML+im!$ z2@V4%61ntO{tyq)?J}fi0qe$@&DH@$idbOat9+|9V0dRNNO*k@?oMxSw7LEr$_DnQ zi+c;cDl$ZPc4vS(%2CvLOm$uPpvWXoGCVckr`i9V4p z#7HGLCa9QHP1j;E-WUz9z4Zatg0#yPAavNH4~be!Ho}u=#F!I=chYilE1f9K#eSWD zDn)_(Kox;*dj7a?Fy(h*(3dd@OvISsPLchju2x_>&Rt?#4M~ z?+Wl63^wyR{lv?3?aVq0VB~3vRBtGc7g(rgkl4NUYAB|6SfRk> za0(G@5~a+}sydu)F?hr|Kat$!Fv%|Pj%D(m*XYOp^A5kC_Y(&Zp9sb97@%_5t@<2u ze(`%TVqp@U)#8K})2h~>wLn<({2XfC)7;8i5U{372hIVPH=3m1uiLHLGkgvlL<+)1 zC-2HD=Zi42E9gr&&A_&7cY0O4dk;E={cjC_D55ZV=a4txjrf+qKNeZb%KHv-^wghv z)+mF&e}kGaz(OdiT{7W4l@0fU`;|-^LXqUmeIv4;&3G5_-V)>S_iyzq|F^v7b`e9F zp%{pXI&pmFT_CEK)j#ka4$Ou1`1)iXGCE!)zlKFLxF&XHctWv_^yA z<-{78#%nTXK>5?ah-0F=eS1ZT&O5&lXFR7uKfa7bDcq#GSn2Gn=LT-d^9!#(js*AX z(=j0>o_w$uK^lSip3XatG~hpGo^;X&Yq%9`UNTDh%ZOz$sqMatL$QczK!6_nFDlpA zd5&7Zq|%l5H-~aW_v?yrJ09!IyiJ7cR zqA5NR&N!6W)H6?}y$(hsKde$-XLYP+3_+OWDH8f#7G#gU`)M!gHM){pA64xl(2ONa z=U+&XYpitsm-vr|gj}UfUscBGt<4u*J#4zMkort1jssP_QN~V;p)aq$WrhCZ`IarF zhi&&%QcwC+@I0gLpJiC>mpSj-RP}{>&y3AWr=^z5i$e9=!o%Wnl2Q@2R<V)ocpc+*#|I-YAuGOlxUGamwm?dDN ziYr4c=C4lE6P;@6v@9aXp^l1?U)#<1rdxdTh5j3Xf@$BCb4F~P`g#PPn#?o9yc&y%%Q|4v9(?-GZ!-9jj zEtFVBWY3MwnLe%|?|;?TOjv~c^R(yOnX4=JmHL*O`&nn29p8{OUV)X+lc-PiwQxdh;rx}lX134kJ(F`t8h*1O= z23N-nph1vP2=i1XNLWsRyi<4N6STWJIy95~x0?F_rRNMN>X4iJ!h)Dv$6W#U^@f-Q zpLmJ+idJz%qr(}A+C|nKcH=2~i?M>OIdOvcHNr;LCmFc>CtA~6y zyT>o*MO&58wI(k>cD6iQ744_U3vnN;)xmVDTku{d&ZsPbQY|RphRzJ|DMDUqRtXv6 zM{)0Tg$5cL-_HJ~0O!KA7jX2uvqB=JL@{&)e)3!9w|maIsdi3D`HG4$g@Xi#w&62{ zS_r;8j`uhG#F|%R5RZ$!ZF=Q&J?5&C%ttB-tovYaED{1xpUITt@BDV4ILFQ3YL7%R z)Wi6ui_K>_PdTH7z3Uo!|05LXXy{9tnD@r=4@XCco^ry`Jy9btH8p+y_>Ew_jpIKE zzFFwsKm^gJ6nIX@s&i<>ZWo;XDCTl;oCY0bF$s8qF#Vec;<`y~gFo-8j`TGo;>{A* z`CvOoWYEUDZ=ccJjW2tjS-+GLxmgdzW4Muo#$ae|NVFKWP_hII2FBb|K3?^-PiQ{B z-`Ja}x<6*y;R=gA&j_iAB-$@cXT`V`2yj%~yUpE`H2m%Otnn_SX_RETp_{{ysaAGe zLV`My)m-*|5V!aeOYrE+9LV!zZx5+Y1{I?5qT#{2$F=`+wmzf%13IBN4*N#o(4KK) z*h_yKI+|uwB!wsnAum0>_V#I^Z#Nwz&W!!BNP>KcF%=P3f4c>Kg(%I>qL#b8KDDz- zm&kHsL}}VTN>wfusS-sme^q-LW?WI*&tgBpdPdHir5w}3`Xj2M_!d}xhPW4n3<8PP zH7PAvTnzC1{9HclyY)TVOPvBr6nV3hYNbc}E{MbJlJ9(LKbdj@Vw$JFC9^ZJtw$<` ztnQ>;1Q7J6GluZx<;Sw3meG5`PyI&0o=4lDs{TtXZ0G)CtIz#BNJwt~Nqq;w$8})( z`|ya6vj5~M>L$(38r>t~Xtt-lE1Zg#!gsgn*6+_Do_t#`lAbHzyrbckwt7SK@B(dN z>)PP8R{8cHwJlf@gWZHGw;fx!j)dPg@4C3C0%_Fzc+l3YK~@xh6Vjntv`j^+A4l$3 zj=?kid!);a!WJVHrx8FFCClT#+Tm8%T}ZZ{<3##d{rr~8t*j#;g(xnG5;ii2eEr3J zv&`L1^SkwauGPKcMMT&zoPx0a=)X_K-4}+&4=ZDBzvs~L)}#U*I=D!Sg;BOKDTU|B zfmO)IC_P%hZK=X7gn`PLM~kgeZTbbZOAmtQc!@S%WNZGO58*1c0mGnTtq5APmIO!i zWeEH$@&{5h^-``O`hFwe3v&Xhf*Df@%;3{&BCuLi7GH!a&|3ace8(EdY>9z*#l@nj ze!hS1xD6~XZHLAzxVuY9c=@<*hB}p8T_`vH=JCab+Eo;u?@zW?)W_BM4eTJDe@`nY z47!q7Lkq(MJ-F4B8K(g-ESC>6r;--VL2sAOk|baMsE9mLu)a+HNb&YpudT~!8M0U55#eZ9LUuBV!1A?9eH^Oq@UFP1=%fE3(W={T zP_3(ed$GSzpqkCR^X^)=^SOWA#^4aWi_R+QZ#Na$>#lz~{>O3rIE`9k?N2!axjah` z5L7hbw>FSc_x@Rq7?Gr?m2fj~6ei$p!Ng&&)Q%|6i=baNPB67eT4w4Uf0Z{v(dqVC z2xJHEX>h~7^0>dx(k?+S5i}MFHii*UL_iX7E<*Q*7k)XPE)pYv(QKA1j}^kxFn6XV zio?RN&Q$sXkxL^y$wsyqku?Dn`#EAMqw8F%@y;y8#UON?V9rlZBNh^w-kfm9_IeKZ zk}+cn9=*3E8?kH)v!t4(M_Vnzs)<>r4oW;qUAOpIy7DBzzVwctDa5hj0B|Aoc6P_9 zGTc9JG#zMv48w(TZRV~2%{!j&sYv*!Tl;_-+X>%UU?3`0W!k7czk)j(L{w5$9K%bxrU6}!!RePHe%PAk22 zR6mUj4iZ(PhRiqmzuaJZ7TE>IA{V{^nB9KUEdnn0S)Fdm0b&AG6*Be0+q|ILp{cEL ztEuv&{ka|3_p&LN+P}6w%U-RNi#jrRT{4ak7=4v6USV``^3&o;LuS*9wm5UA43L`VH}!ONaoV09T5IAd?w9Lqns zrzh}n1uyGgME*OHaoY%*O7AsEff}mvbhGE>>p3Rp^+$eYCEv%Ez*ryQr55hbiT}b(irc8+PKrH@gVD<$ zFvcc5W>&IL5%ZN6Hz`=-bZ=xS_|X-lI2kzdIy-GN$f#s($D$1Zt}qe^?Dulkj0qb} zCR4CC9zd7<-&wW(8DSQ}QbgoGe6@e#Rds7(A*pL0%dk;=O8wjQ+bR~WlI2$5s&%OV znRmD#hjGCN0Eyn^WOLa*{k17cLREZCv$9SOaW-XMG|`Ot+}O3)Kfdz3ys%} zF&1+KEZst%*Z-M{644P5@8%wwza7)ER%*wzCE%I)8=pvvyky%>)fUORE26e1y(7Cu z34NVe!5YOn!h$T$jwx0c|6)7y!FY6q>}M9-%j`IbJOTcekoqLlLuDVyJD2^k3AB)X zx9XT6Y?s3#<7Gefs<`=r8r$I&zwl~uvwQqQoD9~=UJrO-Z|sa-gLLjyHXDR|-JIoP zP6SVyq<5y!GXdLaRiefg4PDiq&;Il-{~Ye*4DO+FcC95?ITh;P9E^He_~OI%K6!O7 zS8hFA+%7%(Y)?m6^rwbsf{7#Dwg-NgcoK77Sn>)8!QMvO)#$s9H3ZS+R(DW!TpS-n z-@tfP>yZ4%Z#9Mi)ah0B`?t`kH);qlr|V$#8NtxfPni$}jdC z_mmnL0}^C)nk;PJ9uixv0BBGACWA z_QnwNEJ`NXo*o9N{K=N`{zpg%myM2F*hJ6I2~+nFoOtr#gsD6^>i>9QdF%(>Wgp`9 zg!z1v_$AB+WIHn{SRIPHC5j{K#HAJkEp{nBy~h1%cullT!O_6$_FJ_D!V(btH- z!j(`Bx8_14sk*yU@arvb(F%&Lr?8<#vE!qoiKx_P7LKwm98M!ud z1v=I*mP1M*m5iGj%LYKd|FCoby^hPbdM|@E3wcgCJfNeZg|?%VeW@$iKU-jqa2ej;Ub3x` zz1pohMsET^g6!@1B0SSZpj2OrpX;I-xuS-uojp@+D8Yp0^xl$HIu!JT@JD3E^Ep9= zBtHWH-6{1vB!W?Xx-H^Qa=bD`QSw`~vE(2MZ(SVw*NrcP^17-tLKkGcj{jwzmX@jH zTSlx4Eh)yK_IHk}rq^cu%~#GC?3Qkc4dh9+RByVJdgVTJz;nYyvtpuJd;TQGA&EhI zE^1xVAj|gd@bTer@P-WjVP)4g^ zxsH%C;9Rg=(WF`vs*Idiq$Q|-I7w`Evn|cITVq%(PF>(+aE%$k)Sgw)AxCwN@td&#l{!D{2z#A5*%$hl`w?BiV%LRs;b2+r4#qjpQ4JFds;cYmg#AfU{J_-9C~T_VXs0y^MD*A z9(|@hOs=X|b?|nk;FzYnwpvbA!8ZWn*l=z7r<_p_CZ>5|B;^pz3FRgyy3F6-#G||q zpV0@ECN~twJRQO6;|A5fblb3@O*+qB2vu7t6s5vU6VirH#G9u@cMUth2V zmsY-4%9oQi3TmODw_^(VCExqnc%rz404ZH40JTDtyT+rJrUWxs8LhvaAk*D+d}Ia5 zSsL$g&t&z#(^o53RoVWMY#W?9z-{-UKZBedG@pOV`%t8()$KNnS6Rc|1Sq;?(oqz$ zwXz2|tKw|`Gt z|D~wiv&YcS@&N{JRg>tOftz+$s1pK^^?eYl^Xo~4QHR&uu(8)`EOthRbk!pF(a%{v zuG`~Xb&>*jEjmVfCNXS?+Zgu5;5)`Bvp2CNMqahFhQ{mBxm&AZs*hWbKgT&?=sllp z9o5e>x_bM+W6)Yj72x-$MPCu!YXr^o^}paKH)2f&f7LD9eSsueI5Axft?pjSHVbN% zt&(18^WkK>*{k83T44yX{qRn23@zFSsSGHQ%1vSyHi>o@Rkve$Wgsu{%N4}yFVFrc zC-Ofbd4pu}GH|g33>%}Nsf8U4xT(!1LBhM83R(&4>vLOK&G6p=Q}hOgG`0&=8xH=d2SMpn+J>m(cIzgHx&4Cy5G^{Y887|8Q2FoI>ln6hj3yeFU`}D}UzQQx4A$?g*Z^}M(GiRYJ_tAK ztRpGa>M_)K+DgRq1W?=p^Tih7{I@L>wP#U28~#iaLg}>DQ?izutj5Re!l!x)$(#BI zdL!M$se%ZgMEuR9+#Ge!GdmtzUYo8mCR3IHPqGid>=OuX#}16H!(TRLGAhIM#fu^s z8F;QzoyKJsaTdE<<>n0d?nIUX?fxmUu4Mil1DD&m2uhI_r&h$dd`0R84EJtp%gf#V+!XAl_~-w@ zpKuzr2dH^irV)Bko~CPbFiaJ1d6uAGCx6&^JMssCr*F!vA%@?`i*$NMb~9QWn68WK z;N;!5KJ2#2t!k9c>2Qe~1YLhzBQDa~K;2A4)OzL@=SKS!lk$!RWM-bW5N?ykT$X%T z`K^N?fme80b2cH795C|G1WSwKQQzenE!B4rW{AOpZZoM(zQc|Q4{9#PIn}oP>JFZ>VPY-H(W)(sU_+a znp+!vZQ=iysX~zckS`-BEfMnah-wBgA474V!$4%;Z?Ez`4xXvZCZR>7uV zbTOJ91xn~mHjyBARRj4U4^g`u-OG|;Txt++roQfPp!U8cc0s5xfbgwOb1r6;ZVD<* z&Xk6H0Tx6ocUo&l2W(9!JaZRTo4y(q>R|Z1_ZGic93HPdrb$Qy8(3B0kPw}{8{8U( zy*jrpzLX0Urwnmz*f3ssz>#o>!S83>=hF8uIL%{dLFd7MoY9-w<8IPobW6ytp?hvr z&%fXfQd5)tf`p?q2^%Uo35bv+Q^|)tDMcn4GE5mTKAoE@8Vv1St@_Py!_3L!qIZQU2hg=FdWFbTo*X6>E`CE7XxF1g4@h z+5k}ezcb;fh_Q9sXaP~uqH@0X4-P>%na|Wqi$S0-*ib`NUxswHnD}8juof)uZ(Xd> z-oY#56W)+6h056hB+vDW)^%=X+}Sli<=#n)Fg8yt!do8_KckHjtYpvE#Wclznf*~N zI6To3I1iHdrHb%VpP56?bl}w+Or&8iOr@vSntnolIqz!8iCX|Z1yn%%w2aF|QA}r* zH|3_jyXp%HsqS|XhNp+4V3Dh9cLGdXFUnuw z&(Vw|4bCT2u!4`A6u)R8A_W-{6mCZP8LtVscYjHWz3E;h756NV_&!8kVP3PHYWfqg zR?bOyF@rs&3)`L5Wx#Q06&qxOXX01(XR{-o&eboh$AB)VWo|#$j}&NXa+oVA*`jm5 z9^co4h&evK&%Q|^=jl~Wh#U#>ML9R&9)N#=gkvxfp8&rXDklngfjn@T zY&^vx2f?2Q?!(+0y|-@Z`6`JGEfF07qcnm>2JDCJ*-5+k6-uJMPoA*x%1Vf8Oxtpa zRHq3~{1D8HOo0ykYxDOO?ix?}TJkXOJf-iGSuhz*h?u-x*(3B@Wpr+r=Zg_TK|Xi! zL*QW-{HtY_wnt9Cq``?*FC0lC^3%Kec&L`C4pxBs5!mqGaz&P83^%scx&(nL;G}WK zlma2GjlpegTjt7ExaI1e%JwjOBbLNx74(~B*91fPerY1ZnHmj@DB+uejKrCb24K?+ z{`c`Zmz{~e3~rllVRcsc;aUOZO`^8Px9{f|TVUH=?Ed-Bq#YQyZrt;7s|3OO2~6wG z2&mc6u5^uw#n~!-M;Chl!wSNX2B7;&fCiX|{+m8VxOxE~ zCT>-FCZ%Ve`P~fInz-Y%e56>e_ZLm)3Q;e)%?UoTC%aQj>A3w~M2I!A=LT!hGEdeO z5(VpFN0Hl^k*p~h(NyGa8>#V>_A4a;#E#?pcD4+X0HfW{Ufg1~xTk3L;3`Kme8yN* z7I1!6n4f-Pu8MU6mbVhv6 zTwEUReK*K5h5-^WG$NSakX4rU8j@;QUB1L^ni^EPbhE@n@@6ZV_(up>ePX;3)an0` zZOMKSohSDXtZH2NYH2U-)gEX#u`vI!vMRGk|08;)ix%NsH^CX>n@NNOAd!ZxKN5sR zEE$!>#8YrsUg`K?zrbXu6+AJP)m~ueAA|Q$kSaQ=w(Ag~99MV~$eKxs*hGrrs8VC6 z8@WOA?1ZIbDrJ*dsW?Z~bgWlCm(#Uk*deceK=!>5`3Cl4f{DO+JfG; zw^`fO@#=k3$HpN1?IzQ>=#oz1JMY{8=b$5D#EEPyB`h}Wh6_>J>)$|kzNM8)=yZ+i zf>n(%<~c|iO$nA?wIEj7Ho#>bWgvpQJjmm5wiU=U{QTtUp+$smY3z`v+xm4%&CBlR zKcv4QYYWgT^X}GcjV?@Ha@c(8#i75m0S9$e z-&-I&8pDyXc0uGWXH79(j!qVNfRJCz4y~Es9Pq-MTnBW5ljYSD zva1wi%R{$7D-d}dt7KHGE>z^1>CAwcm}_27VO4*Sn4_~=B!;Cf6Ea%Gyw%zmVkDK{ zgHdeN&6tteeyISH$iBDSCRoOyHbshT z#ygX32u)6QK7)v0uQCkJ!|w*=Cp^g}tXh~Yl(jd&^-(r!P)B^t?T5ub;ptcXWm(gg z^4DP@atHuOSULxji2o(nFgzY$XilK%;>9x)?xqi3^93i3Zio90_H}T7DfvkTnnWKM zWEtMMY4Uq6F(fak((CECoLHG^oo)TQLfah=xeCx;C;Cg3;l4@(d`R^6=?&cnPj~x8=H;xmy zr-mDd_kTER-TPJIgpt&`?#mk)%rCl7AuMXq&?}HGfM{L>*r-eQU_wg<#;EHzOCuji zYh$%Z)UltJT99K{NNQ6^#K>%aem%R0plCbj zV^cbCGk3ii62}sn5D`=xvHoCJB6xy3B`xH6aYpSdc@JHE+jxYy@z(+7^lk75Pi@qJ z<|g5Zs{X@1A0DG8rm1{j+Mh=-liBNbkZ!QZIJJ-9{`2ZvB0Ktfb_jTIG0EW-mzY3llGv4YSre)hx zY2{I)Y~7>PgmdTzGAdfwFA>cu&8jIC`dT8S?hBbU+O0kO$fp4(Uc>5I=|q-c2I1Bw zC4=UKyj$aSIuD77vXhlAgK*Nnyx*srE4pjJ=R>-j+LXnzPAee}Df4xqA?vnh$ITU3 zX7RNfYcW~UbjgFn=6RK_O2v+^~Lvg0tpCu*E1-kaERtgQgehya56=>Rg8CpH8LKG@HMENu=G3c|=oYb_5m(yl+3t06G;CBGp+|Yz zy(4n|(2mA-mR`$ro|Y3B{VO09`y9)8s2jgOPWDZ@wSq^OSIE#u7v&}zOXyzor$kf% z%jsrgw3+jO+{BZ$J-FRq^=$$(-gQtNod7g*oWE@;o6m8>t^8=3`y0Wf%mS=!{-AvP zwuC!Cf?C0v8A@gT$q&olW6~XZ&l!d(c|a4=*Z*}2lbrv`DGNVcxn6i#>UjK(vMY1t zT}SAcnAarDQpnf#Cc#`jS{l}z7x^?|f6Xv9^FL|Sz}XV$%|#oug^Uiwb-Slsfijc0 zAzWC!8wdBwVs(Uw$5@Zd&X)U}v%GWMP>9!+3b200uyy3lba=AqLA3i~e=zd9+_G>z zWvV-LiOrO)_+7}wfITj>CzAD?Ro=4aZt=!y=SgGQ9wTdn-;!3+QV1W`#Y}M zl?PVV^Cv#$rYe^82K_(sWd0!7V(;i*VYo}WFP~{S6|AcS%rc}T{LOCKRS8cazON@H zD29!s@0Wqz(7G-H-7C4aPoI&pCOCDZC18rk8+JDcd$sOF)x~!R?oKrE9Xlf;!{GCj zhpZ`@V&hwEJW|>WU>xm_e88`1+Yu>`rB`%7AXGS&@bof5aWb7}UeN52?hxHWDuok2 zP}~7}@S(WRtP(tH*MOkXbLAB+113+vWOrklyF!x4`G4DV`-6C>cr9(uN#ky!q#!+l z60LP0?sM%W8E^b3z10R5L#z!B6~B(NDerqDNZ*ykEm|DZBq*c{&YW+J(I($zk>B_D z-US(h8&-)R*}~=| z8LW0_+EKR76wU?*D2`>~8|oT=&B|MjDh^q%e0;dQ9n~f(W2F3Xd$jm^Mf)MzaH5fh zklY-`D~N!rYZ8Bv7(g9J4ZO}GOyM}uKFbA%=$6L-aj<|&bA>j+nv91~f``Ccw@_o` zqu8|J5=bYt81@jAaO!I$P&QTiJ%vdRleBDQg?Vk+&wgFct;v_`&(xY03_3r=-{hEJ z6*!?m29&YaX$YZtWCGDmSopA}A8b4^vDMSTz8K~ft}2UzA)lsXO4HigII2BcrY}Hg z6W)<*Jz$?LO1?s!)D~G~%6m&+B0hOM150?P=2PkL&lw^A8Pr5*6NXWd5hc0ZJzTb4 zc5Bl6F-^D*zk|Lb+QvJN`pfO9EFcBBtC;rMgZKPGPyyM{xl>j#@wCK#R#e&l{_<3~ zlc`&HAWY@_xv9)AV)++Sy}WXdnH*L8I9dLV`3=oE-L97o ziC#w6cMuEWN_LO!+kuB-j{}lfjIu53iFJFx3!j*_7LkOYEC~-@7(@_@pXJJj;0p+S zuMl=5*Ub_i!K=Ar8BttBD@XgZoxpS66Uw0^#`B1#>Eu~P*vrsK6xE@p>KuV=Ok*Vk z%vmjWU?Jxo+oPVZbS@y6sFRoElh_i`63IUIH;(VIgQ!#Wx!`VB8MP_f4(7-VpaQlS z-WINrRU94e2?>bkWOrNzBcY#WPCNflJc|ja$Q#0K_{Mdc6s*(2D(l`pv%~vi_Ecxj z;2VBs$!XF^&41(XbI>9szvb4Ts+z?a=62tf6ef>FiTV?*AjHYbq|NtGm)m9Y;R}s+ z>FF{*2i3w-<81Bca%d9bv{8W8VG7=Q8S%_`NUqI_C+$vE(d|mzpy_4E)>@f0M^%W? zN_`o&ycF=#x9%r~&*|g(W6y{JiT0K8_fVXaz86>#0Ycg6>e~|}Pfu`HA8dVZbz9Lw zo3L(sE5i3`5>^B{cE?;Dd*2yhX%0tVnGRl^0KtBUZI3e@WW0E7&S^>*)}5=GgiTA2 zQo`heiEok;&kh#mM6~UXgd7v40#Q)fr?hQDcubafw4B0t5oaHaz|E5GaiG2qk1!rBqs;Meo_*#
    br%gIW?_th_a%qT)KndnMN?Fn8A7_`HNX--P@5-`vFDepeTbmdKo>1cbx zJtK3eu>#HChd1vTd}Eo8yY3Bn>1Gl41YkX4g1@8v_5aliTVEP(9yps$& zn--cL;W&OrF!T@ME)W32(w!p@^>6EgSm)%ocoM(clF^amDA4xf*hbcQ=c-Oqe14-p zr=eu8z$U?licOj-{V>zZ#)4u1lSSmQ^b<`1Hu%H$^B~av-d{d-Qu4l84E|Q8=GD3^ z<pZPTy|_bbPjFaMC>ITJ|}W{Di_ zDOY1gjw~yz$I)(%QGoUQ;rOiK-r}iNQhq9_JVhS+aCDIQpFH<$N^`V7eU^I$7IckT zSLwUs>4+Tv_?T6p%AYhJ1u8|NXQ(iVq^JC3^mm|6(BJTV+vyj-u3Cy7jdb|P6bDT{|zsEcPI6w35z0IlE2AU(M zZ;ydDWzzOVf8I@{IQ$0^3+!eKpmr8W`!M;ps9JxvwG*$_{f#NvT^-l(@$MAISbg!F zjZ8Kv2iN}rd0Z5&9zXGtP=ccSK99)iCA?q+IZBq@z_|bT{=Toq~zRk8%vw6&E7K8&6ST z6$Iz_ztu^O&*zrcSqv_Re0E&S+K*I19(b2EJnB+naZB!psS@EvYytU1O%J8-JO&x>Xhw|8Rz0K! zvEyvm2Qt>3O)0xzS})2;%K0$pVdP5WWKi$|F1N-oX%8n~OKTRFe;!T8^(3ccLO22u+fFNKz}X<>tB(osQo7+d1NfgXc=Z#)Wyd@ib5r zdG%QY9$T`;>Qo+0u|`OcwBRu?(B`Y~Pl6tIEYibQ%AsgHhZvbyOe` zLH^O2ku>Anl({athgp3GUbG`F;>GC-UfB&?!@M1b^w9U6v;@-Ncf-4tB!Am!unE%_z4D6VC^fC4^z2`m~U_ zlM#sv?esazgt$ce24=cDVNXgq6Rc~i^$%fQb%#%HZEg+l9OYf4m$5zCkO{9i{Le)v z(fB5z2rtCyH)2&|sLD&@``7}^L3iy_6KN6H1a3nB%=aM1)3l6aAXtOiniscX*tn4k z>R8&;dG1bOjDahyJ&D&Y$ojHOkstfiaKmnJ;bfSttmhYm)C`mke)cs{_;${Umz~jU zm~y2{pQ9}fC&6RJR{l(&m(;`=n)@eHwTGYlc96bxz13D@=AOpIYMD-KQ;N3w4&{Vb zbJ|5Io9gY;Fk-WOLfKS~(04Qi zT=ukWn`k!#(X<5D#yLJVqwWUR^qpMFw?CBWW${EOR>Menr_(xJJP4{7VFb)a)BSQ@ zA_il7?cDyM{dEl$JmmetJvd)l0+EHnEg>f349S;XrIbWh6a@9t*T&w|VZRi_W&-cR z4DZ^5rP?aGW=uB5>Ud|o-*PVBf4r3pZ{>mwpDDc?&qDY%ytFk2SV+0VHJ|y~-t$@q zEzk!f8a0{qc$FLui3{Sd+I5NB=U&DU5+(3D`WHM~`>-cmiEB{1hrTgy?C8;NiC%4a zB!?=~?Im~w-5&gCMBXJDUQwKhr!A-L!N@SXpTq%ef||IANQT}FaJ?D%WflS#w6YdH zc?1IDTgU#)hwky1;Q9}{hST0Amr2sMaLXEv1bXy}y_DsKxJ~nRV^Bk~L~i%{sSgZe zm`Z|qXTG7zFaV0#uGi^;+Pwj(!9JxxkAhgO5Lus63=7cd6S2&2%Nd+D1v@&sFMLdG zzr(G`6tt}hs*H?xrLb0n{1jZOdflYOSd0>{_CUToB4eWLo?geZwEsBJT6K4NBxE|m z#f5`3ZQtvDBshhKNzy}}8j6ZFbVEBVNW{zT5+Lo`)m{EE@rYv|llzcA-83_xP zw1PdNcMp&#E`aK1<`gSd;Ne$YDc}fjF3IJWtcrsSq5M*3IAnureIxATIbr%2f`(iS z{j1lrWk$P)6KyA4G#yR^ii#0FrEQ!6q3^;}@#jHz*dFC{g%ejp*Qj6O>#)$}NOrt5 z@#*8EMUxEfl=^oEM5FGz%&#m97Uag!P-a{mHOLP;Sl>^a%ZvwFTm-)krZkF46h=> z5<~xbX3l%|4Fbw;zLu^yYcy#kTd!W~L< zu&ui`1P1M`hW(G(Q!hWMnAk|fJ=>7wIW&5h$XBMMG$85_aV!P_s8InPqkm}Re1X_v zAs^eO#a{EJBH4eTWk$uM55ViLXfLCm+~R1#nN3g>2=^6iJVhV5>X{D8ep$&8eLT|r zUU<{?O1E3#A?p0uBnHt3VAy}(3V+%`7{uV>wET|~+8r)QgZh~a-?;BJ?5rwKz+hiU z%d_N?OvMZMwXeG*jL$f!>CZ4TZI7NXzAH+iu88SscE~_27jJs_zqYPC9O||G*V{Rw z$W)Xi6+&grkQ~dr$6BXoJC!ACG9^aRF%>iF7)DI8Rg^fTMP*51$i7snVWP#-42kT< zSZ9VYe)n_U-*vs2_wE`;sPNPQu)K#{0sb;T*P`1=qu>LNO z(kH9G3r$l_{+P!0My}$qjoor9r6pbCBBYrdgzA;uHU}EHf~@7+B@8+FV-edhT1w>C z{MSxz_@Ik6T9pNP&9M2o5ZzLDe(+}1x^KH0`{|n^!|`L$shdDoZHlaH81-+O7G6pYo!o2}g5}{4=^@SB}HM;Kfe~)1wiE%mLGD0jnBWeD})rkjjzYJ~;U%$*<7iy5QXSubqyQj9- zS-K|DxaAltIfwHehjO`rG%l|Tnkns_QT@$wE$TrQ<+S5|QN>X^elS0DmLZALo>!q{ zyzH3pTLu5^=ir|v1^?t$pD4=J$cV)0J6c6wPe^XcyYA_)#**;b-s)%$jH!X=RC_Ih zC`VjQ-cQVb^E;vHk$ohu)?yk?Xw(%_O!H;sntqo_4=)#BBpY6}Elu;ViEF)_+`Cbese(OED4O~d0c z%BE-TnF0B)8we|e727t}XqybTGN(2-2dd&$_N{jZeMZ9caGNDd>%7-vjqA*4ej{8X zjZ^cU4L$9ckaK1mB+#|9pZ=L={qa7i$bF*T)QB_A&(YO?JEVqs|HH?#G-LuNwQnf8 zx1OH@Al&Q{TTprb#&qh|DT7<8@?4qUx7DJ=%vB=XG@sU2MX)P*LDvA zimV@%EXh3fy5M~>cd2vxo88hR9KTwY1r=l65;96XLl`q9Q+)Ga>i5@)AJX}f2wQwI-a`#1SL$>{~6Ni!4Aszn>ttcloy zw|#p~>xV%HpPL-tG&(PNg*=^JFuLQ$2vFY;A?ti?2t;#GF>hIuw6(_xg&4(z1M&ke zH@1|A5;t5=bcoyjLBvm`SJJa8a3jRU zL^dKS9->N<7xsCljN+U~7Te=lWi{PlIS=zr;xhpr$h-~wA_O3Z{X;wF`GGe(<*;h^ zw_^S7z(h2&;rgwEOHD`$&5;|wJTcrV)q+Z}h?&r7dBHO{gw49eprsA+g||YX5Q+`g zPcDzwda-}Bbg;dhQi^l`V$>fIb$soEb2rlhm^L|(@F#*=K;|r*hg=Osx{lk_4<;=8 z@UpQCI>%5J4X0aQTP<2)-L+f4yoV_z?BG?<0dT~7cyD|%_3+UkTOPXIlurXyIg!z-m=yKV|?Q}Uft@w#fYUGE@*3!^7DNaf`0u^4Shl|b=>sHzq8-I4nJX@JRy4TjLWTSKu97W2( zY9?3|snun_(%V(8E*x--ty-psyys-ij=CW@cn&|l#>k%KGn8` z_)5A0421PYD`U8~;TGK~a|158Q$bkV2ZT!Rb0CK#njac)muiT~AH5r^Hy-r`cs~E~ z8IEPs7ml*cV156QpA{nC66-)*2T$(%f(qvWZPVLc6aWMKQhMK``sVsmr6D82wlE}X zaMIqxR6z)(hr`n-Cx5U}nmlzn57uDXQ1kuR&QCi|Hg7T^a#+ozsP897A#C{3jST** zIOoR@3MR_;`}e=UlN;REcwgnTuiWki1K)xC=U#j>q*DV5=uU=zrm7CZo!@j+L%K!i zOfYvie9!kzx8%1UY!&^1)`+a7?qv>XGIpTiv`-HTe*U{|Y%J6>JtQz&6S4EH4j{Pw zQ1CvrEABfPk2RBBtN_x zGQQCJ-ffC+(qA%MhBG?#S;vIH+7YNzD;eo6@g%vfaR==fGW)B2UdXGk?^KpJ=Ov0ddTX*4u9d|reyd>oLY)>HIs_^Oqev2fUx zU>%>Sl6FYr@fcWUF+i`H3j@9s`P?(KR*upp>zVkSFJ;!EVg-aBSrmO7BMi9%W;{WMl*;M^nePYD8qbX+9oR*xD(l zQ4{Ynvx6ExvDzba#2DS8o-`4A)6Hdnw{Txkw`}c(s7Js!&@=_ClU6> zZT|GYLAj+Q7*B-USxHH7pWd1Dy9>K%Qvl6bk&@5sI2Qj+e#s|BDwd7R`Ioc(@%OwM znv?H#1tL)hiwl!n{0cJo9*tue-}C?BCDopP&GaPgMaz_hkW#iG!c=dGJYRW1bz}XZ z!_F^dl(#b)Qn9Z|P|IZ~ZYYlun)DYNIL!gbKkt?$>4ma^=S5et;CuNPvoSkXvGV4j zo_BEBFa$eym%$%I#ACUp##(x8y;{%r&V9j~jY!D6={^ z5ff&8ox1QbOhXKfELGJ;20Dl-h)9VLTnF7YBSP`hKH$S=!>ZdY*c2f)@OA%!k6~y| z!#<$^H*(`~*rb%bb&m9uZQ1*uGYmV2{d?S3;^+ZiKFh2(Z&kJzThMiM=N> z0*71M3AHjNXCbXOWhNYESpVP`kcU`lZ&&$CmGniBZ_YJ?B!nAvh01Su;iuBY@snRj z+_wS}RN0n3`kI-+!x11TPQ-U(XBfWdwnp=DR}JJr`G;qMGAQxx=Ka zOqv~NFMM)qN6=l_fh}TByF}5*e_V{@*Kw)fw)=9+#($$j(dW5i&Wyhf%RXb1ifUye zIzbYl*ZRV;g)NW14o*$Q^Hs%}+D7Ye?KNMsr*r+>PJ@L8HfGq-_ zQq7!1bSWs9_ye4zo)sy|4%a-JH$Rg{fS8p7#T8>bO|kxNMWg-Gu}+|oWF~e6_A*jA zG^le?fwJ6KHu(Xt8kC|Ssv!f{*-2fv4k=kH6z2vp%g0XEcuoUE{>9=Y62;RaU+iW4 zA4z6zQrk3uvZL0?iR6*-h3=n{wH}^Kd(Y<~#zaIp2u`5T=V+{AN6e}LXV9}2#?>LI zG{Wa>=jEeftH|oP1U$VC%Wor;>`KxsS#NQn74Cx+3=cBz{IlZo+73=@iDwk<1B$`WHUY?_ zTP2WRE_$yLepI>e|-hWobEMzhY*Vt^m zt@h~QnpS)Z)R{a%;7%4OPr0{W+blLkei1aXjD&>o2RIqCK$muR3uHIp&>qs}O(QG& zKfR=E8CDF?YR5PKyRX=cK$KKnm9j=jlunvDBz2) z_oQ`L9}41;QSe}4U8BYQ^K&brwy%z&ql@SqAk;UO8C6umNDT=JGUgbNB|0d&;H4xs zEjFm1K8#x?Omx@7DeasiIMB$x+=8d+uKxLv=;SvG!SL~ZG25?)sQIRJNGJHghLPg# zI09^Vu}b4ETd~t^LoTOszJt_{4iBP#?X-sr7o1HT`l3@-1C;sH=Ku$DPR9t|OnBJI z>u2Cknk_+<1L2i4u_FRTpqlBC>y zxjb)^SQp2w>?$>DL%!Zg#o}MM5!s(mOd|IH>)Yy@$j<=u;0w^5ssi5--gQXqQJZws zR^*dlmwo|NB&Gj(F3o_S0}KHiIQIQxmaHUjPVnF+I z0Zv!hn4{~cAcde@nvQAxA^@em?H7A`KgMvz*i>QAQpmNYLqHUMiteGqdN?Oj`2`L= z?C6#1LcvAfJ#u0uD*(rx6mcicEgUl4x{(5-2#*tso-?n5Lc_cOB!>slwKxiy6RY>y z;lwP~8&=qx>V5Vn9BaZ*eXK@i`WB-ZRm)RfigJbkvSlJiMj?o}waU?GWQVxhBh;=@ z*dK!t>_U;}-DM%jhBk1ZzePUxjsP)lL}InR5zsQA+DfEejCA9~ zgKf&rpA_fn)G)mh;G}|KFt?0M7Z_wvrdS|Q&jNmr!h*dE*S?yn&*bXZi>iTuNaFzc z6Hfw%ok0vYrEugq+GQ@b|Ez*W=1VG!8w@twG=3KVFi(wI4@8fEl5nFn!9sD{7_0Bs zT2mduC4v8idi@{*RGv(><1&PQCU&5dOj!RvlO(yn51K08e7A1a a{L-MOQi1C@eM=X?pIx?&Hn~=wfBqjp9w|Ej literal 0 HcmV?d00001 diff --git a/main.go b/main.go new file mode 100644 index 000000000..4034a34cd --- /dev/null +++ b/main.go @@ -0,0 +1,29 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 ( + "github.com/polarismesh/polaris-server/cmd" +) + +/** + * @brief 主函数 + */ +func main() { + cmd.Execute() +} diff --git a/naming/README.md b/naming/README.md new file mode 100644 index 000000000..7f222aacd --- /dev/null +++ b/naming/README.md @@ -0,0 +1 @@ +# Naming Service diff --git a/naming/auth/api.go b/naming/auth/api.go new file mode 100644 index 000000000..d62d93b7a --- /dev/null +++ b/naming/auth/api.go @@ -0,0 +1,46 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 auth + +/** +* @brief 内部鉴权接口 +* +* @note 内部鉴权分为两大类:命名空间和服务的资源鉴权;请求鉴权, +* 比如对于OSS操作,需要全局放通 + */ +type Authority interface { + //检查Token格式是否合法 + VerifyToken(actualToken string) bool + // 校验命名空间是否合法 + VerifyNamespace(expectToken string, actualToken string) bool + + // 校验服务是否合法 + VerifyService(expectToken string, actualToken string) bool + + // 校验实例是否合法 + VerifyInstance(expectToken string, actualToken string) bool + + // 校验规则是否合法 + VerifyRule(expectToken string, actualToken string) bool + + // 校验平台是否合法 + VerifyPlatform(expectToken string, actualToken string) bool + + // 校验网格权限是否合法 + VerifyMesh(expectToken string, actualToken string) bool +} diff --git a/naming/auth/authority.go b/naming/auth/authority.go new file mode 100644 index 000000000..299d96af2 --- /dev/null +++ b/naming/auth/authority.go @@ -0,0 +1,179 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 auth + +import ( + "strings" +) + +/** +* @brief 鉴权数据来源类 + */ +type authority struct { + global string + open bool +} + +const ( + globalToken = "polaris@12345678" + defaultOpen = true +) + +/** +* @brief 新建一个缓存类 + */ +func NewAuthority(opt map[string]interface{}) (Authority, error) { + global, _ := opt["global-token"].(string) + if global == "" { + global = globalToken + } + au := &authority{global: global, open: parseOpen(opt)} + return au, nil +} + +/** +* @brief 解析鉴权功能是否打开的开关 + */ +func parseOpen(opt map[string]interface{}) bool { + var open bool + var ok bool + open, ok = opt["open"].(bool) + if !ok { + return defaultOpen + } + return open +} + +//检查Token格式是否合法 +func (a *authority) VerifyToken(actualToken string) bool { + if !a.open { + return true + } + return len(actualToken) > 0 +} + +/** +* @brief 校验命名空间是否合法 + */ +func (a *authority) VerifyNamespace(expectToken string, actualToken string) bool { + if !a.open || a.global == actualToken { + return true + } + if expectToken == actualToken { + return true + } + + return false +} + +/** +* @brief 校验服务是否合法 + */ +func (a *authority) VerifyService(expectToken string, actualToken string) bool { + if !a.open || a.global == actualToken { + return true + } + + tokens := convertToken(expectToken) + if _, ok := tokens[actualToken]; ok { + return true + } + + return false +} + +/** +* @brief 校验实例是否合法 + */ +func (a *authority) VerifyInstance(expectToken string, actualToken string) bool { + if !a.open || a.global == actualToken { + return true + } + + tokens := convertToken(expectToken) + if _, ok := tokens[actualToken]; ok { + return true + } + + return false +} + +/** + * @brief 校验规则是否合法 + */ +func (a *authority) VerifyRule(expectToken string, actualToken string) bool { + if !a.open || a.global == actualToken { + return true + } + + tokens := convertToken(expectToken) + if _, ok := tokens[actualToken]; ok { + return true + } + + return false +} + +/** + * @brief 校验网格规则是否合法 + */ +func (a *authority) VerifyMesh(expectToken string, actualToken string) bool { + if !a.open || a.global == actualToken { + return true + } + + tokens := convertToken(expectToken) + if _, ok := tokens[actualToken]; ok { + return true + } + + return false +} + +/** + * @brief 校验平台是否合法 + */ +func (a *authority) VerifyPlatform(expectToken string, actualToken string) bool { + if !a.open || a.global == actualToken { + return true + } + + tokens := convertToken(expectToken) + if _, ok := tokens[actualToken]; ok { + return true + } + + return false +} + +/** +* @brief 将string类型的token转化为map类型 + */ +func convertToken(token string) map[string]bool { + if token == "" { + return nil + } + + strSlice := strings.Split(token, ",") + strMap := make(map[string]bool) + for _, value := range strSlice { + strMap[value] = true + } + + return strMap +} diff --git a/naming/auth/mock/api_mock.go b/naming/auth/mock/api_mock.go new file mode 100644 index 000000000..b4bc22b62 --- /dev/null +++ b/naming/auth/mock/api_mock.go @@ -0,0 +1,131 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: api.go + +// Package mock is a generated GoMock package. +package mock + +import ( + gomock "github.com/golang/mock/gomock" + reflect "reflect" +) + +// MockAuthority is a mock of Authority interface +type MockAuthority struct { + ctrl *gomock.Controller + recorder *MockAuthorityMockRecorder +} + +// MockAuthorityMockRecorder is the mock recorder for MockAuthority +type MockAuthorityMockRecorder struct { + mock *MockAuthority +} + +// NewMockAuthority creates a new mock instance +func NewMockAuthority(ctrl *gomock.Controller) *MockAuthority { + mock := &MockAuthority{ctrl: ctrl} + mock.recorder = &MockAuthorityMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockAuthority) EXPECT() *MockAuthorityMockRecorder { + return m.recorder +} + +// VerifyToken mocks base method +func (m *MockAuthority) VerifyToken(actualToken string) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyToken", actualToken) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyToken indicates an expected call of VerifyToken +func (mr *MockAuthorityMockRecorder) VerifyToken(actualToken interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyToken", reflect.TypeOf((*MockAuthority)(nil).VerifyToken), actualToken) +} + +// VerifyNamespace mocks base method +func (m *MockAuthority) VerifyNamespace(expectToken, actualToken string) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyNamespace", expectToken, actualToken) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyNamespace indicates an expected call of VerifyNamespace +func (mr *MockAuthorityMockRecorder) VerifyNamespace(expectToken, actualToken interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyNamespace", reflect.TypeOf((*MockAuthority)(nil).VerifyNamespace), expectToken, actualToken) +} + +// VerifyService mocks base method +func (m *MockAuthority) VerifyService(expectToken, actualToken string) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyService", expectToken, actualToken) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyService indicates an expected call of VerifyService +func (mr *MockAuthorityMockRecorder) VerifyService(expectToken, actualToken interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyService", reflect.TypeOf((*MockAuthority)(nil).VerifyService), expectToken, actualToken) +} + +// VerifyInstance mocks base method +func (m *MockAuthority) VerifyInstance(expectToken, actualToken string) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyInstance", expectToken, actualToken) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyInstance indicates an expected call of VerifyInstance +func (mr *MockAuthorityMockRecorder) VerifyInstance(expectToken, actualToken interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyInstance", reflect.TypeOf((*MockAuthority)(nil).VerifyInstance), expectToken, actualToken) +} + +// VerifyRule mocks base method +func (m *MockAuthority) VerifyRule(expectToken, actualToken string) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyRule", expectToken, actualToken) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyRule indicates an expected call of VerifyRule +func (mr *MockAuthorityMockRecorder) VerifyRule(expectToken, actualToken interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyRule", reflect.TypeOf((*MockAuthority)(nil).VerifyRule), expectToken, actualToken) +} + +// VerifyPlatform mocks base method +func (m *MockAuthority) VerifyPlatform(expectToken, actualToken string) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyPlatform", expectToken, actualToken) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyPlatform indicates an expected call of VerifyPlatform +func (mr *MockAuthorityMockRecorder) VerifyPlatform(expectToken, actualToken interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyPlatform", reflect.TypeOf((*MockAuthority)(nil).VerifyPlatform), expectToken, actualToken) +} + +// VerifyMesh mocks base method +func (m *MockAuthority) VerifyMesh(expectToken, actualToken string) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyMesh", expectToken, actualToken) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyMesh indicates an expected call of VerifyMesh +func (mr *MockAuthorityMockRecorder) VerifyMesh(expectToken, actualToken interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyMesh", reflect.TypeOf((*MockAuthority)(nil).VerifyMesh), expectToken, actualToken) +} diff --git a/naming/batch/batch.go b/naming/batch/batch.go new file mode 100644 index 000000000..b001f861b --- /dev/null +++ b/naming/batch/batch.go @@ -0,0 +1,114 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 batch + +import ( + "context" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/naming/auth" + "github.com/polarismesh/polaris-server/plugin" + "github.com/polarismesh/polaris-server/store" +) + +// 批量控制器 +type Controller struct { + register *InstanceCtrl + deregister *InstanceCtrl +} + +// 根据配置文件创建一个批量控制器 +func NewBatchCtrlWithConfig(storage store.Store, authority auth.Authority, auth plugin.Auth, + config *Config) (*Controller, error) { + if config == nil { + return nil, nil + } + + register, err := NewBatchRegisterCtrl(storage, authority, auth, config.Register) + if err != nil { + log.Errorf("[Batch] new batch register instance ctrl err: %s", err.Error()) + return nil, err + } + deregister, err := NewBatchDeregisterCtrl(storage, authority, auth, config.Deregister) + if err != nil { + log.Errorf("[Batch] new batch deregister instance ctrl err: %s", err.Error()) + return nil, err + } + + bc := &Controller{ + register: register, + deregister: deregister, + } + return bc, nil +} + +// 开启批量控制器 +// 启动多个协程,接受外部create/delete请求 +func (bc *Controller) Start(ctx context.Context) { + if bc.CreateInstanceOpen() { + bc.register.Start(ctx) + } + if bc.DeleteInstanceOpen() { + bc.deregister.Start(ctx) + } +} + +// 创建是否开启 +func (bc *Controller) CreateInstanceOpen() bool { + if bc.register != nil { + return true + } + + return false +} + +// 删除实例是否开启 +func (bc *Controller) DeleteInstanceOpen() bool { + if bc.deregister != nil { + return true + } + + return false +} + +// 异步创建实例,返回一个future,根据future获取创建结果 +func (bc *Controller) AsyncCreateInstance(instance *api.Instance, platformID, platformToken string) *InstanceFuture { + future := &InstanceFuture{ + request: instance, + result: make(chan error), + platformID: platformID, + platformToken: platformToken, + } + + // 发送到注册请求队列 + bc.register.queue <- future + return future +} + +// 异步合并反注册 +func (bc *Controller) AsyncDeleteInstance(instance *api.Instance, platformID, platformToken string) *InstanceFuture { + future := &InstanceFuture{ + request: instance, + result: make(chan error), + platformID: platformID, + platformToken: platformToken, + } + + bc.deregister.queue <- future + return future +} diff --git a/naming/batch/batch_test.go b/naming/batch/batch_test.go new file mode 100644 index 000000000..6c1b281e0 --- /dev/null +++ b/naming/batch/batch_test.go @@ -0,0 +1,162 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 batch + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + amock "github.com/polarismesh/polaris-server/naming/auth/mock" + smock "github.com/polarismesh/polaris-server/store/mock" + "github.com/golang/mock/gomock" + . "github.com/smartystreets/goconvey/convey" + "sync" + "testing" +) + +// 测试New +func TestNewBatchCtrlWithConfig(t *testing.T) { + Convey("正常新建", t, func() { + ctrlConfig := &CtrlConfig{ + Open: true, + QueueSize: 1024, + WaitTime: "20ms", + MaxBatchCount: 32, + Concurrency: 64, + } + config := &Config{ + Register: ctrlConfig, + Deregister: ctrlConfig, + } + bc, err := NewBatchCtrlWithConfig(nil, nil, nil, config) + So(err, ShouldBeNil) + So(bc, ShouldNotBeNil) + So(bc.register, ShouldNotBeNil) + So(bc.deregister, ShouldNotBeNil) + }) + Convey("可以关闭register和deregister的batch操作", t, func() { + bc, err := NewBatchCtrlWithConfig(nil, nil, nil, nil) + So(err, ShouldBeNil) + So(bc, ShouldBeNil) + + config := &Config{ + Register: &CtrlConfig{Open: false}, + Deregister: &CtrlConfig{Open: false}, + } + bc, err = NewBatchCtrlWithConfig(nil, nil, nil, config) + So(err, ShouldBeNil) + So(bc, ShouldNotBeNil) + So(bc.register, ShouldBeNil) + So(bc.deregister, ShouldBeNil) + }) +} + +func newCreateInstanceController(t *testing.T) (*Controller, *smock.MockStore, *amock.MockAuthority, + context.CancelFunc) { + ctl := gomock.NewController(t) + storage := smock.NewMockStore(ctl) + authority := amock.NewMockAuthority(ctl) + defer ctl.Finish() + config := &Config{ + Register: &CtrlConfig{ + Open: true, + QueueSize: 1024, + WaitTime: "16ms", + MaxBatchCount: 8, + Concurrency: 4, + }, + } + bc, err := NewBatchCtrlWithConfig(storage, authority, nil, config) + if bc == nil || err != nil { + t.Fatalf("error: %+v", err) + } + ctx, cancel := context.WithCancel(context.Background()) + bc.Start(ctx) + return bc, storage, authority, cancel + //defer cancel() +} + +func sendAsyncCreateInstance(bc *Controller) error { + var wg sync.WaitGroup + ch := make(chan error, 100) + for i := 0; i < 100; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + future := bc.AsyncCreateInstance(&api.Instance{ + Id: utils.NewStringValue(fmt.Sprintf("%d", index)), + ServiceToken: utils.NewStringValue(fmt.Sprintf("%d", index)), + }, + "", "") + if err := future.Wait(); err != nil { + fmt.Printf("%+v\n", err) + ch <- err + } + }(i) + } + wg.Wait() + select { + case err := <-ch: + if err != nil { + return err + } + default: + return nil + } + return nil +} + +// test AsyncCreateInstance +func TestAsyncCreateInstance(t *testing.T) { + Convey("正常创建实例", t, func() { + bc, storage, authority, cancel := newCreateInstanceController(t) + defer cancel() + storage.EXPECT().CheckInstancesExisted(gomock.Any()).Return(nil, nil).AnyTimes() + storage.EXPECT().GetSourceServiceToken(gomock.Any(), gomock.Any()). + Return(&model.Service{ID: "1"}, nil).AnyTimes() + authority.EXPECT().VerifyInstance(gomock.Any(), gomock.Any()).Return(true).AnyTimes() + storage.EXPECT().BatchAddInstances(gomock.Any()).Return(nil).AnyTimes() + So(sendAsyncCreateInstance(bc), ShouldBeNil) + }) + Convey("鉴权失败", t, func() { + bc, storage, authority, cancel := newCreateInstanceController(t) + defer cancel() + storage.EXPECT().CheckInstancesExisted(gomock.Any()).Return(nil, nil).AnyTimes() + storage.EXPECT().GetSourceServiceToken(gomock.Any(), gomock.Any()). + Return(&model.Service{ID: "1"}, nil).AnyTimes() + authority.EXPECT().VerifyInstance(gomock.Any(), gomock.Any()).Return(false).AnyTimes() + err := sendAsyncCreateInstance(bc) + So(err, ShouldNotBeNil) + t.Logf("%+v", err) + }) +} + +// 测试reply +func TestSendReply(t *testing.T) { + Convey("可以正常获取类型", t, func() { + SendReply(make([]*InstanceFuture, 0, 10), 1, nil) + }) + Convey("可以正常获取类型2", t, func() { + SendReply(make(map[string]*InstanceFuture, 10), 1, nil) + }) + Convey("其他类型不通过", t, func() { + SendReply("test string", 1, nil) + }) +} diff --git a/naming/batch/config.go b/naming/batch/config.go new file mode 100644 index 000000000..8fa88b7c7 --- /dev/null +++ b/naming/batch/config.go @@ -0,0 +1,82 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 batch + +import ( + "errors" + "github.com/polarismesh/polaris-server/common/log" + "github.com/mitchellh/mapstructure" +) + +// 批量配置,控制最大的条目,批量等待时间等 +type Config struct { + Register *CtrlConfig `mapstructure:"register"` + Deregister *CtrlConfig `mapstructure:"deregister"` +} + +// batch控制配置项 +type CtrlConfig struct { + // 是否开启Batch工作模式 + Open bool `mapstructure:"open"` + // 注册请求队列的长度 + QueueSize int `mapstructure:"queueSize"` + // 最长多久一次批量操作 + WaitTime string `mapstructure:"waitTime"` + // 每次操作最大的批量数 + MaxBatchCount int `mapstructure:"maxBatchCount"` + // 写store的并发协程数 + Concurrency int `mapstructure:"concurrency"` +} + +// 解析配置文件为config +func ParseBatchConfig(opt map[string]interface{}) (*Config, error) { + if opt == nil { + return nil, nil + } + + var config Config + if err := mapstructure.Decode(opt, &config); err != nil { + log.Errorf("[Batch] parse config(%+v) err: %s", opt, err.Error()) + return nil, err + } + + // 对配置文件做校验 + if !checkCtrlConfig(config.Register) { + log.Errorf("[Controller] batch register config is invalid: %+v", config) + return nil, errors.New("batch register config is invalid") + } + if !checkCtrlConfig(config.Deregister) { + log.Errorf("[Controller] batch deregister config is invalid: %+v", config) + return nil, errors.New("batch deregister config is invalid") + } + + return &config, nil +} + +// 配置文件校验 +func checkCtrlConfig(ctrl *CtrlConfig) bool { + if ctrl == nil { + return true + } + + if ctrl.QueueSize <= 0 || ctrl.MaxBatchCount <= 0 || ctrl.Concurrency <= 0 { + return false + } + + return true +} diff --git a/naming/batch/future.go b/naming/batch/future.go new file mode 100644 index 000000000..671407574 --- /dev/null +++ b/naming/batch/future.go @@ -0,0 +1,83 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 batch + +import ( + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" +) + +// 创建实例的异步结构体 +type InstanceFuture struct { + request *api.Instance // api请求对象 + instance *model.Instance // 从数据库中读取到的model信息 + code uint32 // 记录对外API的错误码 + result chan error // 执行成功/失败的应答chan + platformID string // 平台id + platformToken string // 平台Token +} + +// future的应答 +func (future *InstanceFuture) Reply(code uint32, result error) { + future.code = code + + select { + case future.result <- result: + default: + log.Warnf("[Batch] instance(%s) future is not captured", future.request.GetId().GetValue()) + } + + return +} + +// 外部调用者,需要调用Wait等待执行结果 +func (future *InstanceFuture) Wait() error { + return <-future.result +} + +// 设置ins +func (future *InstanceFuture) SetInstance(instance *model.Instance) { + future.instance = instance +} + +// 获取ins +func (future *InstanceFuture) Instance() *model.Instance { + return future.instance +} + +// 获取code +func (future *InstanceFuture) Code() uint32 { + return future.code +} + +// 批量答复futures +func SendReply(futures interface{}, code uint32, result error) { + switch futures.(type) { + case []*InstanceFuture: + for _, entry := range futures.([]*InstanceFuture) { + entry.Reply(code, result) + } + case map[string]*InstanceFuture: + for _, entry := range futures.(map[string]*InstanceFuture) { + entry.Reply(code, result) + } + default: + log.Errorf("[Controller] not found reply futures type: %T", futures) + } +} diff --git a/naming/batch/instance.go b/naming/batch/instance.go new file mode 100644 index 000000000..219df4be5 --- /dev/null +++ b/naming/batch/instance.go @@ -0,0 +1,460 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 batch + +import ( + "context" + "errors" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming/auth" + "github.com/polarismesh/polaris-server/plugin" + "github.com/polarismesh/polaris-server/store" + "time" +) + +// 批量操作实例的类 +type InstanceCtrl struct { + config *CtrlConfig + storage store.Store + authority auth.Authority + auth plugin.Auth + storeThreadCh []chan []*InstanceFuture // store协程,负责写操作 + instanceHandler func([]*InstanceFuture) error // store协程里面调用的instance处理函数,可以是注册和反注册 + idleStoreThread chan int // 空闲的store协程,记录每一个空闲id + waitDuration time.Duration + queue chan *InstanceFuture // 请求接受协程 + label string + hbOpen bool //是否开启了心跳上报功能 +} + +// 注册实例批量操作对象 +func NewBatchRegisterCtrl(storage store.Store, authority auth.Authority, auth plugin.Auth, + config *CtrlConfig) (*InstanceCtrl, error) { + register, err := newBatchInstanceCtrl(storage, authority, auth, config) + if err != nil { + return nil, err + } + if register == nil { + return nil, nil + } + + log.Infof("[Batch] open batch register") + register.label = "register" + register.instanceHandler = register.registerHandler + return register, nil +} + +// 实例反注册的操作对象 +func NewBatchDeregisterCtrl(storage store.Store, authority auth.Authority, auth plugin.Auth, config *CtrlConfig) ( + *InstanceCtrl, error) { + deregister, err := newBatchInstanceCtrl(storage, authority, auth, config) + if err != nil { + return nil, err + } + if deregister == nil { + return nil, nil + } + + log.Infof("[Batch] open batch deregister") + deregister.label = "deregister" + deregister.instanceHandler = deregister.deregisterHandler + + return deregister, nil +} + +// 开始启动批量操作实例的相关协程 +func (ctrl *InstanceCtrl) Start(ctx context.Context) { + log.Infof("[Batch] Start batch instance, config: %+v", ctrl.config) + + // 初始化并且启动多个store协程,并发对数据库写 + for i := 0; i < ctrl.config.Concurrency; i++ { + ctrl.storeThreadCh = append(ctrl.storeThreadCh, make(chan []*InstanceFuture)) + } + for i := 0; i < ctrl.config.Concurrency; i++ { + go ctrl.storeWorker(ctx, i) + } + + // 进入主循环 + ctrl.mainLoop(ctx) +} + +// 创建批量控制instance的对象 +func newBatchInstanceCtrl(storage store.Store, authority auth.Authority, auth plugin.Auth, + config *CtrlConfig) (*InstanceCtrl, error) { + if config == nil || config.Open == false { + return nil, nil + } + + duration, err := time.ParseDuration(config.WaitTime) + if err != nil { + log.Errorf("[Batch] parse waitTime(%s) err: %s", config.WaitTime, err.Error()) + return nil, err + } + if duration == 0 { + log.Errorf("[Batch] config waitTime is invalid") + return nil, errors.New("config waitTime is invalid") + } + + instance := &InstanceCtrl{ + config: config, + storage: storage, + authority: authority, + auth: auth, + storeThreadCh: make([]chan []*InstanceFuture, 0, config.Concurrency), + idleStoreThread: make(chan int, config.Concurrency), + queue: make(chan *InstanceFuture, config.QueueSize), + waitDuration: duration, + } + return instance, nil +} + +// 注册主协程 +// 从注册队列中获取注册请求,当达到b.config.MaxBatchCount, +// 或当到了一个超时时间b.waitDuration,则发起一个写请求 +// 写请求发送到store协程,规则:从空闲的管道idleStoreThread中挑选一个 +func (ctrl *InstanceCtrl) mainLoop(ctx context.Context) { + futures := make([]*InstanceFuture, 0, ctrl.config.MaxBatchCount) + idx := 0 + triggerConsume := func(data []*InstanceFuture) { + if idx == 0 { + return + } + // 选择一个idle的store协程写数据 TODO 这里需要统计一下 + idleIdx := <-ctrl.idleStoreThread + ctrl.storeThreadCh[idleIdx] <- data + futures = make([]*InstanceFuture, 0, ctrl.config.MaxBatchCount) + idx = 0 + return + } + // 启动接受注册请求的协程 + go func() { + ticker := time.NewTicker(ctrl.waitDuration) + defer ticker.Stop() + for { + select { + case future := <-ctrl.queue: + futures = append(futures, future) + idx++ + if idx == ctrl.config.MaxBatchCount { + triggerConsume(futures[0:idx]) + } + case <-ticker.C: + triggerConsume(futures[0:idx]) + case <-ctx.Done(): + log.Infof("[Batch] %s main loop exited", ctrl.label) + return + } + } + }() +} + +// store写协程的主循环 +// 从chan中获取数据,直接写数据库 +// 每次写完,设置协程为空闲 +func (ctrl *InstanceCtrl) storeWorker(ctx context.Context, index int) { + log.Infof("[Batch] %s worker(%d) running in main loop", ctrl.label, index) + // store协程启动,先把自己注册到idle中 + ctrl.idleStoreThread <- index + // 主循环 + for { + select { + case futures := <-ctrl.storeThreadCh[index]: + if err := ctrl.instanceHandler(futures); err != nil { + // 所有的错误都在instanceHandler函数里面进行答复和处理,这里只需记录一条日志 + log.Errorf("[Batch] %s instances err: %s", ctrl.label, err.Error()) + } + ctrl.idleStoreThread <- index + case <-ctx.Done(): + // idle is not ready + log.Infof("[Batch] %s worker(%d) exited", ctrl.label, index) + return + } + } +} + +// 外部应该把鉴权完成 +// 判断实例是否存在,也可以提前判断,减少batch复杂度 +// 提前通过token判断,再进入batch操作 +// batch操作,只是写操作 +func (ctrl *InstanceCtrl) registerHandler(futures []*InstanceFuture) error { + if len(futures) == 0 { + return nil + } + + log.Infof("[Batch] Start batch creating instances count: %d", len(futures)) + remains := make(map[string]*InstanceFuture, len(futures)) + for _, entry := range futures { + if _, ok := remains[entry.request.GetId().GetValue()]; ok { + entry.Reply(api.SameInstanceRequest, errors.New("there is the same instance request")) + continue + } + + remains[entry.request.GetId().GetValue()] = entry + } + + // 统一判断实例是否存在 + remains, err := ctrl.batchCheckInstancesExisted(remains) + if err != nil { + log.Errorf("[Batch] batch check instances existed err: %s", err.Error()) + } + // 这里可能全部都重复了 + if len(remains) == 0 { + log.Infof("[Batch] all instances is existed, return create instances process") + return nil + } + + // 统一鉴权 + remains, serviceIDs, _ := ctrl.batchVerifyInstances(remains) + if len(remains) == 0 { + log.Infof("[Batch] all instances verify failed, no remain any instances") + return nil + } + + // 构造model数据 + for id, entry := range remains { + serviceID, ok := serviceIDs[entry.request.GetId().GetValue()] + if !ok || serviceID == "" { + log.Errorf("[Batch] not found instance(%s) service, ignore it", entry.request.GetId().GetValue()) + delete(remains, id) + entry.Reply(api.NotFoundResource, errors.New("not found service")) + continue + } + entry.SetInstance(utils.CreateInstanceModel(serviceID, entry.request)) + } + + // 调用batch接口,创建实例 + instances := make([]*model.Instance, 0, len(remains)) + for _, entry := range remains { + instances = append(instances, entry.instance) + } + if err := ctrl.storage.BatchAddInstances(instances); err != nil { + SendReply(remains, StoreCode2APICode(err), err) + return err + } + + SendReply(remains, api.ExecuteSuccess, nil) + return nil +} + +// 反注册处理函数 +// 步骤: +// - 从数据库中批量读取实例ID对应的实例简要信息: +// 包括:ID,host,port,serviceName,serviceNamespace,serviceToken +// - 对instance做存在与token的双重校验,较少与数据库的交互 +// - 对于不存在的token,返回notFoundResource +// - 对于token校验失败的,返回校验失败 +// - 调用批量接口删除实例 +func (ctrl *InstanceCtrl) deregisterHandler(futures []*InstanceFuture) error { + if len(futures) == 0 { + return nil + } + + log.Infof("[Batch] Start batch deregister instances count: %d", len(futures)) + remains := make(map[string]*InstanceFuture, len(futures)) + ids := make(map[string]bool, len(futures)) + for _, entry := range futures { + if _, ok := remains[entry.request.GetId().GetValue()]; ok { + entry.Reply(api.SameInstanceRequest, errors.New("there is the same instance request")) + continue + } + + remains[entry.request.GetId().GetValue()] = entry + ids[entry.request.GetId().GetValue()] = false + } + + // 统一鉴权与判断是否存在 + instances, err := ctrl.storage.GetInstancesBrief(ids) + if err != nil { + log.Errorf("[Batch] get instances service token err: %s", err.Error()) + SendReply(remains, api.StoreLayerException, err) + return err + } + for _, future := range futures { + instance, ok := instances[future.request.GetId().GetValue()] + if !ok { + // 不存在,意味着不需要删除了 + future.Reply(api.NotFoundResource, fmt.Errorf("%s", api.Code2Info(api.NotFoundResource))) + delete(remains, future.request.GetId().GetValue()) + continue + } + + future.SetInstance(instance) // 这里保存instance的目的:方便上层使用model数据 + if ok, code := ctrl.verifyInstanceAuth(future.platformID, future.platformToken, instance.ServiceToken(), + instance.ServicePlatformID, future.request); !ok { + future.Reply(code, fmt.Errorf("instances: %s %s", future.request.GetId().GetValue(), + api.Code2Info(code))) + delete(remains, future.request.GetId().GetValue()) + continue + } + } + + if len(remains) == 0 { + log.Infof("[Batch] deregister all instances verify failed or instances is not existed, no remain any instances") + return nil + } + + // 调用storage batch接口,删除实例 + args := make([]interface{}, 0, len(remains)) + for _, entry := range remains { + args = append(args, entry.request.GetId().GetValue()) + } + if err := ctrl.storage.BatchDeleteInstances(args); err != nil { + log.Errorf("[Batch] batch delete instances err: %s", err.Error()) + SendReply(remains, api.StoreLayerException, err) + return err + } + + SendReply(remains, api.ExecuteSuccess, nil) + return nil +} + +// 批量检查实例是否存在 +func (ctrl *InstanceCtrl) batchCheckInstancesExisted(futures map[string]*InstanceFuture) ( + map[string]*InstanceFuture, error) { + + if len(futures) == 0 { + return nil, nil + } + + // 初始化所有的id都是不存在的 + ids := make(map[string]bool, len(futures)) + for _, entry := range futures { + ids[entry.request.GetId().GetValue()] = false + } + if _, err := ctrl.storage.CheckInstancesExisted(ids); err != nil { + log.Errorf("[Batch] check instances existed storage err: %s", err.Error()) + SendReply(futures, api.StoreLayerException, err) + return nil, err + } + + for id, existed := range ids { + if !existed { + continue + } + + entry, ok := futures[id] + if !ok { + // 返回了没有查询的id,告警 + log.Warnf("[Batch] check instances existed get not track id : %s", id) + continue + } + + entry.Reply(api.ExistedResource, fmt.Errorf("instance(%s) is existed", entry.request.GetId().GetValue())) + delete(futures, id) + } + + return futures, nil +} + +// 对请求futures进行统一的鉴权 +// 目的:遇到同名的服务,可以减少getService的次数 +// 返回:过滤后的futures, 实例ID->ServiceID, error +func (ctrl *InstanceCtrl) batchVerifyInstances(futures map[string]*InstanceFuture) ( + map[string]*InstanceFuture, map[string]string, error) { + + if len(futures) == 0 { + return nil, nil, nil + } + + serviceIDs := make(map[string]string) // 实例ID -> ServiceID + services := make(map[string]*model.Service) // 保存Service的鉴权结果 + for id, entry := range futures { + serviceStr := entry.request.GetService().GetValue() + entry.request.GetNamespace().GetValue() + service, ok := services[serviceStr] + if !ok { + // 鉴权,这里拿的是源服务token,如果是别名,service=nil + tmpService, err := ctrl.storage.GetSourceServiceToken(entry.request.GetService().GetValue(), + entry.request.GetNamespace().GetValue()) + if err != nil { + log.Errorf("[Controller] get source service(%s, %s) token err: %s", + entry.request.GetService().GetValue(), entry.request.GetNamespace().GetValue(), err.Error()) + entry.Reply(api.StoreLayerException, err) + delete(futures, id) + continue + } + + // 注册的实例对应的源服务不存在 + if tmpService == nil { + log.Errorf("[Controller] get source service(%s, %s) token is empty, verify failed", + entry.request.GetService().GetValue(), entry.request.GetNamespace().GetValue()) + entry.Reply(api.NotFoundResource, errors.New("not found service")) + delete(futures, id) + continue + } + // 保存查询到的最新服务信息,后续可能会使用到 + service = tmpService + services[serviceStr] = service + } + + if ok, code := ctrl.verifyInstanceAuth(entry.platformID, entry.platformToken, + service.Token, service.PlatformID, entry.request); !ok { + entry.Reply(code, fmt.Errorf("service: %s, namepace: %s, instance: %s %s", + entry.request.GetService().GetValue(), entry.request.GetNamespace().GetValue(), + entry.request.GetId().GetValue(), api.Code2Info(code))) + delete(futures, id) + continue + } + + // 保存每个instance注册到的服务ID + serviceIDs[entry.request.GetId().GetValue()] = service.ID + } + + return futures, serviceIDs, nil +} + +/** + * @brief 实例鉴权 + */ +func (ctrl *InstanceCtrl) verifyInstanceAuth(platformID, platformToken, expectServiceToken, sPlatformID string, + req *api.Instance) (bool, uint32) { + if ok := ctrl.verifyAuthByPlatform(platformID, platformToken, sPlatformID); !ok { + // 检查token是否存在 + actualServiceToken := req.GetServiceToken().GetValue() + if !ctrl.authority.VerifyToken(actualServiceToken) { + return false, api.InvalidServiceToken + } + + // 检查token是否ok + if ok := ctrl.authority.VerifyInstance(expectServiceToken, actualServiceToken); !ok { + return false, api.Unauthorized + } + } + return true, 0 +} + +/** + * @brief 使用平台ID鉴权 + */ +func (ctrl *InstanceCtrl) verifyAuthByPlatform(platformID, platformToken, sPlatformID string) bool { + if ctrl.auth == nil { + return false + } + + if sPlatformID == "" { + return false + } + + if ctrl.auth.Allow(platformID, platformToken) && platformID == sPlatformID { + return true + } + return false +} diff --git a/naming/batch/utils.go b/naming/batch/utils.go new file mode 100644 index 000000000..6c135cb0c --- /dev/null +++ b/naming/batch/utils.go @@ -0,0 +1,50 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 batch + +import ( + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/store" +) + +// store code 2 api code +func StoreCode2APICode(err error) uint32 { + code := store.Code(err) + switch { + case code == store.EmptyParamsErr: + return api.InvalidParameter + case code == store.OutOfRangeErr: + return api.InvalidParameter + case code == store.DataConflictErr: + return api.DataConflict + case code == store.NotFoundNamespace: + return api.NotFoundNamespace + case code == store.NotFoundService: + return api.NotFoundService + case code == store.NotFoundMasterConfig: + return api.NotFoundMasterConfig + case code == store.NotFoundTagConfigOrService: + return api.NotFoundTagConfigOrService + case code == store.ExistReleasedConfig: + return api.ExistReleasedConfig + case code == store.DuplicateEntryErr: + return api.ExistedResource + default: + return api.StoreLayerException + } +} diff --git a/naming/cache/cache.go b/naming/cache/cache.go new file mode 100644 index 000000000..4623f8430 --- /dev/null +++ b/naming/cache/cache.go @@ -0,0 +1,394 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "context" + "crypto/sha1" + "encoding/hex" + "fmt" + "io" + "sort" + "sync" + "time" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" +) + +var ( + cacheSet = make(map[string]int) +) + +const ( + //CacheNamespace int = iota + //CacheBusiness + CacheService int = iota + CacheInstance + CacheRoutingConfig + CacheCL5 + CacheRateLimit + CacheCircuitBreaker + CacheLast +) + +const ( + DefaultTimeDiff = -1 * time.Second * 5 +) + +/** + * @brief 缓存接口 + */ +type Cache interface { + initialize(c map[string]interface{}) error + update() error + clear() error + name() string +} + +const ( + // 缓存更新时间间隔 + UpdateCacheInterval = time.Second +) + +const ( + // Revision计算的并发线程数 + RevisionConcurrenceCount = 64 + // 存储revision计算的通知管道,可以稍微设置大一点 + RevisionChanCount = 10240 +) + +// 更新revision的结构体 +type revisionNotify struct { + serviceID string + valid bool +} + +// create new revision notify +func newRevisionNotify(serviceID string, valid bool) *revisionNotify { + return &revisionNotify{ + serviceID: serviceID, + valid: valid, + } +} + +/** + * @brief 名字服务缓存 + */ +type NamingCache struct { + storage store.Store + caches []Cache + + comRevisionCh chan *revisionNotify + revisions *sync.Map +} + +/** + * @brief 新建一个缓存对象 + */ +func NewNamingCache(storage store.Store) (*NamingCache, error) { + nc := &NamingCache{ + storage: storage, + caches: make([]Cache, CacheLast), + comRevisionCh: make(chan *revisionNotify, RevisionChanCount), + revisions: new(sync.Map), + } + + sc := newServiceCache(storage, nc.comRevisionCh) + ic := newInstanceCache(storage, nc.comRevisionCh) + + nc.caches[CacheService] = sc + nc.caches[CacheInstance] = ic + nc.caches[CacheRoutingConfig] = newRoutingConfigCache(storage) + nc.caches[CacheCL5] = &l5Cache{ + storage: storage, + ic: ic, + sc: sc, + } + nc.caches[CacheRateLimit] = newRateLimitCache(storage) + nc.caches[CacheCircuitBreaker] = newCircuitBreakerCache(storage) + + if err := nc.initialize(); err != nil { + return nil, err + } + + return nc, nil +} + +/** + * @brief 缓存对象初始化 + */ +func (nc *NamingCache) initialize() error { + for _, obj := range nc.caches { + var option map[string]interface{} + for _, entry := range config.Resources { + if obj.name() == entry.Name { + option = entry.Option + break + } + } + if err := obj.initialize(option); err != nil { + return err + } + } + + return nil +} + +/** + * @brief 缓存更新 + */ +func (nc *NamingCache) update() error { + var wg sync.WaitGroup + for _, entry := range config.Resources { + index, exist := cacheSet[entry.Name] + if !exist { + return fmt.Errorf("cache resource %s not exists", entry.Name) + } + wg.Add(1) + go func(c Cache) { + defer wg.Done() + _ = c.update() + }(nc.caches[index]) + } + + wg.Wait() + return nil +} + +/** + * @brief 清除caches的所有缓存数据 + */ +func (nc *NamingCache) clear() error { + for _, obj := range nc.caches { + if err := obj.clear(); err != nil { + return err + } + } + + return nil +} + +/** + * @brief 缓存对象启动协程,定时更新缓存 + */ +func (nc *NamingCache) Start(ctx context.Context) error { + log.Infof("[Cache] cache goroutine start") + // 先启动revision计算协程 + go nc.revisionWorker(ctx) + + // 启动的时候,先更新一版缓存 + log.Infof("[Cache] cache update now first time") + if err := nc.update(); err != nil { + return err + } + log.Infof("[Cache] cache update done") + + // 启动协程,开始定时更新缓存数据 + go func() { + ticker := time.NewTicker(nc.GetUpdateCacheInterval()) + defer ticker.Stop() + for { + select { + case <-ticker.C: + _ = nc.update() + case <-ctx.Done(): + return + } + } + }() + + return nil +} + +/** + * @brief 主动清除缓存数据 + */ +func (nc *NamingCache) Clear() error { + nc.revisions = new(sync.Map) + return nc.clear() +} + +/** + * @brief Cache中计算服务实例revision的worker + */ +func (nc *NamingCache) revisionWorker(ctx context.Context) { + log.Infof("[Cache] compute revision worker start") + defer log.Infof("[Cache] compute revision worker done") + + processFn := func() { + for { + select { + case req := <-nc.comRevisionCh: + if ok := nc.processRevisionWorker(req); !ok { + continue + } + + // 每个计算完,等待2ms + time.Sleep(time.Millisecond * 2) + case <-ctx.Done(): + return + } + } + } + + // 启动多个协程来计算revision,后续可以通过启动参数控制 + for i := 0; i < RevisionConcurrenceCount; i++ { + go processFn() + } +} + +// 处理revision计算的函数 +func (nc *NamingCache) processRevisionWorker(req *revisionNotify) bool { + if req == nil { + log.Errorf("[Cache][Revision] get null revision request") + return false + } + + if req.serviceID == "" { + log.Errorf("[Cache][Revision] get request service ID is empty") + return false + } + + if req.valid == false { + //log.Infof("[Cache][Revision] service(%s) revision has all been removed", req.serviceID) + nc.revisions.Delete(req.serviceID) + return true + } + + service := nc.Service().GetServiceByID(req.serviceID) + if service == nil { + //log.Errorf("[Cache][Revision] can not found service id(%s)", req.serviceID) + return false + } + + instances := nc.Instance().GetInstancesByServiceID(req.serviceID) + revision, err := ComputeRevision(service.Revision, instances) + if err != nil { + log.Errorf("[Cache] compute service id(%s) instances revision err: %s", req.serviceID, err.Error()) + return false + } + nc.revisions.Store(req.serviceID, revision) // string -> string + return true +} + +// 获取当前cache的更新间隔 +func (nc *NamingCache) GetUpdateCacheInterval() time.Duration { + return UpdateCacheInterval +} + +/** + * @brief 获取服务实例计算之后的revision + */ +func (nc *NamingCache) GetServiceInstanceRevision(serviceID string) string { + value, ok := nc.revisions.Load(serviceID) + if !ok { + return "" + } + + return value.(string) +} + +/** + * @brief 计算一下缓存中的revision的个数 + */ +func (nc *NamingCache) GetServiceRevisionCount() int { + count := 0 + nc.revisions.Range(func(key, value interface{}) bool { + count++ + return true + }) + + return count +} + +/** + * @brief 获取Service缓存信息 + */ +func (nc *NamingCache) Service() ServiceCache { + return nc.caches[CacheService].(ServiceCache) +} + +/** + * @brief 获取Instance缓存信息 + */ +func (nc *NamingCache) Instance() InstanceCache { + return nc.caches[CacheInstance].(InstanceCache) +} + +/** + * @brief 获取路由配置的缓存信息 + */ +func (nc *NamingCache) RoutingConfig() RoutingConfigCache { + return nc.caches[CacheRoutingConfig].(RoutingConfigCache) +} + +/** + * @brief 获取l5缓存信息 + */ +func (nc *NamingCache) CL5() L5Cache { + return nc.caches[CacheCL5].(L5Cache) +} + +/** + * @brief 获取限流规则缓存信息 + */ +func (nc *NamingCache) RateLimit() RateLimitCache { + return nc.caches[CacheRateLimit].(RateLimitCache) +} + +/** + * @brief 获取熔断规则缓存信息 + */ +func (nc *NamingCache) CircuitBreaker() CircuitBreakerCache { + return nc.caches[CacheCircuitBreaker].(CircuitBreakerCache) +} + +// +func ComputeRevision(serviceRevision string, instances []*model.Instance) (string, error) { + h := sha1.New() + if _, err := io.WriteString(h, serviceRevision); err != nil { + return "", err + } + + var slice sort.StringSlice + for _, item := range instances { + slice = append(slice, item.Revision()) + } + slice.Sort() + for _, revision := range slice { + if _, err := io.WriteString(h, revision); err != nil { + return "", err + } + } + + out := hex.EncodeToString(h.Sum(nil)) + return out, nil +} + +/** + * @brief 注册缓存资源 + */ +func RegisterCache(name string, index int) { + if _, exist := cacheSet[name]; exist { + panic(fmt.Sprintf("existed cache resource: name = %v", name)) + } + + cacheSet[name] = index +} \ No newline at end of file diff --git a/naming/cache/cache_test.go b/naming/cache/cache_test.go new file mode 100644 index 000000000..d4ec0f7b4 --- /dev/null +++ b/naming/cache/cache_test.go @@ -0,0 +1,192 @@ +package cache + +import ( + "context" + "fmt" + "testing" + "time" + + v1 "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/store/mock" + "github.com/golang/mock/gomock" + . "github.com/smartystreets/goconvey/convey" +) + +// 测试cache函数是否正常 +func TestNamingCache_Start(t *testing.T) { + ctl := gomock.NewController(t) + storage := mock.NewMockStore(ctl) + defer ctl.Finish() + + conf := &Config{ + Open: true, + Resources: []ConfigEntry{ + { + Name: "service", + }, + { + Name: "instance", + }, + { + Name: "routingConfig", + }, + { + Name: "rateLimitConfig", + }, + { + Name: "circuitBreakerConfig", + }, + { + Name: "l5", + }, + }, + } + SetCacheConfig(conf) + + Convey("测试正常的更新缓存逻辑", t, func() { + c, err := NewNamingCache(storage) + So(err, ShouldBeNil) + So(c, ShouldNotBeNil) + + beg := time.Unix(0, 0).Add(DefaultTimeDiff) + storage.EXPECT().GetMoreInstances(beg, true, false, nil).Return(nil, nil).MaxTimes(1) + storage.EXPECT().GetMoreInstances(beg, false, false, nil).Return(nil, nil).MaxTimes(3) + storage.EXPECT().GetMoreServices(beg, true, false, false).Return(nil, nil).MaxTimes(1) + storage.EXPECT().GetMoreServices(beg, false, false, false).Return(nil, nil).MaxTimes(3) + storage.EXPECT().GetRoutingConfigsForCache(beg, true).Return(nil, nil).MaxTimes(3) + storage.EXPECT().GetRoutingConfigsForCache(beg, false).Return(nil, nil).MaxTimes(3) + storage.EXPECT().GetMoreL5Routes(uint32(0)).Return(nil, nil).MaxTimes(3) + storage.EXPECT().GetMoreL5Policies(uint32(0)).Return(nil, nil).MaxTimes(3) + storage.EXPECT().GetMoreL5Sections(uint32(0)).Return(nil, nil).MaxTimes(3) + storage.EXPECT().GetMoreL5IPConfigs(uint32(0)).Return(nil, nil).MaxTimes(3) + storage.EXPECT().GetRateLimitsForCache(beg, true).Return(nil, nil, nil).MaxTimes(1) + storage.EXPECT().GetRateLimitsForCache(beg, false).Return(nil, nil, nil).MaxTimes(3) + storage.EXPECT().GetCircuitBreakerForCache(beg, true).Return(nil, nil).MaxTimes(1) + storage.EXPECT().GetCircuitBreakerForCache(beg, false).Return(nil, nil).MaxTimes(3) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + err = c.initialize() + So(err, ShouldBeNil) + + err = c.Start(ctx) + So(err, ShouldBeNil) + + // 等待cache更新 + time.Sleep(c.GetUpdateCacheInterval() + time.Second) + }) +} + +// 测试revision的管道是否正常 +func TestRevisionWorker(t *testing.T) { + ctl := gomock.NewController(t) + storage := mock.NewMockStore(ctl) + defer ctl.Finish() + + Convey("revision计算,chan可以正常收发", t, func() { + nc, err := NewNamingCache(storage) + defer func() { _ = nc.Clear() }() + So(err, ShouldBeNil) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + go nc.revisionWorker(ctx) + + Convey("revision计算,实例有增加有减少,计算正常", func() { + _ = nc.Clear() + // mock一下cache中服务的数据 + maxTotal := 20480 + services := make(map[string]*model.Service) + for i := 0; i < maxTotal; i++ { + item := &model.Service{ + ID: fmt.Sprintf("service-id-%d", i), + Revision: fmt.Sprintf("revision-%d", i), + Valid: true, + } + services[item.ID] = item + } + storage.EXPECT().GetMoreServices(time.Unix(0, 0).Add(DefaultTimeDiff), true, false, false).Return(services, nil) + // 触发计算 + _ = nc.caches[CacheService].update() + time.Sleep(time.Second * 2) + So(nc.GetServiceRevisionCount(), ShouldEqual, maxTotal) + + services = make(map[string]*model.Service) + for i := 0; i < maxTotal; i++ { + if i%2 == 0 { + item := &model.Service{ + ID: fmt.Sprintf("service-id-%d", i), + Revision: fmt.Sprintf("revision-%d", i), + Valid: false, + } + services[item.ID] = item + } + } + storage.EXPECT().GetMoreServices(time.Unix(0, 0).Add(DefaultTimeDiff), false, false, false).Return(services, nil) + // 触发计算 + _ = nc.caches[CacheService].update() + time.Sleep(time.Second * 2) + // 检查是否有正常计算 + So(nc.GetServiceRevisionCount(), ShouldEqual, maxTotal/2) + }) + }) +} + +// 测试计算revision的函数 +func TestComputeRevision(t *testing.T) { + Convey("instances为空,可以正常计算", t, func() { + out, err := ComputeRevision("123", nil) + So(err, ShouldBeNil) + So(out, ShouldNotBeEmpty) + }) + + Convey("instances内容一样,不同顺序,计算出的revision一样", t, func() { + instances := make([]*model.Instance, 0, 6) + for i := 0; i < 6; i++ { + instances = append(instances, &model.Instance{ + Proto: &v1.Instance{ + Revision: utils.NewStringValue(fmt.Sprintf("revision-%d", i)), + }, + }) + } + + lhs, err := ComputeRevision("123", nil) + So(err, ShouldBeNil) + So(lhs, ShouldNotBeEmpty) + + // 交换一下数据,数据内容不变,revision应该保证不变 + tmp := instances[0] + instances[0] = instances[1] + instances[1] = instances[3] + instances[3] = tmp + + rhs, err := ComputeRevision("123", nil) + So(err, ShouldBeNil) + So(lhs, ShouldEqual, rhs) + }) + + Convey("serviceRevision发生改变,返回改变", t, func() { + lhs, err := ComputeRevision("123", nil) + So(err, ShouldBeNil) + So(lhs, ShouldNotBeEmpty) + + rhs, err := ComputeRevision("456", nil) + So(err, ShouldBeNil) + So(lhs, ShouldNotEqual, rhs) + }) + + Convey("instances内容改变,返回改变", t, func() { + instance := &model.Instance{Proto: &v1.Instance{Revision: utils.NewStringValue("123456")}} + lhs, err := ComputeRevision("123", []*model.Instance{instance}) + So(err, ShouldBeNil) + So(lhs, ShouldNotBeEmpty) + + instance.Proto.Revision.Value = "654321" + rhs, err := ComputeRevision("456", []*model.Instance{instance}) + So(err, ShouldBeNil) + So(lhs, ShouldNotEqual, rhs) + }) +} diff --git a/naming/cache/circuitbreaker_config.go b/naming/cache/circuitbreaker_config.go new file mode 100644 index 000000000..ad5a8978d --- /dev/null +++ b/naming/cache/circuitbreaker_config.go @@ -0,0 +1,162 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" + "sync" + "time" +) + +const ( + CircuitBreakerName = "circuitBreakerConfig" +) + +// circuitBreaker配置的cache接口 +type CircuitBreakerCache interface { + Cache + + // 根据ServiceID获取熔断配置 + GetCircuitBreakerConfig(id string) *model.ServiceWithCircuitBreaker +} + +/** + * @brief circuitBreaker的实现 + */ +type circuitBreakerCache struct { + storage store.Store + ids *sync.Map + lastTime time.Time + firstUpdate bool +} + +/** + * @brief 返回一个操作CircuitBreakerCache的对象 + */ +func newCircuitBreakerCache(s store.Store) *circuitBreakerCache { + return &circuitBreakerCache{ + storage: s, + } +} + +/** + * @brief 实现Cache接口的函数 + */ +func (cbc *circuitBreakerCache) initialize(opt map[string]interface{}) error { + cbc.ids = new(sync.Map) + cbc.lastTime = time.Unix(0, 0) + cbc.firstUpdate = true + if opt == nil { + return nil + } + return nil +} + +/** + * @brief 实现Cache接口的函数 + */ +func (cbc *circuitBreakerCache) update() error { + out, err := cbc.storage.GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate) + if err != nil { + log.Errorf("[Cache] circuit breaker config cache update err:%s", err.Error()) + return err + } + + cbc.firstUpdate = false + return cbc.setCircuitBreaker(out) +} + +/** + * @brief 实现Cache接口的函数 + */ +func (cbc *circuitBreakerCache) clear() error { + cbc.ids = new(sync.Map) + cbc.lastTime = time.Unix(0, 0) + return nil +} + +/** + * @brief 实现资源名称 + */ +func (cbc *circuitBreakerCache) name() string { + return CircuitBreakerName +} + +/** + * @brief 根据serviceID获取熔断规则 + */ +func (cbc *circuitBreakerCache) GetCircuitBreakerConfig(id string) *model.ServiceWithCircuitBreaker { + if id == "" { + return nil + } + + value, ok := cbc.ids.Load(id) + if !ok { + return nil + } + + return value.(*model.ServiceWithCircuitBreaker) +} + +/** + * @brief 更新store的数据到cache中 + */ +func (cbc *circuitBreakerCache) setCircuitBreaker(cb []*model.ServiceWithCircuitBreaker) error { + if len(cb) == 0 { + return nil + } + + lastTime := cbc.lastTime.Unix() + for _, entry := range cb { + if entry.ServiceID == "" { + continue + } + + if entry.ModifyTime.Unix() > lastTime { + lastTime = entry.ModifyTime.Unix() + } + + if entry.Valid == false { + cbc.ids.Delete(entry.ServiceID) + continue + } + + cbc.ids.Store(entry.ServiceID, entry) + } + + if cbc.lastTime.Unix() < lastTime { + cbc.lastTime = time.Unix(lastTime, 0) + } + return nil +} + +/** + * @brief 获取熔断规则总数 + */ +func (cbc *circuitBreakerCache) GetCircuitBreakerCount(f func(k, v interface{}) bool) { + cbc.ids.Range(f) +} + +/** + * @brief 自注册到缓存列表 + */ +func init() { + RegisterCache(CircuitBreakerName, CacheCircuitBreaker) +} diff --git a/naming/cache/circuitbreaker_config_test.go b/naming/cache/circuitbreaker_config_test.go new file mode 100644 index 000000000..eac6b16c4 --- /dev/null +++ b/naming/cache/circuitbreaker_config_test.go @@ -0,0 +1,235 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "fmt" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store/mock" + "github.com/golang/mock/gomock" + "testing" + "time" +) + +/** + * @brief 创建一个测试mock circuitBreakerCache + */ +func newTestCircuitBreakerCache(t *testing.T) (*gomock.Controller, *mock.MockStore, *circuitBreakerCache) { + ctl := gomock.NewController(t) + + storage := mock.NewMockStore(ctl) + rlc := newCircuitBreakerCache(storage) + var opt map[string]interface{} + _ = rlc.initialize(opt) + return ctl, storage, rlc +} + +/** + * @brief 生成熔断规则测试数据 + */ +func genModelCircuitBreakers(beginNum, total int) []*model.ServiceWithCircuitBreaker { + out := make([]*model.ServiceWithCircuitBreaker, 0, total) + + for i := beginNum; i < total+beginNum; i++ { + item := &model.ServiceWithCircuitBreaker{ + ServiceID: fmt.Sprintf("id-%d", i), + CircuitBreaker: &model.CircuitBreaker{ + ID: fmt.Sprintf("id-%d", i), + Version: fmt.Sprintf("version-%d", i), + }, + Valid: true, + ModifyTime: time.Unix(int64(i), 0), + } + out = append(out, item) + } + return out +} + +/** + * @brief 统计缓存中的熔断数据 + */ +func getCircuitBreakerCount(cbc *circuitBreakerCache) int { + count := 0 + proc := func(k, v interface{}) bool { + count++ + return true + } + cbc.GetCircuitBreakerCount(proc) + return count +} + +/** + * @brief 生成熔断规则测试数据 + */ +func TestCircuitBreakersUpdate(t *testing.T) { + ctl, storage, cbc := newTestCircuitBreakerCache(t) + defer ctl.Finish() + + total := 10 + serviceWithCircuitBreakers := genModelCircuitBreakers(0, total) + + t.Run("正常更新缓存,可以获取到数据", func(t *testing.T) { + _ = cbc.clear() + + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(serviceWithCircuitBreakers, nil) + if err := cbc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + // 检查数目是否一致 + if getCircuitBreakerCount(cbc) == total { + t.Log("pass") + } else { + t.Fatalf("actual count is %d", getCircuitBreakerCount(cbc)) + } + }) + + t.Run("缓存数据为空", func(t *testing.T) { + _ = cbc.clear() + + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(nil, nil) + if err := cbc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if getCircuitBreakerCount(cbc) == 0 { + t.Log("pass") + } else { + t.Fatalf("actual count is %d", getCircuitBreakerCount(cbc)) + } + }) + + t.Run("lastMtime正确更新", func(t *testing.T) { + _ = cbc.clear() + + currentTime := time.Unix(100, 0) + serviceWithCircuitBreakers[0].ModifyTime = currentTime + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(serviceWithCircuitBreakers, nil) + if err := cbc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if cbc.lastTime.Unix() == currentTime.Unix() { + t.Log("pass") + } else { + t.Fatalf("last mtime error") + } + }) + + t.Run("数据库返回错误, update错误", func(t *testing.T) { + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(nil, fmt.Errorf("storage error")) + if err := cbc.update(); err != nil { + t.Log("pass") + } else { + t.Fatalf("error") + } + }) +} + +/** + * @brief 统计缓存中的熔断规则数据 + */ +func TestCircuitBreakerUpdate2(t *testing.T) { + ctl, storage, cbc := newTestCircuitBreakerCache(t) + defer ctl.Finish() + + total := 10 + + t.Run("更新缓存后,增加部分数据,缓存正常更新", func(t *testing.T) { + _ = cbc.clear() + + serviceWithCircuitBreakers := genModelCircuitBreakers(0, total) + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(serviceWithCircuitBreakers, nil) + if err := cbc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + serviceWithCircuitBreakers = genModelCircuitBreakers(10, total) + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(serviceWithCircuitBreakers, nil) + if err := cbc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if getCircuitBreakerCount(cbc) == total*2 { + t.Log("pass") + } else { + t.Fatalf("actual count is %d", getCircuitBreakerCount(cbc)) + } + }) + + t.Run("更新缓存后,删除部分数据,缓存正常更新", func(t *testing.T) { + _ = cbc.clear() + + serviceWithCircuitBreakers := genModelCircuitBreakers(0, total) + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(serviceWithCircuitBreakers, nil) + if err := cbc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + for i := 0; i < total; i += 2 { + serviceWithCircuitBreakers[i].Valid = false + } + + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(serviceWithCircuitBreakers, nil) + if err := cbc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if getCircuitBreakerCount(cbc) == total/2 { + t.Log("pass") + } else { + t.Fatalf("actual count is %d", getCircuitBreakerCount(cbc)) + } + }) +} + +/** + * @brief 根据服务id获取熔断规则数据 + */ +func TestGetCircuitBreakerByServiceID(t *testing.T) { + ctl, storage, cbc := newTestCircuitBreakerCache(t) + defer ctl.Finish() + + t.Run("通过服务ID获取数据", func(t *testing.T) { + _ = cbc.clear() + + total := 10 + serviceWithCircuitBreakers := genModelCircuitBreakers(0, total) + storage.EXPECT().GetCircuitBreakerForCache(cbc.lastTime.Add(DefaultTimeDiff), cbc.firstUpdate). + Return(serviceWithCircuitBreakers, nil) + if err := cbc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + cb := cbc.GetCircuitBreakerConfig(serviceWithCircuitBreakers[0].ServiceID) + expectCb := serviceWithCircuitBreakers[0].CircuitBreaker + if cb.CircuitBreaker.ID == expectCb.ID && cb.CircuitBreaker.Version == expectCb.Version { + t.Log("pass") + } else { + t.Fatalf("error circuit breaker is %+v", cb) + } + }) +} diff --git a/naming/cache/config.go b/naming/cache/config.go new file mode 100644 index 000000000..eee9a8483 --- /dev/null +++ b/naming/cache/config.go @@ -0,0 +1,45 @@ +/** + * Tencent is pleased to support the open source community by making CL5 available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +/** + * @brief 缓存配置 + */ +type Config struct { + Open bool `yaml:"open"` + Resources []ConfigEntry +} + +/* + * @brief 单个缓存资源配置 + */ +type ConfigEntry struct { + Name string `yaml:"name"` + Option map[string]interface{} `yaml:"option"` +} + +var ( + config *Config +) + +/** + * @brief 设置缓存配置 + */ +func SetCacheConfig(conf *Config) { + config = conf +} diff --git a/naming/cache/instance.go b/naming/cache/instance.go new file mode 100644 index 000000000..86431222d --- /dev/null +++ b/naming/cache/instance.go @@ -0,0 +1,312 @@ +/** + * Tencent is pleased to support the open source community by making CL5 available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" + "go.uber.org/zap" + "sync" + "time" +) + +const ( + InstanceName = "instance" +) + +type InstanceIterProc func(key string, value *model.Instance) (bool, error) + +/** + * @brief 实例相关的缓存接口 + */ +type InstanceCache interface { + Cache + GetInstance(instanceID string) *model.Instance + // 根据服务名获取实例,先查找服务名对应的服务ID,再找实例列表 + GetInstancesByServiceID(serviceID string) []*model.Instance + // 迭代 + IteratorInstances(iterProc InstanceIterProc) error + // 根据服务ID进行迭代 + IteratorInstancesWithService(serviceID string, iterProc InstanceIterProc) error + // 获取instance的个数 + GetInstancesCount() int +} + +/** + * @brief 实例缓存的类 + */ +type instanceCache struct { + storage store.Store + lastMtime time.Time + firstUpdate bool + ids *sync.Map // id -> instance + services *sync.Map // service id -> [instances] + revisionCh chan *revisionNotify + disableBusiness bool + needMeta bool + systemServiceID []string +} + +// 新建一个instanceCache +func newInstanceCache(storage store.Store, ch chan *revisionNotify) *instanceCache { + return &instanceCache{ + storage: storage, + revisionCh: ch, + } +} + +/** + * @brief 初始化函数 + */ +func (ic *instanceCache) initialize(opt map[string]interface{}) error { + ic.ids = new(sync.Map) + ic.services = new(sync.Map) + ic.lastMtime = time.Unix(0, 0) + ic.firstUpdate = true + if opt == nil { + return nil + } + ic.disableBusiness, _ = opt["disableBusiness"].(bool) + ic.needMeta, _ = opt["needMeta"].(bool) + // 只加载系统服务 + if ic.disableBusiness { + services, err := ic.getSystemServices() + if err != nil { + return err + } + ic.systemServiceID = make([]string, 0, len(services)) + for _, service := range services { + if service.IsAlias() { + continue + } + ic.systemServiceID = append(ic.systemServiceID, service.ID) + } + } + return nil +} + +/** + * @brief 更新缓存函数 + */ +func (ic *instanceCache) update() error { + // 拉取diff前的所有数据 + start := time.Now() + instances, err := ic.storage.GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), + ic.firstUpdate, ic.needMeta, ic.systemServiceID) + if err != nil { + log.Errorf("[Cache][Instance] update get storage more err: %s", err.Error()) + return err + } + + ic.firstUpdate = false + update, del := ic.setInstances(instances) + log.Info("[Cache][Instance] get more instances", zap.Int("update", update), zap.Int("delete", del), + zap.Time("last", ic.lastMtime), zap.Duration("used", time.Now().Sub(start))) + return nil +} + +/** + * @brief 清理内部缓存数据 + */ +func (ic *instanceCache) clear() error { + ic.ids = new(sync.Map) + ic.services = new(sync.Map) + ic.lastMtime = time.Unix(0, 0) + return nil +} + +/** + * @brief 获取资源名称 + */ +func (ic *instanceCache) name() string { + return InstanceName +} + +/** + * @brief 获取系统服务ID + */ +func (ic *instanceCache) getSystemServices() ([]*model.Service, error) { + services, err := ic.storage.GetSystemServices() + if err != nil { + log.Errorf("[Cache][Instance] get system services err: %s", err.Error()) + return nil, err + } + return services, nil +} + +// 保存instance到内存中 +// 返回:更新个数,删除个数 +func (ic *instanceCache) setInstances(ins map[string]*model.Instance) (int, int) { + if len(ins) == 0 { + return 0, 0 + } + + lastMtime := ic.lastMtime.Unix() + update := 0 + del := 0 + affect := make(map[string]bool) + progress := 0 + for _, item := range ins { + progress++ + if progress%50000 == 0 { + log.Infof("[Cache][Instance] set instances progress: %d / %d", progress, len(ins)) + } + modifyTime := item.ModifyTime.Unix() + if lastMtime < modifyTime { + lastMtime = modifyTime + } + affect[item.ServiceID] = true + + // 待删除的instance + if !item.Valid { + del++ + ic.ids.Delete(item.ID()) + value, ok := ic.services.Load(item.ServiceID) + if !ok { + continue + } + + value.(*sync.Map).Delete(item.ID()) + continue + } + + // 有修改或者新增的数据 + // 缓存的instance map增加一个version和protocol字段 + update++ + if item.Proto.Metadata == nil { + item.Proto.Metadata = make(map[string]string) + } + item.Proto.Metadata["version"] = item.Version() + item.Proto.Metadata["protocol"] = item.Protocol() + ic.ids.Store(item.ID(), item) + value, ok := ic.services.Load(item.ServiceID) + if !ok { + value = new(sync.Map) + ic.services.Store(item.ServiceID, value) + } + value.(*sync.Map).Store(item.ID(), item) + } + + if ic.lastMtime.Unix() < lastMtime { + ic.lastMtime = time.Unix(lastMtime, 0) + } + + progress = 0 + for serviceID := range affect { + ic.revisionCh <- newRevisionNotify(serviceID, true) + progress++ + if progress%10000 == 0 { + log.Infof("[Cache][Instance] revision notify progress(%d / %d)", progress, len(affect)) + } + } + + return update, del +} + +/** + * @brief 根据实例ID获取实例数据 + */ +func (ic *instanceCache) GetInstance(instanceID string) *model.Instance { + if instanceID == "" { + return nil + } + + value, ok := ic.ids.Load(instanceID) + if !ok { + return nil + } + + return value.(*model.Instance) +} + +/** + * @brief 根据ServiceID获取实例数据 + */ +func (ic *instanceCache) GetInstancesByServiceID(serviceID string) []*model.Instance { + if serviceID == "" { + return nil + } + + value, ok := ic.services.Load(serviceID) + if !ok { + return nil + } + + var out []*model.Instance + value.(*sync.Map).Range(func(k interface{}, v interface{}) bool { + out = append(out, v.(*model.Instance)) + return true + }) + + return out +} + +/** + * @brief 迭代所有的instance的函数 + */ +func (ic *instanceCache) IteratorInstances(iterProc InstanceIterProc) error { + return iteratorInstancesProc(ic.ids, iterProc) +} + +// 根据服务ID进行迭代回调 +func (ic *instanceCache) IteratorInstancesWithService(serviceID string, iterProc InstanceIterProc) error { + if serviceID == "" { + return nil + } + value, ok := ic.services.Load(serviceID) + if !ok { + return nil + } + + return iteratorInstancesProc(value.(*sync.Map), iterProc) +} + +// 获取实例的个数 +func (ic *instanceCache) GetInstancesCount() int { + count := 0 + ic.ids.Range(func(key, value interface{}) bool { + count++ + return true + }) + + return count +} + +// 迭代指定的instance数据,id->instance +func iteratorInstancesProc(data *sync.Map, iterProc InstanceIterProc) error { + var cont bool + var err error + proc := func(k, v interface{}) bool { + cont, err = iterProc(k.(string), v.(*model.Instance)) + if err != nil { + return false + } + return cont + } + + data.Range(proc) + return err +} + +/** + * @brief 自注册到缓存列表 + */ +func init() { + RegisterCache(InstanceName, CacheInstance) +} diff --git a/naming/cache/instance_test.go b/naming/cache/instance_test.go new file mode 100644 index 000000000..c53df4b2c --- /dev/null +++ b/naming/cache/instance_test.go @@ -0,0 +1,256 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "fmt" + v1 "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/store/mock" + "github.com/golang/mock/gomock" + "testing" + "time" +) + +// 创建一个测试mock instanceCache +func newTestInstanceCache(t *testing.T) (*gomock.Controller, *mock.MockStore, *instanceCache) { + ctl := gomock.NewController(t) + + storage := mock.NewMockStore(ctl) + ic := newInstanceCache(storage, make(chan *revisionNotify, 1024)) + opt := map[string]interface{}{ + "disableBusiness": false, + "needMeta": true, + } + _ = ic.initialize(opt) + + return ctl, storage, ic +} + +// 生成测试数据 +func genModelInstances(label string, total int) map[string]*model.Instance { + out := make(map[string]*model.Instance) + for i := 0; i < total; i++ { + entry := &model.Instance{ + Proto: &v1.Instance{ + Id: utils.NewStringValue(fmt.Sprintf("instanceID-%s-%d", label, i)), + Host: utils.NewStringValue(fmt.Sprintf("host-%s-%d", label, i)), + Port: utils.NewUInt32Value(uint32(i + 10)), + }, + ServiceID: fmt.Sprintf("serviceID-%s", label), + Valid: true, + } + + out[entry.Proto.Id.GetValue()] = entry + } + + return out +} + +// 对instanceCache的缓存数据进行计数统计 +func iteratorInstances(ic *instanceCache) (int, int) { + instancesCount := 0 + services := make(map[string]bool) + _ = ic.IteratorInstances(func(key string, value *model.Instance) (b bool, e error) { + instancesCount++ + if _, ok := services[value.ServiceID]; !ok { + services[value.ServiceID] = true + } + return true, nil + }) + + return len(services), instancesCount +} + +// 测试正常的更新缓存操作 +func TestInstanceCache_Update(t *testing.T) { + ctl, storage, ic := newTestInstanceCache(t) + defer ctl.Finish() + t.Run("正常更新缓存,缓存数据符合预期", func(t *testing.T) { + _ = ic.clear() + ret := make(map[string]*model.Instance) + instances1 := genModelInstances("service1", 10) // 每次gen为一个服务的 + instances2 := genModelInstances("service2", 5) + + for id, instance := range instances1 { + ret[id] = instance + } + for id, instance := range instances2 { + ret[id] = instance + } + + gomock.InOrder(storage.EXPECT(). + GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), ic.firstUpdate, ic.needMeta, ic.systemServiceID). + Return(ret, nil)) + if err := ic.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + servicesCount, instancesCount := iteratorInstances(ic) + if servicesCount == 2 && instancesCount == 10+5 { // gen两次,有两个不同服务 + t.Logf("pass") + } else { + t.Fatalf("error: %d, %d", servicesCount, instancesCount) + } + }) + + t.Run("数据为空,更新的内容为空", func(t *testing.T) { + _ = ic.clear() + gomock.InOrder(storage.EXPECT(). + GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), ic.firstUpdate, ic.needMeta, ic.systemServiceID). + Return(nil, nil)) + if err := ic.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + servicesCount, instancesCount := iteratorInstances(ic) + if servicesCount != 0 || instancesCount != 0 { + t.Fatalf("error: %d %d", servicesCount, instancesCount) + } + }) + + t.Run("lastMtime可以正常更新", func(t *testing.T) { + _ = ic.clear() + instances := genModelInstances("services", 10) + maxMtime := time.Unix(1000, 0) + instances[fmt.Sprintf("instanceID-%s-%d", "services", 5)].ModifyTime = maxMtime + + gomock.InOrder(storage.EXPECT(). + GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), ic.firstUpdate, ic.needMeta, ic.systemServiceID). + Return(instances, nil)) + if err := ic.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if ic.lastMtime.Unix() != maxMtime.Unix() { + t.Fatalf("error %d %d", ic.lastMtime.Unix(), maxMtime.Unix()) + } + }) +} + +// 异常场景下的update测试 +func TestInstanceCache_Update2(t *testing.T) { + ctl, storage, ic := newTestInstanceCache(t) + defer ctl.Finish() + t.Run("数据库返回失败,update会返回失败", func(t *testing.T) { + _ = ic.clear() + gomock.InOrder(storage.EXPECT(). + GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), ic.firstUpdate, ic.needMeta, ic.systemServiceID). + Return(nil, fmt.Errorf("storage get error"))) + if err := ic.update(); err != nil { + t.Logf("pass: %s", err.Error()) + } else { + t.Errorf("error") + } + }) + t.Run("更新数据,再删除部分数据,缓存正常", func(t *testing.T) { + _ = ic.clear() + instances := genModelInstances("service-a", 20) + gomock.InOrder(storage.EXPECT(). + GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), ic.firstUpdate, ic.needMeta, ic.systemServiceID). + Return(instances, nil)) + if err := ic.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + idx := 0 + for _, entry := range instances { + if idx%2 == 0 { + entry.Valid = false + } + idx++ + } + gomock.InOrder(storage.EXPECT(). + GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), ic.firstUpdate, ic.needMeta, ic.systemServiceID). + Return(instances, nil)) + if err := ic.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + servicesCount, instancesCount := iteratorInstances(ic) + if servicesCount != 1 || instancesCount != 10 { + t.Fatalf("error: %d %d", servicesCount, instancesCount) + } + }) +} + +// 根据实例ID获取缓存内容 +func TestInstanceCache_GetInstance(t *testing.T) { + ctl, storage, ic := newTestInstanceCache(t) + defer ctl.Finish() + t.Run("缓存有数据,可以正常获取到数据", func(t *testing.T) { + _ = ic.clear() + instances := genModelInstances("my-services", 10) + gomock.InOrder(storage.EXPECT(). + GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), ic.firstUpdate, ic.needMeta, ic.systemServiceID). + Return(instances, nil)) + if err := ic.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if instance := ic.GetInstance(instances[fmt.Sprintf("instanceID-%s-%d", "my-services", 6)].ID()); instance == nil { + t.Fatalf("error") + } + + if instance := ic.GetInstance("test-instance-xx"); instance != nil { + t.Fatalf("error") + } + }) +} + +// 根据ServiceID获取缓存内容 +func TestGetInstancesByServiceID(t *testing.T) { + ctl, storage, ic := newTestInstanceCache(t) + defer ctl.Finish() + t.Run("可以通过serviceID获取实例信息", func(t *testing.T) { + _ = ic.clear() + instances1 := genModelInstances("my-services", 50) + instances2 := genModelInstances("my-services-a", 30) + //instances2 = append(instances2, instances1...) + + ret := make(map[string]*model.Instance) + for id, instance := range instances1 { + ret[id] = instance + } + for id, instance := range instances2 { + ret[id] = instance + } + + gomock.InOrder(storage.EXPECT(). + GetMoreInstances(ic.lastMtime.Add(DefaultTimeDiff), ic.firstUpdate, ic.needMeta, ic.systemServiceID). + Return(ret, nil)) + if err := ic.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if instances := ic.GetInstancesByServiceID(instances2[fmt.Sprintf("instanceID-%s-%d", "my-services-a", 1)].ServiceID); instances != nil { + if len(instances) == 30 { + t.Logf("pass") + } else { + t.Fatalf("error") + } + } else { + t.Fatalf("error") + } + + if instances := ic.GetInstancesByServiceID("aa"); instances != nil { + t.Fatalf("error") + } + }) +} diff --git a/naming/cache/l5.go b/naming/cache/l5.go new file mode 100644 index 000000000..ec3cde7ce --- /dev/null +++ b/naming/cache/l5.go @@ -0,0 +1,434 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "container/list" + "github.com/polarismesh/polaris-server/common/utils" + "sync" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" +) + +const ( + L5Name = "l5" +) + +/** + * @brief L5的cache接口 + */ +type L5Cache interface { + Cache + + // 根据IP获取访问关系 + GetRouteByIP(ip uint32) []*model.Route + + // 检查IP对应的SID是否存在访问关系 + CheckRouteExisted(ip uint32, modID uint32, cmdID uint32) bool + + // 获取有状态路由信息policy + GetPolicy(modID uint32) *model.Policy + + // 获取有状态路由信息policy + GetSection(modeID uint32) []*model.Section + + // 获取IpConfig + GetIPConfig(ip uint32) *model.IPConfig +} + +/** + * @brief L5的cache对象 + */ +type l5Cache struct { + storage store.Store + + lastRouteFlow uint32 + lastPolicyFlow uint32 + lastSectionFlow uint32 + lastIPConfigFlow uint32 + + routeList *sync.Map // > + policyList *sync.Map // + sectionList *sync.Map // + ipConfigList *sync.Map // + + // instances的信息 + ic *instanceCache + sc *serviceCache +} + +/** + * @brief 初始化函数 + */ +func (lc *l5Cache) initialize(opt map[string]interface{}) error { + lc.lastRouteFlow = 0 + lc.lastPolicyFlow = 0 + lc.lastSectionFlow = 0 + lc.lastIPConfigFlow = 0 + lc.routeList = new(sync.Map) + lc.policyList = new(sync.Map) + lc.sectionList = new(sync.Map) + lc.ipConfigList = new(sync.Map) + if opt == nil { + return nil + } + return nil +} + +/** + * @brief 更新缓存 + */ +func (lc *l5Cache) update() error { + err := lc.updateCL5Route() + if err != nil { + log.Errorf("[Cache][CL5] update l5 route cache err: %s", err.Error()) + } + err = lc.updateCL5Policy() + if err != nil { + log.Errorf("[Cache][CL5] update l5 policy cache err: %s", err.Error()) + } + err = lc.updateCL5Section() + if err != nil { + log.Errorf("[Cache][CL5] update l5 section cache err: %s", err.Error()) + } + return err +} + +/** + * @brief 清理内部缓存数据 + */ +func (lc *l5Cache) clear() error { + lc.routeList = new(sync.Map) + lc.policyList = new(sync.Map) + lc.sectionList = new(sync.Map) + lc.ipConfigList = new(sync.Map) + lc.lastRouteFlow = 0 + lc.lastPolicyFlow = 0 + lc.lastSectionFlow = 0 + lc.lastIPConfigFlow = 0 + return nil +} + +/** + * @brief 获取资源名称 + */ +func (lc *l5Cache) name() string { + return L5Name +} + +// 根据Ip获取访问关系 +func (lc *l5Cache) GetRouteByIP(ip uint32) []*model.Route { + out := make([]*model.Route, 0) + value, ok := lc.routeList.Load(ip) + if !ok { + // 该ip不存在访问关系,则返回一个空数组 + return out + } + + entry := value.(*sync.Map) + entry.Range(func(key, value interface{}) bool { + // sidStr -> setID + sid, err := utils.UnmarshalSid(key.(string)) + if err != nil { + return true + } + + item := &model.Route{ + IP: ip, + ModID: sid.ModID, + CmdID: sid.CmdID, + SetID: value.(string), + } + out = append(out, item) + return true + }) + + return out +} + +// 检查访问关系是否存在 +func (lc *l5Cache) CheckRouteExisted(ip uint32, modID uint32, cmdID uint32) bool { + value, ok := lc.routeList.Load(ip) + if !ok { + return false + } + + entry := value.(*sync.Map) + found := false + entry.Range(func(key, value interface{}) bool { + sid, err := utils.UnmarshalSid(key.(string)) + if err != nil { + // continue range + return true + } + + if modID == sid.ModID && cmdID == sid.CmdID { + found = true + // break range + return false + } + return true + }) + + return found +} + +// 根据modID获取policy信息 +func (lc *l5Cache) GetPolicy(modID uint32) *model.Policy { + value, ok := lc.policyList.Load(modID) + if !ok { + return nil + } + + return value.(*model.Policy) +} + +// 根据modID获取section信息 +func (lc *l5Cache) GetSection(modeID uint32) []*model.Section { + value, ok := lc.sectionList.Load(modeID) + if !ok { + return nil + } + + obj := value.(*list.List) + out := make([]*model.Section, 0, obj.Len()) + for e := obj.Front(); e != nil; e = e.Next() { + out = append(out, e.Value.(*model.Section)) + } + + return out +} + +// 根据IP获取ipConfig +func (lc *l5Cache) GetIPConfig(ip uint32) *model.IPConfig { + value, ok := lc.ipConfigList.Load(ip) + if !ok { + return nil + } + + return value.(*model.IPConfig) +} + +/** + * @brief 更新l5的route缓存数据 + */ +func (lc *l5Cache) updateCL5Route() error { + routes, err := lc.storage.GetMoreL5Routes(lc.lastRouteFlow) + if err != nil { + log.Errorf("[Cache][CL5] get l5 route from storage err: %s", err.Error()) + return err + } + + return lc.setCL5Route(routes) +} + +/** + * @brief 更新l5的policy缓存数据 + */ +func (lc *l5Cache) updateCL5Policy() error { + policies, err := lc.storage.GetMoreL5Policies(lc.lastPolicyFlow) + if err != nil { + log.Errorf("[Cache][CL5] get l5 policy from storage err: %s", err.Error()) + return err + } + + return lc.setCL5Policy(policies) +} + +/** + * @brief 更新l5的section缓存数据 + */ +func (lc *l5Cache) updateCL5Section() error { + sections, err := lc.storage.GetMoreL5Sections(lc.lastSectionFlow) + if err != nil { + log.Errorf("[Cache][CL5] get l5 section from storage err: %s", err.Error()) + return err + } + + return lc.setCL5Section(sections) +} + +/** + * @brief 更新l5的ip config缓存数据 + */ +func (lc *l5Cache) updateCL5IPConfig() error { + ipConfigs, err := lc.storage.GetMoreL5IPConfigs(lc.lastIPConfigFlow) + if err != nil { + log.Errorf("[Cache][CL5] get l5 ip config from storage err: %s", err.Error()) + return err + } + + return lc.setCL5IPConfig(ipConfigs) +} + +/** + * @brief 更新l5 route的本地缓存 + */ +func (lc *l5Cache) setCL5Route(routes []*model.Route) error { + if len(routes) == 0 { + return nil + } + + lastRouteFlow := lc.lastRouteFlow + for _, item := range routes { + if item.Flow > lastRouteFlow { + lastRouteFlow = item.Flow + } + + sidStr := utils.MarshalModCmd(item.ModID, item.CmdID) + + // 待删除的route + if !item.Valid { + value, ok := lc.routeList.Load(item.IP) + if !ok { + continue + } + + value.(*sync.Map).Delete(sidStr) + continue + } + + value, ok := lc.routeList.Load(item.IP) + if !ok { + value = new(sync.Map) + lc.routeList.Store(item.IP, value) + } + value.(*sync.Map).Store(sidStr, item.SetID) + } + + if lc.lastRouteFlow < lastRouteFlow { + lc.lastRouteFlow = lastRouteFlow + } + + return nil +} + +/** + * @brief 更新l5 policy的本地缓存 + */ +func (lc *l5Cache) setCL5Policy(policies []*model.Policy) error { + if len(policies) == 0 { + return nil + } + + lastPolicyFlow := lc.lastPolicyFlow + for _, item := range policies { + if item.Flow > lastPolicyFlow { + lastPolicyFlow = item.Flow + } + + // 待删除的policy + if !item.Valid { + lc.policyList.Delete(item.ModID) + continue + } + + lc.policyList.Store(item.ModID, item) + } + + if lc.lastPolicyFlow < lastPolicyFlow { + lc.lastPolicyFlow = lastPolicyFlow + } + + return nil +} + +/** + * @brief 更新l5 section的本地缓存 + */ +func (lc *l5Cache) setCL5Section(sections []*model.Section) error { + if len(sections) == 0 { + return nil + } + + lastSectionFlow := lc.lastSectionFlow + for _, item := range sections { + if item.Flow > lastSectionFlow { + lastSectionFlow = item.Flow + } + + // 无论数据是否要删除,都执行删除老数据操作 + var listObj *list.List + if value, ok := lc.sectionList.Load(item.ModID); ok { + listObj = value.(*list.List) + } else { + listObj = list.New() + } + + for ele := listObj.Front(); ele != nil; ele = ele.Next() { + entry := ele.Value.(*model.Section) + if entry.From == item.From && entry.To == item.To { + listObj.Remove(ele) + break + } + } + // 上面已经删除了,这里直接继续迭代 + if !item.Valid { + continue + } + + // 存储有效的数据 + listObj.PushBack(item) + lc.sectionList.Store(item.ModID, listObj) + } + + if lc.lastSectionFlow < lastSectionFlow { + lc.lastSectionFlow = lastSectionFlow + } + + return nil +} + +/** + * @brief 更新l5 ipConfig的本地缓存 + */ +func (lc *l5Cache) setCL5IPConfig(ipConfigs []*model.IPConfig) error { + if len(ipConfigs) == 0 { + return nil + } + + lastIPConfigFlow := lc.lastIPConfigFlow + for _, item := range ipConfigs { + if item.Flow > lastIPConfigFlow { + lastIPConfigFlow = item.Flow + } + + // 待删除的ip config + if !item.Valid { + lc.ipConfigList.Delete(item.IP) + continue + } + + lc.ipConfigList.Store(item.IP, item) + } + + if lc.lastIPConfigFlow < lastIPConfigFlow { + lc.lastIPConfigFlow = lastIPConfigFlow + } + + return nil +} + +/** + * @brief 自注册到缓存列表 + */ +func init() { + RegisterCache(L5Name, CacheCL5) +} diff --git a/naming/cache/ratelimit_config.go b/naming/cache/ratelimit_config.go new file mode 100644 index 000000000..559e76e6b --- /dev/null +++ b/naming/cache/ratelimit_config.go @@ -0,0 +1,261 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "sync" + "time" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" +) + +const ( + RateLimitConfigName = "rateLimitConfig" +) + +type RateLimitIterProc func(id string, rateLimit *model.RateLimit) (bool, error) + +/** + * @brief rateLimit的cache接口 + */ +type RateLimitCache interface { + Cache + + //根据serviceID进行迭代回调 + GetRateLimit(serviceID string, rateLimitIterProc RateLimitIterProc) error + + // 根据serviceID获取最新revision + GetLastRevision(serviceID string) string + + // 根据serviceID获取限流数据 + GetRateLimitByServiceID(serviceID string) []*model.RateLimit + + // 获取revision总数 + GetRevisionsCount() int + + // 获取限流规则总数 + GetRateLimitsCount() int +} + +/** + * @brief rateLimitCache的实现 + */ +type rateLimitCache struct { + storage store.Store + ids *sync.Map + revisions *sync.Map + lastTime time.Time + firstUpdate bool +} + +/** + * @brief 返回一个操作RateLimitCache的对象 + */ +func newRateLimitCache(s store.Store) *rateLimitCache { + return &rateLimitCache{ + storage: s, + } +} + +/** + * @brief 实现Cache接口的initialize函数 + */ +func (rlc *rateLimitCache) initialize(opt map[string]interface{}) error { + rlc.ids = new(sync.Map) + rlc.revisions = new(sync.Map) + rlc.lastTime = time.Unix(0, 0) + rlc.firstUpdate = true + if opt == nil { + return nil + } + return nil +} + +/** + * @brief 实现Cache接口的update函数 + */ +func (rlc *rateLimitCache) update() error { + rateLimits, revisions, err := rlc.storage.GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), + rlc.firstUpdate) + if err != nil { + log.Errorf("[Cache] rate limit cache update err: %s", err.Error()) + return err + } + rlc.firstUpdate = false + return rlc.setRateLimit(rateLimits, revisions) +} + +/** + * @brief 获取资源名称 + */ +func (rlc *rateLimitCache) name() string { + return RateLimitConfigName +} + +/** + * @brief 实现Cache接口的clear函数 + */ +func (rlc *rateLimitCache) clear() error { + rlc.ids = new(sync.Map) + rlc.revisions = new(sync.Map) + rlc.lastTime = time.Unix(0, 0) + return nil +} + +/** + * @brief 更新限流规则到缓存中 + */ +func (rlc *rateLimitCache) setRateLimit(rateLimits []*model.RateLimit, + revisions []*model.RateLimitRevision) error { + if len(rateLimits) == 0 { + return nil + } + + lastMtime := rlc.lastTime.Unix() + for _, item := range rateLimits { + if item.ModifyTime.Unix() > lastMtime { + lastMtime = item.ModifyTime.Unix() + } + + // 待删除的rateLimit + if item.Valid == false { + value, ok := rlc.ids.Load(item.ServiceID) + if !ok { + continue + } + value.(*sync.Map).Delete(item.ID) + continue + } + + value, ok := rlc.ids.Load(item.ServiceID) + if !ok { + value = new(sync.Map) + rlc.ids.Store(item.ServiceID, value) + } + value.(*sync.Map).Store(item.ID, item) + } + + // 更新last revision + for _, item := range revisions { + rlc.revisions.Store(item.ServiceID, item.LastRevision) + } + + if rlc.lastTime.Unix() < lastMtime { + rlc.lastTime = time.Unix(lastMtime, 0) + } + return nil +} + +/** + * @brief 根据serviceID进行迭代回调 + */ +func (rlc *rateLimitCache) GetRateLimit(serviceID string, rateLimitIterProc RateLimitIterProc) error { + if serviceID == "" { + return nil + } + value, ok := rlc.ids.Load(serviceID) + if !ok { + return nil + } + + var result bool + var err error + f := func(k, v interface{}) bool { + result, err = rateLimitIterProc(k.(string), v.(*model.RateLimit)) + if err != nil { + return false + } + return result + } + + value.(*sync.Map).Range(f) + return err +} + +/** + * @brief 根据serviceID获取最新revision + */ +func (rlc *rateLimitCache) GetLastRevision(serviceID string) string { + if serviceID == "" { + return "" + } + value, ok := rlc.revisions.Load(serviceID) + if !ok { + return "" + } + return value.(string) +} + +/** + * @brief 根据serviceID获取限流数据 + */ +func (rlc *rateLimitCache) GetRateLimitByServiceID(serviceID string) []*model.RateLimit { + if serviceID == "" { + return nil + } + value, ok := rlc.ids.Load(serviceID) + if !ok { + return nil + } + + var out []*model.RateLimit + value.(*sync.Map).Range(func(k interface{}, v interface{}) bool { + out = append(out, v.(*model.RateLimit)) + return true + }) + + return out +} + +/** + * @brief 获取revisions总数 + */ +func (rlc *rateLimitCache) GetRevisionsCount() int { + count := 0 + rlc.revisions.Range(func(k interface{}, v interface{}) bool { + count++ + return true + }) + return count +} + +/** + * @brief 获取限流规则总数 + */ +func (rlc *rateLimitCache) GetRateLimitsCount() int { + count := 0 + + rlc.ids.Range(func(k interface{}, v interface{}) bool { + rateLimits := v.(*sync.Map) + rateLimits.Range(func(k interface{}, v interface{}) bool { + count++ + return true + }) + return true + }) + return count +} + +/** + * @brief 自注册到缓存列表 + */ +func init() { + RegisterCache(RateLimitConfigName, CacheRateLimit) +} diff --git a/naming/cache/ratelimit_config_test.go b/naming/cache/ratelimit_config_test.go new file mode 100644 index 000000000..62eb12abb --- /dev/null +++ b/naming/cache/ratelimit_config_test.go @@ -0,0 +1,285 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "fmt" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store/mock" + "github.com/golang/mock/gomock" + "testing" + "time" +) + +/** + * @brief 创建一个测试mock rateLimitCache + */ +func newTestRateLimitCache(t *testing.T) (*gomock.Controller, *mock.MockStore, *rateLimitCache) { + ctl := gomock.NewController(t) + + storage := mock.NewMockStore(ctl) + rlc := newRateLimitCache(storage) + var opt map[string]interface{} + _ = rlc.initialize(opt) + return ctl, storage, rlc +} + +/** + * @brief 生成限流规则测试数据 + */ +func genModelRateLimits(beginNum, totalServices, totalRateLimits int) ([]*model.RateLimit, []*model.RateLimitRevision) { + rateLimits := make([]*model.RateLimit, 0, totalRateLimits) + revisions := make([]*model.RateLimitRevision, 0, totalServices) + rulePerService := totalRateLimits / totalServices + + for i := beginNum; i < totalServices+beginNum; i++ { + revision := &model.RateLimitRevision{ + ServiceID: fmt.Sprintf("service-%d", i), + LastRevision: fmt.Sprintf("last-revision-%d", i), + } + revisions = append(revisions, revision) + for j := 0; j < rulePerService; j++ { + rateLimit := &model.RateLimit{ + ID: fmt.Sprintf("id-%d-%d", i, j), + ServiceID: fmt.Sprintf("service-%d", i), + ClusterID: fmt.Sprintf("cluster-%d", j), + Rule: fmt.Sprintf("rule-%d-%d", i, j), + Revision: fmt.Sprintf("revision-%d-%d", i, j), + Valid: true, + } + rateLimits = append(rateLimits, rateLimit) + } + } + return rateLimits, revisions +} + +/** + * @brief 统计缓存中的限流数据 + */ +func getRateLimitsCount(serviceID string, rlc *rateLimitCache) int { + rateLimitsCount := 0 + rateLimitIterProc := func(key string, value *model.RateLimit) (bool, error) { + rateLimitsCount++ + return true, nil + } + _ = rlc.GetRateLimit(serviceID, rateLimitIterProc) + return rateLimitsCount +} + +/** + * @brief 测试更新缓存操作 + */ +func TestRateLimitUpdate(t *testing.T) { + ctl, storage, rlc := newTestRateLimitCache(t) + defer ctl.Finish() + + totalServices := 5 + totalRateLimits := 15 + rateLimits, revisions := genModelRateLimits(0, totalServices, totalRateLimits) + + t.Run("正常更新缓存,可以获取到数据", func(t *testing.T) { + _ = rlc.clear() + + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(rateLimits, revisions, nil) + if err := rlc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + // 检查数目是否一致 + for i := 0; i < totalServices; i++ { + count := getRateLimitsCount(fmt.Sprintf("service-%d", i), rlc) + if count == totalRateLimits/totalServices { + t.Log("pass") + } else { + t.Fatalf("actual count is %d", count) + } + } + + count := rlc.GetRateLimitsCount() + if count == totalRateLimits { + t.Log("pass") + } else { + t.Fatalf("actual count is %d", count) + } + + count = rlc.GetRevisionsCount() + if count == totalServices { + t.Log("pass") + } else { + t.Fatalf("actual count is %d", count) + } + }) + + t.Run("缓存数据为空", func(t *testing.T) { + _ = rlc.clear() + + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(nil, nil, nil) + if err := rlc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if rlc.GetRateLimitsCount() == 0 && rlc.GetRevisionsCount() == 0 { + t.Log("pass") + } else { + t.Fatalf("actual rate limits count is %d, revisions count is %d", + rlc.GetRateLimitsCount(), rlc.GetRevisionsCount()) + } + }) + + t.Run("lastMtime正确更新", func(t *testing.T) { + _ = rlc.clear() + + currentTime := time.Unix(100, 0) + rateLimits[0].ModifyTime = currentTime + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(rateLimits, revisions, nil) + if err := rlc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if rlc.lastTime.Unix() == currentTime.Unix() { + t.Log("pass") + } else { + t.Fatalf("last mtime error") + } + }) + + t.Run("数据库返回错误,update错误", func(t *testing.T) { + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(nil, nil, fmt.Errorf("stoarge error")) + if err := rlc.update(); err != nil { + t.Log("pass") + } else { + t.Fatalf("error") + } + }) +} + +/** + * @brief 统计缓存中的限流数据 + */ +func TestRateLimitUpdate2(t *testing.T) { + ctl, storage, rlc := newTestRateLimitCache(t) + defer ctl.Finish() + + totalServices := 5 + totalRateLimits := 15 + + t.Run("更新缓存后,增加部分数据,缓存正常更新", func(t *testing.T) { + _ = rlc.clear() + + rateLimits, revisions := genModelRateLimits(0, totalServices, totalRateLimits) + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(rateLimits, revisions, nil) + if err := rlc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + rateLimits, revisions = genModelRateLimits(5, totalServices, totalRateLimits) + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(rateLimits, revisions, nil) + if err := rlc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if rlc.GetRateLimitsCount() == totalRateLimits*2 && rlc.GetRevisionsCount() == totalServices*2 { + t.Log("pass") + } else { + t.Fatalf("actual rate limits count is %d, revisions count is %d", rlc.GetRateLimitsCount(), rlc.GetRevisionsCount()) + } + }) + + t.Run("更新缓存后,删除部分数据,缓存正常更新", func(t *testing.T) { + _ = rlc.clear() + + rateLimits, revisions := genModelRateLimits(0, totalServices, totalRateLimits) + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(rateLimits, revisions, nil) + if err := rlc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + for i := 0; i < totalRateLimits; i += 2 { + rateLimits[i].Valid = false + } + + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(rateLimits, revisions, nil) + if err := rlc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if rlc.GetRateLimitsCount() == totalRateLimits/2 && rlc.GetRevisionsCount() == totalServices { + t.Log("pass") + } else { + t.Fatalf("actual rate limits count is %d, revisions count is %d", + rlc.GetRateLimitsCount(), rlc.GetRevisionsCount()) + } + }) +} + +/** + * @brief 根据服务id获取限流数据和revision + */ +func TestGetRateLimitsByServiceID(t *testing.T) { + ctl, storage, rlc := newTestRateLimitCache(t) + defer ctl.Finish() + + t.Run("通过服务ID获取数据和revision", func(t *testing.T) { + _ = rlc.clear() + + totalServices := 5 + totalRateLimits := 15 + rateLimits, revisions := genModelRateLimits(0, totalServices, totalRateLimits) + + storage.EXPECT().GetRateLimitsForCache(rlc.lastTime.Add(DefaultTimeDiff), rlc.firstUpdate). + Return(rateLimits, revisions, nil) + if err := rlc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + rateLimits = rlc.GetRateLimitByServiceID("service-1") + if len(rateLimits) == totalRateLimits/totalServices { + t.Log("pass") + } else { + t.Fatalf("expect num is %d, actual num is %d", totalRateLimits/totalServices, len(rateLimits)) + } + lastRevision := rlc.GetLastRevision("service-1") + if lastRevision == "last-revision-1" { + t.Log("pass") + } else { + t.Fatalf("actual last revision is %s", lastRevision) + } + + rateLimits = rlc.GetRateLimitByServiceID("service-11") + if len(rateLimits) == 0 { + t.Log("pass") + } else { + t.Fatalf("expect num is 0, actual num is %d", len(rateLimits)) + } + + lastRevision = rlc.GetLastRevision("service-11") + if lastRevision == "" { + t.Log("pass") + } else { + t.Fatalf("actual last revision is %s", lastRevision) + } + }) +} diff --git a/naming/cache/routing_config.go b/naming/cache/routing_config.go new file mode 100644 index 000000000..4195452f2 --- /dev/null +++ b/naming/cache/routing_config.go @@ -0,0 +1,150 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" + "sync" + "time" +) + +const ( + RoutingConfigName = "routingConfig" +) + +// routing配置的cache接口 +type RoutingConfigCache interface { + Cache + + // 根据ServiceID获取路由配置 + GetRoutingConfig(id string) *model.RoutingConfig + + // 获取路由配置缓存的总个数 + GetRoutingConfigCount() int +} + +// routingCache的实现 +type routingConfigCache struct { + storage store.Store + ids *sync.Map + lastMtime time.Time + firstUpdate bool +} + +// 返回一个操作RoutingConfigCache的对象 +func newRoutingConfigCache(s store.Store) *routingConfigCache { + return &routingConfigCache{ + storage: s, + } +} + +// 实现Cache接口的函数 +func (rc *routingConfigCache) initialize(opt map[string]interface{}) error { + rc.ids = new(sync.Map) + rc.lastMtime = time.Unix(0, 0) + rc.firstUpdate = true + if opt == nil { + return nil + } + return nil +} + +// 实现Cache接口的函数 +func (rc *routingConfigCache) update() error { + out, err := rc.storage.GetRoutingConfigsForCache(rc.lastMtime.Add(DefaultTimeDiff), rc.firstUpdate) + if err != nil { + log.Errorf("[Cache] routing config cache update err: %s", err.Error()) + return err + } + + rc.firstUpdate = false + return rc.setRoutingConfig(out) +} + +// 实现Cache接口的函数 +func (rc *routingConfigCache) clear() error { + return nil +} + +// 实现Cache接口的函数 +func (rc *routingConfigCache) name() string { + return RoutingConfigName +} + +// 根据ServiceID获取路由配置 +func (rc *routingConfigCache) GetRoutingConfig(id string) *model.RoutingConfig { + if id == "" { + } + + value, ok := rc.ids.Load(id) + if !ok { + return nil + } + + return value.(*model.RoutingConfig) +} + +// 获取路由配置缓存的总个数 +func (rc *routingConfigCache) GetRoutingConfigCount() int { + count := 0 + rc.ids.Range(func(key, value interface{}) bool { + count++ + return true + }) + + return count +} + +// 内部函数:更新store的数据到cache中 +func (rc *routingConfigCache) setRoutingConfig(cs []*model.RoutingConfig) error { + if len(cs) == 0 { + return nil + } + + lastMtime := rc.lastMtime.Unix() + for _, entry := range cs { + if entry.ID == "" { + continue + } + + if entry.ModifyTime.Unix() > lastMtime { + lastMtime = entry.ModifyTime.Unix() + } + + if entry.Valid == false { + rc.ids.Delete(entry.ID) + continue + } + + rc.ids.Store(entry.ID, entry) + } + + if rc.lastMtime.Unix() < lastMtime { + rc.lastMtime = time.Unix(lastMtime, 0) + } + return nil +} + +/** + * @brief 自注册到缓存列表 + */ +func init() { + RegisterCache(RoutingConfigName, CacheRoutingConfig) +} diff --git a/naming/cache/service.go b/naming/cache/service.go new file mode 100644 index 000000000..202f9ee85 --- /dev/null +++ b/naming/cache/service.go @@ -0,0 +1,328 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" + "go.uber.org/zap" + "sync" + "time" +) + +const ( + ServiceName = "service" +) + +/** + * @brief 迭代回调函数 + */ +type ServiceIterProc func(key string, value *model.Service) (bool, error) + +/** + * @brief 服务数据缓存接口 + */ +type ServiceCache interface { + Cache + + // 根据ID查询服务信息 + GetServiceByID(id string) *model.Service + + // 根据服务名查询服务信息 + GetServiceByName(name string, namespace string) *model.Service + + // 迭代缓存的服务信息 + IteratorServices(iterProc ServiceIterProc) error + + // 获取缓存中服务的个数 + GetServicesCount() int + + // 根据cl5Name获取对应的sid + GetServiceByCl5Name(cl5Name string) *model.Service +} + +/** + * @brief 服务数据缓存实现类 + */ +type serviceCache struct { + storage store.Store + lastMtime time.Time + firstUpdate bool + ids *sync.Map + names *sync.Map + cl5Sid2Name *sync.Map // 兼容Cl5,sid -> name + cl5Names *sync.Map // 兼容Cl5,name -> service + revisionCh chan *revisionNotify + disableBusiness bool + needMeta bool +} + +/** + * @brief 返回一个serviceCache + */ +func newServiceCache(storage store.Store, ch chan *revisionNotify) *serviceCache { + return &serviceCache{ + storage: storage, + revisionCh: ch, + } +} + +/** + * @brief 缓存对象初始化 + */ +func (sc *serviceCache) initialize(opt map[string]interface{}) error { + sc.lastMtime = time.Unix(0, 0) + sc.ids = new(sync.Map) + sc.names = new(sync.Map) + sc.cl5Sid2Name = new(sync.Map) + sc.cl5Names = new(sync.Map) + sc.firstUpdate = true + if opt == nil { + return nil + } + sc.disableBusiness, _ = opt["disableBusiness"].(bool) + sc.needMeta, _ = opt["needMeta"].(bool) + return nil +} + +/** + * @brief Service缓存更新函数 + * + * @note service + service_metadata作为一个整体获取 + */ +func (sc *serviceCache) update() error { + // 获取几秒前的全部数据 + start := time.Now() + services, err := sc.storage.GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), + sc.firstUpdate, sc.disableBusiness, sc.needMeta) + if err != nil { + log.Errorf("[Cache][Service] update services err: %s", err.Error()) + return err + } + + sc.firstUpdate = false + update, del := sc.setServices(services) + log.Info("[Cache][Service] get more services", zap.Int("update", update), zap.Int("delete", del), + zap.Time("last", sc.lastMtime), zap.Duration("used", time.Now().Sub(start))) + return nil +} + +/** + * @brief 清理内部缓存数据 + */ +func (sc *serviceCache) clear() error { + sc.ids = new(sync.Map) + sc.names = new(sync.Map) + sc.cl5Sid2Name = new(sync.Map) + sc.cl5Names = new(sync.Map) + sc.lastMtime = time.Unix(0, 0) + return nil +} + +/** + * @brief 获取资源名称 + */ +func (sc *serviceCache) name() string { + return ServiceName +} + +/** + * @brief 根据服务ID获取服务数据 + */ +func (sc *serviceCache) GetServiceByID(id string) *model.Service { + if id == "" { + return nil + } + + value, ok := sc.ids.Load(id) + if !ok { + return nil + } + + return value.(*model.Service) +} + +/** + * @brief 根据服务名获取服务数据 + */ +func (sc *serviceCache) GetServiceByName(name string, namespace string) *model.Service { + if name == "" || namespace == "" { + return nil + } + + spaces, ok := sc.names.Load(namespace) + if !ok { + return nil + } + value, ok := spaces.(*sync.Map).Load(name) + if !ok { + return nil + } + + return value.(*model.Service) +} + +/** + * @brief 对缓存中的服务进行迭代 + */ +func (sc *serviceCache) IteratorServices(iterProc ServiceIterProc) error { + var cont bool + var err error + proc := func(k interface{}, v interface{}) bool { + cont, err = iterProc(k.(string), v.(*model.Service)) + if err != nil { + return false + } + return cont + } + sc.ids.Range(proc) + return err +} + +// 获取缓存中服务的个数 +func (sc *serviceCache) GetServicesCount() int { + count := 0 + sc.ids.Range(func(key, value interface{}) bool { + count++ + return true + }) + + return count +} + +// 根据cl5Name获取对应的sid +func (sc *serviceCache) GetServiceByCl5Name(cl5Name string) *model.Service { + value, ok := sc.cl5Names.Load(genCl5Name(cl5Name)) + if !ok { + return nil + } + + return value.(*model.Service) +} + +// 从缓存中删除service数据 +func (sc *serviceCache) removeServices(service *model.Service) { + // 删除serviceID的索引 + sc.ids.Delete(service.ID) + + // 删除serviceName的索引 + spaceName := service.Namespace + if spaces, ok := sc.names.Load(spaceName); ok { + spaces.(*sync.Map).Delete(service.Name) + } + + /******兼容cl5******/ + if cl5Name, ok := sc.cl5Sid2Name.Load(service.Name); ok { + sc.cl5Sid2Name.Delete(service.Name) + sc.cl5Names.Delete(cl5Name) + } + /******兼容cl5******/ +} + +// 服务缓存更新 +// 返回:更新数量,删除数量 +func (sc *serviceCache) setServices(services map[string]*model.Service) (int, int) { + if len(services) == 0 { + return 0, 0 + } + + progress := 0 + update := 0 + del := 0 + lastMtime := sc.lastMtime.Unix() + for _, service := range services { + progress++ + if progress%20000 == 0 { + log.Infof("[Cache][Service] update service item progress(%d / %d)", progress, len(services)) + } + serviceMtime := service.ModifyTime.Unix() + if lastMtime < serviceMtime { + lastMtime = serviceMtime + } + spaceName := service.Namespace + // 发现有删除操作 + if !service.Valid { + sc.removeServices(service) + sc.revisionCh <- newRevisionNotify(service.ID, false) + del++ + continue + } + + update++ + sc.ids.Store(service.ID, service) + sc.revisionCh <- newRevisionNotify(service.ID, true) + + spaces, ok := sc.names.Load(spaceName) + if !ok { + spaces = new(sync.Map) + sc.names.Store(spaceName, spaces) + } + spaces.(*sync.Map).Store(service.Name, service) + + /******兼容cl5******/ + sc.updateCl5SidAndNames(service) + /******兼容cl5******/ + } + + if sc.lastMtime.Unix() < lastMtime { + sc.lastMtime = time.Unix(lastMtime, 0) + } + + return update, del +} + +// 更新cl5的服务数据 +func (sc *serviceCache) updateCl5SidAndNames(service *model.Service) { + // 不是cl5服务的,不需要更新 + if _, ok := service.Meta["internal-cl5-sid"]; !ok { + return + } + + // service更新 + // service中不存在cl5Name,可以认为是该sid删除了cl5Name,删除缓存 + // service中存在cl5Name,则更新缓存 + cl5NameMeta, ok := service.Meta["internal-cl5-name"] + sid := service.Name + if !ok { + if oldCl5Name, exist := sc.cl5Sid2Name.Load(sid); exist { + sc.cl5Sid2Name.Delete(sid) + sc.cl5Names.Delete(oldCl5Name) + } + return + } + + // 更新的service,有cl5Name + cl5Name := genCl5Name(cl5NameMeta) + sc.cl5Sid2Name.Store(sid, cl5Name) + sc.cl5Names.Store(cl5Name, service) + return +} + +// 兼容cl5Name +// 部分cl5Name与已有服务名存在冲突,因此给cl5Name加上一个前缀 +func genCl5Name(name string) string { + return "cl5." + name +} + +/** + * @brief 自注册到缓存列表 + */ +func init() { + RegisterCache(ServiceName, CacheService) +} diff --git a/naming/cache/service_test.go b/naming/cache/service_test.go new file mode 100644 index 000000000..82340bd63 --- /dev/null +++ b/naming/cache/service_test.go @@ -0,0 +1,256 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 cache + +import ( + "fmt" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store/mock" + "github.com/golang/mock/gomock" + "testing" + "time" +) + +// 生成一个测试的serviceCache和对应的mock对象 +func newTestServiceCache(t *testing.T) (*gomock.Controller, *mock.MockStore, *serviceCache) { + ctl := gomock.NewController(t) + + storage := mock.NewMockStore(ctl) + sc := newServiceCache(storage, make(chan *revisionNotify, 1024)) + opt := map[string]interface{}{ + "disableBusiness": false, + "needMeta": true, + } + _ = sc.initialize(opt) + + return ctl, storage, sc +} + +// 获取当前缓存中的services总数 +func getServiceCacheCount(sc *serviceCache) int { + sum := 0 + _ = sc.IteratorServices(func(key string, value *model.Service) (bool, error) { + sum++ + return true, nil + }) + return sum +} + +// 生成一些测试的services +func genModelService(total int) map[string]*model.Service { + out := make(map[string]*model.Service) + for i := 0; i < total; i++ { + item := &model.Service{ + ID: fmt.Sprintf("ID-%d", i), + Namespace: fmt.Sprintf("Namespace-%d", i), + Name: fmt.Sprintf("Name-%d", i), + Valid: true, + ModifyTime: time.Unix(int64(i), 0), + } + out[item.ID] = item + } + + return out +} + +// 测试缓存更新函数 +func TestServiceUpdate(t *testing.T) { + ctl, storage, sc := newTestServiceCache(t) + defer ctl.Finish() + + t.Run("所有数据为空,可以正常获取数据", func(t *testing.T) { + gomock.InOrder( + storage.EXPECT(). + GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta). + Return(nil, nil), + ) + + if err := sc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if sum := getServiceCacheCount(sc); sum != 0 { + t.Fatalf("error: %d", sum) + } + }) + t.Run("有数据更新,数据正常", func(t *testing.T) { + _ = sc.clear() + services := genModelService(100) + gomock.InOrder( + storage.EXPECT().GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta). + Return(services, nil), + ) + + if err := sc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + if sum := getServiceCacheCount(sc); sum != 100 { + t.Fatalf("error: %d", sum) + } + }) + t.Run("有数据更新,重复更新,数据更新正常", func(t *testing.T) { + _ = sc.clear() + services1 := genModelService(100) + services2 := genModelService(300) + gomock.InOrder( + storage.EXPECT().GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta). + Return(services1, nil), + ) + + if err := sc.update(); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + gomock.InOrder( + storage.EXPECT().GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta). + Return(services2, nil), + ) + _ = sc.update() + if sum := getServiceCacheCount(sc); sum != 300 { + t.Fatalf("error: %d", sum) + } + }) +} + +// 测试缓存更新函数1 +func TestServiceUpdate1(t *testing.T) { + ctl, storage, sc := newTestServiceCache(t) + defer ctl.Finish() + + t.Run("服务全部被删除,会被清除掉", func(t *testing.T) { + _ = sc.clear() + services := genModelService(100) + gomock.InOrder(storage.EXPECT(). + GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta).Return(services, nil)) + _ = sc.update() + + // 把所有的都置为false + for _, service := range services { + service.Valid = false + } + + gomock.InOrder(storage.EXPECT(). + GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta).Return(services, nil)) + _ = sc.update() + + if sum := getServiceCacheCount(sc); sum != 0 { + t.Fatalf("error: %d", sum) + } + }) + + t.Run("服务部分被删除,缓存内容正常", func(t *testing.T) { + _ = sc.clear() + services := genModelService(100) + gomock.InOrder(storage.EXPECT(). + GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta).Return(services, nil)) + _ = sc.update() + + // 把所有的都置为false + idx := 0 + for _, service := range services { + if idx%2 == 0 { + service.Valid = false + } + idx++ + } + + gomock.InOrder(storage.EXPECT(). + GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta).Return(services, nil)) + _ = sc.update() + + if sum := getServiceCacheCount(sc); sum != 50 { // remain half + t.Fatalf("error: %d", sum) + } + }) +} + +// 测试缓存更新 +func TestServiceUpdate2(t *testing.T) { + ctl, storage, sc := newTestServiceCache(t) + defer ctl.Finish() + + t.Run("store返回失败,update会返回失败", func(t *testing.T) { + _ = sc.clear() + gomock.InOrder( + storage.EXPECT().GetMoreServices(sc.lastMtime.Add(DefaultTimeDiff), sc.firstUpdate, sc.disableBusiness, sc.needMeta). + Return(nil, fmt.Errorf("store error")), + ) + + if err := sc.update(); err != nil { + t.Logf("pass: %s", err.Error()) + } else { + t.Fatalf("error") + } + }) +} + +// 根据服务名获取服务缓存信息 +func TestGetServiceByName(t *testing.T) { + ctl, _, sc := newTestServiceCache(t) + defer ctl.Finish() + t.Run("可以根据服务名和命名空间,正常获取缓存服务信息", func(t *testing.T) { + _ = sc.clear() + services := genModelService(20) + sc.setServices(services) + + for _, entry := range services { + service := sc.GetServiceByName(entry.Name, entry.Namespace) + if service == nil { + t.Fatalf("error") + } + } + }) + t.Run("服务不存在,返回为空", func(t *testing.T) { + _ = sc.clear() + services := genModelService(20) + sc.setServices(services) + if service := sc.GetServiceByName("aaa", "bbb"); service != nil { + t.Fatalf("error") + } + }) +} + +// 根据服务ID获取服务缓存信息 +func TestServiceCache_GetServiceByID(t *testing.T) { + ctl, _, sc := newTestServiceCache(t) + defer ctl.Finish() + + t.Run("可以根据服务ID,正常获取缓存的服务信息", func(t *testing.T) { + _ = sc.clear() + services := genModelService(30) + sc.setServices(services) + + for _, entry := range services { + service := sc.GetServiceByID(entry.ID) + if service == nil { + t.Fatalf("error") + } + } + }) + + t.Run("缓存内容为空,根据ID获取数据,会返回为空", func(t *testing.T) { + _ = sc.clear() + services := genModelService(30) + sc.setServices(services) + + if service := sc.GetServiceByID("123456789"); service != nil { + t.Fatalf("error") + } + }) +} diff --git a/naming/cache/type1rule.yaml b/naming/cache/type1rule.yaml new file mode 100644 index 000000000..513800b78 --- /dev/null +++ b/naming/cache/type1rule.yaml @@ -0,0 +1,26 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: reviews-route +spec: + hosts: + - reviews.prod.svc.cluster.local + http: + - name: "reviews-v2-routes" + match: + - uri: + prefix: "/wpcatalog" + - uri: + prefix: "/consumercatalog" + rewrite: + uri: "/newcatalog" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v2 + - name: "reviews-v1-route" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v1 + diff --git a/naming/cache/type2rule.yaml b/naming/cache/type2rule.yaml new file mode 100644 index 000000000..2612aee28 --- /dev/null +++ b/naming/cache/type2rule.yaml @@ -0,0 +1,51 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: Gateway +metadata: + name: my-gateway + namespace: some-config-namespace +spec: + selector: + app: my-gateway-controller + servers: + - port: + number: 80 + name: http + protocol: HTTP + hosts: + - uk.bookinfo.com + - eu.bookinfo.com + tls: + httpsRedirect: true + - port: + number: 443 + name: https-443 + protocol: HTTPS + hosts: + - uk.bookinfo.com + - eu.bookinfo.com + tls: + mode: SIMPLE + serverCertificate: /etc/certs/servercert.pem + privateKey: /etc/certs/privatekey.pem + - port: + number: 9443 + name: https-9443 + protocol: HTTPS + hosts: + - "bookinfo-namespace/*.bookinfo.com" + tls: + mode: SIMPLE + credentialName: bookinfo-secret + - port: + number: 9080 + name: http-wildcard + protocol: HTTP + hosts: + - "*" + - port: + number: 2379 + name: mongo + protocol: MONGO + hosts: + - "*" + diff --git a/naming/circuitbreaker_config.go b/naming/circuitbreaker_config.go new file mode 100644 index 000000000..ef1dcd201 --- /dev/null +++ b/naming/circuitbreaker_config.go @@ -0,0 +1,1268 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "encoding/json" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "go.uber.org/zap" +) + +const ( + Master = "master" + Service = "service" + Namespace = "namespace" + ID = "id" + Version = "version" +) + +var ( + MasterCircuitBreakers = map[string]bool{ + "id": true, + "namespace": true, + "name": true, + "owner": true, + "business": true, + "department": true, + "offset": true, + "limit": true, + } + + ReleaseCircuitBreakers = map[string]bool{ + "id": true, // 必填参数 + "version": true, + "offset": true, + "limit": true, + } + + ServiceParams = map[string]bool{ + Service: true, + Namespace: true, + } +) + +/** + * @brief 批量创建熔断规则 + */ +func (s *Server) CreateCircuitBreakers(ctx context.Context, req []*api.CircuitBreaker) *api.BatchWriteResponse { + if checkErr := checkBatchCircuitBreakers(req); checkErr != nil { + return checkErr + } + + resps := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, circuitBreaker := range req { + resp := s.CreateCircuitBreaker(ctx, circuitBreaker) + resps.Collect(resp) + } + return api.FormatBatchWriteResponse(resps) +} + +/** + * @brief 创建单个熔断规则 + */ +func (s *Server) CreateCircuitBreaker(ctx context.Context, req *api.CircuitBreaker) *api.Response { + requestID := ParseRequestID(ctx) + + // 参数校验并生成规则id + id, resp := checkCreateCircuitBreaker(req) + if resp != nil { + return resp + } + + // 生成version + version := Master + + // 检查熔断规则是否存在 + circuitBreaker, err := s.storage.GetCircuitBreaker(id, version) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewCircuitBreakerResponse(api.StoreLayerException, req) + } + if circuitBreaker != nil { + req.Id = utils.NewStringValue(id) + return api.NewCircuitBreakerResponse(api.ExistedResource, req) + } + + // 构造底层数据结构 + token := NewUUID() + + data, err := api2CircuitBreaker(req, id, token, version) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewCircuitBreakerResponse(api.ParseCircuitBreakerException, req) + } + + // 执行存储层操作 + if err := s.storage.CreateCircuitBreaker(data); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return wrapperCircuitBreakerStoreResponse(req, err) + } + + msg := fmt.Sprintf("create circuit breaker: id=%v, version=%v, name=%v, namespace=%v", + data.ID, data.Version, data.Name, data.Namespace) + log.Info(msg, ZapRequestID(requestID)) + + // todo 记录操作记录 + + // 返回请求结果 + req.Id = utils.NewStringValue(data.ID) + req.Token = utils.NewStringValue(data.Token) + req.Version = utils.NewStringValue(Master) + + return api.NewCircuitBreakerResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量创建熔断规则版本 + */ +func (s *Server) CreateCircuitBreakerVersions(ctx context.Context, req []*api.CircuitBreaker) *api.BatchWriteResponse { + if checkErr := checkBatchCircuitBreakers(req); checkErr != nil { + return checkErr + } + + resps := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, circuitBreaker := range req { + resp := s.CreateCircuitBreakerVersion(ctx, circuitBreaker) + resps.Collect(resp) + } + return api.FormatBatchWriteResponse(resps) +} + +/** + * @brief 创建单个熔断规则版本 + */ +func (s *Server) CreateCircuitBreakerVersion(ctx context.Context, req *api.CircuitBreaker) *api.Response { + requestID := ParseRequestID(ctx) + + // 参数检查 + id, resp := checkReviseCircuitBreaker(ctx, req) + if resp != nil { + return resp + } + + // 判断version是否为master + if req.GetVersion().GetValue() == Master { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerVersion, req) + } + + // 判断规则的master版本是否存在并鉴权 + circuitBreaker, resp := s.checkCircuitBreakerValid(ctx, req, id, Master) + if resp != nil { + if resp.GetCode().GetValue() == api.NotFoundCircuitBreaker { + return api.NewCircuitBreakerResponse(api.NotFoundMasterConfig, req) + } + return resp + } + + // 判断此版本是否存在 + tagCircuitBreaker, err := s.storage.GetCircuitBreaker(id, req.GetVersion().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewCircuitBreakerResponse(api.StoreLayerException, req) + } + if tagCircuitBreaker != nil { + return api.NewCircuitBreakerResponse(api.ExistedResource, req) + } + + // 构造底层数据结构 + newReq := &api.CircuitBreaker{ + Id: utils.NewStringValue(circuitBreaker.ID), + Version: req.GetVersion(), + Name: utils.NewStringValue(circuitBreaker.Name), + Namespace: utils.NewStringValue(circuitBreaker.Namespace), + Inbounds: req.GetInbounds(), + Outbounds: req.GetOutbounds(), + Token: req.GetToken(), + Owners: utils.NewStringValue(circuitBreaker.Owner), + Comment: utils.NewStringValue(circuitBreaker.Comment), + Business: utils.NewStringValue(circuitBreaker.Business), + Department: utils.NewStringValue(circuitBreaker.Department), + } + + data, err := api2CircuitBreaker(newReq, circuitBreaker.ID, circuitBreaker.Token, req.GetVersion().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewCircuitBreakerResponse(api.ParseCircuitBreakerException, req) + } + + // 执行存储层操作 + if err := s.storage.TagCircuitBreaker(data); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return wrapperCircuitBreakerStoreResponse(req, err) + } + + msg := fmt.Sprintf("tag circuit breaker: id=%v, version=%v, name=%v, namespace=%v", + data.ID, data.Version, data.Name, data.Namespace) + log.Info(msg, ZapRequestID(requestID)) + + // todo 记录操作记录 + + return api.NewCircuitBreakerResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量删除熔断规则 + */ +func (s *Server) DeleteCircuitBreakers(ctx context.Context, req []*api.CircuitBreaker) *api.BatchWriteResponse { + if checkErr := checkBatchCircuitBreakers(req); checkErr != nil { + return checkErr + } + + resps := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, circuitBreaker := range req { + resp := s.DeleteCircuitBreaker(ctx, circuitBreaker) + resps.Collect(resp) + } + return api.FormatBatchWriteResponse(resps) +} + +/** + * @brief 删除单个熔断规则 + */ +func (s *Server) DeleteCircuitBreaker(ctx context.Context, req *api.CircuitBreaker) *api.Response { + requestID := ParseRequestID(ctx) + + // 参数校验 + id, resp := checkReviseCircuitBreaker(ctx, req) + if resp != nil { + return resp + } + + // 检查熔断规则是否存在并鉴权 + if _, resp := s.checkCircuitBreakerValid(ctx, req, id, req.GetVersion().GetValue()); resp != nil { + if resp.GetCode().GetValue() == api.NotFoundCircuitBreaker { + return api.NewCircuitBreakerResponse(api.ExecuteSuccess, req) + } + return resp + } + + if req.GetVersion().GetValue() == Master { + return s.deleteMasterCircuitBreaker(requestID, id, req) + } + + return s.deleteTagCircuitBreaker(requestID, id, req) +} + +/** + * @brief 删除master熔断规则 + */ +func (s *Server) deleteMasterCircuitBreaker(requestID string, id string, req *api.CircuitBreaker) *api.Response { + // 检查规则是否有绑定服务 + relations, err := s.storage.GetCircuitBreakerMasterRelation(id) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewCircuitBreakerResponse(api.StoreLayerException, req) + } + if len(relations) > 0 { + log.Errorf("the number of services bound to the circuit breaker(id=%s, version=%s) is %d", + id, req.GetVersion().GetValue(), len(relations)) + return api.NewCircuitBreakerResponse(api.ExistReleasedConfig, req) + } + + // 执行存储层操作 + if err := s.storage.DeleteMasterCircuitBreaker(id); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return wrapperCircuitBreakerStoreResponse(req, err) + } + + msg := fmt.Sprintf("delete master circuit breaker: id=%v", id) + log.Info(msg, ZapRequestID(requestID)) + + // todo 操作记录 + + return api.NewCircuitBreakerResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 删除熔断规则版本 + */ +func (s *Server) deleteTagCircuitBreaker(requestID string, id string, req *api.CircuitBreaker) *api.Response { + // 检查规则是否有绑定服务 + relation, err := s.storage.GetCircuitBreakerRelation(id, req.GetVersion().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewCircuitBreakerResponse(api.StoreLayerException, req) + } + if len(relation) > 0 { + log.Errorf("the number of services bound to the circuit breaker(id=%s, version=%s) is %d", + id, req.GetVersion().GetValue(), len(relation)) + return api.NewCircuitBreakerResponse(api.ExistReleasedConfig, req) + } + + // 执行存储层操作 + if err := s.storage.DeleteTagCircuitBreaker(id, req.GetVersion().GetValue()); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return wrapperCircuitBreakerStoreResponse(req, err) + } + + msg := fmt.Sprintf("delete circuit breaker version: id=%v, version=%v", id, req.GetVersion().GetValue()) + log.Info(msg, ZapRequestID(requestID)) + + // todo 操作记录 + + return api.NewCircuitBreakerResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量修改熔断规则 + */ +func (s *Server) UpdateCircuitBreakers(ctx context.Context, req []*api.CircuitBreaker) *api.BatchWriteResponse { + if checkErr := checkBatchCircuitBreakers(req); checkErr != nil { + return checkErr + } + + resps := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, circuitBreaker := range req { + resp := s.UpdateCircuitBreaker(ctx, circuitBreaker) + resps.Collect(resp) + } + return api.FormatBatchWriteResponse(resps) +} + +/** + * @brief 修改单个熔断规则 + */ +func (s *Server) UpdateCircuitBreaker(ctx context.Context, req *api.CircuitBreaker) *api.Response { + requestID := ParseRequestID(ctx) + + // 基础参数校验 + id, resp := checkReviseCircuitBreaker(ctx, req) + if resp != nil { + return resp + } + // 只允许修改master规则 + if req.GetVersion().GetValue() != Master { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerVersion, req) + } + + // 检查熔断规则是否存在并鉴权 + circuitBreaker, resp := s.checkCircuitBreakerValid(ctx, req, id, req.GetVersion().GetValue()) + if resp != nil { + return resp + } + + // 修改 + err, needUpdate := s.updateCircuitBreakerAttribute(req, circuitBreaker) + if err != nil { + return err + } + // 判断是否需要更新 + if !needUpdate { + log.Info("update circuit breaker data no change, no need update", + ZapRequestID(requestID), zap.String("circuit breaker", req.String())) + return api.NewCircuitBreakerResponse(api.NoNeedUpdate, req) + } + + // 执行存储层操作 + if err := s.storage.UpdateCircuitBreaker(circuitBreaker); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return wrapperCircuitBreakerStoreResponse(req, err) + } + + msg := fmt.Sprintf("update circuit breaker: id=%v, version=%v, name=%v, namespace=%v", + circuitBreaker.ID, circuitBreaker.Version, circuitBreaker.Name, circuitBreaker.Namespace) + log.Info(msg, ZapRequestID(requestID)) + + // todo 记录操作记录 + + return api.NewCircuitBreakerResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 修改规则属性 + */ +func (s *Server) updateCircuitBreakerAttribute(req *api.CircuitBreaker, circuitBreaker *model.CircuitBreaker) ( + *api.Response, bool) { + needUpdate := false + if req.GetOwners() != nil { + if req.GetOwners().GetValue() == "" { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerOwners, req), needUpdate + } + if req.GetOwners().GetValue() != circuitBreaker.Owner { + circuitBreaker.Owner = req.GetOwners().GetValue() + needUpdate = true + } + } + + if req.GetBusiness() != nil && req.GetBusiness().GetValue() != circuitBreaker.Business { + circuitBreaker.Business = req.GetBusiness().GetValue() + needUpdate = true + } + + if req.GetDepartment() != nil && req.GetDepartment().GetValue() != circuitBreaker.Department { + circuitBreaker.Department = req.GetDepartment().GetValue() + needUpdate = true + } + + if req.GetComment() != nil && req.GetComment().GetValue() != circuitBreaker.Comment { + circuitBreaker.Comment = req.GetComment().GetValue() + needUpdate = true + } + + inbounds, outbounds, err := marshalCircuitBreakerRule(req.GetInbounds(), req.GetOutbounds()) + if err != nil { + return api.NewCircuitBreakerResponse(api.ParseCircuitBreakerException, req), needUpdate + } + + if req.GetInbounds() != nil && inbounds != circuitBreaker.Inbounds { + circuitBreaker.Inbounds = inbounds + needUpdate = true + } + + if req.GetOutbounds() != nil && outbounds != circuitBreaker.Outbounds { + circuitBreaker.Outbounds = outbounds + needUpdate = true + } + + if needUpdate { + circuitBreaker.Revision = NewUUID() + } + + return nil, needUpdate +} + +/** + * @brief 批量发布熔断规则 + */ +func (s *Server) ReleaseCircuitBreakers(ctx context.Context, req []*api.ConfigRelease) *api.BatchWriteResponse { + if checkErr := checkBatchConfigRelease(req); checkErr != nil { + return checkErr + } + + resps := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, configRelease := range req { + resp := s.ReleaseCircuitBreaker(ctx, configRelease) + resps.Collect(resp) + } + return api.FormatBatchWriteResponse(resps) +} + +/** + * @brief 发布单个熔断规则 + */ +func (s *Server) ReleaseCircuitBreaker(ctx context.Context, req *api.ConfigRelease) *api.Response { + requestID := ParseRequestID(ctx) + + // 参数校验 + ruleID, resp := checkReleaseCircuitBreaker(req) + if resp != nil { + return resp + } + + //检查规则所属命名空间和服务所属命名空间是否一致 + if req.GetService().GetNamespace().GetValue() != req.GetCircuitBreaker().GetNamespace().GetValue() { + return api.NewConfigResponse(api.NotAllowDifferentNamespaceBindRule, req) + } + + // 检查服务是否可用并鉴权 + service, resp := s.checkService(ctx, req) + if resp != nil { + return resp + } + + // 检查此版本规则是否存在 + ruleVersion := req.GetCircuitBreaker().GetVersion().GetValue() + tagCircuitBreaker, err := s.storage.GetCircuitBreaker(ruleID, ruleVersion) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewConfigResponse(api.StoreLayerException, req) + } + if tagCircuitBreaker == nil { + return api.NewConfigResponse(api.NotFoundTagConfig, req) + } + + // 检查服务绑定的熔断规则是否存在以及是否为此规则 + serviceName := req.GetService().GetName().GetValue() + namespaceName := req.GetService().GetNamespace().GetValue() + rule, err := s.storage.GetCircuitBreakersByService(serviceName, namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewConfigResponse(api.StoreLayerException, req) + } + if rule != nil && rule.ID == ruleID && rule.Version == ruleVersion { + return api.NewConfigResponse(api.ExistedResource, req) + } + + // 构造底层数据结构 + data := api2CircuitBreakerRelation(service.ID, ruleID, ruleVersion) + + // 执行存储层操作 + if err := s.storage.ReleaseCircuitBreaker(data); err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return wrapperConfigStoreResponse(req, err) + } + + msg := fmt.Sprintf("release circuit breaker: ruleID=%s, ruleVersion=%s, namespace=%s, service=%s", + ruleID, ruleVersion, service.Namespace, service.Name) + log.Info(msg, zap.String("request-id", requestID)) + + // todo 操作记录 + + return api.NewConfigResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量解绑熔断规则 + */ +func (s *Server) UnBindCircuitBreakers(ctx context.Context, req []*api.ConfigRelease) *api.BatchWriteResponse { + if checkErr := checkBatchConfigRelease(req); checkErr != nil { + return checkErr + } + resps := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, configRelease := range req { + resp := s.UnBindCircuitBreaker(ctx, configRelease) + resps.Collect(resp) + } + return api.FormatBatchWriteResponse(resps) +} + +/** + * @brief 解绑单个熔断规则 + */ +func (s *Server) UnBindCircuitBreaker(ctx context.Context, req *api.ConfigRelease) *api.Response { + requestID := ParseRequestID(ctx) + + // 参数校验 + ruleID, resp := checkReleaseCircuitBreaker(req) + if resp != nil { + return resp + } + + // 检查服务是否可用并鉴权 + service, resp := s.checkService(ctx, req) + if resp != nil { + return resp + } + + // 检查此版本的规则是否存在 + ruleVersion := req.GetCircuitBreaker().GetVersion().GetValue() + tagCircuitBreaker, err := s.storage.GetCircuitBreaker(ruleID, ruleVersion) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewConfigResponse(api.StoreLayerException, req) + } + if tagCircuitBreaker == nil { + return api.NewConfigResponse(api.NotFoundTagConfig, req) + } + + // 检查服务绑定的熔断规则是否存在以及是否为此规则 + serviceName := req.GetService().GetName().GetValue() + namespaceName := req.GetService().GetNamespace().GetValue() + rule, err := s.storage.GetCircuitBreakersByService(serviceName, namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewConfigResponse(api.StoreLayerException, req) + } + if rule == nil || rule.ID != ruleID || rule.Version != ruleVersion { + return api.NewConfigResponse(api.ExecuteSuccess, req) + } + + // 执行存储层操作 + if err := s.storage.UnbindCircuitBreaker(service.ID, ruleID, ruleVersion); err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return wrapperConfigStoreResponse(req, err) + } + + msg := fmt.Sprintf("unbind circuit breaker: ruleID=%s, ruleVersion=%s, namespace=%s, service=%s", + ruleID, ruleVersion, service.Namespace, service.Name) + log.Info(msg, zap.String("request-id", requestID)) + + // todo 操作记录 + + return api.NewConfigResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 根据id和version查询熔断规则 + */ +func (s *Server) GetCircuitBreaker(query map[string]string) *api.BatchQueryResponse { + // 必填参数:id和version + if _, ok := query[ID]; !ok { + log.Errorf("params %s is not in querying circuit breaker", ID) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + if _, ok := query[Version]; !ok { + log.Errorf("params %s is not in querying circuit breaker", Version) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + circuitBreaker, err := s.storage.GetCircuitBreaker(query[ID], query[Version]) + if err != nil { + log.Errorf("get circuit breaker err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + breaker, err := circuitBreaker2API(circuitBreaker) + if err != nil { + log.Errorf("get circuit breaker err: %s", err.Error()) + return api.NewBatchQueryResponse(api.ParseCircuitBreakerException) + } + + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + + if breaker == nil { + resp.Amount = utils.NewUInt32Value(0) + resp.Size = utils.NewUInt32Value(0) + resp.ConfigWithServices = []*api.ConfigWithService{} + return resp + } + + configWithService := &api.ConfigWithService{ + CircuitBreaker: breaker, + } + + resp.Amount = utils.NewUInt32Value(1) + resp.Size = utils.NewUInt32Value(1) + resp.ConfigWithServices = make([]*api.ConfigWithService, 0, 1) + resp.ConfigWithServices = append(resp.ConfigWithServices, configWithService) + return resp +} + +/** + * @brief 根据id查询熔断规则所有版本 + */ +func (s *Server) GetCircuitBreakerVersions(query map[string]string) *api.BatchQueryResponse { + // 必填参数:id + if _, ok := query[ID]; !ok { + log.Errorf("params %s is not in querying circuit breaker", ID) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + versions, err := s.storage.GetCircuitBreakerVersions(query[ID]) + if err != nil { + log.Errorf("get circuit breaker versions err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + nums := len(versions) + + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + resp.Amount = utils.NewUInt32Value(uint32(nums)) + resp.Size = utils.NewUInt32Value(uint32(nums)) + resp.ConfigWithServices = make([]*api.ConfigWithService, 0, nums) + for _, version := range versions { + config := ruleIDAndVersion2API(query[ID], version) + resp.ConfigWithServices = append(resp.ConfigWithServices, config) + } + return resp +} + +/** + * @brief 查询master熔断规则 + */ +func (s *Server) GetMasterCircuitBreakers(query map[string]string) *api.BatchQueryResponse { + for key := range query { + if _, ok := MasterCircuitBreakers[key]; !ok { + log.Errorf("params %s is not allowed in querying master circuit breakers", key) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + } + + // 处理offset和limit + offset, limit, err := ParseOffsetAndLimit(query) + if err != nil { + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + c, err := s.storage.ListMasterCircuitBreakers(query, offset, limit) + if err != nil { + log.Errorf("get master circuit breakers err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + return genCircuitBreakersResult(c) +} + +/** + * @brief 根据规则id查询已发布规则 + */ +func (s *Server) GetReleaseCircuitBreakers(query map[string]string) *api.BatchQueryResponse { + // 必须参数:id + if _, ok := query[ID]; !ok { + log.Errorf("params %s is not in querying release circuit breakers", ID) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + for key := range query { + if _, ok := ReleaseCircuitBreakers[key]; !ok { + log.Errorf("params %s is not allowed in querying release circuit breakers", key) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + } + + //id转化为rule_id + if ruleID, ok := query[ID]; ok { + query["rule_id"] = ruleID + delete(query, ID) + } + + if ruleVersion, ok := query[Version]; ok { + query["rule_version"] = ruleVersion + delete(query, Version) + } + + // 处理offset和limit + offset, limit, err := ParseOffsetAndLimit(query) + if err != nil { + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + c, err := s.storage.ListReleaseCircuitBreakers(query, offset, limit) + if err != nil { + log.Errorf("get release circuit breakers err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + return genCircuitBreakersResult(c) +} + +/** + * @brief 生成返回查询熔断规则的数据 + */ +func genCircuitBreakersResult(c *model.CircuitBreakerDetail) *api.BatchQueryResponse { + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + resp.Amount = utils.NewUInt32Value(c.Total) + resp.Size = utils.NewUInt32Value(uint32(len(c.CircuitBreakerInfos))) + resp.ConfigWithServices = make([]*api.ConfigWithService, 0, len(c.CircuitBreakerInfos)) + for _, item := range c.CircuitBreakerInfos { + info, err := circuitBreaker2ConsoleAPI(item) + if err != nil { + log.Errorf("get circuit breakers err: %s", err.Error()) + return api.NewBatchQueryResponse(api.ParseCircuitBreakerException) + } + resp.ConfigWithServices = append(resp.ConfigWithServices, info) + } + return resp +} + +/** + * @brief 根据服务查询绑定熔断规则 + */ +func (s *Server) GetCircuitBreakerByService(query map[string]string) *api.BatchQueryResponse { + // 必须参数:service和namespace + for key := range ServiceParams { + if _, ok := query[key]; !ok { + log.Errorf("params %s is not in querying circuit breakers by service", key) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + } + + circuitBreaker, err := s.storage.GetCircuitBreakersByService(query[Service], query[Namespace]) + if err != nil { + log.Errorf("get circuit breaker by service err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + breaker, err := circuitBreaker2API(circuitBreaker) + if err != nil { + log.Errorf("get circuit breaker by service err: %s", err.Error()) + return api.NewBatchQueryResponse(api.ParseCircuitBreakerException) + } + + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + + if breaker == nil { + resp.Amount = utils.NewUInt32Value(0) + resp.Size = utils.NewUInt32Value(0) + resp.ConfigWithServices = []*api.ConfigWithService{} + return resp + } + + configWithService := &api.ConfigWithService{ + CircuitBreaker: breaker, + } + + resp.Amount = utils.NewUInt32Value(1) + resp.Size = utils.NewUInt32Value(1) + resp.ConfigWithServices = make([]*api.ConfigWithService, 0, 1) + resp.ConfigWithServices = append(resp.ConfigWithServices, configWithService) + + return resp +} + +/** +* @brief 查询熔断规则的token + */ +func (s *Server) GetCircuitBreakerToken(ctx context.Context, req *api.CircuitBreaker) *api.Response { + id, resp := checkReviseCircuitBreaker(ctx, req) + if resp != nil { + return resp + } + + circuitBreaker, resp := s.checkCircuitBreakerValid(ctx, req, id, Master) + if resp != nil { + return resp + } + + out := api.NewResponse(api.ExecuteSuccess) + out.CircuitBreaker = &api.CircuitBreaker{ + Id: utils.NewStringValue(id), + Name: utils.NewStringValue(circuitBreaker.Name), + Namespace: utils.NewStringValue(circuitBreaker.Namespace), + Token: utils.NewStringValue(circuitBreaker.Token), + } + return out +} + +/* + * @brief 检查熔断规则批量请求 + */ +func checkBatchCircuitBreakers(req []*api.CircuitBreaker) *api.BatchWriteResponse { + if len(req) == 0 { + return api.NewBatchWriteResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchWriteResponse(api.BatchSizeOverLimit) + } + + return nil +} + +/** + * @brief 检查规则发布批量请求 + */ +func checkBatchConfigRelease(req []*api.ConfigRelease) *api.BatchWriteResponse { + if len(req) == 0 { + return api.NewBatchWriteResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchWriteResponse(api.BatchSizeOverLimit) + } + + return nil +} + +/** + * @brief 检查创建熔断规则参数 + */ +func checkCreateCircuitBreaker(req *api.CircuitBreaker) (string, *api.Response) { + if req == nil { + return "", api.NewCircuitBreakerResponse(api.EmptyRequest, req) + } + // 检查负责人 + if err := checkResourceOwners(req.GetOwners()); err != nil { + return "", api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerOwners, req) + } + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbCircuitbreakerFieldLen(req) + if notOk { + return "", err + } + return checkRuleTwoTuple(req) +} + +/** + * @brief 检查修改/删除/创建版本参数 + */ +func checkReviseCircuitBreaker(ctx context.Context, req *api.CircuitBreaker) (string, *api.Response) { + if req == nil { + return "", api.NewCircuitBreakerResponse(api.EmptyRequest, req) + } + // 检查规则version + if err := checkResourceName(req.GetVersion()); err != nil { + return "", api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerVersion, req) + } + // 检查规则token + if token := parseCircuitBreakerToken(ctx, req); token == "" { + return "", api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerToken, req) + } + // 检查规则id + if req.GetId() != nil { + if req.GetId().GetValue() == "" { + return "", api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerID, req) + } + return req.GetId().GetValue(), nil + } + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbCircuitbreakerFieldLen(req) + if notOk { + return "", err + } + return checkRuleTwoTuple(req) +} + +/** + * @brief 检查发布、解绑熔断规则参数 + */ +func checkReleaseCircuitBreaker(req *api.ConfigRelease) (string, *api.Response) { + if req == nil { + return "", api.NewConfigResponse(api.EmptyRequest, req) + } + // 检查命名空间 + if err := checkResourceName(req.GetService().GetNamespace()); err != nil { + return "", api.NewConfigResponse(api.InvalidNamespaceName, req) + } + if err := CheckDbStrFieldLen(req.GetService().GetNamespace(), MaxDbServiceNamespaceLength); err != nil { + return "", api.NewConfigResponse(api.InvalidNamespaceName, req) + } + // 检查服务名 + if err := checkResourceName(req.GetService().GetName()); err != nil { + return "", api.NewConfigResponse(api.InvalidServiceName, req) + } + if err := CheckDbStrFieldLen(req.GetService().GetName(), MaxDbServiceNameLength); err != nil { + return "", api.NewConfigResponse(api.InvalidServiceName, req) + } + if err := CheckDbStrFieldLen(req.GetService().GetToken(), MaxDbServiceToken); err != nil { + return "", api.NewConfigResponse(api.InvalidServiceToken, req) + } + // 检查规则version + if err := checkResourceName(req.GetCircuitBreaker().GetVersion()); err != nil { + return "", api.NewConfigResponse(api.InvalidCircuitBreakerVersion, req) + } + if err := CheckDbStrFieldLen(req.GetCircuitBreaker().GetVersion(), MaxDbCircuitbreakerVersion); err != nil { + return "", api.NewConfigResponse(api.InvalidCircuitBreakerVersion, req) + } + // 判断version是否为master + if req.GetCircuitBreaker().GetVersion().GetValue() == Master { + return "", api.NewConfigResponse(api.InvalidCircuitBreakerVersion, req) + } + // 规则name和规则namespace必填 + return checkRuleTwoTuple(req.GetCircuitBreaker()) +} + +/** + * @brief 根据规则name和规则namespace计算ID + */ +func checkRuleTwoTuple(req *api.CircuitBreaker) (string, *api.Response) { + // 检查规则name + if err := checkResourceName(req.GetName()); err != nil { + return "", api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerName, req) + } + if err := CheckDbStrFieldLen(req.GetName(), MaxDbCircuitbreakerName); err != nil { + return "", api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerName, req) + } + // 检查规则namespace + if err := checkResourceName(req.GetNamespace()); err != nil { + return "", api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerNamespace, req) + } + if err := CheckDbStrFieldLen(req.GetNamespace(), MaxDbCircuitbreakerNamespace); err != nil { + return "", api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerNamespace, req) + } + return CalculateRuleID(req.GetName().GetValue(), req.GetNamespace().GetValue()), nil +} + +/** + * @brief 修改/删除/发布熔断规则的公共检查 + */ +func (s *Server) checkCircuitBreakerValid(ctx context.Context, req *api.CircuitBreaker, id, version string) ( + *model.CircuitBreaker, *api.Response) { + requestID := ParseRequestID(ctx) + + // 检查熔断规则是否存在 + circuitBreaker, err := s.storage.GetCircuitBreaker(id, version) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return nil, api.NewCircuitBreakerResponse(api.StoreLayerException, req) + } + if circuitBreaker == nil { + return nil, api.NewCircuitBreakerResponse(api.NotFoundCircuitBreaker, req) + } + + // 鉴权 + if ok := s.authority.VerifyRule(circuitBreaker.Token, parseCircuitBreakerToken(ctx, req)); !ok { + return nil, api.NewCircuitBreakerResponse(api.Unauthorized, req) + } + return circuitBreaker, nil +} + +/** + * @brief 判断服务是否可用并鉴权 + */ +func (s *Server) checkService(ctx context.Context, req *api.ConfigRelease) (*model.Service, *api.Response) { + requestID := ParseRequestID(ctx) + serviceName := req.GetService().GetName().GetValue() + namespaceName := req.GetService().GetNamespace().GetValue() + + service, err := s.storage.GetService(serviceName, namespaceName) + if err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return nil, api.NewConfigResponse(api.StoreLayerException, req) + } + if service == nil { + return nil, api.NewConfigResponse(api.NotFoundService, req) + } + if service.IsAlias() { + return nil, api.NewConfigResponse(api.NotAllowAliasBindRule, req) + } + + // 使用平台id以及token鉴权 + if ok := s.verifyAuthByPlatform(ctx, service.PlatformID); !ok { + // 检查token是否存在 + serviceToken := parseRequestToken(ctx, req.GetService().GetToken().GetValue()) + if !s.authority.VerifyToken(serviceToken) { + return nil, api.NewConfigResponse(api.InvalidServiceToken, req) + } + + // 检查token是否ok + if ok := s.authority.VerifyService(service.Token, serviceToken); !ok { + return nil, api.NewConfigResponse(api.Unauthorized, req) + } + } + + return service, nil +} + +/** + * @brief 获取熔断规则的token信息 + */ +func parseCircuitBreakerToken(ctx context.Context, req *api.CircuitBreaker) string { + if token := req.GetToken().GetValue(); token != "" { + return token + } + + return ParseToken(ctx) +} + +/** + * @brief 创建存储层熔断规则模型 + */ +func api2CircuitBreaker(req *api.CircuitBreaker, id, token, version string) (*model.CircuitBreaker, error) { + inbounds, outbounds, err := marshalCircuitBreakerRule(req.GetInbounds(), req.GetOutbounds()) + if err != nil { + return nil, err + } + + circuitBreaker := &model.CircuitBreaker{ + ID: id, + Version: version, + Name: req.GetName().GetValue(), + Namespace: req.GetNamespace().GetValue(), + Business: req.GetBusiness().GetValue(), + Department: req.GetDepartment().GetValue(), + Comment: req.GetComment().GetValue(), + Inbounds: inbounds, + Outbounds: outbounds, + Token: token, + Owner: req.GetOwners().GetValue(), + Revision: NewUUID(), + } + + return circuitBreaker, nil +} + +/** + * @brief 创建存储层熔断规则关系模型 + */ +func api2CircuitBreakerRelation(serviceID, ruleID, ruleVersion string) *model.CircuitBreakerRelation { + circuitBreakerRelation := &model.CircuitBreakerRelation{ + ServiceID: serviceID, + RuleID: ruleID, + RuleVersion: ruleVersion, + } + + return circuitBreakerRelation +} + +/** + * @brief 返回规则id和version + */ +func ruleIDAndVersion2API(id, version string) *api.ConfigWithService { + out := &api.ConfigWithService{} + + rule := &api.CircuitBreaker{ + Id: utils.NewStringValue(id), + Version: utils.NewStringValue(version), + } + + out.CircuitBreaker = rule + return out +} + +/** + * @brief 把内部数据结构转化为熔断规则API参数 + */ +func circuitBreaker2API(req *model.CircuitBreaker) (*api.CircuitBreaker, error) { + if req == nil { + return nil, nil + } + + // token不返回 + out := &api.CircuitBreaker{ + Id: utils.NewStringValue(req.ID), + Version: utils.NewStringValue(req.Version), + Name: utils.NewStringValue(req.Name), + Namespace: utils.NewStringValue(req.Namespace), + Owners: utils.NewStringValue(req.Owner), + Comment: utils.NewStringValue(req.Comment), + Ctime: utils.NewStringValue(time2String(req.CreateTime)), + Mtime: utils.NewStringValue(time2String(req.ModifyTime)), + Revision: utils.NewStringValue(req.Revision), + Business: utils.NewStringValue(req.Business), + Department: utils.NewStringValue(req.Department), + } + + if req.Inbounds != "" { + var inBounds []*api.CbRule + if err := json.Unmarshal([]byte(req.Inbounds), &inBounds); err != nil { + return nil, err + } + out.Inbounds = inBounds + } + if req.Outbounds != "" { + var outBounds []*api.CbRule + if err := json.Unmarshal([]byte(req.Outbounds), &outBounds); err != nil { + return nil, err + } + out.Outbounds = outBounds + } + return out, nil +} + +/** + * @brief 把内部数据结构转化为客户端API参数 + */ +func circuitBreaker2ClientAPI(req *model.ServiceWithCircuitBreaker, service string, namespace string) ( + *api.CircuitBreaker, error) { + if req == nil { + return nil, nil + } + + out, err := circuitBreaker2API(req.CircuitBreaker) + if err != nil { + return nil, err + } + + if out == nil { + return nil, nil + } + + out.Service = utils.NewStringValue(service) + out.ServiceNamespace = utils.NewStringValue(namespace) + + return out, nil +} + +/** + * @brief 把内部数据结构转化为控制台API参数 + */ +func circuitBreaker2ConsoleAPI(req *model.CircuitBreakerInfo) (*api.ConfigWithService, error) { + if req == nil { + return nil, nil + } + + out := &api.ConfigWithService{} + circuitBreaker, err := circuitBreaker2API(req.CircuitBreaker) + if err != nil { + return nil, err + } + out.CircuitBreaker = circuitBreaker + + if len(req.Services) == 0 { + return out, nil + } + + services := make([]*api.Service, 0, len(req.Services)) + for _, item := range req.Services { + service := serviceRelatedRules2API(item) + services = append(services, service) + } + + out.Services = services + return out, nil +} + +/** + * @brief 转化服务名和命名空间 + */ +func serviceRelatedRules2API(service *model.Service) *api.Service { + if service == nil { + return nil + } + + out := &api.Service{ + Name: utils.NewStringValue(service.Name), + Namespace: utils.NewStringValue(service.Namespace), + Owners: utils.NewStringValue(service.Owner), + Ctime: utils.NewStringValue(time2String(service.CreateTime)), + Mtime: utils.NewStringValue(time2String(service.ModifyTime)), + } + + return out +} + +/** + * @brief 序列化inbounds和outbounds + */ +func marshalCircuitBreakerRule(in []*api.CbRule, out []*api.CbRule) (string, string, error) { + inbounds, err := json.Marshal(in) + if err != nil { + return "", "", err + } + + outbounds, err := json.Marshal(out) + if err != nil { + return "", "", err + } + + return string(inbounds), string(outbounds), nil +} + +/** + * @brief 封装熔断规则存储层错误 + */ +func wrapperCircuitBreakerStoreResponse(circuitBreaker *api.CircuitBreaker, err error) *api.Response { + resp := storeError2Response(err) + if resp == nil { + return nil + } + resp.CircuitBreaker = circuitBreaker + return resp +} + +/** + * @brief 封装熔断规则发布存储层错误 + */ +func wrapperConfigStoreResponse(configRelease *api.ConfigRelease, err error) *api.Response { + resp := storeError2Response(err) + if resp == nil { + return nil + } + resp.ConfigRelease = configRelease + return resp +} + +// 检查DB中circuitbreaker表对应的入参字段合法性 +func CheckDbCircuitbreakerFieldLen(req *api.CircuitBreaker) (*api.Response, bool) { + if err := CheckDbStrFieldLen(req.GetName(), MaxDbCircuitbreakerName); err != nil { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerName, req), true + } + if err := CheckDbStrFieldLen(req.GetNamespace(), MaxDbCircuitbreakerNamespace); err != nil { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerNamespace, req), true + } + if err := CheckDbStrFieldLen(req.GetBusiness(), MaxDbCircuitbreakerBusiness); err != nil { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerBusiness, req), true + } + if err := CheckDbStrFieldLen(req.GetDepartment(), MaxDbCircuitbreakerDepartment); err != nil { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerDepartment, req), true + } + if err := CheckDbStrFieldLen(req.GetComment(), MaxDbCircuitbreakerComment); err != nil { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerComment, req), true + } + if err := CheckDbStrFieldLen(req.GetOwners(), MaxDbCircuitbreakerOwner); err != nil { + return api.NewCircuitBreakerResponse(api.InvalidCircuitBreakerOwners, req), true + } + + return nil, false +} diff --git a/naming/circuitbreaker_config_test.go b/naming/circuitbreaker_config_test.go new file mode 100644 index 000000000..fbb05b1cc --- /dev/null +++ b/naming/circuitbreaker_config_test.go @@ -0,0 +1,144 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/gogo/protobuf/jsonpb" + "github.com/golang/protobuf/ptypes/duration" + "github.com/golang/protobuf/ptypes/wrappers" + "testing" +) + +func TestServer_CreateCircuitBreakerJson(t *testing.T) { + rule := &api.CircuitBreaker{} + rule.Id = &wrappers.StringValue{Value: "12345678"} + rule.Version = &wrappers.StringValue{Value: "1.0.0"} + rule.Name = &wrappers.StringValue{Value: "testCbRule"} + rule.Namespace = &wrappers.StringValue{Value: "Test"} + rule.Service = &wrappers.StringValue{Value: "TestService1"} + rule.ServiceNamespace = &wrappers.StringValue{Value: "Test"} + rule.Inbounds = []*api.CbRule{ + { + Sources: []*api.SourceMatcher{ + { + Service: &wrappers.StringValue{Value: "*"}, + Namespace: &wrappers.StringValue{Value: "*"}, + Labels: map[string]*api.MatchString{ + "user": &api.MatchString{ + Type: 0, + Value: &wrappers.StringValue{Value: "vip"}, + }, + }, + }, + }, + Destinations: []*api.DestinationSet{ + { + Method: &api.MatchString{ + Type: 0, + Value: &wrappers.StringValue{Value: "/info"}, + }, + Resource: api.DestinationSet_INSTANCE, + Type: api.DestinationSet_LOCAL, + Scope: api.DestinationSet_CURRENT, + Policy: &api.CbPolicy{ + ErrorRate: &api.CbPolicy_ErrRateConfig{ + Enable: &wrappers.BoolValue{Value: true}, + RequestVolumeThreshold: &wrappers.UInt32Value{Value: 10}, + ErrorRateToOpen: &wrappers.UInt32Value{Value: 50}, + }, + Consecutive: &api.CbPolicy_ConsecutiveErrConfig{ + Enable: &wrappers.BoolValue{Value: true}, + ConsecutiveErrorToOpen: &wrappers.UInt32Value{Value: 10}, + }, + SlowRate: &api.CbPolicy_SlowRateConfig{ + Enable: &wrappers.BoolValue{Value: true}, + MaxRt: &duration.Duration{Seconds: 1}, + SlowRateToOpen: &wrappers.UInt32Value{Value: 80}, + }, + }, + Recover: &api.RecoverConfig{ + SleepWindow: &duration.Duration{ + Seconds: 1, + }, + OutlierDetectWhen: api.RecoverConfig_ON_RECOVER, + }, + }, + }, + }, + } + rule.Outbounds = []*api.CbRule{ + { + Sources: []*api.SourceMatcher{ + { + Labels: map[string]*api.MatchString{ + "callerName": &api.MatchString{ + Type: 0, + Value: &wrappers.StringValue{Value: "xyz"}, + }, + }, + }, + }, + Destinations: []*api.DestinationSet{ + { + Namespace: &wrappers.StringValue{Value: "Test"}, + Service: &wrappers.StringValue{Value: "TestService1"}, + Method: &api.MatchString{ + Type: 0, + Value: &wrappers.StringValue{Value: "/info"}, + }, + Resource: api.DestinationSet_INSTANCE, + Type: api.DestinationSet_LOCAL, + Scope: api.DestinationSet_CURRENT, + Policy: &api.CbPolicy{ + ErrorRate: &api.CbPolicy_ErrRateConfig{ + Enable: &wrappers.BoolValue{Value: true}, + RequestVolumeThreshold: &wrappers.UInt32Value{Value: 10}, + ErrorRateToOpen: &wrappers.UInt32Value{Value: 50}, + }, + Consecutive: &api.CbPolicy_ConsecutiveErrConfig{ + Enable: &wrappers.BoolValue{Value: true}, + ConsecutiveErrorToOpen: &wrappers.UInt32Value{Value: 10}, + }, + SlowRate: &api.CbPolicy_SlowRateConfig{ + Enable: &wrappers.BoolValue{Value: true}, + MaxRt: &duration.Duration{Seconds: 1}, + SlowRateToOpen: &wrappers.UInt32Value{Value: 80}, + }, + }, + Recover: &api.RecoverConfig{ + SleepWindow: &duration.Duration{ + Seconds: 1, + }, + OutlierDetectWhen: api.RecoverConfig_ON_RECOVER, + }, + }, + }, + }, + } + rule.Business = &wrappers.StringValue{Value: "polaris"} + rule.Owners = &wrappers.StringValue{Value: "polaris"} + + marshaler := &jsonpb.Marshaler{} + ruleStr, err := marshaler.MarshalToString(rule) + if nil != err { + t.Fatal(err) + } + fmt.Printf(ruleStr) +} \ No newline at end of file diff --git a/naming/client.go b/naming/client.go new file mode 100644 index 000000000..0aae3264d --- /dev/null +++ b/naming/client.go @@ -0,0 +1,417 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "go.uber.org/zap" +) + +/** + * @brief 客户端上报信息 + */ +func (s *Server) ReportClient(ctx context.Context, req *api.Client) *api.Response { + requestID, _ := ctx.Value(utils.StringContext("request-id")).(string) + if s.caches == nil { + return api.NewResponse(api.ClientAPINotOpen) + } + + // 客户端信息不写入到DB中 + host := req.GetHost().GetValue() + out := &api.Client{ + Host: req.GetHost(), + } + + // 从CMDB查询地理位置信息 + if s.cmdb != nil { + location, err := s.cmdb.GetLocation(host) + if err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return api.NewClientResponse(api.CMDBPluginException, req) + } + + if location == nil { + return api.NewClientResponse(api.CMDBNotFindHost, req) + } + out.Location = location.Proto + } + + return api.NewClientResponse(api.ExecuteSuccess, out) +} + +/** + * @brief 服务实例上报心跳 + */ +func (s *Server) Heartbeat(ctx context.Context, req *api.Instance) *api.Response { + if s.caches == nil { + return api.NewResponse(api.ClientAPINotOpen) + } + + if s.hbMgr == nil { + return api.NewInstanceResponse(api.HealthCheckNotOpen, req) + } + return s.hbMgr.healthCheck(ctx, req) +} + +/** + * @brief 根据元数据查询服务 + */ +func (s *Server) GetServiceWithCache(ctx context.Context, req *api.Service) *api.DiscoverResponse { + if s.caches == nil { + return api.NewDiscoverServiceResponse(api.ClientAPINotOpen, req) + } + + if req == nil { + return api.NewDiscoverServiceResponse(api.EmptyRequest, req) + } + //可根据business查询服务 + if len(req.GetMetadata()) == 0 && len(req.Business.GetValue()) == 0 { + return api.NewDiscoverServiceResponse(api.InvalidServiceMetadata, req) + } + + requestID := ParseRequestID(ctx) + + resp := api.NewDiscoverServiceResponse(api.ExecuteSuccess, req) + + resp.Services = []*api.Service{} + + serviceIterProc := func(key string, value *model.Service) (bool, error) { + if checkServiceMetadata(req.GetMetadata(), value, req.Business.GetValue()) { + service := &api.Service{ + Name: utils.NewStringValue(value.Name), + Namespace: utils.NewStringValue(value.Namespace), + } + resp.Services = append(resp.Services, service) + } + return true, nil + } + + if err := s.caches.Service().IteratorServices(serviceIterProc); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewDiscoverServiceResponse(api.ExecuteException, req) + } + + return resp +} + +/** + * @brief 判断请求元数据是否属于服务的元数据 + */ +func checkServiceMetadata(requestMeta map[string]string, service *model.Service, business string) bool { + if len(service.Meta) == 0 && len(business) == 0 { + return false + } + if len(business) > 0 && business != service.Business { + return false + } + for key, requestValue := range requestMeta { + value, ok := service.Meta[key] + if !ok || requestValue != value { + return false + } + } + return true +} + +/** + * @brief 根据服务名查询服务实例列表 + */ +func (s *Server) ServiceInstancesCache(ctx context.Context, req *api.Service) *api.DiscoverResponse { + if req == nil { + return api.NewDiscoverInstanceResponse(api.EmptyRequest, req) + } + if s.caches == nil { + return api.NewDiscoverInstanceResponse(api.ClientAPINotOpen, req) + } + + serviceName := req.GetName().GetValue() + namespaceName := req.GetNamespace().GetValue() + + if serviceName == "" { + return api.NewDiscoverInstanceResponse(api.InvalidServiceName, req) + } + + // 消费服务为了兼容,可以不带namespace,server端使用默认的namespace + if namespaceName == "" { + namespaceName = DefaultNamespace + } + + // 数据源都来自Cache,这里拿到的service,已经是源服务 + service := s.getServiceCache(serviceName, namespaceName) + if service == nil { + log.Errorf("[Server][Service][Instance] not found name(%s) namespace(%s) service", serviceName, namespaceName) + return api.NewDiscoverInstanceResponse(api.NotFoundResource, req) + } + s.RecordDiscoverStatis(service.Name, service.Namespace) + // 获取revision,如果revision一致,则不返回内容,直接返回一个状态码 + revision := s.caches.GetServiceInstanceRevision(service.ID) + if revision == "" { + // 不能直接获取,则需要重新计算,大部分情况都可以直接获取的 + // 获取instance数据,service已经是源服务,可以直接查找cache + instances := s.caches.Instance().GetInstancesByServiceID(service.ID) + var revisionErr error + revision, revisionErr = s.GetServiceInstanceRevision(service.ID, instances) + if revisionErr != nil { + log.Errorf("[Server][Service][Instance] compute revision service(%s) err: %s", + service.ID, revisionErr.Error()) + return api.NewDiscoverInstanceResponse(api.ExecuteException, req) + } + } + if revision == req.GetRevision().GetValue() { + return api.NewDiscoverInstanceResponse(api.DataNoChange, req) + } + + // revision不一致,重新获取数据 + // 填充service数据 + resp := api.NewDiscoverInstanceResponse(api.ExecuteSuccess, service2Api(service)) + // 填充新的revision TODO + resp.Service.Revision.Value = revision + resp.Service.Name = req.GetName() // 别名场景,response需要保持和request的服务名一致 + // 填充instance数据 + resp.Instances = make([]*api.Instance, 0) // TODO + _ = s.caches.Instance(). + IteratorInstancesWithService(service.ID, // service已经是源服务 + func(key string, value *model.Instance) (b bool, e error) { + // 注意:这里的value是cache的,不修改cache的数据,通过getInstance,浅拷贝一份数据 + resp.Instances = append(resp.Instances, s.getInstance(req, value.Proto)) + return true, nil + }) + + return resp +} + +// 获取缓存中的路由配置信息 +func (s *Server) GetRoutingConfigWithCache(ctx context.Context, req *api.Service) *api.DiscoverResponse { + if s.caches == nil { + return api.NewDiscoverRoutingResponse(api.ClientAPINotOpen, req) + } + rid := ParseRequestID(ctx) + if req == nil { + return api.NewDiscoverRoutingResponse(api.EmptyRequest, req) + } + + if req.GetName().GetValue() == "" { + return api.NewDiscoverRoutingResponse(api.InvalidServiceName, req) + } + if req.GetNamespace().GetValue() == "" { + return api.NewDiscoverRoutingResponse(api.InvalidNamespaceName, req) + } + + resp := api.NewDiscoverRoutingResponse(api.ExecuteSuccess, nil) + resp.Service = &api.Service{ + Name: req.GetName(), + Namespace: req.GetNamespace(), + } + + // 先从缓存获取ServiceID,这里返回的是源服务 + service := s.getServiceCache(req.GetName().GetValue(), req.GetNamespace().GetValue()) + if service == nil { + return api.NewDiscoverRoutingResponse(api.NotFoundService, req) + } + out := s.caches.RoutingConfig().GetRoutingConfig(service.ID) + if out == nil { + return resp + } + + // 获取路由数据,并对比revision + if out.Revision == req.GetRevision().GetValue() { + return api.NewDiscoverRoutingResponse(api.DataNoChange, req) + } + + // 数据不一致,发生了改变 + // 数据格式转换,service只需要返回二元组与routing的revision + var err error + resp.Service.Revision = utils.NewStringValue(out.Revision) + resp.Routing, err = routingConfig2API(out, req.GetName().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewDiscoverRoutingResponse(api.ExecuteException, req) + } + + return resp +} + +// 获取缓存中的限流规则信息 +func (s *Server) GetRateLimitWithCache(ctx context.Context, req *api.Service) *api.DiscoverResponse { + if s.caches == nil { + return api.NewDiscoverRoutingResponse(api.ClientAPINotOpen, req) + } + + requestID := ParseRequestID(ctx) + + if req == nil { + return api.NewDiscoverRateLimitResponse(api.EmptyRequest, req) + } + + if req.GetName().GetValue() == "" { + return api.NewDiscoverRateLimitResponse(api.InvalidServiceName, req) + } + if req.GetNamespace().GetValue() == "" { + return api.NewDiscoverRateLimitResponse(api.InvalidNamespaceName, req) + } + + // 获取源服务 + service := s.getServiceCache(req.GetName().GetValue(), req.GetNamespace().GetValue()) + if service == nil { + return api.NewDiscoverRateLimitResponse(api.NotFoundService, req) + } + + resp := api.NewDiscoverRateLimitResponse(api.ExecuteSuccess, nil) + // 服务名和request保持一致 + resp.Service = &api.Service{ + Name: req.GetName(), + Namespace: req.GetNamespace(), + } + + // 获取最新的revision + lastRevision := s.caches.RateLimit().GetLastRevision(service.ID) + + // 缓存中无此服务的限流规则 + if lastRevision == "" { + return resp + } + + if req.GetRevision().GetValue() == lastRevision { + return api.NewDiscoverRateLimitResponse(api.DataNoChange, req) + } + + // 获取限流规则数据 + resp.Service.Revision = utils.NewStringValue(lastRevision) // 更新revision + + resp.RateLimit = &api.RateLimit{ + Revision: utils.NewStringValue(lastRevision), + Rules: []*api.Rule{}, + } + + rateLimitIterProc := func(key string, value *model.RateLimit) (bool, error) { + rateLimit, err := rateLimit2api(req.GetName().GetValue(), req.GetNamespace().GetValue(), value) + if err != nil { + return false, err + } + resp.RateLimit.Rules = append(resp.RateLimit.Rules, rateLimit) + return true, nil + } + + err := s.caches.RateLimit().GetRateLimit(service.ID, rateLimitIterProc) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewDiscoverRateLimitResponse(api.ExecuteException, req) + } + + return resp +} + +// 获取缓存中的熔断规则信息 +func (s *Server) GetCircuitBreakerWithCache(ctx context.Context, req *api.Service) *api.DiscoverResponse { + if s.caches == nil { + return api.NewDiscoverCircuitBreakerResponse(api.ClientAPINotOpen, req) + } + requestID := ParseRequestID(ctx) + if req == nil { + return api.NewDiscoverCircuitBreakerResponse(api.EmptyRequest, req) + } + + if req.GetName().GetValue() == "" { + return api.NewDiscoverCircuitBreakerResponse(api.InvalidServiceName, req) + } + if req.GetNamespace().GetValue() == "" { + return api.NewDiscoverCircuitBreakerResponse(api.InvalidNamespaceName, req) + } + + // 获取源服务 + service := s.getServiceCache(req.GetName().GetValue(), req.GetNamespace().GetValue()) + if service == nil { + return api.NewDiscoverCircuitBreakerResponse(api.NotFoundService, req) + } + + resp := api.NewDiscoverCircuitBreakerResponse(api.ExecuteSuccess, nil) + // 服务名和request保持一致 + resp.Service = &api.Service{ + Name: req.GetName(), + Namespace: req.GetNamespace(), + } + + out := s.caches.CircuitBreaker().GetCircuitBreakerConfig(service.ID) + if out == nil { + return resp + } + + // 获取熔断规则数据,并对比revision + if req.GetRevision().GetValue() == out.CircuitBreaker.Revision { + return api.NewDiscoverCircuitBreakerResponse(api.DataNoChange, req) + } + + // 数据不一致,发生了改变 + var err error + resp.Service.Revision = utils.NewStringValue(out.CircuitBreaker.Revision) + resp.CircuitBreaker, err = circuitBreaker2ClientAPI(out, req.GetName().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewDiscoverCircuitBreakerResponse(api.ExecuteException, req) + } + return resp +} + +// 根据ServiceID获取instances +func (s *Server) getInstancesCache(service *model.Service) []*model.Instance { + id := s.getSourceServiceID(service) + // TODO refer_filter还要处理一下 + return s.caches.Instance().GetInstancesByServiceID(id) +} + +// 获取顶级服务ID +// 没有顶级ID,则返回自身 +func (s *Server) getSourceServiceID(service *model.Service) string { + if service == nil || service.ID == "" { + return "" + } + // 找到parent服务,最多两级,因此不用递归查找 + if service.IsAlias() { + return service.Reference + } + + return service.ID + +} + +// 根据服务名获取服务缓存数据 +// 注意,如果是服务别名查询,这里会返回别名的源服务,不会返回别名 +func (s *Server) getServiceCache(name string, namespace string) *model.Service { + sc := s.caches.Service() + service := sc.GetServiceByName(name, namespace) + if service == nil { + return nil + } + // 如果是服务别名,继续查找一下 + if service.IsAlias() { + service = sc.GetServiceByID(service.Reference) + if service == nil { + return nil + } + } + + if service.Meta == nil { + service.Meta = make(map[string]string) + } + return service +} \ No newline at end of file diff --git a/naming/healthcheck.go b/naming/healthcheck.go new file mode 100644 index 000000000..36657f4b6 --- /dev/null +++ b/naming/healthcheck.go @@ -0,0 +1,478 @@ +/* + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "errors" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/redispool" + "go.uber.org/zap" + "strconv" + "strings" + "sync" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/timewheel" + "github.com/polarismesh/polaris-server/common/utils" +) + +/** + * @brief 健康检查配置 + */ +type HealthCheckConfig struct { + Open bool `yaml:"open"` + KvConnNum int `yaml:"kvConnNum"` + KvServiceName string `yaml:"kvServiceName"` + KvNamespace string `yaml:"kvNamespace"` + KvPasswd string `yaml:"kvPasswd"` + SlotNum int `yaml:"slotNum"` + LocalHost string `yaml:"localHost"` + MaxIdle int `yaml:"maxIdle"` + IdleTimeout int `yaml:"idleTimeout"` +} + +/** + * @brief 记录实例心跳信息 + */ +type HbInfo struct { + id string + addr string + beatTime int64 + ttl uint32 +} + +/** + * @brief 心跳管理器结构体 + * 包括时间轮、ckv连接池、存储实例心跳信息的map + */ +type HeartBeatMgr struct { + ctx context.Context + mu sync.Mutex + hbMap map[string]*HbInfo + ckvTw *timewheel.TimeWheel + dbTw *timewheel.TimeWheel + //ckvPool *ckv.Pool + redisPool *redispool.Pool +} + +/** + * @brief 时间轮任务结构体 + */ +type TimeWheelTask struct { + lastBeatTime int64 + hbInfo *HbInfo +} + +const ( + NotHealthy = 0 + Healthy = 1 + RedisNoKeyErr = "redigo: nil returned" +) + +var ( + healthCheckConf *HealthCheckConfig + hbMgr *HeartBeatMgr + + /** + * @brief 时间轮回调函数1:实例上报心跳1 ttl后执行,发现这 + * 段时间内该实例没有再次上报心跳则改写ckv中的实例状态为不健康 + */ + ckvCallback timewheel.Callback = func(data interface{}) { + task := data.(*TimeWheelTask) + lastBeatTime := task.lastBeatTime + // 说明本机收到了心跳,实例状态正常,不做任何处理 + if lastBeatTime < task.hbInfo.beatTime { + return + } + + // 更新上报心跳时间 + now := time.Now().Unix() + task.lastBeatTime = now + + // 从ckv获取实例状态,看其他server这段时间有没有收到心跳 + respCh := make(chan *redispool.Resp) + hbMgr.redisPool.Get(task.hbInfo.id, respCh) + resp := <-respCh + if !resp.Local { + if resp.Err != nil { + // 获取ckv失败,不能退出,直接进入set ckv unhealthy & dbCallback流程 + log.Errorf("[health check] addr:%s id:%s 1ttl get redis err:%s", + task.hbInfo.addr, task.hbInfo.id, resp.Err) + } else { + // ckv中value格式 健康状态(1健康 0不健康):心跳时间戳:写者ip + // 如: 1:timestamp:10.60.31.22 + // 基于解析性能考虑,没有使用json + res := strings.Split(resp.Value, ":") + kvBeatTime, err := strconv.ParseInt(res[1], 10, 64) + if err != nil { + log.Errorf("[health check] addr:%s id:%s redis beat time parse err:%s", + task.hbInfo.addr, task.hbInfo.id, err) + } + + // ckv中的实例状态为已经被改为不健康 + // 或ckv心跳时间 > 本地上次心跳时间,说明其他server收到了心跳,不做任何处理 + if res[0] == "0" || kvBeatTime > lastBeatTime { + return + } + } + + // 将ckv中状态改为不健康 + log.Infof("[health check] addr:%s id:%s 1ttl overtime, set redis not healthy", task.hbInfo.addr, task.hbInfo.id) + hbMgr.redisPool.Set(task.hbInfo.id, NotHealthy, now, respCh) + resp = <-respCh + if resp.Err != nil { + log.Errorf("[health check] addr:%s id:%s set redis err:%s", task.hbInfo.addr, task.hbInfo.id, resp.Err) + } + } + // 添加时间轮任务:再过2ttl后仍未收到心跳,改写db实例状态为不健康 + _ = hbMgr.dbTw.AddTask(time.Duration(2*task.hbInfo.ttl-1)*time.Second, task, dbCallback) + } + + /** + * @brief 时间轮回调函数2:实例上报心跳1 ttl后若 + * 未上报心跳,则再过2ttl后执行此函数,负责判定实例死亡、改写db状态 + */ + dbCallback timewheel.Callback = func(data interface{}) { + task := data.(*TimeWheelTask) + // 说明本机收到了心跳,实例状态正常,不做任何处理 + if task.lastBeatTime < task.hbInfo.beatTime { + return + } + + // 从ckv获取下key状态,看其他server有没有收到心跳 + respCh := make(chan *redispool.Resp) + hbMgr.redisPool.Get(task.hbInfo.id, respCh) + resp := <-respCh + if !resp.Local { + if resp.Err != nil { + log.Errorf("[healthCheck] dbCallback get addr(%s) id(%s) from redis err: %s", + task.hbInfo.addr, task.hbInfo.id, resp.Err) + } else { + res := strings.Split(resp.Value, ":") + if res[0] == "1" { + log.Infof("[health check] addr: %s id: %s redis status is healthy, ignore set db unhealthy", + task.hbInfo.addr, task.hbInfo.id) + return + } + } + + // 删除kv + log.Infof("[health check] del redis id:%s", task.hbInfo.id) + hbMgr.redisPool.Del(task.hbInfo.id, respCh) + resp = <-respCh + if resp.Err != nil { + log.Errorf("[health check] addr:%s id:%s del redis err:%s", task.hbInfo.addr, task.hbInfo.id, resp.Err) + } + } + + insCache := server.caches.Instance().GetInstance(task.hbInfo.id) + if insCache == nil { + log.Errorf(`[health check] addr:%s id:%s ready to set db status + not health, but not found instance`, task.hbInfo.addr, task.hbInfo.id) + return + } + + // 修改db状态为不健康 + // 如果用户关闭了健康检查功能,则不做任何处理 + if insCache.EnableHealthCheck() && insCache.Healthy() != false { + setInsDbStatus(task.hbInfo.id, task.hbInfo.addr, NotHealthy) + } + + // 从本机map中删除 + hbMgr.mu.Lock() + delete(hbMgr.hbMap, task.hbInfo.id) + hbMgr.mu.Unlock() + } +) + +/** +* @brief 设置健康检查配置 + */ +func SetHealthCheckConfig(conf *HealthCheckConfig) { + healthCheckConf = conf +} + +/** + * @brief 初始化心跳管理器 + */ +func NewHeartBeatMgr(ctx context.Context) (*HeartBeatMgr, error) { + kvService := server.caches.Service(). + GetServiceByName(healthCheckConf.KvServiceName, healthCheckConf.KvNamespace) + var kvInstances []*model.Instance + + if kvService != nil { + kvInstances = server.caches.Instance().GetInstancesByServiceID(kvService.ID) + } + //if len(kvInstances) == 0 { + // return nil, fmt.Errorf("no available ckv instance, serviceId:%s", kvService.ID) + //} + + redisPool, err := redispool.NewPool(healthCheckConf.KvConnNum, healthCheckConf.KvPasswd, + healthCheckConf.LocalHost, kvInstances, healthCheckConf.MaxIdle, healthCheckConf.IdleTimeout) + if err != nil { + return nil, err + } + + mgr := &HeartBeatMgr{ + ctx: ctx, + hbMap: make(map[string]*HbInfo), + ckvTw: timewheel.New(time.Second, healthCheckConf.SlotNum, "ckv task timewheel"), + dbTw: timewheel.New(time.Second, healthCheckConf.SlotNum, "db task timewheel"), + redisPool: redisPool, + } + if kvService != nil { + go mgr.watchCkvService(kvService.ID) + } + return mgr, nil +} + +/** + * @brief 启动心跳管理器,启动健康检查功能 + */ +func (hb *HeartBeatMgr) Start() { + hb.redisPool.Start() + hb.ckvTw.Start() + hb.dbTw.Start() +} + +/** + * @brief 监控ckv实例有没有变化 + */ +func (hb *HeartBeatMgr) watchCkvService(id string) { + kvInstances := server.caches.Instance().GetInstancesByServiceID(id) + lastRevision, err := server.GetServiceInstanceRevision(id, kvInstances) + if err != nil { + log.Errorf("[health check] get redis revision err:%s", err) + } + + for range time.NewTicker(10 * time.Second).C { + kvInstances = server.caches.Instance().GetInstancesByServiceID(id) + if len(kvInstances) == 0 { + // need alert + log.Errorf("[health check] get redis ins nil") + continue + } + newRevision, err := server.GetServiceInstanceRevision(id, kvInstances) + if err != nil { + log.Errorf("[health check] get redis revision err:%s", err) + continue + } + if lastRevision != newRevision { + err := hb.redisPool.Update(kvInstances) + if err != nil { + // need alert + log.Errorf("[health check] update redis pool err:%s", err) + continue + } + lastRevision = newRevision + } + } +} + +/** +* @brief 心跳处理函数 + */ +func (hb *HeartBeatMgr) healthCheck(ctx context.Context, instance *api.Instance) *api.Response { + id, errRsp := checkHeartbeatInstance(instance) + if errRsp != nil { + return errRsp + } + instance.Id = utils.NewStringValue(id) + insCache := server.caches.Instance().GetInstance(id) + if insCache == nil { + return api.NewInstanceResponse(api.NotFoundResource, instance) + } + + service := server.caches.Service().GetServiceByID(insCache.ServiceID) + if service == nil { + return api.NewInstanceResponse(api.NotFoundResource, instance) + } + // 鉴权 + token := instance.GetServiceToken().GetValue() + if !server.authority.VerifyToken(token) { + return api.NewInstanceResponse(api.InvalidServiceToken, instance) + } + ok := server.authority.VerifyInstance(service.Token, token) + if !ok { + return api.NewInstanceResponse(api.Unauthorized, instance) + } + + // 如果实例未开启健康检查,返回 + if !insCache.EnableHealthCheck() || insCache.HealthCheck() == nil { + return api.NewInstanceResponse(api.HeartbeatOnDisabledIns, instance) + } + + // 记录收到心跳的instance日志,方便定位实例是否上报心跳 + log.Info("receive heartbeat", ZapRequestID(ParseRequestID(ctx)), zap.String("id", id), + zap.String("service", service.Namespace+":"+service.Name), + zap.String("host", insCache.Host()), zap.Uint32("port", insCache.Port())) + addr := insCache.Host() + ":" + strconv.Itoa(int(insCache.Port())) + ttl := insCache.HealthCheck().GetHeartbeat().GetTtl().GetValue() + now := time.Now().Unix() + var hbInfo *HbInfo + respCh := make(chan *redispool.Resp) + + hb.mu.Lock() + hbInfo, ok = hb.hbMap[id] + if !ok { + hbInfo = &HbInfo{id, addr, now, ttl} + hb.hbMap[id] = hbInfo + hb.mu.Unlock() + + // hbMap中没有找到该实例,说明这是实例近期第一次上报心跳,set ckv中实例状态为健康 + log.Infof("[health check] addr:%s id:%s ttl:%d heartbeat first time, set redis", addr, id, ttl) + hbMgr.redisPool.Set(id, Healthy, now, respCh) + resp := <-respCh + if resp.Err != nil { + log.Errorf("[health check] addr:%s id:%s set redis err:%s", addr, id, resp.Err) + return api.NewInstanceResponse(api.HeartbeatException, instance) + } + } else { + hb.mu.Unlock() + lastBeatTime := hbInfo.beatTime + if now == lastBeatTime { + log.Debugf("[health check] addr:%s id:%s ins heartbeat exceed 1 time/s", addr, id) + return api.NewInstanceResponse(api.HeartbeatExceedLimit, instance) + } + + // 修改实例心跳上报时间 + hbInfo.beatTime = now + hbInfo.ttl = ttl + + // 本机超过1 ttl + 1s未收到心跳,set一次ckv状态 + if now-lastBeatTime >= int64(ttl+1) { + log.Infof("[health check] addr:%s, id:%s receive heart beat after ttl + 1s, set redis healthy", addr, id) + hbMgr.redisPool.Set(id, Healthy, now, respCh) + resp := <-respCh + + if resp.Err != nil { + log.Errorf("[health check] addr:%s id:%s set redis err:%s", addr, id, resp.Err) + return api.NewInstanceResponse(api.HeartbeatException, instance) + } + } + } + + // db中实例状态若为不健康,设为健康 + if insCache.Healthy() != true { + setInsDbStatus(id, addr, Healthy) + } + + // 将超时检查任务放入时间轮 + task := &TimeWheelTask{now, hbInfo} + _ = hb.ckvTw.AddTask(time.Duration(ttl+1)*time.Second, task, ckvCallback) + + return api.NewInstanceResponse(api.ExecuteSuccess, instance) +} + +// 获取上一次的心跳时间 +func (hb *HeartBeatMgr) acquireLastHeartbeat(instance *api.Instance) error { + id := instance.GetId().GetValue() + if instance.Metadata == nil { + instance.Metadata = make(map[string]string) + } + + // 先获取本地记录的时间,这里可能为空的 + // (该实例不是上报到这台server,可以根据ckv信息获取其上报的server) + hb.mu.Lock() + info, ok := hb.hbMap[id] + hb.mu.Unlock() + if ok { + instance.Metadata["last-heartbeat-time"] = time2String(time.Unix(info.beatTime, 0)) + instance.Metadata["system-time"] = time2String(time.Now()) + } + + // 获取ckv记录的时间 + respCh := make(chan *redispool.Resp) + hbMgr.redisPool.Get(id, respCh) + resp := <-respCh + if resp.Err != nil { + if resp.Err.Error() == RedisNoKeyErr { + return nil + } + + log.Errorf("[health check] get id(%s) from redis err: %s", id, resp.Err.Error()) + return resp.Err + } + if resp.Local { + return nil + } + + res := strings.Split(resp.Value, ":") + if len(res) != 3 { + log.Errorf("[health check] id(%s) redis record invalid(%s)", id, resp.Value) + return errors.New("invalid ckv record") + } + tm, err := strconv.ParseInt(res[1], 10, 64) + if err != nil { + log.Errorf("[health check] id(%s) redis record heartbeat time(%s) is invalid", id, res[1]) + return err + } + + // ckv记录的心跳时间与心跳server, + // 根据这个心跳server可以获取到实例上报到哪台心跳server + instance.Metadata["ckv-record-healthy"] = res[0] + instance.Metadata["ckv-record-heartbeat-time"] = time2String(time.Unix(tm, 0)) + instance.Metadata["ckv-record-heartbeat-server"] = res[2] + return nil +} + +/** +* @brief 修改实例状态 + 需要打印操作记录 + server 是当前package的全局变量 +*/ +func setInsDbStatus(id, addr string, status int) { + log.Infof("[health check] addr:%s id:%s set db status %d", addr, id, status) + err := server.storage.SetInstanceHealthStatus(id, status, NewUUID()) + if err != nil { + log.Errorf("[health check] id: %s set db status err:%s", id, err) + return + } + + instance := server.caches.Instance().GetInstance(id) + if instance == nil { + log.Errorf("[HealthCheck] not found instance(%s)", id) + return + } + service := server.caches.Service().GetServiceByID(instance.ServiceID) + if service == nil { + log.Errorf("[HealthCheck] not found serviceID(%s) for instance(%s)", + instance.ServiceID, id) + return + } + + healthStatus := true + if status == 0 { + healthStatus = false + } + recordInstance := &model.Instance{ + Proto: &api.Instance{ + Host: instance.Proto.GetHost(), + Port: instance.Proto.GetPort(), + Priority: instance.Proto.GetPriority(), + Weight: instance.Proto.GetWeight(), + Healthy: utils.NewBoolValue(healthStatus), + Isolate: instance.Proto.GetIsolate(), + }, + } + + server.RecordHistory(instanceRecordEntry(nil, service, recordInstance, model.OUpdate)) +} diff --git a/naming/instance.go b/naming/instance.go new file mode 100644 index 000000000..a61841342 --- /dev/null +++ b/naming/instance.go @@ -0,0 +1,1206 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "fmt" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "go.uber.org/zap" +) + +var ( + // 查询实例支持的过滤字段 + InstanceFilterAttributes = map[string]bool{ + "service": true, // 服务name + "namespace": true, // 服务namespace + "host": true, + "port": true, + "keys": true, + "values": true, + "protocol": true, + "version": true, + "health_status": true, + "healthy": true, // health_status, healthy都有,以healthy为准 + "isolate": true, + "weight": true, + "logic_set": true, + "cmdb_region": true, + "cmdb_zone": true, + "cmdb_idc": true, + "priority": true, + "offset": true, + "limit": true, + } + // 查询字段转为存储层的属性值,映射表 + InsFilter2toreAttr = map[string]string{ + "service": "name", + "healthy": "health_status", + } + // 不属于 instance 表属性的字段 + NotInsFilterAttr = map[string]bool { + "keys": true, + "values": true, + } +) + +/** + * @brief 批量创建服务实例 + */ +func (s *Server) CreateInstances(ctx context.Context, reqs []*api.Instance) *api.BatchWriteResponse { + if checkError := checkBatchInstance(reqs); checkError != nil { + return checkError + } + + return batchOperateInstances(ctx, reqs, s.CreateInstance) +} + +/** + * @brief 创建单个服务实例 + * 注意:创建实例需要对服务进行加锁保护服务不被删除 + */ +func (s *Server) CreateInstance(ctx context.Context, req *api.Instance) *api.Response { + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + start := time.Now() + // 参数检查 + instanceID, checkError := checkCreateInstance(req) + if checkError != nil { + return checkError + } + // 限制instance频繁注册 + if ok := s.allowInstanceAccess(instanceID); !ok { + log.Error("create instance is not allow access", ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewInstanceResponse(api.InstanceTooManyRequests, req) + } + + // 防止污染req,拷贝一份出来,并且填充一下token ID + ins := *req + ins.ServiceToken = utils.NewStringValue(parseInstanceReqToken(ctx, req)) + ins.Id = utils.NewStringValue(instanceID) + data, resp := s.createInstance(ctx, req, &ins) + if resp != nil { + return resp + } + + // 处理create成功的消息 + msg := fmt.Sprintf("create instance: id=%v, namespace=%v, service=%v, host=%v, port=%v", + ins.GetId().GetValue(), req.GetNamespace().GetValue(), req.GetService().GetValue(), + req.GetHost().GetValue(), req.GetPort().GetValue()) + log.Info(msg, ZapRequestID(rid), ZapPlatformID(pid), zap.Duration("cost", time.Now().Sub(start))) + service := &model.Service{ + Name: req.GetService().GetValue(), + Namespace: req.GetNamespace().GetValue(), + } + s.RecordHistory(instanceRecordEntry(ctx, service, data, model.OCreate)) + out := &api.Instance{ + Id: ins.GetId(), + Service: req.GetService(), + Namespace: req.GetNamespace(), + VpcId: req.GetVpcId(), + Host: req.GetHost(), + Port: req.GetPort(), + } + return api.NewInstanceResponse(api.ExecuteSuccess, out) +} + +// store operate +func (s *Server) createInstance(ctx context.Context, req *api.Instance, ins *api.Instance) ( + *model.Instance, *api.Response) { + if server.bc == nil || !server.bc.CreateInstanceOpen() { + return s.serialCreateInstance(ctx, req, ins) // 单个同步 + } + + return s.asyncCreateInstance(ctx, req, ins) // 批量异步 +} + +// 异步新建实例 +// 底层函数会合并create请求,增加并发创建的吞吐 +// req 原始请求 +// ins 包含了req数据与instanceID,serviceToken +func (s *Server) asyncCreateInstance(ctx context.Context, req *api.Instance, ins *api.Instance) ( + *model.Instance, *api.Response) { + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + future := s.bc.AsyncCreateInstance(ins, ParsePlatformID(ctx), ParsePlatformToken(ctx)) + if err := future.Wait(); err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + if future.Code() == api.ExistedResource { + req.Id = utils.NewStringValue(ins.GetId().GetValue()) + } + return nil, api.NewInstanceResponse(future.Code(), req) + } + + return future.Instance(), nil +} + +// 同步串行创建实例 +// req为原始的请求体 +// ins包括了req的内容,并且填充了instanceID与serviceToken +func (s *Server) serialCreateInstance(ctx context.Context, req *api.Instance, ins *api.Instance) ( + *model.Instance, *api.Response) { + // 检查服务实例是否存在 + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + instance, err := s.storage.GetInstance(ins.GetId().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return nil, api.NewInstanceResponse(api.StoreLayerException, req) + } + if instance != nil { + req.Id = utils.NewStringValue(ins.GetId().GetValue()) + return nil, api.NewInstanceResponse(api.ExistedResource, req) + } + + // 鉴权,这里拿的源服务的,如果是别名,service=nil + service, err := s.storage.GetSourceServiceToken(req.GetService().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return nil, api.NewInstanceResponse(api.StoreLayerException, req) + } + if service == nil { + return nil, api.NewInstanceResponse(api.NotFoundResource, req) + } + if err := s.verifyInstanceAuth(ctx, service, req); err != nil { + return nil, err + } + + // 直接同步创建服务实例 + data := utils.CreateInstanceModel(service.ID, ins) + if err := s.storage.AddInstance(data); err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return nil, wrapperInstanceStoreResponse(req, err) + } + + return data, nil +} + +/** + * @brief 批量删除服务实例 + */ +func (s *Server) DeleteInstances(ctx context.Context, req []*api.Instance) *api.BatchWriteResponse { + if checkError := checkBatchInstance(req); checkError != nil { + return checkError + } + + return batchOperateInstances(ctx, req, s.DeleteInstance) +} + +/** + * @brief 删除单个服务实例 + */ +func (s *Server) DeleteInstance(ctx context.Context, req *api.Instance) *api.Response { + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + + // 参数检查 + instanceID, checkError := checkReviseInstance(req) + if checkError != nil { + return checkError + } + // 限制instance频繁反注册 + if ok := s.allowInstanceAccess(instanceID); !ok { + log.Error("delete instance is not allow access", ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewInstanceResponse(api.InstanceTooManyRequests, req) + } + + ins := *req // 防止污染外部的req + ins.Id = utils.NewStringValue(instanceID) + ins.ServiceToken = utils.NewStringValue(parseInstanceReqToken(ctx, req)) + return s.deleteInstance(ctx, req, &ins) +} + +// 删除实例的store操作 +// req 原始请求 +// ins 填充了instanceID与serviceToken +func (s *Server) deleteInstance(ctx context.Context, req *api.Instance, ins *api.Instance) *api.Response { + if s.bc == nil || !s.bc.DeleteInstanceOpen() { + return s.serialDeleteInstance(ctx, req, ins) + } + + return s.asyncDeleteInstance(ctx, req, ins) +} + +// 串行删除实例 +// 返回实例所属的服务和resp +func (s *Server) serialDeleteInstance(ctx context.Context, req *api.Instance, ins *api.Instance) *api.Response { + start := time.Now() + // 检查服务实例是否存在 + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + instance, err := s.storage.GetInstance(ins.GetId().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewInstanceResponse(api.StoreLayerException, req) + } + if instance == nil { + // 实例不存在,则返回成功 + return api.NewInstanceResponse(api.ExecuteSuccess, req) + } + // 鉴权 + service, resp := s.instanceAuth(ctx, req, instance.ServiceID) + if resp != nil { + return resp + } + + // 存储层操作 + if err := s.storage.DeleteInstance(instance.ID()); err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return wrapperInstanceStoreResponse(req, err) + } + + msg := fmt.Sprintf("delete instance: id=%v, namespace=%v, service=%v, host=%v, port=%v", + instance.ID(), service.Namespace, service.Name, instance.Host(), instance.Port()) + log.Info(msg, ZapRequestID(rid), ZapPlatformID(pid), zap.Duration("cost", time.Now().Sub(start))) + s.RecordHistory(instanceRecordEntry(ctx, service, instance, model.ODelete)) + + return api.NewInstanceResponse(api.ExecuteSuccess, req) +} + +// 异步删除实例 +// 返回实例所属的服务和resp +func (s *Server) asyncDeleteInstance(ctx context.Context, req *api.Instance, ins *api.Instance) *api.Response { + start := time.Now() + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + future := s.bc.AsyncDeleteInstance(ins, ParsePlatformID(ctx), ParsePlatformToken(ctx)) + if err := future.Wait(); err != nil { + // 如果发现不存在资源,意味着实例已经被删除,直接返回成功 + if future.Code() == api.NotFoundResource { + return api.NewInstanceResponse(api.ExecuteSuccess, req) + } + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewInstanceResponse(future.Code(), req) + } + instance := future.Instance() + + // 打印本地日志与操作记录 + msg := fmt.Sprintf("delete instance: id=%v, namespace=%v, service=%v, host=%v, port=%v", + instance.ID(), instance.Namespace(), instance.Service(), instance.Host(), instance.Port()) + log.Info(msg, ZapRequestID(rid), ZapPlatformID(pid), zap.Duration("cost", time.Now().Sub(start))) + service := &model.Service{Name: instance.Service(), Namespace: instance.Namespace()} + s.RecordHistory(instanceRecordEntry(ctx, service, instance, model.ODelete)) + + return api.NewInstanceResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 根据host批量删除服务实例 + */ +func (s *Server) DeleteInstancesByHost(ctx context.Context, req []*api.Instance) *api.BatchWriteResponse { + if checkError := checkBatchInstance(req); checkError != nil { + return checkError + } + + return batchOperateInstances(ctx, req, s.DeleteInstanceByHost) +} + +/** + * @brief 根据host删除服务实例 + */ +func (s *Server) DeleteInstanceByHost(ctx context.Context, req *api.Instance) *api.Response { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + + // 参数校验 + if err := checkInstanceByHost(req); err != nil { + return err + } + + // 获取实例 + instances, service, err := s.getInstancesMainByService(ctx, req) + if err != nil { + return err + } + + if instances == nil { + return api.NewInstanceResponse(api.ExecuteSuccess, req) + } + + ids := make([]interface{}, 0, len(instances)) + for _, instance := range instances { + ids = append(ids, instance.ID()) + } + + if err := s.storage.BatchDeleteInstances(ids); err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return wrapperInstanceStoreResponse(req, err) + } + + for _, instance := range instances { + msg := fmt.Sprintf("delete instance: id=%v, namespace=%v, service=%v, host=%v, port=%v", + instance.ID(), service.Namespace, service.Name, instance.Host(), instance.Port()) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + s.RecordHistory(instanceRecordEntry(ctx, service, instance, model.ODelete)) + } + + return api.NewInstanceResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量修改服务实例 + */ +func (s *Server) UpdateInstances(ctx context.Context, req []*api.Instance) *api.BatchWriteResponse { + if checkError := checkBatchInstance(req); checkError != nil { + return checkError + } + + return batchOperateInstances(ctx, req, s.UpdateInstance) +} + +/** + * @brief 修改单个服务实例 + */ +func (s *Server) UpdateInstance(ctx context.Context, req *api.Instance) *api.Response { + service, instance, preErr := s.execInstancePreStep(ctx, req) + if preErr != nil { + return preErr + } + if err := checkMetadata(req.GetMetadata()); err != nil { + return api.NewInstanceResponse(api.InvalidMetadata, req) + } + + // 修改 + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + log.Info(fmt.Sprintf("old instance: %+v", instance), ZapRequestID(requestID), ZapPlatformID(platformID)) + + // 存储层操作 + if needUpdate := s.updateInstanceAttribute(req, instance); !needUpdate { + log.Info("update instance no data change, no need update", + ZapRequestID(requestID), ZapPlatformID(platformID), zap.String("instance", req.String())) + return api.NewInstanceResponse(api.NoNeedUpdate, req) + } + if err := s.storage.UpdateInstance(instance); err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return wrapperInstanceStoreResponse(req, err) + } + + msg := fmt.Sprintf("update instance: id=%v, namespace=%v, service=%v, host=%v, port=%v, healthy = %v", + instance.ID(), service.Namespace, service.Name, instance.Host(), + instance.Port(), instance.Healthy()) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + s.RecordHistory(instanceRecordEntry(ctx, service, instance, model.OUpdate)) + + return api.NewInstanceResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量修改服务实例隔离状态 + * @note 必填参数为service+namespace+host + */ +func (s *Server) UpdateInstancesIsolate(ctx context.Context, req []*api.Instance) *api.BatchWriteResponse { + if checkError := checkBatchInstance(req); checkError != nil { + return checkError + } + + return batchOperateInstances(ctx, req, s.UpdateInstanceIsolate) +} + +/** + * @brief 修改服务实例隔离状态 + * @note 必填参数为service+namespace+ip + */ +func (s *Server) UpdateInstanceIsolate(ctx context.Context, req *api.Instance) *api.Response { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + + // 参数校验 + if err := checkInstanceByHost(req); err != nil { + return err + } + if req.GetIsolate() == nil { + return api.NewInstanceResponse(api.InvalidInstanceIsolate, req) + } + + // 获取实例 + instances, service, err := s.getInstancesMainByService(ctx, req) + if err != nil { + return err + } + if instances == nil { + return api.NewInstanceResponse(api.NotFoundInstance, req) + } + + // 判断是否需要更新 + needUpdate := false + for _, instance := range instances { + if instance.Isolate() != req.GetIsolate().GetValue() { + needUpdate = true + break + } + } + if !needUpdate { + return api.NewInstanceResponse(api.NoNeedUpdate, req) + } + + isolate := 0 + if req.GetIsolate().GetValue() { + isolate = 1 + } + + ids := make([]interface{}, 0, len(instances)) + for _, instance := range instances { + // 方便后续打印操作记录 + instance.Proto.Isolate = req.GetIsolate() + ids = append(ids, instance.ID()) + } + + if err := s.storage.BatchSetInstanceIsolate(ids, isolate, NewUUID()); err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return wrapperInstanceStoreResponse(req, err) + } + + for _, instance := range instances { + msg := fmt.Sprintf("update instance: id=%v, namespace=%v, service=%v, host=%v, port=%v, isolate=%v", + instance.ID(), service.Namespace, service.Name, instance.Host(), instance.Port(), instance.Isolate()) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + s.RecordHistory(instanceRecordEntry(ctx, service, instance, model.OUpdateIsolate)) + } + + return api.NewInstanceResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 根据ip隔离和删除服务实例的参数检查 + */ +func checkInstanceByHost(req *api.Instance) *api.Response { + if req == nil { + return api.NewInstanceResponse(api.EmptyRequest, req) + } + if err := checkResourceName(req.GetService()); err != nil { + return api.NewInstanceResponse(api.InvalidServiceName, req) + } + if err := checkResourceName(req.GetNamespace()); err != nil { + return api.NewInstanceResponse(api.InvalidNamespaceName, req) + } + if err := checkInstanceHost(req.GetHost()); err != nil { + return api.NewInstanceResponse(api.InvalidInstanceHost, req) + } + return nil +} + +/** + * @brief 根据服务和host获取服务实例 + */ +func (s *Server) getInstancesMainByService(ctx context.Context, req *api.Instance) ( + []*model.Instance, *model.Service, *api.Response) { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + + // 检查服务 + // 这里获取的是源服务的token。如果是别名,service=nil + service, err := s.storage.GetSourceServiceToken(req.GetService().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return nil, nil, api.NewInstanceResponse(api.StoreLayerException, req) + } + if service == nil { + return nil, nil, api.NewInstanceResponse(api.NotFoundService, req) + } + + // 鉴权 + if err := s.verifyInstanceAuth(ctx, service, req); err != nil { + return nil, nil, err + } + + // 获取服务实例 + instances, err := s.storage.GetInstancesMainByService(service.ID, req.GetHost().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return nil, nil, api.NewInstanceResponse(api.StoreLayerException, req) + } + return instances, service, nil +} + +/** + * @brief 修改服务属性 + */ +func (s *Server) updateInstanceAttribute(req *api.Instance, instance *model.Instance) bool { + // #lizard forgives + instance.MallocProto() + needUpdate := false + insProto := instance.Proto + if ok := instanceMetaNeedUpdate(req.GetMetadata(), instance.Metadata()); ok { + insProto.Metadata = req.GetMetadata() + needUpdate = true + } + if !needUpdate { + // 不需要更新metadata,则置空 + insProto.Metadata = nil + } + + if req.GetProtocol() != nil && req.GetProtocol().GetValue() != instance.Protocol() { + insProto.Protocol = req.GetProtocol() + needUpdate = true + } + + if req.GetVersion() != nil && req.GetVersion().GetValue() != instance.Version() { + insProto.Version = req.GetVersion() + needUpdate = true + } + + if req.GetPriority() != nil && req.GetPriority().GetValue() != instance.Priority() { + insProto.Priority = req.GetPriority() + needUpdate = true + } + + if req.GetWeight() != nil && req.GetWeight().GetValue() != instance.Weight() { + insProto.Weight = req.GetWeight() + needUpdate = true + } + + if req.GetHealthy() != nil && req.GetHealthy().GetValue() != instance.Healthy() { + insProto.Healthy = req.GetHealthy() + needUpdate = true + } + + if req.GetIsolate() != nil && req.GetIsolate().GetValue() != instance.Isolate() { + insProto.Isolate = req.GetIsolate() + needUpdate = true + } + + if req.GetLogicSet() != nil && req.GetLogicSet().GetValue() != instance.LogicSet() { + insProto.LogicSet = req.GetLogicSet() + needUpdate = true + } + + if ok := updateHealthCheck(req, instance); ok { + needUpdate = true + } + + // 每次更改,都要生成一个新的uuid + if needUpdate { + insProto.Revision = utils.NewStringValue(NewUUID()) + } + + return needUpdate +} + +// 健康检查的更新 +func updateHealthCheck(req *api.Instance, instance *model.Instance) bool { + needUpdate := false + insProto := instance.Proto + // health Check,healthCheck不能为空,且没有把enable_health_check置为false + if req.GetHealthCheck().GetHeartbeat() != nil && + (req.GetEnableHealthCheck() == nil || req.GetEnableHealthCheck().GetValue()) { + // 如果数据库中实例原有是不打开健康检查, + // 那么一旦打开,status需置为false,等待一次心跳成功才能变成true + if instance.EnableHealthCheck() == false { + // 需要重置healthy,则认为有变更 + insProto.Healthy = utils.NewBoolValue(false) + insProto.EnableHealthCheck = utils.NewBoolValue(true) + needUpdate = true + } + + ttl := req.GetHealthCheck().GetHeartbeat().GetTtl().GetValue() + if ttl == 0 || ttl > 60 { + ttl = DefaultTLL + } + if ttl != instance.HealthCheck().GetHeartbeat().GetTtl().GetValue() { + // ttl有变更 + needUpdate = true + } + if api.HealthCheck_HEARTBEAT != instance.HealthCheck().GetType() { + // health check type有变更 + needUpdate = true + } + insProto.HealthCheck = req.GetHealthCheck() + insProto.HealthCheck.Type = api.HealthCheck_HEARTBEAT + if insProto.HealthCheck.Heartbeat.Ttl == nil { + insProto.HealthCheck.Heartbeat.Ttl = utils.NewUInt32Value(0) + } + insProto.HealthCheck.Heartbeat.Ttl.Value = ttl + } + + // update的时候,修改了enableHealthCheck的值 + if req.GetEnableHealthCheck() != nil && req.GetEnableHealthCheck().GetValue() == false { + if req.GetEnableHealthCheck().GetValue() != instance.EnableHealthCheck() { + needUpdate = true + } + if insProto.GetHealthCheck() != nil { + needUpdate = true + } + + insProto.EnableHealthCheck = utils.NewBoolValue(false) + insProto.HealthCheck = nil + } + + return needUpdate +} + +/** + * @brief 查询服务实例 + */ +func (s *Server) GetInstances(query map[string]string) *api.BatchQueryResponse { + // 对数据先进行提前处理一下 + filters, metaFilter, batchErr := preGetInstances(query) + if batchErr != nil { + return batchErr + } + // 分页数据 + offset, limit, err := ParseOffsetAndLimit(filters) + if err != nil { + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + total, instances, err := s.storage.GetExpandInstances(filters, metaFilter, offset, limit) + if err != nil { + log.Errorf("[Server][Instances][Query] instances store err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + out := api.NewBatchQueryResponse(api.ExecuteSuccess) + out.Amount = utils.NewUInt32Value(total) + out.Size = utils.NewUInt32Value(uint32(len(instances))) + + apiInstances := make([]*api.Instance, 0, len(instances)) + for _, instance := range instances { + // 数据来源于数据库,不需要拷贝一份,直接填充后返回 + s.packCmdb(instance.Proto) + apiInstances = append(apiInstances, instance.Proto) + } + out.Instances = apiInstances + + return out +} + +/** + * @brief 查询总的服务实例,不带过滤条件的 + */ +func (s *Server) GetInstancesCount() *api.BatchQueryResponse { + count, err := s.storage.GetInstancesCount() + if err != nil { + log.Errorf("[Server][Instance][Count] storage get err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + out := api.NewBatchQueryResponse(api.ExecuteSuccess) + out.Amount = utils.NewUInt32Value(count) + out.Instances = make([]*api.Instance, 0) + return out +} + +// 清理无效的实例(flag == 1) +func (s *Server) CleanInstance(ctx context.Context, req *api.Instance) *api.Response { + // 无效数据,不需要鉴权,直接删除 + getInstanceID := func() (string, *api.Response) { + if req.GetId() != nil { + if req.GetId().GetValue() == "" { + return "", api.NewInstanceResponse(api.InvalidInstanceID, req) + } + return req.GetId().GetValue(), nil + } + return checkInstanceTetrad(req) + } + + instanceID, resp := getInstanceID() + if resp != nil { + return resp + } + if err := s.storage.CleanInstance(instanceID); err != nil { + log.Error("Clean instance", zap.String("err", err.Error()), ZapRequestID(ParseRequestID(ctx))) + return api.NewInstanceResponse(api.StoreLayerException, req) + } + + log.Info("Clean instance", ZapRequestID(ParseRequestID(ctx)), zap.String("instanceID", instanceID)) + return api.NewInstanceResponse(api.ExecuteSuccess, req) +} + +// 获取上一次心跳的时间 +func (s *Server) GetLastHeartbeat(req *api.Instance) *api.Response { + if s.hbMgr == nil { + return api.NewInstanceResponse(api.HealthCheckNotOpen, req) + } + if s.caches == nil || s.caches.Instance() == nil || s.caches.Service() == nil { + return api.NewInstanceResponse(api.ClientAPINotOpen, req) + } + + id := req.GetId().GetValue() + if id == "" { + tmpID, resp := checkInstanceTetrad(req) + if resp != nil { + return resp + } + id = tmpID + } + if id == "" { + return api.NewInstanceResponse(api.InvalidInstanceID, req) + } + req.Id = utils.NewStringValue(id) + + instance := s.caches.Instance().GetInstance(id) + if instance == nil { + return api.NewInstanceResponse(api.NotFoundInstance, req) + } + service := s.caches.Service().GetServiceByID(instance.ServiceID) + if service == nil { + return api.NewInstanceResponse(api.NotFoundService, req) + } + + if err := s.hbMgr.acquireLastHeartbeat(req); err != nil { + return api.NewInstanceRespWithError(api.ExecuteException, err, req) + } + req.Service = utils.NewStringValue(service.Name) + req.Namespace = utils.NewStringValue(service.Namespace) + req.Host = instance.Proto.GetHost() + req.Port = instance.Proto.GetPort() + req.VpcId = instance.Proto.GetVpcId() + req.HealthCheck = instance.HealthCheck() + return api.NewInstanceResponse(api.ExecuteSuccess, req) +} + +// update/delete instance前置条件 +func (s *Server) execInstancePreStep(ctx context.Context, req *api.Instance) ( + *model.Service, *model.Instance, *api.Response) { + rid := ParseRequestID(ctx) + + // 参数检查 + instanceID, checkError := checkReviseInstance(req) + if checkError != nil { + return nil, nil, checkError + } + + // 检查服务实例是否存在 + instance, err := s.storage.GetInstance(instanceID) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return nil, nil, api.NewInstanceResponse(api.StoreLayerException, req) + } + if instance == nil { + return nil, nil, api.NewInstanceResponse(api.NotFoundInstance, req) + } + + service, resp := s.instanceAuth(ctx, req, instance.ServiceID) + if resp != nil { + return nil, nil, resp + } + + return service, instance, nil +} + +// 实例鉴权 +func (s *Server) instanceAuth(ctx context.Context, req *api.Instance, serviceID string) ( + *model.Service, *api.Response) { + service, err := s.storage.GetServiceByID(serviceID) + if err != nil { + log.Error(err.Error(), ZapRequestID(ParseRequestID(ctx))) + return nil, api.NewInstanceResponse(api.StoreLayerException, req) + } + if service == nil { + return nil, api.NewInstanceResponse(api.NotFoundResource, req) + } + + // 鉴权 + if err := s.verifyInstanceAuth(ctx, service, req); err != nil { + return nil, err + } + return service, nil +} + +/** + * @brief 实例鉴权 + */ +func (s *Server) verifyInstanceAuth(ctx context.Context, service *model.Service, req *api.Instance) *api.Response { + if ok := s.verifyAuthByPlatform(ctx, service.PlatformID); !ok { + // 检查token是否存在 + serviceToken := parseInstanceReqToken(ctx, req) + if !s.authority.VerifyToken(serviceToken) { + return api.NewInstanceResponse(api.InvalidServiceToken, req) + } + + // 检查token是否ok + if ok := s.authority.VerifyInstance(service.Token, serviceToken); !ok { + return api.NewInstanceResponse(api.Unauthorized, req) + } + } + return nil +} + +// 获取api.instance +func (s *Server) getInstance(service *api.Service, instance *api.Instance) *api.Instance { + out := &api.Instance{ + Id: instance.GetId(), + Service: service.GetName(), + Namespace: service.GetNamespace(), + VpcId: instance.GetVpcId(), + Host: instance.GetHost(), + Port: instance.GetPort(), + Protocol: instance.GetProtocol(), + Version: instance.GetVersion(), + Priority: instance.GetPriority(), + Weight: instance.GetWeight(), + EnableHealthCheck: instance.GetEnableHealthCheck(), + HealthCheck: instance.GetHealthCheck(), + Healthy: instance.GetHealthy(), + Isolate: instance.GetIsolate(), + Location: instance.GetLocation(), + Metadata: instance.GetMetadata(), + LogicSet: instance.GetLogicSet(), + //Ctime: instance.GetCtime(), + Mtime: instance.GetMtime(), + Revision: instance.GetRevision(), + } + + s.packCmdb(out) + return out +} + +// 获取cmdb +func (s *Server) packCmdb(instance *api.Instance) { + if instance == nil || instance.GetLocation() != nil { + return + } + if s.cmdb == nil { + return + } + + location, err := s.cmdb.GetLocation(instance.GetHost().GetValue()) + if err == nil && location != nil { + instance.Location = location.Proto + } + return +} + +/* + * @brief 检查批量请求 + */ +func checkBatchInstance(req []*api.Instance) *api.BatchWriteResponse { + if len(req) == 0 { + return api.NewBatchWriteResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchWriteResponse(api.BatchSizeOverLimit) + } + + return nil +} + +/* + * @brief 检查创建服务实例请求参数 + */ +func checkCreateInstance(req *api.Instance) (string, *api.Response) { + if req == nil { + return "", api.NewInstanceResponse(api.EmptyRequest, req) + } + + if err := checkMetadata(req.GetMetadata()); err != nil { + return "", api.NewInstanceResponse(api.InvalidMetadata, req) + } + + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbInstanceFieldLen(req) + if notOk { + return "", err + } + + return checkInstanceTetrad(req) +} + +/* + * @brief 检查删除/修改服务实例请求参数 + */ +func checkReviseInstance(req *api.Instance) (string, *api.Response) { + if req == nil { + return "", api.NewInstanceResponse(api.EmptyRequest, req) + } + + if req.GetId() != nil { + if req.GetId().GetValue() == "" { + return "", api.NewInstanceResponse(api.InvalidInstanceID, req) + } + return req.GetId().GetValue(), nil + } + + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbInstanceFieldLen(req) + if notOk { + return "", err + } + + return checkInstanceTetrad(req) +} + +/* + * @brief 检查心跳实例请求参数 + * 检查是否存在token,以及 id或者四元组 + * 注意:心跳上报只允许从client上报,因此token只会存在req中 + */ +func checkHeartbeatInstance(req *api.Instance) (string, *api.Response) { + if req == nil { + return "", api.NewInstanceResponse(api.EmptyRequest, req) + } + if req.GetId() != nil { + if req.GetId().GetValue() == "" { + return "", api.NewInstanceResponse(api.InvalidInstanceID, req) + } + return req.GetId().GetValue(), nil + } + return checkInstanceTetrad(req) +} + +/* + * @brief 根据服务实例四元组计算ID + */ +func checkInstanceTetrad(req *api.Instance) (string, *api.Response) { + if err := checkResourceName(req.GetService()); err != nil { + return "", api.NewInstanceResponse(api.InvalidServiceName, req) + } + + if err := checkResourceName(req.GetNamespace()); err != nil { + return "", api.NewInstanceResponse(api.InvalidNamespaceName, req) + } + + if err := checkInstanceHost(req.GetHost()); err != nil { + return "", api.NewInstanceResponse(api.InvalidInstanceHost, req) + } + + if err := checkInstancePort(req.GetPort()); err != nil { + return "", api.NewInstanceResponse(api.InvalidInstancePort, req) + } + + id, err := CalculateInstanceID(req.GetNamespace().GetValue(), req.GetService().GetValue(), + req.GetVpcId().GetValue(), + req.GetHost().GetValue(), + req.GetPort().GetValue(), + ) + if err != nil { + return "", api.NewInstanceResponse(api.ExecuteException, req) + } + + return id, nil +} + +// 获取instance请求的token信息 +func parseInstanceReqToken(ctx context.Context, req *api.Instance) string { + if reqToken := req.GetServiceToken().GetValue(); reqToken != "" { + return reqToken + } + + return ParseToken(ctx) +} + +// 实例查询前置处理 +func preGetInstances(query map[string]string) (map[string]string, map[string]string, *api.BatchQueryResponse) { + // 不允许全量查询服务实例 + if len(query) == 0 { + return nil, nil, api.NewBatchQueryResponse(api.EmptyQueryParameter) + } + _, serviceIsAvail := query["service"] + _, namespaceIsAvail := query["namespace"] + _, hostIsAvail := query["host"] + // 要么(service,namespace)存在,要么host存在,不然视为参数不完整 + if !((serviceIsAvail && namespaceIsAvail) || hostIsAvail) { + return nil, nil, api.NewBatchQueryResponse(api.InvalidQueryInsParameter) + } + + var metaFilter map[string]string + metaKey, metaKeyAvail := query["keys"] + metaValue, metaValueAvail := query["values"] + if metaKeyAvail != metaValueAvail { + return nil, nil, api.NewBatchQueryResponseWithMsg( + api.InvalidQueryInsParameter, "instance metadata key and value must be both provided") + } + if metaKeyAvail { + metaFilter = map[string]string{metaKey:metaValue} + } + + // 以healthy为准 + _, lhs := query["health_status"] + _, rhs := query["healthy"] + if lhs && rhs { + delete(query, "health_status") + } + + bool2Str := func(key string) { + val, ok := query[key] + if !ok { + return + } + if val == "true" { + query[key] = "1" + } else if val == "false" { + query[key] = "0" + } + } + + // 处理一下两个bool值的字段 + bool2Str("health_status") + bool2Str("healthy") + bool2Str("isolate") + + filters := make(map[string]string) + for key, value := range query { + if _, ok := InstanceFilterAttributes[key]; !ok { + log.Errorf("[Server][Instance][Query] attribute(%s) is not allowed", key) + return nil, metaFilter, api.NewBatchQueryResponseWithMsg(api.InvalidParameter, key+" is not allowed") + } + + if value == "" { + log.Errorf("[Server][Instance][Query] attribute(%s: %s) is not allowed empty", key, value) + return nil, metaFilter, + api.NewBatchQueryResponseWithMsg(api.InvalidParameter, "the value for "+key+" is empty") + } + if attr, ok := InsFilter2toreAttr[key]; ok { + key = attr + } + if !NotInsFilterAttr[key] { + filters[key] = value + } + } + + return filters, metaFilter, nil +} + +// instance metadata need update +func instanceMetaNeedUpdate(req map[string]string, old map[string]string) bool { + if req == nil { + return false + } + + if len(req) != len(old) { + return true + } + + needUpdate := false + for key, value := range req { + oldValue, ok := old[key] + if !ok { + needUpdate = true + break + } + if value != oldValue { + needUpdate = true + break + } + } + if needUpdate { + return needUpdate + } + + for key, value := range old { + newValue, ok := req[key] + if !ok { + needUpdate = true + break + } + if value != newValue { + needUpdate = true + break + } + } + + return needUpdate +} + +// 批量操作实例 +func batchOperateInstances(ctx context.Context, reqs []*api.Instance, + handler func(ctx context.Context, req *api.Instance) *api.Response) *api.BatchWriteResponse { + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + + chs := make([]chan *api.Response, 0, len(reqs)) + for i, instance := range reqs { + chs = append(chs, make(chan *api.Response)) + go func(index int, ins *api.Instance) { + chs[index] <- handler(ctx, ins) + }(i, instance) + } + + for _, ch := range chs { + resp := <-ch + responses.Collect(resp) + } + + return api.FormatBatchWriteResponse(responses) +} + +// wrapper instance store response +func wrapperInstanceStoreResponse(instance *api.Instance, err error) *api.Response { + resp := storeError2Response(err) + if resp == nil { + return nil + } + + resp.Instance = instance + return resp +} + +// 生成instance的记录entry +func instanceRecordEntry(ctx context.Context, service *model.Service, ins *model.Instance, + opt model.OperationType) *model.RecordEntry { + if service == nil || ins == nil { + return nil + } + entry := &model.RecordEntry{ + ResourceType: model.RInstance, + OperationType: opt, + Namespace: service.Namespace, + Service: service.Name, + Operator: ParseOperator(ctx), + CreateTime: time.Now(), + } + if opt == model.OCreate || opt == model.OUpdate { + entry.Context = fmt.Sprintf("host:%s,port:%d,weight:%d,healthy:%v,isolate:%v,priority:%d,meta:%+v", + ins.Host(), ins.Port(), ins.Weight(), ins.Healthy(), ins.Isolate(), + ins.Priority(), ins.Metadata()) + } else if opt == model.OUpdateIsolate { + entry.Context = fmt.Sprintf("host:%s,port=%d,isolate:%v", ins.Host(), ins.Port(), ins.Isolate()) + } else { + entry.Context = fmt.Sprintf("host:%s,port:%d", ins.Host(), ins.Port()) + } + return entry +} + +// 检查DB中service表对应的入参字段合法性 +func CheckDbInstanceFieldLen(req *api.Instance) (*api.Response, bool) { + if err := CheckDbStrFieldLen(req.GetService(), MaxDbServiceNameLength); err != nil { + return api.NewInstanceResponse(api.InvalidServiceName, req), true + } + if err := CheckDbStrFieldLen(req.GetNamespace(), MaxDbServiceNamespaceLength); err != nil { + return api.NewInstanceResponse(api.InvalidNamespaceName, req), true + } + if err := CheckDbStrFieldLen(req.GetHost(), MaxDbInsHostLength); err != nil { + return api.NewInstanceResponse(api.InvalidInstanceHost, req), true + } + if err := CheckDbStrFieldLen(req.GetProtocol(), MaxDbInsProtocolLength); err != nil { + return api.NewInstanceResponse(api.InvalidInstanceProtocol, req), true + } + if err := CheckDbStrFieldLen(req.GetVersion(), MaxDbInsVersionLength); err != nil { + return api.NewInstanceResponse(api.InvalidInstanceVersion, req), true + } + if err := CheckDbStrFieldLen(req.GetLogicSet(), MaxDbInsLogicSetLength); err != nil { + return api.NewInstanceResponse(api.InvalidInstanceLogicSet, req), true + } + if err := CheckDbMetaDataFieldLen(req.GetMetadata()); err != nil { + return api.NewInstanceResponse(api.InvalidMetadata, req), true + } + if req.GetPort().GetValue() > 65535 { + return api.NewInstanceResponse(api.InvalidInstancePort, req), true + } + + if req.GetWeight().GetValue() > 65535 { + return api.NewInstanceResponse(api.InvalidParameter, req), true + } + return nil, false +} diff --git a/naming/l5service.go b/naming/l5service.go new file mode 100644 index 000000000..3338c69b6 --- /dev/null +++ b/naming/l5service.go @@ -0,0 +1,621 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "errors" + "fmt" + "github.com/golang/protobuf/proto" + "github.com/polarismesh/polaris-server/common/api/l5" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "strconv" + "strings" + "sync/atomic" +) + +var ( + Namespace2SidLayoutID = map[string]uint32{ + "Production": 1, + "Development": 2, + "Pre-release": 3, + "Test": 4, + "Polaris": 5, + "default": 6, + } + + SidLayoutID2Namespace = map[uint32]string{ + 1: "Production", + 2: "Development", + 3: "Pre-release", + 4: "Test", + 5: "Polaris", + 6: "default", + } +) + +// 记录l5service发现中的一些状态 +type l5service struct { + discoverRevision string + discoverClusterCount uint32 +} + +// 根据sid获取路由信息 +// 老函数: +// Stat::instance()->inc_sync_req_cnt(); +// 保存client的IP,该函数只是存储到本地的缓存中 +// Stat::instance()->add_agent(sbac.agent_ip()); +func (s *Server) SyncByAgentCmd(ctx context.Context, sbac *l5.Cl5SyncByAgentCmd) ( + *l5.Cl5SyncByAgentAckCmd, error) { + clientIP := sbac.GetAgentIp() + optList := sbac.GetOptList().GetOpt() + + routes := s.getRoutes(clientIP, optList) + modIDList, callees, sidConfigs := s.getCallees(routes) + policys, sections := s.getPolicysAndSections(modIDList) + + sbaac := &l5.Cl5SyncByAgentAckCmd{ + AgentIp: proto.Int32(sbac.GetAgentIp()), + SyncFlow: proto.Int32(sbac.GetSyncFlow() + 1), + } + ipConfigs := make(map[uint32]*model.Location) // 所有的被调IP+主调IP + if len(callees) != 0 { + serverList := &l5.Cl5ServList{ + Serv: make([]*l5.Cl5ServObj, 0, len(callees)), + } + for _, entry := range callees { + server := &l5.Cl5ServObj{ + ModId: proto.Int32(int32(entry.ModID)), + CmdId: proto.Int32(int32(entry.CmdID)), + Ip: proto.Int32(int32(entry.IP)), + Port: proto.Int32(int32(entry.Port)), + Weight: proto.Int32(int32(entry.Weight)), + } + serverList.Serv = append(serverList.Serv, server) + ipConfigs[entry.IP] = entry.Location // 填充ipConfigs信息 + } + sbaac.ServList = serverList + } + + if len(policys) != 0 { + routeList := &l5.Cl5RuleList{ + Poly: make([]*l5.Cl5PolyObj, 0, len(policys)), + Sect: make([]*l5.Cl5SectObj, 0, len(sections)), + } + for _, entry := range policys { + obj := &l5.Cl5PolyObj{ + ModId: proto.Int32(int32(entry.ModID)), + Div: proto.Int32(int32(entry.Div)), + Mod: proto.Int32(int32(entry.Mod)), + } + routeList.Poly = append(routeList.Poly, obj) + } + for _, entry := range sections { + obj := &l5.Cl5SectObj{ + ModId: proto.Int32(int32(entry.ModID)), + From: proto.Int32(int32(entry.From)), + To: proto.Int32(int32(entry.To)), + CmdId: proto.Int32(int32(entry.Xid)), + } + routeList.Sect = append(routeList.Sect, obj) + } + sbaac.RuleList = routeList + } + + // 保持和cl5源码一致,agent的地域信息,如果找不到,则不加入到ipConfigs中 + if loc := s.getLocation(ParseIPInt2Str(uint32(sbac.GetAgentIp()))); loc != nil { + ipConfigs[uint32(sbac.GetAgentIp())] = loc + } + if len(ipConfigs) != 0 { + ipConfigList := &l5.Cl5IpcList{ + Ipc: make([]*l5.Cl5IpcObj, 0, len(ipConfigs)), + } + for key, entry := range ipConfigs { + obj := &l5.Cl5IpcObj{ + Ip: proto.Int32(int32(key)), + AreaId: proto.Int32(int32(entry.RegionID)), + CityId: proto.Int32(int32(entry.ZoneID)), + IdcId: proto.Int32(int32(entry.CampusID)), + } + ipConfigList.Ipc = append(ipConfigList.Ipc, obj) + } + sbaac.IpcList = ipConfigList + } + + sbaac.SidList = CreateCl5SidList(sidConfigs) + sbaac.L5SvrList = s.getCl5DiscoverList(ctx, uint32(clientIP)) + return sbaac, nil +} + +// get routes +func (s *Server) getRoutes(clientIP int32, optList []*l5.Cl5OptObj) []*model.Route { + cl5Cache := s.caches.CL5() + routes := cl5Cache.GetRouteByIP(uint32(clientIP)) + if routes == nil { + routes = make([]*model.Route, 0) + } + for _, entry := range optList { + modID := entry.GetModId() + cmdID := entry.GetCmdId() + if ok := cl5Cache.CheckRouteExisted(uint32(clientIP), uint32(modID), uint32(cmdID)); !ok { + route := &model.Route{ + IP: uint32(clientIP), + ModID: uint32(entry.GetModId()), + CmdID: uint32(entry.GetCmdId()), + SetID: "NOSET", + } + routes = append(routes, route) + // Stat::instance()->add_route(route.ip,route.modId,route.cmdId); TODO + } + } + + return routes +} + +// get callee +func (s *Server) getCallees(routes []*model.Route) (map[uint32]bool, []*model.Callee, []*model.SidConfig) { + modIDList := make(map[uint32]bool) + var callees []*model.Callee + var sidConfigs []*model.SidConfig + for _, entry := range routes { + servers := s.getCalleeByRoute(entry) // 返回nil代表没有找到任何实例 + if servers == nil { + log.Warnf("[Cl5] can not found the instances for sid(%d:%d)", entry.ModID, entry.CmdID) + // Stat::instance()->add_lost_route(sbac.agent_ip(),vt_route[i].modId,vt_route[i].cmdId); TODO + continue + } + if len(servers) != 0 { // 不为nil,但是数组长度为0,意味着实例的权重不符合规则 + callees = append(callees, servers...) + } + + modIDList[entry.ModID] = true + if sidConfig := s.getSidConfig(entry.ModID, entry.CmdID); sidConfig != nil { + sidConfigs = append(sidConfigs, sidConfig) + } + } + + return modIDList, callees, sidConfigs +} + +// get policy and section +func (s *Server) getPolicysAndSections(modIDList map[uint32]bool) ([]*model.Policy, []*model.Section) { + cl5Cache := s.caches.CL5() + var policys []*model.Policy + var sections []*model.Section + for modID := range modIDList { + if policy := cl5Cache.GetPolicy(modID); policy != nil { + policys = append(policys, policy) + } + if secs := cl5Cache.GetSection(modID); len(secs) != 0 { + sections = append(sections, secs...) + } + } + + return policys, sections +} + +// 根据名字获取sid信息 +func (s *Server) RegisterByNameCmd(rbnc *l5.Cl5RegisterByNameCmd) (*l5.Cl5RegisterByNameAckCmd, error) { + // Stat::instance()->inc_regist_req_cnt(); TODO + + nameList := rbnc.GetNameList() + sidConfigs := make([]*model.SidConfig, 0) + for _, name := range nameList.GetName() { + if sidConfig := s.getSidConfigByName(name); sidConfig != nil { + sidConfigs = append(sidConfigs, sidConfig) + } + } + + rbnac := &l5.Cl5RegisterByNameAckCmd{ + CallerIp: proto.Int32(rbnc.GetCallerIp()), + } + + rbnac.SidList = CreateCl5SidList(sidConfigs) + return rbnac, nil +} + +// 根据访问关系获取所有符合的被调信息 +func (s *Server) getCalleeByRoute(route *model.Route) []*model.Callee { + out := make([]*model.Callee, 0) + if route == nil { + return nil + } + + sidStr := utils.MarshalModCmd(route.ModID, route.CmdID) + // 根据sid找到所述命名空间 + namespace := ComputeNamespace(route.ModID, route.CmdID) + // 根据sid找到polaris服务,这里是源服务 + service := s.getServiceCache(sidStr, namespace) + if service == nil { + return nil + } + s.RecordDiscoverStatis(service.Name, service.Namespace) + + hasInstance := false + _ = s.caches.Instance().IteratorInstancesWithService(service.ID, + func(key string, entry *model.Instance) (b bool, e error) { + hasInstance = true + // 如果不存在internal-cl5-setId,则默认都是NOSET,适用于别名场景 + setValue := "NOSET" + metadata := entry.Metadata() + if val, ok := metadata["internal-cl5-setId"]; ok { + setValue = val + } + + // 与route的setID匹配,那么直接返回instance.weight + weight := entry.Weight() + found := false + if setValue == route.SetID { + found = true + } else if !strings.Contains(setValue, route.SetID) { + found = false + } else { + var weights []uint32 + if val, ok := metadata["internal-cl5-weight"]; ok { + weights = ParseWeight(val) + } + setIDs := ParseSetID(setValue) + for i, setID := range setIDs { + if setID == route.SetID { + found = true + if weights != nil && i < len(weights) { + weight = weights[i] + } + break + } + } + } + + // 该Set无被调或者被调的权重为0,则忽略 + if !found || weight == 0 { + return true, nil + } + + // 转换ipStr to int + ip := ParseIPStr2IntV2(entry.Host()) + + callee := &model.Callee{ + ModID: route.ModID, + CmdID: route.CmdID, + IP: ip, + Port: entry.Port(), + Weight: weight, + // TODO 没有设置 setID,cl5源码也是没有设置的 + } + // s.getLocation(entry.Host), // ip的地域信息,统一来源于cmdb插件的数据 + if loc := s.getLocation(entry.Host()); loc != nil { + callee.Location = loc + } else { + // 如果cmdb中找不到数据,则默认地域ID都为0,即默认结构体 + callee.Location = &model.Location{} + } + out = append(out, callee) + return true, nil + }) + + if hasInstance == false { + return nil + } + + return out +} + +// 根据sid读取sidConfig的配置信息 +// 注意,sid--> reference,通过索引服务才能拿到真实的数据 +func (s *Server) getSidConfig(modID uint32, cmdID uint32) *model.SidConfig { + sid := &model.Sid{ModID: modID, CmdID: cmdID} + sidStr := utils.MarshalSid(sid) + + // 先获取一下namespace + namespace := ComputeNamespace(modID, cmdID) + sidService := s.caches.Service().GetServiceByName(sidStr, namespace) + if sidService == nil { + return nil + } + + sidConfig := s.getRealSidConfigMeta(sidService) + if sidConfig == nil { + return nil + } + + sidConfig.ModID = modID + sidConfig.CmdID = cmdID + + return sidConfig +} + +// 根据名字找到sidConfig +// 注意:通过cache,根据cl5Name,找到对应的sid +func (s *Server) getSidConfigByName(name string) *model.SidConfig { + nameService := s.caches.Service().GetServiceByCl5Name(name) + if nameService == nil { + return nil + } + + sidConfig := s.getRealSidConfigMeta(nameService) + if sidConfig == nil { + return nil + } + + sidMeta, ok := nameService.Meta["internal-cl5-sid"] + if !ok { + log.Errorf("[Server] not found name(%s) sid", name) + return nil + } + + sid, err := utils.UnmarshalSid(sidMeta) + if err != nil { + log.Errorf("[Server] unmarshal sid(%s) err: %s", sidMeta, err.Error()) + return nil + } + + sidConfig.ModID = sid.ModID + sidConfig.CmdID = sid.CmdID + return sidConfig +} + +// 只返回服务名+policy属性 +func (s *Server) getRealSidConfigMeta(service *model.Service) *model.SidConfig { + if service == nil { + return nil + } + + realService := service + // 找一下,是否存在索引服务(别名服务) + // 如果存在索引服务,读取索引服务的属性 + if service.IsAlias() { + if referService := s.caches.Service().GetServiceByID(service.Reference); referService != nil { + realService = referService + } + } + + out := &model.SidConfig{ + Name: "", + Policy: 0, + } + if nameMeta, ok := realService.Meta["internal-cl5-name"]; ok { + out.Name = nameMeta + } + if policyMeta, ok := realService.Meta["internal-enable-nearby"]; ok { + if policyMeta == "true" { + out.Policy = 1 + } + } + + return out +} + +// 获取cl5.discover +func (s *Server) getCl5DiscoverList(ctx context.Context, clientIP uint32) *l5.Cl5L5SvrList { + clusterName, _ := ctx.Value(utils.Cl5ServerCluster{}).(string) + if clusterName == "" { + log.Warnf("[Cl5] get server cluster name is empty") + return nil + } + protocol, _ := ctx.Value(utils.Cl5ServerProtocol{}).(string) + + service := s.getCl5DiscoverService(clusterName, clientIP) + if service == nil { + log.Errorf("[Cl5] not found server cluster service(%s)", clusterName) + return nil + } + instances := s.caches.Instance().GetInstancesByServiceID(service.ID) + if len(instances) == 0 { + log.Errorf("[Cl5] not found any instances for the service(%s, %s)", + clusterName, "Polaris") + return nil + } + + var out l5.Cl5L5SvrList + out.Ip = make([]int32, 0, len(instances)) + for _, entry := range instances { + // 获取同协议的数据 + if entry.Protocol() != protocol { + continue + } + // 过滤掉不健康或者隔离状态的server + if entry.Healthy() == false || entry.Isolate() == true { + continue + } + ip := ParseIPStr2IntV2(entry.Host()) + out.Ip = append(out.Ip, int32(ip)) + } + // 如果没有任何数据,那直接返回空,使用agent配置的IPlist + if len(out.GetIp()) == 0 { + log.Errorf("[Cl5] get cl5 cluster(%s) instances count 0", service.Name) + return nil + } + + return &out +} + +// 根据集群名获取对应的服务 +func (s *Server) getCl5DiscoverService(clusterName string, clientIP uint32) *model.Service { + service := s.getServiceCache(clusterName, "Polaris") + if service == nil { + log.Errorf("[Cl5] not found server cluster service(%s)", clusterName) + return nil + } + + // 根据service的metadata判断,有多少个子集群 + clusterCount := uint32(0) + if service.Revision == s.l5service.discoverRevision { + clusterCount = atomic.LoadUint32(&s.l5service.discoverClusterCount) + } else { + if meta, ok := service.Meta["internal-cluster-count"]; ok { + count, err := strconv.Atoi(meta) + if err != nil { + log.Errorf("[Cl5] get service count , parse err: %s", err.Error()) + } else { + clusterCount = uint32(count) + s.l5service.discoverRevision = service.Revision + atomic.StoreUint32(&s.l5service.discoverClusterCount, clusterCount) + } + } + } + + // 如果集群数为0,那么返回埋点的集群 + if clusterCount == 0 { + return service + } + + subIndex := clientIP%uint32(clusterCount) + 1 + subClusterName := fmt.Sprintf("%s.%d", clusterName, subIndex) + //log.Infof("[Cl5] ip(%d), clusterCount(%d), name(%s)", clientIP, clusterCount, subClusterName) // TODO + subService := s.getServiceCache(subClusterName, "Polaris") + if subService == nil { + log.Errorf("[Cl5] not found server cluster for ip(%d), cluster count(%d), cluster name(%s)", + clientIP, clusterCount, subClusterName) + return service + } + + return subService +} + +// 构造sidConfigs +func CreateCl5SidList(sidConfigs []*model.SidConfig) *l5.Cl5SidList { + if len(sidConfigs) == 0 { + return nil + } + + sidList := &l5.Cl5SidList{ + Sid: make([]*l5.Cl5SidObj, 0, len(sidConfigs)), + } + for _, entry := range sidConfigs { + obj := &l5.Cl5SidObj{ + ModId: proto.Int32(int32(entry.ModID)), + CmdId: proto.Int32(int32(entry.CmdID)), + Name: proto.String(entry.Name), + Policy: proto.Int32(int32(entry.Policy)), + } + sidList.Sid = append(sidList.Sid, obj) + } + + return sidList +} + +// 解析metadata保存的setID字符串 +func ParseSetID(str string) []string { + if str == "" { + return nil + } + + out := strings.Split(str, ",") + return out +} + +// 解析metadata保存的weight字符串 +func ParseWeight(str string) []uint32 { + if str == "" { + return nil + } + + items := strings.Split(str, ",") + if len(items) == 0 { + return nil + } + out := make([]uint32, 0, len(items)) + for _, item := range items { + data, err := strconv.ParseUint(item, 10, 32) + if err != nil { + log.Errorf("[L5Service] parse uint (%s) err: %s", item, err.Error()) + return nil + } + + out = append(out, uint32(data)) + } + + return out +} + +// 字符串IP转为uint32 +// 转换失败的,需要明确错误 +func ParseIPStr2Int(ip string) (uint32, error) { + ips := strings.Split(ip, ".") + if len(ips) != 4 { + log.Errorf("[l5Service] ip str(%s) is invalid", ip) + return 0, errors.New("ip string is invalid") + } + + out := uint32(0) + for i := 0; i < 4; i++ { + tmp, err := strconv.ParseUint(ips[i], 10, 64) + if err != nil { + log.Errorf("[L5Service] ip str(%s) to int is err: %s", ip, err.Error()) + return 0, err + } + + out = out | (uint32(tmp) << uint(i*8)) + } + + return out, nil +} + +// 字符串IP转为Int,V2 +func ParseIPStr2IntV2(ip string) uint32 { + item := 0 + var sum uint32 + var index uint + for i := 0; i < len(ip); i++ { + if ip[i] == '.' { + sum = sum | (uint32(item) << (index * 8)) + item = 0 + index++ + } else { + item = item*10 + int(ip[i]) - int('0') + } + } + + sum = sum | (uint32(item) << (index * 8)) + return sum +} + +// uint32的IP转换为字符串型 +func ParseIPInt2Str(ip uint32) string { + ipStr := make([]uint32, 4) + for i := 0; i < 4; i++ { + ipStr[i] = (ip >> uint(i*8)) & 255 + } + str := fmt.Sprintf("%d.%d.%d.%d", ipStr[0], ipStr[1], ipStr[2], ipStr[3]) + return str +} + +// 根据SID分析,返回其对应的namespace +func ComputeNamespace(modID uint32, cmdID uint32) string { + // 为了兼容老的sid,只对新的别名sid才生效 + // 老的sid都属于生产环境的 + // 3000001是新的moduleID的开始值 + if moduleID := modID >> 6; moduleID < 3000001 { + return DefaultNamespace + } + + layoutID := modID & 63 // 63 -> 111111 + namespace, ok := SidLayoutID2Namespace[layoutID] + if !ok { + // 找不到命名空间的,全部返回默认的,也就是Production + log.Warnf("sid(%d:%d) found the layoutID is(%d), not match the namespace list", + modID, cmdID, layoutID) + return DefaultNamespace + } + + log.Infof("Sid(%d:%d) layoutID(%d), the namespace is: %s", + modID, cmdID, layoutID, namespace) + return namespace +} diff --git a/naming/namespace.go b/naming/namespace.go new file mode 100644 index 000000000..2bbdd126d --- /dev/null +++ b/naming/namespace.go @@ -0,0 +1,488 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "go.uber.org/zap" + "time" +) + +/** + * @brief 批量创建命名空间 + */ +func (s *Server) CreateNamespaces(ctx context.Context, req []*api.Namespace) *api.BatchWriteResponse { + if checkError := checkBatchNamespace(req); checkError != nil { + return checkError + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, namespace := range req { + response := s.CreateNamespace(ctx, namespace) + responses.Collect(response) + } + + return responses +} + +/** + * @brief 创建单个命名空间 + */ +func (s *Server) CreateNamespace(ctx context.Context, req *api.Namespace) *api.Response { + requestID, _ := ctx.Value(utils.StringContext("request-id")).(string) + + // 参数检查 + if checkError := checkCreateNamespace(req); checkError != nil { + return checkError + } + + namespaceName := req.GetName().GetValue() + + // 检查是否存在 + namespace, err := s.storage.GetNamespace(namespaceName) + if err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + if namespace != nil { + return api.NewNamespaceResponse(api.ExistedResource, req) + } + + // + data := s.createNamespaceModel(req) + + // 存储层操作 + if err := s.storage.AddNamespace(data); err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + + msg := fmt.Sprintf("create namepsace: name=%v", namespaceName) + log.Info(msg, zap.String("request-id", requestID)) + s.RecordHistory(namespaceRecordEntry(ctx, req, model.OCreate)) + + out := &api.Namespace{ + Name: req.GetName(), + Token: utils.NewStringValue(data.Token), + } + + return api.NewNamespaceResponse(api.ExecuteSuccess, out) +} + +/** + * @brief 创建存储层命名空间模型 + */ +func (s *Server) createNamespaceModel(req *api.Namespace) *model.Namespace { + namespace := &model.Namespace{ + Name: req.GetName().GetValue(), + Comment: req.GetComment().GetValue(), + Owner: req.GetOwners().GetValue(), + Token: NewUUID(), + } + + return namespace +} + +/** + * @brief 批量删除命名空间 + */ +func (s *Server) DeleteNamespaces(ctx context.Context, req []*api.Namespace) *api.BatchWriteResponse { + if checkError := checkBatchNamespace(req); checkError != nil { + return checkError + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, namespace := range req { + response := s.DeleteNamespace(ctx, namespace) + responses.Collect(response) + } + + return responses +} + +/** + * @brief 删除单个命名空间 + */ +func (s *Server) DeleteNamespace(ctx context.Context, req *api.Namespace) *api.Response { + requestID, _ := ctx.Value(utils.StringContext("request-id")).(string) + + // 参数检查 + if checkError := checkReviseNamespace(ctx, req); checkError != nil { + return checkError + } + + tx, err := s.storage.CreateTransaction() + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + defer func() { _ = tx.Commit() }() + + // 检查是否存在 + namespace, err := tx.LockNamespace(req.GetName().GetValue()) + if err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + if namespace == nil { + return api.NewNamespaceResponse(api.ExecuteSuccess, req) + } + + // 鉴权 + if ok := s.authority.VerifyNamespace(namespace.Token, parseNamespaceToken(ctx, req)); !ok { + return api.NewNamespaceResponse(api.Unauthorized, req) + } + + // 判断属于该命名空间的服务是否都已经被删除 + total, err := s.getServicesCountWithNamespace(namespace.Name) + if err != nil { + log.Error("get services count with namespace err", + zap.String("request-id", requestID), + zap.String("err", err.Error())) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + if total != 0 { + log.Error("the removed namespace has remain services", zap.String("request-id", requestID)) + return api.NewNamespaceResponse(api.NamespaceExistedServices, req) + } + + // 判断属于该命名空间的熔断规则是否都已经被删除 + total, err = s.getCircuitBreakerCountWithNamespace(namespace.Name) + if err != nil { + log.Error("get circuitBreakers count with namespace err", + zap.String("request-id", requestID), + zap.String("err", err.Error())) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + if total != 0 { + log.Error("the removed namespace has remain circuitBreakers", zap.String("request-id", requestID)) + return api.NewNamespaceResponse(api.NamespaceExistedCircuitBreakers, req) + } + + // 存储层操作 + if err := tx.DeleteNamespace(namespace.Name); err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + + msg := fmt.Sprintf("delete namepsace: name=%v", namespace.Name) + log.Info(msg, zap.String("request-id", requestID)) + s.RecordHistory(namespaceRecordEntry(ctx, req, model.ODelete)) + + return api.NewNamespaceResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量修改命名空间 + */ +func (s *Server) UpdateNamespaces(ctx context.Context, req []*api.Namespace) *api.BatchWriteResponse { + if checkError := checkBatchNamespace(req); checkError != nil { + return checkError + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, namespace := range req { + response := s.UpdateNamespace(ctx, namespace) + responses.Collect(response) + } + + return responses +} + +/** + * @brief 修改单个命名空间 + */ +func (s *Server) UpdateNamespace(ctx context.Context, req *api.Namespace) *api.Response { + // 参数检查 + if resp := checkReviseNamespace(ctx, req); resp != nil { + return resp + } + + // 权限校验 + namespace, resp := s.checkNamespaceAuthority(ctx, req) + if resp != nil { + return resp + } + + rid := ParseRequestID(ctx) + // 修改 + s.updateNamespaceAttribute(req, namespace) + + // 存储层操作 + if err := s.storage.UpdateNamespace(namespace); err != nil { + log.Error(err.Error(), zap.String("request-id", rid)) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + + msg := fmt.Sprintf("update namepsace: name=%v", namespace.Name) + log.Info(msg, zap.String("request-id", rid)) + s.RecordHistory(namespaceRecordEntry(ctx, req, model.OUpdate)) + + return api.NewNamespaceResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 修改命名空间属性 + */ +func (s *Server) updateNamespaceAttribute(req *api.Namespace, namespace *model.Namespace) { + if req.GetComment() != nil { + namespace.Comment = req.GetComment().GetValue() + } + + if req.GetOwners() != nil { + namespace.Owner = req.GetOwners().GetValue() + } +} + +/** + * @brief 更新命名空间token + */ +func (s *Server) UpdateNamespaceToken(ctx context.Context, req *api.Namespace) *api.Response { + if resp := checkReviseNamespace(ctx, req); resp != nil { + return resp + } + namespace, resp := s.checkNamespaceAuthority(ctx, req) + if resp != nil { + return resp + } + + rid := ParseRequestID(ctx) + // 生成token + token := NewUUID() + + // 存储层操作 + if err := s.storage.UpdateNamespaceToken(namespace.Name, token); err != nil { + log.Error(err.Error(), zap.String("request-id", rid)) + return api.NewNamespaceResponse(api.StoreLayerException, req) + } + + msg := fmt.Sprintf("update namepsace token: name=%v", namespace.Name) + log.Info(msg, zap.String("request-id", rid)) + s.RecordHistory(namespaceRecordEntry(ctx, req, model.OUpdateToken)) + + out := &api.Namespace{ + Name: req.GetName(), + Token: utils.NewStringValue(token), + } + + return api.NewNamespaceResponse(api.ExecuteSuccess, out) +} + +/** + * @brief 查询命名空间 + */ +func (s *Server) GetNamespaces(query map[string][]string) *api.BatchQueryResponse { + filter, offset, limit, checkError := checkGetNamespace(query) + if checkError != nil { + return checkError + } + + namespaces, amount, err := s.storage.GetNamespaces(filter, offset, limit) + if err != nil { + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + out := api.NewBatchQueryResponse(api.ExecuteSuccess) + out.Amount = utils.NewUInt32Value(amount) + out.Size = utils.NewUInt32Value(uint32(len(namespaces))) + for _, namespace := range namespaces { + out.AddNamespace(&api.Namespace{ + Name: utils.NewStringValue(namespace.Name), + Comment: utils.NewStringValue(namespace.Comment), + Owners: utils.NewStringValue(namespace.Owner), + Ctime: utils.NewStringValue(time2String(namespace.CreateTime)), + Mtime: utils.NewStringValue(time2String(namespace.ModifyTime)), + }) + } + + return out +} + +// 获取命名空间的token +func (s *Server) GetNamespaceToken(ctx context.Context, req *api.Namespace) *api.Response { + if resp := checkReviseNamespace(ctx, req); resp != nil { + return resp + } + + namespace, resp := s.checkNamespaceAuthority(ctx, req) + if resp != nil { + return resp + } + + //s.RecordHistory(namespaceRecordEntry(ctx, req, model.OGetToken)) + // 构造返回数据 + out := &api.Namespace{ + Name: req.GetName(), + Token: utils.NewStringValue(namespace.Token), + } + return api.NewNamespaceResponse(api.ExecuteSuccess, out) +} + +// 根据命名空间查询服务总数 +func (s *Server) getServicesCountWithNamespace(namespace string) (uint32, error) { + filter := map[string]string{"namespace": namespace} + total, _, err := s.storage.GetServices(filter, nil, nil, 0, 1) + if err != nil { + return 0, err + } + return total, nil +} + +// 根据命名空间查询熔断规则数量 +func (s *Server) getCircuitBreakerCountWithNamespace(namespace string) (uint32, error) { + filter := map[string]string{"namespace": namespace} + details, err := s.storage.ListMasterCircuitBreakers(filter, 0, 1) + if err != nil { + return 0, err + } + return details.Total, nil +} + +// 检查namespace的权限,并且返回namespace +func (s *Server) checkNamespaceAuthority(ctx context.Context, req *api.Namespace) (*model.Namespace, *api.Response) { + rid := ParseRequestID(ctx) + namespaceName := req.GetName().GetValue() + namespaceToken := parseNamespaceToken(ctx, req) + + // 检查是否存在 + namespace, err := s.storage.GetNamespace(namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return nil, api.NewNamespaceResponse(api.StoreLayerException, req) + } + if namespace == nil { + return nil, api.NewNamespaceResponse(api.NotFoundResource, req) + } + + // 鉴权 + if ok := s.authority.VerifyNamespace(namespace.Token, namespaceToken); !ok { + return nil, api.NewNamespaceResponse(api.Unauthorized, req) + } + + return namespace, nil +} + +/* + * @brief 检查批量请求 + */ +func checkBatchNamespace(req []*api.Namespace) *api.BatchWriteResponse { + if len(req) == 0 { + return api.NewBatchWriteResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchWriteResponse(api.BatchSizeOverLimit) + } + + return nil +} + +/* + * @brief 检查创建命名空间请求参数 + */ +func checkCreateNamespace(req *api.Namespace) *api.Response { + if req == nil { + return api.NewNamespaceResponse(api.EmptyRequest, req) + } + + if err := checkResourceName(req.GetName()); err != nil { + return api.NewNamespaceResponse(api.InvalidNamespaceName, req) + } + + if err := checkResourceOwners(req.GetOwners()); err != nil { + return api.NewNamespaceResponse(api.InvalidNamespaceOwners, req) + } + + return nil +} + +/* + * @brief 检查删除/修改命名空间请求参数 + */ +func checkReviseNamespace(ctx context.Context, req *api.Namespace) *api.Response { + if req == nil { + return api.NewNamespaceResponse(api.EmptyRequest, req) + } + + if err := checkResourceName(req.GetName()); err != nil { + return api.NewNamespaceResponse(api.InvalidNamespaceName, req) + } + + if token := parseNamespaceToken(ctx, req); token == "" { + return api.NewNamespaceResponse(api.InvalidNamespaceToken, req) + } + + return nil +} + +/* + * @brief 检查查询命名空间请求参数 + */ +func checkGetNamespace(query map[string][]string) (map[string][]string, int, int, *api.BatchQueryResponse) { + filter := make(map[string][]string) + + if value := query["name"]; len(value) > 0 { + filter["name"] = value + } + + if value := query["owner"]; len(value) > 0 { + filter["owner"] = value + } + + offset, err := checkQueryOffset(query["offset"]) + if err != nil { + return nil, 0, 0, api.NewBatchQueryResponse(api.InvalidParameter) + } + + limit, err := checkQueryLimit(query["limit"]) + if err != nil { + return nil, 0, 0, api.NewBatchQueryResponse(api.InvalidParameter) + } + + return filter, offset, limit, nil +} + +// 返回命名空间请求的token +// 默认先从req中获取,不存在,则使用header的 +func parseNamespaceToken(ctx context.Context, req *api.Namespace) string { + if reqToken := req.GetToken().GetValue(); reqToken != "" { + return reqToken + } + + if headerToken := ParseToken(ctx); headerToken != "" { + return headerToken + } + + return "" +} + +// 生成命名空间的记录entry +func namespaceRecordEntry(ctx context.Context, req *api.Namespace, opt model.OperationType) *model.RecordEntry { + return &model.RecordEntry{ + ResourceType: model.RNamespace, + OperationType: opt, + Namespace: req.GetName().GetValue(), + Operator: ParseOperator(ctx), + CreateTime: time.Now(), + } +} diff --git a/naming/platform.go b/naming/platform.go new file mode 100644 index 000000000..b775dfdd8 --- /dev/null +++ b/naming/platform.go @@ -0,0 +1,573 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "errors" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/golang/protobuf/ptypes/wrappers" + "go.uber.org/zap" + "regexp" + "unicode/utf8" +) + +var ( + platformFilterAttributes = map[string]bool{ + "id": true, + "name": true, + "owner": true, + "department": true, + "offset": true, + "limit": true, + } +) + +/** + * @brief 批量创建平台信息 + */ +func (s *Server) CreatePlatforms(ctx context.Context, req []*api.Platform) *api.BatchWriteResponse { + if checkErr := checkBatchPlatform(req); checkErr != nil { + return checkErr + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, platform := range req { + response := s.CreatePlatform(ctx, platform) + responses.Collect(response) + } + + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 创建单个平台 + */ +func (s *Server) CreatePlatform(ctx context.Context, req *api.Platform) *api.Response { + requestID := ParseRequestID(ctx) + + // 参数检查 + if err := checkPlatformParams(req); err != nil { + return err + } + + // 检查平台信息是否存在 + platform, err := s.storage.GetPlatformById(req.GetId().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewPlatformResponse(api.StoreLayerException, req) + } + + if platform != nil { + return api.NewPlatformResponse(api.ExistedResource, req) + } + + // 存储层操作 + data := createPlatformModel(req) + if err := s.storage.CreatePlatform(data); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return wrapperPlatformStoreResponse(req, err) + } + + msg := fmt.Sprintf("create platform: id=%s", req.GetId().GetValue()) + log.Info(msg, ZapRequestID(requestID)) + + // todo 打印操作记录 + + // 返回请求结果 + req.Token = utils.NewStringValue(data.Token) + + return api.NewPlatformResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量修改平台 + */ +func (s *Server) UpdatePlatforms(ctx context.Context, req []*api.Platform) *api.BatchWriteResponse { + if checkErr := checkBatchPlatform(req); checkErr != nil { + return checkErr + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, platform := range req { + response := s.UpdatePlatform(ctx, platform) + responses.Collect(response) + } + + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 修改平台信息 + */ +func (s *Server) UpdatePlatform(ctx context.Context, req *api.Platform) *api.Response { + requestID := ParseRequestID(ctx) + + // 参数检查 + if err := checkPlatformParams(req); err != nil { + return err + } + // 检查token + if token := parsePlatformToken(ctx, req); token == "" { + return api.NewPlatformResponse(api.InvalidPlatformToken, req) + } + + platform, resp := s.checkRevisePlatform(ctx, req) + if resp != nil { + return resp + } + + // 判断是否需要更新 + needUpdate := s.updatePlatformAttribute(req, platform) + if !needUpdate { + log.Info("update platform data no change, no need update", ZapRequestID(requestID), + zap.String("platform", req.String())) + return api.NewPlatformResponse(api.NoNeedUpdate, req) + } + + // 执行存储层操作 + if err := s.storage.UpdatePlatform(platform); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return wrapperPlatformStoreResponse(req, err) + } + + msg := fmt.Sprintf("update platform: %+v", platform) + log.Info(msg, ZapRequestID(requestID)) + // todo 操作记录 + + return api.NewPlatformResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量删除平台信息 + */ +func (s *Server) DeletePlatforms(ctx context.Context, req []*api.Platform) *api.BatchWriteResponse { + if checkErr := checkBatchPlatform(req); checkErr != nil { + return checkErr + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, platform := range req { + response := s.DeletePlatform(ctx, platform) + responses.Collect(response) + } + + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 删除平台信息 + */ +func (s *Server) DeletePlatform(ctx context.Context, req *api.Platform) *api.Response { + requestID := ParseRequestID(ctx) + + // 参数检查 + if err := checkDeletePlatformParams(ctx, req); err != nil { + return err + } + + // 检查平台是否存在并鉴权 + if _, resp := s.checkRevisePlatform(ctx, req); resp != nil { + if resp.GetCode().GetValue() == api.NotFoundPlatform { + return api.NewPlatformResponse(api.ExecuteSuccess, req) + } + return resp + } + + // 执行存储层操作 + if err := s.storage.DeletePlatform(req.GetId().GetValue()); err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return wrapperPlatformStoreResponse(req, err) + } + + msg := fmt.Sprintf("delete platform: id=%s", req.GetId().GetValue()) + log.Info(msg, ZapRequestID(requestID)) + + // todo 操作记录 + + return api.NewPlatformResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 查询平台信息 + */ +func (s *Server) GetPlatforms(query map[string]string) *api.BatchQueryResponse { + for key := range query { + if _, ok := platformFilterAttributes[key]; !ok { + log.Errorf("get platforms attribute(%s) is not allowed", key) + return api.NewBatchQueryResponseWithMsg(api.InvalidParameter, key+" is not allowed") + } + } + + // 处理offset和limit + offset, limit, err := ParseOffsetAndLimit(query) + if err != nil { + return api.NewBatchQueryResponseWithMsg(api.InvalidParameter, err.Error()) + } + + total, platforms, err := s.storage.GetPlatforms(query, offset, limit) + if err != nil { + log.Errorf("get platforms store err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + resp.Amount = utils.NewUInt32Value(total) + resp.Size = utils.NewUInt32Value(uint32(len(platforms))) + resp.Platforms = platforms2API(platforms) + return resp +} + +/** + * @brief 查询平台Token + */ +func (s *Server) GetPlatformToken(ctx context.Context, req *api.Platform) *api.Response { + // 参数检查 + if err := checkDeletePlatformParams(ctx, req); err != nil { + return err + } + + // 检查平台是否存在并鉴权 + platform, resp := s.checkRevisePlatform(ctx, req) + if resp != nil { + return resp + } + + req.Token = utils.NewStringValue(platform.Token) + return api.NewPlatformResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 检查批量请求 + */ +func checkBatchPlatform(req []*api.Platform) *api.BatchWriteResponse { + if len(req) == 0 { + return api.NewBatchWriteResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchWriteResponse(api.BatchSizeOverLimit) + } + + return nil +} + +/** + * @brief 检查创建/修改平台参数 + */ +func checkPlatformParams(req *api.Platform) *api.Response { + if req == nil { + return api.NewPlatformResponse(api.EmptyRequest, req) + } + + if err := checkPlatformID(req.GetId()); err != nil { + return api.NewPlatformResponseWithMsg(api.InvalidPlatformID, req, err.Error()) + } + + if err := checkPlatformName(req.GetName()); err != nil { + return api.NewPlatformResponseWithMsg(api.InvalidPlatformName, req, err.Error()) + } + + if err := checkPlatformDomain(req.GetDomain()); err != nil { + return api.NewPlatformResponseWithMsg(api.InvalidPlatformDomain, req, err.Error()) + } + + if err := checkPlatformQPS(req.GetQps()); err != nil { + return api.NewPlatformResponseWithMsg(api.InvalidPlatformQPS, req, err.Error()) + } + + if err := checkResourceOwners(req.GetOwner()); err != nil { + return api.NewPlatformResponseWithMsg(api.InvalidPlatformOwner, req, err.Error()) + } + + if err := checkPlatformDepartment(req.GetDepartment()); err != nil { + return api.NewPlatformResponseWithMsg(api.InvalidPlatformDepartment, req, err.Error()) + } + + if err := checkPlatformComment(req.GetComment()); err != nil { + return api.NewPlatformResponseWithMsg(api.InvalidPlatformComment, req, err.Error()) + } + + return nil +} + +/** + * @brief 检查删除平台参数 + */ +func checkDeletePlatformParams(ctx context.Context, req *api.Platform) *api.Response { + if req == nil { + return api.NewPlatformResponse(api.EmptyRequest, req) + } + + if err := checkPlatformID(req.GetId()); err != nil { + return api.NewPlatformResponse(api.InvalidPlatformID, req) + } + + // 检查token + if token := parsePlatformToken(ctx, req); token == "" { + return api.NewPlatformResponse(api.InvalidPlatformToken, req) + } + + return nil +} + +/** + * @brief 修改和删除平台信息的公共检查 + */ +func (s *Server) checkRevisePlatform(ctx context.Context, req *api.Platform) (*model.Platform, *api.Response) { + requestID := ParseRequestID(ctx) + + // 检查平台是否存在 + platform, err := s.storage.GetPlatformById(req.GetId().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return nil, api.NewPlatformResponse(api.StoreLayerException, req) + } + if platform == nil { + return nil, api.NewPlatformResponse(api.NotFoundPlatform, req) + } + + // 鉴权 + if ok := s.authority.VerifyPlatform(platform.Token, parsePlatformToken(ctx, req)); !ok { + return nil, api.NewPlatformResponse(api.Unauthorized, req) + } + return platform, nil +} + +/** + * @brief 检查平台ID + */ +func checkPlatformID(id *wrappers.StringValue) error { + if id == nil { + return errors.New("id is nil") + } + + if id.GetValue() == "" { + return errors.New("id is empty") + } + + // 允许0-9 a-z A-Z - . _ + regStr := "^[0-9A-Za-z-._]+$" + ok, err := regexp.MatchString(regStr, id.GetValue()) + if err != nil { + return err + } + if !ok { + return errors.New("platform id contains invalid character") + } + + if utf8.RuneCountInString(id.GetValue()) > MaxPlatformIDLength { + return errors.New("platform id too long") + } + + return nil +} + +/** + * @brief 检查平台Name + */ +func checkPlatformName(name *wrappers.StringValue) error { + if name.GetValue() == "" { + return errors.New("name is empty") + } + + if utf8.RuneCountInString(name.GetValue()) > MaxPlatformNameLength { + return errors.New("name too long") + } + + return nil +} + +/** + * @brief 检查平台域名 + */ +func checkPlatformDomain(domain *wrappers.StringValue) error { + if domain.GetValue() == "" { + return errors.New("domain is empty") + } + + if utf8.RuneCountInString(domain.GetValue()) > MaxPlatformDomainLength { + return errors.New("domain too long") + } + + return nil +} + +/** + * @brief 检查QPS + */ +func checkPlatformQPS(qps *wrappers.UInt32Value) error { + if qps.GetValue() == 0 { + return errors.New("qps is empty") + } + + if qps.GetValue() > MaxPlatformQPS { + return errors.New("qps too long") + } + return nil +} + +/** + * @brief 检查部门 + */ +func checkPlatformDepartment(department *wrappers.StringValue) error { + if department.GetValue() == "" { + return errors.New("department is empty") + } + + if utf8.RuneCountInString(department.GetValue()) > MaxDepartmentLength { + return errors.New("department too long") + } + + return nil +} + +/** + * @brief 检查描述 + */ +func checkPlatformComment(comment *wrappers.StringValue) error { + if comment.GetValue() == "" { + return errors.New("comment is empty") + } + + if utf8.RuneCountInString(comment.GetValue()) > MaxCommentLength { + return errors.New("comment too long") + } + return nil +} + +/** + * @brief 创建存储层模型 + */ +func createPlatformModel(req *api.Platform) *model.Platform { + platform := &model.Platform{ + ID: req.GetId().GetValue(), + Name: req.GetName().GetValue(), + Domain: req.GetDomain().GetValue(), + QPS: req.GetQps().GetValue(), + Token: NewUUID(), + Owner: req.GetOwner().GetValue(), + Department: req.GetDepartment().GetValue(), + Comment: req.GetComment().GetValue(), + } + + return platform +} + +/** + * @brief platform数组转换为[]*api.Platform + */ +func platforms2API(platforms []*model.Platform) []*api.Platform { + out := make([]*api.Platform, 0, len(platforms)) + for _, entry := range platforms { + out = append(out, platform2Api(entry)) + } + + return out +} + +/** + * @brief model.Platform转为api.Platform + */ +func platform2Api(platform *model.Platform) *api.Platform { + if platform == nil { + return nil + } + + // token不返回 + out := &api.Platform{ + Id: utils.NewStringValue(platform.ID), + Name: utils.NewStringValue(platform.Name), + Domain: utils.NewStringValue(platform.Domain), + Qps: utils.NewUInt32Value(platform.QPS), + Owner: utils.NewStringValue(platform.Owner), + Department: utils.NewStringValue(platform.Department), + Comment: utils.NewStringValue(platform.Comment), + Ctime: utils.NewStringValue(time2String(platform.CreateTime)), + Mtime: utils.NewStringValue(time2String(platform.ModifyTime)), + } + + return out +} + +/** + * @brief 修改平台字段 + */ +func (s *Server) updatePlatformAttribute(req *api.Platform, platform *model.Platform) bool { + needUpdate := false + + if req.GetName() != nil && req.GetName().GetValue() != platform.Name { + platform.Name = req.GetName().GetValue() + needUpdate = true + } + + if req.GetDomain() != nil && req.GetDomain().GetValue() != platform.Domain { + platform.Domain = req.GetDomain().GetValue() + needUpdate = true + } + + if req.GetQps() != nil && req.GetQps().GetValue() != platform.QPS { + platform.QPS = req.GetQps().GetValue() + needUpdate = true + } + + if req.GetOwner() != nil && req.GetOwner().GetValue() != platform.Owner { + platform.Owner = req.GetOwner().GetValue() + needUpdate = true + } + + if req.GetDepartment() != nil && req.GetDepartment().GetValue() != platform.Department { + platform.Department = req.GetDepartment().GetValue() + needUpdate = true + } + + if req.GetComment() != nil && req.GetComment().GetValue() != platform.Comment { + platform.Comment = req.GetComment().GetValue() + needUpdate = true + } + + return needUpdate +} + +/** + * @brief 封装存储层错误 + */ +func wrapperPlatformStoreResponse(platform *api.Platform, err error) *api.Response { + resp := storeError2Response(err) + if resp == nil { + return nil + } + + resp.Platform = platform + return resp +} + +/** + * @brief 获取平台的token信息 + */ +func parsePlatformToken(ctx context.Context, req *api.Platform) string { + if token := req.GetToken().GetValue(); token != "" { + return token + } + + return ParseToken(ctx) +} diff --git a/naming/ratelimit_config.go b/naming/ratelimit_config.go new file mode 100644 index 000000000..fc229d2fe --- /dev/null +++ b/naming/ratelimit_config.go @@ -0,0 +1,570 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "encoding/json" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/golang/protobuf/ptypes" + "time" +) + +var ( + RateLimitFilters = map[string]bool{ + "service": true, + "namespace": true, + "labels": true, + "offset": true, + "limit": true, + } +) + +/** + * @brief 批量创建限流规则 + */ +func (s *Server) CreateRateLimits(ctx context.Context, request []*api.Rule) *api.BatchWriteResponse { + if err := checkBatchRateLimits(request); err != nil { + return err + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, rateLimit := range request { + response := s.CreateRateLimit(ctx, rateLimit) + responses.Collect(response) + } + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 创建限流规则 + */ +func (s *Server) CreateRateLimit(ctx context.Context, req *api.Rule) *api.Response { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + + // 参数校验 + if resp := checkRateLimitParams(req); resp != nil { + return resp + } + + if resp := checkRateLimitRuleParams(requestID, req); resp != nil { + return resp + } + + tx, err := s.storage.CreateTransaction() + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return api.NewRateLimitResponse(api.StoreLayerException, req) + } + defer func() { + _ = tx.Commit() + }() + + // 锁住服务,防止服务被删除 + service, err := tx.RLockService(req.GetService().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return api.NewRateLimitResponse(api.StoreLayerException, req) + } + if service == nil { + return api.NewRateLimitResponse(api.NotFoundService, req) + } + if service.IsAlias() { + return api.NewRateLimitResponse(api.NotAllowAliasCreateRateLimit, req) + } + if err := s.verifyRateLimitAuth(ctx, service, req); err != nil { + return err + } + + clusterID := "" + + // 构造底层数据结构 + data, err := api2RateLimit(service.ID, clusterID, req) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewRateLimitResponse(api.ParseRateLimitException, req) + } + data.ID = NewUUID() + + // 存储层操作 + if err := s.storage.CreateRateLimit(data); err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return wrapperRateLimitStoreResponse(req, err) + } + + msg := fmt.Sprintf("create rate limit rule: id=%v, namespace=%v, service=%v, labels=%v", + data.ID, req.GetNamespace().GetValue(), req.GetService().GetValue(), data.Labels) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + + s.RecordHistory(rateLimitRecordEntry(ctx, req.GetNamespace().GetValue(), req.GetService().GetValue(), + data, model.OCreate)) + + req.Id = utils.NewStringValue(data.ID) + return api.NewRateLimitResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量删除限流规则 + */ +func (s *Server) DeleteRateLimits(ctx context.Context, request []*api.Rule) *api.BatchWriteResponse { + if err := checkBatchRateLimits(request); err != nil { + return err + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, entry := range request { + resp := s.DeleteRateLimit(ctx, entry) + responses.Collect(resp) + } + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 删除单个限流规则 + */ +func (s *Server) DeleteRateLimit(ctx context.Context, req *api.Rule) *api.Response { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + + // 参数校验 + if resp := checkRevisedRateLimitParams(req); resp != nil { + return resp + } + + // 检查限流规则是否存在 + rateLimit, resp := s.checkRateLimitExisted(req.GetId().GetValue(), requestID, req) + if resp != nil { + if resp.GetCode().GetValue() == api.NotFoundRateLimit { + return api.NewRateLimitResponse(api.ExecuteSuccess, req) + } + return resp + } + + // 鉴权 + service, resp := s.checkRateLimitValid(ctx, rateLimit.ServiceID, req) + if resp != nil { + return resp + } + + // 生成新的revision + rateLimit.Revision = NewUUID() + + // 存储层操作 + if err := s.storage.DeleteRateLimit(rateLimit); err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return wrapperRateLimitStoreResponse(req, err) + } + + msg := fmt.Sprintf("delete rate limit rule: id=%v, namespace=%v, service=%v, labels=%v", + rateLimit.ID, service.Namespace, service.Name, rateLimit.Labels) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + + s.RecordHistory(rateLimitRecordEntry(ctx, service.Namespace, service.Name, rateLimit, model.ODelete)) + return api.NewRateLimitResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量更新限流规则 + */ +func (s *Server) UpdateRateLimits(ctx context.Context, request []*api.Rule) *api.BatchWriteResponse { + if err := checkBatchRateLimits(request); err != nil { + return err + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, entry := range request { + response := s.UpdateRateLimit(ctx, entry) + responses.Collect(response) + } + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 更新限流规则 + */ +func (s *Server) UpdateRateLimit(ctx context.Context, req *api.Rule) *api.Response { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + + // 参数校验 + if resp := checkRevisedRateLimitParams(req); resp != nil { + return resp + } + + if resp := checkRateLimitRuleParams(requestID, req); resp != nil { + return resp + } + + // 检查限流规则是否存在 + data, resp := s.checkRateLimitExisted(req.GetId().GetValue(), requestID, req) + if resp != nil { + return resp + } + + // 鉴权 + service, resp := s.checkRateLimitValid(ctx, data.ServiceID, req) + if resp != nil { + return resp + } + + clusterID := "" + + // 构造底层数据结构 + rateLimit, err := api2RateLimit(service.ID, clusterID, req) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return api.NewRateLimitResponse(api.ParseRateLimitException, req) + } + rateLimit.ID = data.ID + + if err := s.storage.UpdateRateLimit(rateLimit); err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return wrapperRateLimitStoreResponse(req, err) + } + + msg := fmt.Sprintf("update rate limit: id=%v, namespace=%v, service=%v, labels=%v", + rateLimit.ID, service.Namespace, service.Name, rateLimit.Labels) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + + s.RecordHistory(rateLimitRecordEntry(ctx, service.Namespace, service.Name, rateLimit, model.OUpdate)) + return api.NewRateLimitResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 查询限流规则 + */ +func (s *Server) GetRateLimits(query map[string]string) *api.BatchQueryResponse { + for key := range query { + if _, ok := RateLimitFilters[key]; !ok { + log.Errorf("params %s is not allowed in querying rate limits", key) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + } + + // service转化为name + if serviceName, ok := query["service"]; ok { + query["name"] = serviceName + delete(query, "service") + } + + // 处理offset和limit + offset, limit, err := ParseOffsetAndLimit(query) + if err != nil { + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + total, extendRateLimits, err := s.storage.GetExtendRateLimits(query, offset, limit) + if err != nil { + log.Errorf("get rate limits store err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + out := api.NewBatchQueryResponse(api.ExecuteSuccess) + out.Amount = utils.NewUInt32Value(total) + out.Size = utils.NewUInt32Value(uint32(len(extendRateLimits))) + out.RateLimits = make([]*api.Rule, 0, len(extendRateLimits)) + for _, item := range extendRateLimits { + limit, err := rateLimit2api(item.ServiceName, item.NamespaceName, item.RateLimit) + if err != nil { + log.Errorf("get rate limits convert err: %s", err.Error()) + return api.NewBatchQueryResponse(api.ParseRateLimitException) + } + out.RateLimits = append(out.RateLimits, limit) + } + + return out +} + +/** + * @brief 检查批量请求 + */ +func checkBatchRateLimits(req []*api.Rule) *api.BatchWriteResponse { + if len(req) == 0 { + return api.NewBatchWriteResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchWriteResponse(api.BatchSizeOverLimit) + } + + return nil +} + +/** + * @brief 检查限流规则是否允许修改/删除 + */ +func (s *Server) checkRateLimitValid(ctx context.Context, serviceID string, req *api.Rule) ( + *model.Service, *api.Response) { + requestID := ParseRequestID(ctx) + + service, err := s.storage.GetServiceByID(serviceID) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return nil, api.NewRateLimitResponse(api.StoreLayerException, req) + } + + if err := s.verifyRateLimitAuth(ctx, service, req); err != nil { + return nil, err + } + return service, nil +} + +/** + * @brief 检查限流规则基础参数 + */ +func checkRateLimitParams(req *api.Rule) *api.Response { + if req == nil { + return api.NewRateLimitResponse(api.EmptyRequest, req) + } + if err := checkResourceName(req.GetNamespace()); err != nil { + return api.NewRateLimitResponse(api.InvalidNamespaceName, req) + } + if err := checkResourceName(req.GetService()); err != nil { + return api.NewRateLimitResponse(api.InvalidServiceName, req) + } + if err := CheckDbStrFieldLen(req.GetService(), MaxDbServiceNameLength); err != nil { + return api.NewRateLimitResponse(api.InvalidServiceName, req) + } + if err := CheckDbStrFieldLen(req.GetNamespace(), MaxDbServiceNamespaceLength); err != nil { + return api.NewRateLimitResponse(api.InvalidNamespaceName, req) + } + if err := CheckDbStrFieldLen(req.GetServiceToken(), MaxDbServiceToken); err != nil { + return api.NewRateLimitResponse(api.InvalidServiceToken, req) + } + return nil +} + +/* + * @brief 检查限流规则其他参数 + */ +func checkRateLimitRuleParams(requestID string, req *api.Rule) *api.Response { + // 检查业务维度标签 + if req.GetLabels() == nil { + return api.NewRateLimitResponse(api.InvalidRateLimitLabels, req) + } + // 检查amounts是否有重复周期 + amounts := req.GetAmounts() + durations := make(map[time.Duration]bool) + for _, amount := range amounts { + d := amount.GetValidDuration() + duration, err := ptypes.Duration(d) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return api.NewRateLimitResponse(api.InvalidRateLimitAmounts, req) + } + durations[duration] = true + } + if len(amounts) != len(durations) { + return api.NewRateLimitResponse(api.InvalidRateLimitAmounts, req) + } + return nil +} + +/** + * @brief 检查修改/删除限流规则基础参数 + */ +func checkRevisedRateLimitParams(req *api.Rule) *api.Response { + if req == nil { + return api.NewRateLimitResponse(api.EmptyRequest, req) + } + if req.GetId().GetValue() == "" { + return api.NewRateLimitResponse(api.InvalidRateLimitID, req) + } + return nil +} + +/** + * @brief 检查限流规则是否存在 + */ +func (s *Server) checkRateLimitExisted(id, requestID string, req *api.Rule) (*model.RateLimit, *api.Response) { + rateLimit, err := s.storage.GetRateLimitWithID(id) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID)) + return nil, api.NewRateLimitResponse(api.StoreLayerException, req) + } + if rateLimit == nil { + return nil, api.NewRateLimitResponse(api.NotFoundRateLimit, req) + } + return rateLimit, nil +} + +/** + * @brief 获取限流规则请求的token信息 + */ +func parseRateLimitReqToken(ctx context.Context, req *api.Rule) string { + if reqToken := req.GetServiceToken().GetValue(); reqToken != "" { + return reqToken + } + + return ParseToken(ctx) +} + +/** + * @brief 限流鉴权 + */ +func (s *Server) verifyRateLimitAuth(ctx context.Context, service *model.Service, req *api.Rule) *api.Response { + // 使用平台id及token鉴权 + if ok := s.verifyAuthByPlatform(ctx, service.PlatformID); !ok { + // 检查token是否存在 + token := parseRateLimitReqToken(ctx, req) + if !s.authority.VerifyToken(token) { + return api.NewRateLimitResponse(api.InvalidServiceToken, req) + } + + // 检查token是否ok + if ok := s.authority.VerifyService(service.Token, token); !ok { + return api.NewRateLimitResponse(api.Unauthorized, req) + } + } + + return nil +} + +/** + * @brief 把API参数转化为内部数据结构 + */ +func api2RateLimit(serviceID string, clusterID string, req *api.Rule) (*model.RateLimit, error) { + labels, err := marshalRateLimitLabels(req.GetLabels()) + if err != nil { + return nil, err + } + rule, err := marshalRateLimitRules(req) + if err != nil { + return nil, err + } + + out := &model.RateLimit{ + ServiceID: serviceID, + ClusterID: clusterID, + Labels: labels, + Priority: req.GetPriority().GetValue(), + Rule: rule, + Revision: NewUUID(), + } + return out, nil +} + +/** + * @brief 把内部数据结构转化为API参数 + */ +func rateLimit2api(service string, namespace string, rateLimit *model.RateLimit) ( + *api.Rule, error) { + if rateLimit == nil { + return nil, nil + } + + rule := &api.Rule{} + + // 反序列化rule + if err := json.Unmarshal([]byte(rateLimit.Rule), rule); err != nil { + return nil, err + } + + // 反序列化labels + labels := make(map[string]*api.MatchString) + if err := json.Unmarshal([]byte(rateLimit.Labels), &labels); err != nil { + return nil, err + } + + // 暂时不返回Cluster + rule.Id = utils.NewStringValue(rateLimit.ID) + rule.Service = utils.NewStringValue(service) + rule.Namespace = utils.NewStringValue(namespace) + rule.Priority = utils.NewUInt32Value(rateLimit.Priority) + rule.Labels = labels + rule.Ctime = utils.NewStringValue(time2String(rateLimit.CreateTime)) + rule.Mtime = utils.NewStringValue(time2String(rateLimit.ModifyTime)) + rule.Revision = utils.NewStringValue(rateLimit.Revision) + + return rule, nil +} + +/** + * @brief 格式化限流规则labels + */ +func marshalRateLimitLabels(l map[string]*api.MatchString) (string, error) { + labels, err := json.Marshal(l) + if err != nil { + return "", err + } + return string(labels), nil +} + +/** + * @brief 序列化限流规则具体内容 + */ +func marshalRateLimitRules(req *api.Rule) (string, error) { + r := &api.Rule{ + Subset: req.GetSubset(), + Resource: req.GetResource(), + Type: req.GetType(), + Amounts: req.GetAmounts(), + Action: req.GetAction(), + Disable: req.GetDisable(), + Report: req.GetReport(), + Adjuster: req.GetAdjuster(), + RegexCombine: req.GetRegexCombine(), + AmountMode: req.GetAmountMode(), + Failover: req.GetFailover(), + Cluster: req.GetCluster(), + } + + rule, err := json.Marshal(r) + if err != nil { + return "", err + } + return string(rule), nil +} + +/** + * @brief 构建rateLimit的记录entry + */ +func rateLimitRecordEntry(ctx context.Context, namespace string, service string, md *model.RateLimit, + opt model.OperationType) *model.RecordEntry { + entry := &model.RecordEntry{ + ResourceType: model.RRateLimit, + OperationType: opt, + Namespace: namespace, + Service: service, + Operator: ParseOperator(ctx), + CreateTime: time.Now(), + } + + if md != nil { + entry.Context = fmt.Sprintf("id:%s,label:%s,priority:%d,rule:%s,revision:%s", + md.ID, md.Labels, md.Priority, md.Rule, md.Revision) + } + return entry +} + +/** + * @brief 封装路由存储层错误 + */ +func wrapperRateLimitStoreResponse(rule *api.Rule, err error) *api.Response { + resp := storeError2Response(err) + if resp == nil { + return nil + } + resp.RateLimit = rule + return resp +} diff --git a/naming/ratelimit_config_test.go b/naming/ratelimit_config_test.go new file mode 100644 index 000000000..94fb30d35 --- /dev/null +++ b/naming/ratelimit_config_test.go @@ -0,0 +1,64 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "fmt" + "github.com/gogo/protobuf/jsonpb" + "github.com/golang/protobuf/ptypes/duration" + "github.com/golang/protobuf/ptypes/wrappers" + api "github.com/polarismesh/polaris-server/common/api/v1" + "testing" +) + +func TestServer_CreateRateLimitJson(t *testing.T) { + rule := &api.Rule { + Namespace: &wrappers.StringValue{Value: "Test"}, + Service: &wrappers.StringValue{Value: "TestService1"}, + Resource: api.Rule_QPS, + Type: api.Rule_LOCAL, + Method: &api.MatchString{ + Type: 0, + Value: &wrappers.StringValue{Value: "/info"}, + }, + Labels: map[string]*api.MatchString{ + "uin": &api.MatchString{ + Type: 0, + Value: &wrappers.StringValue{Value: "109870111"}, + }, + }, + AmountMode: api.Rule_GLOBAL_TOTAL, + Amounts: []*api.Amount{ + { + MaxAmount: &wrappers.UInt32Value{Value: 1000}, + ValidDuration: &duration.Duration{ + Seconds: 1, + }, + }, + }, + Action: &wrappers.StringValue{Value: "reject"}, + Failover: api.Rule_FAILOVER_LOCAL, + Disable: &wrappers.BoolValue{Value: false}, + } + marshaler := &jsonpb.Marshaler{} + ruleStr, err := marshaler.MarshalToString(rule) + if nil != err { + t.Fatal(err) + } + fmt.Printf(ruleStr) +} \ No newline at end of file diff --git a/naming/routing_config.go b/naming/routing_config.go new file mode 100644 index 000000000..80889e653 --- /dev/null +++ b/naming/routing_config.go @@ -0,0 +1,440 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "encoding/json" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "time" +) + +var ( + RoutingConfigFilterAttrs = map[string]bool{ + "service": true, + "namespace": true, + "offset": true, + "limit": true, + } +) + +// 批量创建路由配置 +func (s *Server) CreateRoutingConfigs(ctx context.Context, req []*api.Routing) *api.BatchWriteResponse { + if err := checkBatchRoutingConfig(req); err != nil { + return err + } + + resps := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, entry := range req { + resp := s.CreateRoutingConfig(ctx, entry) + resps.Collect(resp) + } + + return api.FormatBatchWriteResponse(resps) +} + +// 创建一个路由配置 +// 创建路由配置需要锁住服务,防止服务被删除 +func (s *Server) CreateRoutingConfig(ctx context.Context, req *api.Routing) *api.Response { + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + if resp := checkRoutingConfig(req); resp != nil { + return resp + } + + tx, err := s.storage.CreateTransaction() + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewRoutingResponse(api.StoreLayerException, req) + } + defer func() { _ = tx.Commit() }() + + serviceName := req.GetService().GetValue() + namespaceName := req.GetNamespace().GetValue() + service, err := tx.RLockService(serviceName, namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewRoutingResponse(api.StoreLayerException, req) + } + if service == nil { + return api.NewRoutingResponse(api.NotFoundService, req) + } + if service.IsAlias() { + return api.NewRoutingResponse(api.NotAllowAliasCreateRouting, req) + } + + // 鉴权 + if err := s.verifyRoutingAuth(ctx, service, req); err != nil { + return err + } + + // 检查路由配置是否已经存在了 + routingConfig, err := s.storage.GetRoutingConfigWithService(service.Name, service.Namespace) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewRoutingResponse(api.StoreLayerException, req) + } + if routingConfig != nil { + return api.NewRoutingResponse(api.ExistedResource, req) + } + + // 构造底层数据结构,并且写入store + conf, err := api2RoutingConfig(service.ID, req) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewRoutingResponse(api.ExecuteException, req) + } + if err := s.storage.CreateRoutingConfig(conf); err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return wrapperRoutingStoreResponse(req, err) + } + + s.RecordHistory(routingRecordEntry(ctx, req, conf, model.OCreate)) + return api.NewRoutingResponse(api.ExecuteSuccess, req) +} + +// 批量删除路由配置 +func (s *Server) DeleteRoutingConfigs(ctx context.Context, req []*api.Routing) *api.BatchWriteResponse { + if err := checkBatchRoutingConfig(req); err != nil { + return err + } + + out := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, entry := range req { + resp := s.DeleteRoutingConfig(ctx, entry) + out.Collect(resp) + } + + return api.FormatBatchWriteResponse(out) +} + +// 删除一个路由配置 +func (s *Server) DeleteRoutingConfig(ctx context.Context, req *api.Routing) *api.Response { + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + service, resp := s.routingConfigCommonCheck(ctx, req) + if resp != nil { + return resp + } + + // store操作 + if err := s.storage.DeleteRoutingConfig(service.ID); err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return wrapperRoutingStoreResponse(req, err) + } + + s.RecordHistory(routingRecordEntry(ctx, req, nil, model.ODelete)) + return api.NewRoutingResponse(api.ExecuteSuccess, req) +} + +// 批量更新路由配置 +func (s *Server) UpdateRoutingConfigs(ctx context.Context, req []*api.Routing) *api.BatchWriteResponse { + if err := checkBatchRoutingConfig(req); err != nil { + return err + } + + out := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, entry := range req { + resp := s.UpdateRoutingConfig(ctx, entry) + out.Collect(resp) + } + + return api.FormatBatchWriteResponse(out) +} + +// 更新单个路由配置 +func (s *Server) UpdateRoutingConfig(ctx context.Context, req *api.Routing) *api.Response { + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + service, resp := s.routingConfigCommonCheck(ctx, req) + if resp != nil { + return resp + } + + // 检查路由配置是否存在 + conf, err := s.storage.GetRoutingConfigWithService(service.Name, service.Namespace) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewRoutingResponse(api.StoreLayerException, req) + } + if conf == nil { + return api.NewRoutingResponse(api.NotFoundRouting, req) + } + + // 作为一个整体进行Update,所有参数都要传递 + reqModel, err := api2RoutingConfig(service.ID, req) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewRoutingResponse(api.ParseRoutingException, req) + } + + if err := s.storage.UpdateRoutingConfig(reqModel); err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return wrapperRoutingStoreResponse(req, err) + } + + s.RecordHistory(routingRecordEntry(ctx, req, reqModel, model.OUpdate)) + return api.NewRoutingResponse(api.ExecuteSuccess, req) +} + +// 提供给OSS的查询路由配置的接口 +func (s *Server) GetRoutingConfigs(ctx context.Context, query map[string]string) *api.BatchQueryResponse { + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + + // 先处理offset和limit + offset, limit, err := ParseOffsetAndLimit(query) + if err != nil { + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + // 处理剩余的参数 + filter := make(map[string]string) + for key, value := range query { + if _, ok := RoutingConfigFilterAttrs[key]; !ok { + log.Errorf("[Server][RoutingConfig][Query] attribute(%s) is not allowed", key) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + filter[key] = value + } + // service -- > name 这个特殊处理一下 + if service, ok := filter["service"]; ok { + filter["name"] = service + delete(filter, "service") + } + + // 可以根据name和namespace过滤 + total, routings, err := s.storage.GetRoutingConfigs(filter, offset, limit) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + // 格式化输出 + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + resp.Amount = utils.NewUInt32Value(total) + resp.Size = utils.NewUInt32Value(uint32(len(routings))) + resp.Routings = make([]*api.Routing, 0, len(routings)) + for _, entry := range routings { + routing, err := routingConfig2API(entry.Config, entry.ServiceName, entry.NamespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewBatchQueryResponse(api.ParseRoutingException) + } + resp.Routings = append(resp.Routings, routing) + } + + return resp +} + +// 路由配置操作的公共检查 +func (s *Server) routingConfigCommonCheck(ctx context.Context, req *api.Routing) (*model.Service, *api.Response) { + if resp := checkRoutingConfig(req); resp != nil { + return nil, resp + } + + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + serviceName := req.GetService().GetValue() + namespaceName := req.GetNamespace().GetValue() + + service, err := s.storage.GetService(serviceName, namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return nil, api.NewRoutingResponse(api.StoreLayerException, req) + } + if service == nil { + return nil, api.NewRoutingResponse(api.NotFoundService, req) + } + + // 鉴权 + if err := s.verifyRoutingAuth(ctx, service, req); err != nil { + return nil, err + } + + return service, nil +} + +// 检查路由配置基础参数有效性 +func checkRoutingConfig(req *api.Routing) *api.Response { + if req == nil { + return api.NewRoutingResponse(api.EmptyRequest, req) + } + if err := checkResourceName(req.GetService()); err != nil { + return api.NewRoutingResponse(api.InvalidServiceName, req) + } + + if err := checkResourceName(req.GetNamespace()); err != nil { + return api.NewRoutingResponse(api.InvalidNamespaceName, req) + } + + if err := CheckDbStrFieldLen(req.GetService(), MaxDbServiceNameLength); err != nil { + return api.NewRoutingResponse(api.InvalidServiceName, req) + } + if err := CheckDbStrFieldLen(req.GetNamespace(), MaxDbServiceNamespaceLength); err != nil { + return api.NewRoutingResponse(api.InvalidNamespaceName, req) + } + if err := CheckDbStrFieldLen(req.GetServiceToken(), MaxDbServiceToken); err != nil { + return api.NewRoutingResponse(api.InvalidServiceToken, req) + } + + return nil +} + +// 从routingConfig请求参数中获取token +func parseServiceRoutingToken(ctx context.Context, req *api.Routing) string { + if reqToken := req.GetServiceToken().GetValue(); reqToken != "" { + return reqToken + } + + return ParseToken(ctx) +} + +// 把API参数转换为内部的数据结构 +func api2RoutingConfig(serviceID string, req *api.Routing) (*model.RoutingConfig, error) { + inBounds, outBounds, err := marshalRoutingConfig(req.GetInbounds(), req.GetOutbounds()) + if err != nil { + return nil, err + } + + out := &model.RoutingConfig{ + ID: serviceID, + InBounds: string(inBounds), + OutBounds: string(outBounds), + Revision: NewUUID(), + } + + return out, nil +} + +// 把内部数据结构转换为API参数传递出去 +func routingConfig2API(req *model.RoutingConfig, service string, namespace string) (*api.Routing, error) { + if req == nil { + return nil, nil + } + + out := &api.Routing{ + Service: utils.NewStringValue(service), + Namespace: utils.NewStringValue(namespace), + Revision: utils.NewStringValue(req.Revision), + Ctime: utils.NewStringValue(time2String(req.CreateTime)), + Mtime: utils.NewStringValue(time2String(req.ModifyTime)), + } + + if req.InBounds != "" { + var inBounds []*api.Route + if err := json.Unmarshal([]byte(req.InBounds), &inBounds); err != nil { + return nil, err + } + out.Inbounds = inBounds + } + if req.OutBounds != "" { + var outBounds []*api.Route + if err := json.Unmarshal([]byte(req.OutBounds), &outBounds); err != nil { + return nil, err + } + out.Outbounds = outBounds + } + + return out, nil +} + +// 格式化inbounds和outbounds +func marshalRoutingConfig(in []*api.Route, out []*api.Route) ([]byte, []byte, error) { + inBounds, err := json.Marshal(in) + if err != nil { + return nil, nil, err + } + + outBounds, err := json.Marshal(out) + if err != nil { + return nil, nil, err + } + + return inBounds, outBounds, nil +} + +/* + * @brief 检查批量请求 + */ +func checkBatchRoutingConfig(req []*api.Routing) *api.BatchWriteResponse { + if len(req) == 0 { + return api.NewBatchWriteResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchWriteResponse(api.BatchSizeOverLimit) + } + + return nil +} + +// 构建routingConfig的记录entry +func routingRecordEntry(ctx context.Context, req *api.Routing, md *model.RoutingConfig, + opt model.OperationType) *model.RecordEntry { + entry := &model.RecordEntry{ + ResourceType: model.RRouting, + OperationType: opt, + Namespace: req.GetNamespace().GetValue(), + Service: req.GetService().GetValue(), + Operator: ParseOperator(ctx), + CreateTime: time.Now(), + } + + if md != nil { + entry.Context = fmt.Sprintf("inBounds:%s,outBounds:%s,revision:%s", + md.InBounds, md.OutBounds, md.Revision) + } + return entry +} + +/** + * @brief 封装路由存储层错误 + */ +func wrapperRoutingStoreResponse(routing *api.Routing, err error) *api.Response { + resp := storeError2Response(err) + if resp == nil { + return nil + } + resp.Routing = routing + return resp +} + +/** + * @brief 路由鉴权 + */ +func (s *Server) verifyRoutingAuth(ctx context.Context, service *model.Service, req *api.Routing) *api.Response { + // 使用平台id及token鉴权 + if ok := s.verifyAuthByPlatform(ctx, service.PlatformID); !ok { + // 检查token是否存在 + token := parseServiceRoutingToken(ctx, req) + if !s.authority.VerifyToken(token) { + return api.NewRoutingResponse(api.InvalidServiceToken, req) + } + + // 检查token是否ok + if ok := s.authority.VerifyService(service.Token, token); !ok { + return api.NewRoutingResponse(api.Unauthorized, req) + } + } + return nil +} diff --git a/naming/server.go b/naming/server.go new file mode 100644 index 000000000..729cc01c5 --- /dev/null +++ b/naming/server.go @@ -0,0 +1,312 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "encoding/hex" + "errors" + "github.com/polarismesh/polaris-server/naming/batch" + "go.uber.org/zap" + "sync" + "time" + + uuid "github.com/google/uuid" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/naming/auth" + "github.com/polarismesh/polaris-server/naming/cache" + "github.com/polarismesh/polaris-server/plugin" + "github.com/polarismesh/polaris-server/store" +) + +const ( + MaxBatchSize = 100 + MaxQuerySize = 100 +) + +const ( + SystemNamespace = "Polaris" + DefaultNamespace = "default" + DefaultTLL = 5 +) + +var ( + server = new(Server) + once = sync.Once{} + finishInit = false +) + +/** + * @brief 核心逻辑层配置 + */ +type Config struct { + Auth map[string]interface{} `yaml:"auth"` + HealthCheck HealthCheckConfig `yaml:"healthcheck"` + Batch map[string]interface{} `yaml:"batch"` +} + +/** + * @brief 对接API层的server层,用以处理业务逻辑 + */ +type Server struct { + storage store.Store + + caches *cache.NamingCache + authority auth.Authority + hbMgr *HeartBeatMgr + bc *batch.Controller + + cmdb plugin.CMDB + history plugin.History + ratelimit plugin.Ratelimit + discoverStatis plugin.DiscoverStatis + auth plugin.Auth + + l5service *l5service +} + +/** + * @brief 初始化 + */ +func Initialize(ctx context.Context, namingOpt *Config, cacheOpt *cache.Config) error { + var err error + once.Do(func() { + err = initialize(ctx, namingOpt, cacheOpt) + }) + + if err != nil { + return err + } + + finishInit = true + return nil +} + +// 获取已经初始化好的Server +func GetServer() (*Server, error) { + if !finishInit { + return nil, errors.New("Server has not done InitializeServer") + } + + return server, nil +} + +/** + * @brief 返回鉴权对象,获取鉴权信息 + */ +func (s *Server) Authority() auth.Authority { + return s.authority +} + +/** + * @brief 返回Cache + */ +func (s *Server) Cache() *cache.NamingCache { + return s.caches +} + +// server对外提供history插件的简单封装 +func (s *Server) RecordHistory(entry *model.RecordEntry) { + // 如果插件没有初始化,那么不记录history + if s.history == nil { + return + } + // 如果数据为空,则不需要打印了 + if entry == nil { + return + } + + // 调用插件记录history + s.history.Record(entry) +} + +/** + * @brief 打印服务发现统计 + */ +func (s *Server) RecordDiscoverStatis(service, namespace string) { + if s.discoverStatis == nil { + return + } + + s.discoverStatis.AddDiscoverCall(service, namespace, time.Now()) +} + +// 获取服务实例的revision +func (s *Server) GetServiceInstanceRevision(serviceID string, instances []*model.Instance) (string, error) { + revision := s.caches.GetServiceInstanceRevision(serviceID) + if revision != "" { + return revision, nil + } + + data, err := cache.ComputeRevision(serviceID, instances) + if err != nil { + return "", err + } + + return data, nil +} + +// 封装一下cmdb的GetLocation +func (s *Server) getLocation(host string) *model.Location { + if s.cmdb == nil { + return nil + } + + location, err := s.cmdb.GetLocation(host) + if err != nil { + log.Errorf("[Server] get location(%s) err: %s", host, err.Error()) + return nil + } + return location +} + +// 实例访问限流 +func (s *Server) allowInstanceAccess(instanceID string) bool { + if s.ratelimit == nil { + return true + } + + if ok := s.ratelimit.Allow(plugin.InstanceRatelimit, instanceID); !ok { + log.Error("[Server][ratelimit] instance is not allow access", zap.String("instance", instanceID)) + return false + } + + return true + +} + +// 内部初始化函数 +func initialize(ctx context.Context, namingOpt *Config, cacheOpt *cache.Config) error { + // 获取存储层对象 + s, err := store.GetStore() + if err != nil { + log.Errorf("[Naming][Server] can not get store, err: %s", err.Error()) + return errors.New("can not get store") + } + if s == nil { + log.Errorf("[Naming][Server] store is null") + return errors.New("store is null") + } + server.storage = s + + // 初始化鉴权模块 + authority, err := auth.NewAuthority(namingOpt.Auth) + if err != nil { + log.Errorf("[Naming][Server] new auth err: %s", err.Error()) + return err + } + server.authority = authority + + // cache模块,可以不开启 + // 对于控制台集群,只访问控制台接口的,可以不开启cache + if cacheOpt.Open { + cache.SetCacheConfig(cacheOpt) + log.Infof("cache is open, can access the client api function") + caches, cacheErr := cache.NewNamingCache(s) + if cacheErr != nil { + log.Errorf("[Naming][Server] new naming cache err: %s", cacheErr.Error()) + return cacheErr + } + server.caches = caches + if startErr := server.caches.Start(ctx); startErr != nil { + log.Errorf("[Naming][Server] start naming cache err: %s", startErr.Error()) + return startErr + } + } + + // 启动健康检查 + if healthCheckConf.Open { + hbMgr, err = NewHeartBeatMgr(ctx) + if err != nil { + log.Errorf("[Naming][Server] new heartbeat mgr failed: %s", err.Error()) + return err + } + + server.hbMgr = hbMgr + server.hbMgr.Start() + } + // 批量控制器 + batchConfig, err := batch.ParseBatchConfig(namingOpt.Batch) + if err != nil { + return err + } + bc, err := batch.NewBatchCtrlWithConfig(server.storage, server.authority, plugin.GetAuth(), batchConfig) + if err != nil { + log.Errorf("new batch ctrl with config err: %s", err.Error()) + return err + } + server.bc = bc + if server.bc != nil { + server.bc.Start(ctx) + } + + // l5service + server.l5service = &l5service{} + + // 插件初始化 + pluginInitialize() + + return nil +} + +// 插件初始化 +func pluginInitialize() { + // 获取CMDB插件 + server.cmdb = plugin.GetCMDB() + if server.cmdb == nil { + log.Warnf("Not Found CMDB Plugin") + } + + // 获取History插件,注意:插件的配置在bootstrap已经设置好 + server.history = plugin.GetHistory() + if server.history == nil { + log.Warnf("Not Found History Log Plugin") + } + + // 获取限流插件 + server.ratelimit = plugin.GetRatelimit() + if server.ratelimit == nil { + log.Warnf("Not found Ratelimit Plugin") + } + + // 获取DiscoverStatis插件 + server.discoverStatis = plugin.GetDiscoverStatis() + if server.discoverStatis == nil { + log.Warnf("Not Found Discover Statis Plugin") + } + + // 获取鉴权插件 + server.auth = plugin.GetAuth() + if server.auth == nil { + log.Warnf("Not found Auth Plugin") + } +} + +/** + * @brief 返回一个随机的UUID + */ +func NewUUID() string { + uuidBytes := uuid.New() + return hex.EncodeToString(uuidBytes[:]) +} + +// time.Time转为字符串时间 +func time2String(t time.Time) string { + return t.Format("2006-01-02 15:04:05") +} diff --git a/naming/service.go b/naming/service.go new file mode 100644 index 000000000..d502dc261 --- /dev/null +++ b/naming/service.go @@ -0,0 +1,996 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "fmt" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "go.uber.org/zap" +) + +// *model.service转换为*api.service +type Service2Api func(service *model.Service) *api.Service + +var ( + serviceFilter = 1 // 过滤服务的 + instanceFilter = 2 // 过滤实例的 + serviceMetaFilter = 3 // 过滤service Metadata的 + ServiceFilterAttributes = map[string]int{ + "name": serviceFilter, + "namespace": serviceFilter, + "business": serviceFilter, + "department": serviceFilter, + "cmdb_mod1": serviceFilter, + "cmdb_mod2": serviceFilter, + "cmdb_mod3": serviceFilter, + "owner": serviceFilter, + "offset": serviceFilter, + "limit": serviceFilter, + "platform_id": serviceFilter, + "host": instanceFilter, + "port": instanceFilter, + "keys": serviceMetaFilter, + "values": serviceMetaFilter, + } +) + +/** + * @brief 批量创建服务 + */ +func (s *Server) CreateServices(ctx context.Context, req []*api.Service) *api.BatchWriteResponse { + if checkError := checkBatchService(req); checkError != nil { + return checkError + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, service := range req { + response := s.CreateService(ctx, service) + responses.Collect(response) + } + + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 创建单个服务 + */ +func (s *Server) CreateService(ctx context.Context, req *api.Service) *api.Response { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + // 参数检查 + if checkError := checkCreateService(req); checkError != nil { + return checkError + } + + namespaceName := req.GetNamespace().GetValue() + serviceName := req.GetName().GetValue() + // 检查命名空间是否存在 + namespace, err := s.storage.GetNamespace(namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return api.NewServiceResponse(api.StoreLayerException, req) + } + if namespace == nil { + return api.NewServiceResponse(api.NotFoundNamespace, req) + } + // 检查是否存在 + service, err := s.storage.GetService(serviceName, namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return api.NewServiceResponse(api.StoreLayerException, req) + } + if service != nil { + return api.NewServiceResponse(api.ExistedResource, req) + } + + // 存储层操作 + data := s.createServiceModel(req) + if err := s.storage.AddService(data); err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return wrapperServiceStoreResponse(req, err) + } + + msg := fmt.Sprintf("create service: namespace=%v, name=%v, meta=%+v", + namespaceName, serviceName, req.GetMetadata()) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + s.RecordHistory(serviceRecordEntry(ctx, req, data, model.OCreate)) + + out := &api.Service{ + Name: req.GetName(), + Namespace: req.GetNamespace(), + Token: utils.NewStringValue(data.Token), + } + + return api.NewServiceResponse(api.ExecuteSuccess, out) +} + +/** + * @brief 批量删除服务 + */ +func (s *Server) DeleteServices(ctx context.Context, req []*api.Service) *api.BatchWriteResponse { + if checkError := checkBatchService(req); checkError != nil { + return checkError + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, service := range req { + response := s.DeleteService(ctx, service) + responses.Collect(response) + } + + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 删除单个服务 + * 删除操作需要对服务进行加锁操作, + * 防止有与服务关联的实例或者配置有新增的操作 + */ +func (s *Server) DeleteService(ctx context.Context, req *api.Service) *api.Response { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + + // 参数检查 + if checkError := checkReviseService(req); checkError != nil { + return checkError + } + + namespaceName := req.GetNamespace().GetValue() + serviceName := req.GetName().GetValue() + + // 检查是否存在 + service, err := s.storage.GetService(serviceName, namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return api.NewServiceResponse(api.StoreLayerException, req) + } + if service == nil { + return api.NewServiceResponse(api.ExecuteSuccess, req) + } + + // 鉴权 + if err := s.verifyServiceAuth(ctx, service, req); err != nil { + return err + } + + // 判断service下的资源是否已经全部被删除 + if resp := s.isServiceExistedResource(requestID, platformID, service); resp != nil { + return resp + } + + if err := s.storage.DeleteService(service.ID, serviceName, namespaceName); err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return wrapperServiceStoreResponse(req, err) + } + + msg := fmt.Sprintf("delete service: namespace=%v, name=%v", namespaceName, serviceName) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + s.RecordHistory(serviceRecordEntry(ctx, req, nil, model.ODelete)) + + return api.NewServiceResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 批量修改服务 + */ +func (s *Server) UpdateServices(ctx context.Context, req []*api.Service) *api.BatchWriteResponse { + if checkError := checkBatchService(req); checkError != nil { + return checkError + } + + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for _, service := range req { + response := s.UpdateService(ctx, service) + responses.Collect(response) + } + + return api.FormatBatchWriteResponse(responses) +} + +/** + * @brief 修改单个服务 + */ +func (s *Server) UpdateService(ctx context.Context, req *api.Service) *api.Response { + requestID := ParseRequestID(ctx) + platformID := ParsePlatformID(ctx) + // 校验基础参数合法性 + if resp := checkReviseService(req); resp != nil { + return resp + } + + // 鉴权 + service, _, resp := s.checkServiceAuthority(ctx, req) + if resp != nil { + return resp + } + + // [2020.02.18]如果该服务是别名服务,不允许修改 TODO + if service.IsAlias() { + return api.NewServiceResponse(api.NotAllowAliasUpdate, req) + } + + log.Info(fmt.Sprintf("old service: %+v", service), ZapRequestID(requestID), ZapPlatformID(platformID)) + + // 修改 + err, needUpdate, needUpdateOwner := s.updateServiceAttribute(req, service) + if err != nil { + return err + } + // 判断是否需要更新 + if !needUpdate { + log.Info("update service data no change, no need update", + ZapRequestID(requestID), ZapPlatformID(platformID), zap.String("service", req.String())) + return api.NewServiceResponse(api.NoNeedUpdate, req) + } + + // 存储层操作 + if err := s.storage.UpdateService(service, needUpdateOwner); err != nil { + log.Error(err.Error(), zap.String("request-id", requestID)) + return wrapperServiceStoreResponse(req, err) + } + + msg := fmt.Sprintf("update service: namespace=%v, name=%v", service.Namespace, service.Name) + log.Info(msg, ZapRequestID(requestID), ZapPlatformID(platformID)) + s.RecordHistory(serviceRecordEntry(ctx, req, service, model.OUpdate)) + + return api.NewServiceResponse(api.ExecuteSuccess, req) +} + +// 更新服务token +func (s *Server) UpdateServiceToken(ctx context.Context, req *api.Service) *api.Response { + // 校验参数合法性 + if resp := checkReviseService(req); resp != nil { + return resp + } + + // 鉴权 + service, _, resp := s.checkServiceAuthority(ctx, req) + if resp != nil { + return resp + } + if service.IsAlias() { + return api.NewServiceResponse(api.NotAllowAliasUpdate, req) + } + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + + // 生成一个新的token和revision + service.Token = NewUUID() + service.Revision = NewUUID() + // 更新数据库 + if err := s.storage.UpdateServiceToken(service.ID, service.Token, service.Revision); err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return wrapperServiceStoreResponse(req, err) + } + log.Info("update service token", zap.String("namespace", service.Namespace), + zap.String("name", service.Name), zap.String("service-id", service.ID), + ZapRequestID(rid), ZapPlatformID(pid)) + s.RecordHistory(serviceRecordEntry(ctx, req, service, model.OUpdateToken)) + + // 填充新的token返回 + out := &api.Service{ + Name: req.GetName(), + Namespace: req.GetNamespace(), + Token: utils.NewStringValue(service.Token), + } + return api.NewServiceResponse(api.ExecuteSuccess, out) +} + +/** + * @brief 查询服务 + * 注意:不包括别名 + */ +func (s *Server) GetServices(query map[string]string) *api.BatchQueryResponse { + serviceFilters := make(map[string]string) + instanceFilters := make(map[string]string) + var metaKeys, metaValues string + for key, value := range query { + typ, ok := ServiceFilterAttributes[key] + if !ok { + log.Errorf("[Server][Service][Query] attribute(%s) it not allowed", key) + return api.NewBatchQueryResponseWithMsg(api.InvalidParameter, key+" is not allowed") + } + // 元数据value允许为空 + if key != "values" && value == "" { + log.Errorf("[Server][Service][Query] attribute(%s: %s) is not allowed empty", key, value) + return api.NewBatchQueryResponseWithMsg(api.InvalidParameter, "the value for "+key+" is empty") + } + switch { + case typ == serviceFilter: + serviceFilters[key] = value + case typ == serviceMetaFilter: + if key == "keys" { + metaKeys = value + } else { + metaValues = value + } + default: + instanceFilters[key] = value + } + } + + instanceArgs, err := ParseInstanceArgs(instanceFilters) + if err != nil { + log.Errorf("[Server][Service][Query] instance args error: %s", err.Error()) + return api.NewBatchQueryResponseWithMsg(api.InvalidParameter, err.Error()) + } + + // 解析metaKeys,metaValues + serviceMetas := make(map[string]string) + if metaKeys != "" { + serviceMetas[metaKeys] = metaValues + } + + // 判断offset和limit是否为int,并从filters清除offset/limit参数 + offset, limit, err := ParseOffsetAndLimit(serviceFilters) + if err != nil { + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + total, services, err := s.storage.GetServices(serviceFilters, serviceMetas, instanceArgs, + offset, limit) + if err != nil { + log.Errorf("[Server][Service][Query] req(%+v) store err: %s", query, err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + resp.Amount = utils.NewUInt32Value(total) + resp.Size = utils.NewUInt32Value(uint32(len(services))) + resp.Services = services2Api(services, service2Api) + return resp +} + +/** + * @brief 查询服务总数 + */ +func (s *Server) GetServicesCount() *api.BatchQueryResponse { + count, err := s.storage.GetServicesCount() + if err != nil { + log.Errorf("[Server][Service][Count] get service count storage err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + out := api.NewBatchQueryResponse(api.ExecuteSuccess) + out.Amount = utils.NewUInt32Value(count) + out.Services = make([]*api.Service, 0) + return out +} + +// 查询Service的token +func (s *Server) GetServiceToken(ctx context.Context, req *api.Service) *api.Response { + // 校验参数合法性 + if resp := checkReviseService(req); resp != nil { + return resp + } + + // 鉴权 + _, token, resp := s.checkServiceAuthority(ctx, req) + if resp != nil { + return resp + } + + //s.RecordHistory(serviceRecordEntry(ctx, req, model.OGetToken)) + out := api.NewResponse(api.ExecuteSuccess) + out.Service = &api.Service{ + Name: req.GetName(), + Namespace: req.GetNamespace(), + Token: utils.NewStringValue(token), + } + return out +} + +/** + * @brief 查询服务负责人 + */ +func (s *Server) GetServiceOwner(ctx context.Context, req []*api.Service) *api.BatchQueryResponse { + requestID := ParseRequestID(ctx) + platformID := ParseRequestID(ctx) + + if err := checkBatchReadService(req); err != nil { + return err + } + + services, err := s.storage.GetServicesBatch(apis2ServicesName(req)) + if err != nil { + log.Error(err.Error(), ZapRequestID(requestID), ZapPlatformID(platformID)) + return api.NewBatchQueryResponseWithMsg(api.StoreLayerException, err.Error()) + } + + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + resp.Amount = utils.NewUInt32Value(uint32(len(services))) + resp.Size = utils.NewUInt32Value(uint32(len(services))) + resp.Services = services2Api(services, serviceOwner2Api) + return resp +} + +/** + * @brief 创建存储层服务模型 + */ +func (s *Server) createServiceModel(req *api.Service) *model.Service { + service := &model.Service{ + ID: NewUUID(), + Name: req.GetName().GetValue(), + Namespace: req.GetNamespace().GetValue(), + Meta: req.GetMetadata(), + Ports: req.GetPorts().GetValue(), + Business: req.GetBusiness().GetValue(), + Department: req.GetDepartment().GetValue(), + CmdbMod1: req.GetCmdbMod1().GetValue(), + CmdbMod2: req.GetCmdbMod2().GetValue(), + CmdbMod3: req.GetCmdbMod3().GetValue(), + Comment: req.GetComment().GetValue(), + Owner: req.GetOwners().GetValue(), + PlatformID: req.GetPlatformId().GetValue(), + Token: NewUUID(), + Revision: NewUUID(), + } + + return service +} + +/** + * @brief 修改服务属性 + */ +func (s *Server) updateServiceAttribute(req *api.Service, service *model.Service) (*api.Response, bool, bool) { + // 待更新的参数检查 + if err := checkMetadata(req.GetMetadata()); err != nil { + return api.NewServiceResponse(api.InvalidMetadata, req), false, false + } + + needUpdate := false + needNewRevision := false + needUpdateOwner := false + if req.GetMetadata() != nil { + if need := serviceMetaNeedUpdate(req, service); need { + needUpdate = need + needNewRevision = true + service.Meta = req.GetMetadata() + } + } + if !needUpdate { + // 不需要更新metadata + service.Meta = nil + } + + if req.GetPorts() != nil && req.GetPorts().GetValue() != service.Ports { + service.Ports = req.GetPorts().GetValue() + needUpdate = true + } + + if req.GetBusiness() != nil && req.GetBusiness().GetValue() != service.Business { + service.Business = req.GetBusiness().GetValue() + needUpdate = true + } + + if req.GetDepartment() != nil && req.GetDepartment().GetValue() != service.Department { + service.Department = req.GetDepartment().GetValue() + needUpdate = true + } + + if req.GetCmdbMod1() != nil && req.GetCmdbMod1().GetValue() != service.CmdbMod1 { + service.CmdbMod1 = req.GetCmdbMod1().GetValue() + needUpdate = true + } + if req.GetCmdbMod2() != nil && req.GetCmdbMod2().GetValue() != service.CmdbMod2 { + service.CmdbMod2 = req.GetCmdbMod2().GetValue() + needUpdate = true + } + if req.GetCmdbMod3() != nil && req.GetCmdbMod3().GetValue() != service.CmdbMod3 { + service.CmdbMod3 = req.GetCmdbMod3().GetValue() + needUpdate = true + } + + if req.GetComment() != nil && req.GetComment().GetValue() != service.Comment { + service.Comment = req.GetComment().GetValue() + needUpdate = true + } + + if req.GetOwners() != nil && req.GetOwners().GetValue() != service.Owner { + service.Owner = req.GetOwners().GetValue() + needUpdate = true + needUpdateOwner = true + } + + if req.GetPlatformId() != nil && req.GetPlatformId().GetValue() != service.PlatformID { + service.PlatformID = req.GetPlatformId().GetValue() + needUpdate = true + } + + if needNewRevision { + service.Revision = NewUUID() + } + + return nil, needUpdate, needUpdateOwner +} + +// 获取服务下别名的总数 +func (s *Server) getServiceAliasCountWithService(name string, namespace string) (uint32, error) { + filter := map[string]string{ + "service": name, + "namespace": namespace, + } + total, _, err := s.storage.GetServiceAliases(filter, 0, 1) + if err != nil { + return 0, err + } + return total, nil +} + +// 获取服务下实例的总数 +func (s *Server) getInstancesCountWithService(name string, namespace string) (uint32, error) { + filter := map[string]string{ + "name": name, + "namespace": namespace, + } + total, _, err := s.storage.GetExpandInstances(filter, nil, 0, 1) + if err != nil { + return 0, err + } + return total, nil +} + +// 获取服务下路由配置总数 +func (s *Server) getRoutingCountWithService(id string) (uint32, error) { + routing, err := s.storage.GetRoutingConfigWithID(id) + if err != nil { + return 0, err + } + + if routing == nil { + return 0, nil + } + return 1, nil +} + +// 获取服务下限流规则总数 +func (s *Server) getRateLimitingCountWithService(name string, namespace string) (uint32, error) { + filter := map[string]string{ + "name": name, + "namespace": namespace, + } + total, _, err := s.storage.GetExtendRateLimits(filter, 0, 1) + if err != nil { + return 0, err + } + return total, nil +} + +// 获取服务下熔断规则总数 +func (s *Server) getCircuitBreakerCountWithService(name string, namespace string) (uint32, error) { + circuitBreaker, err := s.storage.GetCircuitBreakersByService(name, namespace) + if err != nil { + return 0, err + } + + if circuitBreaker == nil { + return 0, nil + } + return 1, nil +} + +// 检查服务下的资源存在情况,在删除服务的时候需要用到 +func (s *Server) isServiceExistedResource(rid, pid string, service *model.Service) *api.Response { + // 服务别名,不需要判断 + if service.IsAlias() { + return nil + } + out := &api.Service{ + Name: utils.NewStringValue(service.Name), + Namespace: utils.NewStringValue(service.Namespace), + } + total, err := s.getInstancesCountWithService(service.Name, service.Namespace) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewServiceResponse(api.StoreLayerException, out) + } + if total != 0 { + return api.NewServiceResponse(api.ServiceExistedInstances, out) + } + + total, err = s.getServiceAliasCountWithService(service.Name, service.Namespace) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewServiceResponse(api.StoreLayerException, out) + } + if total != 0 { + return api.NewServiceResponse(api.ServiceExistedAlias, out) + } + + total, err = s.getRoutingCountWithService(service.ID) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewServiceResponse(api.StoreLayerException, out) + } + + if total != 0 { + return api.NewServiceResponse(api.ServiceExistedRoutings, out) + } + + total, err = s.getRateLimitingCountWithService(service.Name, service.Namespace) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewServiceResponse(api.StoreLayerException, out) + } + if total != 0 { + return api.NewServiceResponse(api.ServiceExistedRateLimits, out) + } + + total, err = s.getCircuitBreakerCountWithService(service.Name, service.Namespace) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return api.NewServiceResponse(api.StoreLayerException, out) + } + if total != 0 { + return api.NewServiceResponse(api.ServiceExistedCircuitBreakers, out) + } + + return nil +} + +// 对服务进行鉴权,并且返回model.Service +// return service, token, response +func (s *Server) checkServiceAuthority(ctx context.Context, req *api.Service) (*model.Service, + string, *api.Response) { + rid := ParseRequestID(ctx) + pid := ParsePlatformID(ctx) + namespaceName := req.GetNamespace().GetValue() + serviceName := req.GetName().GetValue() + + // 检查是否存在 + service, err := s.storage.GetService(serviceName, namespaceName) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid), ZapPlatformID(pid)) + return nil, "", api.NewServiceResponse(api.StoreLayerException, req) + } + if service == nil { + return nil, "", api.NewServiceResponse(api.NotFoundResource, req) + } + expectToken := service.Token + + if err := s.verifyServiceAuth(ctx, service, req); err != nil { + return nil, "", err + } + + return service, expectToken, nil +} + +/** + * @brief 服务鉴权 + */ +func (s *Server) verifyServiceAuth(ctx context.Context, service *model.Service, req *api.Service) *api.Response { + // 使用平台id及token鉴权 + if ok := s.verifyAuthByPlatform(ctx, service.PlatformID); !ok { + // 检查token是否存在 + token := parseRequestToken(ctx, req.GetToken().GetValue()) + if !s.authority.VerifyToken(token) { + return api.NewServiceResponse(api.InvalidServiceToken, req) + } + + // 检查token是否ok + if ok := s.authority.VerifyService(service.Token, token); !ok { + return api.NewServiceResponse(api.Unauthorized, req) + } + } + + return nil +} + +// model.Service 转为 api.Service +func service2Api(service *model.Service) *api.Service { + if service == nil { + return nil + } + + // note: 不包括token,token比较特殊 + out := &api.Service{ + Name: utils.NewStringValue(service.Name), + Namespace: utils.NewStringValue(service.Namespace), + Metadata: service.Meta, + Ports: utils.NewStringValue(service.Ports), + Business: utils.NewStringValue(service.Business), + Department: utils.NewStringValue(service.Department), + CmdbMod1: utils.NewStringValue(service.CmdbMod1), + CmdbMod2: utils.NewStringValue(service.CmdbMod2), + CmdbMod3: utils.NewStringValue(service.CmdbMod3), + Comment: utils.NewStringValue(service.Comment), + Owners: utils.NewStringValue(service.Owner), + Revision: utils.NewStringValue(service.Revision), + PlatformId: utils.NewStringValue(service.PlatformID), + Ctime: utils.NewStringValue(time2String(service.CreateTime)), + Mtime: utils.NewStringValue(time2String(service.ModifyTime)), + } + + return out +} + +/** + * @brief model.Service转为api.Service + * @note 只转name+namespace+owner + */ +func serviceOwner2Api(service *model.Service) *api.Service { + if service == nil { + return nil + } + out := &api.Service{ + Name: utils.NewStringValue(service.Name), + Namespace: utils.NewStringValue(service.Namespace), + Owners: utils.NewStringValue(service.Owner), + } + return out +} + +// service数组转为[]*api.Service +func services2Api(services []*model.Service, handler Service2Api) []*api.Service { + out := make([]*api.Service, 0, len(services)) + for _, entry := range services { + out = append(out, handler(entry)) + } + + return out +} + +/** + * @brief api数组转为[]*model.Service + */ +func apis2ServicesName(reqs []*api.Service) []*model.Service { + if reqs == nil { + return nil + } + + out := make([]*model.Service, 0, len(reqs)) + for _, req := range reqs { + out = append(out, api2ServiceName(req)) + } + return out +} + +/** + * @brief api转为*model.Service + */ +func api2ServiceName(req *api.Service) *model.Service { + if req == nil { + return nil + } + service := &model.Service{ + Name: req.GetName().GetValue(), + Namespace: req.GetNamespace().GetValue(), + } + return service +} + +// 检查服务metadata是否需要更新 +func serviceMetaNeedUpdate(req *api.Service, service *model.Service) bool { + // 收到的请求的metadata为空,则代表metadata不需要更新 + if req.GetMetadata() == nil { + return false + } + + // metadata个数不一致,肯定需要更新 + if len(req.GetMetadata()) != len(service.Meta) { + return true + } + + needUpdate := false + // 新数据为标准,对比老数据,发现不一致,则需要更新 + for key, value := range req.GetMetadata() { + oldValue, ok := service.Meta[key] + if !ok { + needUpdate = true + break + } + if value != oldValue { + needUpdate = true + break + } + } + if needUpdate { + return true + } + + // 老数据作为标准,对比新数据,发现不一致,则需要更新 + for key, value := range service.Meta { + newValue, ok := req.Metadata[key] + if !ok { + needUpdate = true + break + } + if value != newValue { + needUpdate = true + break + } + } + + return needUpdate +} + +/* + * @brief 检查批量请求 + */ +func checkBatchService(req []*api.Service) *api.BatchWriteResponse { + if len(req) == 0 { + return api.NewBatchWriteResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchWriteResponse(api.BatchSizeOverLimit) + } + + return nil +} + +/** + * @brief 检查批量读请求 + */ +func checkBatchReadService(req []*api.Service) *api.BatchQueryResponse { + if len(req) == 0 { + return api.NewBatchQueryResponse(api.EmptyRequest) + } + + if len(req) > MaxBatchSize { + return api.NewBatchQueryResponse(api.BatchSizeOverLimit) + } + + return nil +} + +/* + * @brief 检查创建服务请求参数 + */ +func checkCreateService(req *api.Service) *api.Response { + if req == nil { + return api.NewServiceResponse(api.EmptyRequest, req) + } + + if err := checkResourceName(req.GetName()); err != nil { + return api.NewServiceResponse(api.InvalidServiceName, req) + } + + if err := checkResourceName(req.GetNamespace()); err != nil { + return api.NewServiceResponse(api.InvalidNamespaceName, req) + } + + if err := checkResourceOwners(req.GetOwners()); err != nil { + return api.NewServiceResponse(api.InvalidServiceOwners, req) + } + + if err := checkMetadata(req.GetMetadata()); err != nil { + return api.NewServiceResponse(api.InvalidMetadata, req) + } + + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbServiceFieldLen(req) + if notOk { + return err + } + + return nil +} + +/* + * @brief 检查删除/修改/服务token的服务请求参数 + */ +func checkReviseService(req *api.Service) *api.Response { + if req == nil { + return api.NewServiceResponse(api.EmptyRequest, req) + } + + if err := checkResourceName(req.GetName()); err != nil { + return api.NewServiceResponse(api.InvalidServiceName, req) + } + + if err := checkResourceName(req.GetNamespace()); err != nil { + return api.NewServiceResponse(api.InvalidNamespaceName, req) + } + + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbServiceFieldLen(req) + if notOk { + return err + } + + return nil +} + +// wrapper service error +func wrapperServiceStoreResponse(service *api.Service, err error) *api.Response { + resp := storeError2Response(err) + if resp == nil { + return nil + } + + resp.Service = service + return resp +} + +// 从request中获取服务token +func parseRequestToken(ctx context.Context, value string) string { + if value != "" { + return value + } + + return ParseToken(ctx) +} + +// 生成服务的记录entry +func serviceRecordEntry(ctx context.Context, req *api.Service, md *model.Service, + operationType model.OperationType) *model.RecordEntry { + entry := &model.RecordEntry{ + ResourceType: model.RService, + OperationType: operationType, + Namespace: req.GetNamespace().GetValue(), + Service: req.GetName().GetValue(), + Operator: ParseOperator(ctx), + CreateTime: time.Now(), + } + if md != nil { + entry.Context = fmt.Sprintf("platformID:%s,meta:%+v,revision:%s", md.PlatformID, md.Meta, md.Revision) + } + + return entry +} + +// 检查DB中service表对应的入参字段合法性 +func CheckDbServiceFieldLen(req *api.Service) (*api.Response, bool) { + if err := CheckDbStrFieldLen(req.GetName(), MaxDbServiceNameLength); err != nil { + return api.NewServiceResponse(api.InvalidServiceName, req), true + } + if err := CheckDbStrFieldLen(req.GetNamespace(), MaxDbServiceNamespaceLength); err != nil { + return api.NewServiceResponse(api.InvalidNamespaceName, req), true + } + if err := CheckDbMetaDataFieldLen(req.GetMetadata()); err != nil { + return api.NewServiceResponse(api.InvalidMetadata, req), true + } + if err := CheckDbStrFieldLen(req.GetPorts(), MaxDbServicePortsLength); err != nil { + return api.NewServiceResponse(api.InvalidServicePorts, req), true + } + if err := CheckDbStrFieldLen(req.GetBusiness(), MaxDbServiceBusinessLength); err != nil { + return api.NewServiceResponse(api.InvalidServiceBusiness, req), true + } + if err := CheckDbStrFieldLen(req.GetDepartment(), MaxDbServiceDeptLength); err != nil { + return api.NewServiceResponse(api.InvalidServiceDepartment, req), true + } + if err := CheckDbStrFieldLen(req.GetCmdbMod1(), MaxDbServiceCMDBLength); err != nil { + return api.NewServiceResponse(api.InvalidServiceCMDB, req), true + } + if err := CheckDbStrFieldLen(req.GetCmdbMod2(), MaxDbServiceCMDBLength); err != nil { + return api.NewServiceResponse(api.InvalidServiceCMDB, req), true + } + if err := CheckDbStrFieldLen(req.GetCmdbMod3(), MaxDbServiceCMDBLength); err != nil { + return api.NewServiceResponse(api.InvalidServiceCMDB, req), true + } + if err := CheckDbStrFieldLen(req.GetComment(), MaxDbServiceCommentLength); err != nil { + return api.NewServiceResponse(api.InvalidServiceComment, req), true + } + if err := CheckDbStrFieldLen(req.GetOwners(), MaxDbServiceOwnerLength); err != nil { + return api.NewServiceResponse(api.InvalidServiceOwners, req), true + } + if err := CheckDbStrFieldLen(req.GetToken(), MaxDbServiceToken); err != nil { + return api.NewServiceResponse(api.InvalidServiceToken, req), true + } + if err := CheckDbStrFieldLen(req.GetPlatformId(), MaxPlatformIDLength); err != nil { + return api.NewServiceResponse(api.InvalidPlatformID, req), true + } + return nil, false +} diff --git a/naming/service_alias.go b/naming/service_alias.go new file mode 100644 index 000000000..27e01893f --- /dev/null +++ b/naming/service_alias.go @@ -0,0 +1,556 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "errors" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/store" + "go.uber.org/zap" +) + +var ( + AliasFilterAttributes = map[string]bool{ + "alias": true, + "namespace": true, + "service": true, + "owner": true, + "offset": true, + "limit": true, + } +) + +// 创建服务别名 +func (s *Server) CreateServiceAlias(ctx context.Context, req *api.ServiceAlias) *api.Response { + if resp := checkServiceAliasReq(ctx, req); resp != nil { + return resp + } + + rid := ParseRequestID(ctx) + tx, err := s.storage.CreateTransaction() + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + defer func() { _ = tx.Commit() }() + + service, response, done := s.checkPointServiceAlias(err, tx, req, rid) + if done { + return response + } + + // 鉴权 + actualToken := parseRequestToken(ctx, req.GetServiceToken().GetValue()) + if ok := s.authority.VerifyService(service.Token, actualToken); !ok { + return api.NewServiceAliasResponse(api.Unauthorized, req) + } + + // 检查是否存在同名的alias + if req.GetAlias().GetValue() != "" { + oldAlias, getErr := s.storage.GetService(req.GetAlias().GetValue(), + req.GetNamespace().GetValue()) + if getErr != nil { + log.Error(getErr.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + if oldAlias != nil { + return api.NewServiceAliasResponse(api.ExistedResource, req) + } + } + + // 构建别名的信息,这里包括了创建SID + input, resp := s.createServiceAliasModel(req, service, service.Token, service.Owner) + if resp != nil { + return resp + } + if err := s.storage.AddService(input); err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + + log.Info(fmt.Sprintf("create service alias, service(%s, %s), alias(%s)", + req.Service.Value, req.Namespace.Value, input.Name), ZapRequestID(rid)) + out := &api.ServiceAlias{ + Service: req.Service, + Namespace: req.Namespace, + Alias: req.Alias, + } + if out.GetAlias().GetValue() == "" { + out.Alias = utils.NewStringValue(input.Name) + } + record := &api.Service{Name: out.Alias, Namespace: out.Namespace} + s.RecordHistory(serviceRecordEntry(ctx, record, input, model.OCreate)) + return api.NewServiceAliasResponse(api.ExecuteSuccess, out) +} + +/** + * @brief 创建服务别名 + */ +func (s *Server) CreateServiceAliasNoAuth(ctx context.Context, req *api.ServiceAlias) *api.Response { + rid := ParseRequestID(ctx) + + // 检查请求参数 + if resp := checkServiceAliasReqWithNoAuth(req); resp != nil { + return resp + } + + // 检查服务别名是否存在 + if req.GetAlias().GetValue() != "" { + alias, err := s.storage.GetService(req.GetAlias().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + if alias != nil { + return api.NewServiceAliasResponse(api.ExistedResource, req) + } + } + + tx, err := s.storage.CreateTransaction() + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + defer func() { _ = tx.Commit() }() + + service, response, done := s.checkPointServiceAlias(err, tx, req, rid) + if done { + return response + } + + // 构造存储层模型,这里包含了创建SID + data, resp := s.createServiceAliasModel(req, service, NewUUID(), req.GetOwners().GetValue()) + if resp != nil { + return resp + } + + // 执行存储层操作 + if err := s.storage.AddService(data); err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + + log.Info(fmt.Sprintf("create service alias, service(%s, %s), alias(%s)", + req.GetService().GetValue(), req.GetNamespace().GetValue(), data.Name), ZapRequestID(rid)) + + if req.GetAlias().GetValue() == "" { + req.Alias = utils.NewStringValue(data.Name) + } + req.ServiceToken = utils.NewStringValue(data.Token) + + record := &api.Service{Name: req.Alias, Namespace: req.Namespace} + s.RecordHistory(serviceRecordEntry(ctx, record, data, model.OCreate)) + + return api.NewServiceAliasResponse(api.ExecuteSuccess, req) +} + +func (s *Server) checkPointServiceAlias( + err error, tx store.Transaction, req *api.ServiceAlias, rid string) (*model.Service, *api.Response, bool) { + // 检查指向服务是否存在以及是否为别名 + service, err := tx.LockService(req.GetService().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return nil, api.NewServiceAliasResponse(api.StoreLayerException, req), true + } + if service == nil { + return nil, api.NewServiceAliasResponse(api.NotFoundService, req), true + } + // 检查该服务是否已经是一个别名服务,不允许再为别名创建别名 + if service.IsAlias() { + return nil, api.NewServiceAliasResponse(api.NotAllowCreateAliasForAlias, req), true + } + return service, nil, false +} + +/** + * @brief 删除服务别名 + * @note 需要带上源服务name,namespace,token + * @note 另外一种删除别名的方式,是直接调用删除服务的接口,也是可行的 + */ +func (s *Server) DeleteServiceAlias(ctx context.Context, req *api.ServiceAlias) *api.Response { + if resp := checkReviseServiceAliasReq(ctx, req); resp != nil { + return resp + } + rid := ParseRequestID(ctx) + service, err := s.storage.GetService(req.GetService().GetValue(), + req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + if service == nil { + return api.NewServiceAliasResponse(api.NotFoundService, req) + } + // 鉴权 + actualToken := parseRequestToken(ctx, req.GetServiceToken().GetValue()) + if ok := s.authority.VerifyService(service.Token, actualToken); !ok { + return api.NewServiceAliasResponse(api.Unauthorized, req) + } + + // 直接删除alias + if err := s.storage.DeleteServiceAlias(req.GetAlias().GetValue(), + req.GetNamespace().GetValue()); err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + + return api.NewServiceAliasResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 修改服务别名 + */ +func (s *Server) UpdateServiceAlias(ctx context.Context, req *api.ServiceAlias) *api.Response { + rid := ParseRequestID(ctx) + + // 检查请求参数 + if resp := checkReviseServiceAliasReq(ctx, req); resp != nil { + return resp + } + + // 检查别名负责人 + if err := checkResourceOwners(req.GetOwners()); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceAliasOwners, req) + } + + // 检查服务别名是否存在 + alias, err := s.storage.GetService(req.GetAlias().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + if alias == nil { + return api.NewServiceAliasResponse(api.NotFoundServiceAlias, req) + } + + // 鉴权 + actualToken := parseRequestToken(ctx, req.GetServiceToken().GetValue()) + if ok := s.authority.VerifyService(alias.Token, actualToken); !ok { + return api.NewServiceAliasResponse(api.Unauthorized, req) + } + + // 检查将要指向的服务是否存在 + service, err := s.storage.GetService(req.GetService().GetValue(), req.GetNamespace().GetValue()) + if err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return api.NewServiceAliasResponse(api.StoreLayerException, req) + } + if service == nil { + return api.NewServiceAliasResponse(api.NotFoundService, req) + } + // 检查该服务是否已经是一个别名服务,不允许再为别名创建别名 + if service.IsAlias() { + return api.NewServiceAliasResponse(api.NotAllowCreateAliasForAlias, req) + } + + // 判断是否需要修改 + resp, needUpdate, needUpdateOwner := s.updateServiceAliasAttribute(req, alias, service.ID) + if resp != nil { + return resp + } + + if !needUpdate { + log.Info("update service alias data no change, no need update", ZapRequestID(rid), + zap.String("service alias", req.String())) + return api.NewServiceAliasResponse(api.NoNeedUpdate, req) + } + + // 执行存储层操作 + if err := s.storage.UpdateServiceAlias(alias, needUpdateOwner); err != nil { + log.Error(err.Error(), ZapRequestID(rid)) + return wrapperServiceAliasResponse(req, err) + } + + log.Info(fmt.Sprintf("update service alias, service(%s, %s), alias(%s)", + req.GetService().GetValue(), req.GetNamespace().GetValue(), req.GetAlias().GetValue()), ZapRequestID(rid)) + + record := &api.Service{Name: req.Alias, Namespace: req.Namespace} + s.RecordHistory(serviceRecordEntry(ctx, record, alias, model.OUpdate)) + + return api.NewServiceAliasResponse(api.ExecuteSuccess, req) +} + +/** + * @brief 查找服务别名 + */ +func (s *Server) GetServiceAliases(query map[string]string) *api.BatchQueryResponse { + // 先处理offset和limit + offset, limit, err := ParseOffsetAndLimit(query) + if err != nil { + return api.NewBatchQueryResponse(api.InvalidParameter) + } + + // 处理剩余的参数 + filter := make(map[string]string) + for key, value := range query { + if _, ok := AliasFilterAttributes[key]; !ok { + log.Errorf("[Server][Alias][Query] attribute(%s) is not allowed", key) + return api.NewBatchQueryResponse(api.InvalidParameter) + } + filter[key] = value + } + + total, aliases, err := s.storage.GetServiceAliases(filter, offset, limit) + if err != nil { + log.Errorf("[Server][Alias] get aliases err: %s", err.Error()) + return api.NewBatchQueryResponse(api.StoreLayerException) + } + + resp := api.NewBatchQueryResponse(api.ExecuteSuccess) + resp.Amount = utils.NewUInt32Value(total) + resp.Size = utils.NewUInt32Value(uint32(len(aliases))) + resp.Aliases = make([]*api.ServiceAlias, 0, len(aliases)) + for _, entry := range aliases { + item := &api.ServiceAlias{ + Service: utils.NewStringValue(entry.Service), + Namespace: utils.NewStringValue(entry.Namespace), + Alias: utils.NewStringValue(entry.Alias), + Owners: utils.NewStringValue(entry.Owner), + Comment: utils.NewStringValue(entry.Comment), + Ctime: utils.NewStringValue(time2String(entry.CreateTime)), + Mtime: utils.NewStringValue(time2String(entry.ModifyTime)), + } + resp.Aliases = append(resp.Aliases, item) + } + + return resp +} + +// 检查别名请求 +func checkServiceAliasReq(ctx context.Context, req *api.ServiceAlias) *api.Response { + response, done := preCheckAlias(req) + if done { + return response + } + + if token := parseRequestToken(ctx, req.GetServiceToken().GetValue()); token == "" { + return api.NewServiceAliasResponse(api.InvalidServiceToken, req) + } + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbServiceAliasFieldLen(req) + if notOk { + return err + } + return nil +} + +func preCheckAlias(req *api.ServiceAlias) (*api.Response, bool) { + if req == nil { + return api.NewServiceAliasResponse(api.EmptyRequest, req), true + } + + if err := checkResourceName(req.GetService()); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceName, req), true + } + + if err := checkResourceName(req.GetNamespace()); err != nil { + return api.NewServiceAliasResponse(api.InvalidNamespaceName, req), true + } + + // 默认类型,需要检查alias是否为空 + if req.GetType() == api.AliasType_DEFAULT { + if err := checkResourceName(req.GetAlias()); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceAlias, req), true + } + } + return nil, false +} + +/** + * @brief 检查创建别名请求(无鉴权) + */ +func checkServiceAliasReqWithNoAuth(req *api.ServiceAlias) *api.Response { + response, done := preCheckAlias(req) + if done { + return response + } + // 检查负责人 + if err := checkResourceOwners(req.GetOwners()); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceAliasOwners, req) + } + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbServiceAliasFieldLen(req) + if notOk { + return err + } + + return nil +} + +/** + * @brief 检查删除、修改别名请求 + */ +func checkReviseServiceAliasReq(ctx context.Context, req *api.ServiceAlias) *api.Response { + if req == nil { + return api.NewServiceAliasResponse(api.EmptyRequest, req) + } + + // 检查服务别名 + if err := checkResourceName(req.GetAlias()); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceAlias, req) + } + + // 检查token + if token := parseRequestToken(ctx, req.GetServiceToken().GetValue()); token == "" { + return api.NewServiceAliasResponse(api.InvalidServiceToken, req) + } + + // 检查服务名 + if err := checkResourceName(req.GetService()); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceName, req) + } + + // 检查命名空间 + if err := checkResourceName(req.GetNamespace()); err != nil { + return api.NewServiceAliasResponse(api.InvalidNamespaceName, req) + } + + // 检查字段长度是否大于DB中对应字段长 + err, notOk := CheckDbServiceAliasFieldLen(req) + if notOk { + return err + } + + return nil +} + +/** + * @brief 修改服务别名属性 + */ +func (s *Server) updateServiceAliasAttribute(req *api.ServiceAlias, alias *model.Service, serviceID string) ( + *api.Response, bool, bool) { + needUpdate := false + needUpdateOwner := false + + // 获取当前指向服务 + service, err := s.storage.GetServiceByID(alias.Reference) + if err != nil { + return api.NewServiceAliasResponse(api.StoreLayerException, req), needUpdate, needUpdateOwner + } + + if service.ID != serviceID { + alias.Reference = serviceID + needUpdate = true + } + + if req.GetOwners().GetValue() != alias.Owner { + alias.Owner = req.GetOwners().GetValue() + needUpdate = true + needUpdateOwner = true + } + + if req.GetComment() != nil && req.GetComment().GetValue() != alias.Comment { + alias.Comment = req.GetComment().GetValue() + needUpdate = true + } + + if needUpdate { + alias.Revision = NewUUID() + } + + return nil, needUpdate, needUpdateOwner +} + +/** + * @brief 构建存储结构 + */ +func (s *Server) createServiceAliasModel(req *api.ServiceAlias, service *model.Service, token string, owner string) ( + *model.Service, *api.Response) { + out := &model.Service{ + ID: NewUUID(), + Name: req.GetAlias().GetValue(), + Namespace: req.GetNamespace().GetValue(), + Reference: service.ID, + Token: token, + Owner: owner, + Comment: req.GetComment().GetValue(), + Revision: NewUUID(), + } + + // sid类型,则创建SID + if req.GetType() == api.AliasType_CL5SID { + layoutID, ok := Namespace2SidLayoutID[req.GetNamespace().GetValue()] + if !ok { + log.Errorf("[Server][Alias] namespace(%s) not allow to create sid alias", + req.GetNamespace().GetValue()) + return nil, api.NewServiceAliasResponse(api.InvalidNamespaceWithAlias, req) + } + sid, err := s.storage.GenNextL5Sid(layoutID) + if err != nil { + log.Errorf("[Server] gen next l5 sid err: %s", err.Error()) + return nil, api.NewServiceAliasResponse(api.StoreLayerException, req) + } + out.Name = sid + } + + return out, nil +} + +// 根据Reference获取源服务的token +func (s *Server) getSourceServiceToken(refer string) (string, uint32, error) { + if refer == "" { + return "", 0, nil + } + service, err := s.storage.GetServiceByID(refer) + if err != nil { + return "", api.StoreLayerException, err + } + if service == nil { + return "", api.NotFoundSourceService, errors.New("not found source service") + } + + return service.Token, 0, nil +} + +/** + * @brief wrapper service alias error + */ +func wrapperServiceAliasResponse(alias *api.ServiceAlias, err error) *api.Response { + resp := storeError2Response(err) + if resp == nil { + return nil + } + + resp.Alias = alias + return resp +} + +// 检查DB中service表对应的入参字段合法性 +func CheckDbServiceAliasFieldLen(req *api.ServiceAlias) (*api.Response, bool) { + if err := CheckDbStrFieldLen(req.GetService(), MaxDbServiceNameLength); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceName, req), true + } + if err := CheckDbStrFieldLen(req.GetNamespace(), MaxDbServiceNamespaceLength); err != nil { + return api.NewServiceAliasResponse(api.InvalidNamespaceName, req), true + } + if err := CheckDbStrFieldLen(req.GetAlias(), MaxDbServiceNameLength); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceAlias, req), true + } + if err := CheckDbStrFieldLen(req.GetComment(), MaxDbServiceCommentLength); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceAliasComment, req), true + } + if err := CheckDbStrFieldLen(req.GetOwners(), MaxDbServiceOwnerLength); err != nil { + return api.NewServiceAliasResponse(api.InvalidServiceAliasOwners, req), true + } + return nil, false +} diff --git a/naming/test/README.md b/naming/test/README.md new file mode 100644 index 000000000..baad60938 --- /dev/null +++ b/naming/test/README.md @@ -0,0 +1,13 @@ +# 接口测试 + +> 对业务逻辑进行完整性测试 + +## 依赖 +* 数据库地址,配置一个测试的数据库地址 + + + +## 执行 +``` +go test -v +``` \ No newline at end of file diff --git a/naming/test/circuitbreaker_config_test.go b/naming/test/circuitbreaker_config_test.go new file mode 100644 index 000000000..600ed52d6 --- /dev/null +++ b/naming/test/circuitbreaker_config_test.go @@ -0,0 +1,1308 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming" + "sync" + "testing" + "time" +) + +/** + * @brief 测试创建熔断规则 + */ +func TestCreateCircuitBreaker(t *testing.T) { + t.Run("正常创建熔断规则,返回成功", func(t *testing.T) { + circuitBreakerReq, circuitBreakerResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(circuitBreakerResp.GetId().GetValue(), circuitBreakerResp.GetVersion().GetValue()) + checkCircuitBreaker(t, circuitBreakerReq, circuitBreakerReq, circuitBreakerResp) + }) + + t.Run("重复创建熔断规则,返回错误", func(t *testing.T) { + _, circuitBreakerResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(circuitBreakerResp.GetId().GetValue(), circuitBreakerResp.GetVersion().GetValue()) + + if resp := server.CreateCircuitBreaker(defaultCtx, circuitBreakerResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建熔断规则,删除,再创建,返回成功", func(t *testing.T) { + _, circuitBreakerResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(circuitBreakerResp.GetId().GetValue(), circuitBreakerResp.GetVersion().GetValue()) + deleteCircuitBreaker(t, circuitBreakerResp) + + newCircuitBreakerReq, newCircuitBreakerResp := createCommonCircuitBreaker(t, 0) + checkCircuitBreaker(t, newCircuitBreakerReq, newCircuitBreakerReq, newCircuitBreakerResp) + cleanCircuitBreaker(newCircuitBreakerResp.GetId().GetValue(), newCircuitBreakerResp.GetVersion().GetValue()) + }) + + t.Run("创建熔断规则时,没有传递负责人,返回错误", func(t *testing.T) { + circuitBreaker := &api.CircuitBreaker{} + if resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建熔断规则时,没有传递规则名,返回错误", func(t *testing.T) { + circuitBreaker := &api.CircuitBreaker{ + Namespace: utils.NewStringValue(naming.DefaultNamespace), + Owners: utils.NewStringValue("test"), + } + if resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建熔断规则时,没有传递命名空间,返回错误", func(t *testing.T) { + circuitBreaker := &api.CircuitBreaker{ + Name: utils.NewStringValue("name-test-1"), + Owners: utils.NewStringValue("test"), + } + if resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发创建熔断规则,返回成功", func(t *testing.T) { + var wg sync.WaitGroup + for i := 0; i < 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + _, circuitBreakerResp := createCommonCircuitBreaker(t, index) + cleanCircuitBreaker(circuitBreakerResp.GetId().GetValue(), circuitBreakerResp.GetVersion().GetValue()) + }(i) + } + wg.Wait() + }) +} + +/** + * @brief 测试创建熔断规则版本 + */ +func TestCreateCircuitBreakerVersion(t *testing.T) { + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + t.Run("正常创建熔断规则版本", func(t *testing.T) { + cbVersionReq, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + checkCircuitBreaker(t, cbVersionReq, cbVersionReq, cbVersionResp) + }) + + t.Run("传递id,正常创建熔断规则版本", func(t *testing.T) { + cbVersionReq := &api.CircuitBreaker{ + Id: cbResp.GetId(), + Version: utils.NewStringValue("test"), + Token: cbResp.GetToken(), + } + + resp := server.CreateCircuitBreakerVersion(defaultCtx, cbVersionReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + cbVersionResp := resp.GetCircuitBreaker() + + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + checkCircuitBreaker(t, cbVersionReq, cbVersionReq, cbVersionResp) + }) + + t.Run("传递name和namespace,正常创建熔断规则版本", func(t *testing.T) { + cbVersionReq := &api.CircuitBreaker{ + Version: utils.NewStringValue("test"), + Name: cbResp.GetName(), + Namespace: cbResp.GetNamespace(), + Token: cbResp.GetToken(), + } + + resp := server.CreateCircuitBreakerVersion(defaultCtx, cbVersionReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + cbVersionResp := resp.GetCircuitBreaker() + + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + checkCircuitBreaker(t, cbVersionReq, cbVersionReq, cbVersionResp) + }) + + t.Run("创建熔断规则版本,删除,再创建,返回成功", func(t *testing.T) { + cbVersionReq, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + deleteCircuitBreaker(t, cbVersionResp) + cbVersionReq, cbVersionResp = createCommonCircuitBreakerVersion(t, cbResp, 0) + checkCircuitBreaker(t, cbVersionReq, cbVersionReq, cbVersionResp) + }) + + t.Run("为不存在的熔断规则创建版本,返回错误", func(t *testing.T) { + _, cbResp := createCommonCircuitBreaker(t, 1) + cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + version := &api.CircuitBreaker{ + Id: cbResp.GetId(), + Version: utils.NewStringValue("test"), + Token: cbResp.GetToken(), + Owners: cbResp.GetOwners(), + } + + if resp := server.CreateCircuitBreakerVersion(defaultCtx, version); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建master版本的熔断规则,返回错误", func(t *testing.T) { + if resp := server.CreateCircuitBreakerVersion(defaultCtx, cbResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建熔断规则版本时,没有传递version,返回错误", func(t *testing.T) { + version := &api.CircuitBreaker{ + Id: cbResp.GetId(), + Token: cbResp.GetToken(), + Owners: cbResp.GetOwners(), + } + if resp := server.CreateCircuitBreakerVersion(defaultCtx, version); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建熔断规则版本时,没有传递token,返回错误", func(t *testing.T) { + version := &api.CircuitBreaker{ + Id: cbResp.GetId(), + Version: cbResp.GetVersion(), + Owners: cbResp.GetOwners(), + } + if resp := server.CreateCircuitBreakerVersion(defaultCtx, version); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建熔断规则版本时,没有传递name,返回错误", func(t *testing.T) { + version := &api.CircuitBreaker{ + Version: cbResp.GetVersion(), + Token: cbResp.GetToken(), + Namespace: cbResp.GetNamespace(), + } + if resp := server.CreateCircuitBreakerVersion(defaultCtx, version); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建熔断规则版本时,没有传递namespace,返回错误", func(t *testing.T) { + version := &api.CircuitBreaker{ + Version: cbResp.GetVersion(), + Token: cbResp.GetToken(), + Name: cbResp.GetName(), + } + if resp := server.CreateCircuitBreakerVersion(defaultCtx, version); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发创建同一个规则的多个版本,返回成功", func(t *testing.T) { + var wg sync.WaitGroup + for i := 0; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + cbVersionReq, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, index) + checkCircuitBreaker(t, cbVersionReq, cbVersionReq, cbVersionResp) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/** + * @brief 删除熔断规则 + */ +func TestDeleteCircuitBreaker(t *testing.T) { + getCircuitBreakerVersions := func(t *testing.T, id string, expectNum uint32) { + filters := map[string]string{ + "id": id, + } + resp := server.GetCircuitBreakerVersions(filters) + if !respSuccess(resp) { + t.Fatal("error") + } + if resp.GetAmount().GetValue() != expectNum { + t.Fatalf("error, actual num is %d, expect num is %d", resp.GetAmount().GetValue(), expectNum) + } else { + t.Log("pass") + } + } + + t.Run("根据name和namespace删除master版本的熔断规则", func(t *testing.T) { + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + for i := 1; i <= 10; i++ { + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, i) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + } + + rule := &api.CircuitBreaker{ + Version: cbResp.GetVersion(), + Name: cbResp.GetName(), + Namespace: cbResp.GetNamespace(), + Token: cbResp.GetToken(), + } + + deleteCircuitBreaker(t, rule) + getCircuitBreakerVersions(t, cbResp.GetId().GetValue(), 0) + }) + + t.Run("删除master版本的熔断规则", func(t *testing.T) { + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + for i := 1; i <= 10; i++ { + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, i) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + } + + deleteCircuitBreaker(t, cbResp) + getCircuitBreakerVersions(t, cbResp.GetId().GetValue(), 0) + }) + + t.Run("删除非master版本的熔断规则", func(t *testing.T) { + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + for i := 1; i <= 10; i++ { + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, i) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + } + + // 删除特定版本的熔断规则 + deleteCircuitBreaker(t, cbVersionResp) + + getCircuitBreakerVersions(t, cbResp.GetId().GetValue(), 1+10) + }) + + t.Run("根据name和namespace删除非master版本的熔断规则", func(t *testing.T) { + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + for i := 1; i <= 10; i++ { + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, i) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + } + + // 删除特定版本的熔断规则 + rule := &api.CircuitBreaker{ + Version: cbVersionResp.GetVersion(), + Name: cbVersionResp.GetName(), + Namespace: cbVersionResp.GetNamespace(), + Token: cbVersionResp.GetToken(), + } + deleteCircuitBreaker(t, rule) + + getCircuitBreakerVersions(t, cbResp.GetId().GetValue(), 1+10) + }) + + t.Run("删除不存在的熔断规则,返回成功", func(t *testing.T) { + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + deleteCircuitBreaker(t, cbResp) + getCircuitBreakerVersions(t, cbResp.GetId().GetValue(), 0) + }) + + t.Run("删除熔断规则时,没有传递token,返回错误", func(t *testing.T) { + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + rule := &api.CircuitBreaker{ + Id: cbResp.GetId(), + Version: cbResp.GetVersion(), + } + + if resp := server.DeleteCircuitBreaker(defaultCtx, rule); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("删除熔断规则时,没有传递name和id,返回错误", func(t *testing.T) { + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + rule := &api.CircuitBreaker{ + Version: cbResp.GetVersion(), + Namespace: cbResp.GetNamespace(), + Token: cbResp.GetToken(), + } + + if resp := server.DeleteCircuitBreaker(defaultCtx, rule); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("删除已发布的规则,返回错误", func(t *testing.T) { + // 创建服务 + _, serviceResp := createCommonService(t, 0) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 发布熔断规则 + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 删除master版本 + if resp := server.DeleteCircuitBreaker(defaultCtx, cbResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + + // 删除其他版本 + if resp := server.DeleteCircuitBreaker(defaultCtx, cbVersionResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建多个版本的规则,并发布其中一个规则,删除未发布规则,可以正常删除", func(t *testing.T) { + // 创建服务 + _, serviceResp := createCommonService(t, 0) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + _, newCbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 1) + defer cleanCircuitBreaker(newCbVersionResp.GetId().GetValue(), newCbVersionResp.GetVersion().GetValue()) + + // 发布熔断规则 + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + deleteCircuitBreaker(t, newCbVersionResp) + getCircuitBreakerVersions(t, cbResp.GetId().GetValue(), 1+1) + }) + + t.Run("并发删除熔断规则,可以正常删除", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + _, cbResp := createCommonCircuitBreaker(t, index) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + deleteCircuitBreaker(t, cbResp) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/** + * @brief 测试更新熔断规则 + */ +func TestUpdateCircuitBreaker(t *testing.T) { + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + t.Run("更新master版本的熔断规则,返回成功", func(t *testing.T) { + cbResp.Inbounds = []*api.CbRule{} + updateCircuitBreaker(t, cbResp) + + filters := map[string]string{ + "id": cbResp.GetId().GetValue(), + "version": cbResp.GetVersion().GetValue(), + } + + resp := server.GetCircuitBreaker(filters) + if !respSuccess(resp) { + t.Fatal("error") + } + checkCircuitBreaker(t, cbResp, cbResp, resp.GetConfigWithServices()[0].GetCircuitBreaker()) + }) + + t.Run("没有更新任何字段,返回不需要更新", func(t *testing.T) { + if resp := server.UpdateCircuitBreaker(defaultCtx, cbResp); respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("没有传递任何可更新的字段,返回不需要更新", func(t *testing.T) { + rule := &api.CircuitBreaker{ + Id: cbResp.GetId(), + Version: cbResp.GetVersion(), + Token: cbResp.GetToken(), + } + if resp := server.UpdateCircuitBreaker(defaultCtx, rule); respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("负责人为空,返回错误", func(t *testing.T) { + rule := &api.CircuitBreaker{ + Id: cbResp.GetId(), + Version: cbResp.GetVersion(), + Token: cbResp.GetToken(), + Owners: utils.NewStringValue(""), + } + if resp := server.UpdateCircuitBreaker(defaultCtx, rule); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("更新其他版本的熔断规则,返回错误", func(t *testing.T) { + // 创建熔断规则版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + if resp := server.UpdateCircuitBreaker(defaultCtx, cbVersionResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("更新不存在的熔断规则,返回错误", func(t *testing.T) { + cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + if resp := server.UpdateCircuitBreaker(defaultCtx, cbResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("更新熔断规则时,没有传递token,返回错误", func(t *testing.T) { + rule := &api.CircuitBreaker{ + Id: cbResp.GetId(), + Version: cbResp.GetVersion(), + } + if resp := server.UpdateCircuitBreaker(defaultCtx, rule); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发更新熔断规则时,可以正常更新", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, index) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + cbResp.Owners = utils.NewStringValue(fmt.Sprintf("test-owner-%d", index)) + + updateCircuitBreaker(t, cbResp) + + filters := map[string]string{ + "id": cbResp.GetId().GetValue(), + "version": cbResp.GetVersion().GetValue(), + } + resp := server.GetCircuitBreaker(filters) + if !respSuccess(resp) { + t.Fatal("error") + } + checkCircuitBreaker(t, cbResp, cbResp, resp.GetConfigWithServices()[0].GetCircuitBreaker()) + }(i) + } + wg.Wait() + }) +} + +/** + * @brief 测试发布熔断规则 + */ +func TestReleaseCircuitBreaker(t *testing.T) { + // 创建服务 + _, serviceResp := createCommonService(t, 0) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则的版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + t.Run("正常发布熔断规则", func(t *testing.T) { + _ = server.Cache().Clear() + + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 等待缓存更新 + time.Sleep(updateCacheInterval) + + resp := server.GetCircuitBreakerWithCache(defaultCtx, serviceResp) + checkCircuitBreaker(t, cbVersionResp, cbResp, resp.GetCircuitBreaker()) + }) + + t.Run("根据name和namespace发布熔断规则", func(t *testing.T) { + _ = server.Cache().Clear() + + rule := &api.CircuitBreaker{ + Version: cbVersionResp.GetVersion(), + Name: cbVersionResp.GetName(), + Namespace: cbVersionResp.GetNamespace(), + } + releaseCircuitBreaker(t, rule, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 等待缓存更新 + time.Sleep(updateCacheInterval) + + resp := server.GetCircuitBreakerWithCache(defaultCtx, serviceResp) + checkCircuitBreaker(t, cbVersionResp, cbResp, resp.GetCircuitBreaker()) + }) + + t.Run("为同一个服务发布多条不同熔断规则", func(t *testing.T) { + _ = server.Cache().Clear() + + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 创建熔断规则的版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 1) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 再次发布熔断规则 + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 等待缓存更新 + time.Sleep(updateCacheInterval) + + resp := server.GetCircuitBreakerWithCache(defaultCtx, serviceResp) + checkCircuitBreaker(t, cbVersionResp, cbResp, resp.GetCircuitBreaker()) + }) + + t.Run("为不同服务发布相同熔断规则,返回成功", func(t *testing.T) { + _ = server.Cache().Clear() + + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 创建服务 + _, serviceResp2 := createCommonService(t, 1) + defer cleanServiceName(serviceResp2.GetName().GetValue(), serviceResp2.GetNamespace().GetValue()) + + releaseCircuitBreaker(t, cbVersionResp, serviceResp2) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 等待缓存更新 + time.Sleep(updateCacheInterval) + + resp := server.GetCircuitBreakerWithCache(defaultCtx, serviceResp) + checkCircuitBreaker(t, cbVersionResp, cbResp, resp.GetCircuitBreaker()) + + resp = server.GetCircuitBreakerWithCache(defaultCtx, serviceResp2) + checkCircuitBreaker(t, cbVersionResp, cbResp, resp.GetCircuitBreaker()) + }) + + t.Run("规则命名空间与服务命名空间不一致,返回错误", func(t *testing.T) { + release := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: utils.NewStringValue("Test"), + Token: serviceResp.GetToken(), + }, + CircuitBreaker: cbVersionResp, + } + + if resp := server.ReleaseCircuitBreaker(defaultCtx, release); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("为同一个服务发布多条相同熔断规则,返回错误", func(t *testing.T) { + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + release := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: cbVersionResp, + } + + if resp := server.ReleaseCircuitBreaker(defaultCtx, release); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("发布熔断规则时,没有传递token,返回错误", func(t *testing.T) { + release := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + }, + CircuitBreaker: cbVersionResp, + } + if resp := server.ReleaseCircuitBreaker(defaultCtx, release); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("发布服务不存在的熔断规则,返回错误", func(t *testing.T) { + _, serviceResp := createCommonService(t, 1) + cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + release := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: cbVersionResp, + } + if resp := server.ReleaseCircuitBreaker(defaultCtx, release); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("发布的熔断规则为master版本,返回错误", func(t *testing.T) { + release := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: cbResp, + } + if resp := server.ReleaseCircuitBreaker(defaultCtx, release); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("发布不存在的熔断规则,返回错误", func(t *testing.T) { + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 1) + cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + release := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: cbVersionResp, + } + if resp := server.ReleaseCircuitBreaker(defaultCtx, release); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发发布同一个服务的熔断规则", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, index) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/** + * @brief 测试解绑熔断规则 + */ +func TestUnBindCircuitBreaker(t *testing.T) { + // 创建服务 + _, serviceResp := createCommonService(t, 0) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则的版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 0) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + t.Run("正常解绑熔断规则", func(t *testing.T) { + _ = server.Cache().Clear() + + // 发布熔断规则 + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + unBindCircuitBreaker(t, cbVersionResp, serviceResp) + + // 等待缓存更新 + time.Sleep(updateCacheInterval) + + resp := server.GetCircuitBreakerWithCache(defaultCtx, serviceResp) + if resp != nil && resp.GetCircuitBreaker() == nil { + t.Log("pass") + } else { + t.Fatalf("err is %+v", resp) + } + }) + + t.Run("解绑关系不存在的熔断规则, 返回成功", func(t *testing.T) { + _ = server.Cache().Clear() + + // 发布熔断规则 + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + // 创建熔断规则的版本 + _, newCbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 1) + defer cleanCircuitBreaker(newCbVersionResp.GetId().GetValue(), newCbVersionResp.GetVersion().GetValue()) + + unBindCircuitBreaker(t, newCbVersionResp, serviceResp) + + // 等待缓存更新 + time.Sleep(updateCacheInterval) + + resp := server.GetCircuitBreakerWithCache(defaultCtx, serviceResp) + checkCircuitBreaker(t, cbVersionResp, cbResp, resp.GetCircuitBreaker()) + }) + + t.Run("解绑规则时没有传递token,返回错误", func(t *testing.T) { + unbind := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + }, + CircuitBreaker: cbVersionResp, + } + + if resp := server.UnBindCircuitBreaker(defaultCtx, unbind); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("解绑服务不存在的熔断规则,返回错误", func(t *testing.T) { + _, serviceResp := createCommonService(t, 1) + cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + unbind := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: cbVersionResp, + } + + if resp := server.UnBindCircuitBreaker(defaultCtx, unbind); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("解绑规则不存在的熔断规则,返回错误", func(t *testing.T) { + // 创建熔断规则的版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 1) + cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + unbind := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: cbVersionResp, + } + + if resp := server.UnBindCircuitBreaker(defaultCtx, unbind); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("解绑master版本的熔断规则,返回错误", func(t *testing.T) { + unbind := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: cbResp, + } + + if resp := server.UnBindCircuitBreaker(defaultCtx, unbind); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("解绑熔断规则时没有传递name,返回错误", func(t *testing.T) { + unbind := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: &api.CircuitBreaker{ + Version: cbVersionResp.GetVersion(), + Namespace: cbVersionResp.GetNamespace(), + }, + } + + if resp := server.UnBindCircuitBreaker(defaultCtx, unbind); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发解绑熔断规则", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + + // 创建服务 + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 发布熔断规则 + releaseCircuitBreaker(t, cbVersionResp, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + unBindCircuitBreaker(t, cbVersionResp, serviceResp) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/** + * @brief 测试查询熔断规则 + */ +func TestGetCircuitBreaker(t *testing.T) { + versionNum := 10 + serviceNum := 2 + releaseVersion := &api.CircuitBreaker{} + deleteVersion := &api.CircuitBreaker{} + service := &api.Service{} + + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + // 创建熔断规则版本 + for i := 1; i <= versionNum; i++ { + // 创建熔断规则的版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, i) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + if i == 5 { + releaseVersion = cbVersionResp + } + + if i == versionNum { + deleteVersion = cbVersionResp + } + } + + // 删除一个版本的熔断规则 + deleteCircuitBreaker(t, deleteVersion) + + // 发布熔断规则 + for i := 1; i <= serviceNum; i++ { + _, serviceResp := createCommonService(t, i) + if i == 1 { + service = serviceResp + } + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + releaseCircuitBreaker(t, releaseVersion, serviceResp) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + releaseVersion.GetId().GetValue(), releaseVersion.GetVersion().GetValue()) + } + + t.Run("测试获取熔断规则的所有版本", func(t *testing.T) { + filters := map[string]string{ + "id": cbResp.GetId().GetValue(), + } + + resp := server.GetCircuitBreakerVersions(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetAmount().GetValue() != resp.GetSize().GetValue() || + resp.GetSize().GetValue() != uint32(versionNum) || len(resp.GetConfigWithServices()) != versionNum { + t.Fatalf("amount is %d, size is %d, num is %d, expect num is %d", resp.GetAmount().GetValue(), + resp.GetSize().GetValue(), len(resp.GetConfigWithServices()), versionNum) + } + t.Logf("pass: num is %d", resp.GetSize().GetValue()) + }) + + t.Run("测试获取熔断规则创建过的版本", func(t *testing.T) { + filters := map[string]string{ + "id": cbResp.GetId().GetValue(), + } + + resp := server.GetReleaseCircuitBreakers(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetAmount().GetValue() != resp.GetSize().GetValue() || + resp.GetSize().GetValue() != uint32(serviceNum) { + t.Fatalf("amount is %d, size is %d, expect num is %d", resp.GetAmount().GetValue(), + resp.GetSize().GetValue(), versionNum) + } + t.Logf("pass: num is %d", resp.GetSize().GetValue()) + }) + + t.Run("测试获取指定版本的熔断规则", func(t *testing.T) { + filters := map[string]string{ + "id": releaseVersion.GetId().GetValue(), + "version": releaseVersion.GetVersion().GetValue(), + } + + resp := server.GetCircuitBreaker(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + checkCircuitBreaker(t, releaseVersion, cbResp, resp.GetConfigWithServices()[0].GetCircuitBreaker()) + }) + + t.Run("根据服务获取绑定的熔断规则", func(t *testing.T) { + filters := map[string]string{ + "service": service.GetName().GetValue(), + "namespace": service.GetNamespace().GetValue(), + } + + resp := server.GetCircuitBreakerByService(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + checkCircuitBreaker(t, releaseVersion, cbResp, resp.GetConfigWithServices()[0].GetCircuitBreaker()) + }) +} + +/** + * @brief 测试查询熔断规则 + */ +func TestGetCircuitBreaker2(t *testing.T) { + // 创建服务 + _, serviceResp := createCommonService(t, 0) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 0) + cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + + t.Run("熔断规则不存在,测试获取所有版本", func(t *testing.T) { + filters := map[string]string{ + "id": cbResp.GetId().GetValue(), + } + + resp := server.GetCircuitBreakerVersions(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetAmount().GetValue() != 0 || resp.GetSize().GetValue() != 0 || + len(resp.GetConfigWithServices()) != 0 { + t.Fatalf("amount is %d, size is %d, num is %d", resp.GetAmount().GetValue(), + resp.GetSize().GetValue(), len(resp.GetConfigWithServices())) + } + t.Logf("pass: resp is %+v, configServices is %+v", resp, resp.GetConfigWithServices()) + }) + + t.Run("熔断规则不存在,测试获取所有创建过的版本", func(t *testing.T) { + filters := map[string]string{ + "id": cbResp.GetId().GetValue(), + } + + resp := server.GetReleaseCircuitBreakers(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetAmount().GetValue() != 0 || resp.GetSize().GetValue() != 0 || + len(resp.GetConfigWithServices()) != 0 { + t.Fatalf("amount is %d, size is %d, num is %d", resp.GetAmount().GetValue(), + resp.GetSize().GetValue(), len(resp.GetConfigWithServices())) + } + t.Logf("pass: resp is %+v, configServices is %+v", resp, resp.GetConfigWithServices()) + }) + + t.Run("熔断规则不存在,测试获取指定版本的熔断规则", func(t *testing.T) { + filters := map[string]string{ + "id": cbResp.GetId().GetValue(), + "version": cbResp.GetVersion().GetValue(), + } + + resp := server.GetCircuitBreaker(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetAmount().GetValue() != 0 || resp.GetSize().GetValue() != 0 || + len(resp.GetConfigWithServices()) != 0 { + t.Fatalf("amount is %d, size is %d, num is %d", resp.GetAmount().GetValue(), + resp.GetSize().GetValue(), len(resp.GetConfigWithServices())) + } + t.Logf("pass: resp is %+v, configServices is %+v", resp, resp.GetConfigWithServices()) + }) + + t.Run("服务未绑定熔断规则,获取熔断规则", func(t *testing.T) { + filters := map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + } + + resp := server.GetCircuitBreakerByService(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetAmount().GetValue() != 0 || resp.GetSize().GetValue() != 0 || + len(resp.GetConfigWithServices()) != 0 { + t.Fatalf("amount is %d, size is %d, num is %d", resp.GetAmount().GetValue(), + resp.GetSize().GetValue(), len(resp.GetConfigWithServices())) + } + t.Logf("pass: resp is %+v, configServices is %+v", resp, resp.GetConfigWithServices()) + }) +} + +// test对CircuitBreaker字段进行校验 +func TestCheckCircuitBreakerFieldLen(t *testing.T) { + circuitBreaker := &api.CircuitBreaker{ + Name: utils.NewStringValue("name-test-123"), + Namespace: utils.NewStringValue(naming.DefaultNamespace), + Owners: utils.NewStringValue("owner-test"), + Comment: utils.NewStringValue("comment-test"), + Department: utils.NewStringValue("department-test"), + Business: utils.NewStringValue("business-test"), + } + t.Run("熔断名超长", func(t *testing.T) { + str := genSpecialStr(33) + oldName := circuitBreaker.Name + circuitBreaker.Name = utils.NewStringValue(str) + resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker) + circuitBreaker.Name = oldName + if resp.Code.Value != api.InvalidCircuitBreakerName { + t.Fatalf("%+v", resp) + } + }) + t.Run("熔断命名空间超长", func(t *testing.T) { + str := genSpecialStr(65) + oldNamespace := circuitBreaker.Namespace + circuitBreaker.Namespace = utils.NewStringValue(str) + resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker) + circuitBreaker.Namespace = oldNamespace + if resp.Code.Value != api.InvalidCircuitBreakerNamespace { + t.Fatalf("%+v", resp) + } + }) + t.Run("熔断business超长", func(t *testing.T) { + str := genSpecialStr(65) + oldBusiness := circuitBreaker.Business + circuitBreaker.Business = utils.NewStringValue(str) + resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker) + circuitBreaker.Business = oldBusiness + if resp.Code.Value != api.InvalidCircuitBreakerBusiness { + t.Fatalf("%+v", resp) + } + }) + t.Run("熔断部门超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldDepartment := circuitBreaker.Department + circuitBreaker.Department = utils.NewStringValue(str) + resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker) + circuitBreaker.Department = oldDepartment + if resp.Code.Value != api.InvalidCircuitBreakerDepartment { + t.Fatalf("%+v", resp) + } + }) + t.Run("熔断comment超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldComment := circuitBreaker.Comment + circuitBreaker.Comment = utils.NewStringValue(str) + resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker) + circuitBreaker.Comment = oldComment + if resp.Code.Value != api.InvalidCircuitBreakerComment { + t.Fatalf("%+v", resp) + } + }) + t.Run("熔断owner超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldOwners := circuitBreaker.Owners + circuitBreaker.Owners = utils.NewStringValue(str) + resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker) + circuitBreaker.Owners = oldOwners + if resp.Code.Value != api.InvalidCircuitBreakerOwners { + t.Fatalf("%+v", resp) + } + }) + t.Run("发布熔断规则超长", func(t *testing.T) { + release := &api.ConfigRelease{ + Service: &api.Service{ + Name: utils.NewStringValue("test"), + Namespace: utils.NewStringValue("default"), + Token: utils.NewStringValue("test"), + }, + CircuitBreaker: &api.CircuitBreaker{ + Name: utils.NewStringValue("test"), + Namespace: utils.NewStringValue("default"), + Version: utils.NewStringValue("1.0"), + }, + } + t.Run("发布熔断规则服务名超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldName := release.Service.Name + release.Service.Name = utils.NewStringValue(str) + resp := server.ReleaseCircuitBreaker(defaultCtx, release) + release.Service.Name = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("发布熔断规则服务命名空间超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldNamespace := release.Service.Namespace + release.Service.Namespace = utils.NewStringValue(str) + resp := server.ReleaseCircuitBreaker(defaultCtx, release) + release.Service.Namespace = oldNamespace + if resp.Code.Value != api.InvalidNamespaceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("发布熔断规则服务token超长", func(t *testing.T) { + str := genSpecialStr(2049) + oldToken := release.Service.Token + release.Service.Token = utils.NewStringValue(str) + resp := server.ReleaseCircuitBreaker(defaultCtx, release) + release.Service.Token = oldToken + if resp.Code.Value != api.InvalidServiceToken { + t.Fatalf("%+v", resp) + } + }) + t.Run("发布熔断规则熔断名超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldName := release.CircuitBreaker.Name + release.CircuitBreaker.Name = utils.NewStringValue(str) + resp := server.ReleaseCircuitBreaker(defaultCtx, release) + release.CircuitBreaker.Name = oldName + if resp.Code.Value != api.InvalidCircuitBreakerName { + t.Fatalf("%+v", resp) + } + }) + t.Run("发布熔断规则熔断命名空间超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldNamespace := release.CircuitBreaker.Namespace + release.CircuitBreaker.Namespace = utils.NewStringValue(str) + resp := server.ReleaseCircuitBreaker(defaultCtx, release) + release.CircuitBreaker.Namespace = oldNamespace + if resp.Code.Value != api.InvalidCircuitBreakerNamespace { + t.Fatalf("%+v", resp) + } + }) + t.Run("发布熔断规则熔断version超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldVersion := release.CircuitBreaker.Version + release.CircuitBreaker.Version = utils.NewStringValue(str) + resp := server.ReleaseCircuitBreaker(defaultCtx, release) + release.CircuitBreaker.Version = oldVersion + if resp.Code.Value != api.InvalidCircuitBreakerVersion { + t.Fatalf("%+v", resp) + } + }) + }) + +} diff --git a/naming/test/client_test.go b/naming/test/client_test.go new file mode 100644 index 000000000..50b32e12b --- /dev/null +++ b/naming/test/client_test.go @@ -0,0 +1,302 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + . "github.com/smartystreets/goconvey/convey" + "testing" + "time" +) + +// 测试client版本上报 +func TestReportClient(t *testing.T) { + Convey("可以进行正常的client上报", t, func() { + req := &api.Client{ + Host: utils.NewStringValue("127.0.0.1"), + Type: api.Client_SDK, + Version: utils.NewStringValue("v1.0.0"), + } + resp := server.ReportClient(defaultCtx, req) + So(respSuccess(resp), ShouldEqual, true) + }) +} + +// 测试discover instances +func TestDiscoverInstances(t *testing.T) { + Convey("服务发现测试", t, func() { + _, service := createCommonService(t, 5) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + count := 5 + var instances []*api.Instance + var reqInstances []*api.Instance + defer func() { + for _, entry := range instances { + cleanInstance(entry.GetId().GetValue()) + } + }() + for i := 0; i < count; i++ { + req, instance := createCommonInstance(t, service, i) + instances = append(instances, instance) + reqInstances = append(reqInstances, req) + } + Convey("正常服务发现,返回的数据齐全", func() { + time.Sleep(updateCacheInterval) + out := server.ServiceInstancesCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, true) + So(len(out.GetInstances()), ShouldEqual, count) + for _, resp := range out.GetInstances() { + found := false + for _, req := range reqInstances { + if resp.GetHost().GetValue() == req.GetHost().GetValue() { + instanceCheck(t, req, resp) // expect actual + // 检查resp中必须包含额外的metadata + So(resp.Metadata["version"], ShouldEqual, req.GetVersion().GetValue()) + So(resp.Metadata["protocol"], ShouldEqual, req.GetProtocol().GetValue()) + found = true + t.Logf("%+v", resp) + break + } + } + So(found, ShouldEqual, true) + } + }) + Convey("service-metadata修改,revision会修改", func() { + out := server.ServiceInstancesCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, true) + oldRevision := out.GetService().GetRevision().GetValue() + + service.Metadata = make(map[string]string) + service.Metadata["new-metadata1"] = "1233" + service.Metadata["new-metadata2"] = "2342" + resp := server.UpdateService(defaultCtx, service) + time.Sleep(updateCacheInterval) + So(respSuccess(resp), ShouldEqual, true) + So(resp.GetService().GetRevision().GetValue(), ShouldNotEqual, oldRevision) + So(resp.GetService().GetMetadata()["new-metadata1"], ShouldEqual, "1233") + So(resp.GetService().GetMetadata()["new-metadata2"], ShouldEqual, "2342") + serviceCheck(t, service, resp.GetService()) + }) + }) +} + +// 测试discover ratelimit +func TestDiscoverRateLimits(t *testing.T) { + Convey("限流规则测试", t, func() { + _, service := createCommonService(t, 1) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + _, rateLimitResp := createCommonRateLimit(t, service, 1) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + defer cleanRateLimitRevision(service.GetName().GetValue(), service.GetNamespace().GetValue()) + Convey("正常获取限流规则", func() { + time.Sleep(updateCacheInterval) + out := server.GetRateLimitWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, true) + So(len(out.GetRateLimit().GetRules()), ShouldEqual, 1) + checkRateLimit(t, rateLimitResp, out.GetRateLimit().GetRules()[0]) + t.Logf("pass: out is %+v", out) + // 再次请求 + out = server.GetRateLimitWithCache(defaultCtx, out.GetService()) + So(respSuccess(out), ShouldEqual, true) + So(out.GetCode().GetValue(), ShouldEqual, api.DataNoChange) + t.Logf("pass: out is %+v", out) + }) + Convey("限流规则已删除", func() { + deleteRateLimit(t, rateLimitResp) + time.Sleep(updateCacheInterval) + out := server.GetRateLimitWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, true) + So(len(out.GetRateLimit().GetRules()), ShouldEqual, 0) + t.Logf("pass: out is %+v", out) + }) + }) +} + +// 测试discover ratelimit +func TestDiscoverRateLimits2(t *testing.T) { + Convey("限流规则异常测试", t, func() { + _, service := createCommonService(t, 1) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + Convey("限流规则不存在", func() { + time.Sleep(updateCacheInterval) + out := server.GetRateLimitWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, true) + So(out.GetRateLimit(), ShouldBeNil) + t.Logf("pass: out is %+v", out) + }) + Convey("服务不存在", func() { + services := []*api.Service{service} + removeCommonServices(t, services) + time.Sleep(updateCacheInterval) + out := server.GetRateLimitWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, false) + t.Logf("pass: out is %+v", out) + }) + }) +} + +// 测试discover circuitbreaker +func TestDiscoverCircuitBreaker(t *testing.T) { + Convey("熔断规则测试", t, func() { + // 创建服务 + _, service := createCommonService(t, 1) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + // 创建熔断规则 + _, cbResp := createCommonCircuitBreaker(t, 1) + defer cleanCircuitBreaker(cbResp.GetId().GetValue(), cbResp.GetVersion().GetValue()) + // 创建熔断规则版本 + _, cbVersionResp := createCommonCircuitBreakerVersion(t, cbResp, 1) + defer cleanCircuitBreaker(cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + // 发布熔断规则 + releaseCircuitBreaker(t, cbVersionResp, service) + defer cleanCircuitBreakerRelation(service.GetName().GetValue(), service.GetNamespace().GetValue(), + cbVersionResp.GetId().GetValue(), cbVersionResp.GetVersion().GetValue()) + + Convey("正常获取熔断规则", func() { + time.Sleep(updateCacheInterval) + out := server.GetCircuitBreakerWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, true) + checkCircuitBreaker(t, cbVersionResp, cbResp, out.GetCircuitBreaker()) + t.Logf("pass: out is %+v", out) + + // 再次请求 + out = server.GetCircuitBreakerWithCache(defaultCtx, out.GetService()) + So(respSuccess(out), ShouldEqual, true) + So(out.GetCode().GetValue(), ShouldEqual, api.DataNoChange) + t.Logf("pass: out is %+v", out) + }) + + Convey("解绑熔断规则", func() { + unBindCircuitBreaker(t, cbVersionResp, service) + time.Sleep(updateCacheInterval) + out := server.GetCircuitBreakerWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, true) + t.Logf("pass: out is %+v", out) + }) + }) +} + +// 测试discover circuitbreaker +func TestDiscoverCircuitBreaker2(t *testing.T) { + Convey("熔断规则异常测试", t, func() { + _, service := createCommonService(t, 1) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + Convey("熔断规则不存在", func() { + time.Sleep(updateCacheInterval) + out := server.GetCircuitBreakerWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, true) + So(out.GetCircuitBreaker(), ShouldBeNil) + t.Logf("pass: out is %+v", out) + }) + Convey("服务不存在", func() { + services := []*api.Service{service} + removeCommonServices(t, services) + time.Sleep(updateCacheInterval) + out := server.GetCircuitBreakerWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, false) + t.Logf("pass: out is %+v", out) + }) + }) +} + +// 测试discover service +func TestDiscoverService(t *testing.T) { + Convey("服务测试", t, func() { + expectService1 := &api.Service{} + expectService2 := &api.Service{} + for id := 0; id < 5; id++ { + _, service := createCommonService(t, id) + if id == 3 { + expectService1 = service + } + if id == 4 { + expectService2 = service + } + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + } + + meta := make(map[string]string) + requestMeta := make(map[string]string) + for i := 0; i < 5; i++ { + k := fmt.Sprintf("key-%d", i) + v := fmt.Sprintf("value-%d", i) + if i == 0 || i == 1 { + requestMeta[k] = v + } + meta[k] = v + } + + expectService1.Metadata = meta + expectService2.Metadata = meta + _ = server.UpdateService(defaultCtx, expectService1) + _ = server.UpdateService(defaultCtx, expectService2) + time.Sleep(updateCacheInterval) + + Convey("正常获取服务", func() { + requestService := &api.Service{ + Metadata: requestMeta, + } + out := server.GetServiceWithCache(defaultCtx, requestService) + So(respSuccess(out), ShouldEqual, true) + if len(out.GetServices()) == 2 { + t.Logf("pass: out service is %+v", out.GetServices()) + } else { + t.Logf("error: out is %+v", out) + } + }) + + Convey("元数据匹配到的服务为空", func() { + requestMeta := make(map[string]string) + requestMeta["test"] = "test" + requestService := &api.Service{ + Metadata: requestMeta, + } + out := server.GetServiceWithCache(defaultCtx, requestService) + So(respSuccess(out), ShouldEqual, true) + if len(out.GetServices()) == 0 { + t.Logf("pass: out service is %+v", out.GetServices()) + } else { + t.Logf("error: out is %+v", out) + } + }) + }) +} + +// 测试discover service +func TestDiscoverService2(t *testing.T) { + Convey("服务异常测试", t, func() { + Convey("元数据不存在", func() { + service := &api.Service{} + out := server.GetServiceWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, false) + t.Logf("pass: out is %+v", out) + }) + Convey("元数据为空", func() { + service := &api.Service{ + Metadata: make(map[string]string), + } + out := server.GetServiceWithCache(defaultCtx, service) + So(respSuccess(out), ShouldEqual, false) + t.Logf("pass: out is %+v", out) + }) + }) +} + + diff --git a/naming/test/healthcheck_test.go b/naming/test/healthcheck_test.go new file mode 100644 index 000000000..ec4fc2856 --- /dev/null +++ b/naming/test/healthcheck_test.go @@ -0,0 +1,636 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "context" + "fmt" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/naming" + "math/rand" + "strconv" + "sync" + "testing" + "time" + + "github.com/polarismesh/polaris-server/common/utils" + + "github.com/polarismesh/polaris-server/naming/cache" + + api "github.com/polarismesh/polaris-server/common/api/v1" + + // 使用mysql库 + + _ "github.com/polarismesh/polaris-server/store/defaultStore" + _ "github.com/go-sql-driver/mysql" + "github.com/golang/protobuf/ptypes/wrappers" + "github.com/stretchr/testify/assert" +) + +// 测试样例结构体 +type Case struct { + field string + req *api.Instance + expect uint32 +} + +const ( + timeoutTimes = 2 +) + +// 测试健康检查功能未开启的情况 +func TestHealthCheckNotOpen(t *testing.T) { + _, serviceResp := createCommonService(t, 131) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req := createInstanceNotOpenHealthCheck(t, serviceResp, 131) + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + defer cleanInstance(req.GetId().GetValue()) + + var heartbeatOnDisabledIns uint32 = 400141 + wait4Cache() + rsp := server.Heartbeat(context.Background(), req) + fmt.Printf("actiual:%v", rsp.GetCode().GetValue()) + assert.EqualValues(t, heartbeatOnDisabledIns, rsp.GetCode().GetValue()) +} + +// 测试错误输入的情况 +func TestWrongInput(t *testing.T) { + // 输入样例 + cases := []Case{ + {"req", nil, api.EmptyRequest}, + {"service_token", &api.Instance{}, api.InvalidServiceToken}, + {"service", &api.Instance{ + Namespace: &wrappers.StringValue{Value: "n"}, + Host: &wrappers.StringValue{Value: "h"}, + Port: &wrappers.UInt32Value{Value: 1}, + HealthCheck: &api.HealthCheck{ + Heartbeat: &api.HeartbeatHealthCheck{Ttl: &wrappers.UInt32Value{Value: 1}}, + }, + ServiceToken: &wrappers.StringValue{Value: "t"}, + }, api.InvalidServiceName}, + {"namespace", &api.Instance{ + Service: &wrappers.StringValue{Value: "s"}, + Host: &wrappers.StringValue{Value: "h"}, + Port: &wrappers.UInt32Value{Value: 1}, + HealthCheck: &api.HealthCheck{ + Heartbeat: &api.HeartbeatHealthCheck{Ttl: &wrappers.UInt32Value{Value: 1}}, + }, + ServiceToken: &wrappers.StringValue{Value: "t"}, + }, api.InvalidNamespaceName}, + {"host", &api.Instance{ + Service: &wrappers.StringValue{Value: "s"}, + Namespace: &wrappers.StringValue{Value: "n"}, + Port: &wrappers.UInt32Value{Value: 1}, + HealthCheck: &api.HealthCheck{ + Heartbeat: &api.HeartbeatHealthCheck{Ttl: &wrappers.UInt32Value{Value: 1}}, + }, + ServiceToken: &wrappers.StringValue{Value: "t"}, + }, api.InvalidInstanceHost}, + {"port", &api.Instance{ + Service: &wrappers.StringValue{Value: "s"}, + Namespace: &wrappers.StringValue{Value: "n"}, + Host: &wrappers.StringValue{Value: "h"}, + HealthCheck: &api.HealthCheck{ + Heartbeat: &api.HeartbeatHealthCheck{Ttl: &wrappers.UInt32Value{Value: 1}}, + }, + ServiceToken: &wrappers.StringValue{Value: "t"}, + }, api.InvalidInstancePort}, + } + + for _, c := range cases { + func(c Case) { + t.Run(fmt.Sprintf("测试输入缺少%v的情况", c.field), func(t *testing.T) { + t.Parallel() + rsp := server.Heartbeat(context.Background(), c.req) + assert.EqualValues(t, c.expect, rsp.GetCode().GetValue()) + }) + }(c) + } + + t.Run("测试传入非法token的情况", func(t *testing.T) { + t.Parallel() + var ( + req *api.Instance + rsp *api.Response + index = 1006 + ) + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req = createCommonInstance(t, serviceResp, index) + defer cleanInstance(req.GetId().GetValue()) + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + wait4Cache() + req.ServiceToken = &wrappers.StringValue{Value: "err token"} + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.Unauthorized, rsp.GetCode().GetValue()) + }) +} + +// 测试输入正确的情况 +func TestHealthCheckInputRight(t *testing.T) { + t.Run("测试输入正确,使用id为key的情况", func(t *testing.T) { + var ( + req *api.Instance + rsp *api.Response + index = 15 + ) + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req = createCommonInstance(t, serviceResp, index) + defer cleanInstance(req.GetId().GetValue()) + wait4Cache() + req.Service = nil + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + assert.True(t, getHealthStatus(req.GetHost().GetValue(), int(req.GetPort().GetValue()))) + }) + + t.Run("测试输入正确,使用四元组为key的情况", func(t *testing.T) { + var ( + req *api.Instance + rsp *api.Response + index = 16 + ) + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req = createCommonInstance(t, serviceResp, index) + defer cleanInstance(req.GetId().GetValue()) + wait4Cache() + req.Id = nil + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + assert.True(t, getHealthStatus(req.GetHost().GetValue(), int(req.GetPort().GetValue()))) + }) +} + +// 测试健康状态的变化 +func TestTurnUnhealthy(t *testing.T) { + t.Run("测试从健康变为不健康", turnUnhealthy) +} + +// 测试ttl增加 +func TestTtlIncrease(t *testing.T) { + t.Run("测试ttl增加", ttlIncrease) +} + +// 测试ttl减少 +func TestTtlDecrease(t *testing.T) { + t.Run("测试ttl减少", ttlDecrease) +} + +// 从健康转变为不健康 +func turnUnhealthy(t *testing.T) { + //t.Parallel() + var ( + req *api.Instance + rsp *api.Response + ttl uint32 = 1 + index = 6001 + ) + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req = createCommonInstance(t, serviceResp, index) + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + defer cleanInstance(req.GetId().GetValue()) + updateTTL(t, req, ttl) + wait4Cache() + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + time.Sleep(time.Duration(ttl) * time.Second) + assert.True(t, getHealthStatus(req.GetHost().GetValue(), int(req.GetPort().GetValue()))) + + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + time.Sleep(time.Duration(ttl) * time.Second) + assert.True(t, getHealthStatus(req.GetHost().GetValue(), int(req.GetPort().GetValue()))) + + // 停止发送心跳,等到超时时间到了后,该实例变为不健康 + time.Sleep(time.Duration((timeoutTimes+1)*ttl+3) * time.Second) + assert.False(t, getHealthStatus(req.GetHost().GetValue(), int(req.GetPort().GetValue()))) +} + +// 多次心跳,ttl增加 +func ttlIncrease(t *testing.T) { + //t.Parallel() + var ( + req *api.Instance + rsp *api.Response + ttl uint32 = 1 + anotherTTL uint32 = 3 + index = 50002 + ) + + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req = createCommonInstance(t, serviceResp, index) + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + defer cleanInstance(req.GetId().GetValue()) + updateTTL(t, req, ttl) + wait4Cache() + + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + // 更新ttl + updateTTL(t, req, anotherTTL) + + time.Sleep(time.Second) + rsp = server.Heartbeat(context.Background(), req) + if rsp.GetCode().GetValue() != api.ExecuteSuccess { + t.Errorf("heartBeat err:%s", rsp.GetInfo().GetValue()) + } + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + + timeoutSec := timeoutTimes*anotherTTL + 1 + oldTimeoutSec := timeoutTimes*ttl + 1 + // 确保旧超时时间后,按照新的ttl来计算还未超时 + assert.Greater(t, timeoutSec, oldTimeoutSec) + + // 等待旧超时时间过去,此时实例应该还未超时 + time.Sleep(time.Duration(oldTimeoutSec) * time.Second) + assert.True(t, getHealthStatus(req.GetHost().GetValue(), int(req.GetPort().GetValue()))) + + // 再等待达到新超时时间,此时实例应该超时 + time.Sleep(time.Duration(timeoutSec+5) * time.Second) + assert.False(t, getHealthStatus(req.GetHost().GetValue(), int(req.GetPort().GetValue()))) +} + +// 多次心跳,ttl减少 +func ttlDecrease(t *testing.T) { + //t.Parallel() + var ( + req *api.Instance + // instance *api.Instance + rsp *api.Response + ttl uint32 = 3 + anotherTTL uint32 = 1 + index = 50003 + ) + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req = createCommonInstance(t, serviceResp, index) + defer cleanInstance(req.GetId().GetValue()) + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + updateTTL(t, req, ttl) + wait4Cache() + + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + + // 更新ttl + updateTTL(t, req, anotherTTL) + wait4Cache() + + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + + timeoutSec := timeoutTimes*anotherTTL + 2 + oldTimeoutSec := timeoutTimes * ttl + // 确保超时时间后,按照旧的ttl来计算还未超时 + assert.Less(t, timeoutSec, oldTimeoutSec) + + // 等待旧超时时间过去,此时实例应该就已经超时 + time.Sleep(time.Duration(oldTimeoutSec) * time.Second) + assert.False(t, getHealthStatus(req.GetHost().GetValue(), int(req.GetPort().GetValue()))) +} + +// 获取实例健康状态 +func getHealthStatus(host string, port int) bool { + query := map[string]string{"limit": "20", "host": host, "port": strconv.Itoa(port)} + rsp := server.GetInstances(query) + if !respSuccess(rsp) { + panic("寻找实例失败") + } + instances := rsp.GetInstances() + if len(instances) != 1 { + panic(fmt.Sprintf("找到的实例不唯一,已找到%v个实例", len(instances))) + } + return instances[0].GetHealthy().GetValue() +} + +// 获取实例健康状态 +func getHealthStatusByID(id string) bool { + ins := server.Cache().Instance().GetInstance(id) + if ins == nil { + panic("寻找实例失败") + } + + return ins.Proto.Healthy.Value +} + +// 等待cache加载数据,在创建实例后需要使用 +func wait4Cache() { + time.Sleep(2 * cache.UpdateCacheInterval) +} + +// 更新实例的ttl +func updateTTL(t *testing.T, instance *api.Instance, ttl uint32) { + instance.HealthCheck = &api.HealthCheck{Heartbeat: &api.HeartbeatHealthCheck{Ttl: utils.NewUInt32Value(ttl)}} + if resp := server.UpdateInstance(defaultCtx, instance); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } +} + +// 获取实例的ttl +func getTTL(t *testing.T, id string) uint32 { + insCache := server.Cache().Instance().GetInstance(id) + if insCache == nil { + return 0 + } + return insCache.HealthCheck().Heartbeat.Ttl.Value +} + +// 测试存在不合法的实例的情况 +func TestInvalidHealthInstance(t *testing.T) { + t.Run("测试不存在实例的情况", func(t *testing.T) { + t.Parallel() + var ( + req *api.Instance + rsp *api.Response + index = 1004 + ) + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req = createCommonInstance(t, serviceResp, index) + // 创建一个实例,然后将其删除 + cleanInstance(req.GetId().GetValue()) + wait4Cache() + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.NotFoundResource, rsp.GetCode().GetValue()) + }) + + t.Run("测试不存在service的情况", func(t *testing.T) { + t.Parallel() + var ( + req *api.Instance + rsp *api.Response + index = 1007 + ) + _, serviceResp := createCommonService(t, index) + _, req = createCommonInstance(t, serviceResp, index) + defer cleanInstance(req.GetId().GetValue()) + // 删除服务 + cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + wait4Cache() + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.NotFoundResource, rsp.GetCode().GetValue()) + }) + + t.Run("测试存在ttl非法的实例的情况", func(t *testing.T) { + t.Parallel() + var ( + req *api.Instance + rsp *api.Response + index = 1005 + ) + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, req = createCommonInstance(t, serviceResp, index) + defer cleanInstance(req.GetId().GetValue()) + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + updateTTL(t, req, 123123) + wait4Cache() + + ttl := getTTL(t, req.GetId().GetValue()) + assert.EqualValues(t, ttl, 5) + + rsp = server.Heartbeat(context.Background(), req) + assert.EqualValues(t, api.ExecuteSuccess, rsp.GetCode().GetValue()) + }) +} + +// 测试大量heartbeat用时 +func TestHeartBeatUseTime(t *testing.T) { + t.Run("测试大量heartbeat用时", heartBeatUseTime) +} + +// 测试大量heartbeat用时 +func heartBeatUseTime(t *testing.T) { + heartBeatBatch(t, 10, 80) +} + +// 模拟正常多实例心跳上报情境 +func heartBeatBatch(t *testing.T, serviceNum, insNum int) { + var ( + req *api.Instance + index = 10000 + insArray = make([]*api.Instance, 0) + wg sync.WaitGroup + mu sync.Mutex + ) + + start := time.Now() + // 创建服务和实例 + for i := 0; i < serviceNum; i++ { + var wgt sync.WaitGroup + _, serviceResp := createCommonService(t, index+i) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + for j := 0; j < insNum; j++ { + go func(index int, serviceResp *api.Service) { + wgt.Add(1) + defer wgt.Done() + _, req = createCommonInstance(t, serviceResp, index) + req.ServiceToken = &wrappers.StringValue{Value: serviceResp.GetToken().GetValue()} + + mu.Lock() + insArray = append(insArray, req) + mu.Unlock() + }(index+i+j, serviceResp) + //睡眠0.1毫秒,削峰 + time.Sleep(time.Microsecond * 100) + } + wgt.Wait() + time.Sleep(100 * time.Millisecond) + } + t.Logf("create use time:%+v", time.Now().Sub(start)) + time.Sleep(time.Second * 2) + + wg.Add(len(insArray)) + exceedNum := 0 + now := time.Now() + for _, ins := range insArray { + go func(ins *api.Instance) { + resp := server.Heartbeat(context.Background(), ins) + if resp.GetCode().GetValue() != api.ExecuteSuccess { + exceedNum++ + } + wg.Done() + }(ins) + time.Sleep(time.Microsecond) + } + wg.Wait() + t.Logf("first, use time:%v, exceedNum:%d", time.Now().Sub(now), exceedNum) + + time.Sleep(time.Second * 3) + wg.Add(len(insArray)) + exceedNum = 0 + now = time.Now() + for _, ins := range insArray { + go func(ins *api.Instance) { + resp := server.Heartbeat(context.Background(), ins) + if resp.GetCode().GetValue() != api.ExecuteSuccess { + exceedNum++ + } + wg.Done() + }(ins) + time.Sleep(time.Microsecond) + } + wg.Wait() + t.Logf("third, use time:%v, exceedNum:%d", time.Now().Sub(now), exceedNum) + t.Logf("len:%d", len(insArray)) + + for _, ins := range insArray { + assert.True(t, getHealthStatusByID(ins.GetId().GetValue())) + } + ttl := 5 + time.Sleep(time.Duration((timeoutTimes+2)*ttl+4) * time.Second) + wait4Cache() + time.Sleep(20 * time.Second) + for _, ins := range insArray { + assert.False(t, getHealthStatusByID(ins.GetId().GetValue())) + } + for _, ins := range insArray { + cleanInstance(ins.GetId().GetValue()) + } +} + +// 测试ckv+节点变更 +func TestCkvNodeChange(t *testing.T) { + t.Logf("第一次测试心跳") + heartBeatBatch(t, 8, 20) + + name := cfg.Naming.HealthCheck.KvServiceName + namespace := cfg.Naming.HealthCheck.KvNamespace + service := server.Cache().Service().GetServiceByName(name, namespace) + if service == nil { + t.Fatalf("cannot get service, name:%s, namespace:%s", name, namespace) + } + instances := server.Cache().Instance().GetInstancesByServiceID(service.ID) + if len(instances) == 0 { + t.Fatalf("cannot get instance, name:%s, namespace:%s", name, namespace) + } + t.Logf("len:%d, instaces:%+v", len(instances), instances[0]) + + _ = server.Cache().Clear() // 为了防止影响,每个函数需要把缓存的内容清空 + creq := &api.Instance{ + ServiceToken: utils.NewStringValue(service.Token), + Id: utils.NewStringValue(instances[0].ID()), + } + // 节点增加 + t.Logf("ckv节点增加") + addInstance(t, ins2Api(instances[0], service.Token, service.Name, service.Namespace)) + time.Sleep(30 * time.Second) + t.Logf("再次测试心跳") + heartBeatBatch(t, 10, 20) + + // 节点减少 + t.Logf("ckv节点减少") + resp := server.DeleteInstance(defaultCtx, creq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + time.Sleep(30 * time.Second) + t.Logf("再次测试心跳") + heartBeatBatch(t, 10, 20) + + t.Logf("ok") +} + +func ins2Api(ins *model.Instance, token, name, namespace string) *api.Instance { + rand.Seed(time.Now().UnixNano()) + return &api.Instance{ + ServiceToken: utils.NewStringValue(token), + Service: utils.NewStringValue(name), + Namespace: utils.NewStringValue(namespace), + VpcId: utils.NewStringValue(strconv.Itoa(rand.Intn(10000))), + Host: utils.NewStringValue(ins.Host()), + Port: utils.NewUInt32Value(ins.Port()), + Protocol: utils.NewStringValue(ins.Protocol()), + Version: utils.NewStringValue(ins.Version()), + Priority: utils.NewUInt32Value(ins.Priority()), + Weight: utils.NewUInt32Value(ins.Weight()), + HealthCheck: ins.HealthCheck(), + Healthy: utils.NewBoolValue(ins.Healthy()), + Isolate: utils.NewBoolValue(ins.Isolate()), + LogicSet: utils.NewStringValue(ins.LogicSet()), + Metadata: ins.Metadata(), + } +} + +// 新增一个不开启健康检查的实例 +func createInstanceNotOpenHealthCheck(t *testing.T, service *api.Service, id int) ( + *api.Instance, *api.Instance) { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(service.GetToken().GetValue()), + Service: utils.NewStringValue(service.GetName().GetValue()), + Namespace: utils.NewStringValue(service.GetNamespace().GetValue()), + VpcId: utils.NewStringValue(fmt.Sprintf("vpcid-%d", id)), + Host: utils.NewStringValue(fmt.Sprintf("10.10.10.%d", id)), + Port: utils.NewUInt32Value(8000 + uint32(id)), + Protocol: utils.NewStringValue(fmt.Sprintf("protocol-%d", id)), + Version: utils.NewStringValue(fmt.Sprintf("version-%d", id)), + Priority: utils.NewUInt32Value(1 + uint32(id)%10), + Weight: utils.NewUInt32Value(1 + uint32(id)%1000), + HealthCheck: nil, + Healthy: utils.NewBoolValue(false), // 默认是非健康,因为打开了healthCheck + Isolate: utils.NewBoolValue(false), + LogicSet: utils.NewStringValue(fmt.Sprintf("logic-set-%d", id)), + Metadata: map[string]string{ + "internal-personal-xxx": fmt.Sprintf("internal-personal-xxx_%d", id), + "2my-meta": fmt.Sprintf("my-meta-%d", id), + "my-meta-a1": "1111", + "smy-xmeta-h2": "2222", + "my-1meta-o3": "2222", + "my-2meta-4c": "2222", + "my-3meta-d5": "2222", + "dmy-meta-6p": "2222", + "1my-pmeta-d7": "2222", + "my-dmeta-8c": "2222", + "my-xmeta-9p": "2222", + "other-meta-x": "xxx", + "other-meta-1": "xx11", + "amy-instance": "my-instance", + "very-long-key-data-xxxxxxxxx": "Y", + "very-long-key-data-uuuuuuuuu": "P", + }, + } + + resp := server.CreateInstance(defaultCtx, instanceReq) + if respSuccess(resp) { + return instanceReq, resp.GetInstance() + } + + if resp.GetCode().GetValue() != api.ExistedResource { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + // repeated + InstanceID, _ := naming.CalculateInstanceID(instanceReq.GetNamespace().GetValue(), instanceReq.GetService().GetValue(), + instanceReq.GetVpcId().GetValue(), instanceReq.GetHost().GetValue(), instanceReq.GetPort().GetValue()) + cleanInstance(InstanceID) + t.Logf("repeatd create instance(%s)", InstanceID) + resp = server.CreateInstance(defaultCtx, instanceReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return instanceReq, resp.GetInstance() +} diff --git a/naming/test/instance_test.go b/naming/test/instance_test.go new file mode 100644 index 000000000..0dc9f6c18 --- /dev/null +++ b/naming/test/instance_test.go @@ -0,0 +1,1696 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming" + . "github.com/smartystreets/goconvey/convey" + "math/rand" + "strconv" + "sync" + "sync/atomic" + "testing" + "time" +) + +// 测试新建实例 +func TestCreateInstance(t *testing.T) { + _, serviceResp := createCommonService(t, 100) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("正常创建实例", func(t *testing.T) { + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 1000) + defer cleanInstance(instanceResp.GetId().GetValue()) + + if instanceResp.GetId().GetValue() != "" { + t.Logf("pass: %s", instanceResp.GetId().GetValue()) + } else { + t.Fatalf("error") + } + + if instanceResp.GetNamespace().GetValue() == instanceReq.GetNamespace().GetValue() && + instanceResp.GetService().GetValue() == instanceReq.GetService().GetValue() { + t.Logf("pass") + } else { + t.Fatalf("error: %+v", instanceResp) + } + }) + + t.Run("重复注册,会返回资源已经存在", func(t *testing.T) { + req, instanceResp := createCommonInstance(t, serviceResp, 1000) + defer cleanInstance(instanceResp.GetId().GetValue()) + + time.Sleep(time.Second) + resp := server.CreateInstance(defaultCtx, req) + if !respSuccess(resp) && resp.GetCode().GetValue() == api.ExistedResource { + t.Logf("pass: %+v", resp) + } else { + t.Fatalf("error: %+v", resp) + } + if resp.Instance.GetId().GetValue() == "" { + t.Fatalf("error: %+v", resp) + } + }) + + t.Run("instance有metadata个数和字符要求的限制", func(t *testing.T) { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(serviceResp.GetToken().GetValue()), + Service: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Host: utils.NewStringValue("123"), + Port: utils.NewUInt32Value(456), + Metadata: make(map[string]string), + } + for i := 0; i < naming.MaxMetadataLength+1; i++ { + instanceReq.Metadata[fmt.Sprintf("%d", i)] = fmt.Sprintf("%d", i) + } + if resp := server.CreateInstance(defaultCtx, instanceReq); respSuccess(resp) { + t.Fatalf("error") + } else { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } + }) + t.Run("healthcheck为空测试", func(t *testing.T) { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(serviceResp.GetToken().GetValue()), + Service: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Host: utils.NewStringValue("aaaaaaaaaaaaaa"), + Port: utils.NewUInt32Value(456), + HealthCheck: &api.HealthCheck{}, + } + resp := server.CreateInstance(defaultCtx, instanceReq) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + + time.Sleep(time.Second) + cleanInstance(resp.GetInstance().GetId().GetValue()) + instanceReq.HealthCheck = &api.HealthCheck{ + Heartbeat: &api.HeartbeatHealthCheck{}, + } + resp = server.CreateInstance(defaultCtx, instanceReq) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + getResp := server.GetInstances(map[string]string{"host": instanceReq.GetHost().GetValue()}) + t.Logf("%+v", getResp) + if getResp.GetInstances()[0].HealthCheck.Type != api.HealthCheck_HEARTBEAT { + t.Fatalf("error") + } + if getResp.GetInstances()[0].HealthCheck.Heartbeat.Ttl.Value != naming.DefaultTLL { + t.Fatalf("error") + } + }) +} + +// 测试异常场景 +func TestCreateInstanceWithNoService(t *testing.T) { + t.Run("无权限注册,可以捕获正常的错误", func(t *testing.T) { + _, serviceResp := createCommonService(t, 900) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + var reqs []*api.Instance + reqs = append(reqs, &api.Instance{ + Service: serviceResp.Name, + Namespace: serviceResp.Namespace, + ServiceToken: serviceResp.Token, + Host: utils.NewStringValue("1111"), + Port: utils.NewUInt32Value(0), + }) + reqs = append(reqs, &api.Instance{ + Service: serviceResp.Name, + Namespace: serviceResp.Namespace, + ServiceToken: utils.NewStringValue("error token"), + Host: utils.NewStringValue("1111"), + Port: utils.NewUInt32Value(1), + }) + resps := server.CreateInstances(defaultCtx, reqs) + if respSuccess(resps) { + t.Fatalf("error") + } + if resps.Responses[0].GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %d", resps.Responses[0].GetCode().GetValue()) + } + defer cleanInstance(resps.Responses[0].GetInstance().GetId().GetValue()) + if resps.Responses[1].GetCode().GetValue() != api.Unauthorized { + t.Fatalf("error: %d", resps.Responses[0].GetCode().GetValue()) + } + }) +} + +// 并发注册 +func TestCreateInstance2(t *testing.T) { + t.Run("并发注册,可以正常注册", func(t *testing.T) { + var serviceResps []*api.Service + for i := 0; i < 10; i++ { + _, serviceResp := createCommonService(t, i) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + serviceResps = append(serviceResps, serviceResp) + } + + time.Sleep(updateCacheInterval) + total := 1024 + var wg sync.WaitGroup + start := time.Now() + for i := 0; i < total; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + var req *api.Instance + var resp *api.Instance + req, resp = createCommonInstance(t, serviceResps[index%10], index) + for c := 0; c < 10; c++ { + if updateResp := server.UpdateInstance(defaultCtx, req); !respSuccess(updateResp) { + t.Fatalf("error: %+v", updateResp) + } + } + removeCommonInstance(t, serviceResps[index%10], resp.GetId().GetValue()) + cleanInstance(resp.GetId().GetValue()) + }(i) + } + + wg.Wait() + t.Logf("consume: %v", time.Now().Sub(start)) + }) +} + +// 并发更新同一个实例 +func TestUpdateInstanceManyTimes(t *testing.T) { + _, serviceResp := createCommonService(t, 100) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 10) + defer cleanInstance(instanceResp.GetId().GetValue()) + + var wg sync.WaitGroup + for i := 0; i < 64; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + for c := 0; c < 16; c++ { + instanceReq.Weight.Value = uint32(rand.Int() % 32767) + if updateResp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(updateResp) { + t.Fatalf("error: %+v", updateResp) + } + } + }(i) + } + wg.Wait() +} + +// 测试获取实例 +func TestGetInstances(t *testing.T) { + t.Run("可以正常获取到实例信息", func(t *testing.T) { + _ = server.Cache().Clear() // 为了防止影响,每个函数需要把缓存的内容清空 + _, serviceResp := createCommonService(t, 320) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + time.Sleep(updateCacheInterval) + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 30) + defer cleanInstance(instanceResp.GetId().GetValue()) + + // 需要等待一会,等本地缓存更新 + time.Sleep(updateCacheInterval) + + req := &api.Service{ + Name: utils.NewStringValue(instanceResp.GetService().GetValue()), + Namespace: utils.NewStringValue(instanceResp.GetNamespace().GetValue()), + } + resp := server.ServiceInstancesCache(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + discoveryCheck(t, req, resp) + + if len(resp.Instances) != 1 { + t.Fatalf("error : %d", len(resp.Instances)) + } + + instanceCheck(t, instanceReq, resp.GetInstances()[0]) + t.Logf("pass: %+v", resp.GetInstances()[0]) + }) + t.Run("注册实例,查询实例列表,实例反注册,revision会改变", func(t *testing.T) { + _ = server.Cache().Clear() // 为了防止影响,每个函数需要把缓存的内容清空 + _, serviceResp := createCommonService(t, 100) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + _, instanceResp := createCommonInstance(t, serviceResp, 90) + defer cleanInstance(instanceResp.GetId().GetValue()) + + time.Sleep(updateCacheInterval) + resp := server.ServiceInstancesCache(defaultCtx, serviceResp) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + revision := resp.GetService().GetRevision() + + // 再注册一个实例,revision会改变 + _, instanceResp = createCommonInstance(t, serviceResp, 100) + defer cleanInstance(instanceResp.GetId().GetValue()) + + time.Sleep(updateCacheInterval) + resp = server.ServiceInstancesCache(defaultCtx, serviceResp) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + if revision == resp.GetService().GetRevision() { + t.Fatalf("error") + } + t.Logf("%s, %s", revision, resp.GetService().GetRevision()) + }) +} + +// 测试获取多个实例 +func TestGetInstances1(t *testing.T) { + discover := func(t *testing.T, service *api.Service, expectCount int) *api.DiscoverResponse { + time.Sleep(updateCacheInterval) + resp := server.ServiceInstancesCache(defaultCtx, service) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + discoveryCheck(t, service, resp) + if len(resp.Instances) != expectCount { + t.Fatalf("error : %d", len(resp.Instances)) + } + return resp + } + t.Run("注册并反注册多个实例,可以正常获取", func(t *testing.T) { + _ = server.Cache().Clear() // 为了防止影响,每个函数需要把缓存的内容清空 + _, serviceResp := createCommonService(t, 320) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + var ids []string + for i := 0; i < 10; i++ { + _, instanceResp := createCommonInstance(t, serviceResp, i) + ids = append(ids, instanceResp.GetId().GetValue()) + defer cleanInstance(instanceResp.GetId().GetValue()) + } + discover(t, serviceResp, 10) + + // 反注册一部分 + for i := 1; i < 6; i++ { + removeCommonInstance(t, serviceResp, ids[i]) + } + discover(t, serviceResp, 5) + }) + t.Run("传递revision, revision有变化则有数据,否则无数据返回", func(t *testing.T) { + _ = server.Cache().Clear() // 为了防止影响,每个函数需要把缓存的内容清空 + _, serviceResp := createCommonService(t, 100) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + for i := 0; i < 5; i++ { + _, instanceResp := createCommonInstance(t, serviceResp, i) + defer cleanInstance(instanceResp.GetId().GetValue()) + } + firstResp := discover(t, serviceResp, 5) + + serviceResp.Revision = firstResp.Service.GetRevision() + if resp := server.ServiceInstancesCache(defaultCtx, serviceResp); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } else { + if len(resp.Instances) != 0 { + t.Fatalf("error: %d", len(resp.Instances)) + } + t.Logf("%+v", resp) + } + + // 多注册一个实例,revision发生改变 + _, instanceResp := createCommonInstance(t, serviceResp, 20) + defer cleanInstance(instanceResp.GetId().GetValue()) + discover(t, serviceResp, 6) + + }) +} + +// 反注册测试 +func TestRemoveInstance(t *testing.T) { + _, serviceResp := createCommonService(t, 15) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + t.Run("实例创建完马上反注册,可以成功", func(t *testing.T) { + _, instanceResp := createCommonInstance(t, serviceResp, 88) + defer cleanInstance(instanceResp.GetId().GetValue()) + + removeCommonInstance(t, serviceResp, instanceResp.GetId().GetValue()) + t.Logf("pass") + }) + + t.Run("注册完实例,反注册,再注册,可以成功", func(t *testing.T) { + _, instanceResp := createCommonInstance(t, serviceResp, 888) + defer cleanInstance(instanceResp.GetId().GetValue()) + + removeCommonInstance(t, serviceResp, instanceResp.GetId().GetValue()) + + time.Sleep(time.Second) + _, instanceResp = createCommonInstance(t, serviceResp, 888) + defer cleanInstance(instanceResp.GetId().GetValue()) + t.Logf("pass") + }) + t.Run("重复反注册,返回成功", func(t *testing.T) { + _, instanceResp := createCommonInstance(t, serviceResp, 999) + defer cleanInstance(instanceResp.GetId().GetValue()) + + removeCommonInstance(t, serviceResp, instanceResp.GetId().GetValue()) + time.Sleep(time.Second) + removeCommonInstance(t, serviceResp, instanceResp.GetId().GetValue()) + }) +} + +// 测试从数据库拉取实例信息 +func TestListInstances(t *testing.T) { + t.Run("list实例列表,返回的数据字段都存在", func(t *testing.T) { + _, serviceResp := createCommonService(t, 1156) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 200) + defer cleanInstance(instanceResp.GetId().GetValue()) + + query := map[string]string{"offset": "0", "limit": "100"} + query["host"] = instanceReq.GetHost().GetValue() + query["port"] = strconv.FormatUint(uint64(instanceReq.GetPort().GetValue()), 10) + resp := server.GetInstances(query) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if len(resp.Instances) != 1 { + t.Fatalf("error: %d", len(resp.Instances)) + } + + instanceCheck(t, instanceReq, resp.Instances[0]) + }) + t.Run("list实例列表,offset和limit能正常工作", func(t *testing.T) { + _, serviceResp := createCommonService(t, 115) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + time.Sleep(updateCacheInterval) + total := 50 + for i := 0; i < total; i++ { + _, instanceResp := createCommonInstance(t, serviceResp, i+1) + defer cleanInstance(instanceResp.GetId().GetValue()) + } + + query := map[string]string{"offset": "10", "limit": "20", "host": "127.0.0.1"} + resp := server.GetInstances(query) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + if len(resp.Instances) == 20 { + t.Logf("pass") + } + }) + + t.Run("list实例列表,可以进行正常字段过滤", func(t *testing.T) { + // 先任意找几个实例字段过滤 + _, serviceResp := createCommonService(t, 200) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + time.Sleep(updateCacheInterval) + total := 10 + instance := new(api.Instance) + for i := 0; i < total; i++ { + _, instanceResp := createCommonInstance(t, serviceResp, i+1) + defer cleanInstance(instanceResp.GetId().GetValue()) + instance = instanceResp + } + + host := instance.GetHost().GetValue() + port := strconv.FormatUint(uint64(instance.GetPort().GetValue()), 10) + query := map[string]string{"limit": "20", "host": host, "port": port} + resp := server.GetInstances(query) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if len(resp.Instances) == 1 { + t.Logf("pass") + } + }) +} + +// 测试list实例列表 +func TestListInstances1(t *testing.T) { + // 先任意找几个实例字段过滤 + _, serviceResp := createCommonService(t, 800) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + checkAmountAndSize := func(t *testing.T, resp *api.BatchQueryResponse, expect int, size int) { + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetAmount().GetValue() != uint32(expect) { + t.Fatalf("error: %d", resp.GetAmount().GetValue()) + } + if len(resp.Instances) != size { + t.Fatalf("error: %d", len(resp.Instances)) + } + } + + t.Run("list实例,使用service和namespace过滤", func(t *testing.T) { + total := 102 + for i := 0; i < total; i++ { + _, instanceResp := createCommonInstance(t, serviceResp, i+2) + defer cleanInstance(instanceResp.GetId().GetValue()) + } + query := map[string]string{ + "offset": "0", + "limit": "100", + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + } + + resp := server.GetInstances(query) + checkAmountAndSize(t, resp, total, 100) + }) + + t.Run("list实例,先删除实例,再查询会过滤删除的", func(t *testing.T) { + total := 50 + for i := 0; i < total; i++ { + _, instanceResp := createCommonInstance(t, serviceResp, i+2) + defer cleanInstance(instanceResp.GetId().GetValue()) + if i%2 == 0 { + removeCommonInstance(t, serviceResp, instanceResp.GetId().GetValue()) + } + } + + query := map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + } + resp := server.GetInstances(query) + checkAmountAndSize(t, resp, total/2, total/2) + + }) + t.Run("true和false测试", func(t *testing.T) { + _, instanceResp := createCommonInstance(t, serviceResp, 10) + defer cleanInstance(instanceResp.GetId().GetValue()) + + query := map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + "isolate": "false", + "healthy": "false", + } + checkAmountAndSize(t, server.GetInstances(query), 1, 1) + + query["isolate"] = "true" + checkAmountAndSize(t, server.GetInstances(query), 0, 0) + + query["isolate"] = "false" + query["healthy"] = "true" + checkAmountAndSize(t, server.GetInstances(query), 0, 0) + + query["isolate"] = "0" + query["healthy"] = "0" + checkAmountAndSize(t, server.GetInstances(query), 1, 1) + + query["health_status"] = "1" + checkAmountAndSize(t, server.GetInstances(query), 1, 1) + + query["health_status"] = "0" + delete(query, "healthy") + checkAmountAndSize(t, server.GetInstances(query), 1, 1) + + query["health_status"] = "1" + checkAmountAndSize(t, server.GetInstances(query), 0, 0) + }) + t.Run("metadata条件测试", func(t *testing.T) { + _, instanceResp1 := createCommonInstance(t, serviceResp, 10) + defer cleanInstance(instanceResp1.GetId().GetValue()) + _, instanceResp2 := createCommonInstance(t, serviceResp, 20) + defer cleanInstance(instanceResp2.GetId().GetValue()) + //只返回第一个实例的查询 + query := map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + "keys": "internal-personal-xxx", + "values": "internal-personal-xxx_10", + } + checkAmountAndSize(t, server.GetInstances(query), 1, 1) + //使用共同的元数据查询,返回两个实例 + query = map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + "keys": "my-meta-a1", + "values": "1111", + } + checkAmountAndSize(t, server.GetInstances(query), 2, 2) + //使用不存在的元数据查询,返回零个实例 + query = map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + "keys": "nokey", + "values": "novalue", + } + checkAmountAndSize(t, server.GetInstances(query), 0, 0) + }) + t.Run("metadata只有key或者value,返回错误", func(t *testing.T) { + query := map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + "keys": "internal-personal-xxx", + } + resp := server.GetInstances(query) + if resp.GetCode().GetValue() != api.InvalidQueryInsParameter { + t.Fatalf("resp is %v, not InvalidQueryInsParameter", resp) + } + query = map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + "values": "internal-personal-xxx", + } + resp = server.GetInstances(query) + if resp.GetCode().GetValue() != api.InvalidQueryInsParameter { + t.Fatalf("resp is %v, not InvalidQueryInsParameter", resp) + } + }) +} + +// 测试地域获取 +func TestInstancesContainLocation(t *testing.T) { + locationCheck := func(lhs *api.Location, rhs *api.Location) { + if lhs.GetRegion().GetValue() != rhs.GetRegion().GetValue() { + t.Fatalf("error: %v, %v", lhs, rhs) + } + if lhs.GetZone().GetValue() != rhs.GetZone().GetValue() { + t.Fatalf("error: %v, %v", lhs, rhs) + } + if lhs.GetCampus().GetValue() != rhs.GetCampus().GetValue() { + t.Fatalf("error: %v, %v", lhs, rhs) + } + } + + _, service := createCommonService(t, 123) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + + instance := &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + ServiceToken: service.GetToken(), + Host: utils.NewStringValue("123456"), + Port: utils.NewUInt32Value(9090), + Location: &api.Location{ + Region: utils.NewStringValue("region1"), + Zone: utils.NewStringValue("zone1"), + Campus: utils.NewStringValue("campus1"), + }, + } + resp := server.CreateInstance(defaultCtx, instance) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + + getResp := server.GetInstances(map[string]string{ + "service": instance.GetService().GetValue(), "namespace": instance.GetNamespace().GetValue(), + }) + if !respSuccess(getResp) { + t.Fatalf("error: %+v", getResp) + } + getInstances := getResp.GetInstances() + if len(getInstances) != 1 { + t.Fatalf("error: %d", len(getInstances)) + } + t.Logf("%v", getInstances[0]) + locationCheck(instance.GetLocation(), getInstances[0].GetLocation()) + + time.Sleep(updateCacheInterval) + discoverResp := server.ServiceInstancesCache(defaultCtx, service) + if len(discoverResp.GetInstances()) != 1 { + t.Fatalf("error: %d", len(discoverResp.GetInstances())) + } + t.Logf("%v", discoverResp.GetInstances()[0]) + locationCheck(instance.GetLocation(), discoverResp.GetInstances()[0].GetLocation()) +} + +// 测试实例更新 +func TestUpdateInstance(t *testing.T) { + _, serviceResp := createCommonService(t, 123) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 22) + defer cleanInstance(instanceResp.GetId().GetValue()) + t.Run("更新实例,所有属性都可以生效", func(t *testing.T) { + // update + instanceReq.Protocol = utils.NewStringValue("update-protocol") + instanceReq.Version = utils.NewStringValue("update-version") + instanceReq.Priority = utils.NewUInt32Value(30) + instanceReq.Weight = utils.NewUInt32Value(500) + instanceReq.Healthy = utils.NewBoolValue(false) + instanceReq.Isolate = utils.NewBoolValue(true) + instanceReq.LogicSet = utils.NewStringValue("update-logic-set") + instanceReq.HealthCheck = &api.HealthCheck{ + Type: api.HealthCheck_HEARTBEAT, + Heartbeat: &api.HeartbeatHealthCheck{ + Ttl: utils.NewUInt32Value(6), + }, + } + instanceReq.Metadata = map[string]string{ + "internal-personal-xxx": fmt.Sprintf("internal-personal-xxx_2412323"), + "tencent": "1111", + "yyyy": "2222", + } + instanceReq.ServiceToken = serviceResp.Token + + if resp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + // 查询数据 + query := map[string]string{ + "host": instanceReq.GetHost().GetValue(), + "port": strconv.FormatUint(uint64(instanceReq.GetPort().GetValue()), 10), + } + resp := server.GetInstances(query) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if len(resp.GetInstances()) != 1 { + t.Fatalf("error: %d", len(resp.GetInstances())) + } + + instanceReq.Service = instanceResp.Service + instanceReq.Namespace = instanceResp.Namespace + instanceCheck(t, instanceReq, resp.Instances[0]) + }) + t.Run("实例只更新metadata,revision也会发生改变", func(t *testing.T) { + instanceReq.Metadata = map[string]string{ + "new-metadata": "new-value", + } + + serviceName := serviceResp.GetName().GetValue() + namespaceName := serviceResp.GetNamespace().GetValue() + firstInstances := getInstancesWithService(t, serviceName, namespaceName, 1) + + if resp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + secondInstances := getInstancesWithService(t, serviceName, namespaceName, 1) + if firstInstances[0].GetRevision().GetValue() != secondInstances[0].GetRevision().GetValue() { + t.Logf("pass %s, %s", + firstInstances[0].GetRevision().GetValue(), secondInstances[0].GetRevision().GetValue()) + } else { + t.Fatalf("error") + } + + instanceCheck(t, instanceReq, secondInstances[0]) + }) + t.Run("metadata太长,update会报错", func(t *testing.T) { + instanceReq.Metadata = make(map[string]string) + for i := 0; i < naming.MaxMetadataLength+1; i++ { + instanceReq.Metadata[fmt.Sprintf("%d", i)] = "a" + } + if resp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) +} + +/** + * @brief 根据ip修改隔离状态 + */ +func TestUpdateIsolate(t *testing.T) { + _, serviceResp := createCommonService(t, 111) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + t.Run("修改超过100个实例的隔离状态", func(t *testing.T) { + instancesReq := make([]*api.Instance, 0, 210) + for i := 0; i < 210; i++ { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(serviceResp.GetToken().GetValue()), + Service: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Host: utils.NewStringValue("127.0.0.1"), + Port: utils.NewUInt32Value(uint32(i)), + } + resp := server.CreateInstance(defaultCtx, instanceReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + instancesReq = append(instancesReq, instanceReq) + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + } + req := &api.Instance{ + ServiceToken: utils.NewStringValue(serviceResp.GetToken().GetValue()), + Service: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Host: utils.NewStringValue("127.0.0.1"), + Isolate: utils.NewBoolValue(true), + } + if resp := server.UpdateInstanceIsolate(defaultCtx, req); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("根据ip修改隔离状态", func(t *testing.T) { + instanceNum := 20 + portNum := 2 + revisions := make(map[string]string, instanceNum) + instancesReq := make([]*api.Instance, 0, instanceNum) + for i := 0; i < instanceNum/portNum; i++ { + for j := 1; j <= portNum; j++ { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(serviceResp.GetToken().GetValue()), + Service: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Host: utils.NewStringValue(fmt.Sprintf("%d.%d.%d.%d", i, i, i, i)), + Port: utils.NewUInt32Value(uint32(j)), + Isolate: utils.NewBoolValue(false), + Healthy: utils.NewBoolValue(true), + Metadata: map[string]string{ + "internal-personal-xxx": fmt.Sprintf("internal-personal-xxx_%d", i), + }, + } + resp := server.CreateInstance(defaultCtx, instanceReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + instanceReq.Isolate = utils.NewBoolValue(true) + instancesReq = append(instancesReq, instanceReq) + revisions[resp.GetInstance().GetId().GetValue()] = resp.GetInstance().GetRevision().GetValue() + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + } + } + + if resp := server.UpdateInstancesIsolate(defaultCtx, instancesReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + // 检查隔离状态和revision是否改变 + for i := 0; i < instanceNum/portNum; i++ { + filter := map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + "host": fmt.Sprintf("%d.%d.%d.%d", i, i, i, i), + } + + resp := server.GetInstances(filter) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + if len(resp.GetInstances()) != portNum { + t.Fatalf("error: %d", len(resp.GetInstances())) + } + + actualInstances := resp.GetInstances() + for _, instance := range actualInstances { + if !instance.GetIsolate().GetValue() || + instance.GetRevision().GetValue() == revisions[instance.GetId().GetValue()] { + t.Fatalf("error instance is %+v", instance) + } + } + } + t.Log("pass") + }) + + t.Run("并发更新", func(t *testing.T) { + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 123) + defer cleanInstance(instanceResp.GetId().GetValue()) + + var wg sync.WaitGroup + for i := 0; i < 64; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + for c := 0; c < 16; c++ { + instanceReq.Isolate = utils.NewBoolValue(true) + if resp := server.UpdateInstanceIsolate(defaultCtx, instanceReq); !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + } + }(i) + } + wg.Wait() + t.Log("pass") + }) + + t.Run("若隔离状态相同,则不需要更新", func(t *testing.T) { + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 456) + defer cleanInstance(instanceResp.GetId().GetValue()) + + resp := server.UpdateInstanceIsolate(defaultCtx, instanceReq) + if resp.GetCode().GetValue() == api.NoNeedUpdate { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 根据ip删除服务实例 + */ +func TestDeleteInstanceByHost(t *testing.T) { + _, serviceResp := createCommonService(t, 222) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("根据ip删除服务实例", func(t *testing.T) { + instanceNum := 20 + portNum := 2 + instancesReq := make([]*api.Instance, 0, instanceNum) + for i := 0; i < instanceNum/portNum; i++ { + for j := 1; j <= portNum; j++ { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(serviceResp.GetToken().GetValue()), + Service: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Host: utils.NewStringValue(fmt.Sprintf("%d.%d.%d.%d", i, i, i, i)), + Port: utils.NewUInt32Value(uint32(j)), + } + resp := server.CreateInstance(defaultCtx, instanceReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + instancesReq = append(instancesReq, instanceReq) + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + } + } + + if resp := server.DeleteInstancesByHost(defaultCtx, instancesReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + // 检查隔离状态和revision是否改变 + getInstancesWithService(t, + serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), 0) + t.Log("pass") + }) + + t.Run("删除超过100个实例", func(t *testing.T) { + instancesReq := make([]*api.Instance, 0, 210) + for i := 0; i < 210; i++ { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(serviceResp.GetToken().GetValue()), + Service: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Host: utils.NewStringValue("127.0.0.2"), + Port: utils.NewUInt32Value(uint32(i)), + } + resp := server.CreateInstance(defaultCtx, instanceReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + instancesReq = append(instancesReq, instanceReq) + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + } + req := &api.Instance{ + ServiceToken: utils.NewStringValue(serviceResp.GetToken().GetValue()), + Service: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Host: utils.NewStringValue("127.0.0.1"), + Isolate: utils.NewBoolValue(true), + } + if resp := server.DeleteInstanceByHost(defaultCtx, req); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) +} + +// 测试enable_health_check +func TestUpdateHealthCheck(t *testing.T) { + getAndCheck := func(t *testing.T, req *api.Instance) { + query := map[string]string{ + "host": req.GetHost().GetValue(), + "port": strconv.FormatUint(uint64(req.GetPort().GetValue()), 10), + } + resp := server.GetInstances(query) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if len(resp.GetInstances()) != 1 { + t.Fatalf("error: %d", len(resp.GetInstances())) + } + t.Logf("%+v", resp.Instances[0]) + + instanceCheck(t, req, resp.Instances[0]) + } + _, serviceResp := createCommonService(t, 321) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 10) + defer cleanInstance(instanceResp.GetId().GetValue()) + instanceReq.ServiceToken = serviceResp.Token + t.Run("health_check可以随意关闭", func(t *testing.T) { + // 打开 -> 打开 + instanceReq.Weight = utils.NewUInt32Value(300) + if resp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + getAndCheck(t, instanceReq) + + // 打开-> 关闭 + instanceReq.EnableHealthCheck = utils.NewBoolValue(false) + if resp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + instanceReq.HealthCheck = nil + getAndCheck(t, instanceReq) + + // 关闭 -> 关闭 + instanceReq.Weight = utils.NewUInt32Value(200) + if resp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + getAndCheck(t, instanceReq) + + // 关闭 -> 打开 + instanceReq.EnableHealthCheck = utils.NewBoolValue(true) + instanceReq.HealthCheck = &api.HealthCheck{ + Type: api.HealthCheck_HEARTBEAT, + Heartbeat: &api.HeartbeatHealthCheck{ + Ttl: utils.NewUInt32Value(8), + }, + } + if resp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + getAndCheck(t, instanceReq) + }) + t.Run("healthcheck为空的异常测试", func(t *testing.T) { + instanceReq.HealthCheck = &api.HealthCheck{ + Heartbeat: &api.HeartbeatHealthCheck{ + Ttl: utils.NewUInt32Value(0), + }, + } + if resp := server.UpdateInstance(defaultCtx, instanceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + instanceReq.HealthCheck = &api.HealthCheck{ + Type: api.HealthCheck_HEARTBEAT, + Heartbeat: &api.HeartbeatHealthCheck{ + Ttl: utils.NewUInt32Value(naming.DefaultTLL), + }, + } + getAndCheck(t, instanceReq) + }) +} + +// 测试删除实例 +func TestDeleteInstance(t *testing.T) { + _, serviceResp := createCommonService(t, 123) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + getInstance := func(t *testing.T, s *api.Service, expect int) []*api.Instance { + filters := map[string]string{"service": s.GetName().GetValue(), "namespace": s.GetNamespace().GetValue()} + getResp := server.GetInstances(filters) + if !respSuccess(getResp) { + t.Fatalf("error") + } + if len(getResp.GetInstances()) != expect { + t.Fatalf("error") + } + return getResp.GetInstances() + } + + t.Run("可以通过ID删除实例", func(t *testing.T) { + _, instanceResp := createCommonInstance(t, serviceResp, 10) + defer cleanInstance(instanceResp.GetId().GetValue()) + removeCommonInstance(t, serviceResp, instanceResp.GetId().GetValue()) + + getInstance(t, serviceResp, 0) + }) + t.Run("可以通过四元组删除实例", func(t *testing.T) { + req := &api.Instance{ + ServiceToken: serviceResp.GetToken(), + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Host: utils.NewStringValue("abc"), + Port: utils.NewUInt32Value(8080), + } + resp := server.CreateInstance(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + instanceResp := resp.GetInstance() + t.Logf("%+v", getInstance(t, serviceResp, 1)) + defer cleanInstance(instanceResp.GetId().GetValue()) + + removeInstanceWithAttrs(t, serviceResp, instanceResp) + getInstance(t, serviceResp, 0) + }) + t.Run("可以通过五元组删除实例", func(t *testing.T) { + _, instanceResp := createCommonInstance(t, serviceResp, 55) + defer cleanInstance(instanceResp.GetId().GetValue()) + + removeInstanceWithAttrs(t, serviceResp, instanceResp) + getInstance(t, serviceResp, 0) + }) +} + +// 批量创建服务实例 +// 步骤: +// 1. n个服务,每个服务m个服务实例 +// 2. n个协程同时发请求 +func TestBatchCreateInstances(t *testing.T) { + Convey("批量创建服务", t, func() { + n := 32 + m := 128 + var services []*api.Service + for i := 0; i < n; i++ { + _, service := createCommonService(t, i) + services = append(services, service) + } + defer cleanServices(services) + + var wg sync.WaitGroup + idCh := make(chan string, n*m) + for i := 0; i < n; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + for j := 0; j < m; j++ { + _, instance := createCommonInstance(t, services[index], j) + idCh <- instance.GetId().GetValue() + } + }(i) + } + + var deleteCount int32 + for i := 0; i < n; i++ { + go func() { + for { + select { + case id := <-idCh: + cleanInstance(id) + atomic.AddInt32(&deleteCount, 1) + } + } + }() + } + + wg.Wait() + for { + count := atomic.LoadInt32(&deleteCount) + if count == int32(n*m) { + return + } + t.Logf("%d", count) + time.Sleep(time.Second * 1) + } + + }) +} + +// 测试批量接口返回的顺序 +func TestCreateInstancesOrder(t *testing.T) { + t.Run("测试批量接口返回的顺序与发送的数据一致", func(t *testing.T) { + _, service := createCommonService(t, 123) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + var instances []*api.Instance + for j := 0; j < 10; j++ { + instances = append(instances, &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + ServiceToken: service.GetToken(), + Host: utils.NewStringValue("a.b.c.d"), + Port: utils.NewUInt32Value(uint32(j)), + }) + } + + resps := server.CreateInstances(defaultCtx, instances) + if !respSuccess(resps) { + t.Fatalf("error: %+v", resps) + } + for i, resp := range resps.GetResponses() { + if resp.GetInstance().GetPort().GetValue() != instances[i].GetPort().GetValue() { + t.Fatalf("error") + } + cleanInstance(resp.GetInstance().GetId().GetValue()) + } + }) +} + +// 测试批量删除实例 +func TestBatchDeleteInstances(t *testing.T) { + _, service := createCommonService(t, 234) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + createInstances := func(t *testing.T) ([]*api.Instance, *api.BatchWriteResponse) { + var instances []*api.Instance + for j := 0; j < 100; j++ { + instances = append(instances, &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + ServiceToken: service.GetToken(), + Host: utils.NewStringValue("a.b.c.d"), + Port: utils.NewUInt32Value(uint32(j)), + }) + } + resps := server.CreateInstances(defaultCtx, instances) + if !respSuccess(resps) { + t.Fatalf("error: %+v", resps) + } + return instances, resps + } + t.Run("测试batch删除实例,单个接口", func(t *testing.T) { + _, resps := createInstances(t) + var wg sync.WaitGroup + for _, resp := range resps.GetResponses() { + wg.Add(1) + go func(instance *api.Instance) { + defer func() { + cleanInstance(instance.GetId().GetValue()) + wg.Done() + }() + req := &api.Instance{Id: instance.Id, ServiceToken: service.Token} + if out := server.DeleteInstance(defaultCtx, req); !respSuccess(out) { + t.Fatalf("error: %+v", out) + } + }(resp.GetInstance()) + } + wg.Wait() + }) + t.Run("测试batch删除实例,批量接口", func(t *testing.T) { + instances, instancesResp := createInstances(t) + // 删除body的token,测试header的token是否可行 + for _, instance := range instances { + instance.ServiceToken = nil + instance.Id = nil + } + ctx := context.WithValue(defaultCtx, utils.StringContext("polaris-token"), service.GetToken().GetValue()) + if out := server.DeleteInstances(ctx, instances); !respSuccess(out) { + t.Fatalf("error: %+v", out) + } else { + t.Logf("%+v", out) + } + resps := server.GetInstances(map[string]string{ + "service": service.GetName().GetValue(), + "namespace": service.GetNamespace().GetValue(), + }) + if !respSuccess(resps) { + t.Fatalf("error: %+v", resps) + } + if len(resps.GetInstances()) != 0 { + t.Fatalf("error : %d", len(resps.GetInstances())) + } + for _, entry := range instancesResp.GetResponses() { + cleanInstance(entry.GetInstance().GetId().GetValue()) + } + }) +} + +// 验证成功创建和删除实例的response +func TestInstanceResponse(t *testing.T) { + _, service := createCommonService(t, 234) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + create := func() (*api.Instance, *api.Instance) { + ins := &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + ServiceToken: service.GetToken(), + Host: utils.NewStringValue("a.b.c.d"), + Port: utils.NewUInt32Value(uint32(100)), + } + resps := server.CreateInstances(defaultCtx, []*api.Instance{ins}) + if !respSuccess(resps) { + t.Fatalf("error: %+v", resps) + } + return ins, resps.Responses[0].GetInstance() + } + t.Run("创建实例,返回的信息不能包括token,包括id", func(t *testing.T) { + ins, respIns := create() + defer cleanInstance(respIns.GetId().GetValue()) + t.Logf("%+v", respIns) + if respIns.GetService().GetValue() != ins.GetService().GetValue() || + respIns.GetNamespace().GetValue() != ins.GetNamespace().GetValue() || + respIns.GetHost().GetValue() != ins.GetHost().GetValue() || + respIns.GetPort().GetValue() != ins.GetPort().GetValue() || + respIns.GetId().GetValue() == "" || respIns.GetServiceToken().GetValue() != "" { + t.Fatalf("error") + } + }) + t.Run("删除实例,返回的信息包括req,不增加信息", func(t *testing.T) { + req, resp := create() + defer cleanInstance(resp.GetId().GetValue()) + time.Sleep(time.Second) + resps := server.DeleteInstances(defaultCtx, []*api.Instance{req}) + if !respSuccess(resps) { + t.Fatalf("error: %+v", resps) + } + respIns := resps.GetResponses()[0].GetInstance() + if respIns.GetId().GetValue() != "" || respIns.GetService() != req.GetService() || + respIns.GetNamespace() != req.GetNamespace() || respIns.GetHost() != req.GetHost() || + respIns.GetPort() != req.GetPort() || respIns.GetServiceToken() != req.GetServiceToken() { + t.Fatalf("error") + } + t.Logf("pass") + }) +} + +// 测试实例创建与删除的异常场景2 +func TestCreateInstancesBadCase2(t *testing.T) { + _, service := createCommonService(t, 123) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + t.Run("重复多个一样的实例注册,其中一个成功,其他的失败", func(t *testing.T) { + time.Sleep(time.Second) + var instances []*api.Instance + for j := 0; j < 3; j++ { + instances = append(instances, &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + ServiceToken: service.GetToken(), + Host: utils.NewStringValue("a.b.c.d"), + Port: utils.NewUInt32Value(uint32(100)), + }) + } + + resps := server.CreateInstances(defaultCtx, instances) + t.Logf("%+v", resps) + if respSuccess(resps) { + t.Fatalf("error: %+v", resps) + } + for _, resp := range resps.GetResponses() { + if resp.GetInstance().GetId().GetValue() != "" { + cleanInstance(resp.GetInstance().GetId().GetValue()) + } + } + }) + t.Run("重复发送同样实例的反注册请求,可以正常返回,一个成功,其他的失败", func(t *testing.T) { + time.Sleep(time.Second) + instance := &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + ServiceToken: service.GetToken(), + Host: utils.NewStringValue("a.b.c.d"), + Port: utils.NewUInt32Value(uint32(100)), + } + resps := server.CreateInstances(defaultCtx, []*api.Instance{instance}) + if !respSuccess(resps) { + t.Fatalf("error: %+v", resps) + } + defer cleanInstance(resps.Responses[0].Instance.GetId().GetValue()) + + delReqs := make([]*api.Instance, 0, 10) + for i := 0; i < 2; i++ { + delReqs = append(delReqs, &api.Instance{ + Id: resps.Responses[0].Instance.GetId(), + ServiceToken: service.GetToken(), + }) + } + time.Sleep(time.Second) + resps = server.DeleteInstances(defaultCtx, delReqs) + if respSuccess(resps) { + t.Fatalf("error: %s", resps) + } + for _, resp := range resps.GetResponses() { + if resp.GetCode().GetValue() != api.ExecuteSuccess && + resp.GetCode().GetValue() != api.SameInstanceRequest { + t.Fatalf("error: %+v", resp) + } + } + }) +} + +// 测试实例创建和删除的流量限制 +func TestInstanceRatelimit(t *testing.T) { + Convey("超过ratelimit,返回错误", t, func() { + _, serviceResp := createCommonService(t, 100) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 110) + server.CreateInstance(defaultCtx, instanceReq) + defer cleanInstance(instanceResp.GetId().GetValue()) + for i := 0; i < 10; i++ { + resp := server.CreateInstance(defaultCtx, instanceReq) + So(resp.GetCode().GetValue(), ShouldEqual, api.InstanceTooManyRequests) + } + time.Sleep(time.Second) + resp := server.CreateInstance(defaultCtx, instanceReq) + So(resp.GetCode().GetValue(), ShouldEqual, api.ExistedResource) + }) +} + +// 测试instance,no need update +func TestInstanceNoNeedUpdate(t *testing.T) { + _, serviceResp := createCommonService(t, 222) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 222) + defer cleanInstance(instanceResp.GetId().GetValue()) + Convey("instance没有变更,不需要更新", t, func() { + resp := server.UpdateInstance(defaultCtx, instanceReq) + So(resp.GetCode().GetValue(), ShouldEqual, api.NoNeedUpdate) + }) + Convey("metadata为空,不需要更新", t, func() { + oldMeta := instanceReq.GetMetadata() + instanceReq.Metadata = nil + defer func() { instanceReq.Metadata = oldMeta }() + resp := server.UpdateInstance(defaultCtx, instanceReq) + So(resp.GetCode().GetValue(), ShouldEqual, api.NoNeedUpdate) + }) + Convey("healthCheck为nil,不需要更新", t, func() { + oldHealthCheck := instanceReq.GetHealthCheck() + instanceReq.HealthCheck = nil + defer func() { instanceReq.HealthCheck = oldHealthCheck }() + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.NoNeedUpdate) + }) +} + +// 实例数据更新测试 +// 部分数据变更,触发更新 +func TestUpdateInstanceFiled(t *testing.T) { + _, serviceResp := createCommonService(t, 555) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 555) + defer cleanInstance(instanceResp.GetId().GetValue()) + Convey("metadata变更", t, func() { + instanceReq.Metadata = map[string]string{} + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.Metadata = map[string]string{"123": "456", "789": "abc", "135": "246"} + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.Metadata["890"] = "678" + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + delete(instanceReq.Metadata, "135") + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + }) + Convey("healthCheck变更", t, func() { + instanceReq.HealthCheck.Heartbeat.Ttl.Value = 33 + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.EnableHealthCheck = utils.NewBoolValue(false) + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + newInstanceResp := server.GetInstances(map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + }) + So(newInstanceResp.GetInstances()[0].GetHealthCheck(), ShouldBeNil) + instanceReq.HealthCheck = nil + + instanceReq.EnableHealthCheck = utils.NewBoolValue(true) + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.NoNeedUpdate) + + instanceReq.HealthCheck = &api.HealthCheck{ + Type: api.HealthCheck_HEARTBEAT, + Heartbeat: &api.HeartbeatHealthCheck{Ttl: utils.NewUInt32Value(50)}, + } + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + }) + Convey("其他字段变更", t, func() { + instanceReq.Protocol.Value = "new-protocol-1" + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.Version.Value = "new-version-1" + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.Priority.Value = 88 + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.Weight.Value = 500 + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.Healthy.Value = true + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.Isolate.Value = true + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + instanceReq.LogicSet.Value = "new-logic-set-1" + So(server.UpdateInstance(defaultCtx, instanceReq).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess) + + newInstanceResp := server.GetInstances(map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + }) + instanceCheck(t, newInstanceResp.GetInstances()[0], instanceReq) + }) +} + +// 根据服务名获取实例列表并且做基础的判断 +func getInstancesWithService(t *testing.T, name string, namespace string, expectCount int) []*api.Instance { + query := map[string]string{ + "service": name, + "namespace": namespace, + } + resp := server.GetInstances(query) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + if len(resp.GetInstances()) != expectCount { + t.Fatalf("error: %d", len(resp.GetInstances())) + } + + return resp.GetInstances() +} + +// test对instance字段进行校验 +func TestCheckInstanceFieldLen(t *testing.T) { + _, serviceResp := createCommonService(t, 800) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + ins := &api.Instance{ + ServiceToken: serviceResp.GetToken(), + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Host: utils.NewStringValue("127.0.0.1"), + Protocol: utils.NewStringValue("grpc"), + Version: utils.NewStringValue("1.0.1"), + LogicSet: utils.NewStringValue("sz"), + Metadata: map[string]string{}, + } + + t.Run("服务名超长", func(t *testing.T) { + str := genSpecialStr(129) + oldName := ins.Service + ins.Service = utils.NewStringValue(str) + resp := server.CreateInstance(defaultCtx, ins) + ins.Service = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("host超长", func(t *testing.T) { + str := genSpecialStr(129) + oldHost := ins.Host + ins.Host = utils.NewStringValue(str) + resp := server.CreateInstance(defaultCtx, ins) + ins.Host = oldHost + if resp.Code.Value != api.InvalidInstanceHost { + t.Fatalf("%+v", resp) + } + }) + t.Run("protocol超长", func(t *testing.T) { + str := genSpecialStr(129) + oldProtocol := ins.Protocol + ins.Protocol = utils.NewStringValue(str) + resp := server.CreateInstance(defaultCtx, ins) + ins.Protocol = oldProtocol + if resp.Code.Value != api.InvalidInstanceProtocol { + t.Fatalf("%+v", resp) + } + }) + t.Run("version超长", func(t *testing.T) { + str := genSpecialStr(129) + oldVersion := ins.Version + ins.Version = utils.NewStringValue(str) + resp := server.CreateInstance(defaultCtx, ins) + ins.Version = oldVersion + if resp.Code.Value != api.InvalidInstanceVersion { + t.Fatalf("%+v", resp) + } + }) + t.Run("logicSet超长", func(t *testing.T) { + str := genSpecialStr(129) + oldLogicSet := ins.LogicSet + ins.LogicSet = utils.NewStringValue(str) + resp := server.CreateInstance(defaultCtx, ins) + ins.LogicSet = oldLogicSet + if resp.Code.Value != api.InvalidInstanceLogicSet { + t.Fatalf("%+v", resp) + } + }) + t.Run("metadata超长", func(t *testing.T) { + str := genSpecialStr(129) + oldMetadata := ins.Metadata + oldMetadata[str] = str + resp := server.CreateInstance(defaultCtx, ins) + ins.Metadata = make(map[string]string) + if resp.Code.Value != api.InvalidMetadata { + t.Fatalf("%+v", resp) + } + }) + t.Run("port超长", func(t *testing.T) { + oldPort := ins.Port + ins.Port = utils.NewUInt32Value(70000) + resp := server.CreateInstance(defaultCtx, ins) + ins.Port = oldPort + if resp.Code.Value != api.InvalidInstancePort { + t.Fatalf("%+v", resp) + } + }) + t.Run("weight超长", func(t *testing.T) { + oldWeight := ins.Weight + ins.Weight = utils.NewUInt32Value(70000) + resp := server.CreateInstance(defaultCtx, ins) + ins.Weight = oldWeight + if resp.Code.Value != api.InvalidParameter { + t.Fatalf("%+v", resp) + } + }) + t.Run("检测字段为空指针", func(t *testing.T) { + oldName := ins.Service + ins.Service = nil + resp := server.CreateInstance(defaultCtx, ins) + ins.Service = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("检测字段为空", func(t *testing.T) { + oldName := ins.Service + ins.Service = utils.NewStringValue("") + resp := server.CreateInstance(defaultCtx, ins) + ins.Service = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) +} + +// test对instance入参进行校验 +func TestCheckInstanceParam(t *testing.T) { + // get instances接口限制(service+namespace)或者host必传,其它传参均拒绝服务 + _, serviceResp := createCommonService(t, 1254) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 153) + defer cleanInstance(instanceResp.GetId().GetValue()) + + t.Run("只传service", func(t *testing.T) { + query := map[string]string{} + query["service"] = "test" + resp := server.GetInstances(query) + if resp.Code.Value != api.InvalidQueryInsParameter { + t.Fatalf("%+v", resp) + } + }) + t.Run("只传namespace", func(t *testing.T) { + query := map[string]string{} + query["namespace"] = "test" + resp := server.GetInstances(query) + if resp.Code.Value != api.InvalidQueryInsParameter { + t.Fatalf("%+v", resp) + } + }) + t.Run("只传port", func(t *testing.T) { + query := map[string]string{} + query["port"] = "123" + resp := server.GetInstances(query) + if resp.Code.Value != api.InvalidQueryInsParameter { + t.Fatalf("%+v", resp) + } + }) + t.Run("只传version", func(t *testing.T) { + query := map[string]string{} + query["version"] = "123" + resp := server.GetInstances(query) + if resp.Code.Value != api.InvalidQueryInsParameter { + t.Fatalf("%+v", resp) + } + }) + t.Run("只传protocol", func(t *testing.T) { + query := map[string]string{} + query["protocol"] = "http" + resp := server.GetInstances(query) + if resp.Code.Value != api.InvalidQueryInsParameter { + t.Fatalf("%+v", resp) + } + }) + t.Run("传service+port", func(t *testing.T) { + query := map[string]string{} + query["service"] = "test" + query["port"] = "123" + resp := server.GetInstances(query) + if resp.Code.Value != api.InvalidQueryInsParameter { + t.Fatalf("%+v", resp) + } + }) + t.Run("传namespace+port", func(t *testing.T) { + query := map[string]string{} + query["namespace"] = "test" + query["port"] = "123" + resp := server.GetInstances(query) + if resp.Code.Value != api.InvalidQueryInsParameter { + t.Fatalf("%+v", resp) + } + }) + t.Run("传service+namespace", func(t *testing.T) { + query := map[string]string{} + query["service"] = instanceReq.GetService().Value + query["namespace"] = instanceReq.GetNamespace().Value + resp := server.GetInstances(query) + if resp.Code.Value != api.ExecuteSuccess { + t.Fatalf("%+v", resp) + } + }) + t.Run("传service+namespace+host", func(t *testing.T) { + query := map[string]string{} + query["service"] = instanceReq.GetService().Value + query["namespace"] = instanceReq.GetNamespace().Value + query["host"] = instanceReq.GetHost().Value + resp := server.GetInstances(query) + if resp.Code.Value != api.ExecuteSuccess { + t.Fatalf("%+v", resp) + } + }) + t.Run("传service+namespace+port", func(t *testing.T) { + query := map[string]string{} + query["service"] = instanceReq.GetService().Value + query["namespace"] = instanceReq.GetNamespace().Value + query["port"] = strconv.Itoa(int(instanceReq.GetPort().Value)) + resp := server.GetInstances(query) + if resp.Code.Value != api.ExecuteSuccess { + t.Fatalf("%+v", resp) + } + }) + t.Run("传host", func(t *testing.T) { + query := map[string]string{} + query["host"] = instanceReq.GetHost().Value + resp := server.GetInstances(query) + if resp.Code.Value != api.ExecuteSuccess { + t.Fatalf("%+v", resp) + } + }) + t.Run("传host+namespace", func(t *testing.T) { + query := map[string]string{} + query["host"] = instanceReq.GetHost().Value + query["namespace"] = instanceReq.GetNamespace().Value + resp := server.GetInstances(query) + if resp.Code.Value != api.ExecuteSuccess { + t.Fatalf("%+v", resp) + } + }) + t.Run("传host+port", func(t *testing.T) { + query := map[string]string{} + query["host"] = instanceReq.GetHost().Value + query["port"] = strconv.Itoa(int(instanceReq.GetPort().Value)) + resp := server.GetInstances(query) + if resp.Code.Value != api.ExecuteSuccess { + t.Fatalf("%+v", resp) + } + }) +} diff --git a/naming/test/l5service_test.go b/naming/test/l5service_test.go new file mode 100644 index 000000000..22d79bc37 --- /dev/null +++ b/naming/test/l5service_test.go @@ -0,0 +1,306 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "context" + "database/sql" + "fmt" + "github.com/polarismesh/polaris-server/common/api/l5" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/gogo/protobuf/proto" + . "github.com/smartystreets/goconvey/convey" + "testing" + "time" +) + +// safe get cache data +func safeSyncByAgentCmd(ctx context.Context, sbac *l5.Cl5SyncByAgentCmd) (*l5.Cl5SyncByAgentAckCmd, error) { + time.Sleep(updateCacheInterval) + return server.SyncByAgentCmd(ctx, sbac) +} + +// get maxFlow from t_route +func getMaxRouteFlow(t *testing.T) int { + maxStr := "select IFNULL(max(fflow),0) from t_route" + var maxFlow int + err := db.QueryRow(maxStr).Scan(&maxFlow) + switch { + case err == sql.ErrNoRows: + maxFlow = 0 + case err != nil: + t.Fatalf("error: %s", err.Error()) + } + + return maxFlow + 1 +} + +// add l5 t_route +func addL5Route(t *testing.T, ip, modID, cmdID int32, setID string) { + maxFlow := getMaxRouteFlow(t) + str := "replace into t_route(fip, fmodid, fcmdid, fsetId, fflag, fstamp, fflow) values(?,?,?,?,0,now(),?)" + if _, err := db.Exec(str, ip, modID, cmdID, setID, maxFlow+1); err != nil { + t.Fatalf("error: %s", err.Error()) + } +} + +// 删除t_route +func deleteL5Route(t *testing.T, ip, modID, cmdID int32) { + maxFlow := getMaxRouteFlow(t) + str := "update t_route set fflag = 1, fflow = ? where fip = ? and fmodid = ? and fcmdid = ?" + if _, err := db.Exec(str, maxFlow, ip, modID, cmdID); err != nil { + t.Fatalf("error: %s", err.Error()) + } +} + +// 创建带SetID的实例列表 +// setID可以为空 +func createInstanceWithSetID(service *api.Service, index int, setIDs string, weights string) *api.Instance { + instance := &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + Host: utils.NewStringValue(fmt.Sprintf("10.235.25.%d", index)), + Port: utils.NewUInt32Value(8080), + ServiceToken: service.GetToken(), + } + if setIDs != "" { + instance.Metadata = map[string]string{"internal-cl5-setId": setIDs} + } + if weights != "" { + if instance.Metadata == nil { + instance.Metadata = make(map[string]string) + } + instance.Metadata["internal-cl5-weight"] = weights + } + resp := server.CreateInstance(defaultCtx, instance) + So(respSuccess(resp), ShouldEqual, true) + return resp.GetInstance() +} + +// 测试兼容l5协议的流程 +func TestSyncByAgentCmd(t *testing.T) { + Convey("获取老Cl5的Sid数据", t, func() { + reqCmd := &l5.Cl5SyncByAgentCmd{AgentIp: proto.Int32(11111), SyncFlow: proto.Int32(22222)} + modID := int32(64850433) + cmdID := int32(65540) + service := &api.Service{ + Name: utils.NewStringValue(fmt.Sprintf("%d:%d", modID, cmdID)), + Namespace: utils.NewStringValue("default"), + Owners: utils.NewStringValue("aa"), + } + serviceResp := server.CreateService(defaultCtx, service) + So(respSuccess(serviceResp), ShouldEqual, true) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + + Convey("正常数据获取", func() { + reqCmd.OptList = &l5.Cl5OptList{ + Opt: []*l5.Cl5OptObj{{ModId: proto.Int32(modID), CmdId: proto.Int32(cmdID)}}, + } + + ack, err := safeSyncByAgentCmd(defaultCtx, reqCmd) + So(err, ShouldBeNil) + So(ack.GetAgentIp(), ShouldEqual, reqCmd.GetAgentIp()) + So(ack.GetSyncFlow(), ShouldEqual, reqCmd.GetSyncFlow()+1) + So(len(ack.GetServList().GetServ()), ShouldEqual, 0) + + for i := 0; i < 5; i++ { + resp := createInstanceWithSetID(serviceResp.GetService(), i, "", "") + defer cleanInstance(resp.GetId().GetValue()) + } + + ack, _ = safeSyncByAgentCmd(defaultCtx, reqCmd) + So(len(ack.GetServList().GetServ()), ShouldEqual, 5) + }) + Convey("一个实例属于一个set功能验证", func() { + // 新建一些带set的被调 + for i := 0; i < 10; i++ { + resp := createInstanceWithSetID(serviceResp.GetService(), i, fmt.Sprintf("SET_%d", i%2), "") + defer cleanInstance(resp.GetId().GetValue()) + } + + ack, _ := safeSyncByAgentCmd(defaultCtx, reqCmd) + So(len(ack.GetServList().GetServ()), ShouldEqual, 0) + + addL5Route(t, reqCmd.GetAgentIp(), modID, cmdID, "SET_1") + defer deleteL5Route(t, reqCmd.GetAgentIp(), modID, cmdID) + ack, _ = safeSyncByAgentCmd(defaultCtx, reqCmd) + So(len(ack.GetServList().GetServ()), ShouldEqual, 5) // SET_0 SET_1 各一半 + }) + Convey("一个实例多个set功能验证", func() { + // 新建一些带set的被调 + setIDs := "SET_X" + weights := "0" + for i := 0; i < 10; i++ { + setIDs = setIDs + fmt.Sprintf(",SET_%d", i) + weights = weights + fmt.Sprintf(",%d", (i+1)*100) + resp := createInstanceWithSetID(serviceResp.GetService(), i, setIDs, weights) + defer cleanInstance(resp.GetId().GetValue()) + } + // SET_X,SET_0, 0,100 + // SET_X,SET_0,SET_1 0,100,200 + // SET_X,SET_0,SET_1,SET_2 0,100,200,300 + // ... + ack, _ := safeSyncByAgentCmd(defaultCtx, reqCmd) + So(len(ack.GetServList().GetServ()), ShouldEqual, 0) + for i := 0; i < 10; i++ { + addL5Route(t, reqCmd.GetAgentIp(), modID, cmdID, fmt.Sprintf("SET_%d", i)) + ack, _ = safeSyncByAgentCmd(defaultCtx, reqCmd) + So(len(ack.GetServList().GetServ()), ShouldEqual, 10-i) + for _, callee := range ack.GetServList().GetServ() { + So(callee.GetWeight(), ShouldEqual, (i+1)*100) + } + } + + // SET_X weight=0 + addL5Route(t, reqCmd.GetAgentIp(), modID, cmdID, fmt.Sprintf("SET_X")) + ack, _ = safeSyncByAgentCmd(defaultCtx, reqCmd) + So(len(ack.GetServList().GetServ()), ShouldEqual, 0) + + addL5Route(t, reqCmd.GetAgentIp(), modID, cmdID, fmt.Sprintf("SET_%d", 20)) + defer deleteL5Route(t, reqCmd.GetAgentIp(), modID, cmdID) + ack, _ = safeSyncByAgentCmd(defaultCtx, reqCmd) + So(len(ack.GetServList().GetServ()), ShouldEqual, 0) + }) + }) +} + +// 测试根据埋点server获取到后端serverList的功能 +func TestCl5DiscoverTest(t *testing.T) { + createDiscoverServer := func(name string) *api.Service { + service := &api.Service{ + Name: utils.NewStringValue(name), + Namespace: utils.NewStringValue("Polaris"), + Owners: utils.NewStringValue("my"), + } + resp := server.CreateService(defaultCtx, service) + So(respSuccess(resp), ShouldEqual, true) + So(resp.GetService(), ShouldNotBeNil) + return resp.GetService() + } + createDiscoverInstance := func(service *api.Service, index int) *api.Instance { + instance := &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + ServiceToken: service.GetToken(), + Host: utils.NewStringValue(fmt.Sprintf("10.0.0.%d", index)), + Port: utils.NewUInt32Value(7779), + Protocol: utils.NewStringValue("l5pb"), + Healthy: utils.NewBoolValue(true), + } + resp := server.CreateInstance(defaultCtx, instance) + So(respSuccess(resp), ShouldEqual, true) + So(resp.GetInstance(), ShouldNotBeNil) + return resp.GetInstance() + } + + Convey("测试根据埋点server获取到后端serverList的功能", t, func() { + reqCmd := &l5.Cl5SyncByAgentCmd{ + AgentIp: proto.Int32(123), + OptList: &l5.Cl5OptList{Opt: []*l5.Cl5OptObj{{ModId: proto.Int32(111), CmdId: proto.Int32(222)}}}, + } + name := "test-api.cl5.discover" + discover := createDiscoverServer(name) + defer cleanServiceName(discover.GetName().GetValue(), discover.GetNamespace().GetValue()) + instance := createDiscoverInstance(discover, 0) + defer cleanInstance(instance.GetId().GetValue()) + + discover1 := createDiscoverServer(name + ".1") + defer cleanServiceName(discover1.GetName().GetValue(), discover1.GetNamespace().GetValue()) + discover2 := createDiscoverServer(name + ".2") + defer cleanServiceName(discover2.GetName().GetValue(), discover2.GetNamespace().GetValue()) + + ctx := context.WithValue(defaultCtx, utils.Cl5ServerCluster{}, name) + ctx = context.WithValue(ctx, utils.Cl5ServerProtocol{}, "l5pb") + Convey("只有默认集群,则返回默认集群的数据", func() { + ack, _ := safeSyncByAgentCmd(ctx, reqCmd) + So(len(ack.GetL5SvrList().GetIp()), ShouldEqual, 1) + t.Logf("%+v", ack) + }) + Convey("不同请求IP获取到不同的集群", func() { + discover.Metadata = map[string]string{"internal-cluster-count": "2"} + So(respSuccess(server.UpdateService(defaultCtx, discover)), ShouldEqual, true) + instance1 := createDiscoverInstance(discover1, 1) + defer cleanInstance(instance1.GetId().GetValue()) + instance2 := createDiscoverInstance(discover1, 2) + defer cleanInstance(instance2.GetId().GetValue()) + + instance3 := createDiscoverInstance(discover2, 3) + defer cleanInstance(instance3.GetId().GetValue()) + instance4 := createDiscoverInstance(discover2, 4) + defer cleanInstance(instance4.GetId().GetValue()) + instance5 := createDiscoverInstance(discover2, 5) + defer cleanInstance(instance5.GetId().GetValue()) + + reqCmd.AgentIp = proto.Int32(56352420) // clusterIndex := ip %count + 1 + ack, _ := safeSyncByAgentCmd(ctx, reqCmd) + So(len(ack.GetL5SvrList().GetIp()), ShouldEqual, 2) // cluster1 + + reqCmd.AgentIp = proto.Int32(56352421) + ack, _ = safeSyncByAgentCmd(ctx, reqCmd) + So(len(ack.GetL5SvrList().GetIp()), ShouldEqual, 3) // cluster2 + }) + }) +} + +// 测试别名sid可以正常获取数据 +func TestCl5AliasSyncCmd(t *testing.T) { + reqCmd := &l5.Cl5SyncByAgentCmd{ + AgentIp: proto.Int32(11111), + SyncFlow: proto.Int32(22222), + } + testFunc := func(namespace string) { + Convey(fmt.Sprintf("%s, alias sid, discover ok", namespace), t, func() { + service := &api.Service{ + Name: utils.NewStringValue("my-name-for-alias"), + Namespace: utils.NewStringValue(namespace), + Owners: utils.NewStringValue("aa"), + } + resp := server.CreateService(defaultCtx, service) + So(respSuccess(resp), ShouldEqual, true) + serviceResp := resp.Service + defer cleanServiceName(serviceResp.Name.Value, serviceResp.Namespace.Value) + + resp = createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.Namespace.Value) + modID, cmdID := parseStr2Sid(resp.Alias.Alias.Value) + reqCmd.OptList = &l5.Cl5OptList{ + Opt: []*l5.Cl5OptObj{{ModId: proto.Int32(int32(modID)), CmdId: proto.Int32(int32(cmdID))}}, + } + + count := 5 + for i := 0; i < count; i++ { + _, instanceResp := createCommonInstance(t, serviceResp, i) + defer cleanInstance(instanceResp.GetId().GetValue()) + } + time.Sleep(updateCacheInterval) + + ack, _ := server.SyncByAgentCmd(defaultCtx, reqCmd) + So(ack.GetAgentIp(), ShouldEqual, reqCmd.GetAgentIp()) + So(ack.GetSyncFlow(), ShouldEqual, reqCmd.GetSyncFlow()+1) + So(len(ack.GetServList().GetServ()), ShouldEqual, count) + + }) + } + + namespaces := []string{"default", "Polaris"} + for _, entry := range namespaces { + testFunc(entry) + } +} diff --git a/naming/test/main_test.go b/naming/test/main_test.go new file mode 100644 index 000000000..944e6f7a8 --- /dev/null +++ b/naming/test/main_test.go @@ -0,0 +1,1406 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "context" + "database/sql" + "encoding/json" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/plugin" + "github.com/golang/protobuf/ptypes/duration" + "strconv" + "strings" + "testing" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/config" + "github.com/polarismesh/polaris-server/naming" + "github.com/polarismesh/polaris-server/store" + + // 使用mysql库 + "os" + "sync" + + _ "github.com/polarismesh/polaris-server/plugin/history/logger" + _ "github.com/polarismesh/polaris-server/plugin/ratelimit/tokenBucket" + _ "github.com/polarismesh/polaris-server/store/defaultStore" + _ "github.com/go-sql-driver/mysql" + "gopkg.in/yaml.v2" +) + +var ( + cfg = config.Config{} + once = sync.Once{} + server = &naming.Server{} + db = &sql.DB{} + cancelFlag = false + updateCacheInterval = time.Second * 2 + defaultCtx = context.Background() +) + +// 加载配置 +func loadConfig() error { + file, err := os.Open("test.yaml") + if err != nil { + fmt.Printf("[ERROR] %v\n", err) + return err + } + + err = yaml.NewDecoder(file).Decode(&cfg) + if err != nil { + fmt.Printf("[ERROR] %v\n", err) + return err + } + + return err +} + +// 判断一个resp是否执行成功 +func respSuccess(resp api.ResponseMessage) bool { + if api.CalcCode(resp) != 200 { + return false + } + + return true +} + +// 内部初始化函数 +func initialize() error { + options := log.DefaultOptions() + options.SetLogCallers(log.DefaultScopeName, true) + _ = log.Configure(options) + var err error + once.Do(func() { + err = loadConfig() + if err != nil { + return + } + // 初始化defaultCtx + defaultCtx = context.WithValue(defaultCtx, utils.StringContext("request-id"), "test-1") + + // 初始化存储层 + store.SetStoreConfig(&cfg.Store) + _, _ = store.GetStore() + + plugin.SetPluginConfig(&cfg.Plugin) + + // 初始化Naming Server + ctx, cancel := context.WithCancel(context.Background()) + defer func() { + if cancelFlag { + cancel() + } + }() + + naming.SetHealthCheckConfig(&cfg.Naming.HealthCheck) + if err := naming.Initialize(ctx, &cfg.Naming, &cfg.Cache); err != nil { + panic(err) + } + + server, err = naming.GetServer() + if err != nil { + panic(err) + } + + masterEntry := cfg.Store.Option["master"] + masterConfig, ok := masterEntry.(map[interface{}]interface{}) + if !ok { + panic("database cfg is invalid") + } + + dbType := masterConfig["dbType"].(string) + dbUser := masterConfig["dbUser"].(string) + dbPwd := masterConfig["dbPwd"].(string) + dbAddr := masterConfig["dbAddr"].(string) + dbName := masterConfig["dbName"].(string) + + dbSource := fmt.Sprintf("%s:%s@tcp(%s)/%s", dbUser, dbPwd, dbAddr, dbName) + db, err = sql.Open(dbType, dbSource) + if err != nil { + panic(err) + } + + // 多等待一会 + updateCacheInterval = server.Cache().GetUpdateCacheInterval() + time.Millisecond*500 + }) + + return err +} + +// 从数据库彻底删除命名空间 +func cleanNamespace(name string) { + if name == "" { + panic("name is empty") + } + + log.Infof("clean namespace: %s", name) + str := "delete from namespace where name = ?" + if _, err := db.Exec(str, name); err != nil { + panic(err) + } +} + +// 从数据库彻底删除服务 +func cleanService(id, name, namespace string) { + if id == "" { + panic("id is empty") + } + + log.Infof("clean service: %s", id) + str := "delete from service_metadata where id = ?" + if _, err := db.Exec(str, id); err != nil { + panic(err) + } + + str = "delete from service where id = ?" + if _, err := db.Exec(str, id); err != nil { + panic(err) + } + + str = "delete from owner_service_map where service=? and namespace=?" + if _, err := db.Exec(str, name, namespace); err != nil { + panic(err) + } +} + +// 从数据库彻底删除服务名对应的服务 +func cleanServiceName(name string, namespace string) { + log.Infof("clean service %s, %s", name, namespace) + str := "select id from service where name = ? and namespace = ?" + var id string + err := db.QueryRow(str, name, namespace).Scan(&id) + switch { + case err == sql.ErrNoRows: + return + case err != nil: + panic(err) + } + + cleanService(id, name, namespace) +} + +// clean services +func cleanServices(services []*api.Service) { + str := "delete from service where name = ? and namespace = ?" + cleanOwnerSql := "delete from owner_service_map where service=? and namespace=?" + for _, service := range services { + if _, err := db.Exec(str, service.GetName().GetValue(), service.GetNamespace().GetValue()); err != nil { + panic(err) + } + if _, err := db.Exec(cleanOwnerSql, service.GetName().GetValue(), service.GetNamespace().GetValue()); err != nil { + panic(err) + } + } +} + +// 从数据库彻底删除实例 +func cleanInstance(instanceID string) { + if instanceID == "" { + panic("instanceID is empty") + } + + /*str := "delete from health_check where id = ?" + if _, err := db.Exec(str, instanceID); err != nil { + panic(err) + } + + str = "delete from instance_metadata where id = ?" + if _, err := db.Exec(str, instanceID); err != nil { + panic(err) + }*/ + log.Infof("clean instance: %s", instanceID) + str := "delete from instance where id = ?" + if _, err := db.Exec(str, instanceID); err != nil { + panic(err) + } +} + +// 增加一个服务 +func createCommonService(t *testing.T, id int) (*api.Service, *api.Service) { + serviceReq := genMainService(id) + for i := 0; i < 10; i++ { + k := fmt.Sprintf("key-%d-%d", id, i) + v := fmt.Sprintf("value-%d-%d", id, i) + serviceReq.Metadata[k] = v + } + + cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + resp := server.CreateService(defaultCtx, serviceReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return serviceReq, resp.GetService() +} + +// 生成服务的主要数据 +func genMainService(id int) *api.Service { + return &api.Service{ + Name: utils.NewStringValue(fmt.Sprintf("test-service-%d", id)), + Namespace: utils.NewStringValue(naming.DefaultNamespace), + Metadata: make(map[string]string), + Ports: utils.NewStringValue(fmt.Sprintf("ports-%d", id)), + Business: utils.NewStringValue(fmt.Sprintf("business-%d", id)), + Department: utils.NewStringValue(fmt.Sprintf("department-%d", id)), + CmdbMod1: utils.NewStringValue(fmt.Sprintf("cmdb-mod1-%d", id)), + CmdbMod2: utils.NewStringValue(fmt.Sprintf("cmdb-mod2-%d", id)), + CmdbMod3: utils.NewStringValue(fmt.Sprintf("cmdb-mod2-%d", id)), + Comment: utils.NewStringValue(fmt.Sprintf("service-comment-%d", id)), + Owners: utils.NewStringValue(fmt.Sprintf("service-owner-%d", id)), + } +} + +// removeCommonService +func removeCommonServices(t *testing.T, req []*api.Service) { + if resp := server.DeleteServices(defaultCtx, req); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } +} + +// 新增一个实例 +func createCommonInstance(t *testing.T, service *api.Service, id int) ( + *api.Instance, *api.Instance) { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(service.GetToken().GetValue()), + Service: utils.NewStringValue(service.GetName().GetValue()), + Namespace: utils.NewStringValue(service.GetNamespace().GetValue()), + VpcId: utils.NewStringValue(fmt.Sprintf("vpcid-%d", id)), + Host: utils.NewStringValue(fmt.Sprintf("9.9.9.%d", id)), + Port: utils.NewUInt32Value(8000 + uint32(id)), + Protocol: utils.NewStringValue(fmt.Sprintf("protocol-%d", id)), + Version: utils.NewStringValue(fmt.Sprintf("version-%d", id)), + Priority: utils.NewUInt32Value(1 + uint32(id)%10), + Weight: utils.NewUInt32Value(1 + uint32(id)%1000), + HealthCheck: &api.HealthCheck{ + Type: api.HealthCheck_HEARTBEAT, + Heartbeat: &api.HeartbeatHealthCheck{ + Ttl: utils.NewUInt32Value(3), + }, + }, + Healthy: utils.NewBoolValue(false), // 默认是非健康,因为打开了healthCheck + Isolate: utils.NewBoolValue(false), + LogicSet: utils.NewStringValue(fmt.Sprintf("logic-set-%d", id)), + Metadata: map[string]string{ + "internal-personal-xxx": fmt.Sprintf("internal-personal-xxx_%d", id), + "2my-meta": fmt.Sprintf("my-meta-%d", id), + "my-meta-a1": "1111", + "smy-xmeta-h2": "2222", + "my-1meta-o3": "2222", + "my-2meta-4c": "2222", + "my-3meta-d5": "2222", + "dmy-meta-6p": "2222", + "1my-pmeta-d7": "2222", + "my-dmeta-8c": "2222", + "my-xmeta-9p": "2222", + "other-meta-x": "xxx", + "other-meta-1": "xx11", + "amy-instance": "my-instance", + "very-long-key-data-xxxxxxxxx": "Y", + "very-long-key-data-uuuuuuuuu": "P", + }, + } + + resp := server.CreateInstance(defaultCtx, instanceReq) + if respSuccess(resp) { + return instanceReq, resp.GetInstance() + } + + if resp.GetCode().GetValue() != api.ExistedResource { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + // repeated + InstanceID, _ := naming.CalculateInstanceID(instanceReq.GetNamespace().GetValue(), instanceReq.GetService().GetValue(), + instanceReq.GetVpcId().GetValue(), instanceReq.GetHost().GetValue(), instanceReq.GetPort().GetValue()) + cleanInstance(InstanceID) + t.Logf("repeatd create instance(%s)", InstanceID) + resp = server.CreateInstance(defaultCtx, instanceReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return instanceReq, resp.GetInstance() +} + +//指定 IP 和端口为一个服务创建实例 +func addHostPortInstance(t *testing.T, service *api.Service, host string, port uint32) ( + *api.Instance, *api.Instance) { + instanceReq := &api.Instance{ + ServiceToken: utils.NewStringValue(service.GetToken().GetValue()), + Service: utils.NewStringValue(service.GetName().GetValue()), + Namespace: utils.NewStringValue(service.GetNamespace().GetValue()), + Host: utils.NewStringValue(host), + Port: utils.NewUInt32Value(port), + Healthy: utils.NewBoolValue(true), + Isolate: utils.NewBoolValue(false), + } + resp := server.CreateInstance(defaultCtx, instanceReq) + if respSuccess(resp) { + return instanceReq, resp.GetInstance() + } + + if resp.GetCode().GetValue() != api.ExistedResource { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + return instanceReq, resp.GetInstance() +} + +// 添加一个实例 +func addInstance(t *testing.T, ins *api.Instance) ( + *api.Instance, *api.Instance) { + resp := server.CreateInstance(defaultCtx, ins) + if !respSuccess(resp) { + if resp.GetCode().GetValue() == api.ExistedResource { + id, _ := naming.CalculateInstanceID(ins.GetNamespace().GetValue(), ins.GetService().GetValue(), + ins.GetHost().GetValue(), ins.GetHost().GetValue(), ins.GetPort().GetValue()) + cleanInstance(id) + } + } else { + return ins, resp.GetInstance() + } + + resp = server.CreateInstance(defaultCtx, ins) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return ins, resp.GetInstance() +} + +// 删除一个实例 +func removeCommonInstance(t *testing.T, service *api.Service, instanceID string) { + req := &api.Instance{ + ServiceToken: utils.NewStringValue(service.GetToken().GetValue()), + Id: utils.NewStringValue(instanceID), + } + + resp := server.DeleteInstance(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return +} + +// 通过四元组或者五元组删除实例 +func removeInstanceWithAttrs(t *testing.T, service *api.Service, instance *api.Instance) { + req := &api.Instance{ + ServiceToken: utils.NewStringValue(service.GetToken().GetValue()), + Service: utils.NewStringValue(service.GetName().GetValue()), + Namespace: utils.NewStringValue(service.GetNamespace().GetValue()), + VpcId: utils.NewStringValue(instance.GetVpcId().GetValue()), + Host: utils.NewStringValue(instance.GetHost().GetValue()), + Port: utils.NewUInt32Value(instance.GetPort().GetValue()), + } + if resp := server.DeleteInstance(defaultCtx, req); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + return +} + +// 创建一个路由配置 +func createCommonRoutingConfig(t *testing.T, service *api.Service, inCount int, outCount int) (*api.Routing, *api.Routing) { + inBounds := make([]*api.Route, 0, inCount) + for i := 0; i < inCount; i++ { + matchString := &api.MatchString{ + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("in-meta-value-%d", i)), + } + source := &api.Source{ + Service: utils.NewStringValue(fmt.Sprintf("in-source-service-%d", i)), + Namespace: utils.NewStringValue(fmt.Sprintf("in-source-service-%d", i)), + Metadata: map[string]*api.MatchString{ + fmt.Sprintf("in-metadata-%d", i): matchString, + }, + } + destination := &api.Destination{ + Service: utils.NewStringValue(fmt.Sprintf("in-destination-service-%d", i)), + Namespace: utils.NewStringValue(fmt.Sprintf("in-destination-service-%d", i)), + Metadata: map[string]*api.MatchString{ + fmt.Sprintf("in-metadata-%d", i): matchString, + }, + Priority: utils.NewUInt32Value(120), + Weight: utils.NewUInt32Value(100), + Transfer: utils.NewStringValue("abcdefg"), + } + + entry := &api.Route{ + Sources: []*api.Source{source}, + Destinations: []*api.Destination{destination}, + } + inBounds = append(inBounds, entry) + } + + conf := &api.Routing{ + Service: utils.NewStringValue(service.GetName().GetValue()), + Namespace: utils.NewStringValue(service.GetNamespace().GetValue()), + Inbounds: inBounds, + ServiceToken: utils.NewStringValue(service.GetToken().GetValue()), + } + + // TODO 是否应该先删除routing + + resp := server.CreateRoutingConfig(defaultCtx, conf) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + + return conf, resp.GetRouting() +} + +// 删除一个路由配置 +func deleteCommonRoutingConfig(t *testing.T, req *api.Routing) { + resp := server.DeleteRoutingConfig(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("%s", resp.GetInfo().GetValue()) + } +} + +// 更新一个路由配置 +func updateCommonRoutingConfig(t *testing.T, req *api.Routing) { + resp := server.UpdateRoutingConfig(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("%s", resp.GetInfo().GetValue()) + } +} + +// 彻底删除一个路由配置 +func cleanCommonRoutingConfig(service string, namespace string) { + str := "delete from routing_config where id in (select id from service where name = ? and namespace = ?)" + //fmt.Printf("%s %s %s\n", str, service, namespace) + if _, err := db.Exec(str, service, namespace); err != nil { + panic(err) + } + return +} + +// +func CheckGetService(t *testing.T, expectReqs []*api.Service, actualReqs []*api.Service) { + if len(expectReqs) != len(actualReqs) { + t.Fatalf("error: %d %d", len(expectReqs), len(actualReqs)) + } + + for _, expect := range expectReqs { + found := false + for _, actual := range actualReqs { + if expect.GetName().GetValue() != actual.GetName().GetValue() || + expect.GetNamespace().GetValue() != actual.GetNamespace().GetValue() { + continue + } + + found = true + + if expect.GetPorts().GetValue() != actual.GetPorts().GetValue() || + expect.GetOwners().GetValue() != actual.GetOwners().GetValue() || + expect.GetComment().GetValue() != actual.GetComment().GetValue() || + actual.GetToken().GetValue() != "" || actual.GetRevision().GetValue() == "" { + t.Fatalf("error: %+v, %+v", expect, actual) + } + + if len(expect.Metadata) != len(actual.Metadata) { + t.Fatalf("error: %d, %d", len(expect.Metadata), len(actual.Metadata)) + } + for key, value := range expect.Metadata { + match, ok := actual.Metadata[key] + if !ok { + t.Fatalf("error") + } + if value != match { + t.Fatalf("error") + } + } + } + if !found { + t.Fatalf("error: %s, %s", expect.GetName().GetValue(), expect.GetNamespace().GetValue()) + } + + } +} + +// 检查服务发现的字段是否一致 +func discoveryCheck(t *testing.T, req *api.Service, resp *api.DiscoverResponse) { + if resp == nil { + t.Fatalf("error") + } + + if resp.GetService().GetName().GetValue() != req.GetName().GetValue() || + resp.GetService().GetNamespace().GetValue() != req.GetNamespace().GetValue() || + resp.GetService().GetRevision().GetValue() == "" { + t.Fatalf("error: %+v", resp) + } + + if resp.Service == nil { + t.Fatalf("error") + } + //t.Logf("%+v", resp.Service) + + if resp.Service.GetName().GetValue() != req.GetName().GetValue() || + resp.Service.GetNamespace().GetValue() != req.GetNamespace().GetValue() { + t.Fatalf("error: %+v", resp.Service) + } +} + +// 实例校验 +func instanceCheck(t *testing.T, expect *api.Instance, actual *api.Instance) { + // #lizard forgives + switch { + case expect.GetService().GetValue() != actual.GetService().GetValue(): + t.Fatalf("error %s---%s", expect.GetService().GetValue(), actual.GetService().GetValue()) + case expect.GetNamespace().GetValue() != actual.GetNamespace().GetValue(): + t.Fatalf("error") + case expect.GetPort().GetValue() != actual.GetPort().GetValue(): + t.Fatalf("error") + case expect.GetHost().GetValue() != actual.GetHost().GetValue(): + t.Fatalf("error") + case expect.GetVpcId().GetValue() != actual.GetVpcId().GetValue(): + t.Fatalf("error") + case expect.GetProtocol().GetValue() != actual.GetProtocol().GetValue(): + t.Fatalf("error") + case expect.GetVersion().GetValue() != actual.GetVersion().GetValue(): + t.Fatalf("error") + case expect.GetWeight().GetValue() != actual.GetWeight().GetValue(): + t.Fatalf("error") + case expect.GetHealthy().GetValue() != actual.GetHealthy().GetValue(): + t.Fatalf("error") + case expect.GetIsolate().GetValue() != actual.GetIsolate().GetValue(): + t.Fatalf("error") + case expect.GetLogicSet().GetValue() != actual.GetLogicSet().GetValue(): + t.Fatalf("error") + default: + break + + // 实例创建,无法指定cmdb信息 + /*case expect.GetCmdbRegion().GetValue() != actual.GetCmdbRegion().GetValue(): + t.Fatalf("error") + case expect.GetCmdbCampus().GetValue() != actual.GetCmdbRegion().GetValue(): + t.Fatalf("error") + case expect.GetCmdbZone().GetValue() != actual.GetCmdbZone().GetValue(): + t.Fatalf("error")*/ + + } + for key, value := range expect.GetMetadata() { + actualValue := actual.GetMetadata()[key] + if value != actualValue { + t.Fatalf("error %+v, %+v", expect.Metadata, actual.Metadata) + } + } + + if expect.GetHealthCheck().GetType() != actual.GetHealthCheck().GetType() { + t.Fatalf("error") + } + if expect.GetHealthCheck().GetHeartbeat().GetTtl().GetValue() != + actual.GetHealthCheck().GetHeartbeat().GetTtl().GetValue() { + t.Fatalf("error") + } +} + +// 完整对比service的各个属性 +func serviceCheck(t *testing.T, expect *api.Service, actual *api.Service) { + switch { + case expect.GetName().GetValue() != actual.GetName().GetValue(): + t.Fatalf("error") + case expect.GetNamespace().GetValue() != actual.GetNamespace().GetValue(): + t.Fatalf("error") + case expect.GetPorts().GetValue() != actual.GetPorts().GetValue(): + t.Fatalf("error") + case expect.GetBusiness().GetValue() != actual.GetBusiness().GetValue(): + t.Fatalf("error") + case expect.GetDepartment().GetValue() != actual.GetDepartment().GetValue(): + t.Fatalf("error") + case expect.GetCmdbMod1().GetValue() != actual.GetCmdbMod1().GetValue(): + t.Fatalf("error") + case expect.GetCmdbMod2().GetValue() != actual.GetCmdbMod2().GetValue(): + t.Fatalf("error") + case expect.GetCmdbMod3().GetValue() != actual.GetCmdbMod3().GetValue(): + t.Fatalf("error") + case expect.GetComment().GetValue() != actual.GetComment().GetValue(): + t.Fatalf("error") + case expect.GetOwners().GetValue() != actual.GetOwners().GetValue(): + t.Fatalf("error") + default: + break + } + + for key, value := range expect.GetMetadata() { + actualValue := actual.GetMetadata()[key] + if actualValue != value { + t.Fatalf("error") + } + } +} + +// 创建限流规则 +func createCommonRateLimit(t *testing.T, service *api.Service, index int) (*api.Rule, *api.Rule) { + // 先不考虑Cluster + rateLimit := &api.Rule{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + Priority: utils.NewUInt32Value(uint32(index)), + Resource: api.Rule_QPS, + Type: api.Rule_GLOBAL, + Labels: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", index): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", index)), + }, + fmt.Sprintf("name-%d", index+1): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", index+1)), + }, + }, + Amounts: []*api.Amount{ + { + MaxAmount: utils.NewUInt32Value(uint32(10 * index)), + ValidDuration: &duration.Duration{ + Seconds: int64(index), + Nanos: int32(index), + }, + }, + }, + Action: utils.NewStringValue(fmt.Sprintf("behavior-%d", index)), + Disable: utils.NewBoolValue(false), + Report: &api.Report{ + Interval: &duration.Duration{ + Seconds: int64(index), + }, + AmountPercent: utils.NewUInt32Value(uint32(index)), + }, + ServiceToken: utils.NewStringValue(service.GetToken().GetValue()), + } + + resp := server.CreateRateLimit(defaultCtx, rateLimit) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + return rateLimit, resp.GetRateLimit() +} + +// 删除限流规则 +func deleteRateLimit(t *testing.T, rateLimit *api.Rule) { + if resp := server.DeleteRateLimit(defaultCtx, rateLimit); !respSuccess(resp) { + t.Fatalf("%s", resp.GetInfo().GetValue()) + } +} + +// 更新单个限流规则 +func updateRateLimit(t *testing.T, rateLimit *api.Rule) { + if resp := server.UpdateRateLimit(defaultCtx, rateLimit); !respSuccess(resp) { + t.Fatalf("%s", resp.GetInfo().GetValue()) + } +} + +// 彻底删除限流规则 +func cleanRateLimit(id string) { + str := `delete from ratelimit_config where id = ?` + if _, err := db.Exec(str, id); err != nil { + panic(err) + } +} + +// 彻底删除限流规则版本号 +func cleanRateLimitRevision(service, namespace string) { + str := `delete from ratelimit_revision using ratelimit_revision, service + where service_id = service.id and name = ? and namespace = ?` + if _, err := db.Exec(str, service, namespace); err != nil { + panic(err) + } +} + +// 更新限流规则内容 +func updateRateLimitContent(rateLimit *api.Rule, index int) { + rateLimit.Priority = utils.NewUInt32Value(uint32(index)) + rateLimit.Resource = api.Rule_CONCURRENCY + rateLimit.Type = api.Rule_LOCAL + rateLimit.Labels = map[string]*api.MatchString{ + fmt.Sprintf("name-%d", index): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", index)), + }, + fmt.Sprintf("name-%d", index+1): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", index+1)), + }, + } + rateLimit.Amounts = []*api.Amount{ + { + MaxAmount: utils.NewUInt32Value(uint32(index)), + ValidDuration: &duration.Duration{ + Seconds: int64(index), + }, + }, + } + rateLimit.Action = utils.NewStringValue(fmt.Sprintf("value-%d", index)) + rateLimit.Disable = utils.NewBoolValue(true) + rateLimit.Report = &api.Report{ + Interval: &duration.Duration{ + Seconds: int64(index), + }, + AmountPercent: utils.NewUInt32Value(uint32(index)), + } +} + +/* + * @brief 对比限流规则的各个属性 + */ +func checkRateLimit(t *testing.T, expect *api.Rule, actual *api.Rule) { + switch { + case expect.GetId().GetValue() != actual.GetId().GetValue(): + t.Fatal("error id") + case expect.GetService().GetValue() != actual.GetService().GetValue(): + t.Fatal("error service") + case expect.GetNamespace().GetValue() != actual.GetNamespace().GetValue(): + t.Fatal("error namespace") + case expect.GetPriority().GetValue() != actual.GetPriority().GetValue(): + t.Fatal("error priority") + case expect.GetResource() != actual.GetResource(): + t.Fatal("error resource") + case expect.GetType() != actual.GetType(): + t.Fatal("error type") + case expect.GetDisable().GetValue() != actual.GetDisable().GetValue(): + t.Fatal("error disable") + case expect.GetAction().GetValue() != actual.GetAction().GetValue(): + t.Fatal("error action") + default: + break + } + + expectSubset, err := json.Marshal(expect.GetSubset()) + if err != nil { + panic(err) + } + actualSubset, err := json.Marshal(actual.GetSubset()) + if err != nil { + panic(err) + } + if string(expectSubset) != string(actualSubset) { + t.Fatal("error subset") + } + + expectLabels, err := json.Marshal(expect.GetLabels()) + if err != nil { + panic(err) + } + actualLabels, err := json.Marshal(actual.GetLabels()) + if err != nil { + panic(err) + } + if string(expectLabels) != string(actualLabels) { + t.Fatal("error labels") + } + + expectAmounts, err := json.Marshal(expect.GetAmounts()) + if err != nil { + panic(err) + } + actualAmounts, err := json.Marshal(actual.GetAmounts()) + if err != nil { + panic(err) + } + if string(expectAmounts) != string(actualAmounts) { + t.Fatal("error amounts") + } + + expectReport, err := json.Marshal(expect.GetReport()) + if err != nil { + panic(err) + } + actualReport, err := json.Marshal(actual.GetReport()) + if err != nil { + panic(err) + } + if string(expectReport) != string(actualReport) { + t.Fatal("error report") + } + t.Log("check success") +} + +// 增加熔断规则 +func createCommonCircuitBreaker(t *testing.T, id int) (*api.CircuitBreaker, *api.CircuitBreaker) { + circuitBreaker := &api.CircuitBreaker{ + Name: utils.NewStringValue(fmt.Sprintf("name-test-%d", id)), + Namespace: utils.NewStringValue(naming.DefaultNamespace), + Owners: utils.NewStringValue("owner-test"), + Comment: utils.NewStringValue("comment-test"), + Department: utils.NewStringValue("department-test"), + Business: utils.NewStringValue("business-test"), + } + ruleNum := 1 + // 填充source规则 + sources := make([]*api.SourceMatcher, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + source := &api.SourceMatcher{ + Service: utils.NewStringValue(fmt.Sprintf("service-test-%d", i)), + Namespace: utils.NewStringValue(fmt.Sprintf("namespace-test-%d", i)), + Labels: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", i): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i)), + }, + fmt.Sprintf("name-%d", i+1): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i+1)), + }, + }, + } + sources = append(sources, source) + } + + // 填充destination规则 + destinations := make([]*api.DestinationSet, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + destination := &api.DestinationSet{ + Service: utils.NewStringValue(fmt.Sprintf("service-test-%d", i)), + Namespace: utils.NewStringValue(fmt.Sprintf("namespace-test-%d", i)), + Metadata: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", i): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i)), + }, + fmt.Sprintf("name-%d", i+1): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i+1)), + }, + }, + Resource: 0, + Type: 0, + Scope: 0, + MetricWindow: &duration.Duration{ + Seconds: int64(i), + }, + MetricPrecision: utils.NewUInt32Value(uint32(i)), + UpdateInterval: &duration.Duration{ + Seconds: int64(i), + }, + Recover: &api.RecoverConfig{}, + Policy: &api.CbPolicy{}, + } + destinations = append(destinations, destination) + } + + // 填充inbound规则 + inbounds := make([]*api.CbRule, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + inbound := &api.CbRule{ + Sources: sources, + Destinations: destinations, + } + inbounds = append(inbounds, inbound) + } + // 填充outbound规则 + outbounds := make([]*api.CbRule, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + outbound := &api.CbRule{ + Sources: sources, + Destinations: destinations, + } + outbounds = append(outbounds, outbound) + } + circuitBreaker.Inbounds = inbounds + circuitBreaker.Outbounds = outbounds + + resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + return circuitBreaker, resp.GetCircuitBreaker() +} + +// 增加熔断规则版本 +func createCommonCircuitBreakerVersion(t *testing.T, cb *api.CircuitBreaker, index int) ( + *api.CircuitBreaker, *api.CircuitBreaker) { + cbVersion := &api.CircuitBreaker{ + Id: cb.GetId(), + Name: cb.GetName(), + Namespace: cb.GetNamespace(), + Version: utils.NewStringValue(fmt.Sprintf("test-version-%d", index)), + Inbounds: cb.GetInbounds(), + Outbounds: cb.GetOutbounds(), + Token: cb.GetToken(), + } + + resp := server.CreateCircuitBreakerVersion(defaultCtx, cbVersion) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + return cbVersion, resp.GetCircuitBreaker() +} + +// 删除熔断规则 +func deleteCircuitBreaker(t *testing.T, circuitBreaker *api.CircuitBreaker) { + if resp := server.DeleteCircuitBreaker(defaultCtx, circuitBreaker); !respSuccess(resp) { + t.Fatalf("%s", resp.GetInfo().GetValue()) + } +} + +// 更新熔断规则内容 +func updateCircuitBreaker(t *testing.T, circuitBreaker *api.CircuitBreaker) { + if resp := server.UpdateCircuitBreaker(defaultCtx, circuitBreaker); !respSuccess(resp) { + t.Fatalf("%s", resp.GetInfo().GetValue()) + } +} + +// 发布熔断规则 +func releaseCircuitBreaker(t *testing.T, cb *api.CircuitBreaker, service *api.Service) { + release := &api.ConfigRelease{ + Service: service, + CircuitBreaker: cb, + } + + resp := server.ReleaseCircuitBreaker(defaultCtx, release) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } +} + +// 解绑熔断规则 +func unBindCircuitBreaker(t *testing.T, cb *api.CircuitBreaker, service *api.Service) { + unbind := &api.ConfigRelease{ + Service: service, + CircuitBreaker: cb, + } + + resp := server.UnBindCircuitBreaker(defaultCtx, unbind) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } +} + +// 对比熔断规则的各个属性 +func checkCircuitBreaker(t *testing.T, expect, expectMaster *api.CircuitBreaker, actual *api.CircuitBreaker) { + switch { + case expectMaster.GetId().GetValue() != actual.GetId().GetValue(): + t.Fatal("error id") + case expect.GetVersion().GetValue() != actual.GetVersion().GetValue(): + t.Fatal("error version") + case expectMaster.GetName().GetValue() != actual.GetName().GetValue(): + t.Fatal("error name") + case expectMaster.GetNamespace().GetValue() != actual.GetNamespace().GetValue(): + t.Fatal("error namespace") + case expectMaster.GetOwners().GetValue() != actual.GetOwners().GetValue(): + t.Fatal("error owners") + case expectMaster.GetComment().GetValue() != actual.GetComment().GetValue(): + t.Fatal("error comment") + case expectMaster.GetBusiness().GetValue() != actual.GetBusiness().GetValue(): + t.Fatal("error business") + case expectMaster.GetDepartment().GetValue() != actual.GetDepartment().GetValue(): + t.Fatal("error department") + default: + break + } + + expectInbounds, err := json.Marshal(expect.GetInbounds()) + if err != nil { + panic(err) + } + inbounds, err := json.Marshal(actual.GetInbounds()) + if err != nil { + panic(err) + } + if string(expectInbounds) != string(inbounds) { + t.Fatal("error inbounds") + } + + expectOutbounds, err := json.Marshal(expect.GetOutbounds()) + if err != nil { + panic(err) + } + outbounds, err := json.Marshal(actual.GetOutbounds()) + if err != nil { + panic(err) + } + if string(expectOutbounds) != string(outbounds) { + t.Fatal("error inbounds") + } + t.Log("check success") +} + +// 彻底删除熔断规则 +func cleanCircuitBreaker(id, version string) { + log.Infof("clean circuit breaker, id: %s, version: %s", id, version) + str := `delete from circuitbreaker_rule where id = ? and version = ?` + if _, err := db.Exec(str, id, version); err != nil { + panic(err) + } +} + +// 彻底删除熔断规则发布记录 +func cleanCircuitBreakerRelation(name, namespace, ruleID, ruleVersion string) { + str := `delete from circuitbreaker_rule_relation using circuitbreaker_rule_relation, service where + service_id = service.id and name = ? and namespace = ? and rule_id = ? and rule_version = ?` + if _, err := db.Exec(str, name, namespace, ruleID, ruleVersion); err != nil { + panic(err) + } +} + +// 创建一个网格规则 +func createMeshResource(typeUrl, meshID, meshToken, rule string) (*api.MeshResource, *api.Response) { + resource := &api.MeshResource{ + MeshId: utils.NewStringValue(meshID), + MeshToken: utils.NewStringValue(meshToken), + TypeUrl: utils.NewStringValue(typeUrl), + Body: utils.NewStringValue(rule), + } + reqResource := &api.MeshResource{ + MeshId: utils.NewStringValue(meshID), + MeshToken: utils.NewStringValue(meshToken), + TypeUrl: utils.NewStringValue(typeUrl), + Body: utils.NewStringValue(rule), + } + return reqResource, server.CreateMeshResource(defaultCtx, resource) +} + +// 创建一个网格 +func createMesh(req *api.Mesh, withSystemToken bool) *api.Response { + ctx := defaultCtx + if withSystemToken { + ctx = context.Background() + ctx = context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + } + return server.CreateMesh(ctx, req) +} + +func checkReqMesh(t *testing.T, expect *api.Mesh, actual *api.Mesh) { + switch { + case actual.GetName().GetValue() != expect.GetName().GetValue(): + t.Fatalf("mesh name not match") + case actual.GetBusiness().GetValue() != expect.GetBusiness().GetValue(): + t.Fatalf("mesh business not match") + case actual.GetDepartment().GetValue() != expect.GetDepartment().GetValue(): + t.Fatalf("mesh department not match") + case actual.GetOwners().GetValue() != expect.GetOwners().GetValue(): + t.Fatalf("mesh owners not match") + case actual.GetManaged().GetValue() != expect.GetManaged().GetValue(): + t.Fatalf("mesh managed not match") + case actual.GetIstioVersion().GetValue() != expect.GetIstioVersion().GetValue(): + t.Fatalf("mesh istio version not match") + case actual.GetComment().GetValue() != expect.GetComment().GetValue(): + t.Fatalf("mesh comment not match") + } +} + +func checkReqMeshComplete(t *testing.T, expect *api.Mesh, actual *api.Mesh) { + checkReqMesh(t, expect, actual) + switch { + case actual.GetId().GetValue() != expect.GetId().GetValue(): + t.Fatalf("mesh id not match") + case actual.GetRevision().GetValue() != expect.GetRevision().GetValue(): + t.Fatalf("mesh revision not match") + } +} + +// 比较两个网格规则是否一致 +func checkReqMeshResource(t *testing.T, expect *api.MeshResource, actual *api.MeshResource) { + switch { + case actual.GetName().GetValue() != expect.GetName().GetValue(): + t.Fatalf("mesh resource name not match") + case actual.GetTypeUrl().GetValue() != expect.GetTypeUrl().GetValue(): + t.Fatalf("mesh resource typeUrl not match") + case actual.GetMeshNamespace().GetValue() != expect.GetMeshNamespace().GetValue(): + t.Fatalf("mesh resource mesh namespace not match") + case actual.GetBody().GetValue() != expect.GetBody().GetValue(): + t.Fatalf("mesh resource body not match") + case actual.GetId().GetValue() == "": + t.Fatalf("mesh resource id empty") + default: + break + } +} + +// 比较从cache中获取的规则是否符合预期 +func checkCacheMeshResource(t *testing.T, expect *api.MeshResource, actual *api.MeshResource) { + switch { + case expect.GetName().GetValue() != actual.GetName().GetValue(): + t.Fatalf("mesh resource name not match") + case expect.GetTypeUrl().GetValue() != actual.GetTypeUrl().GetValue(): + t.Fatalf("mesh resource typeUrl not match") + case expect.GetRevision().GetValue() != actual.GetRevision().GetValue(): + t.Fatalf("mesh resource revision not match") + case expect.GetBody().GetValue() != actual.GetBody().GetValue(): + t.Fatalf("mesh resource body not match") + case expect.GetMeshId().GetValue() != actual.GetMeshId().GetValue(): + t.Fatalf("mesh id not match") + default: + break + } +} + +// 比较利用控制台接口获取的规则是否符合预期 +//func checkHttpMeshResource(t *testing.T, expect *api.MeshResource, actual *api.MeshResource) { +// switch { +// case actual.GetId().GetValue() != expect.GetId().GetValue(): +// t.Fatalf("mesh resource id not match") +// case actual.GetNamespace().GetValue() != expect.GetNamespace().GetValue(): +// t.Fatalf("mesh resource namespace not match") +// case actual.GetName().GetValue() != expect.GetName().GetValue(): +// t.Fatalf("mesh resource name not match") +// case actual.GetTypeUrl().GetValue() != expect.GetTypeUrl().GetValue(): +// t.Fatalf("mesh resource typeUrl not match") +// case actual.GetBusiness().GetValue() != expect.GetBusiness().GetValue(): +// t.Fatalf("mesh resource business not match") +// case actual.GetComment().GetValue() != expect.GetComment().GetValue(): +// t.Fatalf("mesh resource comment not match") +// case actual.GetDepartment().GetValue() != expect.GetDepartment().GetValue(): +// t.Fatalf("mesh resource department not match") +// case actual.GetBody().GetValue() != expect.GetBody().GetValue(): +// t.Fatalf("mesh resource body not match") +// case actual.GetOwners().GetValue() != expect.GetOwners().GetValue(): +// t.Fatalf("mesh resource owners not match") +// default: +// break +// } +//} + +// 获取一个更新规则请求 +//func updateMeshResource(baseResource *api.MeshResource) *api.MeshResource { +// return &api.MeshResource{ +// Namespace: utils.NewStringValue(baseResource.GetNamespace().GetValue()), +// Name: utils.NewStringValue(baseResource.GetName().GetValue()), +// Token: utils.NewStringValue(baseResource.GetToken().GetValue()), +// TypeUrl: utils.NewStringValue(baseResource.GetTypeUrl().GetValue()), +// Business: utils.NewStringValue(baseResource.GetBusiness().GetValue()), +// Id: utils.NewStringValue(baseResource.GetId().GetValue()), +// } +//} + +//// 清除网格规则 +//func cleanMeshResource(namespace, name string) { +// str := `delete from mesh_resource where name = ? and namespace = ?` +// if _, err := db.Exec(str, name, namespace); err != nil { +// panic(err) +// } +//} +// +//// 清除网格规则版本号 +//func cleanMeshResourceRevision(namespace, business, typeUrl string) { +// str := `delete from mesh_revision where namespace = ? and business = ? and type_url = ?` +// if _, err := db.Exec(str, namespace, business, typeUrl); err != nil { +// panic(err) +// } +//} + +func cleanMeshResourceByMeshID(meshID string) { + log.Infof("cleanMeshResourceByMeshID: %s", meshID) + str := `delete from mesh_resource where mesh_id = ?` + if _, err := db.Exec(str, meshID); err != nil { + panic(err) + } + str = `delete from mesh_resource_revision where mesh_id = ?` + if _, err := db.Exec(str, meshID); err != nil { + panic(err) + } +} + +// 清除网格 +func cleanMesh(id string) { + str := `delete from mesh where id = ?` + if _, err := db.Exec(str, id); err != nil { + panic(err) + } +} + +func cleanMeshService(meshID string) { + str := `delete from mesh_service where mesh_id = ?` + if _, err := db.Exec(str, meshID); err != nil { + panic(err) + } + str = `delete from mesh_service_revision where mesh_id = ?` + if _, err := db.Exec(str, meshID); err != nil { + panic(err) + } +} + +// 删除一个网格 +func deleteMesh(mesh *api.Mesh) *api.Response { + dMesh := &api.Mesh{ + Id: utils.NewStringValue(mesh.GetId().GetValue()), + Token: utils.NewStringValue(mesh.GetToken().GetValue()), + } + return server.DeleteMesh(defaultCtx, dMesh) +} + +// 更新一个网格 +func updateMesh(mesh *api.Mesh) *api.Response { + return server.UpdateMesh(defaultCtx, mesh) +} + +// 删除一个网格规则 +func deleteMeshResource(name, namespace, token string) *api.Response { + resource := &api.MeshResource{ + Name: utils.NewStringValue(name), + MeshToken: utils.NewStringValue(token), + } + return server.DeleteMeshResource(defaultCtx, resource) +} + +// 创建flux限流规则 +func createCommonFluxRateLimit(t *testing.T, service *api.Service, index int) (*api.FluxConsoleRateLimitRule, + *api.FluxConsoleRateLimitRule) { + rateLimit := &api.FluxConsoleRateLimitRule{ + Name: utils.NewStringValue(fmt.Sprintf("test-%d", index)), + Description: utils.NewStringValue("test"), + CalleeServiceName: service.GetName(), + CalleeServiceEnv: service.GetNamespace(), + CallerServiceBusiness: utils.NewStringValue(fmt.Sprintf("business-%d", index)), + SetKey: utils.NewStringValue(fmt.Sprintf("set-key-%d", index)), + SetAlertQps: utils.NewStringValue(fmt.Sprintf("%d", index*10)), + SetWarningQps: utils.NewStringValue(fmt.Sprintf("%d", index*8)), + SetRemark: utils.NewStringValue(fmt.Sprintf("set-remark-%d", index)), + DefaultKey: utils.NewStringValue(fmt.Sprintf("default-key-%d", index)), + DefaultAlertQps: utils.NewStringValue(fmt.Sprintf("%d", index*2)), + DefaultWarningQps: utils.NewStringValue(fmt.Sprintf("%d", index)), + DefaultRemark: utils.NewStringValue(fmt.Sprintf("default-remark-%d", index)), + Creator: utils.NewStringValue("test"), + Updater: utils.NewStringValue("test"), + Status: utils.NewUInt32Value(1), + Type: utils.NewUInt32Value(2), + ServiceToken: utils.NewStringValue(service.GetToken().GetValue()), + } + + resp := server.CreateFluxRateLimit(defaultCtx, rateLimit) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + return rateLimit, resp.GetFluxConsoleRateLimitRule() +} + +// 删除限流规则 +func deleteFluxRateLimit(t *testing.T, rateLimit *api.FluxConsoleRateLimitRule) { + if resp := server.DeleteFluxRateLimit(defaultCtx, rateLimit); !respSuccess(resp) { + t.Fatalf("%s", resp.GetInfo().GetValue()) + } +} + +// 更新单个限流规则 +func updateFluxRateLimit(t *testing.T, rateLimit *api.FluxConsoleRateLimitRule) { + if resp := server.UpdateFluxRateLimit(defaultCtx, rateLimit); !respSuccess(resp) { + t.Fatalf("%s", resp.GetInfo().GetValue()) + } +} + +// 彻底删除限流规则 +func cleanFluxRateLimit(id string) { + str := `delete from ratelimit_flux_rule_config where id = ?` + if _, err := db.Exec(str, id); err != nil { + panic(err) + } +} + +// 彻底删除限流规则版本号 +func cleanFluxRateLimitRevision(service, namespace string) { + str := `delete from ratelimit_flux_rule_revision using ratelimit_flux_rule_revision, service + where service_id = service.id and name = ? and namespace = ?` + if _, err := db.Exec(str, service, namespace); err != nil { + panic(err) + } +} + +// 更新限流规则内容 +func updateFluxRateLimitContent(rateLimit *api.FluxConsoleRateLimitRule, index int) { + rateLimit.SetAlertQps = utils.NewStringValue(fmt.Sprintf("%d", index*10)) + rateLimit.SetWarningQps = utils.NewStringValue(fmt.Sprintf("%d", index*5)) + rateLimit.SetKey = utils.NewStringValue(fmt.Sprintf("set-key-%d", index)) + rateLimit.SetRemark = utils.NewStringValue(fmt.Sprintf("remark-%d", index)) + rateLimit.DefaultAlertQps = utils.NewStringValue(fmt.Sprintf("%d", index*2)) + rateLimit.DefaultWarningQps = utils.NewStringValue(fmt.Sprintf("%d", index)) + rateLimit.DefaultKey = utils.NewStringValue(fmt.Sprintf("default-key-%d", index)) + rateLimit.DefaultRemark = utils.NewStringValue(fmt.Sprintf("default-remark-%d", index)) +} + +/* + * @brief 对比限流规则的各个属性 + */ +func checkFluxRateLimit(t *testing.T, expect *api.FluxConsoleRateLimitRule, actual *api.FluxConsoleRateLimitRule) { + switch { + case (expect.GetId().GetValue()) != "" && (expect.GetId().GetValue() != actual.GetId().GetValue()): + t.Fatal("invalid id") + case expect.GetName().GetValue() != actual.GetName().GetValue(): + t.Fatal("error name") + case expect.GetDescription().GetValue() != actual.GetDescription().GetValue(): + t.Fatal("error description") + case expect.GetStatus().GetValue() != actual.GetStatus().GetValue(): + t.Fatal("invalid status") + case expect.GetCalleeServiceName().GetValue() != actual.GetCalleeServiceName().GetValue(): + t.Fatal("invalid CalleeServiceName") + case expect.GetCalleeServiceEnv().GetValue() != actual.GetCalleeServiceEnv().GetValue(): + t.Fatal("invalid CalleeServiceEnv") + case expect.GetCallerServiceBusiness().GetValue() != actual.GetCallerServiceBusiness().GetValue(): + t.Fatal("invalid GetCallerServiceBusiness") + case expect.GetSetKey().GetValue() != actual.GetSetKey().GetValue(): + t.Fatal("error set key") + case expect.GetSetAlertQps().GetValue() != actual.GetSetAlertQps().GetValue(): + t.Fatal("error set alert qps") + case expect.GetSetWarningQps().GetValue() != actual.GetSetWarningQps().GetValue(): + t.Fatal("error set warning qps") + case expect.GetSetRemark().GetValue() != actual.GetSetRemark().GetValue(): + t.Fatal("error set remark") + case expect.GetDefaultKey().GetValue() != actual.GetDefaultKey().GetValue(): + t.Fatal("error default key") + case expect.GetDefaultAlertQps().GetValue() != actual.GetDefaultAlertQps().GetValue(): + t.Fatal("error default alert qps") + case expect.GetDefaultWarningQps().GetValue() != actual.GetDefaultWarningQps().GetValue(): + t.Fatal("error default warning qps") + case expect.GetDefaultRemark().GetValue() != actual.GetDefaultRemark().GetValue(): + t.Fatal("error default remark") + case expect.GetType().GetValue() != actual.GetType().GetValue(): + t.Fatal("error type") + case expect.GetStatus().GetValue() != actual.GetStatus().GetValue(): + t.Fatal("error status") + default: + break + } + t.Log("check success") +} + +// 时间转化为可读字符串 +func time2String(t time.Time) string { + return t.Format("2006-01-02 15:04:05") +} + +// 获取指定长度str +func genSpecialStr(n int) string { + str := "" + for i := 0; i < n; i++ { + str += "a" + } + return str +} + +// 解析字符串sid为modID和cmdID +func parseStr2Sid(sid string) (uint32, uint32) { + items := strings.Split(sid, ":") + if len(items) != 2 { + return 0, 0 + } + + mod, _ := strconv.ParseUint(items[0], 10, 32) + cmd, _ := strconv.ParseUint(items[1], 10, 32) + return uint32(mod), uint32(cmd) +} + +// 初始化函数 +func init() { + if err := initialize(); err != nil { + fmt.Printf("init err: %s", err.Error()) + panic(err) + } +} diff --git a/naming/test/namespace_test.go b/naming/test/namespace_test.go new file mode 100644 index 000000000..49cd4032c --- /dev/null +++ b/naming/test/namespace_test.go @@ -0,0 +1,237 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "testing" + "time" +) + +// create +func createCommonNamespace(t *testing.T, id int) (*api.Namespace, *api.Namespace) { + req := &api.Namespace{ + Name: utils.NewStringValue(fmt.Sprintf("namespace-%d", id)), + Comment: utils.NewStringValue(fmt.Sprintf("comment-%d", id)), + Owners: utils.NewStringValue(fmt.Sprintf("owner-%d", id)), + } + cleanNamespace(req.GetName().GetValue()) + + resp := server.CreateNamespace(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + if resp.GetNamespace().GetToken().GetValue() == "" || + req.GetName().GetValue() != resp.GetNamespace().GetName().GetValue() { + t.Fatalf("erros: %+v", resp) + } + + return req, resp.GetNamespace() +} + +// remove +func removeCommonNamespaces(t *testing.T, req []*api.Namespace) { + resp := server.DeleteNamespaces(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } +} + +// update +func updateCommonNamespaces(t *testing.T, req []*api.Namespace) { + resp := server.UpdateNamespaces(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } +} + +// 测试新建命名空间 +func TestCreateNamespace(t *testing.T) { + t.Run("正常创建命名空间", func(t *testing.T) { + _, resp := createCommonNamespace(t, 100) + defer cleanNamespace(resp.GetName().GetValue()) + t.Logf("pass") + }) + + t.Run("新建命名空间,删除,再创建一个同样的,可以成功", func(t *testing.T) { + req, resp := createCommonNamespace(t, 10) + defer cleanNamespace(req.GetName().GetValue()) + + // remove + removeCommonNamespaces(t, []*api.Namespace{resp}) + apiResp := server.CreateNamespace(defaultCtx, req) + if !respSuccess(apiResp) { + t.Fatalf("error: %s", apiResp.GetInfo().GetValue()) + } + + t.Logf("pass") + }) + + t.Run("新建命名空间和服务,删除命名空间和服务,再创建命名空间", func(t *testing.T) { + _, namespaceResp := createCommonNamespace(t, 10) + defer cleanNamespace(namespaceResp.GetName().GetValue()) + + _, serviceResp := createCommonService(t, 100) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + removeCommonServices(t, []*api.Service{serviceResp}) + removeCommonNamespaces(t, []*api.Namespace{namespaceResp}) + + _, namespaceResp = createCommonNamespace(t, 10) + defer cleanNamespace(namespaceResp.GetName().GetValue()) + }) +} + +// 删除命名空间 +func TestRemoveNamespace(t *testing.T) { + t.Run("可以删除命名空间", func(t *testing.T) { + _, resp := createCommonNamespace(t, 99) + defer cleanNamespace(resp.GetName().GetValue()) + + removeCommonNamespaces(t, []*api.Namespace{resp}) + out := server.GetNamespaces(map[string][]string{"name": {resp.GetName().GetValue()}}) + if !respSuccess(out) { + t.Fatalf("error: %s", out.GetInfo().GetValue()) + } + if len(out.GetNamespaces()) != 0 { + t.Fatalf("error: %d", len(out.GetNamespaces())) + } + }) + + t.Run("批量删除命名空间", func(t *testing.T) { + var reqs []*api.Namespace + for i := 0; i < 20; i++ { + _, resp := createCommonNamespace(t, i) + defer cleanNamespace(resp.GetName().GetValue()) + reqs = append(reqs, resp) + } + + time.Sleep(updateCacheInterval) + removeCommonNamespaces(t, reqs) + t.Logf("pass") + }) + + t.Run("新建命名空间和服务,直接删除名空间,因为有服务,删除会失败", func(t *testing.T) { + _, namespaceResp := createCommonNamespace(t, 100) + defer cleanNamespace(namespaceResp.GetName().GetValue()) + + serviceReq := &api.Service{ + Name: utils.NewStringValue("abc"), + Namespace: namespaceResp.GetName(), + Owners: utils.NewStringValue("123"), + } + if resp := server.CreateService(defaultCtx, serviceReq); !respSuccess(resp) { + t.Fatalf("errror: %s", resp.GetInfo().GetValue()) + } + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + resp := server.DeleteNamespace(defaultCtx, namespaceResp) + if resp.GetCode().GetValue() != api.NamespaceExistedServices { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Logf("%s", resp.GetInfo().GetValue()) + }) +} + +// 更新命名空间 +func TestUpdateNamespace(t *testing.T) { + t.Run("正常更新命名空间", func(t *testing.T) { + req, resp := createCommonNamespace(t, 200) + defer cleanNamespace(resp.GetName().GetValue()) + + time.Sleep(updateCacheInterval) + + req.Token = resp.Token + req.Comment = utils.NewStringValue("new-comment") + + updateCommonNamespaces(t, []*api.Namespace{req}) + t.Logf("pass") + }) +} + +// 获取命名空间列表 +func TestGetNamespaces(t *testing.T) { + t.Run("正常获取命名空间,可以正常获取", func(t *testing.T) { + total := 50 + for i := 0; i < total; i++ { + req, _ := createCommonNamespace(t, i+200) + defer cleanNamespace(req.GetName().GetValue()) + } + + resp := server.GetNamespaces(map[string][]string{}) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() == uint32(total) { + t.Fatalf("error: %d", resp.GetSize().GetValue()) + } + }) + + t.Run("分页参数可以正常过滤", func(t *testing.T) { + total := 20 + for i := 0; i < total; i++ { + req, _ := createCommonNamespace(t, i+200) + defer cleanNamespace(req.GetName().GetValue()) + } + + query := map[string][]string{ + "offset": {"10"}, + "limit": {"10"}, + } + resp := server.GetNamespaces(query) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != 10 { + t.Fatalf("error: %d", resp.GetSize().GetValue()) + } + }) +} + +// 测试命名空间的token +func TestNamespaceToken(t *testing.T) { + t.Run("可以正常获取到namespaceToken", func(t *testing.T) { + _, namespaceResp := createCommonNamespace(t, 1) + defer cleanNamespace(namespaceResp.GetName().GetValue()) + + resp := server.GetNamespaceToken(defaultCtx, namespaceResp) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetNamespace().GetToken().GetValue() != namespaceResp.GetToken().GetValue() { + t.Fatalf("error") + } + }) + t.Run("可以正常更新namespace的token", func(t *testing.T) { + _, namespaceResp := createCommonNamespace(t, 2) + defer cleanNamespace(namespaceResp.GetName().GetValue()) + + resp := server.UpdateNamespaceToken(defaultCtx, namespaceResp) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetNamespace().GetToken().GetValue() == namespaceResp.GetToken().GetValue() { + t.Fatalf("error") + } + t.Logf("%s %s", resp.GetNamespace().GetToken().GetValue(), + namespaceResp.GetToken().GetValue()) + }) +} diff --git a/naming/test/platform_test.go b/naming/test/platform_test.go new file mode 100644 index 000000000..e5ccd010d --- /dev/null +++ b/naming/test/platform_test.go @@ -0,0 +1,457 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "context" + "errors" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "sync" + "testing" +) + +/** + * @brief 创建平台 + */ +func createCommonPlatform(t *testing.T, id int) (*api.Platform, *api.Platform) { + req := &api.Platform{ + Id: utils.NewStringValue(fmt.Sprintf("id-%d", id)), + Name: utils.NewStringValue("name"), + Domain: utils.NewStringValue(fmt.Sprintf("domain-%d", id)), + Qps: utils.NewUInt32Value(1), + Owner: utils.NewStringValue(fmt.Sprintf("owner-%d", id)), + Department: utils.NewStringValue(fmt.Sprintf("department-%d", id)), + Comment: utils.NewStringValue(fmt.Sprintf("comment-%d", id)), + } + cleanPlatform(req.GetId().GetValue()) + + resp := server.CreatePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetPlatform().GetToken().GetValue() == "" { + t.Fatalf("error: %+v", resp) + } + if _, err := comparePlatform(req, resp.GetPlatform()); err != nil { + t.Fatalf("error: %s", err.Error()) + } + + return req, resp.GetPlatform() +} + +/** + * @brief 删除平台 + */ +func removeCommonPlatform(t *testing.T, req *api.Platform) { + resp := server.DeletePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } +} + +/** + * @brief 修改平台 + */ +func updateCommonPlatform(t *testing.T, req *api.Platform) { + resp := server.UpdatePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } +} + +/** + * @brief 修改平台内容 + */ +func updatePlatformContent(req *api.Platform) { + req.Name = utils.NewStringValue("update-name") + req.Domain = utils.NewStringValue("update-domain") + req.Qps = utils.NewUInt32Value(req.GetQps().GetValue() + 1) + req.Owner = utils.NewStringValue("update-owner") + req.Department = utils.NewStringValue("update-department") + req.Comment = utils.NewStringValue("update-comment") +} + +/** + * @brief 从数据库彻底删除平台 + */ +func cleanPlatform(id string) { + if id == "" { + panic("id is empty") + } + + log.Infof("clean platform: %s", id) + str := `delete from platform where id = ?` + if _, err := db.Exec(str, id); err != nil { + panic(err) + } +} + +func comparePlatform(correctItem *api.Platform, item *api.Platform) (bool, error) { + switch { + case correctItem.GetId().GetValue() != item.GetId().GetValue(): + return false, errors.New("error id") + case correctItem.GetName().GetValue() != item.GetName().GetValue(): + return false, errors.New("error name") + case correctItem.GetDomain().GetValue() != item.GetDomain().GetValue(): + return false, errors.New("error domain") + case correctItem.GetQps().GetValue() != item.GetQps().GetValue(): + return false, errors.New("error qps") + case correctItem.GetOwner().GetValue() != item.GetOwner().GetValue(): + return false, errors.New("error owner") + case correctItem.GetDepartment().GetValue() != item.GetDepartment().GetValue(): + return false, errors.New("error department") + case correctItem.GetComment().GetValue() != item.GetComment().GetValue(): + return false, errors.New("error comment") + } + return true, nil +} + +/** + * @brief 测试新建平台 + */ +func TestCreatePlatform(t *testing.T) { + t.Run("正常创建平台,返回成功", func(t *testing.T) { + _, resp := createCommonPlatform(t, 1) + defer cleanPlatform(resp.GetId().GetValue()) + t.Log("pass") + }) + + t.Run("创建平台,删除后,再创建同名平台,返回成功", func(t *testing.T) { + req, resp := createCommonPlatform(t, 1) + defer cleanPlatform(resp.GetId().GetValue()) + + // 删除平台 + removeCommonPlatform(t, resp) + apiResp := server.CreatePlatform(defaultCtx, req) + if !respSuccess(apiResp) { + t.Fatalf("error: %s", apiResp.GetInfo().GetValue()) + } else { + t.Log("pass") + } + }) + + t.Run("重复创建平台,返回失败", func(t *testing.T) { + req, _ := createCommonPlatform(t, 1) + defer cleanPlatform(req.GetId().GetValue()) + + resp := server.CreatePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建平台时没有传递id,返回失败", func(t *testing.T) { + req := &api.Platform{} + + resp := server.CreatePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建平台时没有传递负责人, 返回失败", func(t *testing.T) { + req := &api.Platform{ + Id: utils.NewStringValue(fmt.Sprintf("id-%d", 1)), + } + + resp := server.CreatePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发创建平台,返回成功", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + _, resp := createCommonPlatform(t, index) + defer cleanPlatform(resp.GetId().GetValue()) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/** + * @brief 测试删除平台 + */ +func TestDeletePlatform(t *testing.T) { + getPlatforms := func(t *testing.T, id string, expectNum uint32) { + filter := map[string]string{ + "id": id, + } + resp := server.GetPlatforms(filter) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetAmount().GetValue() != expectNum { + t.Fatalf("error, actual num is %d, expect num is %d", resp.GetAmount().GetValue(), expectNum) + } + } + + t.Run("删除存在的平台,返回成功", func(t *testing.T) { + _, resp := createCommonPlatform(t, 1) + defer cleanPlatform(resp.GetId().GetValue()) + removeCommonPlatform(t, resp) + getPlatforms(t, resp.GetId().GetValue(), 0) + t.Log("pass") + }) + + t.Run("删除不存在的平台,返回成功", func(t *testing.T) { + _, resp := createCommonPlatform(t, 1) + defer cleanPlatform(resp.GetId().GetValue()) + + removeCommonPlatform(t, resp) + + apiResp := server.DeletePlatform(defaultCtx, resp) + if respSuccess(apiResp) { + t.Log("pass") + } else { + t.Fatalf("error: %s", apiResp.GetInfo().GetValue()) + } + + getPlatforms(t, resp.GetId().GetValue(), 0) + }) + + t.Run("使用系统token删除,返回成功", func(t *testing.T) { + req, _ := createCommonPlatform(t, 1) + defer cleanPlatform(req.GetId().GetValue()) + + ctx := context.WithValue(defaultCtx, utils.StringContext("polaris-token"), "polaris@12345678") + + apiReq := &api.Platform{ + Id: req.GetId(), + } + + resp := server.DeletePlatform(ctx, apiReq) + if respSuccess(resp) { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + getPlatforms(t, req.GetId().GetValue(), 0) + }) + + t.Run("删除平台时没有传递平台id,返回失败", func(t *testing.T) { + req := &api.Platform{} + + resp := server.DeletePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + + t.Run("删除平台时没有传递平台Token,返回失败", func(t *testing.T) { + req, _ := createCommonPlatform(t, 1) + defer cleanPlatform(req.GetId().GetValue()) + + apiReq := &api.Platform{ + Id: req.GetId(), + } + + resp := server.DeletePlatform(defaultCtx, apiReq) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发删除平台,返回成功", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + _, resp := createCommonPlatform(t, index) + defer cleanPlatform(resp.GetId().GetValue()) + removeCommonPlatform(t, resp) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/** + * @brief 测试更新平台 + */ +func TestUpdatePlatform(t *testing.T) { + t.Run("更新平台,返回成功", func(t *testing.T) { + req, _ := createCommonPlatform(t, 1) + defer cleanPlatform(req.GetId().GetValue()) + updatePlatformContent(req) + updateCommonPlatform(t, req) + filter := map[string]string{ + "id": req.GetId().GetValue(), + } + resp := server.GetPlatforms(filter) + if !respSuccess(resp) { + t.Fatal("error") + } + comparePlatform(req, resp.GetPlatforms()[0]) + }) + + t.Run("更新不存在的平台,返回失败", func(t *testing.T) { + req, _ := createCommonPlatform(t, 1) + cleanPlatform(req.GetId().GetValue()) + resp := server.UpdatePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("更新平台时没有传递token,返回错误", func(t *testing.T) { + req, _ := createCommonPlatform(t, 1) + defer cleanPlatform(req.GetId().GetValue()) + req.Token = utils.NewStringValue("") + + resp := server.UpdatePlatform(defaultCtx, req) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发更新平台,返回成功", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + req, resp := createCommonPlatform(t, index) + defer cleanPlatform(resp.GetId().GetValue()) + updatePlatformContent(req) + updateCommonPlatform(t, req) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/** + * @brief 测试查询平台 + */ +func TestGetPlatform(t *testing.T) { + platformNum := 10 + platformName := "name" + for i := 1; i <= platformNum; i++ { + req, _ := createCommonPlatform(t, i) + defer cleanPlatform(req.GetId().GetValue()) + } + + t.Run("查询平台,过滤条件为id", func(t *testing.T) { + filter := map[string]string{ + "id": fmt.Sprintf("id-%d", platformNum), + } + resp := server.GetPlatforms(filter) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != 1 { + t.Fatalf("expect num is 1, actual num is %d", resp.GetSize().GetValue()) + } + t.Log("pass") + }) + + t.Run("查询平台,过滤条件为name", func(t *testing.T) { + filter := map[string]string{ + "name": platformName, + } + resp := server.GetPlatforms(filter) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != uint32(platformNum) { + t.Fatalf("expect num is %d, actual num is %d", platformNum, resp.GetSize().GetValue()) + } + t.Log("pass") + }) + + t.Run("查询平台,过滤条件为name和owner", func(t *testing.T) { + filter := map[string]string{ + "name": platformName, + "owner": fmt.Sprintf("owner-%d", platformNum), + } + resp := server.GetPlatforms(filter) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != 1 { + t.Fatalf("expect num is 1, actual num is %d", resp.GetSize().GetValue()) + } + t.Log("pass") + }) + + t.Run("查询平台,过滤条件为不存在的name", func(t *testing.T) { + filter := map[string]string{ + "name": "not exist", + } + resp := server.GetPlatforms(filter) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != 0 { + t.Fatalf("expect num is 0, actual num is %d", resp.GetSize().GetValue()) + } + t.Log("pass") + }) + + t.Run("查询平台,过滤条件为domain,返回失败", func(t *testing.T) { + filter := map[string]string{ + "domain": "test", + } + resp := server.GetPlatforms(filter) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("查询平台,offset为负数,返回失败", func(t *testing.T) { + filter := map[string]string{ + "offset": "-3", + } + resp := server.GetPlatforms(filter) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) +} diff --git a/naming/test/ratelimit_config_test.go b/naming/test/ratelimit_config_test.go new file mode 100644 index 000000000..88458c6e8 --- /dev/null +++ b/naming/test/ratelimit_config_test.go @@ -0,0 +1,537 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "context" + "encoding/json" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/golang/protobuf/ptypes/duration" + "sync" + "testing" + "time" +) + +/** + * @brief 测试创建限流规则 + */ +func TestCreateRateLimit(t *testing.T) { + _, serviceResp := createCommonService(t, 0) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + defer cleanRateLimitRevision(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("正常创建限流规则", func(t *testing.T) { + _ = server.Cache().Clear() + rateLimitReq, rateLimitResp := createCommonRateLimit(t, serviceResp, 3) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + + // 等待缓存更新 + time.Sleep(updateCacheInterval) + resp := server.GetRateLimitWithCache(context.Background(), serviceResp) + checkRateLimit(t, rateLimitReq, resp.GetRateLimit().GetRules()[0]) + }) + + t.Run("创建限流规则,删除,再创建,可以正常创建", func(t *testing.T) { + _ = server.Cache().Clear() + rateLimitReq, rateLimitResp := createCommonRateLimit(t, serviceResp, 3) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + deleteRateLimit(t, rateLimitResp) + if resp := server.CreateRateLimit(defaultCtx, rateLimitReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + // 等待缓存更新 + time.Sleep(updateCacheInterval) + resp := server.GetRateLimitWithCache(context.Background(), serviceResp) + checkRateLimit(t, rateLimitReq, resp.GetRateLimit().GetRules()[0]) + cleanRateLimit(rateLimitResp.GetId().GetValue()) + }) + + t.Run("重复创建限流规则,返回成功", func(t *testing.T) { + rateLimitReq, rateLimitResp := createCommonRateLimit(t, serviceResp, 3) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + if resp := server.CreateRateLimit(defaultCtx, rateLimitReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } else { + t.Log("pass") + } + cleanRateLimit(rateLimitResp.GetId().GetValue()) + }) + + t.Run("创建限流规则时,没有传递token,返回失败", func(t *testing.T) { + rateLimit := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Labels: map[string]*api.MatchString{}, + } + if resp := server.CreateRateLimit(defaultCtx, rateLimit); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("创建限流规则时,没有传递labels,返回失败", func(t *testing.T) { + rateLimit := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + ServiceToken: serviceResp.GetToken(), + } + if resp := server.CreateRateLimit(defaultCtx, rateLimit); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + + t.Run("创建限流规则时,amounts具有相同的duration,返回失败", func(t *testing.T) { + rateLimit := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Labels: map[string]*api.MatchString{}, + Amounts: []*api.Amount{ + { + MaxAmount: utils.NewUInt32Value(1), + ValidDuration: &duration.Duration{ + Seconds: 10, + Nanos: 10, + }, + }, + { + MaxAmount: utils.NewUInt32Value(2), + ValidDuration: &duration.Duration{ + Seconds: 10, + Nanos: 10, + }, + }, + }, + ServiceToken: serviceResp.GetToken(), + } + if resp := server.CreateRateLimit(defaultCtx, rateLimit); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + + t.Run("并发创建同一服务的限流规则,可以正常创建", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + _, rateLimitResp := createCommonRateLimit(t, serviceResp, index) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + }(i) + } + wg.Wait() + t.Log("pass") + }) + + t.Run("并发创建不同服务的限流规则,可以正常创建", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + defer cleanRateLimitRevision(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, rateLimitResp := createCommonRateLimit(t, serviceResp, 3) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + }(i) + } + wg.Wait() + t.Log("pass") + }) + + t.Run("为不存在的服务创建限流规则,返回失败", func(t *testing.T) { + _, serviceResp := createCommonService(t, 2) + cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + defer cleanRateLimitRevision(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + rateLimit := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Labels: map[string]*api.MatchString{}, + ServiceToken: serviceResp.GetToken(), + } + if resp := server.CreateRateLimit(defaultCtx, rateLimit); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) +} + +/** + * @brief 测试删除限流规则 + */ +func TestDeleteRateLimit(t *testing.T) { + _, serviceResp := createCommonService(t, 0) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + defer cleanRateLimitRevision(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + getRateLimits := func(t *testing.T, service *api.Service, expectNum uint32) []*api.Rule { + filters := map[string]string{ + "service": service.GetName().GetValue(), + "namespace": service.GetNamespace().GetValue(), + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error") + } + if resp.GetAmount().GetValue() != expectNum { + t.Fatalf("error") + } + return resp.GetRateLimits() + } + + t.Run("删除存在的限流规则,可以正常删除", func(t *testing.T) { + _, rateLimitResp := createCommonRateLimit(t, serviceResp, 3) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + deleteRateLimit(t, rateLimitResp) + getRateLimits(t, serviceResp, 0) + t.Log("pass") + }) + + t.Run("删除不存在的限流规则,返回正常", func(t *testing.T) { + _, rateLimitResp := createCommonRateLimit(t, serviceResp, 3) + cleanRateLimit(rateLimitResp.GetId().GetValue()) + deleteRateLimit(t, rateLimitResp) + getRateLimits(t, serviceResp, 0) + t.Log("pass") + }) + + t.Run("删除限流规则时,没有传递token,返回失败", func(t *testing.T) { + rateLimitReq, rateLimitResp := createCommonRateLimit(t, serviceResp, 3) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + rateLimitReq.ServiceToken = utils.NewStringValue("") + if resp := server.DeleteRateLimit(defaultCtx, rateLimitReq); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatal("error") + } + }) + + t.Run("并发删除限流规则,可以正常删除", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + defer cleanRateLimitRevision(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + rateLimitReq, rateLimitResp := createCommonRateLimit(t, serviceResp, 3) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + deleteRateLimit(t, rateLimitReq) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/** + * @brief 测试更新限流规则 + */ +func TestUpdateRateLimit(t *testing.T) { + _, serviceResp := createCommonService(t, 0) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + defer cleanRateLimitRevision(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + _, rateLimitResp := createCommonRateLimit(t, serviceResp, 1) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + + updateRateLimitContent(rateLimitResp, 2) + + t.Run("更新单个限流规则,可以正常更新", func(t *testing.T) { + updateRateLimit(t, rateLimitResp) + filters := map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error") + } + checkRateLimit(t, rateLimitResp, resp.GetRateLimits()[0]) + }) + + t.Run("更新一个不存在的限流规则", func(t *testing.T) { + cleanRateLimit(rateLimitResp.GetId().GetValue()) + if resp := server.UpdateRateLimit(defaultCtx, rateLimitResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + + t.Run("更新限流规则时,没有传递token, 返回错误", func(t *testing.T) { + rateLimitResp.ServiceToken = utils.NewStringValue("") + if resp := server.UpdateRateLimit(defaultCtx, rateLimitResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + + t.Run("并发更新限流规则时,可以正常更新", func(t *testing.T) { + var wg sync.WaitGroup + for i := 1; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + _, serviceResp := createCommonService(t, index) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + defer cleanRateLimitRevision(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, rateLimitResp := createCommonRateLimit(t, serviceResp, i) + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + updateRateLimitContent(rateLimitResp, i+1) + updateRateLimit(t, rateLimitResp) + filters := map[string]string{ + "service": serviceResp.GetName().GetValue(), + "namespace": serviceResp.GetNamespace().GetValue(), + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error") + } + checkRateLimit(t, rateLimitResp, resp.GetRateLimits()[0]) + }(i) + } + wg.Wait() + t.Log("pass") + }) +} + +/* + * @brief 测试查询限流规则 + */ +func TestGetRateLimit(t *testing.T) { + serviceNum := 10 + rateLimitsNum := 30 + rateLimits := make([]*api.Rule, rateLimitsNum) + serviceName := "" + namespaceName := "" + labels := make(map[string]*api.MatchString) + labelsKey := "name-0" + for i := 0; i < serviceNum; i++ { + _, serviceResp := createCommonService(t, i) + if i == 5 { + serviceName = serviceResp.GetName().GetValue() + namespaceName = serviceResp.GetNamespace().GetValue() + } + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + defer cleanRateLimitRevision(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + for j := 0; j < rateLimitsNum/serviceNum; j++ { + _, rateLimitResp := createCommonRateLimit(t, serviceResp, j) + if j == 0 { + labels = rateLimitResp.GetLabels() + } + defer cleanRateLimit(rateLimitResp.GetId().GetValue()) + rateLimits = append(rateLimits, rateLimitResp) + } + } + + labelsValue := labels[labelsKey] + + t.Run("查询限流规则,过滤条件为service", func(t *testing.T) { + filters := map[string]string{ + "service": serviceName, + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != uint32(rateLimitsNum/serviceNum) { + t.Fatalf("expect num is %d, actual num is %d", rateLimitsNum/serviceNum, resp.GetSize().GetValue()) + } + t.Logf("pass: num is %d", resp.GetSize().GetValue()) + }) + + t.Run("查询限流规则,过滤条件为namespace", func(t *testing.T) { + filters := map[string]string{ + "namespace": namespaceName, + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != uint32(rateLimitsNum) { + t.Fatalf("expect num is %d, actual num is %d", serviceNum, resp.GetSize().GetValue()) + } + t.Logf("pass: num is %d", resp.GetSize().GetValue()) + }) + + t.Run("查询限流规则,过滤条件为不存在的namespace", func(t *testing.T) { + filters := map[string]string{ + "namespace": "Development", + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != 0 { + t.Fatalf("expect num is 0, actual num is %d", resp.GetSize().GetValue()) + } + t.Logf("pass: num is %d", resp.GetSize().GetValue()) + }) + + t.Run("查询限流规则,过滤条件为namespace和service", func(t *testing.T) { + filters := map[string]string{ + "service": serviceName, + "namespace": namespaceName, + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != uint32(rateLimitsNum/serviceNum) { + t.Fatalf("expect num is %d, actual num is %d", rateLimitsNum/serviceNum, resp.GetSize().GetValue()) + } + t.Logf("pass: num is %d", resp.GetSize().GetValue()) + }) + + t.Run("查询限流规则,过滤条件为offset和limit", func(t *testing.T) { + filters := map[string]string{ + "offset": "1", + "limit": "5", + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != 5 { + t.Fatalf("expect num is 5, actual num is %d", resp.GetSize().GetValue()) + } + t.Logf("pass: num is %d", resp.GetSize().GetValue()) + }) + + t.Run("查询限流规则,过滤条件为labels中的key", func(t *testing.T) { + filters := map[string]string{ + "labels": labelsKey, + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != uint32(serviceNum) { + t.Fatalf("expect num is %d, actual num is %d", serviceNum, resp.GetSize().GetValue()) + } + }) + + t.Run("查询限流规则,过滤条件为labels中的value", func(t *testing.T) { + filters := map[string]string{ + "labels": labelsValue.GetValue().GetValue(), + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != uint32(serviceNum) { + t.Fatalf("expect num is %d, actual num is %d", serviceNum, resp.GetSize().GetValue()) + } + }) + + t.Run("查询限流规则,过滤条件为labels中的key和value", func(t *testing.T) { + labelsString, err := json.Marshal(labels) + if err != nil { + panic(err) + } + filters := map[string]string{ + "labels": string(labelsString), + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetSize().GetValue() != uint32(serviceNum) { + t.Fatalf("expect num is %d, actual num is %d", serviceNum, resp.GetSize().GetValue()) + } + }) + + t.Run("查询限流规则,offset为负数,返回错误", func(t *testing.T) { + filters := map[string]string{ + "service": serviceName, + "namespace": namespaceName, + "offset": "-5", + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + + t.Run("查询限流规则,limit为负数,返回错误", func(t *testing.T) { + filters := map[string]string{ + "service": serviceName, + "namespace": namespaceName, + "limit": "-5", + } + resp := server.GetRateLimits(filters) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) +} + +// test对ratelimit字段进行校验 +func TestCheckRatelimitFieldLen(t *testing.T) { + rateLimit := &api.Rule{ + Service: utils.NewStringValue("test"), + Namespace: utils.NewStringValue("default"), + Labels: map[string]*api.MatchString{}, + ServiceToken: utils.NewStringValue("test"), + } + t.Run("创建限流规则,服务名超长", func(t *testing.T) { + str := genSpecialStr(129) + oldName := rateLimit.Service + rateLimit.Service = utils.NewStringValue(str) + resp := server.CreateRateLimit(defaultCtx, rateLimit) + rateLimit.Service = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("创建限流规则,命名空间超长", func(t *testing.T) { + str := genSpecialStr(129) + oldNamespace := rateLimit.Namespace + rateLimit.Namespace = utils.NewStringValue(str) + resp := server.CreateRateLimit(defaultCtx, rateLimit) + rateLimit.Namespace = oldNamespace + if resp.Code.Value != api.InvalidNamespaceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("创建限流规则,toeken超长", func(t *testing.T) { + str := genSpecialStr(2049) + oldServiceToken := rateLimit.ServiceToken + rateLimit.ServiceToken = utils.NewStringValue(str) + resp := server.CreateRateLimit(defaultCtx, rateLimit) + rateLimit.ServiceToken = oldServiceToken + if resp.Code.Value != api.InvalidServiceToken { + t.Fatalf("%+v", resp) + } + }) +} diff --git a/naming/test/routing_config_test.go b/naming/test/routing_config_test.go new file mode 100644 index 000000000..846fd7fb8 --- /dev/null +++ b/naming/test/routing_config_test.go @@ -0,0 +1,316 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "encoding/json" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming" + . "github.com/smartystreets/goconvey/convey" + "testing" + "time" +) + +// 检查routingConfig前后是否一致 +func checkSameRoutingConfig(t *testing.T, lhs *api.Routing, rhs *api.Routing) { + if lhs.GetService().GetValue() != rhs.GetService().GetValue() || + lhs.GetNamespace().GetValue() != rhs.GetNamespace().GetValue() { + t.Fatalf("error: (%s), (%s)", lhs, rhs) + } + + checkFunc := func(in []*api.Route, out []*api.Route) bool { + if in == nil && out == nil { + return true + } + + if in == nil || out == nil { + t.Fatalf("error: empty") + return false + } + + if len(in) != len(out) { + t.Fatalf("error: %d, %d", len(in), len(out)) + return false + } + + inStr, err := json.Marshal(in) + if err != nil { + t.Fatalf("error: %s", err.Error()) + return false + } + + outStr, err := json.Marshal(out) + if err != nil { + t.Fatalf("error: %s", err.Error()) + return false + } + + if string(inStr) != string(outStr) { + t.Fatalf("error: (%s), (%s)", string(inStr), string(outStr)) + return false + } + + return true + } + + checkFunc(lhs.Inbounds, rhs.Inbounds) + checkFunc(lhs.Outbounds, rhs.Outbounds) +} + +// 测试创建路由配置 +func TestCreateRoutingConfig(t *testing.T) { + Convey("正常创建路由配置配置请求", t, func() { + _, serviceResp := createCommonService(t, 200) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + req, _ := createCommonRoutingConfig(t, serviceResp, 3, 0) + + // 对写进去的数据进行查询 + time.Sleep(updateCacheInterval) + out := server.GetRoutingConfigWithCache(defaultCtx, serviceResp) + defer cleanCommonRoutingConfig(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + if !respSuccess(out) { + t.Fatalf("error: %+v", out) + } + checkSameRoutingConfig(t, req, out.GetRouting()) + }) + + Convey("同一个服务重复创建路由配置,报错", t, func() { + _, serviceResp := createCommonService(t, 10) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + req, _ := createCommonRoutingConfig(t, serviceResp, 1, 0) + defer cleanCommonRoutingConfig(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + resp := server.CreateRoutingConfig(defaultCtx, req) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("%s", resp.GetInfo().GetValue()) + }) +} + +// 测试创建路由配置 +func TestCreateRoutingConfig2(t *testing.T) { + Convey("参数缺失,报错", t, func() { + _, serviceResp := createCommonService(t, 20) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + req := &api.Routing{} + resp := server.CreateRoutingConfig(defaultCtx, req) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("%s", resp.GetInfo().GetValue()) + + req.Service = serviceResp.Name + resp = server.CreateRoutingConfig(defaultCtx, req) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("%s", resp.GetInfo().GetValue()) + + req.Namespace = serviceResp.Namespace + resp = server.CreateRoutingConfig(defaultCtx, req) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("%s", resp.GetInfo().GetValue()) + + req.ServiceToken = serviceResp.Token + resp = server.CreateRoutingConfig(defaultCtx, req) + defer cleanCommonRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + So(respSuccess(resp), ShouldEqual, true) + t.Logf("%s", resp.GetInfo().GetValue()) + }) + + Convey("服务不存在,创建路由配置,报错", t, func() { + _, serviceResp := createCommonService(t, 120) + cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + req := &api.Routing{} + req.Service = serviceResp.Name + req.Namespace = serviceResp.Namespace + req.ServiceToken = serviceResp.Token + resp := server.CreateRoutingConfig(defaultCtx, req) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("%s", resp.GetInfo().GetValue()) + }) +} + +// 测试删除路由配置 +func TestDeleteRoutingConfig(t *testing.T) { + Convey("可以正常删除路由配置", t, func() { + _, serviceResp := createCommonService(t, 100) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + _, resp := createCommonRoutingConfig(t, serviceResp, 3, 0) + resp.ServiceToken = utils.NewStringValue(serviceResp.GetToken().GetValue()) + deleteCommonRoutingConfig(t, resp) + defer cleanCommonRoutingConfig(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 删除之后,数据不见 + time.Sleep(updateCacheInterval) + out := server.GetRoutingConfigWithCache(defaultCtx, serviceResp) + So(out.GetRouting(), ShouldBeNil) + }) +} + +// 测试更新路由配置 +func TestUpdateRoutingConfig(t *testing.T) { + Convey("可以正常更新路由配置", t, func() { + _, serviceResp := createCommonService(t, 50) + serviceName := serviceResp.GetName().GetValue() + namespace := serviceResp.GetNamespace().GetValue() + defer cleanServiceName(serviceName, namespace) + + _, resp := createCommonRoutingConfig(t, serviceResp, 2, 0) + defer cleanCommonRoutingConfig(serviceName, namespace) + resp.ServiceToken = utils.NewStringValue(serviceResp.GetToken().GetValue()) + + resp.Outbounds = resp.Inbounds + resp.Inbounds = make([]*api.Route, 0) + updateCommonRoutingConfig(t, resp) + + time.Sleep(updateCacheInterval) + out := server.GetRoutingConfigWithCache(defaultCtx, serviceResp) + checkSameRoutingConfig(t, resp, out.GetRouting()) + }) +} + +// 测试缓存获取路由配置 +func TestGetRoutingConfigWithCache(t *testing.T) { + Convey("多个服务的,多个路由配置,都可以查询到", t, func() { + total := 20 + serviceResps := make([]*api.Service, 0, total) + routingResps := make([]*api.Routing, 0, total) + for i := 0; i < total; i++ { + _, resp := createCommonService(t, i) + defer cleanServiceName(resp.GetName().GetValue(), resp.GetNamespace().GetValue()) + serviceResps = append(serviceResps, resp) + + _, routingResp := createCommonRoutingConfig(t, resp, 2, 0) + defer cleanCommonRoutingConfig(resp.GetName().GetValue(), resp.GetNamespace().GetValue()) + routingResps = append(routingResps, routingResp) + } + + time.Sleep(updateCacheInterval) + for i := 0; i < total; i++ { + out := server.GetRoutingConfigWithCache(defaultCtx, serviceResps[i]) + checkSameRoutingConfig(t, routingResps[i], out.GetRouting()) + } + }) + Convey("服务路由数据不改变,传递了路由revision,不返回数据", t, func() { + _, serviceResp := createCommonService(t, 10) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + _, routingResp := createCommonRoutingConfig(t, serviceResp, 2, 0) + defer cleanCommonRoutingConfig(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + time.Sleep(updateCacheInterval) + firstResp := server.GetRoutingConfigWithCache(defaultCtx, serviceResp) + checkSameRoutingConfig(t, routingResp, firstResp.GetRouting()) + + serviceResp.Revision = firstResp.Service.Revision + secondResp := server.GetRoutingConfigWithCache(defaultCtx, serviceResp) + if secondResp.GetService().GetRevision().GetValue() != serviceResp.GetRevision().GetValue() { + t.Fatalf("error") + } + if secondResp.GetRouting() != nil { + t.Fatalf("error: %+v", secondResp.GetRouting()) + } + t.Logf("%+v", secondResp) + }) + Convey("路由不存在,不会出异常", t, func() { + _, serviceResp := createCommonService(t, 10) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + time.Sleep(updateCacheInterval) + if resp := server.GetRoutingConfigWithCache(defaultCtx, serviceResp); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +// 测试直接从数据库读取路由配置数据 +func TestGetRoutings(t *testing.T) { + Convey("直接从数据库查询数据,可以查询成功", t, func() { + total := 10 + var serviceResp *api.Service + for i := 0; i < total; i++ { + tmp, resp := createCommonService(t, i) + serviceResp = tmp + defer cleanServiceName(resp.GetName().GetValue(), resp.GetNamespace().GetValue()) + + createCommonRoutingConfig(t, resp, 2, 0) + defer cleanCommonRoutingConfig(resp.GetName().GetValue(), resp.GetNamespace().GetValue()) + } + + resp := server.GetRoutingConfigs(defaultCtx, nil) + So(api.CalcCode(resp), ShouldEqual, 200) + So(len(resp.GetRoutings()), ShouldBeGreaterThanOrEqualTo, total) + + resp = server.GetRoutingConfigs(defaultCtx, map[string]string{"limit": "5"}) + So(api.CalcCode(resp), ShouldEqual, 200) + So(len(resp.GetRoutings()), ShouldEqual, 5) + + resp = server.GetRoutingConfigs(defaultCtx, map[string]string{"namespace": naming.DefaultNamespace}) + So(api.CalcCode(resp), ShouldEqual, 200) + So(len(resp.GetRoutings()), ShouldBeGreaterThanOrEqualTo, total) + + // 按命名空间和名字过滤,得到一个 + filter := map[string]string{ + "namespace": naming.DefaultNamespace, + "service": serviceResp.GetName().GetValue(), + } + resp = server.GetRoutingConfigs(defaultCtx, filter) + So(api.CalcCode(resp), ShouldEqual, 200) + So(len(resp.GetRoutings()), ShouldEqual, 1) + }) +} + +// test对routing字段进行校验 +func TestCheckRoutingFieldLen(t *testing.T) { + req := &api.Routing{ + ServiceToken: utils.NewStringValue("test"), + Service: utils.NewStringValue("test"), + Namespace: utils.NewStringValue("default"), + } + + t.Run("创建路由规则,服务名超长", func(t *testing.T) { + str := genSpecialStr(129) + oldName := req.Service + req.Service = utils.NewStringValue(str) + resp := server.CreateRoutingConfig(defaultCtx, req) + req.Service = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("创建路由规则,命名空间超长", func(t *testing.T) { + str := genSpecialStr(129) + oldNamespace := req.Namespace + req.Namespace = utils.NewStringValue(str) + resp := server.CreateRoutingConfig(defaultCtx, req) + req.Namespace = oldNamespace + if resp.Code.Value != api.InvalidNamespaceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("创建路由规则,toeken超长", func(t *testing.T) { + str := genSpecialStr(2049) + oldServiceToken := req.ServiceToken + req.ServiceToken = utils.NewStringValue(str) + resp := server.CreateRoutingConfig(defaultCtx, req) + req.ServiceToken = oldServiceToken + if resp.Code.Value != api.InvalidServiceToken { + t.Fatalf("%+v", resp) + } + }) +} \ No newline at end of file diff --git a/naming/test/run.sh b/naming/test/run.sh new file mode 100644 index 000000000..159a0e7ea --- /dev/null +++ b/naming/test/run.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +go test -v -mod=vendor -cover -timeout=3600s -coverprofile=cover.out -coverpkg=github.com/polarismesh/polaris-server/naming,github.com/polarismesh/polaris-server/naming/batch,github.com/polarismesh/polaris-server/naming/cache,github.com/polarismesh/polaris-server/naming/auth,github.com/polarismesh/polaris-server/store/defaultStore,github.com/polarismesh/polaris-server/plugin/ratelimit/tokenBucket,github.com/polarismesh/polaris-server/common/model | tee test.log +go tool cover -html=cover.out -o index.html +coverage=$(cat test.log | grep "coverage:" | awk '{print $2}' | cut -d '%' -f 1) diff --git a/naming/test/service_alias_test.go b/naming/test/service_alias_test.go new file mode 100644 index 000000000..bb737ea45 --- /dev/null +++ b/naming/test/service_alias_test.go @@ -0,0 +1,684 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming" + . "github.com/smartystreets/goconvey/convey" + "regexp" + "strings" + "sync" + "testing" + "time" +) + +// 创建一个服务别名 +func createCommonAlias(service *api.Service, alias string, typ api.AliasType) *api.Response { + req := &api.ServiceAlias{ + Service: service.Name, + Namespace: service.Namespace, + Alias: utils.NewStringValue(alias), + Type: typ, + ServiceToken: service.Token, + } + return server.CreateServiceAlias(defaultCtx, req) +} + +// 创建一个服务别名(不需要鉴权) +func createCommonAliasNoAuth(service *api.Service, alias string, typ api.AliasType) *api.Response { + req := &api.ServiceAlias{ + Service: service.Name, + Namespace: service.Namespace, + Alias: utils.NewStringValue(alias), + Type: typ, + Owners: utils.NewStringValue("alias-owner"), + Comment: utils.NewStringValue("comment"), + } + return server.CreateServiceAliasNoAuth(defaultCtx, req) +} + +// 创建别名,并检查 +func createCommonAliasCheck(t *testing.T, service *api.Service, alias string, + typ api.AliasType) *api.Response { + resp := createCommonAlias(service, alias, typ) + if !respSuccess(resp) { + t.Fatalf("error") + } + return resp +} + +// 检查一个服务别名是否是sid +func isSid(alias string) bool { + items := strings.Split(alias, ":") + if len(items) != 2 { + return false + } + + for _, it := range items { + if ok, _ := regexp.MatchString("^[0-9]+$", it); !ok { + return false + } + } + + return true +} + +// 正常场景测试 +func TestCreateServiceAlias(t *testing.T) { + _, serviceResp := createCommonService(t, 123) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + Convey("正常创建非Sid的别名", t, func() { + alias := fmt.Sprintf("alias.%d", time.Now().Unix()) + resp := createCommonAlias(serviceResp, alias, api.AliasType_DEFAULT) + defer cleanServiceName(alias, serviceResp.GetNamespace().GetValue()) + So(respSuccess(resp), ShouldEqual, true) + So(resp.Alias.Alias.Value, ShouldEqual, alias) + }) + + Convey("正常创建Sid别名", t, func() { + resp := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.GetNamespace().GetValue()) + So(isSid(resp.Alias.Alias.Value), ShouldEqual, true) + t.Logf("alias sid: %s", resp.Alias.Alias.Value) + }) + + Convey("使用ctx带上的token可以创建成功", t, func() { + req := &api.ServiceAlias{ + Service: serviceResp.Name, + Namespace: serviceResp.Namespace, + Type: api.AliasType_CL5SID, + } + ctx := context.WithValue(defaultCtx, utils.StringContext("polaris-token"), + serviceResp.GetToken().GetValue()) + resp := server.CreateServiceAlias(ctx, req) + So(respSuccess(resp), ShouldEqual, true) + cleanServiceName(resp.Alias.Alias.Value, serviceResp.GetNamespace().GetValue()) + + // 带上系统token,也可以成功 + ctx = context.WithValue(defaultCtx, utils.StringContext("polaris-token"), + "polaris@12345678") + resp = server.CreateServiceAlias(ctx, req) + So(respSuccess(resp), ShouldEqual, true) + cleanServiceName(resp.Alias.Alias.Value, serviceResp.GetNamespace().GetValue()) + }) + Convey("不允许为别名创建别名", t, func() { + resp := createCommonAliasCheck(t, serviceResp, "", api.AliasType_CL5SID) + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.Namespace.Value) + + service := &api.Service{ + Name: resp.Alias.Alias, + Namespace: serviceResp.Namespace, + Token: serviceResp.Token, + } + repeatedResp := createCommonAlias(service, "", api.AliasType_CL5SID) + if respSuccess(repeatedResp) { + t.Fatalf("error: %+v", repeatedResp) + } + t.Logf("%+v", repeatedResp) + }) +} + +// 测试不需要鉴权的创建服务别名场景 +func TestCreateServiceAliasNoAuth(t *testing.T) { + _, serviceResp := createCommonService(t, 1) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + Convey("正常创建非Sid的别名(新接口)", t, func() { + alias := fmt.Sprintf("alias.%d", time.Now().Unix()) + resp := createCommonAliasNoAuth(serviceResp, alias, api.AliasType_DEFAULT) + defer cleanServiceName(alias, serviceResp.GetNamespace().GetValue()) + So(respSuccess(resp), ShouldEqual, true) + So(resp.GetAlias().GetAlias().GetValue(), ShouldEqual, alias) + }) + + Convey("正常创建Sid的别名(新接口)", t, func() { + resp := createCommonAliasNoAuth(serviceResp, "", api.AliasType_CL5SID) + defer cleanServiceName(resp.GetAlias().GetAlias().GetValue(), serviceResp.GetNamespace().GetValue()) + So(respSuccess(resp), ShouldEqual, true) + So(isSid(resp.Alias.Alias.Value), ShouldEqual, true) + t.Logf("alias sid: %s", resp.Alias.Alias.Value) + }) + + Convey("不允许为别名创建别名(新接口)", t, func() { + resp := createCommonAliasCheck(t, serviceResp, "", api.AliasType_CL5SID) + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.Namespace.Value) + + service := &api.Service{ + Name: resp.Alias.Alias, + Namespace: serviceResp.Namespace, + } + repeatedResp := createCommonAliasNoAuth(service, "", api.AliasType_CL5SID) + if respSuccess(repeatedResp) { + t.Fatalf("error: %+v", repeatedResp) + } + t.Logf("%+v", repeatedResp) + }) +} + +// 重点测试创建sid别名的场景 +// 注意:该测试函数出错的情况,会遗留一些测试数据无法清理 TODO +func TestCreateSid(t *testing.T) { + Convey("创建不同命名空间的sid,可以返回符合规范的sid", t, func() { + for namespace, layout := range naming.Namespace2SidLayoutID { + service := &api.Service{ + Name: utils.NewStringValue("sid-test-xxx"), + Namespace: utils.NewStringValue(namespace), + Revision: utils.NewStringValue("revision111"), + Owners: utils.NewStringValue("owners111"), + } + cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + serviceResp := server.CreateService(defaultCtx, service) + So(respSuccess(serviceResp), ShouldEqual, true) + + aliasResp := createCommonAlias(serviceResp.Service, "", api.AliasType_CL5SID) + So(respSuccess(aliasResp), ShouldEqual, true) + modID, cmdID := parseStr2Sid(aliasResp.GetAlias().GetAlias().GetValue()) + So(modID, ShouldNotEqual, uint32(0)) + So(cmdID, ShouldNotEqual, uint32(0)) + So(modID>>6, ShouldBeGreaterThanOrEqualTo, 3000001) // module + So(modID&63, ShouldEqual, layout) // 根据保留字段标识服务名 + So(aliasResp.GetAlias().GetNamespace().GetValue(), ShouldEqual, namespace) + cleanServiceName(aliasResp.GetAlias().GetAlias().GetValue(), namespace) + cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + } + }) + Convey("非默认的5个命名空间,不允许创建sid别名", t, func() { + namespace := &api.Namespace{ + Name: utils.NewStringValue("other-namespace-xxx"), + Owners: utils.NewStringValue("aaa"), + } + So(respSuccess(server.CreateNamespace(defaultCtx, namespace)), ShouldEqual, true) + defer cleanNamespace(namespace.Name.Value) + + service := &api.Service{ + Name: utils.NewStringValue("sid-test-xxx"), + Namespace: utils.NewStringValue(namespace.Name.Value), + Revision: utils.NewStringValue("revision111"), + Owners: utils.NewStringValue("owners111"), + } + serviceResp := server.CreateService(defaultCtx, service) + So(respSuccess(serviceResp), ShouldEqual, true) + defer cleanServiceName(service.GetName().GetValue(), service.GetNamespace().GetValue()) + aliasResp := createCommonAlias(serviceResp.Service, "", api.AliasType_CL5SID) + So(respSuccess(aliasResp), ShouldEqual, false) + t.Logf("%s", aliasResp.GetInfo().GetValue()) + }) +} + +// 并发测试 +func TestConcurrencyCreateSid(t *testing.T) { + _, serviceResp := createCommonService(t, 234) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + Convey("并发创建sid别名,sid不会重复", t, func() { + c := 200 + var wg sync.WaitGroup + resultCh := make(chan *api.Response, 1) + results := make([]*api.Response, 0, 200) + shutdown := make(chan struct{}) + + go func() { + for { + select { + case result := <-resultCh: + results = append(results, result) + case <-shutdown: + t.Log("[Alias] concurrency function exit") + return + } + } + }() + + for i := 0; i < c; i++ { + wg.Add(1) + go func(index int) { + defer func() { + t.Logf("[Alias] finish creating alias sid func index(%d)", index) + wg.Done() + }() + resp := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + resultCh <- resp + }(i) + } + + wg.Wait() + time.Sleep(time.Second) + close(shutdown) + + repeated := make(map[string]bool) + for i := 0; i < c; i++ { + resp := results[i] + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.GetNamespace().GetValue()) + So(isSid(resp.Alias.Alias.Value), ShouldEqual, true) + repeated[resp.Alias.Alias.Value] = true + } + // 检查是否重复,必须是200个 + So(len(repeated), ShouldEqual, c) + }) +} + +// 异常测试 +func TestExceptCreateAlias(t *testing.T) { + _, serviceResp := createCommonService(t, 345) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + Convey("参数缺失,报错", t, func() { + noService := &api.Service{} + resp := createCommonAlias(noService, "x1.x2.x3", api.AliasType_DEFAULT) + So(respSuccess(resp), ShouldEqual, false) + + noService.Name = utils.NewStringValue("123") + resp = createCommonAlias(noService, "x1.x2.x3", api.AliasType_DEFAULT) + So(respSuccess(resp), ShouldEqual, false) + + noService.Namespace = utils.NewStringValue("456") + resp = createCommonAlias(noService, "x1.x2.x3", api.AliasType_DEFAULT) + So(respSuccess(resp), ShouldEqual, false) + + noService.Token = utils.NewStringValue("567") + resp = createCommonAlias(noService, "", api.AliasType_DEFAULT) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("return code: %d", resp.Code.Value) + }) + + Convey("不存在的源服务,报错", t, func() { + noService := &api.Service{ + Name: utils.NewStringValue("my.service.2020.02.19"), + Namespace: utils.NewStringValue("123123"), + Token: utils.NewStringValue("aaa"), + } + resp := createCommonAlias(noService, "x1.x2.x3", api.AliasType_DEFAULT) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("return code: %d", resp.Code.Value) + So(resp.Code.Value, ShouldEqual, api.NotFoundService) + }) + + Convey("同名alias,报错", t, func() { + resp := createCommonAlias(serviceResp, "x1.x2.x3", api.AliasType_DEFAULT) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.GetNamespace().GetValue()) + + resp = createCommonAlias(serviceResp, "x1.x2.x3", api.AliasType_DEFAULT) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("same alias return code: %d", resp.Code.Value) + }) + + Convey("鉴权失败,报错", t, func() { + service := &api.Service{ + Name: serviceResp.Name, + Namespace: serviceResp.Namespace, + Token: utils.NewStringValue("123123123"), + } + resp := createCommonAlias(service, "x1.x2.x3", api.AliasType_DEFAULT) + So(respSuccess(resp), ShouldEqual, false) + t.Logf("error token, return code: %d", resp.Code.Value) + }) + + Convey("指向的服务不存在(新接口)", t, func() { + _, serviceResp2 := createCommonService(t, 2) + cleanServiceName(serviceResp2.GetName().GetValue(), serviceResp2.GetNamespace().GetValue()) + resp := createCommonAliasNoAuth(serviceResp2, "", api.AliasType_CL5SID) + if respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Logf("%+v", resp) + }) + + Convey("请求参数没有负责人(新接口)", t, func() { + req := &api.ServiceAlias{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Type: api.AliasType_CL5SID, + } + resp := server.CreateServiceAliasNoAuth(defaultCtx, req) + if respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Logf("%+v", resp) + }) +} + +// 别名修改的测试 +func TestUpdateServiceAlias(t *testing.T) { + _, serviceResp := createCommonService(t, 3) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + Convey("修改别名负责人", t, func() { + resp := createCommonAliasNoAuth(serviceResp, "", api.AliasType_CL5SID) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.GetAlias().GetAlias().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 修改别名负责人 + req := &api.ServiceAlias{ + Service: resp.GetAlias().GetService(), + Namespace: resp.GetAlias().GetNamespace(), + Alias: resp.GetAlias().GetAlias(), + Owners: utils.NewStringValue("alias-owner-new"), + ServiceToken: resp.GetAlias().GetServiceToken(), + } + + repeatedResp := server.UpdateServiceAlias(defaultCtx, req) + So(respSuccess(repeatedResp), ShouldEqual, true) + + query := map[string]string{ + "alias": req.GetAlias().GetValue(), + "namespace": req.GetNamespace().GetValue(), + } + aliasResponse := server.GetServiceAliases(query) + // 判断负责人是否一致 + So(aliasResponse.GetAliases()[0].GetOwners().GetValue(), ShouldEqual, "alias-owner-new") + t.Logf("pass, owner is %v", aliasResponse.GetAliases()[0].GetOwners().GetValue()) + }) + + Convey("修改指向服务", t, func() { + resp := createCommonAliasNoAuth(serviceResp, "", api.AliasType_CL5SID) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.GetAlias().GetAlias().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 创建新的服务 + _, serviceResp2 := createCommonService(t, 4) + defer cleanServiceName(serviceResp2.GetName().GetValue(), serviceResp2.GetNamespace().GetValue()) + + // 修改别名指向 + req := &api.ServiceAlias{ + Service: serviceResp2.GetName(), + Namespace: serviceResp2.GetNamespace(), + Alias: resp.GetAlias().GetAlias(), + Owners: resp.GetAlias().GetOwners(), + Comment: resp.GetAlias().GetComment(), + ServiceToken: resp.GetAlias().GetServiceToken(), + } + + repeatedResp := server.UpdateServiceAlias(defaultCtx, req) + So(respSuccess(repeatedResp), ShouldEqual, true) + + query := map[string]string{ + "alias": req.GetAlias().GetValue(), + "namespace": req.GetNamespace().GetValue(), + } + aliasResponse := server.GetServiceAliases(query) + // 判断指向服务是否一致 + So(aliasResponse.GetAliases()[0].GetService().GetValue(), ShouldEqual, serviceResp2.GetName().GetValue()) + t.Logf("pass, service is %v", aliasResponse.GetAliases()[0].GetService().GetValue()) + }) + + Convey("要指向的服务不存在", t, func() { + resp := createCommonAliasNoAuth(serviceResp, "", api.AliasType_CL5SID) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.GetAlias().GetAlias().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 创建新的服务并删除 + _, serviceResp2 := createCommonService(t, 4) + cleanServiceName(serviceResp2.GetName().GetValue(), serviceResp2.GetNamespace().GetValue()) + + // 修改别名指向 + req := &api.ServiceAlias{ + Service: serviceResp2.GetName(), + Namespace: serviceResp2.GetNamespace(), + Alias: resp.GetAlias().GetAlias(), + Owners: resp.GetAlias().GetOwners(), + Comment: resp.GetAlias().GetComment(), + ServiceToken: resp.GetAlias().GetServiceToken(), + } + repeatedResp := server.UpdateServiceAlias(defaultCtx, req) + if respSuccess(repeatedResp) { + t.Fatalf("error: %+v", repeatedResp) + } + t.Logf("%+v", repeatedResp) + }) + + Convey("鉴权失败", t, func() { + resp := createCommonAliasNoAuth(serviceResp, "", api.AliasType_CL5SID) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.GetAlias().GetAlias().GetValue(), serviceResp.GetNamespace().GetValue()) + + // 修改service token + req := resp.GetAlias() + req.ServiceToken = utils.NewStringValue("") + repeatedResp := server.UpdateServiceAlias(defaultCtx, req) + if respSuccess(repeatedResp) { + t.Fatalf("error: %+v", repeatedResp) + } + t.Logf("%+v", repeatedResp) + }) +} + +// 别名删除 +func TestDeleteServiceAlias(t *testing.T) { + _, serviceResp := createCommonService(t, 201) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + Convey("通过服务删除接口可以直接删除别名", t, func() { + resp := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.Namespace.Value) + + service := &api.Service{ + Name: resp.Alias.Alias, + Namespace: serviceResp.Namespace, + Token: serviceResp.Token, + } + removeCommonServices(t, []*api.Service{service}) + + query := map[string]string{"name": resp.Alias.Alias.Value} + queryResp := server.GetServices(query) + So(respSuccess(queryResp), ShouldEqual, true) + So(len(queryResp.Services), ShouldEqual, 0) + }) + + Convey("通过ctx带上token,可以删除别名成功", t, func() { + resp := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + So(respSuccess(resp), ShouldEqual, true) + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.Namespace.Value) + + service := &api.Service{Name: resp.Alias.Alias, Namespace: serviceResp.Namespace} + ctx := context.WithValue(defaultCtx, utils.StringContext("polaris-token"), + "polaris@12345678") + So(respSuccess(server.DeleteService(ctx, service)), ShouldEqual, true) + }) +} + +// 服务实例与服务路由关联测试 +func TestServiceAliasRelated(t *testing.T) { + _, serviceResp := createCommonService(t, 202) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + resp := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + if !respSuccess(resp) { + t.Fatalf("errror") + } + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.Namespace.Value) + Convey("实例新建,不允许为别名新建实例", t, func() { + instance := &api.Instance{ + Service: resp.Alias.Alias, + Namespace: serviceResp.Namespace, + ServiceToken: serviceResp.Token, + Host: utils.NewStringValue("1.12.123.132"), + Port: utils.NewUInt32Value(8080), + } + instanceResp := server.CreateInstance(defaultCtx, instance) + So(respSuccess(instanceResp), ShouldEqual, false) + t.Logf("alias create instance ret code(%d), msg(%s)", + instanceResp.Code.Value, instanceResp.Info.Value) + }) + Convey("实例Discover,别名查询实例,返回源服务的实例信息", t, func() { + _, instanceResp := createCommonInstance(t, serviceResp, 123) + defer cleanInstance(instanceResp.GetId().GetValue()) + + time.Sleep(updateCacheInterval) + service := &api.Service{Name: resp.Alias.Alias, Namespace: resp.Alias.Namespace} + disResp := server.ServiceInstancesCache(defaultCtx, service) + So(respSuccess(disResp), ShouldEqual, true) + So(len(disResp.Instances), ShouldEqual, 1) + }) + Convey("路由新建,不允许为别名新建路由", t, func() { + routing := &api.Routing{ + Service: resp.Alias.Alias, + Namespace: resp.Alias.Namespace, + ServiceToken: serviceResp.Token, + Inbounds: make([]*api.Route, 0), + } + routingResp := server.CreateRoutingConfig(defaultCtx, routing) + So(respSuccess(routingResp), ShouldEqual, false) + t.Logf("create routing ret code(%d), info(%s)", routingResp.Code.Value, routingResp.Info.Value) + }) + Convey("路由Discover,别名查询路由,返回源服务的路由信息", t, func() { + createCommonRoutingConfig(t, serviceResp, 1, 0) // in=1, out=0 + defer cleanCommonRoutingConfig(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + time.Sleep(updateCacheInterval) + service := &api.Service{Name: resp.Alias.Alias, Namespace: resp.Alias.Namespace} + disResp := server.GetRoutingConfigWithCache(defaultCtx, service) + So(respSuccess(disResp), ShouldEqual, true) + So(len(disResp.Routing.Inbounds), ShouldEqual, 1) + So(len(disResp.Routing.Outbounds), ShouldEqual, 0) + }) +} + +// 测试获取别名列表 +func TestGetServiceAliases(t *testing.T) { + _, serviceResp := createCommonService(t, 203) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + var aliases []*api.Response + count := 5 + for i := 0; i < count; i++ { + resp := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + defer cleanServiceName(resp.Alias.Alias.Value, serviceResp.Namespace.Value) + aliases = append(aliases, resp) + } + + Convey("可以查询到全量别名", t, func() { + resp := server.GetServiceAliases(nil) + So(respSuccess(resp), ShouldEqual, true) + So(len(resp.Aliases), ShouldBeGreaterThanOrEqualTo, count) + So(resp.Amount.Value, ShouldBeGreaterThanOrEqualTo, count) + }) + Convey("offset,limit测试", t, func() { + query := map[string]string{"offset": "0", "limit": "100"} + resp := server.GetServiceAliases(query) + So(respSuccess(resp), ShouldEqual, true) + So(len(resp.Aliases), ShouldBeGreaterThanOrEqualTo, count) + So(resp.Amount.Value, ShouldBeGreaterThanOrEqualTo, count) + + query["limit"] = "0" + resp = server.GetServiceAliases(query) + So(respSuccess(resp), ShouldEqual, true) + So(len(resp.Aliases), ShouldEqual, 0) + So(resp.Amount.Value, ShouldBeGreaterThanOrEqualTo, count) + }) + Convey("不合法的过滤条件", t, func() { + query := map[string]string{"xxx": "1", "limit": "100"} + resp := server.GetServiceAliases(query) + So(respSuccess(resp), ShouldEqual, false) + }) + Convey("过滤条件可以生效", t, func() { + query := map[string]string{ + "alias": aliases[2].Alias.Alias.Value, + "service": serviceResp.Name.Value, + "namespace": serviceResp.Namespace.Value, + } + resp := server.GetServiceAliases(query) + So(respSuccess(resp), ShouldEqual, true) + So(len(resp.Aliases), ShouldEqual, 1) + So(resp.Amount.Value, ShouldEqual, 1) + }) + Convey("找不到别名", t, func() { + query := map[string]string{"alias": "x1.1.x2.x3"} + resp := server.GetServiceAliases(query) + So(respSuccess(resp), ShouldEqual, true) + So(len(resp.Aliases), ShouldEqual, 0) + So(resp.Amount.Value, ShouldEqual, 0) + }) + Convey("支持owner过滤", t, func() { + query := map[string]string{"owner": "service-owner-203"} + resp := server.GetServiceAliases(query) + So(respSuccess(resp), ShouldEqual, true) + So(len(resp.Aliases), ShouldEqual, count) + So(resp.Amount.Value, ShouldEqual, count) + }) +} + +// test对serviceAlias字段进行校验 +func TestCheckServiceAliasFieldLen(t *testing.T) { + serviceAlias := &api.ServiceAlias{ + Service: utils.NewStringValue("test-123"), + Namespace: utils.NewStringValue("default"), + Alias: utils.NewStringValue("0"), + Type: api.AliasType_DEFAULT, + Owners: utils.NewStringValue("alias-owner"), + Comment: utils.NewStringValue("comment"), + } + t.Run("服务名超长", func(t *testing.T) { + str := genSpecialStr(129) + oldService := serviceAlias.Service + serviceAlias.Service = utils.NewStringValue(str) + resp := server.CreateServiceAliasNoAuth(defaultCtx, serviceAlias) + serviceAlias.Service = oldService + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("命名空间超长", func(t *testing.T) { + str := genSpecialStr(129) + oldNamespace := serviceAlias.Namespace + serviceAlias.Namespace = utils.NewStringValue(str) + resp := server.CreateServiceAliasNoAuth(defaultCtx, serviceAlias) + serviceAlias.Namespace = oldNamespace + if resp.Code.Value != api.InvalidNamespaceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("别名超长", func(t *testing.T) { + str := genSpecialStr(129) + oldAlias := serviceAlias.Alias + serviceAlias.Alias = utils.NewStringValue(str) + resp := server.CreateServiceAliasNoAuth(defaultCtx, serviceAlias) + serviceAlias.Alias = oldAlias + if resp.Code.Value != api.InvalidServiceAlias { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务别名comment超长", func(t *testing.T) { + str := genSpecialStr( 1025) + oldComment := serviceAlias.Comment + serviceAlias.Comment = utils.NewStringValue(str) + resp := server.CreateServiceAliasNoAuth(defaultCtx, serviceAlias) + serviceAlias.Comment = oldComment + if resp.Code.Value != api.InvalidServiceAliasComment { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务owner超长", func(t *testing.T) { + str := genSpecialStr( 1025) + oldOwner := serviceAlias.Owners + serviceAlias.Owners = utils.NewStringValue(str) + resp := server.CreateServiceAliasNoAuth(defaultCtx, serviceAlias) + serviceAlias.Owners = oldOwner + if resp.Code.Value != api.InvalidServiceAliasOwners { + t.Fatalf("%+v", resp) + } + }) +} \ No newline at end of file diff --git a/naming/test/service_test.go b/naming/test/service_test.go new file mode 100644 index 000000000..25511b8dd --- /dev/null +++ b/naming/test/service_test.go @@ -0,0 +1,1076 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming" + . "github.com/smartystreets/goconvey/convey" + "strconv" + "sync" + "testing" + "time" +) + +// 测试新增服务 +func TestCreateService(t *testing.T) { + t.Run("正常创建服务", func(t *testing.T) { + serviceReq, serviceResp := createCommonService(t, 9) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + if serviceResp.GetName().GetValue() == serviceReq.GetName().GetValue() && + serviceResp.GetNamespace().GetValue() == serviceReq.GetNamespace().GetValue() && + serviceResp.GetToken().GetValue() != "" { + t.Logf("pass") + } else { + t.Fatalf("error: %+v", serviceResp) + } + }) + + t.Run("创建重复名字的服务,会返回失败", func(t *testing.T) { + serviceReq, _ := createCommonService(t, 9) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + resp := server.CreateService(defaultCtx, serviceReq) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + + t.Run("创建服务,删除,再次创建,可以正常创建", func(t *testing.T) { + serviceReq, serviceResp := createCommonService(t, 100) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + req := &api.Service{ + Name: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Token: utils.NewStringValue(serviceResp.GetToken().GetValue()), + } + removeCommonServices(t, []*api.Service{req}) + + if resp := server.CreateService(defaultCtx, serviceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + t.Logf("pass") + }) + t.Run("并发创建服务", func(t *testing.T) { + var wg sync.WaitGroup + for i := 0; i < 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + serviceReq, _ := createCommonService(t, index) + cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + }(i) + } + wg.Wait() + }) + t.Run("命名空间不存在,无法创建服务", func(t *testing.T) { + service := &api.Service{ + Name: utils.NewStringValue("abc"), + Namespace: utils.NewStringValue("123456"), + Owners: utils.NewStringValue("my"), + } + resp := server.CreateService(defaultCtx, service) + if respSuccess(resp) { + t.Fatalf("error") + } + t.Logf("pass: %s", resp.GetInfo().GetValue()) + }) + t.Run("创建服务,metadata个数太多,报错", func(t *testing.T) { + service := &api.Service{ + Name: utils.NewStringValue("999"), + Namespace: utils.NewStringValue("Polaris"), + Owners: utils.NewStringValue("my"), + } + service.Metadata = make(map[string]string) + for i := 0; i < naming.MaxMetadataLength+1; i++ { + service.Metadata[fmt.Sprintf("aa-%d", i)] = "value" + } + if resp := server.CreateService(defaultCtx, service); !respSuccess(resp) { + t.Logf("%s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) +} + +// delete services +func TestRemoveServices(t *testing.T) { + t.Run("删除单个服务,删除成功", func(t *testing.T) { + serviceReq, serviceResp := createCommonService(t, 59) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + req := &api.Service{ + Name: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Token: utils.NewStringValue(serviceResp.GetToken().GetValue()), + } + + // wait for data cache + time.Sleep(time.Second * 2) + removeCommonServices(t, []*api.Service{req}) + out := server.GetServices(map[string]string{"name": req.GetName().GetValue()}) + if !respSuccess(out) { + t.Fatalf(out.GetInfo().GetValue()) + } + if len(out.GetServices()) != 0 { + t.Fatalf("error: %d", len(out.GetServices())) + } + }) + + t.Run("删除多个服务,删除成功", func(t *testing.T) { + var reqs []*api.Service + for i := 0; i < 100; i++ { + serviceReq, serviceResp := createCommonService(t, i) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + req := &api.Service{ + Name: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Token: utils.NewStringValue(serviceResp.GetToken().GetValue()), + } + reqs = append(reqs, req) + } + + // wait for data cache + time.Sleep(time.Second * 2) + removeCommonServices(t, reqs) + }) + + t.Run("创建一个服务,马上删除,可以正常删除", func(t *testing.T) { + serviceReq, serviceResp := createCommonService(t, 19) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + req := &api.Service{ + Name: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Token: utils.NewStringValue(serviceResp.GetToken().GetValue()), + } + removeCommonServices(t, []*api.Service{req}) + }) + t.Run("创建服务和实例,删除服务,删除失败", func(t *testing.T) { + serviceReq, serviceResp := createCommonService(t, 19) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + _, instanceResp := createCommonInstance(t, serviceResp, 100) + defer cleanInstance(instanceResp.GetId().GetValue()) + + resp := server.DeleteService(defaultCtx, serviceResp) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + + t.Run("并发删除服务", func(t *testing.T) { + var wg sync.WaitGroup + for i := 0; i < 20; i++ { + serviceReq, serviceResp := createCommonService(t, i) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + req := &api.Service{ + Name: utils.NewStringValue(serviceResp.GetName().GetValue()), + Namespace: utils.NewStringValue(serviceResp.GetNamespace().GetValue()), + Token: utils.NewStringValue(serviceResp.GetToken().GetValue()), + } + + wg.Add(1) + go func(reqs []*api.Service) { + defer wg.Done() + removeCommonServices(t, reqs) + }([]*api.Service{req}) + } + wg.Wait() + }) +} + +// 关联测试 +func TestDeleteService2(t *testing.T) { + t.Run("存在路由配置的情况下,删除服务会失败", func(t *testing.T) { + serviceReq, serviceResp := createCommonService(t, 20) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + // 创建一个服务配置 + createCommonRoutingConfig(t, serviceResp, 10, 10) + defer cleanCommonRoutingConfig(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + // 删除服务 + resp := server.DeleteService(defaultCtx, serviceResp) + if respSuccess(resp) { + t.Fatalf("error") + } + t.Logf("pass: %s", resp.GetInfo().GetValue()) + }) + t.Run("重复删除服务,返回成功", func(t *testing.T) { + serviceReq, serviceResp := createCommonService(t, 20) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + removeCommonServices(t, []*api.Service{serviceResp}) + removeCommonServices(t, []*api.Service{serviceResp}) + }) + t.Run("存在别名的情况下,删除服务会失败", func(t *testing.T) { + serviceReq, serviceResp := createCommonService(t, 20) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + aliasResp1 := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + defer cleanServiceName(aliasResp1.Alias.Alias.Value, serviceResp.Namespace.Value) + aliasResp2 := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + defer cleanServiceName(aliasResp2.Alias.Alias.Value, serviceResp.Namespace.Value) + + // 删除服务 + resp := server.DeleteService(defaultCtx, serviceResp) + if respSuccess(resp) { + t.Fatalf("error") + } + t.Logf("pass: %s", resp.GetInfo().GetValue()) + }) +} + +// 测试批量获取服务负责人 +func TestGetServiceOwner(t *testing.T) { + t.Run("服务个数为0,返回错误", func(t *testing.T) { + var reqs []*api.Service + if resp := server.GetServiceOwner(defaultCtx, reqs); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务个数超过100,返回错误", func(t *testing.T) { + reqs := make([]*api.Service, 0, 101) + for i := 0; i < 101; i++ { + req := &api.Service{ + Namespace: utils.NewStringValue("Test"), + Name: utils.NewStringValue("test"), + } + reqs = append(reqs, req) + } + if resp := server.GetServiceOwner(defaultCtx, reqs); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("查询100个超长服务名的服务负责人,数据库不会报错", func(t *testing.T) { + reqs := make([]*api.Service, 0, 100) + for i := 0; i < 100; i++ { + req := &api.Service{ + Namespace: utils.NewStringValue("Development"), + Name: utils.NewStringValue(genSpecialStr(128)), + } + reqs = append(reqs, req) + } + if resp := server.GetServiceOwner(defaultCtx, reqs); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) +} + +// 测试获取服务函数 +func TestGetService(t *testing.T) { + t.Run("查询服务列表,可以正常返回", func(t *testing.T) { + resp := server.GetServices(map[string]string{}) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.Info.GetValue()) + } + }) + t.Run("查询服务列表,只有limit和offset,可以正常返回预计个数的服务", func(t *testing.T) { + total := 20 + reqs := make([]*api.Service, 0, total) + for i := 0; i < total; i++ { + serviceReq, _ := createCommonService(t, i+10) + reqs = append(reqs, serviceReq) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + } + + // 创建完,直接查询 + filters := map[string]string{"offset": "0", "limit": "100"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.Info.GetValue()) + } + + if resp.GetSize().GetValue() >= uint32(total) && resp.GetSize().GetValue() <= 100 { + t.Logf("pass") + } else { + t.Fatalf("error: %d %d", resp.GetSize().GetValue(), total) + } + }) + + t.Run("查询服务列表,没有filter,只回复默认的service", func(t *testing.T) { + total := 10 + for i := 0; i < total; i++ { + serviceReq, _ := createCommonService(t, i+10) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + } + + resp := server.GetServices(map[string]string{}) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.Info.GetValue()) + } + if resp.GetSize().GetValue() >= 10 { + t.Logf("pass") + } else { + t.Fatalf("error: %d", resp.GetSize().GetValue()) + } + }) + t.Run("查询服务列表,只能查询到源服务,无法查询到别名", func(t *testing.T) { + total := 10 + for i := 0; i < total; i++ { + _, serviceResp := createCommonService(t, i+102) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + aliasResp := createCommonAlias(serviceResp, "", api.AliasType_CL5SID) + defer cleanServiceName(aliasResp.Alias.Alias.Value, serviceResp.Namespace.Value) + } + resp := server.GetServices(map[string]string{"owner": "service-owner-102"}) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.Info.GetValue()) + } + if resp.GetSize().GetValue() != 1 { + t.Fatalf("error: %d", resp.GetSize().GetValue()) + } + }) +} + +// 测试获取服务列表,参数校验 +func TestGetServices2(t *testing.T) { + t.Run("查询服务列表,limit有最大为100的限制", func(t *testing.T) { + total := 101 + for i := 0; i < total; i++ { + serviceReq, _ := createCommonService(t, i+10) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + } + + filters := map[string]string{"offset": "0", "limit": "600"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.Info.GetValue()) + } + if resp.GetSize().GetValue() == naming.QueryMaxLimit { + t.Logf("pass") + } else { + t.Fatalf("error: %d", resp.GetSize().GetValue()) + } + }) + t.Run("查询服务列表,offset参数不为int,返回错误", func(t *testing.T) { + filters := map[string]string{"offset": "abc", "limit": "200"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.Info.GetValue()) + } else { + t.Fatalf("error") + } + }) + t.Run("查询服务列表,limit参数不为int,返回错误", func(t *testing.T) { + filters := map[string]string{"offset": "0", "limit": "ss"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.Info.GetValue()) + } else { + t.Fatalf("error") + } + }) + t.Run("查询服务列表,offset参数为负数,返回错误", func(t *testing.T) { + filters := map[string]string{"offset": "-100", "limit": "10"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.Info.GetValue()) + } else { + t.Fatalf("error") + } + }) + t.Run("查询服务列表,limit参数为负数,返回错误", func(t *testing.T) { + filters := map[string]string{"offset": "100", "limit": "-10"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.Info.GetValue()) + } else { + t.Fatalf("error") + } + }) + t.Run("查询服务列表,单独提供port参数,返回错误", func(t *testing.T) { + filters := map[string]string{"port": "100"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.Info.GetValue()) + } else { + t.Fatalf("error") + } + }) + t.Run("查询服务列表,port参数有误,返回错误", func(t *testing.T) { + filters := map[string]string{"port": "p100", "host":"127.0.0.1"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Logf("pass: %s", resp.Info.GetValue()) + } else { + t.Fatalf("error") + } + }) +} + +// 有基础的过滤条件的查询服务列表 +func TestGetService3(t *testing.T) { + t.Run("根据服务名,可以正常过滤", func(t *testing.T) { + var reqs []*api.Service + serviceReq, _ := createCommonService(t, 100) + reqs = append(reqs, serviceReq) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + namespaceReq, _ := createCommonNamespace(t, 100) + defer cleanNamespace(namespaceReq.GetName().GetValue()) + + serviceReq.Namespace = utils.NewStringValue(namespaceReq.GetName().GetValue()) + if resp := server.CreateService(defaultCtx, serviceReq); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + reqs = append(reqs, serviceReq) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + + name := serviceReq.GetName().GetValue() + filters := map[string]string{"offset": "0", "limit": "10", "name": name} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + CheckGetService(t, reqs, resp.GetServices()) + t.Logf("pass") + }) + + t.Run("多重过滤条件,可以生效", func(t *testing.T) { + total := 10 + var name, namespace string + for i := 0; i < total; i++ { + serviceReq, _ := createCommonService(t, 100) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + if i == 5 { + name = serviceReq.GetName().GetValue() + namespace = serviceReq.GetNamespace().GetValue() + } + } + filters := map[string]string{"offset": "0", "limit": "10", "name": name, "namespace": namespace} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if len(resp.Services) != 1 { + t.Fatalf("error: %d", len(resp.Services)) + } + }) + + t.Run("owner过滤条件会生效", func(t *testing.T) { + total := 60 + for i := 0; i < total; i++ { + serviceReq, _ := createCommonService(t, i+10) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + } + + filters := map[string]string{"offset": "0", "limit": "100", "owner": "service-owner-10"} + resp := server.GetServices(filters) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if len(resp.Services) != 1 { + t.Fatalf("error: %d", len(resp.Services)) + } + }) +} + +// 异常场景 +func TestGetServices4(t *testing.T) { + t.Run("查询服务列表,新建一批服务,删除部分,再查询,可以过滤掉删除的", func(t *testing.T) { + total := 50 + for i := 0; i < total; i++ { + serviceReq, serviceResp := createCommonService(t, i+5) + defer cleanServiceName(serviceReq.GetName().GetValue(), serviceReq.GetNamespace().GetValue()) + if i%2 == 0 { + removeCommonServices(t, []*api.Service{serviceResp}) + } + } + + query := map[string]string{ + "offset": "0", + "limit": "100", + "name": "test-service-*", + } + resp := server.GetServices(query) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.Info.GetValue()) + } + if resp.GetSize().GetValue() == uint32(total/2) { + t.Logf("pass") + } else { + t.Fatalf("error: %d", resp.GetSize().GetValue()) + } + }) + // 新建几个服务,不同metadata + t.Run("根据metadata可以过滤services", func(t *testing.T) { + service1 := genMainService(1) + service1.Metadata = map[string]string{ + "key1": "value1", + "key2": "value2", + "key3": "value3", + } + service2 := genMainService(2) + service2.Metadata = map[string]string{ + "key2": "value2", + "key3": "value3", + } + service3 := genMainService(3) + service3.Metadata = map[string]string{"key3": "value3"} + if resp := server.CreateServices(defaultCtx, []*api.Service{service1, service2, service3}); !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + defer cleanServiceName(service1.GetName().GetValue(), service1.GetNamespace().GetValue()) + defer cleanServiceName(service2.GetName().GetValue(), service2.GetNamespace().GetValue()) + defer cleanServiceName(service3.GetName().GetValue(), service3.GetNamespace().GetValue()) + + resps := server.GetServices(map[string]string{"keys": "key3", "values": "value3"}) + if len(resps.GetServices()) != 3 && resps.GetAmount().GetValue() != 3 { + t.Fatalf("error: %d", len(resps.GetServices())) + } + resps = server.GetServices(map[string]string{"keys": "key2", "values": "value2"}) + if len(resps.GetServices()) != 2 && resps.GetAmount().GetValue() != 2 { + t.Fatalf("error: %d", len(resps.GetServices())) + } + resps = server.GetServices(map[string]string{"keys": "key1", "values": "value1"}) + if len(resps.GetServices()) != 1 && resps.GetAmount().GetValue() != 1 { + t.Fatalf("error: %d", len(resps.GetServices())) + } + resps = server.GetServices(map[string]string{"keys": "key1", "values": "value2"}) + if len(resps.GetServices()) != 0 && resps.GetAmount().GetValue() != 0 { + t.Fatalf("error: %d", len(resps.GetServices())) + } + }) +} + +// 联合查询场景 +func TestGetServices5(t *testing.T) { + getServiceCheck := func(resp *api.BatchQueryResponse, amount, size uint32) { + t.Logf("gocheck resp: %v", resp) + So(respSuccess(resp), ShouldEqual, true) + So(resp.GetAmount().GetValue(), ShouldEqual, amount) + So(resp.GetSize().GetValue(), ShouldEqual, size) + } + Convey("支持host查询到服务", t, func() { + _, serviceResp := createCommonService(t, 200) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + instanceReq, instanceResp := createCommonInstance(t, serviceResp, 100) + defer cleanInstance(instanceResp.GetId().GetValue()) + instanceReq, instanceResp = createCommonInstance(t, serviceResp, 101) + defer cleanInstance(instanceResp.GetId().GetValue()) + query := map[string]string{ + "owner": "service-owner-200", + "host": instanceReq.GetHost().GetValue(), + } + Convey("check-1", func() { getServiceCheck(server.GetServices(query), 1, 1) }) + + // 同host的实例,对应一个服务,那么返回值也是一个 + instanceReq.Port.Value = 999 + resp := server.CreateInstance(defaultCtx, instanceReq) + So(respSuccess(resp), ShouldEqual, true) + defer cleanInstance(resp.Instance.GetId().GetValue()) + Convey("check-2", func() { getServiceCheck(server.GetServices(query), 1, 1) }) + }) + Convey("支持host和port配合查询服务", t, func() { + host1 := "127.0.0.1" + port1 := uint32(8081) + host2 := "127.0.0.2" + port2 := uint32(8082) + _, serviceResp1 := createCommonService(t, 200) + defer cleanServiceName(serviceResp1.GetName().GetValue(), serviceResp1.GetNamespace().GetValue()) + _, instanceResp1 := addHostPortInstance(t, serviceResp1, host1, port1) + defer cleanInstance(instanceResp1.GetId().GetValue()) + _, serviceResp2 := createCommonService(t, 300) + defer cleanServiceName(serviceResp2.GetName().GetValue(), serviceResp2.GetNamespace().GetValue()) + _, instanceResp2 := addHostPortInstance(t, serviceResp2, host1, port2) + defer cleanInstance(instanceResp2.GetId().GetValue()) + _, serviceResp3 := createCommonService(t, 400) + defer cleanServiceName(serviceResp3.GetName().GetValue(), serviceResp3.GetNamespace().GetValue()) + _, instanceResp3 := addHostPortInstance(t, serviceResp3, host2, port1) + defer cleanInstance(instanceResp3.GetId().GetValue()) + _, serviceResp4 := createCommonService(t, 500) + defer cleanServiceName(serviceResp4.GetName().GetValue(), serviceResp4.GetNamespace().GetValue()) + _, instanceResp4 := addHostPortInstance(t, serviceResp4, host2, port2) + defer cleanInstance(instanceResp4.GetId().GetValue()) + + query := map[string]string { + "host": host1, + "port": strconv.Itoa(int(port1)), + } + Convey("check-1-1", func() {getServiceCheck(server.GetServices(query), 1, 1)}) + query["host"] = host1+","+host2 + Convey("check-2-1", func() {getServiceCheck(server.GetServices(query), 2, 2)}) + query["port"] = fmt.Sprintf("%d,%d", port1, port2) + Convey("check-2-2", func() {getServiceCheck(server.GetServices(query), 4, 4)}) + }) + Convey("多个服务,对应同个host,返回多个服务", t, func() { + count := 10 + var instance *api.Instance + for i := 0; i < count; i++ { + _, serviceResp := createCommonService(t, i) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + _, instanceResp := createCommonInstance(t, serviceResp, 100) + defer cleanInstance(instanceResp.GetId().GetValue()) + instance = instanceResp + _, instanceResp = createCommonInstance(t, serviceResp, 202) + defer cleanInstance(instanceResp.GetId().GetValue()) + } + query := map[string]string{ + "host": instance.GetHost().GetValue(), + "limit": "5", + } + Convey("check-1", func() { getServiceCheck(server.GetServices(query), uint32(count), 5) }) + }) +} + +// 测试更新服务 +func TestUpdateService(t *testing.T) { + _, serviceResp := createCommonService(t, 200) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + t.Run("正常更新服务,所有属性都生效", func(t *testing.T) { + updateReq := &api.Service{ + Name: serviceResp.Name, + Namespace: serviceResp.Namespace, + Metadata: map[string]string{ + "new-key": "1", + "new-key-2": "2", + "new-key-3": "3", + }, + Ports: utils.NewStringValue("new-ports"), + Business: utils.NewStringValue("new-business"), + Department: utils.NewStringValue("new-business"), + CmdbMod1: utils.NewStringValue("new-cmdb-mod1"), + CmdbMod2: utils.NewStringValue("new-cmdb-mo2"), + CmdbMod3: utils.NewStringValue("new-cmdb-mod3"), + Comment: utils.NewStringValue("new-comment"), + Owners: utils.NewStringValue("new-owner"), + Token: serviceResp.Token, + } + resp := server.UpdateService(defaultCtx, updateReq) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + // get service + query := map[string]string{ + "name": updateReq.GetName().GetValue(), + "namespace": updateReq.GetNamespace().GetValue(), + } + services := server.GetServices(query) + if !respSuccess(services) { + t.Fatalf("error: %s", services.GetInfo().GetValue()) + } + if services.GetSize().GetValue() != 1 { + t.Fatalf("error: %d", services.GetSize().GetValue()) + } + + serviceCheck(t, updateReq, services.GetServices()[0]) + }) + t.Run("更新服务,metadata数据个数太多,报错", func(t *testing.T) { + serviceResp.Metadata = make(map[string]string) + for i := 0; i < naming.MaxMetadataLength+1; i++ { + serviceResp.Metadata[fmt.Sprintf("update-%d", i)] = "abc" + } + if resp := server.UpdateService(defaultCtx, serviceResp); !respSuccess(resp) { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error") + } + }) + t.Run("更新服务,metadata为空,长度为0,则删除所有metadata", func(t *testing.T) { + serviceResp.Metadata = make(map[string]string) + if resp := server.UpdateService(defaultCtx, serviceResp); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + getResp := server.GetServices(map[string]string{"name": serviceResp.Name.Value}) + if !respSuccess(getResp) { + t.Fatalf("error: %s", getResp.GetInfo().GetValue()) + } + if len(getResp.Services[0].Metadata) != 0 { + t.Fatalf("error: %d", len(getResp.Services[0].Metadata)) + } + }) + t.Run("更新服务,不允许更新别名", func(t *testing.T) { + aliasResp := createCommonAlias(serviceResp, "update.service.alias.xxx", api.AliasType_DEFAULT) + defer cleanServiceName(aliasResp.Alias.Alias.Value, serviceResp.Namespace.Value) + + aliasService := &api.Service{ + Name: aliasResp.Alias.Alias, + Namespace: serviceResp.Namespace, + Department: utils.NewStringValue("123"), + Token: serviceResp.Token, + } + if resp := server.UpdateService(defaultCtx, aliasService); respSuccess(resp) { + t.Fatalf("error: update alias success") + } else { + t.Logf("update alias return: %s", resp.GetInfo().GetValue()) + } + }) +} + +// 服务更新,noChange测试 +func TestNoNeedUpdateService(t *testing.T) { + _, serviceResp := createCommonService(t, 500) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + t.Run("数据没有任意变更,返回不需要变更", func(t *testing.T) { + resp := server.UpdateService(defaultCtx, serviceResp) + if resp.GetCode().GetValue() != api.NoNeedUpdate { + t.Fatalf("error: %+v", resp) + } + }) + req := &api.Service{ + Name: serviceResp.Name, + Namespace: serviceResp.Namespace, + Token: serviceResp.Token, + } + t.Run("metadata为空,不需要变更", func(t *testing.T) { + req.Metadata = nil + if resp := server.UpdateService(defaultCtx, req); resp.GetCode().GetValue() != api.NoNeedUpdate { + t.Fatalf("error: %+v", resp) + } + req.Comment = serviceResp.Comment + if resp := server.UpdateService(defaultCtx, req); resp.GetCode().GetValue() != api.NoNeedUpdate { + t.Fatalf("error: %+v", resp) + } + }) + t.Run("metadata不为空,但是没变更,也不需要更新", func(t *testing.T) { + req.Metadata = serviceResp.Metadata + if resp := server.UpdateService(defaultCtx, req); resp.GetCode().GetValue() != api.NoNeedUpdate { + t.Fatalf("error: %+v", resp) + } + }) + t.Run("其他字段更新,metadata没有更新,不需要更新metadata", func(t *testing.T) { + req.Metadata = serviceResp.Metadata + req.Comment = utils.NewStringValue("1357986420") + if resp := server.UpdateService(defaultCtx, req); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + }) + t.Run("只有一个字段变更,service就执行变更操作", func(t *testing.T) { + baseReq := api.Service{ + Name: serviceResp.Name, + Namespace: serviceResp.Namespace, + Token: serviceResp.Token, + } + + r := baseReq + r.Ports = utils.NewStringValue("90909090") + if resp := server.UpdateService(defaultCtx, &r); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + + r = baseReq + r.Business = utils.NewStringValue("new-business") + if resp := server.UpdateService(defaultCtx, &r); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + + r = baseReq + r.Department = utils.NewStringValue("new-department-1") + if resp := server.UpdateService(defaultCtx, &r); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + + r = baseReq + r.CmdbMod1 = utils.NewStringValue("new-CmdbMod1-1") + if resp := server.UpdateService(defaultCtx, &r); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + + r = baseReq + r.CmdbMod2 = utils.NewStringValue("new-CmdbMod2-1") + if resp := server.UpdateService(defaultCtx, &r); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + + r = baseReq + r.CmdbMod3 = utils.NewStringValue("new-CmdbMod3-1") + if resp := server.UpdateService(defaultCtx, &r); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + + r = baseReq + r.Comment = utils.NewStringValue("new-Comment-1") + if resp := server.UpdateService(defaultCtx, &r); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + + r = baseReq + r.Owners = utils.NewStringValue("new-Owners-1") + if resp := server.UpdateService(defaultCtx, &r); resp.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("error: %+v", resp) + } + }) +} + +// 测试serviceToken相关的操作 +func TestServiceToken(t *testing.T) { + _, serviceResp := createCommonService(t, 200) + defer cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + t.Run("可以正常获取serviceToken", func(t *testing.T) { + req := &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Token: serviceResp.GetToken(), + } + + resp := server.GetServiceToken(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + if resp.GetService().GetToken().GetValue() != serviceResp.GetToken().GetValue() { + t.Fatalf("error") + } + }) + + t.Run("获取别名的token,返回源服务的token", func(t *testing.T) { + aliasResp := createCommonAlias(serviceResp, "get.token.xxx", api.AliasType_DEFAULT) + defer cleanServiceName(aliasResp.Alias.Alias.Value, serviceResp.Namespace.Value) + t.Logf("%+v", aliasResp) + + req := &api.Service{ + Name: aliasResp.Alias.Alias, + Namespace: serviceResp.GetNamespace(), + Token: serviceResp.GetToken(), + } + t.Logf("%+v", req) + if resp := server.GetServiceToken(defaultCtx, req); !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } else if resp.GetService().GetToken().GetValue() != serviceResp.GetToken().GetValue() { + t.Fatalf("error") + } + }) + + t.Run("可以正常更新serviceToken", func(t *testing.T) { + resp := server.UpdateServiceToken(defaultCtx, serviceResp) + if !respSuccess(resp) { + t.Fatalf("error :%s", resp.GetInfo().GetValue()) + } + if resp.GetService().GetToken().GetValue() == serviceResp.GetToken().GetValue() { + t.Fatalf("error: %s %s", resp.GetService().GetToken().GetValue(), + serviceResp.GetToken().GetValue()) + } + serviceResp.Token.Value = resp.Service.Token.Value // set token + }) + + t.Run("alias不允许更新token", func(t *testing.T) { + aliasResp := createCommonAlias(serviceResp, "update.token.xxx", api.AliasType_DEFAULT) + defer cleanServiceName(aliasResp.Alias.Alias.Value, serviceResp.Namespace.Value) + + req := &api.Service{ + Name: aliasResp.Alias.Alias, + Namespace: serviceResp.Namespace, + Token: serviceResp.Token, + } + if resp := server.UpdateServiceToken(defaultCtx, req); respSuccess(resp) { + t.Fatalf("error") + } + }) +} + +// 测试response格式化 +func TestFormatBatchWriteResponse(t *testing.T) { + t.Run("同样的错误码,返回一个错误码4XX", func(t *testing.T) { + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for i := 0; i < 10; i++ { + responses.Collect(api.NewResponse(api.NotFoundService)) + } + + responses = api.FormatBatchWriteResponse(responses) + if responses.GetCode().GetValue() != api.NotFoundService { + t.Fatalf("%+v", responses) + } + }) + t.Run("同样的错误码,返回一个错误码5XX", func(t *testing.T) { + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + for i := 0; i < 10; i++ { + responses.Collect(api.NewResponse(api.StoreLayerException)) + } + + responses = api.FormatBatchWriteResponse(responses) + if responses.GetCode().GetValue() != api.StoreLayerException { + t.Fatalf("%+v", responses) + } + }) + t.Run("有5XX和2XX,返回5XX", func(t *testing.T) { + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + responses.Collect(api.NewResponse(api.ExecuteSuccess)) + responses.Collect(api.NewResponse(api.NotFoundNamespace)) + responses.Collect(api.NewResponse(api.ParseRateLimitException)) + responses.Collect(api.NewResponse(api.ParseException)) + responses = api.FormatBatchWriteResponse(responses) + if responses.GetCode().GetValue() != api.ExecuteException { + t.Fatalf("%+v", responses) + } + }) + t.Run("没有5XX,有4XX,返回4XX", func(t *testing.T) { + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + responses.Collect(api.NewResponse(api.ExecuteSuccess)) + responses.Collect(api.NewResponse(api.NotFoundNamespace)) + responses.Collect(api.NewResponse(api.NoNeedUpdate)) + responses.Collect(api.NewResponse(api.InvalidInstanceID)) + responses.Collect(api.NewResponse(api.ExecuteSuccess)) + responses = api.FormatBatchWriteResponse(responses) + if responses.GetCode().GetValue() != api.BadRequest { + t.Fatalf("%+v", responses) + } + }) + t.Run("全是2XX", func(t *testing.T) { + responses := api.NewBatchWriteResponse(api.ExecuteSuccess) + responses.Collect(api.NewResponse(api.ExecuteSuccess)) + responses.Collect(api.NewResponse(api.NoNeedUpdate)) + responses.Collect(api.NewResponse(api.DataNoChange)) + responses.Collect(api.NewResponse(api.NoNeedUpdate)) + responses.Collect(api.NewResponse(api.ExecuteSuccess)) + responses = api.FormatBatchWriteResponse(responses) + if responses.GetCode().GetValue() != api.ExecuteSuccess { + t.Fatalf("%+v", responses) + } + }) +} + +// test对service字段进行校验 +func TestCheckServiceFieldLen(t *testing.T) { + service := genMainService(400) + t.Run("服务名超长", func(t *testing.T) { + str := genSpecialStr(129) + oldName := service.Name + service.Name = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.Name = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("命名空间超长", func(t *testing.T) { + str := genSpecialStr(129) + oldNameSpace := service.Namespace + service.Namespace = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.Namespace = oldNameSpace + if resp.Code.Value != api.InvalidNamespaceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("Metadata超长", func(t *testing.T) { + str := genSpecialStr(129) + oldMetadata := service.Metadata + oldMetadata[str] = str + resp := server.CreateService(defaultCtx, service) + service.Metadata = make(map[string]string) + if resp.Code.Value != api.InvalidMetadata { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务ports超长", func(t *testing.T) { + str := genSpecialStr(8193) + oldPort := service.Ports + service.Ports = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.Ports = oldPort + if resp.Code.Value != api.InvalidServicePorts { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务Business超长", func(t *testing.T) { + str := genSpecialStr(129) + oldBusiness := service.Business + service.Business = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.Business = oldBusiness + if resp.Code.Value != api.InvalidServiceBusiness { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务-部门超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldDepartment := service.Department + service.Department = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.Department = oldDepartment + if resp.Code.Value != api.InvalidServiceDepartment { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务cmdb超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldCMDB := service.CmdbMod1 + service.CmdbMod1 = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.CmdbMod1 = oldCMDB + if resp.Code.Value != api.InvalidServiceCMDB { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务comment超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldComment := service.Comment + service.Comment = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.Comment = oldComment + if resp.Code.Value != api.InvalidServiceComment { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务owner超长", func(t *testing.T) { + str := genSpecialStr(1025) + oldOwner := service.Owners + service.Owners = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.Owners = oldOwner + if resp.Code.Value != api.InvalidServiceOwners { + t.Fatalf("%+v", resp) + } + }) + t.Run("服务token超长", func(t *testing.T) { + str := genSpecialStr(2049) + oldToken := service.Token + service.Token = utils.NewStringValue(str) + resp := server.CreateService(defaultCtx, service) + service.Token = oldToken + if resp.Code.Value != api.InvalidServiceToken { + t.Fatalf("%+v", resp) + } + }) + t.Run("检测字段为空指针", func(t *testing.T) { + oldName := service.Name + service.Name = nil + resp := server.CreateService(defaultCtx, service) + service.Name = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) + t.Run("检测字段为空", func(t *testing.T) { + oldName := service.Name + service.Name = utils.NewStringValue("") + resp := server.CreateService(defaultCtx, service) + service.Name = oldName + if resp.Code.Value != api.InvalidServiceName { + t.Fatalf("%+v", resp) + } + }) +} diff --git a/naming/test/test.yaml b/naming/test/test.yaml new file mode 100644 index 000000000..91f68d483 --- /dev/null +++ b/naming/test/test.yaml @@ -0,0 +1,83 @@ +bootstrap: + logger: + level: debug +naming: + batch: + register: + open: true + queueSize: 1024 + waitTime: 32ms + maxBatchCount: 32 + concurrency: 16 + deregister: + open: true + queueSize: 1024 + waitTime: 32ms + maxBatchCount: 32 + concurrency: 16 + healthcheck: + open: true + kvConnNum: 50 + kvServiceName: polarisHeartbeatCkv + kvNamespace: Polaris + kvPasswd: polaris@2021 + slotNum: 30 +cache: + open: true + resources: + - name: service # 加载服务数据 + option: + disableBusiness: false # 不加载业务服务 + needMeta: true # 加载服务元数据 + - name: instance # 加载实例数据 + option: + disableBusiness: false # 不加载业务服务实例 + needMeta: true # 加载实例元数据 + - name: routingConfig # 加载路由数据 + - name: rateLimitConfig # 加载限流数据 + - name: circuitBreakerConfig # 加载熔断数据 + - name: meshConfig # 加载网格数据 + - name: l5 # 加载l5数据 + - name: mesh + - name: meshService +store: + name: defaultStore + option: + master: + dbType: mysql + dbUser: polaris + dbPwd: polaris + dbAddr: 9.134.38.82:3306 + dbName: polaris_server_for_test + maxOpenConns: 128 + maxIdleConns: 16 + connMaxLifetime: 60 + txIsolationLevel: 2 + slave: + dbType: mysql + dbUser: polaris + dbPwd: polaris + dbAddr: 9.134.38.82:3306 + dbName: polaris_server_for_test + maxOpenConns: 128 + maxIdleConns: 16 + connMaxLifetime: 60 + txIsolationLevel: 2 +plugin: + history: + name: HistoryLogger + meshResourceValidate: + name: grpc + option: + agentIP: 127.0.0.1 + agentPort: 6789 + ratelimit: + name: token-bucket + option: + remote-conf: false + instance-limit: + open: true + global: + bucket: 2 + rate: 2 + resource-cache-amount: 8 diff --git a/naming/test/testdata/mesh/invalid-virtualService.yaml b/naming/test/testdata/mesh/invalid-virtualService.yaml new file mode 100644 index 000000000..27859a71a --- /dev/null +++ b/naming/test/testdata/mesh/invalid-virtualService.yaml @@ -0,0 +1,25 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: reviews-route +spec: hosts: +- reviews.prod.svc.cluster.local + http: + - name: "reviews-v2-routes" + match: + - uri: + prefix: "/wpcatalog" + - uri: + prefix: "/consumercatalog" + rewrite: + uri: "/newcatalog" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v2 + - name: "reviews-v1-route" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v1 + diff --git a/naming/test/testdata/mesh/normal-gateway.yaml b/naming/test/testdata/mesh/normal-gateway.yaml new file mode 100644 index 000000000..4bf306706 --- /dev/null +++ b/naming/test/testdata/mesh/normal-gateway.yaml @@ -0,0 +1,51 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: Gateway +metadata: + name: my-gateway + namespace: some-config-namespace +spec: + selector: + app: my-gateway-controller + servers: + - port: + number: 80 + name: http + protocol: HTTP + hosts: + - uk.bookinfo.com + - eu.bookinfo.com + tls: + httpsRedirect: true # sends 301 redirect for http requests + - port: + number: 443 + name: https-443 + protocol: HTTPS + hosts: + - uk.bookinfo.com + - eu.bookinfo.com + tls: + mode: SIMPLE # enables HTTPS on this port + serverCertificate: /etc/certs/servercert.pem + privateKey: /etc/certs/privatekey.pem + - port: + number: 9443 + name: https-9443 + protocol: HTTPS + hosts: + - "bookinfo-namespace/*.bookinfo.com" + tls: + mode: SIMPLE # enables HTTPS on this port + credentialName: bookinfo-secret # fetches certs from Kubernetes secret + - port: + number: 9080 + name: http-wildcard + protocol: HTTP + hosts: + - "*" + - port: + number: 2379 # to expose internal service via external port 2379 + name: mongo + protocol: MONGO + hosts: + - "*" + diff --git a/naming/test/testdata/mesh/normal-virtualService-nometa.yaml b/naming/test/testdata/mesh/normal-virtualService-nometa.yaml new file mode 100644 index 000000000..1eb1094d3 --- /dev/null +++ b/naming/test/testdata/mesh/normal-virtualService-nometa.yaml @@ -0,0 +1,24 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +spec: + hosts: + - reviews.prod.svc.cluster.local + http: + - name: "reviews-v2-routes" + match: + - uri: + prefix: "/wpcatalog" + - uri: + prefix: "/consumercatalog" + rewrite: + uri: "/newcatalog" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v2 + - name: "reviews-v1-route" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v1 + diff --git a/naming/test/testdata/mesh/normal-virtualService.yaml b/naming/test/testdata/mesh/normal-virtualService.yaml new file mode 100644 index 000000000..513800b78 --- /dev/null +++ b/naming/test/testdata/mesh/normal-virtualService.yaml @@ -0,0 +1,26 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: reviews-route +spec: + hosts: + - reviews.prod.svc.cluster.local + http: + - name: "reviews-v2-routes" + match: + - uri: + prefix: "/wpcatalog" + - uri: + prefix: "/consumercatalog" + rewrite: + uri: "/newcatalog" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v2 + - name: "reviews-v1-route" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v1 + diff --git a/naming/test/testdata/mesh/update-virtualService.yaml b/naming/test/testdata/mesh/update-virtualService.yaml new file mode 100644 index 000000000..4ee6f9b1c --- /dev/null +++ b/naming/test/testdata/mesh/update-virtualService.yaml @@ -0,0 +1,26 @@ +apiVersion: networking.istio.io/v1alpha3 +kind: VirtualService +metadata: + name: reviews-route +spec: + hosts: + - reviews.prod.svc.cluster.global + http: + - name: "reviews-v3-routes" + match: + - uri: + prefix: "/wpcatalog" + - uri: + prefix: "/consumercatalog" + rewrite: + uri: "/newcatalog" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v2 + - name: "reviews-v1-route" + route: + - destination: + host: reviews.prod.svc.cluster.local + subset: v1 + diff --git a/naming/testAuthPlugin/circuitbreaker_config_test.go b/naming/testAuthPlugin/circuitbreaker_config_test.go new file mode 100644 index 000000000..a6c03a908 --- /dev/null +++ b/naming/testAuthPlugin/circuitbreaker_config_test.go @@ -0,0 +1,412 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 testAuthPlugin + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming" + "testing" +) + +/** + * @brief 测试使用平台Token绑定/解绑熔断规则 + */ +func TestCircuitBreakerAuthByPlatform(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), platformToken) + + // 创建熔断规则 + circuitBreaker := createCircuitBreaker(t, 1) + defer cleanCircuitBreaker(circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + // 创建熔断规则版本 + resp := createCircuitBreakerVersion(t, circuitBreaker) + defer cleanCircuitBreaker(resp.GetId().GetValue(), resp.GetVersion().GetValue()) + + // 创建服务 + serviceResp := createService(t, 334) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("使用平台Token发布熔断规则,有权限", func(t *testing.T) { + releaseCircuitBreaker(t, circuitBreaker, serviceResp, ctx) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + t.Log("pass") + }) + + t.Run("使用平台Token解绑熔断规则, 有权限", func(t *testing.T) { + releaseCircuitBreaker(t, circuitBreaker, serviceResp, ctx) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + unbind := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + }, + CircuitBreaker: circuitBreaker, + } + + resp := server.UnBindCircuitBreaker(ctx, unbind) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Log("pass") + }) +} + +/** + * @brief 测试使用服务Token绑定熔断规则 + */ +func TestReleaseCircuitBreakerAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建熔断规则 + circuitBreaker := createCircuitBreaker(t, 2) + defer cleanCircuitBreaker(circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + // 创建熔断规则版本 + resp := createCircuitBreakerVersion(t, circuitBreaker) + defer cleanCircuitBreaker(resp.GetId().GetValue(), resp.GetVersion().GetValue()) + + // 创建服务 + serviceResp := createService(t, 134) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token发布熔断规则,有权限", func(t *testing.T) { + req := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: circuitBreaker, + } + + resp := server.ReleaseCircuitBreaker(defaultCtx, req) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token发布熔断规则,有权限", func(t *testing.T) { + req := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: circuitBreaker, + } + + resp := server.ReleaseCircuitBreaker(ctx, req) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token发布熔断规则,有权限", func(t *testing.T) { + req := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + }, + CircuitBreaker: circuitBreaker, + } + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.ReleaseCircuitBreaker(globalCtx, req) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,发布熔断规则,返回错误", func(t *testing.T) { + req := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + }, + CircuitBreaker: circuitBreaker, + } + + resp := server.ReleaseCircuitBreaker(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,发布熔断规则,返回错误", func(t *testing.T) { + req := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Token: utils.NewStringValue("test"), + }, + CircuitBreaker: circuitBreaker, + } + + resp := server.ReleaseCircuitBreaker(defaultCtx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 测试使用服务Token解绑熔断规则 + */ +func TestUnbindCircuitBreakerAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建熔断规则 + circuitBreaker := createCircuitBreaker(t, 2) + defer cleanCircuitBreaker(circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + // 创建熔断规则版本 + resp := createCircuitBreakerVersion(t, circuitBreaker) + defer cleanCircuitBreaker(resp.GetId().GetValue(), resp.GetVersion().GetValue()) + + // 创建服务 + serviceResp := createService(t, 134) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token解绑熔断规则,有权限", func(t *testing.T) { + releaseCircuitBreaker(t, circuitBreaker, serviceResp, correctCtx) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + req := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: circuitBreaker, + } + + resp := server.UnBindCircuitBreaker(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token解绑熔断规则,有权限", func(t *testing.T) { + releaseCircuitBreaker(t, circuitBreaker, serviceResp, correctCtx) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + req := &api.ConfigRelease{ + Service: serviceResp, + CircuitBreaker: circuitBreaker, + } + + resp := server.UnBindCircuitBreaker(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token解绑熔断规则,有权限", func(t *testing.T) { + releaseCircuitBreaker(t, circuitBreaker, serviceResp, correctCtx) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + req := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + }, + CircuitBreaker: circuitBreaker, + } + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.UnBindCircuitBreaker(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,解绑熔断规则,返回错误", func(t *testing.T) { + releaseCircuitBreaker(t, circuitBreaker, serviceResp, correctCtx) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + req := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + }, + CircuitBreaker: circuitBreaker, + } + + resp := server.UnBindCircuitBreaker(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,解绑熔断规则,返回错误", func(t *testing.T) { + releaseCircuitBreaker(t, circuitBreaker, serviceResp, correctCtx) + defer cleanCircuitBreakerRelation(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue(), + circuitBreaker.GetId().GetValue(), circuitBreaker.GetVersion().GetValue()) + + req := &api.ConfigRelease{ + Service: &api.Service{ + Name: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Token: utils.NewStringValue("test"), + }, + CircuitBreaker: circuitBreaker, + } + + resp := server.UnBindCircuitBreaker(defaultCtx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 创建熔断规则 + */ +func createCircuitBreaker(t *testing.T, id int) *api.CircuitBreaker { + circuitBreaker := &api.CircuitBreaker{ + Name: utils.NewStringValue(fmt.Sprintf("name-test-%d", id)), + Namespace: utils.NewStringValue(naming.DefaultNamespace), + Owners: utils.NewStringValue("owner-test"), + } + ruleNum := 1 + // 填充source规则 + sources := make([]*api.SourceMatcher, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + source := &api.SourceMatcher{ + Service: utils.NewStringValue(fmt.Sprintf("service-test-%d", i)), + Namespace: utils.NewStringValue(fmt.Sprintf("namespace-test-%d", i)), + Labels: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", i): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i)), + }, + }, + } + sources = append(sources, source) + } + + // 填充inbound规则 + inbounds := make([]*api.CbRule, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + inbound := &api.CbRule{ + Sources: sources, + } + inbounds = append(inbounds, inbound) + } + circuitBreaker.Inbounds = inbounds + + resp := server.CreateCircuitBreaker(defaultCtx, circuitBreaker) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + + return resp.GetCircuitBreaker() +} + +/** + * @brief 创建熔断规则版本 + */ +func createCircuitBreakerVersion(t *testing.T, circuitBreaker *api.CircuitBreaker) *api.CircuitBreaker { + circuitBreaker.Version = utils.NewStringValue("test-version") + resp := server.CreateCircuitBreakerVersion(defaultCtx, circuitBreaker) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return resp.GetCircuitBreaker() +} + +/** + * @brief 发布熔断规则 + */ +func releaseCircuitBreaker(t *testing.T, circuitBreaker *api.CircuitBreaker, service *api.Service, + ctx context.Context) *api.ConfigRelease { + release := &api.ConfigRelease{ + Service: &api.Service{ + Name: service.GetName(), + Namespace: service.GetNamespace(), + }, + CircuitBreaker: circuitBreaker, + } + + resp := server.ReleaseCircuitBreaker(ctx, release) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + + return resp.GetConfigRelease() +} + +/** + * @brief 彻底删除熔断规则 + */ +func cleanCircuitBreaker(id, version string) { + str := `delete from circuitbreaker_rule where id = ? and version = ?` + if _, err := db.Exec(str, id, version); err != nil { + panic(err) + } +} + +/** + * @brief 彻底删除熔断规则发布记录 + */ +func cleanCircuitBreakerRelation(name, namespace, ruleID, ruleVersion string) { + str := `delete from circuitbreaker_rule_relation using circuitbreaker_rule_relation, service where + service_id = service.id and name = ? and namespace = ? and rule_id = ? and rule_version = ?` + if _, err := db.Exec(str, name, namespace, ruleID, ruleVersion); err != nil { + panic(err) + } +} diff --git a/naming/testAuthPlugin/instance_test.go b/naming/testAuthPlugin/instance_test.go new file mode 100644 index 000000000..a566fe6fe --- /dev/null +++ b/naming/testAuthPlugin/instance_test.go @@ -0,0 +1,565 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 testAuthPlugin + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "sync" + "testing" +) + +/** + * @brief 测试使用平台Token操作实例 + */ +func TestInstanceAuthByPlatform(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 2) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("使用平台Token创建服务实例,有权限", func(t *testing.T) { + resp := createInstance(t, serviceResp, 1, ctx) + defer cleanInstance(resp.GetId().GetValue()) + t.Log("pass") + }) + + t.Run("使用平台Token并发创建服务实例,有权限", func(t *testing.T) { + var wg sync.WaitGroup + for i := 100; i <= 500; i++ { + wg.Add(1) + go func(index int) { + defer wg.Done() + resp := createInstance(t, serviceResp, index, ctx) + cleanInstance(resp.GetId().GetValue()) + }(i) + } + wg.Wait() + }) + + t.Run("使用平台Token修改服务实例,有权限", func(t *testing.T) { + instance := createInstance(t, serviceResp, 2, ctx) + defer cleanInstance(instance.GetId().GetValue()) + + instance.Isolate = utils.NewBoolValue(false) + resp := server.UpdateInstance(ctx, instance) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("使用平台Token删除服务实例,有权限", func(t *testing.T) { + instance := createInstance(t, serviceResp, 3, ctx) + defer cleanInstance(instance.GetId().GetValue()) + + resp := server.DeleteInstance(ctx, instance) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("使用平台Token,根据host修改服务实例,有权限", func(t *testing.T) { + instance := createInstance(t, serviceResp, 4, ctx) + defer cleanInstance(instance.GetId().GetValue()) + + instance.Isolate = utils.NewBoolValue(true) + resp := server.UpdateInstanceIsolate(ctx, instance) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("使用平台Token,根据host删除服务实例,有权限", func(t *testing.T) { + instance := createInstance(t, serviceResp, 5, ctx) + defer cleanInstance(instance.GetId().GetValue()) + + resp := server.DeleteInstanceByHost(ctx, instance) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + +} + +/** + * @brief 测试使用服务Token创建实例 + */ +func TestCreateInstanceAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 3) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token创建实例,有权限", func(t *testing.T) { + req := &api.Instance{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Host: utils.NewStringValue("test-host"), + Port: utils.NewUInt32Value(11), + ServiceToken: serviceResp.GetToken(), + } + + resp := server.CreateInstance(defaultCtx, req) + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token创建实例,有权限", func(t *testing.T) { + req := &api.Instance{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Host: utils.NewStringValue("test-host"), + Port: utils.NewUInt32Value(22), + ServiceToken: serviceResp.GetToken(), + } + + resp := server.CreateInstance(ctx, req) + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token创建实例,有权限", func(t *testing.T) { + req := &api.Instance{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Host: utils.NewStringValue("test-host"), + Port: utils.NewUInt32Value(33), + } + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.CreateInstance(globalCtx, req) + defer cleanInstance(resp.GetInstance().GetId().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,创建实例,返回错误", func(t *testing.T) { + req := &api.Instance{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Host: utils.NewStringValue("test-host"), + Port: utils.NewUInt32Value(44), + } + + resp := server.CreateInstance(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,创建实例,返回错误", func(t *testing.T) { + req := &api.Instance{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Host: utils.NewStringValue("test-host"), + Port: utils.NewUInt32Value(55), + ServiceToken: utils.NewStringValue("test"), + } + + resp := server.CreateInstance(defaultCtx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 测试使用服务Token修改实例 + */ +func TestUpdateInstanceAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 3) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token修改实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 66, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.Isolate = utils.NewBoolValue(true) + req.ServiceToken = serviceResp.GetToken() + resp := server.UpdateInstance(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token修改实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 77, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.Isolate = utils.NewBoolValue(true) + req.ServiceToken = serviceResp.GetToken() + resp := server.UpdateInstance(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token修改实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 88, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + req.Isolate = utils.NewBoolValue(true) + resp := server.UpdateInstance(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,修改实例,返回错误", func(t *testing.T) { + req := createInstance(t, serviceResp, 99, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + resp := server.UpdateInstance(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,修改实例,返回错误", func(t *testing.T) { + req := createInstance(t, serviceResp, 10, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.ServiceToken = utils.NewStringValue("test") + resp := server.UpdateInstance(ctx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 测试使用服务Token根据host修改实例 + */ +func TestUpdateIsolateAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 3) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token修改实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 1111, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.Isolate = utils.NewBoolValue(true) + req.ServiceToken = serviceResp.GetToken() + resp := server.UpdateInstanceIsolate(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token修改实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 2222, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.Isolate = utils.NewBoolValue(true) + req.ServiceToken = serviceResp.GetToken() + resp := server.UpdateInstanceIsolate(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token修改实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 3333, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + req.Isolate = utils.NewBoolValue(true) + resp := server.UpdateInstanceIsolate(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,修改实例,返回错误", func(t *testing.T) { + req := createInstance(t, serviceResp, 4444, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.Isolate = utils.NewBoolValue(true) + resp := server.UpdateInstanceIsolate(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,修改实例,返回错误", func(t *testing.T) { + req := createInstance(t, serviceResp, 5555, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.Isolate = utils.NewBoolValue(true) + req.ServiceToken = utils.NewStringValue("test") + resp := server.UpdateInstanceIsolate(ctx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 测试使用服务Token删除实例 + */ +func TestDeleteInstanceAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 3) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token删除实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 13, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.DeleteInstance(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token删除实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 14, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.DeleteInstance(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token删除实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 15, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.DeleteInstance(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,删除实例,返回错误", func(t *testing.T) { + req := createInstance(t, serviceResp, 17, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + resp := server.DeleteInstance(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,删除实例,返回错误", func(t *testing.T) { + req := createInstance(t, serviceResp, 19, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.ServiceToken = utils.NewStringValue("test") + resp := server.DeleteInstance(ctx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 测试使用服务Token根据host删除实例 + */ +func TestDeleteHostAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 3) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token删除实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 101, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.DeleteInstanceByHost(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token删除实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 102, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.DeleteInstanceByHost(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token删除实例,有权限", func(t *testing.T) { + req := createInstance(t, serviceResp, 103, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.DeleteInstanceByHost(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,删除实例,返回错误", func(t *testing.T) { + req := createInstance(t, serviceResp, 104, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + resp := server.DeleteInstanceByHost(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,删除实例,返回错误", func(t *testing.T) { + req := createInstance(t, serviceResp, 105, correctCtx) + defer cleanInstance(req.GetId().GetValue()) + + req.ServiceToken = utils.NewStringValue("test") + resp := server.DeleteInstanceByHost(ctx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 创建服务实例 + */ +func createInstance(t *testing.T, service *api.Service, id int, ctx context.Context) *api.Instance { + req := &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + Host: utils.NewStringValue(fmt.Sprintf("%d.%d.%d.%d", id, id, id, id)), + Port: utils.NewUInt32Value(uint32(id)), + } + + resp := server.CreateInstance(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return resp.GetInstance() +} + +/** + * @brief 从数据库中删除服务实例 + */ +func cleanInstance(id string) { + log.Infof("clean instance: %s", id) + str := `delete from instance where id = ?` + if _, err := db.Exec(str, id); err != nil { + panic(err) + } +} diff --git a/naming/testAuthPlugin/main_test.go b/naming/testAuthPlugin/main_test.go new file mode 100644 index 000000000..cc5b10a2e --- /dev/null +++ b/naming/testAuthPlugin/main_test.go @@ -0,0 +1,198 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 testAuthPlugin + +import ( + "context" + "database/sql" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/config" + "github.com/polarismesh/polaris-server/naming" + "github.com/polarismesh/polaris-server/plugin" + "github.com/polarismesh/polaris-server/store" + "gopkg.in/yaml.v2" + "os" + "sync" + "time" + + _ "github.com/polarismesh/polaris-server/plugin/auth/platform" + _ "github.com/polarismesh/polaris-server/plugin/history/logger" + _ "github.com/polarismesh/polaris-server/plugin/ratelimit/tokenBucket" + _ "github.com/polarismesh/polaris-server/store/defaultStore" + _ "github.com/go-sql-driver/mysql" +) + +var ( + cfg = config.Config{} + once = sync.Once{} + server = &naming.Server{} + db = &sql.DB{} + defaultCtx = context.Background() + platformToken = "" +) + +const ( + platformID = "test-platform-id" +) + +/** + * @brief 内部初始化函数 + */ +func initialize() error { + options := log.DefaultOptions() + options.SetLogCallers(log.DefaultScopeName, true) + log.Configure(options) + var err error + once.Do(func() { + err = loadConfigWithAuthPlugin() + if err != nil { + return + } + // 初始化ctx + defaultCtx = context.WithValue(defaultCtx, utils.StringContext("request-id"), "test-auth-plugin") + + // 初始化存储层 + store.SetStoreConfig(&cfg.Store) + store.GetStore() + + // 初始化插件 + plugin.SetPluginConfig(&cfg.Plugin) + + // 初始化naming server + ctx := context.Background() + + naming.SetHealthCheckConfig(&cfg.Naming.HealthCheck) + if err := naming.Initialize(ctx, &cfg.Naming, &cfg.Cache); err != nil { + panic(err) + } + + server, err = naming.GetServer() + if err != nil { + panic(err) + } + + entry := cfg.Store.Option["master"] + config, ok := entry.(map[interface{}]interface{}) + if !ok { + panic("database cfg is invalid") + } + + dbType := config["dbType"].(string) + dbUser := config["dbUser"].(string) + dbPwd := config["dbPwd"].(string) + dbAddr := config["dbAddr"].(string) + dbName := config["dbName"].(string) + + dbSource := fmt.Sprintf("%s:%s@tcp(%s)/%s", dbUser, dbPwd, dbAddr, dbName) + db, err = sql.Open(dbType, dbSource) + if err != nil { + panic(err) + } + + // 创建平台 + resp := createPlatform() + platformToken = resp.GetToken().GetValue() + + // 初始化ctx + defaultCtx = context.WithValue(defaultCtx, utils.StringContext("request-id"), "test-request-id") + + // 等待数据加载到缓存 + time.Sleep(time.Second * 2) + }) + return err +} + +/** + * @brief 加载配置 + */ +func loadConfigWithAuthPlugin() error { + file, err := os.Open("test.yaml") + if err != nil { + fmt.Printf("[ERROR] open file err: %s\n", err.Error()) + return err + } + + if err := yaml.NewDecoder(file).Decode(&cfg); err != nil { + fmt.Printf("[ERROR] decode err: %s\n", err.Error()) + return err + } + return err +} + +/** + * @brief 判断请求是否成功 + */ +func respSuccess(resp api.ResponseMessage) bool { + if api.CalcCode(resp) != 200 { + return false + } + + return true +} + +/** + * @brief 创建一个平台 + */ +func createPlatform() *api.Platform { + platform := &api.Platform{ + Id: utils.NewStringValue(platformID), + Name: utils.NewStringValue("test-platform-name"), + Domain: utils.NewStringValue("test-platform-domain"), + Qps: utils.NewUInt32Value(1), + Owner: utils.NewStringValue("test-platform-owner"), + Department: utils.NewStringValue("test-platform-department"), + Comment: utils.NewStringValue("test-platform-comment"), + } + + cleanPlatform(platformID) + + resp := server.CreatePlatform(defaultCtx, platform) + if !respSuccess(resp) { + panic(resp.GetInfo().GetValue()) + } + + return resp.GetPlatform() +} + +/** + * @brief 从数据库中彻底删除平台 + */ +func cleanPlatform(id string) { + if id == "" { + panic("id is empty") + } + + log.Infof("clean platform: %s", id) + str := `delete from platform where id = ?` + if _, err := db.Exec(str, id); err != nil { + panic(err) + } +} + +/** + * @brief 初始化函数 + */ +func init() { + if err := initialize(); err != nil { + fmt.Printf("[test_auth_plugin] init err: %s", err.Error()) + panic(err) + } +} diff --git a/naming/testAuthPlugin/ratelimit_config_test.go b/naming/testAuthPlugin/ratelimit_config_test.go new file mode 100644 index 000000000..691535b5b --- /dev/null +++ b/naming/testAuthPlugin/ratelimit_config_test.go @@ -0,0 +1,413 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 testAuthPlugin + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/golang/protobuf/ptypes/duration" + "testing" +) + +/** + * @brief 测试使用平台Token操作限流规则 + */ +func TestRateLimitAuthByPlatform(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 4) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("使用平台Token创建限流规则,有权限", func(t *testing.T) { + rateLimit := createRateLimit(t, serviceResp, 1, ctx) + defer cleanRateLimit(rateLimit.GetId().GetValue()) + t.Log("pass") + }) + + t.Run("使用平台Token修改限流规则,有权限", func(t *testing.T) { + rateLimit := createRateLimit(t, serviceResp, 2, ctx) + defer cleanRateLimit(rateLimit.GetId().GetValue()) + + rateLimit.Labels = map[string]*api.MatchString{} + resp := server.UpdateRateLimit(ctx, rateLimit) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("使用平台Token删除限流规则,有权限", func(t *testing.T) { + rateLimit := createRateLimit(t, serviceResp, 3, ctx) + defer cleanRateLimit(rateLimit.GetId().GetValue()) + + resp := server.DeleteRateLimit(ctx, rateLimit) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) +} + +/** + * @brief 测试使用服务Token创建限流规则 + */ +func TestCreateRateLimitAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 6) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token创建限流规则,有权限", func(t *testing.T) { + req := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Labels: map[string]*api.MatchString{ + "111": { + Type: 0, + Value: utils.NewStringValue("aaa"), + }, + }, + ServiceToken: serviceResp.GetToken(), + } + + resp := server.CreateRateLimit(defaultCtx, req) + defer cleanRateLimit(resp.GetRateLimit().GetId().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token创建限流规则,有权限", func(t *testing.T) { + req := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + ServiceToken: serviceResp.GetToken(), + Labels: map[string]*api.MatchString{ + "111": { + Type: 0, + Value: utils.NewStringValue("aaa"), + }, + }, + } + + resp := server.CreateRateLimit(ctx, req) + defer cleanRateLimit(resp.GetInstance().GetId().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token创建限流规则,有权限", func(t *testing.T) { + req := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Labels: map[string]*api.MatchString{ + "111": { + Type: 0, + Value: utils.NewStringValue("aaa"), + }, + }, + } + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.CreateRateLimit(globalCtx, req) + defer cleanRateLimit(resp.GetInstance().GetId().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,创建限流规则,返回错误", func(t *testing.T) { + req := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Labels: map[string]*api.MatchString{ + "111": { + Type: 0, + Value: utils.NewStringValue("aaa"), + }, + }, + } + + resp := server.CreateRateLimit(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,创建限流规则,返回错误", func(t *testing.T) { + req := &api.Rule{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + Labels: map[string]*api.MatchString{ + "111": { + Type: 0, + Value: utils.NewStringValue("aaa"), + }, + }, + ServiceToken: utils.NewStringValue("test"), + } + + resp := server.CreateRateLimit(defaultCtx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 测试使用服务Token修改限流规则 + */ +func TestUpdateRateLimitAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 6) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token修改限流规则,有权限", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 22, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + req.RegexCombine = utils.NewBoolValue(true) + req.ServiceToken = serviceResp.GetToken() + resp := server.UpdateRateLimit(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token修改限流规则,有权限", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 33, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + req.RegexCombine = utils.NewBoolValue(true) + req.ServiceToken = serviceResp.GetToken() + resp := server.UpdateRateLimit(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token修改限流规则,有权限", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 33, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + req.RegexCombine = utils.NewBoolValue(true) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.UpdateRateLimit(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,修改限流规则,返回错误", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 44, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + resp := server.UpdateRateLimit(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,修改限流规则,返回错误", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 55, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + req.ServiceToken = utils.NewStringValue("test") + resp := server.UpdateRateLimit(ctx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 测试使用服务Token删除限流规则 + */ +func TestDeleteRateLimitAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 6) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token删除限流规则,有权限", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 66, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.DeleteRateLimit(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token删除限流规则,有权限", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 77, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.DeleteRateLimit(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token删除限流规则,有权限", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 77, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.DeleteRateLimit(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,删除限流规则,返回错误", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 88, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + resp := server.DeleteRateLimit(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,删除限流规则,返回错误", func(t *testing.T) { + req := createRateLimit(t, serviceResp, 99, correctCtx) + defer cleanRateLimit(req.GetId().GetValue()) + + req.ServiceToken = utils.NewStringValue("test") + resp := server.DeleteRateLimit(ctx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 创建限流规则 + */ +func createRateLimit(t *testing.T, service *api.Service, id int, ctx context.Context) *api.Rule { + rateLimit := &api.Rule{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + Priority: utils.NewUInt32Value(uint32(id)), + Resource: api.Rule_QPS, + Type: api.Rule_GLOBAL, + Labels: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", id): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", id)), + }, + fmt.Sprintf("name-%d", id+1): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", id+1)), + }, + }, + Amounts: []*api.Amount{ + { + MaxAmount: utils.NewUInt32Value(uint32(10 * id)), + ValidDuration: &duration.Duration{ + Seconds: int64(id), + Nanos: int32(id), + }, + }, + }, + Action: utils.NewStringValue(fmt.Sprintf("behavior-%d", id)), + Disable: utils.NewBoolValue(false), + Report: &api.Report{ + Interval: &duration.Duration{ + Seconds: int64(id), + }, + AmountPercent: utils.NewUInt32Value(uint32(id)), + }, + } + + resp := server.CreateRateLimit(ctx, rateLimit) + if !respSuccess(resp) { + t.Fatalf("error: %+v", resp) + } + + return resp.GetRateLimit() +} + +/** + * @brief 从数据库中删除限流规则 + */ +func cleanRateLimit(id string) { + str := `delete from ratelimit_config where id = ?` + if _, err := db.Exec(str, id); err != nil { + panic(err) + } +} diff --git a/naming/testAuthPlugin/routing_config_test.go b/naming/testAuthPlugin/routing_config_test.go new file mode 100644 index 000000000..d371a9a8a --- /dev/null +++ b/naming/testAuthPlugin/routing_config_test.go @@ -0,0 +1,362 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 testAuthPlugin + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "testing" +) + +/** + * @brief 测试使用平台Token操作路由规则 + */ +func TestRoutingConfigAuthByPlatform(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 3) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("使用平台Token创建路由规则,有权限", func(t *testing.T) { + resp := createRoutingConfig(t, serviceResp, 1, ctx) + defer cleanRoutingConfig(resp.GetService().GetValue(), serviceResp.GetNamespace().GetValue()) + t.Log("pass") + }) + + t.Run("使用平台Token修改路由规则,有权限", func(t *testing.T) { + routingConfig := createRoutingConfig(t, serviceResp, 1, ctx) + defer cleanRoutingConfig(routingConfig.GetService().GetValue(), routingConfig.GetNamespace().GetValue()) + + routingConfig.Inbounds = []*api.Route{} + resp := server.UpdateRoutingConfig(ctx, routingConfig) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("使用平台Token删除路由规则,有权限", func(t *testing.T) { + routingConfig := createRoutingConfig(t, serviceResp, 1, ctx) + defer cleanRoutingConfig(routingConfig.GetService().GetValue(), routingConfig.GetNamespace().GetValue()) + + resp := server.DeleteRoutingConfig(ctx, routingConfig) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) +} + +/** + * @brief 测试使用服务Token创建路由规则 + */ +func TestCreateRoutingConfigAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 5) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token创建路由规则,有权限", func(t *testing.T) { + req := &api.Routing{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + ServiceToken: serviceResp.GetToken(), + } + + resp := server.CreateRoutingConfig(defaultCtx, req) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token创建路由规则,有权限", func(t *testing.T) { + req := &api.Routing{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + ServiceToken: serviceResp.GetToken(), + } + + resp := server.CreateRoutingConfig(ctx, req) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token创建路由规则,有权限", func(t *testing.T) { + req := &api.Routing{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + } + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.CreateRoutingConfig(globalCtx, req) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,创建路由规则,返回错误", func(t *testing.T) { + req := &api.Routing{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + } + + resp := server.CreateRoutingConfig(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,创建路由规则,返回错误", func(t *testing.T) { + req := &api.Routing{ + Service: serviceResp.GetName(), + Namespace: serviceResp.GetNamespace(), + ServiceToken: utils.NewStringValue("test"), + } + + resp := server.CreateRoutingConfig(defaultCtx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Log("pass") + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 测试使用服务Token修改路由规则 + */ +func TestUpdateRoutingConfigAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 5) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token修改实例,有权限", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 22, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.UpdateRoutingConfig(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token修改路由规则,有权限", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 33, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.UpdateRoutingConfig(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token修改路由规则,有权限", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 33, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.UpdateRoutingConfig(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,修改路由规则,返回错误", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 44, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + resp := server.UpdateRoutingConfig(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,修改路由规则,返回错误", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 55, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + req.ServiceToken = utils.NewStringValue("test") + resp := server.UpdateRoutingConfig(ctx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 使用服务Token删除路由规则 + */ +func TestDeleteRoutingConfigAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + correctCtx := context.Background() + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-id"), platformID) + correctCtx = context.WithValue(correctCtx, utils.StringContext("platform-token"), platformToken) + + // 创建服务 + serviceResp := createService(t, 5) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + t.Run("平台信息为空,使用服务Token删除路由规则,有权限", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 66, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.DeleteRoutingConfig(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token删除路由规则,有权限", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 77, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + req.ServiceToken = serviceResp.GetToken() + resp := server.DeleteRoutingConfig(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token删除路由规则,有权限", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 77, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + resp := server.DeleteRoutingConfig(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,删除路由规则,返回错误", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 88, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + resp := server.DeleteRoutingConfig(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,删除路由规则,返回错误", func(t *testing.T) { + req := createRoutingConfig(t, serviceResp, 99, correctCtx) + defer cleanRoutingConfig(req.GetService().GetValue(), req.GetNamespace().GetValue()) + + req.ServiceToken = utils.NewStringValue("test") + resp := server.DeleteRoutingConfig(ctx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 创建路由规则 + */ +func createRoutingConfig(t *testing.T, service *api.Service, id int, ctx context.Context) *api.Routing { + source := &api.Source{ + Service: utils.NewStringValue(fmt.Sprintf("in-source-service-%d", id)), + Namespace: utils.NewStringValue(fmt.Sprintf("in-source-service-%d", id)), + } + req := &api.Routing{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + Inbounds: []*api.Route{ + { + Sources: []*api.Source{source}, + }, + }, + Outbounds: []*api.Route{ + { + Sources: []*api.Source{source}, + }, + }, + } + + resp := server.CreateRoutingConfig(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return resp.GetRouting() +} + +/** + * @brief 从数据库中删除路由规则 + */ +func cleanRoutingConfig(service string, namespace string) { + str := "delete from routing_config where id in (select id from service where name = ? and namespace = ?)" + if _, err := db.Exec(str, service, namespace); err != nil { + panic(err) + } + return +} diff --git a/naming/testAuthPlugin/service_test.go b/naming/testAuthPlugin/service_test.go new file mode 100644 index 000000000..61ede0738 --- /dev/null +++ b/naming/testAuthPlugin/service_test.go @@ -0,0 +1,254 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 testAuthPlugin + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming" + "testing" +) + +/** + * @brief 测试使用平台Token操作服务 + */ +func TestServiceAuthByPlatform(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), platformToken) + + t.Run("使用平台Token修改服务,有权限", func(t *testing.T) { + serviceResp := createService(t, 1) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + req := getCommonService(serviceResp) + req.Owners = utils.NewStringValue("test-owner") + + resp := server.UpdateService(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("使用平台Token删除服务,有权限", func(t *testing.T) { + serviceResp := createService(t, 2) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + req := getCommonService(serviceResp) + + resp := server.DeleteService(ctx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) +} + +/** + * @brief 测试使用服务Token操作服务 + */ +func TestServiceAuthByService(t *testing.T) { + ctx := context.Background() + ctx = context.WithValue(ctx, utils.StringContext("platform-id"), platformID) + ctx = context.WithValue(ctx, utils.StringContext("platform-token"), "test") + + t.Run("平台信息为空,使用服务Token修改服务,有权限", func(t *testing.T) { + serviceResp := createService(t, 1) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + serviceResp.Owners = utils.NewStringValue("test-owner") + + resp := server.UpdateService(defaultCtx, serviceResp) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token修改服务,有权限", func(t *testing.T) { + serviceResp := createService(t, 3) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + serviceResp.Owners = utils.NewStringValue("test-owner") + + resp := server.UpdateService(ctx, serviceResp) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token修改服务,有权限", func(t *testing.T) { + serviceResp := createService(t, 4) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + req := getCommonService(serviceResp) + req.Owners = utils.NewStringValue("test-owner") + + resp := server.UpdateService(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,修改服务,返回错误", func(t *testing.T) { + serviceResp := createService(t, 5) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + req := getCommonService(serviceResp) + req.Owners = utils.NewStringValue("test-owner") + + resp := server.UpdateService(defaultCtx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,修改服务,返回错误", func(t *testing.T) { + serviceResp := createService(t, 5) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + req := getCommonService(serviceResp) + req.Owners = utils.NewStringValue("test-owner") + req.Token = utils.NewStringValue("test") + + resp := server.UpdateService(defaultCtx, req) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("平台信息为空,使用服务Token删除服务,有权限", func(t *testing.T) { + serviceResp := createService(t, 2) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + resp := server.DeleteService(defaultCtx, serviceResp) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用服务Token删除服务,有权限", func(t *testing.T) { + serviceResp := createService(t, 4) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + resp := server.DeleteService(ctx, serviceResp) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("平台信息不正确,使用系统Token删除服务,有权限", func(t *testing.T) { + serviceResp := createService(t, 4) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + globalCtx := context.WithValue(ctx, utils.StringContext("polaris-token"), "polaris@12345678") + + req := getCommonService(serviceResp) + resp := server.DeleteService(globalCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + t.Log("pass") + }) + + t.Run("无服务Token和平台信息,删除服务,返回错误", func(t *testing.T) { + serviceResp := createService(t, 6) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + req := getCommonService(serviceResp) + resp := server.DeleteService(ctx, req) + if resp.GetCode().GetValue() == api.InvalidServiceToken { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) + + t.Run("服务Token错误,删除服务,返回错误", func(t *testing.T) { + serviceResp := createService(t, 7) + defer cleanService(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue()) + + serviceResp.Token = utils.NewStringValue("test") + resp := server.DeleteService(ctx, serviceResp) + if resp.GetCode().GetValue() == api.Unauthorized { + t.Logf("pass: %s", resp.GetInfo().GetValue()) + } else { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + }) +} + +/** + * @brief 创建服务 + */ +func createService(t *testing.T, id int) *api.Service { + req := &api.Service{ + Name: utils.NewStringValue(fmt.Sprintf("test-service-%d", id)), + Namespace: utils.NewStringValue(naming.DefaultNamespace), + PlatformId: utils.NewStringValue(platformID), + Owners: utils.NewStringValue(fmt.Sprintf("service-owner-%d", id)), + } + + cleanService(req.GetName().GetValue(), req.GetNamespace().GetValue()) + + resp := server.CreateService(defaultCtx, req) + if !respSuccess(resp) { + t.Fatalf("error: %s", resp.GetInfo().GetValue()) + } + + return resp.GetService() +} + +/** + * @brief 删除服务 + */ +func cleanService(name string, namespace string) { + str := `delete from service where name = ? and namespace = ?` + if _, err := db.Exec(str, name, namespace); err != nil { + panic(err) + } + + str = `delete from owner_service_map where service=? and namespace=?` + if _, err := db.Exec(str, name, namespace); err != nil { + panic(err) + } +} + +/** + * @brief 生成服务信息 + */ +func getCommonService(req *api.Service) *api.Service { + service := &api.Service{ + Name: req.GetName(), + Namespace: req.GetNamespace(), + } + return service +} diff --git a/naming/testAuthPlugin/test.yaml b/naming/testAuthPlugin/test.yaml new file mode 100644 index 000000000..df9511ef7 --- /dev/null +++ b/naming/testAuthPlugin/test.yaml @@ -0,0 +1,54 @@ +bootstrap: + logger: + level: debug +naming: + batch: + register: + open: true + queueSize: 1024 + waitTime: 32ms + maxBatchCount: 32 + concurrency: 16 + deregister: + open: true + queueSize: 1024 + waitTime: 32ms + maxBatchCount: 32 + concurrency: 16 + healthcheck: + open: false +cache: + open: false +store: + name: defaultStore + option: + master: + dbType: mysql + dbUser: polaris + dbPwd: polaris + dbAddr: 9.134.38.82:3306 + dbName: polaris_server_for_test + maxOpenConns: 128 + maxIdleConns: 16 + connMaxLifetime: 60 + txIsolationLevel: 2 +plugin: + history: + name: HistoryLogger + ratelimit: + name: token-bucket + option: + remote-conf: false + instance-limit: + open: true + global: + bucket: 2 + rate: 2 + resource-cache-amount: 8 + auth: + name: platform + option: + dbType: mysql + dbAddr: polaris:polaris@tcp(9.134.38.82:3306) + dbName: polaris_server_for_test + interval: 1 # 拉取数据间隔,单位为秒 diff --git a/naming/utils.go b/naming/utils.go new file mode 100644 index 000000000..96f57f215 --- /dev/null +++ b/naming/utils.go @@ -0,0 +1,469 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 naming + +import ( + "context" + "crypto/sha1" + "encoding/hex" + "errors" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/polarismesh/polaris-server/naming/batch" + "github.com/polarismesh/polaris-server/store" + "github.com/golang/protobuf/ptypes/wrappers" + "go.uber.org/zap" + "io" + "regexp" + "strconv" + "strings" + "unicode/utf8" +) + +const ( + QueryDefaultOffset = 0 + + QueryDefaultLimit = 100 + QueryMaxLimit = 100 + + MaxMetadataLength = 64 + + MaxBusinessLength = 64 + MaxOwnersLength = 1024 + MaxDepartmentLength = 1024 + MaxCommentLength = 1024 + + // service表 + MaxDbServiceNameLength = 128 + MaxDbServiceNamespaceLength = 64 + MaxDbServicePortsLength = 8192 + MaxDbServiceBusinessLength = 128 + MaxDbServiceDeptLength = 1024 + MaxDbServiceCMDBLength = 1024 + MaxDbServiceCommentLength = 1024 + MaxDbServiceOwnerLength = 1024 + MaxDbServiceToken = 2048 + + // instance表 + MaxDbInsHostLength = 128 + MaxDbInsProtocolLength = 32 + MaxDbInsVersionLength = 32 + MaxDbInsLogicSetLength = 128 + + // circuitbreaker表 + MaxDbCircuitbreakerName = 32 + MaxDbCircuitbreakerNamespace = 64 + MaxDbCircuitbreakerBusiness = 64 + MaxDbCircuitbreakerDepartment = 1024 + MaxDbCircuitbreakerComment = 1024 + MaxDbCircuitbreakerOwner = 1024 + MaxDbCircuitbreakerVersion = 32 + + // platform表 + MaxPlatformIDLength = 32 + MaxPlatformNameLength = 128 + MaxPlatformDomainLength = 1024 + MaxPlatformQPS = 65535 + +) + +/* + * 检查资源Name + */ +func checkResourceName(name *wrappers.StringValue) error { + if name == nil { + return errors.New("nil") + } + + if name.GetValue() == "" { + return errors.New("empty") + } + + regStr := "^[0-9A-Za-z-.:_]+$" + ok, err := regexp.MatchString(regStr, name.GetValue()) + if err != nil { + return err + } + if !ok { + return errors.New("name contains invalid character") + } + + return nil +} + +/* + * 检查资源Owners + */ +func checkResourceOwners(owners *wrappers.StringValue) error { + if owners == nil { + return errors.New("nil") + } + + if owners.GetValue() == "" { + return errors.New("empty") + } + + if utf8.RuneCountInString(owners.GetValue()) > MaxOwnersLength { + return errors.New("owners too long") + } + + return nil +} + +/* + * 检查服务实例Host + */ +func checkInstanceHost(host *wrappers.StringValue) error { + if host == nil { + return errors.New("nil") + } + + if host.GetValue() == "" { + return errors.New("empty") + } + + return nil +} + +/* + * 检查服务实例Port + */ +func checkInstancePort(port *wrappers.UInt32Value) error { + if port == nil { + return errors.New("nil") + } + + if port.GetValue() < 0 { + return errors.New("empty") + } + + return nil +} + +// 检查metadata的个数 +// 最大是64个 +// key/value是否符合要求 +func checkMetadata(meta map[string]string) error { + if meta == nil { + return nil + } + + if len(meta) > MaxMetadataLength { + return errors.New("metadata is too long") + } + + /*regStr := "^[0-9A-Za-z-._*]+$" + matchFunc := func(str string) error { + if str == "" { + return nil + } + ok, err := regexp.MatchString(regStr, str) + if err != nil { + log.Errorf("regexp match string(%s) err: %s", str, err.Error()) + return err + } + if !ok { + log.Errorf("metadata string(%s) contains invalid character", str) + return errors.New("contain invalid character") + } + return nil + } + for key, value := range meta { + if err := matchFunc(key); err != nil { + return err + } + if err := matchFunc(value); err != nil { + return err + } + }*/ + + return nil +} + +/* + * 检查查询参数Offset + */ +func checkQueryOffset(offset []string) (int, error) { + if len(offset) == 0 { + return 0, nil + } + + if len(offset) > 1 { + return 0, errors.New("unique") + } + + value, err := strconv.Atoi(offset[0]) + if err != nil { + return 0, err + } + + if value < 0 { + return 0, errors.New("invalid") + } + + return value, nil +} + +/* + * 检查查询参数Limit + */ +func checkQueryLimit(limit []string) (int, error) { + if len(limit) == 0 { + return MaxQuerySize, nil + } + + if len(limit) > 1 { + return 0, errors.New("unique") + } + + value, err := strconv.Atoi(limit[0]) + if err != nil { + return 0, err + } + + if value < 0 { + return 0, errors.New("invalid") + } + + if value > MaxQuerySize { + value = MaxQuerySize + } + + return value, nil +} + +// store code +func storeError2Response(err error) *api.Response { + if err == nil { + return nil + } + return api.NewResponseWithMsg(batch.StoreCode2APICode(err), err.Error()) +} + +// 计算实例ID +func CalculateInstanceID(namespace string, service string, vpcID string, host string, port uint32) (string, error) { + h := sha1.New() + var str string + // 兼容带有vpcID的instance + if vpcID == "" { + str = fmt.Sprintf("%s##%s##%s##%d", namespace, service, host, port) + } else { + str = fmt.Sprintf("%s##%s##%s##%s##%d", namespace, service, vpcID, host, port) + } + + if _, err := io.WriteString(h, str); err != nil { + return "", err + } + + out := hex.EncodeToString(h.Sum(nil)) + return out, nil +} + +// 计算规则ID +func CalculateRuleID(name, namespace string) string { + return name + "." + namespace +} + +// 格式化处理offset参数 +func ParseQueryOffset(offset string) (uint32, error) { + if offset == "" { + return QueryDefaultOffset, nil + } + + tmp, err := strconv.ParseUint(offset, 10, 32) + if err != nil { + log.Errorf("[Server][Query] attribute(offset:%s) is invalid, parse err: %s", + offset, err.Error()) + return 0, err + } + + return uint32(tmp), nil +} + +// 格式化处理limit参数 +func ParseQueryLimit(limit string) (uint32, error) { + if limit == "" { + return QueryDefaultLimit, nil + } + + tmp, err := strconv.ParseUint(limit, 10, 32) + if err != nil { + log.Errorf("[Server][Query] attribute(offset:%s) is invalid, parse err: %s", + limit, err.Error()) + return 0, err + } + if tmp > QueryMaxLimit { + tmp = QueryMaxLimit + } + + return uint32(tmp), nil +} + +// 统一格式化处理Offset和limit参数 +func ParseOffsetAndLimit(query map[string]string) (uint32, uint32, error) { + ofs, err := ParseQueryOffset(query["offset"]) + if err != nil { + return 0, 0, err + } + delete(query, "offset") + + lmt, err := ParseQueryLimit(query["limit"]) + if err != nil { + return 0, 0, err + } + delete(query, "limit") + + return ofs, lmt, nil +} + + +// 解析服务实例的 ip 和 port 查询参数 +func ParseInstanceArgs(query map[string]string) (*store.InstanceArgs, error) { + if len(query) == 0 { + return nil, nil + } + hosts, ok := query["host"] + if !ok { + return nil, fmt.Errorf("port parameter can not be used alone without host") + } + res := &store.InstanceArgs{} + res.Hosts = strings.Split(hosts, ",") + ports, ok := query["port"] + if !ok { + return res, nil + } + portStrs := strings.Split(ports,",") + for _, portStr := range portStrs { + port, err := strconv.ParseUint(portStr,10, 32) + if err != nil { + return nil, fmt.Errorf("%s can not parse as uint, err is %s", portStr, err.Error()) + } + res.Ports = append(res.Ports, uint32(port)) + } + return res, nil +} + +// 从ctx中获取Request-ID +func ParseRequestID(ctx context.Context) string { + if ctx == nil { + return "" + } + rid, _ := ctx.Value(utils.StringContext("request-id")).(string) + return rid +} + +// 从ctx中获取token +func ParseToken(ctx context.Context) string { + if ctx == nil { + return "" + } + + token, _ := ctx.Value(utils.StringContext("polaris-token")).(string) + return token +} + +// 从ctx中获取operator +func ParseOperator(ctx context.Context) string { + defaultOperator := "Polaris" + if ctx == nil { + return defaultOperator + } + + if operator, _ := ctx.Value(utils.StringContext("operator")).(string); operator != "" { + return operator + } + + return defaultOperator +} + +/** + * @brief 从ctx中获取Platform-Id + */ +func ParsePlatformID(ctx context.Context) string { + if ctx == nil { + return "" + } + pid, _ := ctx.Value(utils.StringContext("platform-id")).(string) + return pid +} + +/** + * @brief 从ctx中获取Platform-Token + */ +func ParsePlatformToken(ctx context.Context) string { + if ctx == nil { + return "" + } + pToken, _ := ctx.Value(utils.StringContext("platform-token")).(string) + return pToken +} + +// 生成Request-ID的日志描述 +func ZapRequestID(id string) zap.Field { + return zap.String("request-id", id) +} + +// 生成Platform-ID的日志描述 +func ZapPlatformID(id string) zap.Field { + return zap.String("platform-id", id) +} + +// 检查name字段是否超过DB中对应字段的最大字符长度限制 +func CheckDbStrFieldLen(param *wrappers.StringValue, dbLen int) error { + if param.GetValue() != "" && utf8.RuneCountInString(param.GetValue()) > dbLen { + errMsg := fmt.Sprintf("length of %s is over %d", param.GetValue(), dbLen) + return errors.New(errMsg) + } + return nil +} + +// 检查metadata的K,V是否超过DB中对应字段的最大字符长度限制 +func CheckDbMetaDataFieldLen(metaData map[string]string) error { + for k, v := range metaData { + if utf8.RuneCountInString(k) > 128 || utf8.RuneCountInString(v) > 4096 { + errMsg := fmt.Sprintf("metadata:length of key(%s) or value(%s) is over size(key:128,value:4096)", + k, v) + return errors.New(errMsg) + } + } + return nil +} + +/** + * @brief 使用平台ID鉴权 + */ +func (s *Server) verifyAuthByPlatform(ctx context.Context, sPlatformID string) bool { + // 判断平台鉴权插件是否开启 + if s.auth == nil { + return false + } + // 若服务无平台ID,则采用默认方式鉴权 + if sPlatformID == "" { + return false + } + + platformID := ParsePlatformID(ctx) + platformToken := ParsePlatformToken(ctx) + + if s.auth.Allow(platformID, platformToken) && platformID == sPlatformID { + return true + } + return false +} diff --git a/plugin.go b/plugin.go new file mode 100644 index 000000000..a4ed02de1 --- /dev/null +++ b/plugin.go @@ -0,0 +1,39 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 ( + _ "github.com/polarismesh/polaris-server/apiserver/eurekaserver" + _ "github.com/polarismesh/polaris-server/apiserver/grpcserver" + _ "github.com/polarismesh/polaris-server/apiserver/httpserver" + _ "github.com/polarismesh/polaris-server/apiserver/l5pbserver" + + _ "github.com/polarismesh/polaris-server/naming/cache" + _ "github.com/polarismesh/polaris-server/store/defaultStore" + _ "github.com/polarismesh/polaris-server/store/memory" + + _ "github.com/polarismesh/polaris-server/plugin/cmdb/memory" + + _ "github.com/polarismesh/polaris-server/plugin/auth/platform" + _ "github.com/polarismesh/polaris-server/plugin/discoverStatis/discoverLocal" + _ "github.com/polarismesh/polaris-server/plugin/history/logger" + _ "github.com/polarismesh/polaris-server/plugin/parsePassword" + _ "github.com/polarismesh/polaris-server/plugin/ratelimit/lrurate" + _ "github.com/polarismesh/polaris-server/plugin/ratelimit/tokenBucket" + _ "github.com/polarismesh/polaris-server/plugin/statis/local" +) diff --git a/plugin/auth.go b/plugin/auth.go new file mode 100644 index 000000000..9aa7ed30e --- /dev/null +++ b/plugin/auth.go @@ -0,0 +1,61 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 plugin + +import ( + "github.com/polarismesh/polaris-server/common/log" + "os" + "sync" +) + +var ( + // 插件初始化原子变量 + authOnce = &sync.Once{} +) + +/** + * @brief AUTH插件接口 + */ +type Auth interface { + Plugin + + Allow(platformID, platformToken string) bool + + IsWhiteList(ip string) bool +} + +/** + * @brief 获取Auth插件 + */ +func GetAuth() Auth { + c := &config.Auth + + plugin, exist := pluginSet[c.Name] + if !exist { + return nil + } + + authOnce.Do(func() { + if err := plugin.Initialize(c); err != nil { + log.Errorf("plugin init err: %s", err.Error()) + os.Exit(-1) + } + }) + + return plugin.(Auth) +} diff --git a/plugin/auth/platform/platform.go b/plugin/auth/platform/platform.go new file mode 100644 index 000000000..e6cb3a9a1 --- /dev/null +++ b/plugin/auth/platform/platform.go @@ -0,0 +1,277 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 platform + +import ( + "database/sql" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/plugin" + "go.uber.org/zap" + "sync" + "time" +) + +const ( + PluginName = "platform" + DefaultTimeDiff = -1 * time.Second * 5 +) + +/** + * @brief 初始化注册函数 + */ +func init() { + plugin.RegisterPlugin(PluginName, &Auth{}) +} + +/** + * @brief 鉴权插件 + */ +type Auth struct { + dbType string + dbSourceName string + interval time.Duration + whiteList string + firstUpdate bool + lastMtime time.Time + ids *sync.Map +} + +/** + * @brief 返回插件名字 + */ +func (a *Auth) Name() string { + return PluginName +} + +/** + * @brief 初始化鉴权插件 + */ +func (a *Auth) Initialize(conf *plugin.ConfigEntry) error { + dbType, _ := conf.Option["dbType"].(string) + dbAddr, _ := conf.Option["dbAddr"].(string) + dbName, _ := conf.Option["dbName"].(string) + interval, _ := conf.Option["interval"].(int) + whiteList, _ := conf.Option["white-list"].(string) + + if dbType == "" || dbAddr == "" || dbName == "" { + return fmt.Errorf("Config Plugin %s missing database params", PluginName) + } + + if interval == 0 { + return fmt.Errorf("Config Plugin %s has error interval: %d", interval) + } + + a.dbType = dbType + a.dbSourceName = dbAddr + "/" + dbName + a.interval = time.Duration(interval) * time.Second + a.whiteList = whiteList + a.ids = new(sync.Map) + a.lastMtime = time.Unix(0, 0) + a.firstUpdate = true + + if err := a.update(); err != nil { + log.Errorf("[Plugin][%s] update err: %s", PluginName, err.Error()) + return err + } + a.firstUpdate = false + + go a.run() + return nil +} + +/** + * @brief 销毁插件 + */ +func (a *Auth) Destroy() error { + return nil +} + +/** + * @brief 判断请求是否允许通过 + */ +func (a *Auth) Allow(platformID, platformToken string) bool { + if platformID == "" || platformToken == "" { + return false + } + platform := a.getPlatformByID(platformID) + if platform == nil { + log.Errorf("[Plugin][%s] platform (%s) does not exist", PluginName, platformID) + return false + } + + if platform.Token == platformToken { + return true + } + + return false +} + +/** + * @brief 判断请求ip是否属于白名单 + */ +func (a *Auth) IsWhiteList(ip string) bool { + if ip == "" || a.whiteList == "" { + return false + } + if ip == a.whiteList { + return true + } + return false +} + +/** + * @brief 主流程 + */ +func (a *Auth) run() { + ticker := time.NewTicker(a.interval) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + a.update() + } + } +} + +/** + * @brief 更新数据 + */ +func (a *Auth) update() error { + start := time.Now() + out, err := a.getPlatforms() + if err != nil { + return err + } + + update, del := a.setPlatform(out) + log.Info("[Plugin][platform] get more platforms", zap.Int("update", update), zap.Int("delete", del), + zap.Time("last", a.lastMtime), zap.Duration("used", time.Now().Sub(start))) + return nil +} + +/** + * @brief 从数据库中拉取增量数据 + */ +func (a *Auth) getPlatforms() ([]*model.Platform, error) { + // 每次采用短连接的方式,重新连接mysql + db, err := sql.Open(a.dbType, a.dbSourceName) + if err != nil { + return nil, err + } + defer db.Close() + + str := `select id, qps, token, flag, unix_timestamp(mtime) from platform where mtime > ?` + if a.firstUpdate { + str += " and flag != 1" // nolint + } + rows, err := db.Query(str, a.lastMtime.Add(DefaultTimeDiff).Format("2006-01-02 15:04:05")) + if err != nil { + log.Errorf("[Store][platform] query platform with mtime err: %s", err.Error()) + return nil, err + } + + out, err := fetchPlatformRows(rows) + if err != nil { + return nil, err + } + return out, nil +} + +/** + * @brief 读取平台信息数据 + */ +func fetchPlatformRows(rows *sql.Rows) ([]*model.Platform, error) { + defer rows.Close() + var out []*model.Platform + for rows.Next() { + var platform model.Platform + var flag int + var mtime int64 + err := rows.Scan(&platform.ID, &platform.QPS, &platform.Token, &flag, &mtime) + if err != nil { + log.Errorf("[Plugin][%s] fetch platform scan err: %s", err.Error()) + return nil, err + } + platform.ModifyTime = time.Unix(mtime, 0) + platform.Valid = true + if flag == 1 { + platform.Valid = false + } + out = append(out, &platform) + } + if err := rows.Err(); err != nil { + log.Errorf("[Plugin][%s] fetch platform next err: %s", err.Error()) + return nil, err + } + return out, nil +} + +/** + * @brief 更新数据到缓存 + */ +func (a *Auth) setPlatform(platforms []*model.Platform) (int, int) { + if len(platforms) == 0 { + return 0, 0 + } + + lastMtime := a.lastMtime.Unix() + update := 0 + del := 0 + for _, entry := range platforms { + if entry.ID == "" { + continue + } + + if entry.ModifyTime.Unix() > lastMtime { + lastMtime = entry.ModifyTime.Unix() + } + + if entry.Valid == false { + del++ + a.ids.Delete(entry.ID) + continue + } + + update++ + a.ids.Store(entry.ID, entry) + } + + if a.lastMtime.Unix() < lastMtime { + a.lastMtime = time.Unix(lastMtime, 0) + } + return update, del +} + +/** + * @brief 根据平台ID获取平台信息 + */ + +func (a *Auth) getPlatformByID(id string) *model.Platform { + if id == "" { + return nil + } + value, ok := a.ids.Load(id) + if !ok { + return nil + } + + return value.(*model.Platform) +} diff --git a/plugin/cmdb.go b/plugin/cmdb.go new file mode 100644 index 000000000..1bf2ff52d --- /dev/null +++ b/plugin/cmdb.go @@ -0,0 +1,66 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 plugin + +import ( + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "os" +) + +/** + * @brief CMDB插件接口 + */ +type CMDB interface { + Plugin + + // 在CMDB中没有找到Host,返回error为nil,location为nil + // 插件内部出现错误,返回error不为nil,忽略location + GetLocation(host string) (*model.Location, error) + + // 提供一个Range接口,遍历所有的数据 + // 遍历失败,通过Range返回值error可以额捕获 + // 参数为一个回调函数 + // 返回值:bool,是否继续遍历 + // 返回值:error,回调函数处理结果,error不为nil,则停止遍历过程,并且通过Range返回error + Range(handler func(host string, location *model.Location) (bool, error)) error + + // 获取当前CMDB存储的entry个数 + Size() int32 +} + +/** + * @brief 获取CMDB插件 + */ +func GetCMDB() CMDB { + c := &config.CMDB + + plugin, exist := pluginSet[c.Name] + if !exist { + return nil + } + + once.Do(func() { + if err := plugin.Initialize(c); err != nil { + log.Errorf("plugin init err: %s", err.Error()) + os.Exit(-1) + } + }) + + return plugin.(CMDB) +} diff --git a/plugin/cmdb/memory/memeory.go b/plugin/cmdb/memory/memeory.go new file mode 100644 index 000000000..6b7990dee --- /dev/null +++ b/plugin/cmdb/memory/memeory.go @@ -0,0 +1,78 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 memory + +import ( + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/plugin" +) + +const ( + PluginName = "memory" +) + +// 自注册到插件列表 +func init() { + plugin.RegisterPlugin(PluginName, &Memory{}) +} + +// 定义MemoryCMDB类 +type Memory struct { + key string +} + +// 返回插件名 +func (m *Memory) Name() string { + return PluginName +} + +// 初始化函数 +func (m *Memory) Initialize(c *plugin.ConfigEntry) error { + option := c.Option + m.key = option["key"].(string) + + return nil +} + +// 销毁函数 +func (m *Memory) Destroy() error { + return nil +} + +// 实现CMDB插件接口 +func (m *Memory) GetLocation(host string) (*model.Location, error) { + return nil, nil +} + +// 实现CMDB插件接口 +func (m *Memory) Range(handler func(host string, location *model.Location) (bool, error)) error { + cont, err := handler("", nil) + if err != nil { + return err + } + + if !cont { + return nil + } + return nil +} + +// 实现CMDB插件接口 +func (m *Memory) Size() int32 { + return 0 +} diff --git a/plugin/discoverStatis/discoverLocal/README.md b/plugin/discoverStatis/discoverLocal/README.md new file mode 100644 index 000000000..cc07c3cb2 --- /dev/null +++ b/plugin/discoverStatis/discoverLocal/README.md @@ -0,0 +1,21 @@ +# 统计服务发现请求到本地 + +## 测试 +1. 功能测试: 正常 +2. 压力测试: + 存入服务数量及写入文件耗时: + ``` + === RUN TestWriteFile + local_test.go:52: total num is 250000, duration is 175.246112ms + local_test.go:52: total num is 500000, duration is 361.50121ms + local_test.go:52: total num is 1000000, duration is 842.463092ms + local_test.go:52: total num is 1500000, duration is 1.305463751s + --- PASS: TestWriteFile (5.66s) + PASS + + Process finished with exit code 0 + ``` + + 写入channel测试: + channel大小为1024,并发1000,可以支持10w/s的AddDiscoverCall请求 + \ No newline at end of file diff --git a/plugin/discoverStatis/discoverLocal/discovercall.go b/plugin/discoverStatis/discoverLocal/discovercall.go new file mode 100644 index 000000000..ae1179d9d --- /dev/null +++ b/plugin/discoverStatis/discoverLocal/discovercall.go @@ -0,0 +1,71 @@ +package discoverLocal + +import ( + "bytes" + "go.uber.org/zap" + "time" +) + +/** + * @brief 服务发现统计 + */ +type DiscoverCall struct { + service string + namespace string + time time.Time +} + +/** + * @brief 服务 + */ +type Service struct { + name string + namespace string +} + +/** + * @brief 服务发现统计条目 + */ +type DiscoverCallStatis struct { + statis map[Service]time.Time + + logger *zap.Logger +} + +/** + * @brief 添加服务发现统计数据 + */ +func (d *DiscoverCallStatis) add(dc *DiscoverCall) { + service := Service{ + name: dc.service, + namespace: dc.namespace, + } + + d.statis[service] = dc.time +} + +/** + * @brief 打印服务发现统计 + */ +func (d *DiscoverCallStatis) log() { + if len(d.statis) == 0 { + return + } + + var buffer bytes.Buffer + for service, time := range d.statis { + buffer.WriteString("service=") + buffer.WriteString(service.name) + buffer.WriteString(";") + buffer.WriteString("namespace=") + buffer.WriteString(service.namespace) + buffer.WriteString(";") + buffer.WriteString("visitTime=") + buffer.WriteString(time.Format("2006-01-02 15:04:05")) + buffer.WriteString("\n") + } + + d.logger.Info(buffer.String()) + + d.statis = make(map[Service]time.Time) +} diff --git a/plugin/discoverStatis/discoverLocal/local.go b/plugin/discoverStatis/discoverLocal/local.go new file mode 100644 index 000000000..6e93f9ac8 --- /dev/null +++ b/plugin/discoverStatis/discoverLocal/local.go @@ -0,0 +1,96 @@ +package discoverLocal + +import ( + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/plugin" + "time" +) + +/** + * @brief 注册服务发现统计插件 + */ +func init() { + d := &DiscoverStatisWorker{} + plugin.RegisterPlugin(d.Name(), d) +} + +/** + * @brief 服务发现统计插件 + */ +type DiscoverStatisWorker struct { + interval time.Duration + + dcc chan *DiscoverCall + dcs *DiscoverCallStatis +} + +/** + * @brief 获取插件名称 + */ +func (d *DiscoverStatisWorker) Name() string { + return "discoverLocal" +} + +/** + * @brief 初始化服务发现统计插件 + */ +func (d *DiscoverStatisWorker) Initialize(conf *plugin.ConfigEntry) error { + // 设置打印周期 + interval := conf.Option["interval"].(int) + d.interval = time.Duration(interval) * time.Second + + outputPath := conf.Option["outputPath"].(string) + + // 初始化 + d.dcc = make(chan *DiscoverCall, 1024) + d.dcs = &DiscoverCallStatis{ + statis: make(map[Service]time.Time), + logger: newLogger(outputPath + "/" + "discovercall.log"), + } + + go d.Run() + + return nil +} + +/** + * @brief 销毁服务发现统计插件 + */ +func (d *DiscoverStatisWorker) Destroy() error { + return nil +} + +/** + * @brief 上报请求 + */ +func (d *DiscoverStatisWorker) AddDiscoverCall(service, namespace string, time time.Time) error { + select { + case d.dcc <- &DiscoverCall{ + service: service, + namespace: namespace, + time: time, + }: + default: + log.Errorf("[DiscoverStatis] service: %s, namespace: %s is not captured", service, namespace) + return fmt.Errorf("[DiscoverStatis] service: %s, namespace: %s is not captured", service, namespace) + } + return nil +} + +/** + * @brief 主流程 + */ +func (d *DiscoverStatisWorker) Run() { + ticker := time.NewTicker(d.interval) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + d.dcs.log() + case dc := <-d.dcc: + d.dcs.add(dc) + } + } +} diff --git a/plugin/discoverStatis/discoverLocal/local_test.go b/plugin/discoverStatis/discoverLocal/local_test.go new file mode 100644 index 000000000..f78994d8f --- /dev/null +++ b/plugin/discoverStatis/discoverLocal/local_test.go @@ -0,0 +1,87 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 discoverLocal + +import ( + "fmt" + "testing" + "time" +) + +/** + * @brief 测试打印文件所需耗时 + */ +func TestWriteFile(t *testing.T) { + dcs := &DiscoverCallStatis{ + statis: make(map[Service]time.Time), + logger: newLogger("discovercall_test1.log"), + } + namespace := "Test" + totals := []int{25, 50, 100, 150} + for _, num := range totals { + count := 10000 + for i := 0; i <= num; i++ { + for j := 0; j <= count; j++ { + name := fmt.Sprintf("test-service-%d-%d", i, j) + service := Service{ + name: name, + namespace: namespace, + } + dcs.statis[service] = time.Now() + } + } + + startTime := time.Now() + dcs.log() + endTime := time.Now() + t.Logf("total num is %d, duration is %v", num*count, endTime.Sub(startTime)) + } + +} + +/** + * @brief 测试写入chan的情况 + */ +func TestDiscoverStatisWorker_AddDiscoverCall(t *testing.T) { + worker := &DiscoverStatisWorker{ + interval: 60 * time.Second, + dcc: make(chan *DiscoverCall, 1024), + dcs: &DiscoverCallStatis{ + statis: make(map[Service]time.Time), + logger: newLogger("discovercall_test2.log"), + }, + } + + go worker.Run() + + namespace := "Test" + timeout := time.After(time.Minute * 3) + for i := 0; i < 1000; i++ { + go func(index int) { + for { + name := fmt.Sprintf("test-service-%d", index) + if err := worker.AddDiscoverCall(name, namespace, time.Now()); err != nil { + t.Errorf("err: %s", err.Error()) + } + time.Sleep(time.Millisecond * 10) + } + }(i) + } + <-timeout + t.Log("pass") +} diff --git a/plugin/discoverStatis/discoverLocal/logger.go b/plugin/discoverStatis/discoverLocal/logger.go new file mode 100644 index 000000000..0ab4bc58b --- /dev/null +++ b/plugin/discoverStatis/discoverLocal/logger.go @@ -0,0 +1,50 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 discoverLocal + +import ( + "github.com/natefinch/lumberjack" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +/** + * @brief 创建日志打印器 + */ +func newLogger(file string) *zap.Logger { + encCfg := zapcore.EncoderConfig{ + MessageKey: "msg", + TimeKey: "time", + NameKey: "name", + CallerKey: "caller", + StacktraceKey: "stacktrace", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.LowercaseLevelEncoder, + EncodeDuration: zapcore.StringDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + } + + w := zapcore.AddSync(&lumberjack.Logger{ + Filename: file, + MaxSize: 500, // MB + MaxBackups: 10, + MaxAge: 7, // days + }) + + return zap.New(zapcore.NewCore(zapcore.NewConsoleEncoder(encCfg), w, zap.InfoLevel)) +} diff --git a/plugin/discoverstatis.go b/plugin/discoverstatis.go new file mode 100644 index 000000000..6e32fb25b --- /dev/null +++ b/plugin/discoverstatis.go @@ -0,0 +1,59 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 plugin + +import ( + "github.com/polarismesh/polaris-server/common/log" + "os" + "sync" + "time" +) + +var ( + discoverStatisOnce = &sync.Once{} +) + +/** + * @brief 服务发现统计插件接口 + */ +type DiscoverStatis interface { + Plugin + + AddDiscoverCall(service, namespace string, time time.Time) error +} + +/** + * @brief 获取服务发现统计插件 + */ +func GetDiscoverStatis() DiscoverStatis { + c := &config.DiscoverStatis + + plugin, exist := pluginSet[c.Name] + if !exist { + return nil + } + + discoverStatisOnce.Do(func() { + if err := plugin.Initialize(c); err != nil { + log.Errorf("plugin init err: %s", err.Error()) + os.Exit(-1) + } + }) + + return plugin.(DiscoverStatis) +} diff --git a/plugin/history.go b/plugin/history.go new file mode 100644 index 000000000..bbbf44ac3 --- /dev/null +++ b/plugin/history.go @@ -0,0 +1,54 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 plugin + +import ( + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "os" + "sync" +) + +var ( + // 插件初始化原子变量 + historyOnce = &sync.Once{} +) + +// 历史记录插件 +type History interface { + Plugin + Record(entry *model.RecordEntry) +} + +// 获取历史记录插件 +func GetHistory() History { + c := &config.History + plugin, exist := pluginSet[c.Name] + if !exist { + return nil + } + + historyOnce.Do(func() { + if err := plugin.Initialize(c); err != nil { + log.Errorf("plugin init err: %s", err.Error()) + os.Exit(-1) + } + }) + + return plugin.(History) +} diff --git a/plugin/history/README.md b/plugin/history/README.md new file mode 100644 index 000000000..43c42e33f --- /dev/null +++ b/plugin/history/README.md @@ -0,0 +1 @@ +# 操作记录插件 \ No newline at end of file diff --git a/plugin/history/logger/history_logger.go b/plugin/history/logger/history_logger.go new file mode 100644 index 000000000..5cb58fb3c --- /dev/null +++ b/plugin/history/logger/history_logger.go @@ -0,0 +1,103 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 logger + +import ( + "fmt" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/plugin" + "github.com/natefinch/lumberjack" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +// 把操作记录记录到日志文件中 +const ( + PluginName = "HistoryLogger" +) + +// 初始化注册函数 +func init() { + plugin.RegisterPlugin(PluginName, &HistoryLogger{}) +} + +// 历史记录logger +type HistoryLogger struct { + logger *zap.Logger +} + +// 返回插件名字 +func (h *HistoryLogger) Name() string { + return PluginName +} + +// 销毁插件 +func (h *HistoryLogger) Destroy() error { + return h.logger.Sync() +} + +// 插件初始化 +func (h *HistoryLogger) Initialize(c *plugin.ConfigEntry) error { + // 日志的encode + encCfg := zapcore.EncoderConfig{ + TimeKey: "time", + //LevelKey: "level", + NameKey: "scope", + CallerKey: "caller", + MessageKey: "msg", + StacktraceKey: "stack", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.LowercaseLevelEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + EncodeDuration: zapcore.StringDurationEncoder, + //EncodeTime: TimeEncoder, + } + + // 同步到文件中的配置 TODO,参数来自于外部配置文件 + w := zapcore.AddSync(&lumberjack.Logger{ + Filename: "./log/polaris-history.log", // TODO + MaxSize: 500, // megabytes TODO + MaxBackups: 10, + MaxAge: 15, // days TODO + }) + //multiSync := zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), w) + + // 日志 + core := zapcore.NewCore(zapcore.NewConsoleEncoder(encCfg), w, zap.DebugLevel) + logger := zap.New(core) + h.logger = logger + + return nil +} + +// 记录操作记录到日志中 +func (h *HistoryLogger) Record(entry *model.RecordEntry) { + var str string + switch model.GetResourceType(entry.ResourceType) { + case model.ServiceType: + str = fmt.Sprintf("resource_type=%s;operation_type=%s;namespace=%s;service=%s;context=%s;operator=%s;ctime=%s", + string(entry.ResourceType), string(entry.OperationType), entry.Namespace, entry.Service, + entry.Context, entry.Operator, entry.CreateTime.Format("2006-01-02 15:04:05")) + case model.MeshType: + str = fmt.Sprintf( + "resource_type=%s;operation_type=%s;mesh_id=%s;revision=%s;context=%s;operator=%s;ctime=%s", + string(entry.ResourceType), string(entry.OperationType), entry.MeshID, entry.Revision, + entry.Context, entry.Operator, entry.CreateTime.Format("2006-01-02 15:04:05")) + } + h.logger.Info(str) +} diff --git a/plugin/parsePassword.go b/plugin/parsePassword.go new file mode 100644 index 000000000..72f237cc8 --- /dev/null +++ b/plugin/parsePassword.go @@ -0,0 +1,52 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 plugin + +import ( + "github.com/polarismesh/polaris-server/common/log" + "os" + "sync" +) + +var ( + passwordOnce = &sync.Once{} +) + +// 密码插件 +type ParsePassword interface { + Plugin + ParsePassword(cipher string) (string, error) +} + +// 获取解析密码插件 +func GetParsePassword() ParsePassword { + c := &config.ParsePassword + plugin, exist := pluginSet[c.Name] + if !exist { + return nil + } + + passwordOnce.Do(func() { + if err := plugin.Initialize(c); err != nil { + log.Errorf("plugin init err: %s", err.Error()) + os.Exit(-1) + } + }) + + return plugin.(ParsePassword) +} diff --git a/plugin/parsePassword/README.md b/plugin/parsePassword/README.md new file mode 100644 index 000000000..bbdae3e8c --- /dev/null +++ b/plugin/parsePassword/README.md @@ -0,0 +1 @@ +# 密码插件 \ No newline at end of file diff --git a/plugin/parsePassword/parse.go b/plugin/parsePassword/parse.go new file mode 100644 index 000000000..636716a03 --- /dev/null +++ b/plugin/parsePassword/parse.go @@ -0,0 +1,53 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 parseCode + +import "github.com/polarismesh/polaris-server/plugin" + +const ( + PluginName = "localParse" +) + +// 初始化注册函数 +func init() { + plugin.RegisterPlugin(PluginName, &Password{}) +} + +// 密码插件 +type Password struct { +} + +// 返回插件名字 +func (p *Password) Name() string { + return PluginName +} + +// 销毁插件 +func (p *Password) Destroy() error { + return nil +} + +// 插件初始化 +func (p *Password) Initialize(c *plugin.ConfigEntry) error { + return nil +} + +// 解析密码 +func (p *Password) ParsePassword(cipher string) (string, error) { + return "", nil +} diff --git a/plugin/plugin.go b/plugin/plugin.go new file mode 100644 index 000000000..b5e78fecb --- /dev/null +++ b/plugin/plugin.go @@ -0,0 +1,78 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 plugin + +import ( + "fmt" + "sync" +) + +var ( + pluginSet = make(map[string]Plugin) + config = &Config{} + once = &sync.Once{} +) + +/** + * @brief 注册插件 + */ +func RegisterPlugin(name string, plugin Plugin) { + if _, exist := pluginSet[name]; exist { + panic(fmt.Sprintf("existed plugin: name=%v", name)) + } + + pluginSet[name] = plugin +} + +/** + * @brief 设置插件配置 + */ +func SetPluginConfig(c *Config) { + config = c +} + +/** + * @brief 通用插件接口 + */ +type Plugin interface { + Name() string + Initialize(c *ConfigEntry) error + Destroy() error +} + +/** + * @brief 单个插件配置 + */ +type ConfigEntry struct { + Name string `yaml:"name"` + Option map[string]interface{} `yaml:"option"` +} + +/** + * @brief 插件配置 + */ +type Config struct { + CMDB ConfigEntry `yaml:"cmdb"` + RateLimit ConfigEntry `yaml:"ratelimit"` + History ConfigEntry `yaml:"history"` + Statis ConfigEntry `yaml:"statis"` + DiscoverStatis ConfigEntry `yaml:"discoverStatis"` + ParsePassword ConfigEntry `yaml:"parsePassword"` + Auth ConfigEntry `yaml:"auth"` + MeshResourceValidate ConfigEntry `yaml:"meshResourceValidate"` +} diff --git a/plugin/ratelimit.go b/plugin/ratelimit.go new file mode 100644 index 000000000..b8cb980c1 --- /dev/null +++ b/plugin/ratelimit.go @@ -0,0 +1,84 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 plugin + +import ( + "github.com/polarismesh/polaris-server/common/log" + "os" + "sync" +) + +type RatelimitType int + +const ( + // 基于ip的流控 + IPRatelimit RatelimitType = iota + 1 + + // 基于接口级限流 + APIRatelimit + + // 基于service的流控 + ServiceRatelimit + + // 基于Instance的限流 + InstanceRatelimit +) + +var RatelimitStr = map[RatelimitType]string{ + IPRatelimit: "ip-limit", + APIRatelimit: "api-limit", + ServiceRatelimit: "service-limit", + InstanceRatelimit: "instance-limit", +} + +var ( + ratelimitOnce = sync.Once{} +) + +/** + * @brief Ratelimit插件接口 + */ +type Ratelimit interface { + Plugin + + // 是否允许访问, true: 允许, false: 不允许 TODO + // 参数rateType即限流类型,id为限流的key + // 如果rateType为RatelimitIP则id为ip, rateType为RatelimitService则id为ip_namespace_service或ip_serviceId + Allow(typ RatelimitType, key string) bool +} + +/** + * @brief 获取RateLimit插件 + */ +func GetRatelimit() Ratelimit { + c := &config.RateLimit + + plugin, exist := pluginSet[c.Name] + if !exist { + return nil + } + + ratelimitOnce.Do(func() { + if err := plugin.Initialize(c); err != nil { + log.Errorf("plugin init err: %s", err.Error()) + os.Exit(-1) + } + }) + + return plugin.(Ratelimit) +} diff --git a/plugin/ratelimit/README.md b/plugin/ratelimit/README.md new file mode 100644 index 000000000..57840b946 --- /dev/null +++ b/plugin/ratelimit/README.md @@ -0,0 +1 @@ +# 访问频率限制 diff --git a/plugin/ratelimit/lrurate/base.go b/plugin/ratelimit/lrurate/base.go new file mode 100644 index 000000000..323a99299 --- /dev/null +++ b/plugin/ratelimit/lrurate/base.go @@ -0,0 +1,79 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 lrurate + +import ( + "github.com/hashicorp/golang-lru" + "golang.org/x/time/rate" + "hash/crc32" +) + +var ( + ipLruCache *lru.Cache + serviceLruCache *lru.Cache +) + +// 初始化lru组件 +func initEnv() error { + var err error + + ipLruCache, err = lru.New(ratelimitIPLruSize) + if err != nil { + return err + } + + serviceLruCache, err = lru.New(ratelimitServiceLruSize) + if err != nil { + return err + } + + return nil +} + +// crc32取字符串hash值 +func hash(str string) uint32 { + return crc32.ChecksumIEEE([]byte(str)) +} + +// ip限流 +func allowIP(id string) bool { + key := hash(id) + + ipLruCache.ContainsOrAdd(key, rate.NewLimiter(rate.Limit(ratelimitIPRate), ratelimitIPBurst)) + + value, ok := ipLruCache.Get(key) + if ok { + return value.(*rate.Limiter).Allow() + } + + return true +} + +// service限流 +func allowService(id string) bool { + key := hash(id) + + serviceLruCache.ContainsOrAdd(key, rate.NewLimiter(rate.Limit(ratelimitServiceRate), ratelimitServiceBurst)) + + value, ok := serviceLruCache.Get(key) + if ok { + return value.(*rate.Limiter).Allow() + } + + return true +} diff --git a/plugin/ratelimit/lrurate/lrurate.go b/plugin/ratelimit/lrurate/lrurate.go new file mode 100644 index 000000000..062f36160 --- /dev/null +++ b/plugin/ratelimit/lrurate/lrurate.go @@ -0,0 +1,148 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 lrurate + +import ( + "errors" + "github.com/polarismesh/polaris-server/plugin" +) + +const ( + PluginName = "lrurate" +) + +var ( + ratelimitIPLruSize int + ratelimitIPRate int + ratelimitIPBurst int + ratelimitServiceLruSize int + ratelimitServiceRate int + ratelimitServiceBurst int +) + +// 自注册到插件列表 +func init() { + plugin.RegisterPlugin(PluginName, &LRURate{}) +} + +// LRURate Ratelimit +type LRURate struct { +} + +// 返回插件名 +func (m *LRURate) Name() string { + return PluginName +} + +// 初始化函数 +func (m *LRURate) Initialize(c *plugin.ConfigEntry) error { + if err := parseRateLimitIPOption(c.Option); err != nil { + return err + } + if err := parseRateLimitServiceOption(c.Option); err != nil { + return err + } + + if err := initEnv(); err != nil { + return err + } + + return nil +} + +// 获取IP相关的参数 +func parseRateLimitIPOption(opt map[string]interface{}) error { + var ok bool + var val interface{} + + if val = opt["ratelimitIPLruSize"]; val == nil { + return errors.New("not found ratelimit::lrurate::ratelimitIPLruSize") + } + + if ratelimitIPLruSize, ok = val.(int); !ok || ratelimitIPLruSize <= 0 { + return errors.New("invalid ratelimit::lrurate::ratelimitIPLruSize, must be int and > 0") + } + + if val = opt["ratelimitIPRate"]; val == nil { + return errors.New("not found ratelimit::lrurate::ratelimitIPRate") + } + + if ratelimitIPRate, ok = val.(int); !ok || ratelimitIPRate <= 0 { + return errors.New("invalid ratelimit::lrurate::ratelimitIPRate, must be int and > 0") + } + + if val = opt["ratelimitIPBurst"]; val == nil { + return errors.New("not found ratelimit::lrurate::ratelimitIPBurst") + } + + if ratelimitIPBurst, ok = val.(int); !ok || ratelimitIPBurst <= 0 { + return errors.New("invalid ratelimit::lrurate::ratelimitIPBurst, must be int and > 0") + } + + return nil +} + +// 获取service相关的参数 +func parseRateLimitServiceOption(opt map[string]interface{}) error { + var ok bool + var val interface{} + + if val = opt["ratelimitServiceLruSize"]; val == nil { + return errors.New("not found ratelimit::lrurate::ratelimitServiceLruSize") + } + + if ratelimitServiceLruSize, ok = val.(int); !ok || ratelimitServiceLruSize <= 0 { + return errors.New("invalid ratelimit::lrurate::ratelimitServiceLruSize, must be int and > 0") + } + + if val = opt["ratelimitServiceRate"]; val == nil { + return errors.New("not found ratelimit::lrurate::ratelimitServiceRate") + } + + if ratelimitServiceRate, ok = val.(int); !ok || ratelimitServiceRate <= 0 { + return errors.New("invalid ratelimit::lrurate::ratelimitServiceRate, must be int and > 0") + } + + if val = opt["ratelimitServiceBurst"]; val == nil { + return errors.New("not found ratelimit::lrurate::ratelimitServiceBurst") + } + + if ratelimitServiceBurst, ok = val.(int); !ok || ratelimitServiceBurst <= 0 { + return errors.New("invalid ratelimit::lrurate::ratelimitServiceBurst, must be int and > 0") + } + + return nil +} + +// 销毁函数 +func (m *LRURate) Destroy() error { + return nil +} + +// 实现CMDB插件接口 +func (m *LRURate) Allow(rateType plugin.RatelimitType, id string) bool { + switch plugin.RatelimitType(rateType) { + case plugin.IPRatelimit: + return allowIP(id) + case plugin.ServiceRatelimit: + return allowService(id) + } + + // 默认允许访问 + return true +} diff --git a/plugin/ratelimit/lrurate/lrurate_test.go b/plugin/ratelimit/lrurate/lrurate_test.go new file mode 100644 index 000000000..e42bf0fd9 --- /dev/null +++ b/plugin/ratelimit/lrurate/lrurate_test.go @@ -0,0 +1,267 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 lrurate + +import ( + "github.com/polarismesh/polaris-server/plugin" + "testing" +) + +/** + * @brief 获取初始化的entry + */ +func getEntry() *plugin.ConfigEntry { + entry := plugin.ConfigEntry{ + Option: make(map[string]interface{}), + } + entry.Option["ratelimitIPLruSize"] = 10 + entry.Option["ratelimitIPRate"] = 10 + entry.Option["ratelimitIPBurst"] = 10 + entry.Option["ratelimitServiceLruSize"] = 10 + entry.Option["ratelimitServiceRate"] = 10 + entry.Option["ratelimitServiceBurst"] = 10 + + return &entry +} + +/** + * @brief 获取未初始化的entry + */ +func getUninitalizedEntry() *plugin.ConfigEntry { + entry := plugin.ConfigEntry{ + Option: make(map[string]interface{}), + } + + return &entry +} + +/** + * @brief 测试错误配置 + */ +func TestInvalidConfig(t *testing.T) { + entry := getUninitalizedEntry() + s := &LRURate{} + + t.Run("InvalidIPLruSize", func(t *testing.T) { + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + + entry.Option["ratelimitIPLruSize"] = 0 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + }) + + t.Run("InvalidIPLruRate", func(t *testing.T) { + entry.Option["ratelimitIPLruSize"] = 10 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + + entry.Option["ratelimitIPRate"] = 0 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + }) + + t.Run("InvalidIPLruBurst", func(t *testing.T) { + entry.Option["ratelimitIPRate"] = 10 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + + entry.Option["ratelimitIPBurst"] = 0 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + }) + + t.Run("InvalidServiceLruSize", func(t *testing.T) { + entry.Option["ratelimitIPBurst"] = 10 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + + entry.Option["ratelimitServiceLruSize"] = 0 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + }) + + t.Run("InvalidServiceLruRate", func(t *testing.T) { + entry.Option["ratelimitServiceLruSize"] = 10 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + + entry.Option["ratelimitServiceRate"] = 0 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + }) + + t.Run("InvalidServiceLruBurst", func(t *testing.T) { + entry.Option["ratelimitServiceRate"] = 10 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + + entry.Option["ratelimitServiceBurst"] = 0 + if err := s.Initialize(entry); err == nil { + t.Errorf("failed, shouldn't Initialize") + } + }) +} + +/** + * @brief 测试正确配置 + */ +func TestValidConfig(t *testing.T) { + t.Run("ValidConfig", func(t *testing.T) { + entry := getEntry() + s := &LRURate{} + if err := s.Initialize(entry); err != nil { + t.Errorf("failed: %s", err) + } else { + t.Logf("pass") + } + }) +} + +/** + * @brief 测试一般函数 + */ +func TestCommon(t *testing.T) { + entry := getEntry() + s := &LRURate{} + if err := s.Initialize(entry); err != nil { + t.Fatalf("failed: %s", err) + } else { + t.Logf("pass") + } + + t.Run("Name", func(t *testing.T) { + if s.Name() != "lrurate" { + t.Errorf("failed, invalid plgin name: %s", s.Name()) + } else { + t.Logf("pass") + } + }) + + t.Run("Destroy", func(t *testing.T) { + if s.Destroy() != nil { + t.Errorf("failed, bad Destroy") + } else { + t.Logf("pass") + } + }) +} + +/** + * @brief 测试限流功能 + */ +func TestRateLimit(t *testing.T) { + ipLruSize := 10 + ipRate := 100 + ipBurst := 200 + + serviceLruSize := 10 + serviceRate := 50 + serviceBurst := 100 + + entry := plugin.ConfigEntry{ + Option: make(map[string]interface{}), + } + entry.Option["ratelimitIPLruSize"] = ipLruSize + entry.Option["ratelimitIPRate"] = ipRate + entry.Option["ratelimitIPBurst"] = ipBurst + entry.Option["ratelimitServiceLruSize"] = serviceLruSize + entry.Option["ratelimitServiceRate"] = serviceRate + entry.Option["ratelimitServiceBurst"] = serviceBurst + + s := LRURate{} + if err := s.Initialize(&entry); err != nil { + t.Errorf("failed: %s", err) + } else { + t.Logf("pass") + } + + t.Run("RateLimit_UNKNOWN", func(t *testing.T) { + count := 0 + total := 2 * ipBurst + for i := 0; i < total; i++ { + if s.Allow(10, "19216811") { + count++ + } + } + + if count != total { + t.Errorf("failed, count: %d not %d", count, total) + } else { + t.Logf("pass") + } + }) + + t.Run("RateLimit_IP", func(t *testing.T) { + count := 0 + total := ipBurst + 10 + for i := 0; i < total; i++ { + if s.Allow(plugin.IPRatelimit, "19216811") { + count++ + } + } + + if count != ipBurst { + t.Errorf("failed, count: %d not %d", count, ipBurst) + } else { + t.Logf("pass") + } + }) + + t.Run("RateLimit_SERVICE_SERVICE", func(t *testing.T) { + count := 0 + total := serviceBurst + 10 + for i := 0; i < total; i++ { + if s.Allow(plugin.ServiceRatelimit, "hello_world") { + count++ + } + } + + if count != serviceBurst { + t.Errorf("failed, count: %d not %d", count, serviceBurst) + } else { + t.Logf("pass") + } + }) + + t.Run("RateLimit_SERVICE_SERVICEID", func(t *testing.T) { + count := 0 + for i := 0; i < serviceBurst+10; i++ { + if s.Allow(plugin.ServiceRatelimit, "helloworld") { + count++ + } + } + + if count != serviceBurst { + t.Errorf("failed, count: %d not %d", count, serviceBurst) + } else { + t.Logf("pass") + } + }) +} diff --git a/plugin/ratelimit/tokenBucket/api_limit.go b/plugin/ratelimit/tokenBucket/api_limit.go new file mode 100644 index 000000000..2536feba9 --- /dev/null +++ b/plugin/ratelimit/tokenBucket/api_limit.go @@ -0,0 +1,179 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import ( + "errors" + "github.com/polarismesh/polaris-server/common/log" + "golang.org/x/time/rate" + "sync" +) + +// 接口限流类 +type apiRatelimit struct { + rules map[string]*BucketRatelimit // 存储规则 + apis *sync.Map // 存储api -> apiLimiter + config *APILimitConfig +} + +// 新建一个接口限流类 +func newAPIRatelimit(config *APILimitConfig) (*apiRatelimit, error) { + art := &apiRatelimit{} + if err := art.initialize(config); err != nil { + return nil, err + } + + return art, nil +} + +// 接口限流具体实现 +func (art *apiRatelimit) initialize(config *APILimitConfig) error { + art.config = config + if config == nil || !config.Open { + log.Infof("[Plugin][%s] api rate limit is not open", PluginName) + return nil + } + + log.Infof("[Plugin][%s] api ratelimit open", PluginName) + if err := art.parseRules(config.Rules); err != nil { + return err + } + if err := art.parseApis(config.Apis); err != nil { + return err + } + return nil +} + +// 解析限流规则 +func (art *apiRatelimit) parseRules(rules []*RateLimitRule) error { + if len(rules) == 0 { + return errors.New("invalid api rate limit config, rules are empty") + } + + art.rules = make(map[string]*BucketRatelimit) + for _, entry := range rules { + if entry.Name == "" { + return errors.New("invalid api rate limit config, some rules name are empty") + } + if entry.Limit == nil { + return errors.New("invalid api rate limit config, some rules limit are null") + } + if entry.Limit.Open && (entry.Limit.Bucket <= 0 || entry.Limit.Rate <= 0) { + return errors.New("invalid api rate limit config, rules bucket or rate is more than 0") + } + art.rules[entry.Name] = entry.Limit + } + + return nil +} + +// 解析每个api的限流 +func (art *apiRatelimit) parseApis(apis []*APILimitInfo) error { + if len(apis) == 0 { + return errors.New("invalid api rate limit config, apis are empty") + } + + art.apis = new(sync.Map) + for _, entry := range apis { + if entry.Name == "" { + return errors.New("invalid api rate limit config, api name is empty") + } + if entry.Rule == "" { + return errors.New("invalid api rate limit config, api rule is empty") + } + limit, ok := art.rules[entry.Rule] + if !ok { + return errors.New("invalid api rate limit config, api rule is not found") + } + art.createLimiter(entry.Name, limit) + } + + return nil +} + +// 创建一个私有limiter +func (art *apiRatelimit) createLimiter(name string, limit *BucketRatelimit) *apiLimiter { + limiter := newAPILimiter(name, limit.Open, limit.Rate, limit.Bucket) + art.apis.Store(name, limiter) + return limiter +} + +// 获取limiter +func (art *apiRatelimit) acquireLimiter(name string) *apiLimiter { + if value, ok := art.apis.Load(name); ok { + return value.(*apiLimiter) + } + + return nil +} + +// 系统是否开启API限流 +func (art *apiRatelimit) isOpen() bool { + return art.config != nil && art.config.Open +} + +// 令牌桶限流 +func (art *apiRatelimit) allow(name string) bool { + // 检查系统是否开启API限流 + // 系统不开启API限流,则返回true通过 + if !art.isOpen() { + return true + } + + limiter := art.acquireLimiter(name) + if limiter == nil { + // 找不到limiter,默认返回true + return true + } + + return limiter.Allow() +} + +// 封装rate.Limiter +// 每个API接口对应一个apiLimiter +type apiLimiter struct { + open bool // 该接口是否开启限流 + name string // 接口名 + *rate.Limiter // 令牌桶对象 +} + +// 新建一个apiLimiter +func newAPILimiter(name string, open bool, r int, b int) *apiLimiter { + limiter := &apiLimiter{ + open: false, + name: name, + Limiter: nil, + } + if !open { + return limiter + } + + limiter.open = true + limiter.Limiter = rate.NewLimiter(rate.Limit(r), b) + return limiter +} + +// 继承rate.Limiter.Allow函数 +func (a *apiLimiter) Allow() bool { + // 当前接口不开启限流 + if !a.open { + return true + } + + return a.Limiter.Allow() +} diff --git a/plugin/ratelimit/tokenBucket/api_limit_test.go b/plugin/ratelimit/tokenBucket/api_limit_test.go new file mode 100644 index 000000000..32183483b --- /dev/null +++ b/plugin/ratelimit/tokenBucket/api_limit_test.go @@ -0,0 +1,205 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import ( + . "github.com/smartystreets/goconvey/convey" + "testing" + "time" +) + +// 校验新建apiRate +func newAPIRateLimitCheck(t *testing.T, config *APILimitConfig) *apiRatelimit { + apiLimit, err := newAPIRatelimit(config) + if err != nil { + t.Fatalf("error: %s", err.Error()) + } + return apiLimit +} + +// 正常场景测试 +func TestAPIRateLimitAllow(t *testing.T) { + config := &APILimitConfig{ + Open: true, + Rules: []*RateLimitRule{ + {Name: "rule-a", Limit: &BucketRatelimit{true, 10, 2}}, + {Name: "rule-b", Limit: &BucketRatelimit{true, 10, 1}}, + {Name: "rule-c", Limit: &BucketRatelimit{Open: false}}, + }, + Apis: []*APILimitInfo{ + {Name: "api1", Rule: "rule-a"}, + {Name: "api2", Rule: "rule-b"}, + {Name: "api3", Rule: "rule-c"}, + }, + } + limiter := newAPIRateLimitCheck(t, config) + Convey("正常请求,令牌桶限流可以生效", t, func() { + allowCnt := 0 + for i := 0; i < limiter.rules["rule-a"].Bucket*2; i++ { + if ok := limiter.allow("api1"); ok { + allowCnt++ + } + } + So(allowCnt, ShouldEqual, limiter.rules["rule-a"].Bucket) + }) + Convey("持续请求,不超过限制,可以一直请求下去", t, func() { + for i := 0; i < 15; i++ { + So(limiter.allow("api2"), ShouldEqual, true) + time.Sleep(time.Millisecond*1 + time.Second) + } + }) + Convey("api不限制,可以随便请求", t, func() { + for i := 0; i < limiter.rules["rule-c"].Bucket*2; i++ { + So(limiter.allow("api3"), ShouldEqual, true) + } + }) + Convey("api不存在rule,不做限制", t, func() { + cnt := 0 + for i := 0; i < 10000; i++ { + cnt++ + } + So(cnt, ShouldEqual, 10000) + }) +} + +// 配置校验 +func TestAPILimitConfig(t *testing.T) { + Convey("api-limit配置为空,可以正常执行", t, func() { + limiter := newAPIRateLimitCheck(t, nil) + So(limiter, ShouldNotBeNil) + So(limiter.isOpen(), ShouldEqual, false) + }) + Convey("可以通过系统open开关,关闭api限流", t, func() { + config := &APILimitConfig{ + Open: false, + Rules: []*RateLimitRule{ + {Name: "rule-1", + Limit: &BucketRatelimit{Open: true, Bucket: 10, Rate: 5}}, + }, + Apis: []*APILimitInfo{{Name: "api-1", Rule: "rule-1"}}, + } + limiter := newAPIRateLimitCheck(t, config) + So(limiter.isOpen(), ShouldEqual, false) + for i := 0; i < 15; i++ { + So(limiter.allow("api-1"), ShouldEqual, true) + } + }) + Convey("rules为空,报错", t, func() { + config := &APILimitConfig{Open: true} + limiter, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + So(limiter, ShouldBeNil) + }) + Convey("api为空,报错", t, func() { + config := &APILimitConfig{ + Open: true, + Rules: []*RateLimitRule{ + {Name: "rule-1", + Limit: &BucketRatelimit{Open: true, Bucket: 10, Rate: 5}}, + }, + Apis: []*APILimitInfo{}, + } + _, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + }) +} + +// api-limit规则配置测试 +func TestAPILimitConfigRule(t *testing.T) { + config := &APILimitConfig{ + Open: true, + Apis: []*APILimitInfo{{Name: "api-1", Rule: "rule-1"}}, + } + Convey("rules内部参数,name不能为空", t, func() { + config.Rules = []*RateLimitRule{ + {Name: "", + Limit: &BucketRatelimit{Open: true, Bucket: 0, Rate: 5}}, + } + _, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + }) + Convey("rules内部参数,limit不能为空", t, func() { + config.Rules = []*RateLimitRule{ + {Name: "rule-1", Limit: nil}, + } + _, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + }) + Convey("rules内部参数,open为false,bucket和rate可以是任意值", t, func() { + config.Rules = []*RateLimitRule{ + {Name: "", + Limit: &BucketRatelimit{Open: false}}, + } + _, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + }) + Convey("rules内部参数,open的规则,bucket和rate必须大于0", t, func() { + config.Rules = []*RateLimitRule{ + {Name: "rule-1", + Limit: &BucketRatelimit{Open: true, Bucket: 0, Rate: 5}}, + } + _, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + t.Logf("%s", err.Error()) + + config.Rules[0].Limit.Bucket = 10 + config.Rules[0].Limit.Rate = 0 + _, err = newAPIRatelimit(config) + So(err, ShouldNotBeNil) + t.Logf("%s", err.Error()) + }) +} + +// apis配置测试 +func TestAPILimitConfigApi(t *testing.T) { + config := &APILimitConfig{ + Open: true, + Rules: []*RateLimitRule{ + {Name: "rule-1", + Limit: &BucketRatelimit{Open: true, Bucket: 10, Rate: 5}}, + }, + } + Convey("apis内部参数,apis为空,返回错误", t, func() { + _, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + t.Logf("%s", err.Error()) + }) + Convey("apis内部参数,部分参数为空,返回错误", t, func() { + config.Apis = []*APILimitInfo{{Name: "", Rule: ""}} + _, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + t.Logf("%s", err.Error()) + + config.Apis[0].Name = "123" + _, err = newAPIRatelimit(config) + So(err, ShouldNotBeNil) + t.Logf("%s", err.Error()) + + config.Apis[0].Rule = "rule-1" + newAPIRateLimitCheck(t, config) + }) + Convey("api内部参数,rule不存在,返回错误", t, func() { + config.Apis = []*APILimitInfo{{Name: "aaa", Rule: "bbb"}} + _, err := newAPIRatelimit(config) + So(err, ShouldNotBeNil) + t.Logf("%s", err.Error()) + + config.Apis[0].Rule = "rule-1" + newAPIRateLimitCheck(t, config) + }) +} diff --git a/plugin/ratelimit/tokenBucket/config.go b/plugin/ratelimit/tokenBucket/config.go new file mode 100644 index 000000000..cac49b859 --- /dev/null +++ b/plugin/ratelimit/tokenBucket/config.go @@ -0,0 +1,121 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import ( + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/mitchellh/mapstructure" +) + +// 限流配置类 +type Config struct { + // 是否启用远程配置,默认false。TODO 暂时无远程配置,后续版本补全 + RemoteConf bool `mapstructure:"remote-conf"` + + // IP限流相关配置 + IPLimitConf *ResourceLimitConfig `mapstructure:"ip-limit"` + + // 接口限流相关配置 + APILimitConf *APILimitConfig `mapstructure:"api-limit"` + + // 基于实例的限流配置 + InstanceLimitConf *ResourceLimitConfig `mapstructure:"instance-limit"` +} + +// 针对令牌桶的具体配置 +type BucketRatelimit struct { + // 是否开启限流 + Open bool `mapstructure:"open"` + + // 令牌桶大小 + Bucket int `mapstructure:"bucket"` + + // 每秒加入的令牌数 + Rate int `mapstructure:"rate"` +} + +// 基于资源的限流配置 +// 资源可以是:IP,实例,服务等 +type ResourceLimitConfig struct { + // 是否开启instance限流 + Open bool `mapstructure:"open"` + + // 全局限制规则,只有一条规则 + Global *BucketRatelimit `mapstructure:"global"` + + // 本地缓存最大多少个instance的限制器 + MaxResourceCacheAmount int `mapstructure:"resource-cache-amount"` + + // 白名单 + WhiteList []string `mapstructure:"white-list"` +} + +// api限流配置 +type APILimitConfig struct { + // 系统是否开启API限流 + Open bool `mapstructure:"open"` + + // 配置规则集合 + Rules []*RateLimitRule `mapstructure:"rules"` + + // 每个接口的单独配置 + Apis []*APILimitInfo `mapstructure:"apis"` +} + +// 限流规则 +type RateLimitRule struct { + // 规则名 + Name string `mapstructure:"name"` + + // 规则的限制 + Limit *BucketRatelimit `mapstructure:"limit"` +} + +// 每个接口的单独配置信息 +type APILimitInfo struct { + // 接口名,比如对于HTTP,就是:方法+URL + Name string `mapstructure:"name"` + + // 限制规则名 + Rule string `mapstructure:"rule"` +} + +// 把map解码为Config对象 +func decodeConfig(data map[string]interface{}) (*Config, error) { + if data == nil { + return nil, fmt.Errorf("plugin(%s) option is empty", PluginName) + } + var config Config + if err := mapstructure.Decode(data, &config); err != nil { + log.Errorf("[Plugin][%s] decode config err: %s", PluginName, err.Error()) + return nil, err + } + + /*log.Infof("%+v", config) + log.Infof("%+v", config.IPLimitConf.Global) + log.Infof("%+v", config.APILimitConf) + for _, entry := range config.APILimitConf.Rules { + log.Infof("%s->%+v", entry.Name, entry.Limit) + } + for _, entry := range config.APILimitConf.Apis { + log.Infof("%+v", entry) + }*/ + + return &config, nil +} diff --git a/plugin/ratelimit/tokenBucket/implement.go b/plugin/ratelimit/tokenBucket/implement.go new file mode 100644 index 000000000..bdf18af51 --- /dev/null +++ b/plugin/ratelimit/tokenBucket/implement.go @@ -0,0 +1,72 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import ( + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/plugin" +) + +// 插件初始化函数 +func (tb *tokenBucket) initialize(c *plugin.ConfigEntry) error { + config, err := decodeConfig(c.Option) + if err != nil { + log.Errorf("[Plugin][%s] initialize err: %s", PluginName, err.Error()) + return err + } + + tb.config = config + tb.limiters = make(map[plugin.RatelimitType]limiter) + + // IP限流 + irt, err := newResourceRatelimit(plugin.IPRatelimit, config.IPLimitConf) + if err != nil { + return err + } + tb.limiters[plugin.IPRatelimit] = irt + + // 接口限流 + art, err := newAPIRatelimit(config.APILimitConf) + if err != nil { + return err + } + tb.limiters[plugin.APIRatelimit] = art + + // 操作实例限流 + instance, err := newResourceRatelimit(plugin.InstanceRatelimit, config.InstanceLimitConf) + if err != nil { + return err + } + tb.limiters[plugin.InstanceRatelimit] = instance + + return nil +} + +// 插件的限流实现函数 +func (tb *tokenBucket) allow(typ plugin.RatelimitType, key string) bool { + // key为空,则不作限制 + if key == "" { + return true + } + l, ok := tb.limiters[typ] + if !ok { + return true + } + + return l.allow(key) +} diff --git a/plugin/ratelimit/tokenBucket/invoke.go b/plugin/ratelimit/tokenBucket/invoke.go new file mode 100644 index 000000000..2575a4f2b --- /dev/null +++ b/plugin/ratelimit/tokenBucket/invoke.go @@ -0,0 +1,48 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import ( + "github.com/polarismesh/polaris-server/plugin" +) + +// 实现Plugin接口 +type tokenBucket struct { + config *Config + limiters map[plugin.RatelimitType]limiter +} + +// 实现Plugin接口,Name方法 +func (tb *tokenBucket) Name() string { + return PluginName +} + +// 实现Plugin接口,Initialize方法 +func (tb *tokenBucket) Initialize(c *plugin.ConfigEntry) error { + return tb.initialize(c) +} + +// 实现Plugin接口,Destroy方法 +func (tb *tokenBucket) Destroy() error { + return nil +} + +// 限流接口实现 +func (tb *tokenBucket) Allow(typ plugin.RatelimitType, key string) bool { + return tb.allow(typ, key) +} diff --git a/plugin/ratelimit/tokenBucket/invoke_test.go b/plugin/ratelimit/tokenBucket/invoke_test.go new file mode 100644 index 000000000..bc43d5d46 --- /dev/null +++ b/plugin/ratelimit/tokenBucket/invoke_test.go @@ -0,0 +1,126 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import ( + "github.com/polarismesh/polaris-server/plugin" + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +// 返回一个基础的正常option配置 +func baseConfigOption() map[string]interface{} { + return map[string]interface{}{ + "ip-limit": &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{true, 10, 2}, + MaxResourceCacheAmount: 100, + }, + "api-limit": &APILimitConfig{ + Open: true, + Rules: []*RateLimitRule{{ + Name: "rule-1", + Limit: &BucketRatelimit{true, 5, 1}, + }}, + Apis: []*APILimitInfo{{Name: "api-1", Rule: "rule-1"}}, + }, + } +} + +// 对插件名字接口实现的测试 +func TestTokenBucket_Name(t *testing.T) { + tb := &tokenBucket{} + Convey("返回插件名服务预期", t, func() { + So(tb.Name(), ShouldEqual, PluginName) + }) +} + +// 测试初始化函数 +func TestTokenBucket_Initialize(t *testing.T) { + configEntry := &plugin.ConfigEntry{Name: PluginName} + tb := &tokenBucket{} + Convey("配置option为空,返回失败", t, func() { + So(tb.Initialize(configEntry), ShouldNotBeNil) + }) + Convey("配置字段不对,不影响解析,配置不生效", t, func() { + configEntry.Option = map[string]interface{}{"aaa": 123} + So(tb.Initialize(configEntry), ShouldBeNil) + }) + Convey("无效ip-limit配置,返回失败", t, func() { + configEntry.Option = map[string]interface{}{ + "ip-limit": &ResourceLimitConfig{ + Open: true, + Global: nil, + MaxResourceCacheAmount: 100, + }, + } + So(tb.Initialize(configEntry), ShouldNotBeNil) + }) + Convey("无效api-limit配置,返回失败", t, func() { + configEntry.Option = map[string]interface{}{ + "api-limit": &APILimitConfig{Open: true}, + } + So(tb.Initialize(configEntry), ShouldNotBeNil) + }) + Convey("配置有效,可以正常初始化", t, func() { + configEntry.Option = baseConfigOption() + So(tb.Initialize(configEntry), ShouldBeNil) + So(tb.limiters[plugin.IPRatelimit], ShouldNotBeNil) + So(tb.limiters[plugin.APIRatelimit], ShouldNotBeNil) + }) +} + +// 测试Allow函数 +func TestTokenBucket_Allow(t *testing.T) { + configEntry := &plugin.ConfigEntry{Name: PluginName} + configEntry.Option = baseConfigOption() + tb := &tokenBucket{} + if err := tb.Initialize(configEntry); err != nil { + t.Fatalf("error: %s", err.Error()) + } + ipLimiter := tb.limiters[plugin.IPRatelimit].(*resourceRatelimit) + apiLimiter := tb.limiters[plugin.APIRatelimit].(*apiRatelimit) + Convey("IP正常限流", t, func() { + cnt := 0 + for i := 0; i < ipLimiter.config.Global.Bucket*2; i++ { + if ok := tb.Allow(plugin.IPRatelimit, "1.2.3.4"); ok { + cnt++ + } + } + So(cnt, ShouldEqual, ipLimiter.config.Global.Bucket) + // 其他IP可以正常通过 + So(tb.Allow(plugin.IPRatelimit, "2.3.4.5"), ShouldEqual, true) + }) + Convey("api正常限流", t, func() { + cnt := 0 + for i := 0; i < apiLimiter.rules["rule-1"].Bucket*2; i++ { + if ok := tb.Allow(plugin.APIRatelimit, "api-1"); ok { + cnt++ + } + } + So(cnt, ShouldEqual, apiLimiter.rules["rule-1"].Bucket) + // 其他接口没有限流的可以通过 + So(tb.Allow(plugin.APIRatelimit, "api-2"), ShouldEqual, true) + }) + Convey("空的key,正常限流", t, func() { + So(tb.Allow(plugin.APIRatelimit, ""), ShouldEqual, true) + }) + Convey("非法的限制类型,直接通过", t, func() { + So(tb.Allow(plugin.RatelimitType(100), "123"), ShouldEqual, true) + }) +} diff --git a/plugin/ratelimit/tokenBucket/limiter.go b/plugin/ratelimit/tokenBucket/limiter.go new file mode 100644 index 000000000..2d364dd10 --- /dev/null +++ b/plugin/ratelimit/tokenBucket/limiter.go @@ -0,0 +1,23 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +// 限制器 +type limiter interface { + allow(key string) bool +} diff --git a/plugin/ratelimit/tokenBucket/register.go b/plugin/ratelimit/tokenBucket/register.go new file mode 100644 index 000000000..a08075861 --- /dev/null +++ b/plugin/ratelimit/tokenBucket/register.go @@ -0,0 +1,29 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import "github.com/polarismesh/polaris-server/plugin" + +const ( + PluginName = "token-bucket" +) + +// 插件入口注册函数 +func init() { + plugin.RegisterPlugin(PluginName, &tokenBucket{}) +} diff --git a/plugin/ratelimit/tokenBucket/resource_limiter.go b/plugin/ratelimit/tokenBucket/resource_limiter.go new file mode 100644 index 000000000..b5f5a3b1a --- /dev/null +++ b/plugin/ratelimit/tokenBucket/resource_limiter.go @@ -0,0 +1,116 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import ( + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/plugin" + lru "github.com/hashicorp/golang-lru" + "golang.org/x/time/rate" +) + +// 资源限制器 +type resourceRatelimit struct { + typStr string + resources *lru.Cache + whiteList map[string]bool + config *ResourceLimitConfig +} + +// 新建资源限制器 +func newResourceRatelimit(typ plugin.RatelimitType, config *ResourceLimitConfig) (*resourceRatelimit, error) { + r := &resourceRatelimit{typStr: plugin.RatelimitStr[typ]} + if err := r.initialize(config); err != nil { + return nil, err + } + + return r, nil +} + +// initialize +func (r *resourceRatelimit) initialize(config *ResourceLimitConfig) error { + r.config = config + if config == nil || config.Open == false { + log.Infof("[Plugin][%s] resource(%s) ratelimit is not open", PluginName, r.typStr) + return nil + } + + if config.Global == nil { + return fmt.Errorf("resource(%s) global ratelimit rule is empty", r.typStr) + } + if config.Global.Bucket <= 0 || config.Global.Rate <= 0 { + return fmt.Errorf("resource(%s) ratelimit global bucket or rate invalid", r.typStr) + } + if config.MaxResourceCacheAmount <= 0 { + return fmt.Errorf("resource(%s) max resource amount is invalid", r.typStr) + } + + cache, err := lru.New(config.MaxResourceCacheAmount) + if err != nil { + log.Errorf("[Plugin][%s] resource(%s) ratelimit create new lru cache err: %s", + PluginName, r.typStr, err.Error()) + return err + } + r.resources = cache + + r.whiteList = make(map[string]bool) + for _, item := range config.WhiteList { + r.whiteList[item] = true + } + + log.Infof("[Plugin][%s] resource(%s) ratelimit open", PluginName, r.typStr) + return nil +} + +// 限流是否开启 +func (r *resourceRatelimit) isOpen() bool { + return r.config != nil && r.config.Open +} + +// 检查是否属于白名单,属于的话,则不限流 +func (r *resourceRatelimit) isWhiteList(key string) bool { + _, ok := r.whiteList[key] + return ok +} + +// 实现limiter +func (r *resourceRatelimit) allow(key string) bool { + if ok := r.isOpen(); !ok { + return true + } + if ok := r.isWhiteList(key); ok { + return true + } + + value, ok := r.resources.Get(key) + if !ok { + r.resources.ContainsOrAdd(key, + rate.NewLimiter(rate.Limit(r.config.Global.Rate), r.config.Global.Bucket)) + // 上面已经加了value,这里正常情况会有value + value, ok = r.resources.Get(key) + if !ok { + // 还找不到,打印日志,返回true + log.Warnf("[Plugin][%s] not found the resources(%s) key(%s) in the cache", + PluginName, r.typStr, key) + return true + } + } + + return value.(*rate.Limiter).Allow() +} diff --git a/plugin/ratelimit/tokenBucket/resource_limiter_test.go b/plugin/ratelimit/tokenBucket/resource_limiter_test.go new file mode 100644 index 000000000..4c1bcba7f --- /dev/null +++ b/plugin/ratelimit/tokenBucket/resource_limiter_test.go @@ -0,0 +1,166 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 tokenBucket + +import ( + "fmt" + "github.com/polarismesh/polaris-server/plugin" + . "github.com/smartystreets/goconvey/convey" + "testing" + "time" +) + +// 测试新建 +func TestNewResourceRatelimit(t *testing.T) { + Convey("测试新建一个资源限制器", t, func() { + Convey("config为空", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, nil) + So(limiter, ShouldNotBeNil) + So(err, ShouldBeNil) + }) + Convey("不开启限制器", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: false, + }) + So(limiter, ShouldNotBeNil) + So(err, ShouldBeNil) + So(limiter.allow("11111"), ShouldBeTrue) + }) + Convey("开启了限制器,global为空", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + }) + So(limiter, ShouldBeNil) + So(err, ShouldNotBeNil) + t.Logf("%s", err.Error()) + }) + Convey("开启了限制器,global其他参数不合法", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{}, + }) + So(limiter, ShouldBeNil) + So(err, ShouldNotBeNil) + + limiter, err = newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{true, 10, 10}, + }) + So(limiter, ShouldBeNil) + So(err, ShouldNotBeNil) + + limiter, err = newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{true, 10, 10}, + MaxResourceCacheAmount: -1, + }) + So(limiter, ShouldBeNil) + So(err, ShouldNotBeNil) + }) + Convey("正常新建限制器", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{true, 10, 5}, + MaxResourceCacheAmount: 10, + }) + So(limiter, ShouldNotBeNil) + So(err, ShouldBeNil) + }) + Convey("白名单正常解析", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{true, 10, 5}, + MaxResourceCacheAmount: 10, + WhiteList: []string{"1", "2", "3"}, + }) + So(limiter, ShouldNotBeNil) + So(err, ShouldBeNil) + So(len(limiter.whiteList), ShouldEqual, 3) + }) + }) +} + +// 测试allow +func TestResourceAllow(t *testing.T) { + Convey("测试allow", t, func() { + Convey("正常限流", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{true, 5, 5}, + MaxResourceCacheAmount: 2, + }) + So(err, ShouldBeNil) + cnt := 0 + for i := 0; i <= limiter.config.Global.Rate*2; i++ { + if ok := limiter.allow("12345"); ok { + cnt++ + } + } + So(cnt, ShouldEqual, limiter.config.Global.Rate) + // 其他key,可以通过 + So(limiter.allow("67890"), ShouldBeTrue) + + // 1秒之后,12345又可以通过 + time.Sleep(time.Second + time.Millisecond*10) + So(limiter.allow("12345"), ShouldBeTrue) + So(limiter.allow("67890"), ShouldBeTrue) + So(limiter.allow("13579"), ShouldBeTrue) + }) + Convey("max-resource测试", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{true, 5, 5}, + MaxResourceCacheAmount: 2, + }) + So(err, ShouldBeNil) + cnt := 0 + for i := 0; i < limiter.config.Global.Rate*20; i++ { + if ok := limiter.allow(fmt.Sprintf("key-%d", i)); ok { + cnt++ + } + } + // 不同key,全部通过 + So(cnt, ShouldEqual, limiter.config.Global.Rate*20) + }) + Convey("白名单测试", func() { + limiter, err := newResourceRatelimit(plugin.InstanceRatelimit, &ResourceLimitConfig{ + Open: true, + Global: &BucketRatelimit{true, 5, 5}, + MaxResourceCacheAmount: 1024, + WhiteList: []string{"1000", "1001", "1002"}, + }) + So(err, ShouldBeNil) + + cnt := 0 + for i := 0; i < limiter.config.Global.Rate*3; i++ { + if ok := limiter.allow("1003"); ok { + cnt++ + } + } + So(cnt, ShouldEqual, limiter.config.Global.Rate) + + cnt = 0 + for i := 0; i < limiter.config.Global.Rate*30; i++ { + if ok := limiter.allow("1002"); ok { + cnt++ + } + } + So(cnt, ShouldEqual, limiter.config.Global.Rate*30) + }) + }) +} diff --git a/plugin/statis.go b/plugin/statis.go new file mode 100644 index 000000000..7f6314a68 --- /dev/null +++ b/plugin/statis.go @@ -0,0 +1,59 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 plugin + +import ( + "os" + "sync" + + "github.com/polarismesh/polaris-server/common/log" +) + +var ( + statisOnce = &sync.Once{} +) + +/** + * @brief 统计插件接口 + */ +type Statis interface { + Plugin + + AddAPICall(api string, code int, duration int64) error +} + +/** + * @brief 获取统计插件 + */ +func GetStatis() Statis { + c := &config.Statis + + plugin, exist := pluginSet[c.Name] + if !exist { + return nil + } + + statisOnce.Do(func() { + if err := plugin.Initialize(c); err != nil { + log.Errorf("plugin init err: %s", err.Error()) + os.Exit(-1) + } + }) + + return plugin.(Statis) +} diff --git a/plugin/statis/local/README.md b/plugin/statis/local/README.md new file mode 100644 index 000000000..92f2a059e --- /dev/null +++ b/plugin/statis/local/README.md @@ -0,0 +1 @@ +# 统计打印到本地日志 diff --git a/plugin/statis/local/apicall.go b/plugin/statis/local/apicall.go new file mode 100644 index 000000000..56e00887f --- /dev/null +++ b/plugin/statis/local/apicall.go @@ -0,0 +1,110 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 local + +import ( + "fmt" + + "go.uber.org/zap" +) + +/** + * @brief 接口调用 + */ +type APICall struct { + api string + code int + duration int64 +} + +/** + * @brief 接口调用统计条目 + */ +type APICallStatisItem struct { + api string + code int + count int64 + accTime int64 + minTime int64 + maxTime int64 +} + +/** + * @brief 接口调用统计 + */ +type APICallStatis struct { + statis map[string]*APICallStatisItem + + logger *zap.Logger +} + +/** + * @brief 添加接口调用数据 + */ +func (a *APICallStatis) add(ac *APICall) { + index := fmt.Sprintf("%v-%v", ac.api, ac.code) + + item, exist := a.statis[index] + if exist { + item.count++ + + item.accTime += ac.duration + if ac.duration < item.minTime { + item.minTime = ac.duration + } + if ac.duration > item.maxTime { + item.maxTime = ac.duration + } + } else { + a.statis[index] = &APICallStatisItem{ + api: ac.api, + code: ac.code, + count: 1, + accTime: ac.duration, + minTime: ac.duration, + maxTime: ac.duration, + } + } +} + +/** + * @brief 打印接口调用统计 + */ +func (a *APICallStatis) log() { + if len(a.statis) == 0 { + a.logger.Info("Statis: No API Call\n") + return + } + + msg := "Statis:\n" + + msg += fmt.Sprintf("%-48v|%12v|%12v|%12v|%12v|%12v|\n", "", "Code", "Count", "Min(ms)", "Max(ms)", "Avg(ms)") + + for _, item := range a.statis { + msg += fmt.Sprintf("%-48v|%12v|%12v|%12.3f|%12.3f|%12.3f|\n", + item.api, item.code, item.count, + float32(item.minTime)/1e6, + float32(item.maxTime)/1e6, + float32(item.accTime)/float32(item.count)/1e6, + ) + } + + a.logger.Info(msg) + + a.statis = make(map[string]*APICallStatisItem) +} diff --git a/plugin/statis/local/local.go b/plugin/statis/local/local.go new file mode 100644 index 000000000..5c0ad1849 --- /dev/null +++ b/plugin/statis/local/local.go @@ -0,0 +1,108 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 local + +import ( + "time" + + "github.com/polarismesh/polaris-server/plugin" +) + +/** + * @brief 注册统计插件 + */ +func init() { + s := &StatisWorker{} + plugin.RegisterPlugin(s.Name(), s) +} + +/** + * @brief 本地统计插件 + */ +type StatisWorker struct { + interval time.Duration + + acc chan *APICall + acs *APICallStatis +} + +/** + * @brief 获取统计插件名称 + */ +func (s *StatisWorker) Name() string { + return "local" +} + +/** + * @brief 初始化统计插件 + */ +func (s *StatisWorker) Initialize(conf *plugin.ConfigEntry) error { + // 设置统计打印周期 + interval := conf.Option["interval"].(int) + s.interval = time.Duration(interval) * time.Second + + outputPath := conf.Option["outputPath"].(string) + + // 初始化接口调用统计 + s.acc = make(chan *APICall, 1024) + s.acs = &APICallStatis{ + statis: make(map[string]*APICallStatisItem), + logger: newLogger(outputPath + "/" + "apicall.log"), + } + + go s.Run() + + return nil +} + +/** + * @brief 销毁统计插件 + */ +func (s *StatisWorker) Destroy() error { + return nil +} + +/** + * @brief 上报请求 + */ +func (s *StatisWorker) AddAPICall(api string, code int, duration int64) error { + s.acc <- &APICall{ + api: api, + code: code, + duration: duration, + } + + return nil +} + +/** + * @brief 主流程 + */ +func (s *StatisWorker) Run() { + ticker := time.NewTicker(s.interval) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + s.acs.log() + case ac := <-s.acc: + s.acs.add(ac) + } + } +} diff --git a/plugin/statis/local/logger.go b/plugin/statis/local/logger.go new file mode 100644 index 000000000..1fc1ff8b5 --- /dev/null +++ b/plugin/statis/local/logger.go @@ -0,0 +1,52 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 local + +import ( + "github.com/natefinch/lumberjack" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +/** + * @brief 创建日志打印器 + */ +func newLogger(file string) *zap.Logger { + encCfg := zapcore.EncoderConfig{ + MessageKey: "msg", + //LevelKey: "level", + TimeKey: "time", + NameKey: "name", + CallerKey: "caller", + StacktraceKey: "stacktrace", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.LowercaseLevelEncoder, + EncodeTime: zapcore.ISO8601TimeEncoder, + EncodeDuration: zapcore.StringDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + } + + w := zapcore.AddSync(&lumberjack.Logger{ + Filename: file, + MaxSize: 100, // MB + MaxBackups: 10, + MaxAge: 7, // days + }) + + return zap.New(zapcore.NewCore(zapcore.NewConsoleEncoder(encCfg), w, zap.InfoLevel)) +} diff --git a/polaris-server.yaml b/polaris-server.yaml new file mode 100644 index 000000000..a1ee95d19 --- /dev/null +++ b/polaris-server.yaml @@ -0,0 +1,182 @@ +# server启动引导配置 +bootstrap: + # 全局日志 + logger: + RotateOutputPath: log/polaris-server.log + RotationMaxSize: 500 + RotationMaxAge: 30 + RotationMaxBackups: 100 + level: info + # 按顺序启动server + startInOrder: + open: true # 是否开启,默认是关闭 + key: sz # 全局锁 + # 注册为北极星服务 + polaris_service: + probe_address: 119.91.74.45:3306 + enable_register: false + isolated: true + services: + - name: polaris-server + namespace: Polaris + protocols: + - grpcserver + - httpserver + - l5pbserver +# apiserver配置 +apiservers: + - name: httpserver # 协议名,全局唯一 + option: + listenIP: "0.0.0.0" + listenPort: 8090 + enablePprof: false # debug pprof + connLimit: + openConnLimit: false + maxConnPerHost: 128 + maxConnLimit: 5120 + whiteList: 127.0.0.1 + purgeCounterInterval: 10s + purgeCounterExpired: 5s + api: + admin: + enable: true + console: + enable: true + include: [default] + client: + enable: true + include: [discover, register, healthcheck] + - name: grpcserver + option: + listenIP: "0.0.0.0" + listenPort: 8091 + connLimit: + openConnLimit: false + maxConnPerHost: 128 + maxConnLimit: 5120 + api: + client: + enable: true + include: [discover, register, healthcheck] + - name: l5pbserver + option: + listenIP: 0.0.0.0 + listenPort: 7779 + clusterName: cl5.discover +# 核心逻辑的配置 +naming: + # 鉴权配置 + auth: + # 是否开启鉴权 + open: false + # 健康检查 + healthcheck: + open: true +# kvConnNum: 50 +# kvServiceName: polarisHeartbeatCkv +# kvNamespace: Polaris +# kvPasswd: polaris@2021 + slotNum: 30 + maxIdle: 20 + idleTimeout: 120 + # 批量控制器 + batch: + register: + open: true + queueSize: 10240 + waitTime: 32ms + maxBatchCount: 32 + concurrency: 64 + deregister: + open: true + queueSize: 10240 + waitTime: 32ms + maxBatchCount: 32 + concurrency: 64 +# 缓存配置 +cache: + open: true + resources: + - name: service # 加载服务数据 + option: + disableBusiness: false # 不加载业务服务 + needMeta: true # 加载服务元数据 + - name: instance # 加载实例数据 + option: + disableBusiness: false # 不加载业务服务实例 + needMeta: true # 加载实例元数据 + - name: routingConfig # 加载路由数据 + - name: rateLimitConfig # 加载限流数据 + - name: circuitBreakerConfig # 加载熔断数据 + - name: l5 # 加载l5数据 +# 存储配置 +store: + name: defaultStore + option: + master: + dbType: mysql + dbUser: root + dbPwd: "Polaris@2021" + dbAddr: 119.91.74.45:3306 + dbName: polaris_server + maxOpenConns: 64 + maxIdleConns: 2 + connMaxLifetime: 300 # 单位秒 + txIsolationLevel: 2 #LevelReadCommitted +# 插件配置 +plugin: + history: + name: HistoryLogger + discoverStatis: + name: discoverLocal + option: + interval: 60 # 统计间隔,单位为秒 + outputPath: ./discover-statis + statis: + name: local + option: + interval: 60 # 统计间隔,单位为秒 + outputPath: ./statis + ratelimit: + name: token-bucket + option: + remote-conf: false # 是否使用远程配置 + ip-limit: # ip级限流,全局 + open: true # 系统是否开启ip级限流 + global: + open: true + bucket: 300 # 最高峰值 + rate: 200 # 平均一个IP每秒的请求数 + resource-cache-amount: 1024 # 最大缓存的IP个数 + white-list: [127.0.0.1] + instance-limit: + open: true + global: + bucket: 2 + rate: 2 + resource-cache-amount: 1024 + api-limit: # 接口级限流 + open: false # 是否开启接口限流,全局开关,只有为true,才代表系统的限流开启。默认关闭 + rules: + - name: store-read + limit: + open: true # 接口的全局配置,如果在api子项中,不配置,则该接口依据global来做限制 + bucket: 2000 # 令牌桶最大值 + rate: 1000 # 每秒产生的令牌数 + - name: store-write + limit: + open: true + bucket: 1000 + rate: 500 + apis: + - name: "POST:/v1/naming/services" + rule: store-write + - name: "PUT:/v1/naming/services" + rule: store-write + - name: "POST:/v1/naming/services/delete" + rule: store-write + - name: "GET:/v1/naming/services" + rule: store-read + - name: "GET:/v1/naming/services/count" + rule: store-read + - name: "" \ No newline at end of file diff --git a/store/api.go b/store/api.go new file mode 100644 index 000000000..2a44032b6 --- /dev/null +++ b/store/api.go @@ -0,0 +1,406 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 store + +import ( + "time" + + "github.com/polarismesh/polaris-server/common/model" +) + +/** + * @brief 通用存储接口 + */ +type Store interface { + // 存储层的名字 + Name() string + + // 存储的初始化函数 + Initialize(c *Config) error + + // 存储的析构函数 + Destroy() error + + CreateTransaction() (Transaction, error) + + // 服务命名空间接口 + NamespaceStore + + // 服务业务集接口 + BusinessStore + + // 服务接口 + ServiceStore + + // 实例接口 + InstanceStore + + // 路由配置接口 + RoutingConfigStore + + // L5扩展接口 + L5Store + + // 限流规则接口 + RateLimitStore + + // 熔断规则接口 + CircuitBreakerStore + + // 平台信息接口 + PlatformStore +} + +/** + * @brief 命名空间存储接口 + */ +type NamespaceStore interface { + // 保存一个命名空间 + AddNamespace(namespace *model.Namespace) error + + // 更新命名空间 + UpdateNamespace(namespace *model.Namespace) error + + // 更新命名空间token + UpdateNamespaceToken(name string, token string) error + + // 查询owner下所有的命名空间 + ListNamespaces(owner string) ([]*model.Namespace, error) + + // 根据name获取命名空间的详情 + GetNamespace(name string) (*model.Namespace, error) + + // 从数据库查询命名空间 + GetNamespaces(filter map[string][]string, offset, limit int) ([]*model.Namespace, uint32, error) + + // 获取增量数据 + GetMoreNamespaces(mtime time.Time) ([]*model.Namespace, error) +} + +/** + * @brief 业务集存储接口 + */ +type BusinessStore interface { + // 增加一个业务集 + AddBusiness(business *model.Business) error + + // 删除一个业务集 + DeleteBusiness(bid string) error + + // 更新业务集 + UpdateBusiness(business *model.Business) error + + // 更新业务集token + UpdateBusinessToken(bid string, token string) error + + // 查询owner下业务集 + ListBusiness(owner string) ([]*model.Business, error) + + // 根据业务集ID获取业务集详情 + GetBusinessByID(id string) (*model.Business, error) + + // 根据mtime获取增量数据 + GetMoreBusiness(mtime time.Time) ([]*model.Business, error) +} + +/** + * @brief 服务存储接口 + */ +type ServiceStore interface { + // 保存一个服务 + AddService(service *model.Service) error + + // 删除服务 + DeleteService(id, serviceName, namespaceName string) error + + // 删除服务别名 + DeleteServiceAlias(name string, namespace string) error + + // 修改服务别名 + UpdateServiceAlias(alias *model.Service, needUpdateOwner bool) error + + // 更新服务 + UpdateService(service *model.Service, needUpdateOwner bool) error + + // 更新服务token + UpdateServiceToken(serviceID string, token string, revision string) error + + // 获取源服务的token信息 + GetSourceServiceToken(name string, namespace string) (*model.Service, error) + + // 根据服务名和命名空间获取服务的详情 + GetService(name string, namespace string) (*model.Service, error) + + // 根据服务ID查询服务详情 + GetServiceByID(id string) (*model.Service, error) + + // 根据相关条件查询对应服务及数目 + GetServices(serviceFilters, serviceMetas map[string]string, instanceFilters *InstanceArgs, offset, limit uint32) ( + uint32, []*model.Service, error) + + // 获取所有服务总数 + GetServicesCount() (uint32, error) + + // 获取增量services + GetMoreServices(mtime time.Time, firstUpdate, disableBusiness, needMeta bool) (map[string]*model.Service, error) + + // 获取服务别名列表 + GetServiceAliases(filter map[string]string, offset uint32, limit uint32) (uint32, []*model.ServiceAlias, error) + + // 获取系统服务 + GetSystemServices() ([]*model.Service, error) + + // 批量获取服务id、负责人等信息 + GetServicesBatch(services []*model.Service) ([]*model.Service, error) +} + +/** + * @brief 实例存储接口 + */ +type InstanceStore interface { + // 增加一个实例 + AddInstance(instance *model.Instance) error + + // 增加多个实例 + BatchAddInstances(instances []*model.Instance) error + + // 更新实例 + UpdateInstance(instance *model.Instance) error + + // 删除一个实例,实际是把valid置为false + DeleteInstance(instanceID string) error + + // 批量删除实例,flag=1 + BatchDeleteInstances(ids []interface{}) error + + // 清空一个实例,真正删除 + CleanInstance(instanceID string) error + + // 检查ID是否存在,并且返回所有ID的查询结果 + CheckInstancesExisted(ids map[string]bool) (map[string]bool, error) + + // 获取实例关联的token + GetInstancesBrief(ids map[string]bool) (map[string]*model.Instance, error) + + // 查询一个实例的详情,只返回有效的数据 + GetInstance(instanceID string) (*model.Instance, error) + + // 获取有效的实例总数 + GetInstancesCount() (uint32, error) + + // 根据服务和Host获取实例(不包括metadata) + GetInstancesMainByService(serviceID, host string) ([]*model.Instance, error) + + // 根据过滤条件查看实例详情及对应数目 + GetExpandInstances( + filter, metaFilter map[string]string, offset uint32, limit uint32) (uint32, []*model.Instance, error) + + // 根据mtime获取增量instances,返回所有store的变更信息 + GetMoreInstances(mtime time.Time, firstUpdate, needMeta bool, serviceID []string) (map[string]*model.Instance, error) + + // 设置实例的健康状态 + SetInstanceHealthStatus(instanceID string, flag int, revision string) error + + // 批量修改实例的隔离状态 + BatchSetInstanceIsolate(ids []interface{}, isolate int, revision string) error +} + +/** + * @brief L5扩展存储接口 + */ +type L5Store interface { + // 获取扩展数据 + GetL5Extend(serviceID string) (map[string]interface{}, error) + + // 设置meta里保存的扩展数据,并返回剩余的meta + SetL5Extend(serviceID string, meta map[string]interface{}) (map[string]interface{}, error) + + // 获取module + GenNextL5Sid(layoutID uint32) (string, error) + + // 获取增量数据 + GetMoreL5Extend(mtime time.Time) (map[string]map[string]interface{}, error) + + // 获取Route增量数据 + GetMoreL5Routes(flow uint32) ([]*model.Route, error) + + // 获取Policy增量数据 + GetMoreL5Policies(flow uint32) ([]*model.Policy, error) + + //获取Section增量数据 + GetMoreL5Sections(flow uint32) ([]*model.Section, error) + + //获取IP Config增量数据 + GetMoreL5IPConfigs(flow uint32) ([]*model.IPConfig, error) +} + +/** + * @brief 路由配置表的存储接口 + */ +type RoutingConfigStore interface { + // 新增一个路由配置 + CreateRoutingConfig(conf *model.RoutingConfig) error + + // 更新一个路由配置 + UpdateRoutingConfig(conf *model.RoutingConfig) error + + // 删除一个路由配置 + DeleteRoutingConfig(serviceID string) error + + // 通过mtime拉取增量的路由配置信息 + GetRoutingConfigsForCache(mtime time.Time, firstUpdate bool) ([]*model.RoutingConfig, error) + + // 根据服务名和命名空间拉取路由配置 + GetRoutingConfigWithService(name string, namespace string) (*model.RoutingConfig, error) + + // 根据服务ID拉取路由配置 + GetRoutingConfigWithID(id string) (*model.RoutingConfig, error) + + // 查询路由配置列表 + GetRoutingConfigs(filter map[string]string, offset uint32, limit uint32) (uint32, []*model.ExtendRoutingConfig, error) +} + +/** + * @brief 限流规则的存储接口 + */ +type RateLimitStore interface { + // 新增限流规则 + CreateRateLimit(limiting *model.RateLimit) error + + // 更新限流规则 + UpdateRateLimit(limiting *model.RateLimit) error + + // 删除限流规则 + DeleteRateLimit(limiting *model.RateLimit) error + + // 根据过滤条件拉取限流规则 + GetExtendRateLimits(query map[string]string, offset uint32, limit uint32) (uint32, []*model.ExtendRateLimit, error) + + // 根据限流ID拉取限流规则 + GetRateLimitWithID(id string) (*model.RateLimit, error) + + // 根据修改时间拉取增量限流规则及最新版本号 + GetRateLimitsForCache(mtime time.Time, firstUpdate bool) ([]*model.RateLimit, []*model.RateLimitRevision, error) +} + +/** + * @brief 熔断规则的存储接口 + */ +type CircuitBreakerStore interface { + // 新增熔断规则 + CreateCircuitBreaker(circuitBreaker *model.CircuitBreaker) error + + // 标记熔断规则 + TagCircuitBreaker(circuitBreaker *model.CircuitBreaker) error + + // 发布熔断规则 + ReleaseCircuitBreaker(circuitBreakerRelation *model.CircuitBreakerRelation) error + + // 解绑熔断规则 + UnbindCircuitBreaker(serviceID, ruleID, ruleVersion string) error + + // 删除已标记熔断规则 + DeleteTagCircuitBreaker(id string, version string) error + + // 删除master熔断规则 + DeleteMasterCircuitBreaker(id string) error + + // 修改熔断规则 + UpdateCircuitBreaker(circuitBraker *model.CircuitBreaker) error + + // 获取熔断规则 + GetCircuitBreaker(id, version string) (*model.CircuitBreaker, error) + + // 获取熔断规则的所有版本 + GetCircuitBreakerVersions(id string) ([]string, error) + + // 获取熔断规则master版本的绑定关系 + GetCircuitBreakerMasterRelation(ruleID string) ([]*model.CircuitBreakerRelation, error) + + // 获取已标记熔断规则的绑定关系 + GetCircuitBreakerRelation(ruleID, ruleVersion string) ([]*model.CircuitBreakerRelation, error) + + // 根据修改时间拉取增量熔断规则 + GetCircuitBreakerForCache(mtime time.Time, firstUpdate bool) ([]*model.ServiceWithCircuitBreaker, error) + + // 获取master熔断规则 + ListMasterCircuitBreakers(filters map[string]string, offset uint32, limit uint32) ( + *model.CircuitBreakerDetail, error) + + // 获取已发布规则 + ListReleaseCircuitBreakers(filters map[string]string, offset, limit uint32) ( + *model.CircuitBreakerDetail, error) + + // 根据服务获取熔断规则 + GetCircuitBreakersByService(name string, namespace string) (*model.CircuitBreaker, error) +} + +/** + * @brief 平台信息的存储接口 + */ +type PlatformStore interface { + // 新增平台信息 + CreatePlatform(platform *model.Platform) error + + // 更新平台信息 + UpdatePlatform(platform *model.Platform) error + + // 删除平台信息 + DeletePlatform(id string) error + + // 查询平台信息 + GetPlatformById(id string) (*model.Platform, error) + + // 根据过滤条件查询平台信息 + GetPlatforms(query map[string]string, offset uint32, limit uint32) (uint32, []*model.Platform, error) +} + +/** + * @brief 事务接口 + */ +type Transaction interface { + // 提交事务 + Commit() error + + // 启动锁,限制Server启动的并发数 + LockBootstrap(key string, server string) error + + // 排它锁namespace + LockNamespace(name string) (*model.Namespace, error) + + // 共享锁namespace + RLockNamespace(name string) (*model.Namespace, error) + + // 删除namespace + DeleteNamespace(name string) error + + // 排它锁service + LockService(name string, namespace string) (*model.Service, error) + + // 共享锁service + RLockService(name string, namespace string) (*model.Service, error) + + // 批量锁住service,只需返回valid/bool,增加速度 + BatchRLockServices(ids map[string]bool) (map[string]bool, error) + + // 删除service + DeleteService(name string, namespace string) error + + // 删除源服服务下的所有别名 + DeleteAliasWithSourceID(sourceServiceID string) error +} \ No newline at end of file diff --git a/store/defaultStore/base_db.go b/store/defaultStore/base_db.go new file mode 100644 index 000000000..7d01aaa82 --- /dev/null +++ b/store/defaultStore/base_db.go @@ -0,0 +1,192 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "context" + "database/sql" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/plugin" + "strings" + "time" +) + +// db抛出的异常,需要重试的字符串组 +var errMsg = []string{"Deadlock", "bad connection", "invalid connection"} + +// 对sql.DB的封装 +type BaseDB struct { + *sql.DB + cfg *dbConfig + isolationLevel sql.IsolationLevel + parsePwd plugin.ParsePassword +} + +/** + * @brief store的配置 + */ +type dbConfig struct { + dbType string + dbUser string + dbPwd string + dbAddr string + dbName string + maxOpenConns int + maxIdleConns int + connMaxLifetime int + txIsolationLevel int +} + +// 新建一个BaseDB +func NewBaseDB(cfg *dbConfig, parsePwd plugin.ParsePassword) (*BaseDB, error) { + baseDb := &BaseDB{cfg: cfg, parsePwd: parsePwd} + if cfg.txIsolationLevel > 0 { + baseDb.isolationLevel = sql.IsolationLevel(cfg.txIsolationLevel) + log.Infof("[Store][database] use isolation level: %s", baseDb.isolationLevel.String()) + } + + if err := baseDb.openDatabase(); err != nil { + return nil, err + } + + return baseDb, nil +} + +// 与数据库进行连接 +func (b *BaseDB) openDatabase() error { + c := b.cfg + + // 使用密码解析插件 + if b.parsePwd != nil { + pwd, err := b.parsePwd.ParsePassword(c.dbPwd) + if err != nil { + log.Errorf("[Store][database][ParsePwdPlugin] parse password err: %s", err.Error()) + return err + } + c.dbPwd = pwd + } + + dns := fmt.Sprintf("%s:%s@tcp(%s)/%s", c.dbUser, c.dbPwd, c.dbAddr, c.dbName) + db, err := sql.Open(c.dbType, dns) + if err != nil { + log.Errorf("[Store][database] sql open err: %s", err.Error()) + return err + } + if pingErr := db.Ping(); pingErr != nil { + log.Errorf("[Store][database] database ping err: %s", pingErr.Error()) + return pingErr + } + if c.maxOpenConns > 0 { + log.Infof("[Store][database] db set max open conns: %d", c.maxOpenConns) + db.SetMaxOpenConns(c.maxOpenConns) + } + if c.maxIdleConns > 0 { + log.Infof("[Store][database] db set max idle conns: %d", c.maxIdleConns) + db.SetMaxIdleConns(c.maxIdleConns) + } + if c.connMaxLifetime > 0 { + log.Infof("[Store][database] db set conn max life time: %d", c.connMaxLifetime) + db.SetConnMaxLifetime(time.Second * time.Duration(c.connMaxLifetime)) + } + + b.DB = db + return nil +} + +// 重写db.Exec函数 +// 提供重试功能 +func (b *BaseDB) Exec(query string, args ...interface{}) (sql.Result, error) { + var result sql.Result + var err error + Retry("exec "+query, func() error { + result, err = b.DB.Exec(query, args...) + return err + }) + + return result, err +} + +// 重写db.Query函数 +func (b *BaseDB) Query(query string, args ...interface{}) (*sql.Rows, error) { + var rows *sql.Rows + var err error + Retry("query "+query, func() error { + rows, err = b.DB.Query(query, args...) + return err + }) + + return rows, err +} + +// 重写db.Begin +func (b *BaseDB) Begin() (*BaseTx, error) { + var tx *sql.Tx + var err error + var option *sql.TxOptions + if b.isolationLevel > 0 { + option = &sql.TxOptions{Isolation: sql.IsolationLevel(b.isolationLevel)} + } + Retry("begin", func() error { + tx, err = b.DB.BeginTx(context.Background(), option) + return err + }) + + return &BaseTx{Tx: tx}, err +} + +// 对sql.Tx的封装 +type BaseTx struct { + *sql.Tx +} + +// 重试主函数 +// 最多重试20次,每次等待5ms*重试次数 +func Retry(label string, handle func() error) { + var err error + maxTryTimes := 20 + for i := 1; i <= maxTryTimes; i++ { + err = handle() + if err == nil { + return + } + + repeated := false // 是否重试 + for _, msg := range errMsg { + if strings.Contains(err.Error(), msg) { + log.Warnf("[Store][database][%s] get error msg: %s. Repeated doing(%d)", label, err.Error(), i) + time.Sleep(time.Millisecond * 5 * time.Duration(i)) + repeated = true + break + } + } + if !repeated { + return + } + } +} + +// 事务重试 +func RetryTransaction(label string, handle func() error) error { + var err error + Retry(label, func() error { + err = handle() + return err + }) + return err +} diff --git a/store/defaultStore/base_db_test.go b/store/defaultStore/base_db_test.go new file mode 100644 index 000000000..087c31246 --- /dev/null +++ b/store/defaultStore/base_db_test.go @@ -0,0 +1,146 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "errors" + "fmt" + . "github.com/smartystreets/goconvey/convey" + "testing" + "time" +) + +// 测试retry +func TestRetry(t *testing.T) { + Convey("重试可以成功", t, func() { + var err error + Retry("retry", func() error { + err = errors.New("retry error") + return err + }) + So(err, ShouldNotBeNil) + + start := time.Now() + count := 0 + Retry("retry", func() error { + count++ + if count <= 10 { + err = errors.New("invalid connection") + return err + } + err = nil + return nil + }) + sub := time.Now().Sub(start) + So(err, ShouldBeNil) + So(sub, ShouldBeGreaterThan, time.Millisecond*100) + }) + Convey("只捕获固定的错误", t, func() { + for _, msg := range errMsg { + var err error + start := time.Now() + Retry(fmt.Sprintf("retry-%s", msg), func() error { + err = fmt.Errorf("my-error: %s", msg) + return err + }) + So(err, ShouldNotBeNil) + So(time.Now().Sub(start), ShouldBeGreaterThan, time.Millisecond*100) + } + }) +} + +// 测试retryTransaction +func TestRetryTransaction(t *testing.T) { + Convey("handle错误可以正常捕获", t, func() { + err := RetryTransaction("test-handle", func() error { + t.Logf("handle ok") + return nil + }) + So(err, ShouldBeNil) + + start := time.Now() + err = RetryTransaction("test-handle", func() error { + return errors.New("Deadlock") + }) + So(err, ShouldNotBeNil) + So(err.Error(), ShouldEqual, "Deadlock") + sub := time.Now().Sub(start) + t.Logf("%v", sub) + So(sub, ShouldBeGreaterThan, time.Millisecond*100) + + start = time.Now() + err = RetryTransaction("test-handle", func() error { + return errors.New("other error") + }) + So(err, ShouldNotBeNil) + sub = time.Now().Sub(start) + So(sub, ShouldBeLessThan, time.Millisecond*5) + }) +} + +// 测试BatchOperation +func TestBatchOperation(t *testing.T) { + Convey("data为nil", t, func() { + err := BatchOperation("data为nil", nil, func(objects []interface{}) error { + return nil + }) + So(err, ShouldBeNil) + }) + Convey("data大小为1", t, func() { + data := make([]interface{}, 1) + num := 0 + err := BatchOperation("data为1", data, func(objects []interface{}) error { + num++ + return nil + }) + So(err, ShouldBeNil) + So(num, ShouldEqual, 1) + }) + Convey("data大小为101", t, func() { + data := make([]interface{}, 101) + num := 0 + err := BatchOperation("data为101", data, func(objects []interface{}) error { + num++ + return nil + }) + So(err, ShouldBeNil) + So(num, ShouldEqual, 2) + }) + + Convey("data大小为100", t, func() { + data := make([]interface{}, 100, 100) + num := 0 + err := BatchOperation("data为100", data, func(objects []interface{}) error { + num++ + return nil + }) + So(err, ShouldBeNil) + So(num, ShouldEqual, 1) + }) + + Convey("data大小为0", t, func() { + data := make([]interface{}, 0, 0) + num := 0 + err := BatchOperation("data为100", data, func(objects []interface{}) error { + num++ + return nil + }) + So(err, ShouldBeNil) + So(num, ShouldEqual, 0) + }) +} diff --git a/store/defaultStore/business.go b/store/defaultStore/business.go new file mode 100644 index 000000000..2d194789e --- /dev/null +++ b/store/defaultStore/business.go @@ -0,0 +1,202 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "time" +) + +/** + * @brief 实现BusinessStore接口 + */ +type businessStore struct { + db *BaseDB +} + +/** + * @brief 增加业务集 + */ +func (bs *businessStore) AddBusiness(b *model.Business) error { + if b.ID == "" || b.Name == "" || b.Token == "" || b.Owner == "" { + log.Errorf("[Store][database] add business missing some params: %+v", b) + return fmt.Errorf("Add Business missing some params") + } + + str := `insert into business(id, name, token, owner, ctime, mtime) + values(?, ?, ?, ?, sysdate(), sysdate())` + _, err := bs.db.Exec(str, b.ID, b.Name, b.Token, b.Owner) + + return err +} + +/** + * @brief 删除业务集 + */ +func (bs *businessStore) DeleteBusiness(bid string) error { + if bid == "" { + log.Errorf("[Store][database] delete business missing id") + return fmt.Errorf("Add Business missing some params") + } + + // 删除操作把对应的数据flag修改 + str := "update business set flag = 1, mtime = sysdate() where id = ?" + _, err := bs.db.Exec(str, bid) + + return err +} + +/** + * @brief 更新业务集 + */ +func (bs *businessStore) UpdateBusiness(b *model.Business) error { + if b.ID == "" || b.Name == "" || b.Owner == "" { + log.Errorf("[Store][database] update business missing some params") + return fmt.Errorf("Update Business missing some params") + } + + str := "update business set name = ?, owner = ?, mtime = sysdate() where id = ?" + _, err := bs.db.Exec(str, b.Name, b.Owner, b.ID) + + return err +} + +/** + * @brief 更新业务集token + */ +func (bs *businessStore) UpdateBusinessToken(bid string, token string) error { + if bid == "" || token == "" { + log.Errorf("[Store][business] update business token missing some params") + return fmt.Errorf("Update Business Token missing some params") + } + + str := "update business set token = ?, mtime = sysdate() where id = ?" + _, err := bs.db.Exec(str, token, bid) + + return err +} + +/** + * @brief 获取owner下所有的业务集 + */ +func (bs *businessStore) ListBusiness(owner string) ([]*model.Business, error) { + if owner == "" { + log.Errorf("[Store][business] list business missing owner") + return nil, fmt.Errorf("List Business Mising param owner") + } + + str := genBusinessSelectSQL() + " where owner like '%?%'" + rows, err := bs.db.Query(str, owner) + if err != nil { + log.Errorf("[Store][database] list all business err: %s", err.Error()) + return nil, err + } + + return businessFetchRows(rows) + +} + +/** + * @brief 根据业务集ID获取业务集详情 + */ +func (bs *businessStore) GetBusinessByID(id string) (*model.Business, error) { + if id == "" { + log.Errorf("[Store][business] get business missing id") + return nil, fmt.Errorf("Get Business missing param id") + } + + str := genBusinessSelectSQL() + " where id = ?" + rows, err := bs.db.Query(str, id) + if err != nil { + log.Errorf("[Store][database] get business by id query err: %s", err.Error()) + return nil, err + } + + out, err := businessFetchRows(rows) + if err != nil { + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + return out[0], nil +} + +/** + * @brief 根据mtime获取增量数据 + */ +func (bs *businessStore) GetMoreBusiness(mtime time.Time) ([]*model.Business, error) { + str := genBusinessSelectSQL() + " where UNIX_TIMESTAMP(mtime) >= ?" + rows, err := bs.db.Query(str, mtime.Unix()) + if err != nil { + log.Errorf("[Store][database] get more business err: %s", err.Error()) + return nil, err + } + + return businessFetchRows(rows) +} + +// 生成business查询语句 +func genBusinessSelectSQL() string { + str := `select id, name, token, owner, flag, + UNIX_TIMESTAMP(ctime), UNIX_TIMESTAMP(mtime) + from business ` + return str +} + +/** + * @brief 取出rows的数据 + */ +func businessFetchRows(rows *sql.Rows) ([]*model.Business, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + var ctime, mtime int64 + var out []*model.Business + var flag int + for rows.Next() { + var tmp model.Business + err := rows.Scan( + &tmp.ID, &tmp.Name, &tmp.Token, + &tmp.Owner, &flag, &ctime, &mtime) + if err != nil { + return nil, err + } + + tmp.CreateTime = time.Unix(ctime, 0) + tmp.ModifyTime = time.Unix(mtime, 0) + tmp.Valid = true + if flag == 1 { + tmp.Valid = false + } + + out = append(out, &tmp) + } + + if err := rows.Err(); err != nil { + return nil, err + } + + return out, nil +} diff --git a/store/defaultStore/circuitbreaker_config.go b/store/defaultStore/circuitbreaker_config.go new file mode 100644 index 000000000..ddf714fdb --- /dev/null +++ b/store/defaultStore/circuitbreaker_config.go @@ -0,0 +1,686 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" + "time" +) + +/** + * @brief CircuitBreakerStore的实现 + */ +type circuitBreakerStore struct { + master *BaseDB + slave *BaseDB +} + +/** + * @brief 创建一个新的熔断规则 + */ +func (c *circuitBreakerStore) CreateCircuitBreaker(cb *model.CircuitBreaker) error { + if err := c.cleanCircuitBreaker(cb.ID, cb.Version); err != nil { + log.Errorf("[Store][circuitBreaker] clean master for circuit breaker(%s, %s) err: %s", + cb.ID, cb.Version, err.Error()) + return store.Error(err) + } + + str := `insert into circuitbreaker_rule + (id, version, name, namespace, business, department, comment, inbounds, + outbounds, token, owner, revision, flag, ctime, mtime) + values(?,?,?,?,?,?,?,?,?,?,?,?,?,sysdate(),sysdate())` + if _, err := c.master.Exec(str, cb.ID, cb.Version, cb.Name, cb.Namespace, cb.Business, cb.Department, + cb.Comment, cb.Inbounds, cb.Outbounds, cb.Token, cb.Owner, cb.Revision, 0); err != nil { + log.Errorf("[Store][circuitBreaker] create circuit breaker(%s, %s, %s) err: %s", + cb.ID, cb.Name, cb.Version, err.Error()) + return store.Error(err) + } + + return nil +} + +/** + * @brief 给master熔断规则打一个version tag + */ +func (c *circuitBreakerStore) TagCircuitBreaker(cb *model.CircuitBreaker) error { + if err := c.cleanCircuitBreaker(cb.ID, cb.Version); err != nil { + log.Errorf("[Store][circuitBreaker] clean tag for circuit breaker(%s, %s) err: %s", + cb.ID, cb.Version, err.Error()) + return store.Error(err) + } + + if err := c.tagCircuitBreaker(cb); err != nil { + log.Errorf("[Store][circuitBreaker] create tag for circuit breaker(%s, %s) err: %s", + cb.ID, cb.Version, err.Error()) + return store.Error(err) + } + + return nil +} + +/** + * @brief 给master熔断规则打一个version tag的内部函数 + */ +func (c *circuitBreakerStore) tagCircuitBreaker(cb *model.CircuitBreaker) error { + // 需要保证master规则存在 + str := `insert into circuitbreaker_rule + (id, version, name, namespace, business, department, comment, inbounds, + outbounds, token, owner, revision, ctime, mtime) + select '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', + '%s', '%s', '%s', '%s', sysdate(), sysdate() from circuitbreaker_rule + where id = ? and version = 'master'` + str = fmt.Sprintf(str, cb.ID, cb.Version, cb.Name, cb.Namespace, cb.Business, cb.Department, cb.Comment, + cb.Inbounds, cb.Outbounds, cb.Token, cb.Owner, cb.Revision) + result, err := c.master.Exec(str, cb.ID) + if err != nil { + log.Errorf("[Store][CircuitBreaker] exec create tag sql(%s) err: %s", str, err.Error()) + return err + } + + if err := checkDataBaseAffectedRows(result, 1); err != nil { + if store.Code(err) == store.AffectedRowsNotMatch { + return store.NewStatusError(store.NotFoundMasterConfig, "not found master config") + } + log.Errorf("[Store][CircuitBreaker] tag rule affected rows err: %s", err.Error()) + return err + } + + return nil +} + +/** + * @brief 发布熔断规则 + */ +func (c *circuitBreakerStore) ReleaseCircuitBreaker(cbr *model.CircuitBreakerRelation) error { + if err := c.cleanCircuitBreakerRelation(cbr); err != nil { + return store.Error(err) + } + + if err := c.releaseCircuitBreaker(cbr); err != nil { + log.Errorf("[Store][CircuitBreaker] release rule err: %s", err.Error()) + return store.Error(err) + } + + return nil +} + +/** + * @brief 发布熔断规则的内部函数 + * @note 可能存在服务的规则,由旧的更新到新的场景 + */ +func (c *circuitBreakerStore) releaseCircuitBreaker(cbr *model.CircuitBreakerRelation) error { + // 发布规则时,需要保证规则已经被标记 + str := `insert into circuitbreaker_rule_relation(service_id, rule_id, rule_version, flag, ctime, mtime) + select '%s', '%s', '%s', 0, sysdate(), sysdate() from service, circuitbreaker_rule + where service.id = ? and service.flag = 0 + and circuitbreaker_rule.id = ? and circuitbreaker_rule.version = ? + and circuitbreaker_rule.flag = 0 + on DUPLICATE key update + rule_id = ?, rule_version = ?, flag = 0, mtime = sysdate()` + str = fmt.Sprintf(str, cbr.ServiceID, cbr.RuleID, cbr.RuleVersion) + log.Infof("[Store][CircuitBreaker] exec release sql(%s)", str) + result, err := c.master.Exec(str, cbr.ServiceID, cbr.RuleID, cbr.RuleVersion, cbr.RuleID, cbr.RuleVersion) + if err != nil { + log.Errorf("[Store][CircuitBreaker] release exec sql(%s) err: %s", str, err.Error()) + return err + } + if err := checkDataBaseAffectedRows(result, 1, 2); err != nil { + if store.Code(err) == store.AffectedRowsNotMatch { + return store.NewStatusError(store.NotFoundTagConfigOrService, "not found tag config or service") + } + log.Errorf("[Store][CircuitBreaker] release rule affected rows err: %s", err.Error()) + return err + } + + return nil +} + +/** + * @brief 解绑熔断规则 + */ +func (c *circuitBreakerStore) UnbindCircuitBreaker(serviceID, ruleID, ruleVersion string) error { + str := `update circuitbreaker_rule_relation set flag = 1, mtime = sysdate() where service_id = ? and rule_id = ? + and rule_version = ?` + if _, err := c.master.Exec(str, serviceID, ruleID, ruleVersion); err != nil { + log.Errorf("[Store][CircuitBreaker] delete relation(%s) err: %s", serviceID, err.Error()) + return err + } + + return nil +} + +/** + * @brief 删除非master熔断规则 + */ +func (c *circuitBreakerStore) DeleteTagCircuitBreaker(id string, version string) error { + // 需要保证规则无绑定服务 + str := `update circuitbreaker_rule set flag = 1, mtime = sysdate() + where id = ? and version = ? + and id not in + (select DISTINCT(rule_id) from circuitbreaker_rule_relation + where rule_id = ? and rule_version = ? and flag = 0)` + log.Infof("[Store][circuitBreaker] delete rule id(%s) version(%s), sql(%s)", id, version, str) + if _, err := c.master.Exec(str, id, version, id, version); err != nil { + log.Errorf("[Store][CircuitBreaker] delete tag rule(%s, %s) exec err: %s", id, version, err.Error()) + return err + } + + return nil +} + +/** + * @brief 删除master熔断规则 + */ +func (c *circuitBreakerStore) DeleteMasterCircuitBreaker(id string) error { + // 需要保证所有已标记的规则无绑定服务 + str := `update circuitbreaker_rule set flag = 1, mtime = sysdate() + where id = ? + and id not in + (select DISTINCT(rule_id) from circuitbreaker_rule_relation + where rule_id = ? and flag = 0)` + log.Infof("[Store][CircuitBreaker] delete master rule(%s) sql(%s)", id, str) + if _, err := c.master.Exec(str, id, id); err != nil { + log.Errorf("[Store][CircuitBreaker] delete master rule(%s) exec err: %s", id, err.Error()) + return err + } + + return nil +} + +/** + * @brief 修改熔断规则 + * @note 只允许修改master熔断规则 + */ +func (c *circuitBreakerStore) UpdateCircuitBreaker(cb *model.CircuitBreaker) error { + str := `update circuitbreaker_rule set business = ?, department = ?, comment = ?, + inbounds = ?, outbounds = ?, token = ?, owner = ?, revision = ?, mtime = sysdate() + where id = ? and version = ?` + + if _, err := c.master.Exec(str, cb.Business, cb.Department, cb.Comment, cb.Inbounds, + cb.Outbounds, cb.Token, cb.Owner, cb.Revision, cb.ID, cb.Version); err != nil { + log.Errorf("[Store][CircuitBreaker] update rule(%s,%s) exec err: %s", cb.ID, cb.Version, err.Error()) + return err + } + + return nil +} + +/** + * @brief 获取熔断规则 + */ +func (c *circuitBreakerStore) GetCircuitBreaker(id, version string) (*model.CircuitBreaker, error) { + str := `select id, version, name, namespace, IFNULL(business, ""), IFNULL(department, ""), IFNULL(comment, ""), + inbounds, outbounds, token, owner, revision, flag, unix_timestamp(ctime), unix_timestamp(mtime) + from circuitbreaker_rule + where id = ? and version = ? and flag = 0` + rows, err := c.master.Query(str, id, version) + if err != nil { + log.Errorf("[Store][CircuitBreaker] query circuitbreaker_rule with id(%s) and version(%s) err: %s", + id, version, err.Error()) + return nil, err + } + + out, err := fetchCircuitBreakerRows(rows) + if err != nil { + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + + return out[0], nil +} + +/** + * @brief 获取已标记熔断规则的绑定关系 + */ +func (c *circuitBreakerStore) GetCircuitBreakerRelation(ruleID, ruleVersion string) ( + []*model.CircuitBreakerRelation, error) { + str := genQueryCircuitBreakerRelation() + str += `where rule_id = ? and rule_version = ? and flag = 0` + rows, err := c.master.Query(str, ruleID, ruleVersion) + if err != nil { + log.Errorf("[Store][CircuitBreaker] query circuitbreaker_rule_relation "+ + "with rule_id(%s) and rule_version(%s) err: %s", + ruleID, ruleVersion, err.Error()) + return nil, err + } + + out, err := fetchCircuitBreakerRelationRows(rows) + if err != nil { + return nil, err + } + + return out, nil +} + +/** + * @brief 获取熔断规则master版本的绑定关系 + */ +func (c *circuitBreakerStore) GetCircuitBreakerMasterRelation(ruleID string) ( + []*model.CircuitBreakerRelation, error) { + str := genQueryCircuitBreakerRelation() + str += `where rule_id = ? and flag = 0` + rows, err := c.master.Query(str, ruleID) + if err != nil { + log.Errorf("[Store][CircuitBreaker] query circuitbreaker_rule_relation with rule_id(%s) err: %s", + ruleID, err.Error()) + return nil, err + } + + out, err := fetchCircuitBreakerRelationRows(rows) + if err != nil { + return nil, err + } + + return out, nil +} + +/** + * @brief 根据修改时间拉取增量熔断规则 + */ +func (c *circuitBreakerStore) GetCircuitBreakerForCache(mtime time.Time, firstUpdate bool) ( + []*model.ServiceWithCircuitBreaker, error) { + str := genQueryCircuitBreakerWithServiceID() + str += `where circuitbreaker_rule_relation.mtime > ? and rule_id = id and rule_version = version + and circuitbreaker_rule.flag = 0` + if firstUpdate { + str += ` and circuitbreaker_rule_relation.flag != 1` + } + rows, err := c.slave.Query(str, time2String(mtime)) + if err != nil { + log.Errorf("[Store][CircuitBreaker] query circuitbreaker_rule_relation with mtime err: %s", + err.Error()) + return nil, err + } + circuitBreakers, err := fetchCircuitBreakerAndServiceRows(rows) + if err != nil { + return nil, err + } + return circuitBreakers, nil +} + +/** + * @brief 获取熔断规则的所有版本 + */ +func (c *circuitBreakerStore) GetCircuitBreakerVersions(id string) ([]string, error) { + str := `select version from circuitbreaker_rule where id = ? and flag = 0 order by mtime desc` + rows, err := c.master.Query(str, id) + if err != nil { + log.Errorf("[Store][CircuitBreaker] get circuit breaker(%s) versions query err: %s", id, err.Error()) + return nil, err + } + + var versions []string + var version string + for rows.Next() { + if err := rows.Scan(&version); err != nil { + log.Errorf("[Store][CircuitBreaker] get circuit breaker(%s) versions scan err: %s", id, err.Error()) + return nil, err + } + + versions = append(versions, version) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][CircuitBreaker] get circuit breaker(%s) versions next err: %s", id, err.Error()) + return nil, err + } + + return versions, nil +} + +/** + * @brief 获取master熔断规则 + */ +func (c *circuitBreakerStore) ListMasterCircuitBreakers(filters map[string]string, offset uint32, limit uint32) ( + *model.CircuitBreakerDetail, error) { + // 获取master熔断规则 + selectStr := `select rule.id, rule.version, rule.name, rule.namespace, IFNULL(rule.business, ""), + IFNULL(rule.department, ""), IFNULL(rule.comment, ""), rule.inbounds, rule.outbounds, + rule.owner, rule.revision, + unix_timestamp(rule.ctime), unix_timestamp(rule.mtime) from circuitbreaker_rule as rule ` + countStr := `select count(*) from circuitbreaker_rule as rule ` + whereStr := "where rule.version = 'master' and rule.flag = 0 " + orderStr := "order by rule.mtime desc " + pageStr := "limit ?, ? " + + var args []interface{} + filterStr, filterArgs := genRuleFilterSQL("rule", filters) + if filterStr != "" { + whereStr += "and " + filterStr + args = append(args, filterArgs...) + } + + out := &model.CircuitBreakerDetail{ + Total: 0, + CircuitBreakerInfos: make([]*model.CircuitBreakerInfo, 0), + } + err := c.master.QueryRow(countStr+whereStr, args...).Scan(&out.Total) + switch { + case err == sql.ErrNoRows: + out.Total = 0 + return out, nil + case err != nil: + log.Errorf("[Store][CircuitBreaker] list master circuitbreakers query count err: %s", err.Error()) + return nil, err + default: + } + + args = append(args, offset) + args = append(args, limit) + + rows, err := c.master.Query(selectStr+whereStr+orderStr+pageStr, args...) + if err != nil { + log.Errorf("[Store][CircuitBreaker] list master circuitbreaker query err: %s", err.Error()) + return nil, err + } + defer func() { _ = rows.Close() }() + + var ctime, mtime int64 + for rows.Next() { + var entry model.CircuitBreaker + if err := rows.Scan(&entry.ID, &entry.Version, &entry.Name, &entry.Namespace, &entry.Business, + &entry.Department, &entry.Comment, &entry.Inbounds, &entry.Outbounds, &entry.Owner, &entry.Revision, + &ctime, &mtime); err != nil { + log.Errorf("[Store][CircuitBreaker] list master circuitbreakers rows scan err: %s", err.Error()) + return nil, err + } + + entry.CreateTime = time.Unix(ctime, 0) + entry.ModifyTime = time.Unix(mtime, 0) + cbEntry := &model.CircuitBreakerInfo{CircuitBreaker: &entry} + out.CircuitBreakerInfos = append(out.CircuitBreakerInfos, cbEntry) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][CircuitBreaker] list master circuitbreakers rows next err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +/** + * @brief 获取已发布规则及服务 + */ +func (c *circuitBreakerStore) ListReleaseCircuitBreakers(filters map[string]string, offset, limit uint32) ( + *model.CircuitBreakerDetail, error) { + selectStr := `select rule_id, rule_version, unix_timestamp(relation.ctime), unix_timestamp(relation.mtime), + name, namespace, service.owner from circuitbreaker_rule_relation as relation, service ` + whereStr := `where relation.flag = 0 and relation.service_id = service.id ` + orderStr := "order by relation.mtime desc " + pageStr := "limit ?, ?" + + countStr := `select count(*) from circuitbreaker_rule_relation as relation where relation.flag = 0 ` + + var args []interface{} + filterStr, filterArgs := genRuleFilterSQL("relation", filters) + if filterStr != "" { + countStr += "and " + filterStr + whereStr += "and " + filterStr + args = append(args, filterArgs...) + } + + out := &model.CircuitBreakerDetail{ + Total: 0, + CircuitBreakerInfos: make([]*model.CircuitBreakerInfo, 0), + } + + err := c.master.QueryRow(countStr, args...).Scan(&out.Total) + switch { + case err == sql.ErrNoRows: + out.Total = 0 + return out, nil + case err != nil: + log.Errorf("[Store][CircuitBreaker] list tag circuitbreakers query count err: %s", err.Error()) + return nil, err + default: + } + + args = append(args, offset) + args = append(args, limit) + + rows, err := c.master.Query(selectStr+whereStr+orderStr+pageStr, args...) + if err != nil { + log.Errorf("[Store][CircuitBreaker] list tag circuitBreakers query err: %s", err.Error()) + return nil, err + } + defer func() { rows.Close() }() + + var ctime, mtime int64 + for rows.Next() { + var entry model.CircuitBreaker + var service model.Service + if err := rows.Scan(&entry.ID, &entry.Version, &ctime, &mtime, &service.Name, &service.Namespace, + &service.Owner); err != nil { + log.Errorf("[Store][CircuitBreaker] list tag circuitBreakers scan err: %s", err.Error()) + return nil, err + } + + service.CreateTime = time.Unix(ctime, 0) + service.ModifyTime = time.Unix(mtime, 0) + + info := &model.CircuitBreakerInfo{ + CircuitBreaker: &entry, + Services: []*model.Service{ + &service, + }, + } + + out.CircuitBreakerInfos = append(out.CircuitBreakerInfos, info) + } + + return out, nil +} + +/** + * @brief 根据服务获取熔断规则 + */ +func (c *circuitBreakerStore) GetCircuitBreakersByService(name string, namespace string) ( + *model.CircuitBreaker, error) { + str := `select rule.id, rule.version, rule.name, rule.namespace, IFNULL(rule.business, ""), + IFNULL(rule.comment, ""), IFNULL(rule.department, ""), + rule.inbounds, rule.outbounds, rule.owner, rule.revision, + unix_timestamp(rule.ctime), unix_timestamp(rule.mtime) + from circuitbreaker_rule as rule, circuitbreaker_rule_relation as relation, service + where service.id = relation.service_id + and relation.rule_id = rule.id and relation.rule_version = rule.version + and relation.flag = 0 and service.flag = 0 and rule.flag = 0 + and service.name = ? and service.namespace = ?` + var breaker model.CircuitBreaker + var ctime, mtime int64 + err := c.master.QueryRow(str, name, namespace).Scan(&breaker.ID, &breaker.Version, &breaker.Name, + &breaker.Namespace, &breaker.Business, &breaker.Comment, &breaker.Department, + &breaker.Inbounds, &breaker.Outbounds, &breaker.Owner, &breaker.Revision, &ctime, &mtime) + switch { + case err == sql.ErrNoRows: + return nil, nil + case err != nil: + log.Errorf("[Store][CircuitBreaker] get tag circuitbreaker with service(%s, %s) err: %s", + name, namespace, err.Error()) + return nil, err + default: + breaker.CreateTime = time.Unix(ctime, 0) + breaker.ModifyTime = time.Unix(mtime, 0) + return &breaker, nil + } +} + +/** + * @brief 清理无效的熔断规则关系 + */ +func (c *circuitBreakerStore) cleanCircuitBreakerRelation(cbr *model.CircuitBreakerRelation) error { + log.Infof("[Store][CircuitBreaker] clean relation for service(%s)", cbr.ServiceID) + str := `delete from circuitbreaker_rule_relation where service_id = ? and flag = 1` + if _, err := c.master.Exec(str, cbr.ServiceID); err != nil { + log.Errorf("[Store][CircuitBreaker] clean relation service(%s) err: %s", + cbr.ServiceID, err.Error()) + return err + } + + return nil +} + +/** + * @brief 彻底清理熔断规则 + */ +func (c *circuitBreakerStore) cleanCircuitBreaker(id string, version string) error { + str := `delete from circuitbreaker_rule where id = ? and version = ? and flag = 1` + if _, err := c.master.Exec(str, id, version); err != nil { + log.Errorf("[Store][database] clean circuit breaker(%s) err: %s", id, err.Error()) + return store.Error(err) + } + return nil +} + +/** + * @brief 读取circuitbreaker_rule的数据 + */ +func fetchCircuitBreakerRows(rows *sql.Rows) ([]*model.CircuitBreaker, error) { + defer rows.Close() + var out []*model.CircuitBreaker + for rows.Next() { + var entry model.CircuitBreaker + var flag int + var ctime, mtime int64 + err := rows.Scan(&entry.ID, &entry.Version, &entry.Name, &entry.Namespace, &entry.Business, &entry.Department, + &entry.Comment, &entry.Inbounds, &entry.Outbounds, &entry.Token, &entry.Owner, &entry.Revision, + &flag, &ctime, &mtime) + if err != nil { + log.Errorf("[Store][CircuitBreaker] fetch circuitbreaker_rule scan err: %s", err.Error()) + return nil, err + } + + entry.CreateTime = time.Unix(ctime, 0) + entry.ModifyTime = time.Unix(mtime, 0) + entry.Valid = true + if flag == 1 { + entry.Valid = false + } + + out = append(out, &entry) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][CircuitBreaker] fetch circuitbreaker_rule next err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +/** + * @brief 读取circuitbreaker_rule_relation的数据 + */ +func fetchCircuitBreakerRelationRows(rows *sql.Rows) ([]*model.CircuitBreakerRelation, error) { + defer rows.Close() + var out []*model.CircuitBreakerRelation + for rows.Next() { + var entry model.CircuitBreakerRelation + var flag int + var ctime, mtime int64 + err := rows.Scan(&entry.ServiceID, &entry.RuleID, &entry.RuleVersion, &flag, &ctime, &mtime) + if err != nil { + log.Errorf("[Store][CircuitBreaker] fetch circuitbreaker_rule_relation scan err: %s", err.Error()) + return nil, err + } + + entry.CreateTime = time.Unix(ctime, 0) + entry.ModifyTime = time.Unix(mtime, 0) + entry.Valid = true + if flag == 1 { + entry.Valid = false + } + + out = append(out, &entry) + } + + if err := rows.Err(); err != nil { + log.Errorf("[Store][CircuitBreaker] fetch circuitbreaker_rule_relation next err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +/** + * @brief 读取circuitbreaker_rule和circuitbreaker_rule_relation的数据 + */ +func fetchCircuitBreakerAndServiceRows(rows *sql.Rows) ([]*model.ServiceWithCircuitBreaker, error) { + defer rows.Close() + var out []*model.ServiceWithCircuitBreaker + for rows.Next() { + var entry model.ServiceWithCircuitBreaker + var rule model.CircuitBreaker + var relationFlag, ruleFlag int + var relationCtime, relationMtime, ruleCtime, ruleMtime int64 + err := rows.Scan(&entry.ServiceID, &rule.ID, &rule.Version, &relationFlag, &relationCtime, &relationMtime, + &rule.Name, &rule.Namespace, &rule.Business, &rule.Department, &rule.Comment, &rule.Inbounds, &rule.Outbounds, + &rule.Token, &rule.Owner, &rule.Revision, &ruleFlag, &ruleCtime, &ruleMtime) + if err != nil { + log.Errorf("[Store][CircuitBreaker] fetch circuitbreaker_rule and relation scan err: %s", + err.Error()) + return nil, err + } + entry.CreateTime = time.Unix(relationCtime, 0) + entry.ModifyTime = time.Unix(relationMtime, 0) + entry.Valid = true + if relationFlag == 1 { + entry.Valid = false + } + rule.CreateTime = time.Unix(ruleCtime, 0) + rule.ModifyTime = time.Unix(ruleMtime, 0) + rule.Valid = true + if ruleFlag == 1 { + rule.Valid = false + } + entry.CircuitBreaker = &rule + out = append(out, &entry) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][CircuitBreaker] fetch circuitbreaker_rule and relation next err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +/** + * @brief 查询熔断规则绑定关系表的语句 + */ +func genQueryCircuitBreakerRelation() string { + str := `select service_id, rule_id, rule_version, flag, unix_timestamp(ctime), unix_timestamp(mtime) + from circuitbreaker_rule_relation ` + return str +} + +/** + * @brief 根据服务id查询熔断规则的查询语句 + */ +func genQueryCircuitBreakerWithServiceID() string { + str := `select service_id, rule_id, rule_version, circuitbreaker_rule_relation.flag, + unix_timestamp(circuitbreaker_rule_relation.ctime), unix_timestamp(circuitbreaker_rule_relation.mtime), + name, namespace, IFNULL(business, ""), IFNULL(department, ""), IFNULL(comment, ""), inbounds, outbounds, + token, owner, revision, circuitbreaker_rule.flag, + unix_timestamp(circuitbreaker_rule.ctime), unix_timestamp(circuitbreaker_rule.mtime) + from circuitbreaker_rule_relation, circuitbreaker_rule ` + return str +} diff --git a/store/defaultStore/common.go b/store/defaultStore/common.go new file mode 100644 index 000000000..731fd40cd --- /dev/null +++ b/store/defaultStore/common.go @@ -0,0 +1,153 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/store" +) + +// query +type QueryHandler func(query string, args ...interface{}) (*sql.Rows, error) + +// 批量查询数据的回调函数 +type BatchHandler func(objects []interface{}) error + +// 批量查询数据的对外接口 +// 每次最多查询200个 +func BatchQuery(label string, data []interface{}, handler BatchHandler) error { + //start := time.Now() + maxCount := 200 + beg := 0 + remain := len(data) + if remain == 0 { + return nil + } + + progress := 0 + for { + if remain > maxCount { + if err := handler(data[beg : beg+maxCount]); err != nil { + return err + } + + beg += maxCount + remain -= maxCount + progress += maxCount + if progress%20000 == 0 { + log.Infof("[Store][database][Batch] query (%s) progress(%d / %d)", label, progress, len(data)) + } + } else { + if err := handler(data[beg : beg+remain]); err != nil { + return err + } + break + } + } + //log.Infof("[Store][database][Batch] consume time: %v", time.Now().Sub(start)) + return nil +} + +/** + * @brief 批量操作 + * @note 每次最多操作100个 + */ +func BatchOperation(label string, data []interface{}, handler BatchHandler) error { + if data == nil { + return nil + } + maxCount := 100 + progress := 0 + for begin := 0; begin < len(data); begin += maxCount { + end := begin + maxCount + if end > len(data) { + end = len(data) + } + if err := handler(data[begin:end]); err != nil { + return err + } + progress += end - begin + if progress%maxCount == 0 { + log.Infof("[Store][database][Batch] operation (%s) progress(%d/%d)", label, progress, len(data)) + } + } + return nil +} + +// 单独查询count个数的执行函数 +func queryEntryCount(conn *BaseDB, str string, args []interface{}) (uint32, error) { + var count uint32 + var err error + Retry("queryRow", func() error { + err = conn.QueryRow(str, args...).Scan(&count) + return err + }) + switch { + case err == sql.ErrNoRows: + log.Errorf("[Store][database] not found any entry(%s)", str) + return 0, err + case err != nil: + log.Errorf("[Store][database] query entry count(%s) err: %s", str, err.Error()) + return 0, err + default: + return count, nil + } +} + +// 别名查询转换 +var aliasFilter2Where = map[string]string{ + "service": "source.name", + "namespace": "source.namespace", + "alias": "alias.name", + "owner": "alias.owner", +} + +// 别名查询字段转换函数 +func serviceAliasFilter2Where(filter map[string]string) map[string]string { + out := make(map[string]string) + for k, v := range filter { + if d, ok := aliasFilter2Where[k]; ok { + out[d] = v + } else { + out[k] = v + } + } + + return out +} + +/** + * @brief 检查数据库处理返回的行数 + */ +func checkDataBaseAffectedRows(result sql.Result, counts ...int64) error { + n, err := result.RowsAffected() + if err != nil { + log.Errorf("[Store][Database] get rows affected err: %s", err.Error()) + return err + } + + for _, c := range counts { + if n == c { + return nil + } + } + + log.Errorf("[Store][Database] get rows affected result(%d) is not match expect(%+v)", n, counts) + return store.NewStatusError(store.AffectedRowsNotMatch, "affected rows not matched") +} diff --git a/store/defaultStore/default.go b/store/defaultStore/default.go new file mode 100644 index 000000000..6e8683ba8 --- /dev/null +++ b/store/defaultStore/default.go @@ -0,0 +1,245 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "errors" + "fmt" + "time" + + "github.com/polarismesh/polaris-server/plugin" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/store" + + // 使用mysql库 + _ "github.com/go-sql-driver/mysql" +) + +const ( + SystemNamespace = "Polaris" + STORENAME = "defaultStore" + DefaultConnMaxLifetime = 60 * 30 // 默认是30分钟 +) + +/** + * @brief 自动引入包初始化函数 + */ +func init() { + s := &stableStore{} + _ = store.RegisterStore(s) +} + +/** + * @brief 实现了Store接口 + */ +type stableStore struct { + *namespaceStore + *businessStore + *serviceStore + *instanceStore + *routingConfigStore + *l5Store + *rateLimitStore + *circuitBreakerStore + *platformStore + + // 主数据库,可以进行读写 + master *BaseDB + // 对主数据库的事务操作,可读写 + masterTx *BaseDB + // 备数据库,提供只读 + slave *BaseDB + start bool + metaTask *TaskManager +} + +/** + * @brief 实现Name函数 + */ +func (s *stableStore) Name() string { + return STORENAME +} + +/** + * @brief 初始化函数 + */ +func (s *stableStore) Initialize(conf *store.Config) error { + if s.start { + return errors.New("store has been Initialize") + } + + masterConfig, slaveConfig, err := parseDatabaseConf(conf.Option) + if err != nil { + return err + } + master, err := NewBaseDB(masterConfig, plugin.GetParsePassword()) + if err != nil { + return err + } + s.master = master + + masterTx, err := NewBaseDB(masterConfig, plugin.GetParsePassword()) + if err != nil { + return err + } + s.masterTx = masterTx + + if slaveConfig != nil { + log.Infof("[Store][database] use slave database config: %+v", slaveConfig) + slave, err := NewBaseDB(slaveConfig, plugin.GetParsePassword()) + if err != nil { + return err + } + s.slave = slave + } + // 如果slave为空,意味着slaveConfig为空,用master数据库替代 + if s.slave == nil { + s.slave = s.master + } + + log.Infof("[Store][database] connect the database successfully") + + s.start = true + s.newStore() + return nil +} + +// return slave, master, error +func parseDatabaseConf(opt map[string]interface{}) (*dbConfig, *dbConfig, error) { + // 必填 + masterEnter, ok := opt["master"] + if !ok || masterEnter == nil { + return nil, nil, errors.New("database master db config is missing") + } + masterConfig, err := parseStoreConfig(masterEnter) + if err != nil { + return nil, nil, err + } + + // 只读数据库可选 + slaveEntry, ok := opt["slave"] + if !ok || slaveEntry == nil { + return masterConfig, nil, nil + } + slaveConfig, err := parseStoreConfig(slaveEntry) + if err != nil { + return nil, nil, err + } + + return masterConfig, slaveConfig, nil +} + +// 解析store的配置 +func parseStoreConfig(opts interface{}) (*dbConfig, error) { + obj, ok := opts.(map[interface{}]interface{}) + if !ok { + return nil, errors.New("database config is error") + } + dbType, _ := obj["dbType"].(string) + dbUser, _ := obj["dbUser"].(string) + dbPwd, _ := obj["dbPwd"].(string) + dbAddr, _ := obj["dbAddr"].(string) + dbName, _ := obj["dbName"].(string) + if dbType == "" || dbUser == "" || dbPwd == "" || dbAddr == "" || dbName == "" { + return nil, fmt.Errorf("Config Plugin %s missing database param", STORENAME) + } + + c := &dbConfig{ + dbType: dbType, + dbUser: dbUser, + dbPwd: dbPwd, + dbAddr: dbAddr, + dbName: dbName, + } + if maxOpenConns, _ := obj["maxOpenConns"].(int); maxOpenConns > 0 { + c.maxOpenConns = maxOpenConns + } + if maxIdleConns, _ := obj["maxIdleConns"].(int); maxIdleConns > 0 { + c.maxIdleConns = maxIdleConns + } + c.connMaxLifetime = DefaultConnMaxLifetime + if connMaxLifetime, _ := obj["connMaxLifetime"].(int); connMaxLifetime > 0 { + c.connMaxLifetime = connMaxLifetime + } + + if isolationLevel, _ := obj["txIsolationLevel"].(int); isolationLevel > 0 { + c.txIsolationLevel = isolationLevel + } + return c, nil +} + +/** + * @brief 退出函数 + */ +func (s *stableStore) Destroy() error { + if s.master != nil { + _ = s.master.Close() + } + if s.masterTx != nil { + _ = s.masterTx.Close() + } + if s.slave != nil { + _ = s.slave.Close() + } + + return nil +} + +/** + * @brief 创建一个事务 + */ +func (s *stableStore) CreateTransaction() (store.Transaction, error) { + // 每次创建事务前,还是需要ping一下 + _ = s.masterTx.Ping() + + nt := &transaction{} + tx, err := s.masterTx.Begin() + if err != nil { + log.Errorf("[Store][database] database begin err: %s", err.Error()) + return nil, err + } + + nt.tx = tx + return nt, nil +} + +// 初始化子类 +func (s *stableStore) newStore() { + s.namespaceStore = &namespaceStore{db: s.master} + s.businessStore = &businessStore{db: s.master} + + s.serviceStore = &serviceStore{master: s.master, slave: s.slave} + + s.instanceStore = &instanceStore{master: s.master, slave: s.slave} + + s.routingConfigStore = &routingConfigStore{master: s.master, slave: s.slave} + + s.l5Store = &l5Store{db: s.master} + + s.rateLimitStore = &rateLimitStore{db: s.master} + + s.circuitBreakerStore = &circuitBreakerStore{master: s.master, slave: s.slave} + + s.platformStore = &platformStore{master: s.master} +} + +// time.Time转为字符串时间 +func time2String(t time.Time) string { + return t.Format("2006-01-02 15:04:05") +} diff --git a/store/defaultStore/instance.go b/store/defaultStore/instance.go new file mode 100644 index 000000000..4005ceb18 --- /dev/null +++ b/store/defaultStore/instance.go @@ -0,0 +1,1154 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "errors" + v1 "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/store" + "time" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" +) + +/** + * @brief 实现了InstanceStore接口 + */ +type instanceStore struct { + master *BaseDB // 大部分操作都用主数据库 + slave *BaseDB // 缓存相关的读取,请求到slave +} + +/** + * @brief 添加实例 + */ +func (ins *instanceStore) AddInstance(instance *model.Instance) error { + // 新增数据之前,必须先清理老数据 + if err := ins.CleanInstance(instance.ID()); err != nil { + return err + } + + err := RetryTransaction("addInstance", func() error { + return ins.addInstance(instance) + }) + return store.Error(err) +} + +// addInstance +func (ins *instanceStore) addInstance(instance *model.Instance) error { + tx, err := ins.master.Begin() + if err != nil { + log.Errorf("[Store][database] add instance tx begin err: %s", err.Error()) + return err + } + defer func() { _ = tx.Rollback() }() + + // 先对服务加锁 + revision, err := rlockServiceWithID(tx.QueryRow, instance.ServiceID) + if err != nil { + log.Errorf("[Store][database] rlock service(%s) err: %s", instance.ServiceID, err.Error()) + return err + } + if revision == "" { + log.Errorf("[Store][database] not found service(%s)", instance.ServiceID) + return store.NewStatusError(store.NotFoundService, "not found service") + } + + if err := addMainInstance(tx, instance); err != nil { + log.Errorf("[Store][database] add instance main insert err: %s", err.Error()) + return err + } + + if err := addInstanceCheck(tx, instance); err != nil { + return err + } + + if err := addInstanceMeta(tx, instance.ID(), instance.Metadata()); err != nil { + log.Errorf("[Store][database] add instance meta err: %s", err.Error()) + return err + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] add instance commit tx err: %s", err.Error()) + return err + } + + return nil +} + +// 批量增加实例 +func (ins *instanceStore) BatchAddInstances(instances []*model.Instance) error { + // 直接清理所有的老数据 + if err := ins.BatchClearInstances(instances); err != nil { + log.Errorf("[Store][database] batch clear instances err: %s", err.Error()) + return err + } + + err := RetryTransaction("batchAddInstances", func() error { + return ins.batchAddInstances(instances) + }) + return store.Error(err) +} + +// batch add instances +func (ins *instanceStore) batchAddInstances(instances []*model.Instance) error { + tx, err := ins.master.Begin() + if err != nil { + log.Errorf("[Store][database] batch add instances begin tx err: %s", err.Error()) + return err + } + defer func() { _ = tx.Rollback() }() + + if err := batchAddMainInstances(tx, instances); err != nil { + log.Errorf("[Store][database] batch add main instances err: %s", err.Error()) + return err + } + if err := batchAddInstanceCheck(tx, instances); err != nil { + log.Errorf("[Store][database] batch add instance check err: %s", err.Error()) + return err + } + if err := batchAddInstanceMeta(tx, instances); err != nil { + log.Errorf("[Store][database] batch add instance metadata err: %s", err.Error()) + return err + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] batch add instance commit tx err: %s", err.Error()) + return err + } + + return nil +} + +// 批量清理实例信息 +// 注意:依赖instance表修改结果,id外键修改为删除级联 +func (ins *instanceStore) BatchClearInstances(instances []*model.Instance) error { + if len(instances) == 0 { + return nil + } + + ids := make([]interface{}, 0, len(instances)) + var paramStr string + first := true + for _, entry := range instances { + if first { + paramStr = "(?" + first = false + } else { + paramStr += ", ?" + } + ids = append(ids, entry.ID()) + } + paramStr += ")" + + log.Infof("[Store][database] clean instance(%+v)", ids) // 先打印日志 + mainStr := "delete from instance where flag = 1 and id in " + paramStr + if _, err := ins.master.Exec(mainStr, ids...); err != nil { + log.Errorf("[Store][database] clean instance main err: %s", err.Error()) + return err + } + + return nil +} + +/** + * @brief 更新实例 + */ +func (ins *instanceStore) UpdateInstance(instance *model.Instance) error { + err := RetryTransaction("updateInstance", func() error { + return ins.updateInstance(instance) + }) + if err == nil { + return nil + } + + serr := store.Error(err) + if store.Code(serr) == store.DuplicateEntryErr { + serr = store.NewStatusError(store.DataConflictErr, err.Error()) + } + return serr +} + +// update instance +func (ins *instanceStore) updateInstance(instance *model.Instance) error { + tx, err := ins.master.Begin() + if err != nil { + log.Errorf("[Store][database] update instance tx begin err: %s", err.Error()) + return err + } + defer func() { _ = tx.Rollback() }() + + // 更新main表 + if err := updateInstanceMain(tx, instance); err != nil { + log.Errorf("[Store][database] update instance main err: %s", err.Error()) + return err + } + // 更新health check表 + if err := updateInstanceCheck(tx, instance); err != nil { + log.Errorf("[Store][database] update instance check err: %s", err.Error()) + return err + } + // 更新meta表 + if err := updateInstanceMeta(tx, instance); err != nil { + log.Errorf("[Store][database] update instance meta err: %s", err.Error()) + return err + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] update instance commit tx err: %s", err.Error()) + return err + } + + return nil +} + +// 清理数据 +// 后续修改instance表,id外键删除级联,那么可以执行一次delete操作 +func (ins *instanceStore) CleanInstance(instanceID string) error { + log.Infof("[Store][database] clean instance(%s)", instanceID) + mainStr := "delete from instance where id = ? and flag = 1" + if _, err := ins.master.Exec(mainStr, instanceID); err != nil { + log.Errorf("[Store][database] clean instance(%s), err: %s", instanceID, err.Error()) + return store.Error(err) + } + return nil +} + +/** + * @brief 删除一个实例,删除实例实际上是把flag置为1 + */ +func (ins *instanceStore) DeleteInstance(instanceID string) error { + if instanceID == "" { + return errors.New("Delete Instance Missing instance id") + } + + str := "update instance set flag = 1, mtime = sysdate() where `id` = ?" + _, err := ins.master.Exec(str, instanceID) + return store.Error(err) +} + +// 批量删除实例 +func (ins *instanceStore) BatchDeleteInstances(ids []interface{}) error { + return BatchOperation("delete-instance", ids, func(objects []interface{}) error { + if len(objects) == 0 { + return nil + } + str := `update instance set flag = 1, mtime = sysdate() where id in ( ` + PlaceholdersN(len(objects)) + `)` + _, err := ins.master.Exec(str, objects...) + return store.Error(err) + }) +} + +/** + * @brief 获取单个实例详情,只返回有效的数据 + */ +func (ins *instanceStore) GetInstance(instanceID string) (*model.Instance, error) { + instance, err := ins.getInstance(instanceID) + if err != nil { + return nil, err + } + + // 如果实例无效,则不返回 + if instance != nil && !instance.Valid { + return nil, nil + } + + return instance, nil +} + +// 检查实例是否存在 +func (ins *instanceStore) CheckInstancesExisted(ids map[string]bool) (map[string]bool, error) { + if len(ids) == 0 { + return nil, nil + } + + str := "select id from instance where flag = 0 and id in(" + PlaceholdersN(len(ids)) + ")" + args := make([]interface{}, 0, len(ids)) + for key := range ids { + args = append(args, key) + } + + rows, err := ins.master.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] check instances existed query err: %s", err.Error()) + return nil, err + } + var idx string + for rows.Next() { + if err := rows.Scan(&idx); err != nil { + log.Errorf("[Store][database] check instances existed scan err: %s", err.Error()) + return nil, err + } + ids[idx] = true + } + + return ids, nil +} + +// 批量获取实例的serviceID +func (ins *instanceStore) GetInstancesBrief(ids map[string]bool) (map[string]*model.Instance, error) { + if len(ids) == 0 { + return nil, nil + } + + str := `select instance.id, host, port, name, namespace, token, IFNULL(platform_id,"") from service, instance + where instance.flag = 0 and service.flag = 0 + and service.id = instance.service_id and instance.id in (` + PlaceholdersN(len(ids)) + ")" + args := make([]interface{}, 0, len(ids)) + for key := range ids { + args = append(args, key) + } + + rows, err := ins.master.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] get instances service token query err: %s", err.Error()) + return nil, err + } + + out := make(map[string]*model.Instance, len(ids)) + var item model.ExpandInstanceStore + var instance model.InstanceStore + item.ServiceInstance = &instance + for rows.Next() { + if err := rows.Scan(&instance.ID, &instance.Host, &instance.Port, + &item.ServiceName, &item.Namespace, &item.ServiceToken, &item.ServicePlatformID); err != nil { + log.Errorf("[Store][database] get instances service token scan err: %s", err.Error()) + return nil, err + } + + out[instance.ID] = model.ExpandStore2Instance(&item) + } + + return out, nil +} + +// 获取有效的实例总数 +func (ins *instanceStore) GetInstancesCount() (uint32, error) { + countStr := "select count(*) from instance where flag = 0" + var count uint32 + var err error + Retry("query-instance-row", func() error { + err = ins.master.QueryRow(countStr).Scan(&count) + return err + }) + switch { + case err == sql.ErrNoRows: + return 0, nil + case err != nil: + log.Errorf("[Store][database] get instances count scan err: %s", err.Error()) + return 0, err + default: + } + + return count, nil +} + +/** + * @brief 根据服务和host获取实例 + * @note 不包括metadata + */ +func (ins *instanceStore) GetInstancesMainByService(serviceID, host string) ([]*model.Instance, error) { + // 只查询有效的服务实例 + str := genInstanceSelectSQL() + " where service_id = ? and host = ? and flag = 0" + rows, err := ins.master.Query(str, serviceID, host) + if err != nil { + log.Errorf("[Store][database] get instances main query err: %s", err.Error()) + return nil, err + } + + var out []*model.Instance + err = callFetchInstanceRows(rows, func(entry *model.InstanceStore) (b bool, e error) { + out = append(out, model.Store2Instance(entry)) + return true, nil + }) + if err != nil { + log.Errorf("[Store][database] call fetch instance rows err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +/** + * @brief 根据过滤条件查看对应服务实例及数目 + */ +func (ins *instanceStore) GetExpandInstances(filter, metaFilter map[string]string, offset uint32, + limit uint32) (uint32, []*model.Instance, error) { + // 只查询有效的实例列表 + filter["instance.flag"] = "0" + + out, err := ins.getExpandInstances(filter, metaFilter, offset, limit) + if err != nil { + return 0, nil, err + } + + num, err := ins.getExpandInstancesCount(filter, metaFilter) + if err != nil { + return 0, nil, err + } + return num, out, err +} + +/** + * @brief 根据过滤条件查看对应服务实例 + */ +func (ins *instanceStore) getExpandInstances(filter, metaFilter map[string]string, offset uint32, + limit uint32) ([]*model.Instance, error) { + // 这种情况意味着,不需要详细的数据,可以不用query了 + if limit == 0 { + return make([]*model.Instance, 0), nil + } + _, isName := filter["name"] + _, isNamespace := filter["namespace"] + _, isHost := filter["host"] + needForceIndex := isName || isNamespace || isHost + + str := genExpandInstanceSelectSQL(needForceIndex) + order := &Order{"instance.mtime", "desc"} + str, args := genWhereSQLAndArgs(str, filter, metaFilter, order, offset, limit) + + rows, err := ins.master.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] get instance by filters query err: %s, str: %s, args: %v", err.Error(), str, args) + return nil, err + } + + out, err := ins.getRowExpandInstances(rows) + if err != nil { + log.Errorf("[Store][database] get row instances err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +/** + * @brief 根据过滤条件查看对应服务实例的数目 + */ +func (ins *instanceStore) getExpandInstancesCount(filter, metaFilter map[string]string) (uint32, error) { + str := `select count(*) from instance ` + // 查询条件是否有service表中的字段 + _, isName := filter["name"] + _, isNamespace := filter["namespace"] + if isName || isNamespace { + str += `inner join service on instance.service_id = service.id ` + } + str, args := genWhereSQLAndArgs(str, filter, metaFilter, nil, 0, 1) + + var count uint32 + var err error + Retry("query-instance-row", func() error { + err = ins.master.QueryRow(str, args...).Scan(&count) + return err + }) + switch { + case err == sql.ErrNoRows: + log.Errorf("[Store][database] no row with this expand instance filter") + return count, err + case err != nil: + log.Errorf("[Store][database] get expand instance count by filter err: %s", err.Error()) + return count, err + default: + return count, nil + } +} + +/** + * @brief 根据mtime获取增量修改数据 +* 这里会返回所有的数据的,包括valid=false的数据 +* 对于首次拉取,firstUpdate=true,只会拉取flag!=1的数据 +*/ +func (ins *instanceStore) GetMoreInstances(mtime time.Time, firstUpdate, needMeta bool, serviceID []string) ( + map[string]*model.Instance, error) { + if needMeta { + instances, err := ins.getMoreInstancesMainWithMeta(mtime, firstUpdate, serviceID) + if err != nil { + return nil, err + } + return instances, nil + } else { + instances, err := ins.getMoreInstancesMain(mtime, firstUpdate, serviceID) + if err != nil { + return nil, err + } + return instances, nil + } +} + +/** + * @brief 根据实例ID获取实例的metadata + */ +func (ins *instanceStore) GetInstanceMeta(instanceID string) (map[string]string, error) { + str := "select `mkey`, `mvalue` from instance_metadata where id = ?" + rows, err := ins.master.Query(str, instanceID) + if err != nil { + log.Errorf("[Store][database] query instance meta err: %s", err.Error()) + return nil, err + } + defer rows.Close() + + out := make(map[string]string) + var key, value string + for rows.Next() { + if err := rows.Scan(&key, &value); err != nil { + log.Errorf("[Store][database] get instance meta rows scan err: %s", err.Error()) + return nil, err + } + + out[key] = value + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] get instance meta rows next err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +/** + * @brief 设置实例健康状态 + */ +func (ins *instanceStore) SetInstanceHealthStatus(instanceID string, flag int, revision string) error { + str := "update instance set health_status = ?, revision = ?, mtime = sysdate() where `id` = ?" + _, err := ins.master.Exec(str, flag, revision, instanceID) + return store.Error(err) +} + +/** + * @brief 批量设置实例隔离状态 + */ +func (ins *instanceStore) BatchSetInstanceIsolate(ids []interface{}, isolate int, revision string) error { + return BatchOperation("set-instance-isolate", ids, func(objects []interface{}) error { + if len(objects) == 0 { + return nil + } + str := "update instance set isolate = ?, revision = ?, mtime = sysdate() where id in " + str += "(" + PlaceholdersN(len(objects)) + ")" + args := make([]interface{}, 0, len(objects)+2) + args = append(args, isolate) + args = append(args, revision) + args = append(args, objects...) + _, err := ins.master.Exec(str, args...) + return store.Error(err) + }) +} + +// 内部获取instance函数,根据instanceID,直接读取元数据,不做其他过滤 +func (ins *instanceStore) getInstance(instanceID string) (*model.Instance, error) { + str := genInstanceSelectSQL() + " where instance.id = ?" + rows, err := ins.master.Query(str, instanceID) + if err != nil { + log.Errorf("[Store][database] get instance query err: %s", err.Error()) + return nil, err + } + + out, err := fetchInstanceRows(rows) + if err != nil { + return nil, err + } + + if len(out) == 0 { + return nil, err + } + + meta, err := ins.GetInstanceMeta(out[0].ID()) + if err != nil { + return nil, err + } + out[0].MallocProto() + out[0].Proto.Metadata = meta + + return out[0], nil +} + +/** + * @brief 获取增量instance+healthcheck+meta内容 + * @note ro库有多个实例,且主库到ro库各实例的同步时间不一致。为避免获取不到meta,需要采用一条sql语句获取全部数据 + */ +func (ins *instanceStore) getMoreInstancesMainWithMeta(mtime time.Time, firstUpdate bool, serviceID []string) ( + map[string]*model.Instance, error) { + // 首次拉取 + if firstUpdate { + // 获取全量服务实例 + instances, err := ins.getMoreInstancesMain(mtime, firstUpdate, serviceID) + if err != nil { + log.Errorf("[Store][database] get more instance main err: %s", err.Error()) + return nil, err + } + // 获取全量服务实例元数据 + str := "select id, mkey, mvalue from instance_metadata" + rows, err := ins.slave.Query(str) + if err != nil { + log.Errorf("[Store][database] acquire instances meta query err: %s", err.Error()) + return nil, err + } + if err := fetchInstanceMetaRows(instances, rows); err != nil { + return nil, err + } + return instances, nil + } + + // 非首次拉取 + str := genCompleteInstanceSelectSQL() + " where instance.mtime >= ?" + args := make([]interface{}, 0, len(serviceID)+1) + args = append(args, time2String(mtime)) + + if len(serviceID) > 0 { + str += " and service_id in (" + PlaceholdersN(len(serviceID)) + str += ")" + } + for _, id := range serviceID { + args = append(args, id) + } + + rows, err := ins.slave.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] get more instance query err: %s", err.Error()) + return nil, err + } + return fetchInstanceWithMetaRows(rows) +} + +/** + * @brief 获取instance main+health_check+instance_metadata rows里面的数据 + */ +func fetchInstanceWithMetaRows(rows *sql.Rows) (map[string]*model.Instance, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + out := make(map[string]*model.Instance) + var item model.InstanceStore + var id, mKey, mValue string + progress := 0 + for rows.Next() { + progress++ + if progress%100000 == 0 { + log.Infof("[Store][database] instance+meta fetch rows progress: %d", progress) + } + if err := rows.Scan(&item.ID, &item.ServiceID, &item.VpcID, &item.Host, &item.Port, &item.Protocol, + &item.Version, &item.HealthStatus, &item.Isolate, &item.Weight, &item.EnableHealthCheck, + &item.LogicSet, &item.Region, &item.Zone, &item.Campus, &item.Priority, &item.Revision, + &item.Flag, &item.CheckType, &item.TTL, &id, &mKey, &mValue, + &item.CreateTime, &item.ModifyTime); err != nil { + log.Errorf("[Store][database] fetch instance+meta rows err: %s", err.Error()) + return nil, err + } + + if _, ok := out[item.ID]; !ok { + out[item.ID] = model.Store2Instance(&item) + } + // 实例存在meta + if id != "" { + if out[item.ID].Proto.Metadata == nil { + out[item.ID].Proto.Metadata = make(map[string]string) + } + out[item.ID].Proto.Metadata[mKey] = mValue + } + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch instance+metadata rows next err: %s", err.Error()) + return nil, err + } + return out, nil +} + +// 获取增量instances 主表内容,health_check内容 +func (ins *instanceStore) getMoreInstancesMain(mtime time.Time, firstUpdate bool, serviceID []string) ( + map[string]*model.Instance, error) { + str := genInstanceSelectSQL() + " where instance.mtime >= ?" + args := make([]interface{}, 0, len(serviceID)+1) + args = append(args, time2String(mtime)) + + if firstUpdate { + str += " and flag != 1" // nolint + } + + if len(serviceID) > 0 { + str += " and service_id in (" + PlaceholdersN(len(serviceID)) + str += ")" + } + for _, id := range serviceID { + args = append(args, id) + } + + rows, err := ins.slave.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] get more instance query err: %s", err.Error()) + return nil, err + } + + out := make(map[string]*model.Instance) + err = callFetchInstanceRows(rows, func(entry *model.InstanceStore) (b bool, e error) { + out[entry.ID] = model.Store2Instance(entry) + return true, nil + }) + if err != nil { + log.Errorf("[Store][database] call fetch instance rows err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +// 根据rows获取对应expandInstance +func (ins *instanceStore) getRowExpandInstances(rows *sql.Rows) ([]*model.Instance, error) { + out, err := fetchExpandInstanceRows(rows) + if err != nil { + return nil, err + } + + data := make([]interface{}, 0, len(out)) + for idx := range out { + data = append(data, out[idx].Proto) + } + + err = BatchQuery("expand-instance-metadata", data, func(objects []interface{}) error { + return ins.batchAcquireInstanceMetadata(objects) + }) + if err != nil { + log.Errorf("[Store][database] get expand instances metadata err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +// 批量获取instance的metadata信息 +// web端获取实例的数据的时候使用 +func (ins *instanceStore) batchAcquireInstanceMetadata(instances []interface{}) error { + rows, err := batchQueryMetadata(ins.master.Query, instances) + if err != nil { + return err + } + if rows == nil { + return nil + } + defer rows.Close() + + out := make(map[string]map[string]string) + var id, key, value string + for rows.Next() { + if err := rows.Scan(&id, &key, &value); err != nil { + log.Errorf("[Store][database] multi query instance metadata rows scan err: %s", err.Error()) + return err + } + if _, ok := out[id]; !ok { + out[id] = make(map[string]string) + } + out[id][key] = value + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] multi query instance metadata rows next err: %s", err.Error()) + return err + } + + // 把接收到的metadata,设置到instance中 + // 这里会有两层循环,后续可以优化 TODO + for id, meta := range out { + for _, ele := range instances { + if id == ele.(*v1.Instance).GetId().GetValue() { + ele.(*v1.Instance).Metadata = meta + break + } + } + } + + return nil +} + +// 批量查找metadata +func batchQueryMetadata(queryHandler QueryHandler, instances []interface{}) (*sql.Rows, error) { + if len(instances) == 0 { + return nil, nil + } + + str := "select `id`, `mkey`, `mvalue` from instance_metadata where id in(" + first := true + args := make([]interface{}, 0, len(instances)) + for _, ele := range instances { + if first { + str += "?" + first = false + } else { + str += ",?" + } + args = append(args, ele.(*v1.Instance).GetId().GetValue()) + } + str += ")" + + rows, err := queryHandler(str, args...) + if err != nil { + log.Errorf("[Store][database] multi query instance metadata err: %s", err.Error()) + return nil, err + } + + return rows, nil +} + +// 往instance主表中增加数据 +func addMainInstance(tx *BaseTx, instance *model.Instance) error { + // #lizard forgives + str := `insert into instance(id, service_id, vpc_id, host, port, protocol, version, health_status, isolate, + weight, enable_health_check, logic_set, cmdb_region, cmdb_zone, cmdb_idc, priority, revision, ctime, mtime) + values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, sysdate(), sysdate())` + _, err := tx.Exec(str, instance.ID(), instance.ServiceID, instance.VpcID(), instance.Host(), instance.Port(), + instance.Protocol(), instance.Version(), instance.Healthy(), instance.Isolate(), instance.Weight(), + instance.EnableHealthCheck(), instance.LogicSet(), instance.Location().GetRegion().GetValue(), + instance.Location().GetZone().GetValue(), instance.Location().GetCampus().GetValue(), + instance.Priority(), instance.Revision()) + return err +} + +// 批量增加main instance数据 +func batchAddMainInstances(tx *BaseTx, instances []*model.Instance) error { + str := `insert into instance(id, service_id, vpc_id, host, port, protocol, version, health_status, isolate, + weight, enable_health_check, logic_set, cmdb_region, cmdb_zone, cmdb_idc, priority, revision, ctime, mtime) + values` + first := true + args := make([]interface{}, 0) + for _, entry := range instances { + if !first { + str += "," + } + str += "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, sysdate(), sysdate())" + first = false + args = append(args, entry.ID(), entry.ServiceID, entry.VpcID(), entry.Host(), entry.Port()) + args = append(args, entry.Protocol(), entry.Version(), entry.Healthy(), entry.Isolate(), + entry.Weight()) + args = append(args, entry.EnableHealthCheck(), entry.LogicSet(), + entry.Location().GetRegion().GetValue(), entry.Location().GetZone().GetValue(), + entry.Location().GetCampus().GetValue(), entry.Priority(), entry.Revision()) + } + + _, err := tx.Exec(str, args...) + return err +} + +// 往health_check加入健康检查信息 +func addInstanceCheck(tx *BaseTx, instance *model.Instance) error { + check := instance.HealthCheck() + if check == nil { + return nil + } + + str := "insert into health_check(`id`, `type`, `ttl`) values(?, ?, ?)" + _, err := tx.Exec(str, instance.ID(), check.GetType(), + check.GetHeartbeat().GetTtl().GetValue()) + return err +} + +// 批量增加healthCheck数据 +func batchAddInstanceCheck(tx *BaseTx, instances []*model.Instance) error { + str := "insert into health_check(`id`, `type`, `ttl`) values" + first := true + args := make([]interface{}, 0) + for _, entry := range instances { + if entry.HealthCheck() == nil { + continue + } + if !first { + str += "," + } + str += "(?,?,?)" + first = false + args = append(args, entry.ID(), entry.HealthCheck().GetType(), + entry.HealthCheck().GetHeartbeat().GetTtl().GetValue()) + } + // 不存在健康检查信息,直接返回 + if first { + return nil + } + + _, err := tx.Exec(str, args...) + return err + +} + +// 往表中加入instance meta数据 +func addInstanceMeta(tx *BaseTx, id string, meta map[string]string) error { + if len(meta) == 0 { + return nil + } + + str := "insert into instance_metadata(`id`, `mkey`, `mvalue`, `ctime`, `mtime`) values " + args := make([]interface{}, 0, len(meta)*3) + cnt := 0 + for key, value := range meta { + cnt++ + if cnt == len(meta) { + str += "(?, ?, ?, sysdate(), sysdate())" // nolint + } else { + str += "(?, ?, ?, sysdate(), sysdate()), " + } + + args = append(args, id) + args = append(args, key) + args = append(args, value) + } + + _, err := tx.Exec(str, args...) + return err +} + +// 批量增加metadata数据 +func batchAddInstanceMeta(tx *BaseTx, instances []*model.Instance) error { + str := "insert into instance_metadata(`id`, `mkey`, `mvalue`, `ctime`, `mtime`) values" + args := make([]interface{}, 0) + first := true + for _, entry := range instances { + if entry.Metadata() == nil || len(entry.Metadata()) == 0 { + continue + } + + for key, value := range entry.Metadata() { + if !first { + str += "," + } + str += "(?, ?, ?, sysdate(), sysdate())" // nolint + first = false + args = append(args, entry.ID(), key, value) + } + } + // 不存在metadata,直接返回 + if first { + return nil + } + + _, err := tx.Exec(str, args...) + return err +} + +// 更新instance的meta表 +func updateInstanceMeta(tx *BaseTx, instance *model.Instance) error { + // 只有metadata为nil的时候,则不用处理。 + // 如果metadata不为nil,但是len(metadata) == 0,则代表删除metadata + meta := instance.Metadata() + if meta == nil { + return nil + } + + deleteStr := "delete from instance_metadata where id = ?" + if _, err := tx.Exec(deleteStr, instance.ID()); err != nil { + return err + } + return addInstanceMeta(tx, instance.ID(), meta) +} + +// 更新instance的check表 +func updateInstanceCheck(tx *BaseTx, instance *model.Instance) error { + // healthCheck为空,则删除 + check := instance.HealthCheck() + if check == nil { + return deleteInstanceCheck(tx, instance.ID()) + } + + str := "replace into health_check(id, type, ttl) values(?, ?, ?)" + _, err := tx.Exec(str, instance.ID(), check.GetType(), + check.GetHeartbeat().GetTtl().GetValue()) + return err +} + +// 更新instance主表 +func updateInstanceMain(tx *BaseTx, instance *model.Instance) error { + str := `update instance set protocol = ?, + version = ?, health_status = ?, isolate = ?, weight = ?, enable_health_check = ?, logic_set = ?, + cmdb_region = ?, cmdb_zone = ?, cmdb_idc = ?, priority = ?, revision = ?, mtime = sysdate() where id = ?` + + _, err := tx.Exec(str, instance.Protocol(), instance.Version(), instance.Healthy(), instance.Isolate(), + instance.Weight(), instance.EnableHealthCheck(), instance.LogicSet(), + instance.Location().GetRegion().GetValue(), instance.Location().GetZone().GetValue(), + instance.Location().GetCampus().GetValue(), instance.Priority(), + instance.Revision(), instance.ID()) + + return err +} + +// 删除healthCheck数据 +func deleteInstanceCheck(tx *BaseTx, id string) error { + str := "delete from health_check where id = ?" + _, err := tx.Exec(str, id) + return err +} + +// 获取instance rows的内容 +func fetchInstanceRows(rows *sql.Rows) ([]*model.Instance, error) { + var out []*model.Instance + err := callFetchInstanceRows(rows, func(entry *model.InstanceStore) (b bool, e error) { + out = append(out, model.Store2Instance(entry)) + return true, nil + }) + if err != nil { + log.Errorf("[Store][database] call fetch instance rows err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +// 带回调的fetch instance +func callFetchInstanceRows(rows *sql.Rows, callback func(entry *model.InstanceStore) (bool, error)) error { + if rows == nil { + return nil + } + defer rows.Close() + var item model.InstanceStore + progress := 0 + for rows.Next() { + progress++ + if progress%100000 == 0 { + log.Infof("[Store][database] instance fetch rows progress: %d", progress) + } + err := rows.Scan(&item.ID, &item.ServiceID, &item.VpcID, &item.Host, &item.Port, &item.Protocol, + &item.Version, &item.HealthStatus, &item.Isolate, &item.Weight, &item.EnableHealthCheck, + &item.LogicSet, &item.Region, &item.Zone, &item.Campus, &item.Priority, &item.Revision, + &item.Flag, &item.CheckType, &item.TTL, &item.CreateTime, &item.ModifyTime) + if err != nil { + log.Errorf("[Store][database] fetch instance rows err: %s", err.Error()) + return err + } + ok, err := callback(&item) + if err != nil { + return err + } + if !ok { + return nil + } + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] instance rows catch err: %s", err.Error()) + return err + } + + return nil +} + +// 获取expandInstance rows的内容 +func fetchExpandInstanceRows(rows *sql.Rows) ([]*model.Instance, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + var out []*model.Instance + var item model.ExpandInstanceStore + var instance model.InstanceStore + item.ServiceInstance = &instance + progress := 0 + for rows.Next() { + progress++ + if progress%50000 == 0 { + log.Infof("[Store][database] expand instance fetch rows progress: %d", progress) + } + err := rows.Scan(&instance.ID, &instance.ServiceID, &instance.VpcID, &instance.Host, &instance.Port, + &instance.Protocol, &instance.Version, &instance.HealthStatus, &instance.Isolate, + &instance.Weight, &instance.EnableHealthCheck, &instance.LogicSet, &instance.Region, + &instance.Zone, &instance.Campus, &instance.Priority, &instance.Revision, &instance.Flag, + &instance.CheckType, &instance.TTL, &item.ServiceName, &item.Namespace, + &instance.CreateTime, &instance.ModifyTime) + if err != nil { + log.Errorf("[Store][database] fetch instance rows err: %s", err.Error()) + return nil, err + } + out = append(out, model.ExpandStore2Instance(&item)) + } + + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] instance rows catch err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +// 解析获取instance metadata +func fetchInstanceMetaRows(instances map[string]*model.Instance, rows *sql.Rows) error { + if rows == nil { + return nil + } + defer rows.Close() + var id, key, value string + progress := 0 + for rows.Next() { + progress++ + if progress%500000 == 0 { + log.Infof("[Store][database] fetch instance meta progress: %d", progress) + } + if err := rows.Scan(&id, &key, &value); err != nil { + log.Errorf("[Store][database] fetch instance metadata rows scan err: %s", err.Error()) + return err + } + // 不在目标列表,不存储 + if _, ok := instances[id]; !ok { + continue + } + if instances[id].Proto.Metadata == nil { + instances[id].Proto.Metadata = make(map[string]string) + } + instances[id].Proto.Metadata[key] = value + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch instance metadata rows next err: %s", err.Error()) + return err + } + + return nil + +} + +// 生成instance的select sql语句 +func genInstanceSelectSQL() string { + str := `select instance.id, service_id, IFNULL(vpc_id,""), host, port, IFNULL(protocol, ""), IFNULL(version, ""), + health_status, isolate, weight, enable_health_check, IFNULL(logic_set, ""), IFNULL(cmdb_region, ""), + IFNULL(cmdb_zone, ""), IFNULL(cmdb_idc, ""), priority, revision, flag, IFNULL(health_check.type, -1), + IFNULL(health_check.ttl, 0), UNIX_TIMESTAMP(instance.ctime), UNIX_TIMESTAMP(instance.mtime) + from instance left join health_check + on instance.id = health_check.id ` + return str +} + +// 生成完整instance(主表+health_check+metadata)的sql语句 +func genCompleteInstanceSelectSQL() string { + str := `select instance.id, service_id, IFNULL(vpc_id,""), host, port, IFNULL(protocol, ""), IFNULL(version, ""), + health_status, isolate, weight, enable_health_check, IFNULL(logic_set, ""), IFNULL(cmdb_region, ""), + IFNULL(cmdb_zone, ""), IFNULL(cmdb_idc, ""), priority, revision, flag, IFNULL(health_check.type, -1), + IFNULL(health_check.ttl, 0), IFNULL(instance_metadata.id, ""), IFNULL(mkey, ""), IFNULL(mvalue, ""), + UNIX_TIMESTAMP(instance.ctime), UNIX_TIMESTAMP(instance.mtime) + from instance + left join health_check on instance.id = health_check.id + left join instance_metadata on instance.id = instance_metadata.id ` + return str +} + +// 生成expandInstance的select sql语句 +func genExpandInstanceSelectSQL(needForceIndex bool) string { + str := `select instance.id, service_id, IFNULL(vpc_id,""), host, port, IFNULL(protocol, ""), IFNULL(version, ""), + health_status, isolate, weight, enable_health_check, IFNULL(logic_set, ""), IFNULL(cmdb_region, ""), + IFNULL(cmdb_zone, ""), IFNULL(cmdb_idc, ""), priority, instance.revision, instance.flag, + IFNULL(health_check.type, -1), IFNULL(health_check.ttl, 0), service.name, service.namespace, + UNIX_TIMESTAMP(instance.ctime), UNIX_TIMESTAMP(instance.mtime) + from (service inner join instance ` + if needForceIndex { + str += `force index(service_id, host) ` + } + str += `on service.id = instance.service_id) left join health_check on instance.id = health_check.id ` + return str +} diff --git a/store/defaultStore/l5.go b/store/defaultStore/l5.go new file mode 100644 index 000000000..aa3832b36 --- /dev/null +++ b/store/defaultStore/l5.go @@ -0,0 +1,365 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "fmt" + "time" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" +) + +/** + * @brief 实现了L5Store + */ +type l5Store struct { + db *BaseDB +} + +/** + * @brief 获取L5扩展数据 + */ +func (l5 *l5Store) GetL5Extend(serviceID string) (map[string]interface{}, error) { + return nil, nil +} + +/** + * @brief 保存L5扩展数据 + */ +func (l5 *l5Store) SetL5Extend(serviceID string, meta map[string]interface{}) (map[string]interface{}, error) { + return nil, nil +} + +// 获取下一个sid +func (l5 *l5Store) GenNextL5Sid(layoutID uint32) (string, error) { + var sid string + var err error + + err = RetryTransaction("genNextL5Sid", func() error { + sid, err = l5.genNextL5Sid(layoutID) + return nil + }) + + return sid, err +} + +// genNextL5Sid +func (l5 *l5Store) genNextL5Sid(layoutID uint32) (string, error) { + tx, err := l5.db.Begin() + if err != nil { + log.Errorf("[Store][database] get next l5 sid tx begin err: %s", err.Error()) + return "", err + } + defer func() { _ = tx.Rollback() }() + + getStr := "select module_id, interface_id, range_num from cl5_module limit 0, 1 for update" + var mid, iid, rnum uint32 + if err := tx.QueryRow(getStr).Scan(&mid, &iid, &rnum); err != nil { + log.Errorf("[Store][database] get next l5 sid err: %s", err.Error()) + return "", err + } + + rnum++ + if rnum >= 65536 { + rnum = 0 + iid++ + } + if iid >= 4096 { + iid = 1 + mid++ + } + + updateStr := "update cl5_module set module_id = ?, interface_id = ?, range_num = ?" + if _, err := tx.Exec(updateStr, mid, iid, rnum); err != nil { + log.Errorf("[Store][database] get next l5 sid, update module err: %s", err.Error()) + return "", err + } + // 更新完数据库之后,可以直接提交tx + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] get next l5 sid tx commit err: %s", err.Error()) + return "", err + } + + // 数据表已经更改,生成sid的元素说明是唯一的,可以组合sid了 + modID := mid<<6 + layoutID + cmdID := iid<<16 + rnum + return fmt.Sprintf("%d:%d", modID, cmdID), nil +} + +/** + * @brief 获取更多的增量数据 + */ +func (l5 *l5Store) GetMoreL5Extend(mtime time.Time) (map[string]map[string]interface{}, error) { + return nil, nil +} + +/** + * @brief 获取更多的L5 Route信息 + */ +func (l5 *l5Store) GetMoreL5Routes(flow uint32) ([]*model.Route, error) { + str := getL5RouteSelectSQL() + " where Fflow > ?" + rows, err := l5.db.Query(str, flow) + if err != nil { + log.Errorf("[Store][database] get more l5 route query err: %s", err.Error()) + return nil, err + } + + return l5RouteFetchRows(rows) +} + +/** + * @brief 获取更多的L5 Policy信息 + */ +func (l5 *l5Store) GetMoreL5Policies(flow uint32) ([]*model.Policy, error) { + str := getL5PolicySelectSQL() + " where Fflow > ?" + rows, err := l5.db.Query(str, flow) + if err != nil { + log.Errorf("[Store][database] get more l5 policy query err: %s", err.Error()) + return nil, err + } + + return l5PolicyFetchRows(rows) +} + +/** + * @brief 获取更多的L5 Section信息 + */ +func (l5 *l5Store) GetMoreL5Sections(flow uint32) ([]*model.Section, error) { + str := getL5SectionSelectSQL() + " where Fflow > ?" + rows, err := l5.db.Query(str, flow) + if err != nil { + log.Errorf("[Store][database] get more l5 section query err: %s", err.Error()) + return nil, err + } + + return l5SectionFetchRows(rows) +} + +/** + * @brief 获取更多的L5 IPConfig信息 + */ +func (l5 *l5Store) GetMoreL5IPConfigs(flow uint32) ([]*model.IPConfig, error) { + str := getL5IPConfigSelectSQL() + " where Fflow > ?" + rows, err := l5.db.Query(str, flow) + if err != nil { + log.Errorf("[Store][database] get more l5 ip config query err: %s", err.Error()) + return nil, err + } + + return l5IPConfigFetchRows(rows) +} + +/** + * @brief 生成L5 Route的select sql语句 + */ +func getL5RouteSelectSQL() string { + str := `select Fip, FmodId, FcmdId, FsetId, IFNULL(Fflag, 0), Fflow from t_route` + return str +} + +/** + * @brief 生成L5 Policy的select sql语句 + */ +func getL5PolicySelectSQL() string { + str := `select FmodId, Fdiv, Fmod, IFNULL(Fflag, 0), Fflow from t_policy` + return str +} + +/** + * @brief 生成L5 Section的select sql语句 + */ +func getL5SectionSelectSQL() string { + str := `select FmodId, Ffrom, Fto, Fxid, IFNULL(Fflag, 0), Fflow from t_section` + return str +} + +/** + * @brief 生成L5 IPConfig的select sql语句 + */ +func getL5IPConfigSelectSQL() string { + str := `select Fip, FareaId, FcityId, FidcId, IFNULL(Fflag, 0), Fflow from t_ip_config` + return str +} + +/** + * @brief 从route中取出rows的数据 + */ +func l5RouteFetchRows(rows *sql.Rows) ([]*model.Route, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + var out []*model.Route + var flag int + + progress := 0 + for rows.Next() { + progress++ + if progress%100000 == 0 { + log.Infof("[Store][database] load cl5 route progress: %d", progress) + } + space := &model.Route{} + err := rows.Scan( + &space.IP, + &space.ModID, + &space.CmdID, + &space.SetID, + &flag, + &space.Flow) + if err != nil { + log.Errorf("[Store][database] fetch l5 route rows scan err: %s", err.Error()) + return nil, err + } + + space.Valid = true + if flag == 1 { + space.Valid = false + } + + out = append(out, space) + } + + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch l5 route rows next err: %s", err.Error()) + return nil, err + } + return out, nil +} + +/** + * @brief 从policy中取出rows的数据 + */ +func l5PolicyFetchRows(rows *sql.Rows) ([]*model.Policy, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + var out []*model.Policy + var flag int + + for rows.Next() { + space := &model.Policy{} + err := rows.Scan( + &space.ModID, + &space.Div, + &space.Mod, + &flag, + &space.Flow) + if err != nil { + log.Errorf("[Store][database] fetch l5 policy rows scan err: %s", err.Error()) + return nil, err + } + + space.Valid = true + if flag == 1 { + space.Valid = false + } + + out = append(out, space) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch l5 policy rows next err: %s", err.Error()) + return nil, err + } + return out, nil +} + +/** + * @brief 从section中取出rows的数据 + */ +func l5SectionFetchRows(rows *sql.Rows) ([]*model.Section, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + var out []*model.Section + var flag int + + for rows.Next() { + space := &model.Section{} + err := rows.Scan( + &space.ModID, + &space.From, + &space.To, + &space.Xid, + &flag, + &space.Flow) + if err != nil { + log.Errorf("[Store][database] fetch section rows scan err: %s", err.Error()) + return nil, err + } + + space.Valid = true + if flag == 1 { + space.Valid = false + } + + out = append(out, space) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch section rows next err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +/** + * @brief 从ip config中取出rows的数据 + */ +func l5IPConfigFetchRows(rows *sql.Rows) ([]*model.IPConfig, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + var out []*model.IPConfig + var flag int + for rows.Next() { + space := &model.IPConfig{} + err := rows.Scan( + &space.IP, + &space.AreaID, + &space.CityID, + &space.IdcID, + &flag, + &space.Flow) + if err != nil { + log.Errorf("[Store][database] fetch ip config rows scan err: %s", err.Error()) + return nil, err + } + + space.Valid = true + if flag == 1 { + space.Valid = false + } + + out = append(out, space) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch ip config rows next err: %s", err.Error()) + return nil, err + } + + return out, nil +} diff --git a/store/defaultStore/meta_task.go b/store/defaultStore/meta_task.go new file mode 100644 index 000000000..09b9e8946 --- /dev/null +++ b/store/defaultStore/meta_task.go @@ -0,0 +1,227 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "errors" + "github.com/polarismesh/polaris-server/common/log" + "sync" + "time" + + "context" +) + +// 用户处理函数 +type Handler func(item interface{}) error + +// 任务传输结构体 +type Future struct { + item interface{} // 需要处理的参数 + handler Handler // 处理函数 + resp *ResponseFuture // 任务返回future +} + +// 处理任务返回的结构体 +type ResponseFuture struct { + finishCh chan struct{} // 任务执行成功的反馈chan + errCh chan error // 任务执行失败的反馈chan + total int // 本次任务总数 + label string // 任务的标签 + doneCnt int // 记录收到多少个task回复的 + notifyCnt int // 记录分发了多少个task +} + +// 等待任务执行 +func (r *ResponseFuture) wait() error { + //defer log.Infof("[TaskManager][%s] finish all task(%d)", r.label, r.total) + + ticker := time.NewTicker(time.Second * 5) + defer ticker.Stop() + + for { + select { + case err := <-r.errCh: + // 无论成功还失败,收到回复都要增加doneCnt + r.doneCnt++ + return err + case <-r.finishCh: + r.doneCnt++ + if r.doneCnt == r.total { + return nil + } + case <-ticker.C: + log.Infof("[TaskManager][%s] wait for task count(%d) response, finish progress(%d / %d)", + r.label, r.total, r.doneCnt, r.notifyCnt) + } + } +} + +// 返回函数 +func (r *ResponseFuture) reply(err error) { + if err != nil { + r.errCh <- err + } else { + r.finishCh <- struct{}{} + } +} + +// 每个任务集需要释放资源 +func (r *ResponseFuture) release() { + // 如果收到回复的个数==任务分发的个数,那么可以退出 + if r.doneCnt >= r.notifyCnt { + return + } + + waitCnt := 0 + ticker := time.NewTicker(time.Second * 5) // TODO + defer ticker.Stop() + + for { + select { + case <-r.errCh: + waitCnt++ + case <-r.finishCh: + waitCnt++ + case <-ticker.C: + log.Infof("[TaskManager][%s] response release progress(%d / %d)", + r.label, waitCnt, r.notifyCnt-r.doneCnt) + } + + if waitCnt+r.doneCnt == r.notifyCnt { + close(r.errCh) + close(r.finishCh) + return + } + } +} + +// 任务管理器,全局可以有多个,不过尽量全局只有一个 +type TaskManager struct { + recvCh chan *Future + concurrence int + exitCh chan struct{} +} + +// 新建任务管理器 +func NewTaskManager(concurrence int) (*TaskManager, error) { + if concurrence <= 0 { + return nil, errors.New("max channel count is error") + } + + t := &TaskManager{ + recvCh: make(chan *Future, concurrence), + concurrence: concurrence, + exitCh: make(chan struct{}), + } + + return t, nil +} + +// 执行任务集 +func (t *TaskManager) Do(label string, data []interface{}, handler Handler) error { + if len(data) == 0 { + return nil + } + + count := len(data) + maxCount := 64 + if count > maxCount { + count = maxCount + } + + resp := &ResponseFuture{ + finishCh: make(chan struct{}, count), + errCh: make(chan error, count), + total: len(data), + label: label, + doneCnt: 0, + notifyCnt: 0, + } + + ctx, cancel := context.WithCancel(context.Background()) + var wg sync.WaitGroup + + wg.Add(1) + go func(recvCh chan *Future) { + defer wg.Done() + for i := range data { + select { + case <-ctx.Done(): + return + default: + } + + resp.notifyCnt++ + future := &Future{ + item: data[i], + handler: handler, + resp: resp, + } + recvCh <- future + + if resp.notifyCnt%10000 == 0 { + log.Infof("[TaskManager][%s] task notify progress(%d / %d)", label, resp.notifyCnt, len(data)) + } + } + }(t.recvCh) + + // 先到等待任务执行,有可能执行失败,有可能全部执行完 + err := resp.wait() + + // 触发分发协程退出 + cancel() + + // 等待分发协程彻底退出 + wg.Wait() + + // 回收资源 + resp.release() + + return err +} + +// 开启运行任务管理器 +func (t *TaskManager) Start() { + log.Infof("[TaskManager] goroutine count(%d) will start", t.concurrence) + for i := 0; i < t.concurrence; i++ { + go t.worker(i) + } +} + +// 回收任务管理的资源,销毁任务管理器 +func (t *TaskManager) Release() { + close(t.exitCh) +} + +// 任务管理器的工作协程 +func (t *TaskManager) worker(index int) { + //log.Infof("[TaskManager] reading metadata worker(%d) running", index) + defer log.Infof("[TaskManager] reading metadata worker(%d) exit", index) + + for { + select { + case future := <-t.recvCh: + // 收到一个任务,执行任务设置的handler函数 + err := future.handler(future.item) + // 处理回复,保证每个回复都要发送 + future.resp.reply(err) + case <-t.exitCh: + return + } + } +} diff --git a/store/defaultStore/namespace.go b/store/defaultStore/namespace.go new file mode 100644 index 000000000..1943f5e25 --- /dev/null +++ b/store/defaultStore/namespace.go @@ -0,0 +1,292 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "errors" + "fmt" + "github.com/polarismesh/polaris-server/store" + "time" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" +) + +/** + * @brief 实现了NamespaceStore + */ +type namespaceStore struct { + db *BaseDB +} + +/** + * @brief 添加命名空间 + */ +func (ns *namespaceStore) AddNamespace(namespace *model.Namespace) error { + if namespace.Name == "" || namespace.Owner == "" || namespace.Token == "" { + return errors.New("store add namespace some param are empty") + } + + // 先删除无效数据,再添加新数据 + if err := ns.cleanNamespace(namespace.Name); err != nil { + return err + } + + str := "insert into namespace(name, comment, token, owner, ctime, mtime) values(?,?,?,?,sysdate(),sysdate())" + _, err := ns.db.Exec(str, namespace.Name, namespace.Comment, namespace.Token, namespace.Owner) + return store.Error(err) +} + +/** + * @brief 更新命名空间,目前只更新owner + */ +func (ns *namespaceStore) UpdateNamespace(namespace *model.Namespace) error { + if namespace.Name == "" || namespace.Owner == "" { + return errors.New("store update namespace some param are empty") + } + + str := "update namespace set owner = ?, comment = ?,mtime = sysdate() where name = ?" + _, err := ns.db.Exec(str, namespace.Owner, namespace.Comment, namespace.Name) + return store.Error(err) +} + +/** + * @brief 更新命名空间token + */ +func (ns *namespaceStore) UpdateNamespaceToken(name string, token string) error { + if name == "" || token == "" { + return fmt.Errorf("Update Namespace Token missing some params") + } + + str := "update namespace set token = ?, mtime = sysdate() where name = ?" + _, err := ns.db.Exec(str, token, name) + return store.Error(err) +} + +/** + * @brief 展示owner下所有的命名空间 TODO + */ +func (ns *namespaceStore) ListNamespaces(owner string) ([]*model.Namespace, error) { + if owner == "" { + return nil, errors.New("store lst namespaces owner is empty") + } + + str := genNamespaceSelectSQL() + " where owner like '%?%'" + rows, err := ns.db.Query(str, owner) + if err != nil { + return nil, err + } + + return namespaceFetchRows(rows) +} + +/** + * @brief 根据名字获取命名空间详情,只返回有效的 + */ +func (ns *namespaceStore) GetNamespace(name string) (*model.Namespace, error) { + namespace, err := ns.getNamespace(name) + if err != nil { + return nil, err + } + + if namespace != nil && !namespace.Valid { + return nil, nil + } + + return namespace, nil +} + +/** + * @brief 根据过滤条件查询命名空间及数目 + */ +func (ns *namespaceStore) GetNamespaces(filter map[string][]string, offset, limit int) ( + []*model.Namespace, uint32, error) { + // 只查询有效数据 + filter["flag"] = []string{"0"} + + num, err := ns.getNamespacesCount(filter) + if err != nil { + return nil, 0, err + } + + out, err := ns.getNamespaces(filter, offset, limit) + if err != nil { + return nil, 0, err + } + + return out, num, nil +} + +/** + * @brief 根据mtime获取命名空间 + */ +func (ns *namespaceStore) GetMoreNamespaces(mtime time.Time) ([]*model.Namespace, error) { + str := genNamespaceSelectSQL() + " where UNIX_TIMESTAMP(mtime) >= ?" + rows, err := ns.db.Query(str, mtime.Unix()) + if err != nil { + log.Errorf("[Store][database] get more namespace query err: %s", err.Error()) + return nil, err + } + + return namespaceFetchRows(rows) +} + +/** + * @brief 根据相关条件查询对应命名空间数目 + */ +func (ns *namespaceStore) getNamespacesCount(filter map[string][]string) (uint32, error) { + str := `select count(*) from namespace ` + str, args := genNamespaceWhereSQLAndArgs(str, filter, nil, 0, 1) + + var count uint32 + err := ns.db.QueryRow(str, args...).Scan(&count) + switch { + case err == sql.ErrNoRows: + log.Errorf("[Store][database] no row with this namespace filter") + return count, err + case err != nil: + log.Errorf("[Store][database] get namespace count by filter err: %s", err.Error()) + return count, err + default: + return count, err + } +} + +/** + * @brief 根据相关条件查询对应命名空间 + */ +func (ns *namespaceStore) getNamespaces(filter map[string][]string, offset, limit int) ([]*model.Namespace, error) { + str := genNamespaceSelectSQL() + order := &Order{"mtime", "desc"} + str, args := genNamespaceWhereSQLAndArgs(str, filter, order, offset, limit) + + rows, err := ns.db.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] get namespaces by filter query err: %s", err.Error()) + return nil, err + } + + return namespaceFetchRows(rows) +} + +// 获取namespace的内部函数,从数据库中拉取数据 +func (ns *namespaceStore) getNamespace(name string) (*model.Namespace, error) { + if name == "" { + return nil, errors.New("store get namespace name is empty") + } + + str := genNamespaceSelectSQL() + " where name = ?" + rows, err := ns.db.Query(str, name) + if err != nil { + log.Errorf("[Store][database] get namespace query err: %s", err.Error()) + return nil, err + } + + out, err := namespaceFetchRows(rows) + if err != nil { + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + return out[0], nil +} + +// clean真实的数据,只有flag=1的数据才可以清除 +func (ns *namespaceStore) cleanNamespace(name string) error { + str := "delete from namespace where name = ? and flag = 1" + // 必须打印日志说明 + log.Infof("[Store][database] clean namespace(%s)", name) + if _, err := ns.db.Exec(str, name); err != nil { + log.Infof("[Store][database] clean namespace(%s) err: %s", name, err.Error()) + return err + } + + return nil +} + +// rlock namespace +func rlockNamespace(queryRow func(query string, args ...interface{}) *sql.Row, namespace string) ( + string, error) { + str := "select name from namespace where name = ? and flag != 1 lock in share mode" + + var name string + err := queryRow(str, namespace).Scan(&name) + switch { + case err == sql.ErrNoRows: + return "", nil + case err != nil: + return "", err + default: + return name, nil + } +} + +// 生成namespace的查询语句 +func genNamespaceSelectSQL() string { + str := `select name, IFNULL(comment, ""), token, owner, flag, UNIX_TIMESTAMP(ctime), UNIX_TIMESTAMP(mtime) + from namespace ` + return str +} + +/** + * @brief 取出rows的数据 + */ +func namespaceFetchRows(rows *sql.Rows) ([]*model.Namespace, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + var out []*model.Namespace + var ctime, mtime int64 + var flag int + + for rows.Next() { + space := &model.Namespace{} + err := rows.Scan( + &space.Name, + &space.Comment, + &space.Token, + &space.Owner, + &flag, + &ctime, + &mtime) + if err != nil { + log.Errorf("[Store][database] fetch namespace rows scan err: %s", err.Error()) + return nil, err + } + + space.CreateTime = time.Unix(ctime, 0) + space.ModifyTime = time.Unix(mtime, 0) + space.Valid = true + if flag == 1 { + space.Valid = false + } + + out = append(out, space) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch namespace rows next err: %s", err.Error()) + return nil, err + } + + return out, nil +} diff --git a/store/defaultStore/platform.go b/store/defaultStore/platform.go new file mode 100644 index 000000000..17dac6e28 --- /dev/null +++ b/store/defaultStore/platform.go @@ -0,0 +1,231 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "errors" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" + "time" +) + +/** + * @brief platformStore的实现 + */ +type platformStore struct { + master *BaseDB +} + +/** + * @brief 创建平台 + */ +func (p *platformStore) CreatePlatform(platform *model.Platform) error { + if platform.ID == "" { + return errors.New("create platform missing id") + } + + if err := p.cleanPlatform(platform.ID); err != nil { + return store.Error(err) + } + + str := `insert into platform + (id, name, domain, qps, token, owner, department, comment, flag, ctime, mtime) + values(?,?,?,?,?,?,?,?,?,sysdate(),sysdate())` + if _, err := p.master.Exec(str, platform.ID, platform.Name, platform.Domain, platform.QPS, platform.Token, + platform.Owner, platform.Department, platform.Comment, 0); err != nil { + log.Errorf("[Store][platform] create platform(%s) err: %s", platform.ID, err.Error()) + return store.Error(err) + } + + return nil +} + +/** + * @brief 删除平台信息 + */ +func (p *platformStore) DeletePlatform(id string) error { + if id == "" { + return errors.New("delete platform missing id") + } + + str := `update platform set flag = 1, mtime = sysdate() where id = ?` + if _, err := p.master.Exec(str, id); err != nil { + log.Errorf("[Store][platform] delete platform(%s) err: %s", id, err.Error()) + return store.Error(err) + } + + return nil +} + +/** + * @brief 修改平台信息 + */ +func (p *platformStore) UpdatePlatform(platform *model.Platform) error { + str := `update platform set name = ?, domain = ?, qps = ?, token = ?, owner = ?, department = ?, comment = ?, + mtime = sysdate() where id = ?` + if _, err := p.master.Exec(str, platform.Name, platform.Domain, platform.QPS, platform.Token, platform.Owner, + platform.Department, platform.Comment, platform.ID); err != nil { + log.Errorf("[Store][platform] update platform(%+v) err: %s", platform, err.Error()) + return store.Error(err) + } + return nil +} + +/** + * @brief 查询平台信息 + */ +func (p *platformStore) GetPlatformById(id string) (*model.Platform, error) { + if id == "" { + return nil, errors.New("get platform by id missing id") + } + + str := genSelectPlatformSQL() + " where id = ? and flag = 0" + + rows, err := p.master.Query(str, id) + if err != nil { + log.Errorf("[Store][platform] get platform by id(%s) err: %s", id, err.Error()) + return nil, err + } + + out, err := fetchPlatformRows(rows) + if err != nil { + return nil, err + } + if len(out) == 0 { + return nil, nil + } + return out[0], nil +} + +/** + * @brief 根据过滤条件查询平台信息及总数 + */ +func (p *platformStore) GetPlatforms(filter map[string]string, offset uint32, limit uint32) ( + uint32, []*model.Platform, error) { + out, err := p.getPlatforms(filter, offset, limit) + if err != nil { + return 0, nil, err + } + num, err := p.getPlatformsCount(filter) + if err != nil { + return 0, nil, err + } + return num, out, nil +} + +/** + * @brief 根据过滤条件查询平台信息 + */ +func (p *platformStore) getPlatforms(filter map[string]string, offset uint32, limit uint32) ( + []*model.Platform, error) { + // 不查询任何内容,直接返回空数组 + if limit == 0 { + return make([]*model.Platform, 0), nil + } + str := genSelectPlatformSQL() + " where flag = 0" + filterStr, args := genFilterSQL(filter) + if filterStr != "" { + str += " and " + filterStr + } + + order := &Order{"mtime", "desc"} + page := &Page{offset, limit} + opStr, opArgs := genOrderAndPage(order, page) + + str += opStr + args = append(args, opArgs...) + + rows, err := p.master.Query(str, args...) + if err != nil { + log.Errorf("[Store][platform] get platforms by filter query(%s) err: %s", str, err.Error()) + return nil, err + } + + out, err := fetchPlatformRows(rows) + if err != nil { + return nil, err + } + + return out, nil +} + +/** + * @brief 根据过滤条件获取平台总数 + */ +func (p *platformStore) getPlatformsCount(filter map[string]string) (uint32, error) { + str := `select count(*) from platform where flag = 0 ` + filterStr, args := genFilterSQL(filter) + if filterStr != "" { + str += " and " + filterStr + } + return queryEntryCount(p.master, str, args) +} + +/** + * @brief 读取平台信息数据 + */ +func fetchPlatformRows(rows *sql.Rows) ([]*model.Platform, error) { + defer rows.Close() + var out []*model.Platform + for rows.Next() { + var platform model.Platform + var flag int + var ctime, mtime int64 + err := rows.Scan(&platform.ID, &platform.Name, &platform.Domain, &platform.QPS, &platform.Token, + &platform.Owner, &platform.Department, &platform.Comment, &flag, &ctime, &mtime) + if err != nil { + log.Errorf("[Store][platform] fetch platform scan err: %s", err.Error()) + return nil, err + } + platform.CreateTime = time.Unix(ctime, 0) + platform.ModifyTime = time.Unix(mtime, 0) + platform.Valid = true + if flag == 1 { + platform.Valid = false + } + out = append(out, &platform) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][platform] fetch platform next err: %s", err.Error()) + return nil, err + } + return out, nil +} + +/** + * @brief 彻底删除平台信息 + */ +func (p *platformStore) cleanPlatform(id string) error { + str := `delete from platform where id = ? and flag = 1` + if _, err := p.master.Exec(str, id); err != nil { + log.Errorf("[Store][platform] clean platform (%s) err: %s", id, err.Error()) + return err + } + return nil +} + +/** + * @brief 查询平台信息sql + */ +func genSelectPlatformSQL() string { + str := `select id, name, domain, qps, token, owner, IFNULL(department, ""), IFNULL(comment, ""), flag, + unix_timestamp(ctime), unix_timestamp(mtime) from platform ` + return str +} diff --git a/store/defaultStore/polaris_server.sql b/store/defaultStore/polaris_server.sql new file mode 100644 index 000000000..16864bb43 --- /dev/null +++ b/store/defaultStore/polaris_server.sql @@ -0,0 +1,584 @@ +-- phpMyAdmin SQL Dump +-- version 4.6.4 +-- https://www.phpmyadmin.net/ +-- +-- Host: 127.0.0.1 +-- Generation Time: 2019-09-30 03:19:00 +-- 服务器版本: 5.7.14 +-- PHP Version: 5.6.25 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `polaris_server` +-- +CREATE DATABASE IF NOT EXISTS `polaris_server` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; +USE `polaris_server`; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `business` +-- + +CREATE TABLE `business` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, + `name` varchar(64) COLLATE utf8_bin NOT NULL, + `token` varchar(64) COLLATE utf8_bin NOT NULL, + `owner` varchar(1024) COLLATE utf8_bin NOT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `instance` +-- + +CREATE TABLE `instance` ( + `id` varchar(40) COLLATE utf8_bin NOT NULL, + `service_id` varchar(32) COLLATE utf8_bin NOT NULL, + `vpc_id` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `host` varchar(128) COLLATE utf8_bin NOT NULL, + `port` int(11) NOT NULL, + `protocol` varchar(32) COLLATE utf8_bin DEFAULT NULL, + `version` varchar(32) COLLATE utf8_bin DEFAULT NULL, + `health_status` tinyint(4) NOT NULL DEFAULT '1', + `isolate` tinyint(4) NOT NULL DEFAULT '0', + `weight` smallint(6) NOT NULL DEFAULT '100', + `enable_health_check` tinyint(4) NOT NULL DEFAULT '0', + `logic_set` varchar(128) COLLATE utf8_bin DEFAULT NULL, + `cmdb_region` varchar(128) COLLATE utf8_bin DEFAULT NULL, + `cmdb_zone` varchar(128) COLLATE utf8_bin DEFAULT NULL, + `cmdb_idc` varchar(128) COLLATE utf8_bin DEFAULT NULL, + `priority` tinyint(4) NOT NULL DEFAULT '0', + `revision` varchar(32) COLLATE utf8_bin NOT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `service_id` (`service_id`), + KEY `mtime` (`mtime`), + KEY `host` (`host`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `health_check` +-- + +CREATE TABLE `health_check` ( + `id` varchar(40) COLLATE utf8_bin NOT NULL, + `type` tinyint(4) NOT NULL DEFAULT '0', + `ttl` int(11) NOT NULL, + PRIMARY KEY (`id`), + CONSTRAINT `health_check_ibfk_1` FOREIGN KEY (`id`) REFERENCES `instance` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `instance_metadata` +-- + +CREATE TABLE `instance_metadata` ( + `id` varchar(40) COLLATE utf8_bin NOT NULL, + `mkey` varchar(128) COLLATE utf8_bin NOT NULL, + `mvalue` varchar(4096) COLLATE utf8_bin NOT NULL, + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`,`mkey`), + KEY `mkey` (`mkey`), + CONSTRAINT `instance_metadata_ibfk_1` FOREIGN KEY (`id`) REFERENCES `instance` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `namespace` +-- + +CREATE TABLE `namespace` ( + `name` varchar(64) COLLATE utf8_bin NOT NULL, + `comment` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `token` varchar(64) COLLATE utf8_bin NOT NULL, + `owner` varchar(1024) COLLATE utf8_bin NOT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- +-- 转存表中的数据 `namespace` +-- + +INSERT INTO `namespace` (`name`, `comment`, `token`, `owner`, `flag`, `ctime`, `mtime`) VALUES +('Polaris', 'Polaris-server', '2d1bfe5d12e04d54b8ee69e62494c7fd', 'polaris', 0, '2019-09-06 07:55:07', '2019-09-06 07:55:07'), +('default', 'Default Environment', 'e2e473081d3d4306b52264e49f7ce227', 'polaris', 0, '2021-07-27 19:37:37', '2021-07-27 19:37:37'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `routing_config` +-- + +CREATE TABLE `routing_config` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, + `in_bounds` text COLLATE utf8_bin, + `out_bounds` text COLLATE utf8_bin, + `revision` varchar(40) COLLATE utf8_bin NOT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `mtime` (`mtime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `ratelimit_config` +-- + +CREATE TABLE `ratelimit_config` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, + `service_id` varchar(32) COLLATE utf8_bin NOT NULL, + `cluster_id` varchar(32) COLLATE utf8_bin NOT NULL, + `labels` text COLLATE utf8_bin NOT NULL, + `priority` smallint(6) NOT NULL DEFAULT '0', + `rule` text COLLATE utf8_bin NOT NULL, + `revision` varchar(32) COLLATE utf8_bin NOT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `mtime` (`mtime`), + KEY `service_id` (`service_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `ratelimit_revision` +-- + +CREATE TABLE `ratelimit_revision` ( + `service_id` varchar(32) COLLATE utf8_bin NOT NULL, + `last_revision` varchar(40) COLLATE utf8_bin NOT NULL, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`service_id`), + KEY `service_id` (`service_id`), + KEY `mtime` (`mtime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `service` +-- + +CREATE TABLE `service` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, + `name` varchar(128) COLLATE utf8_bin NOT NULL, + `namespace` varchar(64) COLLATE utf8_bin NOT NULL, + `ports` varchar(8192) COLLATE utf8_bin DEFAULT NULL, + `business` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `department` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `cmdb_mod1` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `cmdb_mod2` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `cmdb_mod3` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `comment` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `token` varchar(2048) COLLATE utf8_bin NOT NULL, + `revision` varchar(32) COLLATE utf8_bin NOT NULL, + `owner` varchar(1024) COLLATE utf8_bin NOT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `reference` varchar(32) COLLATE utf8_bin DEFAULT NULL, + `refer_filter` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `platform_id` varchar(32) COLLATE utf8_bin DEFAULT '', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`,`namespace`), + KEY `namespace` (`namespace`), + KEY `mtime` (`mtime`), + KEY `reference` (`reference`), + KEY `platform_id` (`platform_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `service_metadata` +-- + +CREATE TABLE `service_metadata` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, + `mkey` varchar(128) COLLATE utf8_bin NOT NULL, + `mvalue` varchar(4096) COLLATE utf8_bin NOT NULL, + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`,`mkey`), + KEY `mkey` (`mkey`), + CONSTRAINT `service_metadata_ibfk_1` FOREIGN KEY (`id`) REFERENCES `service` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `owner_service_map` +-- + +CREATE TABLE `owner_service_map` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, + `owner` varchar(32) COLLATE utf8_bin NOT NULL, + `service` varchar(128) COLLATE utf8_bin NOT NULL, + `namespace` varchar(64) COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`), + KEY `owner` (`owner`), + KEY `name` (`service`,`namespace`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `circuitbreaker_rule` +-- + +CREATE TABLE `circuitbreaker_rule` ( + `id` varchar(97) COLLATE utf8_bin NOT NULL, + `version` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT 'master', + `name` varchar(32) COLLATE utf8_bin NOT NULL, + `namespace` varchar(64) COLLATE utf8_bin NOT NULL, + `business` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `department` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `comment` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `inbounds` text COLLATE utf8_bin NOT NULL, + `outbounds` text COLLATE utf8_bin NOT NULL, + `token` varchar(32) COLLATE utf8_bin NOT NULL, + `owner` varchar(1024) COLLATE utf8_bin NOT NULL, + `revision` varchar(32) COLLATE utf8_bin NOT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`,`version`), + UNIQUE KEY `name` (`name`,`namespace`,`version`), + KEY `mtime` (`mtime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `circuitbreaker_rule_relation` +-- + +CREATE TABLE `circuitbreaker_rule_relation` ( + `service_id` varchar(32) COLLATE utf8_bin NOT NULL, + `rule_id` varchar(97) COLLATE utf8_bin NOT NULL, + `rule_version` varchar(32) COLLATE utf8_bin NOT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`service_id`), + KEY `mtime` (`mtime`), + KEY `rule_id` (`rule_id`), + CONSTRAINT `circuitbreaker_rule_relation_ibfk_1` FOREIGN KEY (`service_id`) REFERENCES `service` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `platform` +-- + +CREATE TABLE `platform` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, + `name` varchar(128) COLLATE utf8_bin NOT NULL, + `domain` varchar(1024) COLLATE utf8_bin NOT NULL, + `qps` smallint(6) NOT NULL, + `token` varchar(32) COLLATE utf8_bin NOT NULL, + `owner` varchar(1024) COLLATE utf8_bin NOT NULL, + `department` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `comment` varchar(1024) COLLATE utf8_bin DEFAULT NULL, + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `mtime` (`mtime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `t_ip_config` +-- + +CREATE TABLE `t_ip_config` ( + `Fip` int(10) unsigned NOT NULL, + `FareaId` int(10) unsigned NOT NULL, + `FcityId` int(10) unsigned NOT NULL, + `FidcId` int(10) unsigned NOT NULL, + `Fflag` tinyint(4) DEFAULT '0', + `Fstamp` datetime NOT NULL, + `Fflow` int(10) unsigned NOT NULL, + PRIMARY KEY (`Fip`), + KEY `idx_Fflow` (`Fflow`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `t_policy` +-- + +CREATE TABLE `t_policy` ( + `FmodId` int(10) unsigned NOT NULL, + `Fdiv` int(10) unsigned NOT NULL, + `Fmod` int(10) unsigned NOT NULL, + `Fflag` tinyint(4) DEFAULT '0', + `Fstamp` datetime NOT NULL, + `Fflow` int(10) unsigned NOT NULL, + PRIMARY KEY (`FmodId`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `t_route` +-- + +CREATE TABLE `t_route` ( + `Fip` int(10) unsigned NOT NULL, + `FmodId` int(10) unsigned NOT NULL, + `FcmdId` int(10) unsigned NOT NULL, + `FsetId` varchar(32) NOT NULL, + `Fflag` tinyint(4) DEFAULT '0', + `Fstamp` datetime NOT NULL, + `Fflow` int(10) unsigned NOT NULL, + PRIMARY KEY (`Fip`,`FmodId`,`FcmdId`), + KEY `Fflow` (`Fflow`), + KEY `idx1` (`FmodId`,`FcmdId`,`FsetId`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `t_section` +-- + +CREATE TABLE `t_section` ( + `FmodId` int(10) unsigned NOT NULL, + `Ffrom` int(10) unsigned NOT NULL, + `Fto` int(10) unsigned NOT NULL, + `Fxid` int(10) unsigned NOT NULL, + `Fflag` tinyint(4) DEFAULT '0', + `Fstamp` datetime NOT NULL, + `Fflow` int(10) unsigned NOT NULL, + PRIMARY KEY (`FmodId`,`Ffrom`,`Fto`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `start_lock` +-- + +CREATE TABLE `start_lock` ( + `lock_id` int(11) NOT NULL COMMENT '锁序号', + `lock_key` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '锁的名字', + `server` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '持有启动锁的Server', + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`lock_id`,`lock_key`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- +-- 转存表中的数据 `start_lock` +-- + +INSERT INTO `start_lock` (`lock_id`, `lock_key`, `server`, `mtime`) VALUES +(1, 'sz', 'aaa', '2019-12-05 08:35:49'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `cl5_module` +-- +CREATE TABLE `cl5_module` ( + `module_id` int(11) NOT NULL COMMENT '模块ID', + `interface_id` int(11) NOT NULL COMMENT '接口ID', + `range_num` int(11) NOT NULL, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`module_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用以生成sid'; + +-- +-- 转存表中的数据 `cl5_module` +-- + +insert into cl5_module(module_id, interface_id, range_num) values(3000001, 1, 0); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `mesh` +-- +CREATE TABLE `mesh` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, /*网格ID*/ + `name` varchar(128) COLLATE utf8_bin NOT NULL, /*网格名*/ + `department` varchar(1024) COLLATE utf8_bin DEFAULT NULL, /*网格所属部门*/ + `business` varchar(128) COLLATE utf8_bin NOT NULL, /*网格所属业务*/ + `managed` tinyint(4) NOT NULL, /*是否托管*/ + `istio_version` varchar(64) COLLATE utf8_bin, /*istio版本*/ + `data_cluster` varchar(1024) COLLATE utf8_bin, /*数据面集群*/ + `revision` varchar(32) COLLATE utf8_bin NOT NULL, /*规则版本号*/ + `comment` varchar(1024) COLLATE utf8_bin DEFAULT NULL, /*规则描述*/ + `token` varchar(32) COLLATE utf8_bin NOT NULL, /*规则鉴权token*/ + `owner` varchar(1024) COLLATE utf8_bin NOT NULL, /*规则的拥有者*/ + `flag` tinyint(4) NOT NULL DEFAULT '0', /*规则是否有效,0为有效,1为无效,己被删除了*/ + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `name` (`name`), + KEY `mtime` (`mtime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `mesh_service` +-- +CREATE TABLE `mesh_service` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, /*网格规则ID*/ + `mesh_id` varchar(32) COLLATE utf8_bin NOT NULL, /*网格名*/ + `service_id` varchar(32) COLLATE utf8_bin NOT NULL, /*服务ID*/ + `namespace` varchar(64) COLLATE utf8_bin NOT NULL, /*服务命名空间*/ + `service` varchar(128) COLLATE utf8_bin NOT NULL, /*服务名*/ + `mesh_namespace` varchar(64) COLLATE utf8_bin NOT NULL, /*映射到网格的命名空间*/ + `mesh_service` varchar(128) COLLATE utf8_bin NOT NULL, /*映射到网格的服务名*/ + `location` varchar(16) COLLATE utf8_bin NOT NULL, /*服务处于网格哪个位置*/ + `export_to` varchar(1024) COLLATE utf8_bin NOT NULL, /*服务可以被哪些命名空间所见*/ + `revision` varchar(32) COLLATE utf8_bin NOT NULL, /*规则版本号*/ + `flag` tinyint(4) NOT NULL DEFAULT '0', /*规则是否有效,0为有效,1为无效,己被删除了*/ + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `relation` (`mesh_id`,`mesh_namespace`,`mesh_service`), + KEY `namespace`(`namespace`), + KEY `service`(`service`), + KEY `location`(`location`), + KEY `export_to`(`export_to`), + KEY `mtime` (`mtime`), + KEY `flag`( `flag`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `mesh_service_revision` +-- +CREATE TABLE `mesh_service_revision` ( + `mesh_id` varchar(32) COLLATE utf8_bin NOT NULL, /*网格名*/ + `revision` varchar(32) COLLATE utf8_bin NOT NULL, /*规则版本号*/ + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`mesh_id`), + KEY `mtime` (`mtime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `mesh_resource` +-- +CREATE TABLE `mesh_resource` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, /*网格规则ID*/ + `mesh_id` varchar(32) COLLATE utf8_bin NOT NULL, /*网格名*/ + `name` varchar(64) COLLATE utf8_bin NOT NULL, /*规则名*/ + `mesh_namespace` varchar(64) COLLATE utf8_bin NOT NULL, /*规则所处的网格命名空间*/ + `type_url` varchar(96) COLLATE utf8_bin NOT NULL, /*规则类型,如virtualService*/ + `revision` varchar(32) COLLATE utf8_bin NOT NULL, /*规则版本号*/ + `body` text, /*规则内容,json格式字符串*/ + `flag` tinyint(4) NOT NULL DEFAULT '0', /*规则是否有效,0为有效,1为无效,己被删除了*/ + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `name`(`mesh_id`, `name`, `mesh_namespace`, `type_url`), + KEY `mtime` (`mtime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- +-- 表的结构 `mesh_revision` +-- +CREATE TABLE `mesh_resource_revision` ( + `mesh_id` varchar(32) COLLATE utf8_bin NOT NULL, /*规则所属网格ID*/ + `type_url` varchar(96) COLLATE utf8_bin NOT NULL, /*规则类型,如virtualService*/ + `revision` varchar(32) COLLATE utf8_bin NOT NULL, /*规则集合的版本号,同一个网格下面所有规则集合的总体版本号*/ + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`mesh_id`, `type_url`), + KEY `mtime` (`mtime`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- +-- +-- flux规则配置表的结构 `ratelimit_flux_rule_config` +-- +CREATE TABLE `ratelimit_flux_rule_config` ( + `id` varchar(32) COLLATE utf8_bin NOT NULL, + `revision` varchar(32) COLLATE utf8_bin NOT NULL, + `callee_service_id` varchar(32) COLLATE utf8_bin NOT NULL, + `callee_service_env` varchar(64) COLLATE utf8_bin NOT NULL, + `callee_service_name` varchar(250) COLLATE utf8_bin NOT NULL DEFAULT '', + `caller_service_business` varchar(250) COLLATE utf8_bin NOT NULL DEFAULT '', + `name` varchar(100) COLLATE utf8_bin NOT NULL DEFAULT '', + `description` varchar(500) COLLATE utf8_bin NOT NULL DEFAULT '', + `type` tinyint(4) NOT NULL DEFAULT '0', + `set_key` varchar(250) COLLATE utf8_bin NOT NULL DEFAULT '', + `set_alert_qps` varchar(10) NOT NULL DEFAULT '', + `set_warning_qps` varchar(10) NOT NULL DEFAULT '', + `set_remark` varchar(500) COLLATE utf8_bin NOT NULL DEFAULT '', + `default_key` varchar(250) COLLATE utf8_bin NOT NULL DEFAULT '', + `default_alert_qps` varchar(10) NOT NULL DEFAULT '', + `default_warning_qps` varchar(10) NOT NULL DEFAULT '', + `default_remark` varchar(500) COLLATE utf8_bin NOT NULL DEFAULT '', + `creator` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '', + `updater` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '', + `status` tinyint(4) NOT NULL DEFAULT '0', + `flag` tinyint(4) NOT NULL DEFAULT '0', + `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `flux_server_id` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '', + `monitor_server_id` varchar(32) COLLATE utf8_bin NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `unique_service` (`callee_service_id`,`caller_service_business`,`set_key`), + KEY `mtime` (`mtime`), + KEY `name` (`name`), + KEY `creator` (`creator`), + KEY `callee_service` (`callee_service_env`,`callee_service_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- -------------------------------------------------------- +-- +-- flux规则版本关联表的结构 `ratelimit_flux_rule_revision` +-- +CREATE TABLE `ratelimit_flux_rule_revision` ( + `service_id` varchar(32) COLLATE utf8_bin NOT NULL, + `last_revision` varchar(40) COLLATE utf8_bin NOT NULL, + `mtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`service_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; +-- -------------------------------------------------------- +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/store/defaultStore/ratelimit_config.go b/store/defaultStore/ratelimit_config.go new file mode 100644 index 000000000..87bba2c9c --- /dev/null +++ b/store/defaultStore/ratelimit_config.go @@ -0,0 +1,436 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "errors" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" + "time" +) + +/** + * @brief RateLimitStore的实现 + */ +type rateLimitStore struct { + db *BaseDB +} + +/* + * @brief 新建限流规则 + */ +func (rls *rateLimitStore) CreateRateLimit(limit *model.RateLimit) error { + if limit.ID == "" || limit.ServiceID == "" || limit.Revision == "" { + return errors.New("[Store][database] create rate limit missing some params") + } + err := RetryTransaction("createRateLimit", func() error { + return rls.createRateLimit(limit) + }) + + return store.Error(err) +} + +// createRateLimit +func (rls *rateLimitStore) createRateLimit(limit *model.RateLimit) error { + tx, err := rls.db.Begin() + if err != nil { + log.Errorf("[Store][database] create rate limit(%+v) begin tx err: %s", limit, err.Error()) + return err + } + + defer func() { + _ = tx.Rollback() + }() + + // 新建限流规则 + str := `insert into ratelimit_config(id, service_id, cluster_id, labels, priority, rule, revision, ctime, mtime) + values(?,?,?,?,?,?,?,sysdate(),sysdate())` + if _, err := tx.Exec(str, limit.ID, limit.ServiceID, limit.ClusterID, limit.Labels, limit.Priority, limit.Rule, + limit.Revision); err != nil { + log.Errorf("[Store][database] create rate limit(%+v) err: %s", limit, err.Error()) + return err + } + + // 更新last_revision + str = `insert into ratelimit_revision(service_id,last_revision,mtime) values(?,?,sysdate()) on duplicate key update + last_revision = ?` + if _, err := tx.Exec(str, limit.ServiceID, limit.Revision, limit.Revision); err != nil { + log.Errorf("[Store][database][Create] update rate limit revision with service id(%s) err: %s", + limit.ServiceID, err.Error()) + return err + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] create rate limit(%+v) commit tx err: %s", limit, err.Error()) + return err + } + + return nil +} + +/* + * @brief 更新限流规则 + */ +func (rls *rateLimitStore) UpdateRateLimit(limit *model.RateLimit) error { + if limit.ID == "" || limit.ServiceID == "" || limit.Revision == "" { + return errors.New("[Store][database] update rate limit missing some params") + } + + err := RetryTransaction("updateRateLimit", func() error { + return rls.updateRateLimit(limit) + }) + + return store.Error(err) +} + +// updateRateLimit +func (rls *rateLimitStore) updateRateLimit(limit *model.RateLimit) error { + tx, err := rls.db.Begin() + if err != nil { + log.Errorf("[Store][database] update rate limit(%+v) begin tx err: %s", limit, err.Error()) + return err + } + + defer func() { + _ = tx.Rollback() + }() + + str := `update ratelimit_config set labels = ?, priority = ?, rule = ?, revision = ?, mtime = sysdate() where id = ?` + if _, err := tx.Exec(str, limit.Labels, limit.Priority, limit.Rule, limit.Revision, limit.ID); err != nil { + log.Errorf("[Store][database] update rate limit(%+v) err: %s", limit, err) + return err + } + + if err := rls.updateLastRevision(tx, limit.ServiceID, limit.Revision); err != nil { + log.Errorf("[Store][database][Update] update rate limit revision with service id(%s) err: %s", + limit.ServiceID, err.Error()) + return err + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] update rate limit(%+v) commit tx err: %s", limit, err.Error()) + return err + } + return nil +} + +/** + * @brief 删除限流规则 + */ +func (rls *rateLimitStore) DeleteRateLimit(limit *model.RateLimit) error { + if limit.ID == "" || limit.ServiceID == "" || limit.Revision == "" { + return errors.New("[Store][database] delete rate limit missing some params") + } + + err := RetryTransaction("deleteRateLimit", func() error { + return rls.deleteRateLimit(limit) + }) + + return store.Error(err) +} + +// deleteRateLimit +func (rls *rateLimitStore) deleteRateLimit(limit *model.RateLimit) error { + tx, err := rls.db.Begin() + if err != nil { + log.Errorf("[Store][database] delete rate limit(%+v) begin tx err: %s", limit, err.Error()) + return err + } + + defer func() { + _ = tx.Rollback() + }() + + str := `update ratelimit_config set flag = 1, mtime = sysdate() where id = ?` + if _, err := tx.Exec(str, limit.ID); err != nil { + log.Errorf("[Store][database] delete rate limit(%+v) err: %s", limit, err) + return err + } + + if err := rls.updateLastRevision(tx, limit.ServiceID, limit.Revision); err != nil { + log.Errorf("[Store][database][Delete] update rate limit revision with service id(%s) err: %s", + limit.ServiceID, err.Error()) + return err + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] delete rate limit(%+v) commit tx err: %s", limit, err.Error()) + return err + } + return nil +} + +/** + * @brief 根据限流规则ID获取限流规则 + */ +func (rls *rateLimitStore) GetRateLimitWithID(id string) (*model.RateLimit, error) { + if id == "" { + log.Errorf("[Store][database] get rate limit missing some params") + return nil, errors.New("get rate limit missing some params") + } + + str := `select id, service_id, cluster_id, labels, priority, rule, revision, flag, + unix_timestamp(ctime), unix_timestamp(mtime) + from ratelimit_config + where id = ? and flag = 0` + rows, err := rls.db.Query(str, id) + if err != nil { + log.Errorf("[Store][database] query rate limit with id(%s) err: %s", id, err.Error()) + return nil, err + } + out, err := fetchRateLimitRows(rows) + if err != nil { + return nil, err + } + if len(out) == 0 { + return nil, nil + } + return out[0], nil +} + +/** + * @brief 根据过滤条件获取限流规则及数目 + */ +func (rls *rateLimitStore) GetExtendRateLimits(filter map[string]string, offset uint32, limit uint32) ( + uint32, []*model.ExtendRateLimit, error) { + out, err := rls.getExpandRateLimits(filter, offset, limit) + if err != nil { + return 0, nil, err + } + num, err := rls.getExpandRateLimitsCount(filter) + if err != nil { + return 0, nil, err + } + return num, out, nil +} + +/** + * @brief 根据修改时间拉取增量限流规则及最新版本号 + */ +func (rls *rateLimitStore) GetRateLimitsForCache(mtime time.Time, + firstUpdate bool) ([]*model.RateLimit, []*model.RateLimitRevision, error) { + str := `select id, ratelimit_config.service_id, cluster_id, labels, priority, rule, revision, flag, + unix_timestamp(ratelimit_config.ctime), unix_timestamp(ratelimit_config.mtime), last_revision + from ratelimit_config, ratelimit_revision + where ratelimit_config.mtime > ? and ratelimit_config.service_id = ratelimit_revision.service_id` + if firstUpdate { + str += " and flag != 1" // nolint + } + rows, err := rls.db.Query(str, time2String(mtime)) + if err != nil { + log.Errorf("[Store][database] query rate limits with mtime err: %s", err.Error()) + return nil, nil, err + } + rateLimits, revisions, err := fetchRateLimitCacheRows(rows) + if err != nil { + return nil, nil, err + } + return rateLimits, revisions, nil +} + +/** + * @brief 根据过滤条件获取限流规则 + */ +func (rls *rateLimitStore) getExpandRateLimits(filter map[string]string, offset uint32, limit uint32) ( + []*model.ExtendRateLimit, error) { + str := `select name, namespace, ratelimit_config.id, service_id, cluster_id, labels, priority, rule, + ratelimit_config.revision, unix_timestamp(ratelimit_config.ctime), unix_timestamp(ratelimit_config.mtime) + from ratelimit_config, service + where service_id = service.id and ratelimit_config.flag = 0` + + queryStr, args := genFilterRateLimitSQL(filter) + args = append(args, offset, limit) + str = str + queryStr + ` order by ratelimit_config.mtime desc limit ?, ?` + + rows, err := rls.db.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] query rate limits err: %s", err.Error()) + return nil, err + } + out, err := fetchExpandRateLimitRows(rows) + if err != nil { + return nil, err + } + return out, nil +} + +/** + * @brief 根据过滤条件获取限流规则数目 + */ +func (rls *rateLimitStore) getExpandRateLimitsCount(filter map[string]string) (uint32, error) { + str := `select count(*) from ratelimit_config, service + where service_id = service.id and ratelimit_config.flag = 0` + + queryStr, args := genFilterRateLimitSQL(filter) + str = str + queryStr + var total uint32 + err := rls.db.QueryRow(str, args...).Scan(&total) + switch { + case err == sql.ErrNoRows: + return 0, nil + case err != nil: + log.Errorf("[Store][database] get expand rate limits count err: %s", err.Error()) + return 0, err + default: + } + return total, nil +} + +/** + *@brief 生成查询语句的过滤语句 + */ +func genFilterRateLimitSQL(query map[string]string) (string, []interface{}) { + str := "" + args := make([]interface{}, 0, len(query)) + for key, value := range query { + if key == "labels" { + str += " and labels like ?" + value = "%" + value + "%" + } else { + str += fmt.Sprintf(" and %s = ?", key) + } + args = append(args, value) + } + return str, args +} + +/** + * @brief 读取限流数据 + */ +func fetchRateLimitRows(rows *sql.Rows) ([]*model.RateLimit, error) { + defer rows.Close() + var out []*model.RateLimit + for rows.Next() { + var rateLimit model.RateLimit + var flag int + var ctime, mtime int64 + err := rows.Scan(&rateLimit.ID, &rateLimit.ServiceID, &rateLimit.ClusterID, &rateLimit.Labels, + &rateLimit.Priority, &rateLimit.Rule, &rateLimit.Revision, &flag, &ctime, &mtime) + if err != nil { + log.Errorf("[Store][database] fetch rate limit scan err: %s", err.Error()) + return nil, err + } + rateLimit.CreateTime = time.Unix(ctime, 0) + rateLimit.ModifyTime = time.Unix(mtime, 0) + rateLimit.Valid = true + if flag == 1 { + rateLimit.Valid = false + } + out = append(out, &rateLimit) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch rate limit next err: %s", err.Error()) + return nil, err + } + return out, nil +} + +/** + * @brief 读取包含服务信息的限流数据 + */ +func fetchExpandRateLimitRows(rows *sql.Rows) ([]*model.ExtendRateLimit, error) { + defer rows.Close() + var out []*model.ExtendRateLimit + for rows.Next() { + var expand model.ExtendRateLimit + expand.RateLimit = &model.RateLimit{} + var ctime, mtime int64 + err := rows.Scan(&expand.ServiceName, &expand.NamespaceName, &expand.RateLimit.ID, + &expand.RateLimit.ServiceID, &expand.RateLimit.ClusterID, &expand.RateLimit.Labels, + &expand.RateLimit.Priority, &expand.RateLimit.Rule, &expand.RateLimit.Revision, &ctime, &mtime) + if err != nil { + log.Errorf("[Store][database] fetch expand rate limit scan err: %s", err.Error()) + return nil, err + } + expand.RateLimit.CreateTime = time.Unix(ctime, 0) + expand.RateLimit.ModifyTime = time.Unix(mtime, 0) + out = append(out, &expand) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch expand rate limit next err: %s", err.Error()) + return nil, err + } + return out, nil +} + +/** + * @brief 读取限流数据以及最新版本号 + */ +func fetchRateLimitCacheRows(rows *sql.Rows) ([]*model.RateLimit, []*model.RateLimitRevision, error) { + defer rows.Close() + + var rateLimits []*model.RateLimit + var revisions []*model.RateLimitRevision + + for rows.Next() { + var rateLimit model.RateLimit + var revision model.RateLimitRevision + var ctime, mtime int64 + var serviceID string + var flag int + err := rows.Scan(&rateLimit.ID, &serviceID, &rateLimit.ClusterID, &rateLimit.Labels, + &rateLimit.Priority, &rateLimit.Rule, &rateLimit.Revision, &flag, &ctime, &mtime, &revision.LastRevision) + if err != nil { + log.Errorf("[Store][database] fetch rate limit cache scan err: %s", err.Error()) + return nil, nil, err + } + rateLimit.CreateTime = time.Unix(ctime, 0) + rateLimit.ModifyTime = time.Unix(mtime, 0) + rateLimit.Valid = true + if flag == 1 { + rateLimit.Valid = false + } + rateLimit.ServiceID = serviceID + revision.ServiceID = serviceID + + rateLimits = append(rateLimits, &rateLimit) + revisions = append(revisions, &revision) + } + + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch rate limit cache next err: %s", err.Error()) + return nil, nil, err + } + return rateLimits, revisions, nil +} + +/* + * @brief 从数据库清除限流规则数据 + */ +func (rls *rateLimitStore) cleanRateLimit(id string) error { + str := `delete from ratelimit_config where id = ? and flag = 1` + if _, err := rls.db.Exec(str, id); err != nil { + log.Errorf("[Store][database] clean rate limit id(%s) err: %s", id, err.Error()) + return err + } + return nil +} + +/** + * @brief 更新last_revision + */ +func (rls *rateLimitStore) updateLastRevision(tx *BaseTx, serviceID string, revision string) error { + str := `update ratelimit_revision set last_revision = ?, mtime = sysdate() where service_id = ?` + if _, err := tx.Exec(str, revision, serviceID); err != nil { + return err + } + return nil +} diff --git a/store/defaultStore/routing_config.go b/store/defaultStore/routing_config.go new file mode 100644 index 000000000..a8fc8f78e --- /dev/null +++ b/store/defaultStore/routing_config.go @@ -0,0 +1,293 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "fmt" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/polarismesh/polaris-server/store" + "time" +) + +// RoutingConfigStore的实现 +type routingConfigStore struct { + master *BaseDB + slave *BaseDB +} + +// 新建RoutingConfig +func (rs *routingConfigStore) CreateRoutingConfig(conf *model.RoutingConfig) error { + if conf.ID == "" || conf.Revision == "" { + log.Errorf("[Store][database] create routing config missing service id or revision") + return store.NewStatusError(store.EmptyParamsErr, "missing service id or revision") + } + if conf.InBounds == "" || conf.OutBounds == "" { + log.Errorf("[Store][database] create routing config missing params") + return store.NewStatusError(store.EmptyParamsErr, "missing some params") + } + + // 新建之前,先清理老数据 + if err := rs.cleanRoutingConfig(conf.ID); err != nil { + return store.Error(err) + } + + // 服务配置的创建由外层进行服务的保护,这里不需要加锁 + str := `insert into routing_config(id, in_bounds, out_bounds, revision, ctime, mtime) + values(?,?,?,?,sysdate(),sysdate())` + if _, err := rs.master.Exec(str, conf.ID, conf.InBounds, conf.OutBounds, conf.Revision); err != nil { + log.Errorf("[Store][database] create routing(%+v) err: %s", conf, err.Error()) + return store.Error(err) + } + + return nil +} + +// 更新 +func (rs *routingConfigStore) UpdateRoutingConfig(conf *model.RoutingConfig) error { + if conf.ID == "" || conf.Revision == "" { + log.Errorf("[Store][database] update routing config missing service id or revision") + return store.NewStatusError(store.EmptyParamsErr, "missing service id or revision") + } + if conf.InBounds == "" || conf.OutBounds == "" { + log.Errorf("[Store][database] update routing config missing params") + return store.NewStatusError(store.EmptyParamsErr, "missing some params") + } + + str := `update routing_config set in_bounds = ?, out_bounds = ?, revision = ?, mtime = sysdate() where id = ?` + if _, err := rs.master.Exec(str, conf.InBounds, conf.OutBounds, conf.Revision, conf.ID); err != nil { + log.Errorf("[Store][database] update routing config(%+v) exec err: %s", conf, err.Error()) + return store.Error(err) + } + + return nil +} + +// 删除 +func (rs *routingConfigStore) DeleteRoutingConfig(serviceID string) error { + if serviceID == "" { + log.Errorf("[Store][database] delete routing config missing service id") + return store.NewStatusError(store.EmptyParamsErr, "missing service id") + } + + str := `update routing_config set flag = 1, mtime = sysdate() where id = ?` + if _, err := rs.master.Exec(str, serviceID); err != nil { + log.Errorf("[Store][database] delete routing config(%s) err: %s", serviceID, err.Error()) + return store.Error(err) + } + + return nil +} + +// 缓存增量拉取 +func (rs *routingConfigStore) GetRoutingConfigsForCache( + mtime time.Time, firstUpdate bool) ([]*model.RoutingConfig, error) { + str := `select id, in_bounds, out_bounds, revision, + flag, unix_timestamp(ctime), unix_timestamp(mtime) + from routing_config where mtime > ?` + if firstUpdate { + str += " and flag != 1" // nolint + } + rows, err := rs.slave.Query(str, time2String(mtime)) + if err != nil { + log.Errorf("[Store][database] query routing configs with mtime err: %s", err.Error()) + return nil, err + } + out, err := fetchRoutingConfigRows(rows) + if err != nil { + return nil, err + } + + return out, nil +} + +// 根据服务名+namespace获取对应的配置 +func (rs *routingConfigStore) GetRoutingConfigWithService( + name string, namespace string) (*model.RoutingConfig, error) { + // 只查询到flag=0的数据 + str := `select routing_config.id, in_bounds, out_bounds, revision, flag, + unix_timestamp(ctime), unix_timestamp(mtime) + from (select id from service where name = ? and namespace = ?) as service, routing_config + where service.id = routing_config.id and routing_config.flag = 0` + rows, err := rs.master.Query(str, name, namespace) + if err != nil { + log.Errorf("[Store][database] query routing config with service(%s, %s) err: %s", + name, namespace, err.Error()) + return nil, err + } + + out, err := fetchRoutingConfigRows(rows) + if err != nil { + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + + return out[0], nil +} + +// 根据服务ID获取对应的配置 +func (rs *routingConfigStore) GetRoutingConfigWithID(id string) (*model.RoutingConfig, error) { + str := `select routing_config.id, in_bounds, out_bounds, revision, flag, + unix_timestamp(ctime), unix_timestamp(mtime) + from routing_config + where id = ? and flag = 0` + rows, err := rs.master.Query(str, id) + if err != nil { + log.Errorf("[Store][database] query routing with id(%s) err: %s", id, err.Error()) + return nil, err + } + + out, err := fetchRoutingConfigRows(rows) + if err != nil { + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + + return out[0], nil +} + +// 获取路由配置列表 +func (rs *routingConfigStore) GetRoutingConfigs(filter map[string]string, + offset uint32, limit uint32) (uint32, []*model.ExtendRoutingConfig, error) { + + filterStr, args := genFilterRoutingConfigSQL(filter) + countStr := genQueryRoutingConfigCountSQL() + filterStr + var total uint32 + err := rs.master.QueryRow(countStr, args...).Scan(&total) + switch { + case err == sql.ErrNoRows: + return 0, nil, nil + case err != nil: + log.Errorf("[Store][database] get routing config query count err: %s", err.Error()) + return 0, nil, err + default: + } + + str := genQueryRoutingConfigSQL() + filterStr + " order by routing_config.mtime desc limit ?, ?" + args = append(args, offset, limit) + rows, err := rs.master.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] get routing configs query err: %s", err.Error()) + return 0, nil, err + } + defer rows.Close() + + var out []*model.ExtendRoutingConfig + for rows.Next() { + var tmp model.ExtendRoutingConfig + tmp.Config = &model.RoutingConfig{} + var ctime, mtime int64 + err := rows.Scan(&tmp.ServiceName, &tmp.NamespaceName, &tmp.Config.ID, + &tmp.Config.InBounds, &tmp.Config.OutBounds, &ctime, &mtime) + if err != nil { + log.Errorf("[Store][database] query routing configs rows scan err: %s", err.Error()) + return 0, nil, err + } + + tmp.Config.CreateTime = time.Unix(ctime, 0) + tmp.Config.ModifyTime = time.Unix(mtime, 0) + + out = append(out, &tmp) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] query routing configs rows next err: %s", err.Error()) + return 0, nil, err + } + + return total, out, nil +} + +// 从数据库彻底清理路由配置 +func (rs *routingConfigStore) cleanRoutingConfig(serviceID string) error { + str := `delete from routing_config where id = ? and flag = 1` + if _, err := rs.master.Exec(str, serviceID); err != nil { + log.Errorf("[Store][database] clean routing config(%s) err: %s", serviceID, err.Error()) + return err + } + + return nil +} + +// 读取数据库的数据,并且释放rows +func fetchRoutingConfigRows(rows *sql.Rows) ([]*model.RoutingConfig, error) { + defer rows.Close() + var out []*model.RoutingConfig + for rows.Next() { + var entry model.RoutingConfig + var flag int + var ctime, mtime int64 + err := rows.Scan(&entry.ID, &entry.InBounds, &entry.OutBounds, &entry.Revision, + &flag, &ctime, &mtime) + if err != nil { + log.Errorf("[database][store] fetch routing config scan err: %s", err.Error()) + return nil, err + } + + entry.CreateTime = time.Unix(ctime, 0) + entry.ModifyTime = time.Unix(mtime, 0) + entry.Valid = true + if flag == 1 { + entry.Valid = false + } + + out = append(out, &entry) + } + if err := rows.Err(); err != nil { + log.Errorf("[database][store] fetch routing config next err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +// 查询路由配置的语句 +func genQueryRoutingConfigSQL() string { + str := `select name, namespace, routing_config.id, in_bounds, out_bounds, + unix_timestamp(routing_config.ctime), unix_timestamp(routing_config.mtime) + from routing_config, service + where routing_config.id = service.id + and routing_config.flag = 0` + return str +} + +// 获取路由配置指定过滤条件下的总条目数 +func genQueryRoutingConfigCountSQL() string { + str := `select count(*) from routing_config, service + where routing_config.id = service.id + and routing_config.flag = 0` + return str +} + +// 生成过滤语句 +func genFilterRoutingConfigSQL(filters map[string]string) (string, []interface{}) { + str := "" + args := make([]interface{}, 0, len(filters)) + for key, value := range filters { + str += fmt.Sprintf(" and %s = ? ", key) + args = append(args, value) + } + + return str, args +} diff --git a/store/defaultStore/service.go b/store/defaultStore/service.go new file mode 100644 index 000000000..335561645 --- /dev/null +++ b/store/defaultStore/service.go @@ -0,0 +1,1282 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "database/sql" + "errors" + "github.com/polarismesh/polaris-server/naming" + "github.com/polarismesh/polaris-server/store" + "strings" + "time" + + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" +) + +/** + * @brief 实现了ServiceStore + */ +type serviceStore struct { + master *BaseDB + slave *BaseDB +} + +/** + * @brief 增加服务 + */ +func (ss *serviceStore) AddService(s *model.Service) error { + if s.ID == "" || s.Name == "" || s.Namespace == "" || + s.Owner == "" || s.Token == "" { + return store.NewStatusError(store.EmptyParamsErr, "add Service missing some params") + } + + // 先清理无效数据 + if err := ss.cleanService(s.Name, s.Namespace); err != nil { + return err + } + + err := RetryTransaction("addService", func() error { + return ss.addService(s) + }) + return store.Error(err) +} + +// add service +func (ss *serviceStore) addService(s *model.Service) error { + tx, err := ss.master.Begin() + if err != nil { + return err + } + defer func() { _ = tx.Rollback() }() + + // 锁namespace + namespace, err := rlockNamespace(tx.QueryRow, s.Namespace) + if err != nil { + return err + } + if namespace == "" { + return store.NewStatusError(store.NotFoundNamespace, "not found namespace") + } + + // 填充main表 + if err := addServiceMain(tx, s); err != nil { + log.Errorf("[Store][database] add service table err: %s", err.Error()) + return err + } + + // 填充metadata表 + if err := addServiceMeta(tx, s.ID, s.Meta); err != nil { + log.Errorf("[Store][database] add service meta table err: %s", err.Error()) + return err + } + + // 填充owner_service_map表 + if err := addOwnerServiceMap(tx, s.Name, s.Namespace, s.Owner); err != nil { + log.Errorf("[Store][database] add owner_service_map table err: %s", err.Error()) + return err + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] add service tx commit err: %s", err.Error()) + return err + } + + return nil +} + +/** + * @brief删除服务 + */ +func (ss *serviceStore) DeleteService(id, serviceName, namespaceName string) error { + err := RetryTransaction("deleteService", func() error { + return ss.deleteService(id, serviceName, namespaceName) + }) + return store.Error(err) +} + +// 删除服务的内部函数 +func (ss *serviceStore) deleteService(id, serviceName, namespaceName string) error { + tx, err := ss.master.Begin() + if err != nil { + return err + } + defer func() { _ = tx.Rollback() }() + + // 锁住服务 + revision, err := lockServiceWithID(tx.QueryRow, id) + if err != nil { + log.Errorf("[Store][database] lock service(%s) err: %s", id, err.Error()) + return err + } + if revision == "" { + log.Infof("[Store][database] not found service(%s)", id) + return nil + } + + // 删除服务 + if err := deleteServiceByID(tx, id); err != nil { + log.Errorf("[Store][database] delete service(%s) err : %s", id, err.Error()) + return err + } + + // 删除负责人、服务映射表对应记录 + if err := deleteOwnerServiceMap(tx, serviceName, namespaceName); err != nil { + log.Errorf("[Store][database] delete owner_service_map(%s) err : %s", id, err.Error()) + return err + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] add service tx commit err: %s", err.Error()) + return err + } + + return nil +} + +// 删除服务或服务别名 +func deleteServiceByID(tx *BaseTx, id string) error { + log.Infof("[Store][database] delete service id(%s)", id) + str := "update service set flag = 1, mtime = sysdate() where id = ?" + if _, err := tx.Exec(str, id); err != nil { + return err + } + + return nil +} + +// 删除服务别名 +func (ss *serviceStore) DeleteServiceAlias(name string, namespace string) error { + str := "update service set flag = 1, mtime = sysdate() where name = ? and namespace = ?" + if _, err := ss.master.Exec(str, name, namespace); err != nil { + log.Errorf("[Store][database] delete service alias err: %s", err.Error()) + return store.Error(err) + } + + return nil +} + +// 更新服务别名 +func (ss *serviceStore) UpdateServiceAlias(alias *model.Service, needUpdateOwner bool) error { + if alias.ID == "" || alias.Name == "" || alias.Namespace == "" || + alias.Token == "" || alias.Owner == "" || alias.Revision == "" || alias.Reference == "" { + return store.NewStatusError(store.EmptyParamsErr, "Update Service Alias missing some params") + } + + if err := ss.updateServiceAlias(alias, needUpdateOwner); err != nil { + log.Errorf("[Store][ServiceAlias] update service alias err: %s", err.Error()) + return store.Error(err) + } + + return nil +} + +// update service alias +func (ss *serviceStore) updateServiceAlias(alias *model.Service, needUpdateOwner bool) error { + tx, err := ss.master.Begin() + if err != nil { + log.Errorf("[Store][database] update service alias tx begin err: %s", err.Error()) + return err + } + defer func() { _ = tx.Rollback() }() + + str := `update service set name = ?, namespace = ?, reference = ?, comment = ?, token = ?, revision = ?, owner = ?, + mtime = sysdate() + where id = ? and (select flag from (select flag from service where id = ?) as alias) = 0` + + result, err := tx.Exec(str, alias.Name, alias.Namespace, alias.Reference, alias.Comment, alias.Token, + alias.Revision, alias.Owner, alias.ID, alias.Reference) + if err != nil { + log.Errorf("[Store][ServiceAlias] update service alias exec err: %s", err.Error()) + return err + } + + // 更新owner_service_map表 + if needUpdateOwner { + if err := updateOwnerServiceMap(tx, alias.Name, alias.Namespace, alias.Owner); err != nil { + log.Errorf("[Store][database] update owner_service_map table err: %s", err.Error()) + return err + } + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] update service alias tx commit err: %s", err.Error()) + return err + } + + if err := checkServiceAffectedRows(result, 1); err != nil { + if store.Code(err) == store.AffectedRowsNotMatch { + return store.NewStatusError(store.NotFoundService, "not found service") + } + } + return nil +} + +/** + * @brief 检查服务数据库处理返回的行数 + */ +func checkServiceAffectedRows(result sql.Result, count int64) error { + n, err := result.RowsAffected() + if err != nil { + log.Errorf("[Store][ServiceAlias] get rows affected err: %s", err.Error()) + return err + } + + if n == count { + return nil + } + log.Errorf("[Store][ServiceAlias] get rows affected result(%d) is not match expect(%d)", n, count) + return store.NewStatusError(store.AffectedRowsNotMatch, "affected rows not match") +} + +/** + * @brief 更新完整的服务信息 + */ +func (ss *serviceStore) UpdateService(service *model.Service, needUpdateOwner bool) error { + if service.ID == "" || service.Name == "" || service.Namespace == "" || + service.Token == "" || service.Owner == "" || service.Revision == "" { + return store.NewStatusError(store.EmptyParamsErr, "Update Service missing some params") + } + + err := RetryTransaction("updateService", func() error { + return ss.updateService(service, needUpdateOwner) + }) + if err == nil { + return nil + } + + serr := store.Error(err) + if store.Code(serr) == store.DuplicateEntryErr { + serr = store.NewStatusError(store.DataConflictErr, err.Error()) + } + return serr +} + +// update service +func (ss *serviceStore) updateService(service *model.Service, needUpdateOwner bool) error { + tx, err := ss.master.Begin() + if err != nil { + log.Errorf("[Store][database] update service tx begin err: %s", err.Error()) + return err + } + defer func() { _ = tx.Rollback() }() + + // 更新main表 + if err := updateServiceMain(tx, service); err != nil { + log.Errorf("[Store][database] update service main table err: %s", err.Error()) + return err + } + + // 更新meta表 + if err := updateServiceMeta(tx, service.ID, service.Meta); err != nil { + log.Errorf("[Store][database] update service meta table err: %s", err.Error()) + return err + } + + // 更新owner_service_map表 + if needUpdateOwner { + if err := updateOwnerServiceMap(tx, service.Name, service.Namespace, service.Owner); err != nil { + log.Errorf("[Store][database] update owner_service_map table err: %s", err.Error()) + return err + } + } + + if err := tx.Commit(); err != nil { + log.Errorf("[Store][database] update service tx commit err: %s", err.Error()) + return err + } + return nil +} + +// 更新服务token +func (ss *serviceStore) UpdateServiceToken(id string, token string, revision string) error { + str := `update service set token = ?, revision = ?, mtime = sysdate() where id = ?` + _, err := ss.master.Exec(str, token, revision, id) + if err != nil { + log.Errorf("[Store][database] update service(%s) token err: %s", id, err.Error()) + return store.Error(err) + } + + return nil +} + +/** + * @brief 获取服务详情,只返回有效的数据 + */ +func (ss *serviceStore) GetService(name string, namespace string) (*model.Service, error) { + service, err := ss.getService(name, namespace) + if err != nil { + return nil, err + } + + if service != nil && !service.Valid { + return nil, nil + } + + return service, nil +} + +// 获取只获取服务token +// 返回服务ID,服务token +func (ss *serviceStore) GetSourceServiceToken(name string, namespace string) (*model.Service, error) { + str := `select id, token, IFNULL(platform_id, "") from service + where name = ? and namespace = ? and flag = 0 + and (reference is null or reference = '')` + var out model.Service + err := ss.master.QueryRow(str, name, namespace).Scan(&out.ID, &out.Token, &out.PlatformID) + switch { + case err == sql.ErrNoRows: + return nil, nil + case err != nil: + return nil, err + default: + out.Name = name + out.Namespace = namespace + return &out, nil + } +} + +/** + * @brief 根据服务ID查询服务详情 + */ +func (ss *serviceStore) GetServiceByID(id string) (*model.Service, error) { + service, err := ss.getServiceByID(id) + if err != nil { + return nil, err + } + if service != nil && !service.Valid { + return nil, nil + } + + return service, nil +} + +/** + * @brief 根据相关条件查询对应服务及数目,不包括别名 + */ +func (ss *serviceStore) GetServices(serviceFilters, serviceMetas map[string]string, instanceFilters *store.InstanceArgs, + offset, limit uint32) (uint32, []*model.Service, error) { + // 只查询flag=0的服务列表 + serviceFilters["service.flag"] = "0" + + out, err := ss.getServices(serviceFilters, serviceMetas, instanceFilters, offset, limit) + if err != nil { + return 0, nil, err + } + + num, err := ss.getServicesCount(serviceFilters, serviceMetas, instanceFilters) + if err != nil { + return 0, nil, err + } + return num, out, err +} + +// 获取所有服务总数 +func (ss *serviceStore) GetServicesCount() (uint32, error) { + countStr := "select count(*) from service where flag = 0" + return queryEntryCount(ss.master, countStr, nil) +} + +/** + * @brief 根据modify_time获取增量数据 + */ +func (ss *serviceStore) GetMoreServices(mtime time.Time, firstUpdate, disableBusiness, needMeta bool) ( + map[string]*model.Service, error) { + if needMeta { + services, err := getMoreServiceWithMeta(ss.slave.Query, mtime, firstUpdate, disableBusiness) + if err != nil { + log.Errorf("[Store][database] get more service+meta err: %s", err.Error()) + return nil, err + } + return services, nil + } else { + services, err := getMoreServiceMain(ss.slave.Query, mtime, firstUpdate, disableBusiness) + if err != nil { + log.Errorf("[Store][database] get more service main err: %s", err.Error()) + return nil, err + } + return services, nil + } +} + +/** + * @brief 获取系统服务 + */ +func (ss *serviceStore) GetSystemServices() ([]*model.Service, error) { + str := genServiceSelectSQL() + str += " from service where flag = 0 and namespace = ?" + rows, err := ss.master.Query(str, SystemNamespace) + if err != nil { + log.Errorf("[Store][database] get system service query err: %s", err.Error()) + return nil, err + } + + out, err := ss.fetchRowServices(rows) + if err != nil { + log.Errorf("[Store][database] get row services err: %s", err) + return nil, err + } + + return out, nil +} + +// 获取服务别名列表 +func (ss *serviceStore) GetServiceAliases(filter map[string]string, offset uint32, limit uint32) (uint32, + []*model.ServiceAlias, error) { + + whereFilter := serviceAliasFilter2Where(filter) + count, err := ss.getServiceAliasesCount(whereFilter) + if err != nil { + log.Errorf("[Store][database] get service aliases count err: %s", err.Error()) + return 0, nil, err + } + + items, err := ss.getServiceAliasesInfo(whereFilter, offset, limit) + if err != nil { + log.Errorf("[Store][database] get service aliases info err: %s", err.Error()) + return 0, nil, err + } + + return count, items, nil +} + +// 获取服务别名的详细信息 +func (ss *serviceStore) getServiceAliasesInfo(filter map[string]string, offset uint32, + limit uint32) ([]*model.ServiceAlias, error) { + // limit为0,则直接返回 + if limit == 0 { + return make([]*model.ServiceAlias, 0), nil + } + + baseStr := `select alias.id, alias.name, UNIX_TIMESTAMP(alias.ctime), UNIX_TIMESTAMP(alias.mtime), + alias.comment, source.id as sourceID, source.name as sourceName, source.namespace, alias.owner + from service as alias inner join service as source + on alias.reference = source.id and alias.flag != 1 ` + order := &Order{"alias.mtime", "desc"} + + str, args := genServiceAliasWhereSQLAndArgs(baseStr, filter, order, offset, limit) + rows, err := ss.master.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] get service aliases query(%s) err: %s", str, err.Error()) + return nil, err + } + defer func() { _ = rows.Close() }() + + var out []*model.ServiceAlias + var ctime, mtime int64 + for rows.Next() { + var entry model.ServiceAlias + err := rows.Scan(&entry.ID, &entry.Alias, &ctime, &mtime, &entry.Comment, &entry.ServiceID, + &entry.Service, &entry.Namespace, &entry.Owner) + if err != nil { + log.Errorf("[Store][database] get service alias rows scan err: %s", err.Error()) + return nil, err + } + + entry.CreateTime = time.Unix(ctime, 0) + entry.ModifyTime = time.Unix(mtime, 0) + out = append(out, &entry) + } + + return out, nil +} + +// 获取别名总数 +func (ss *serviceStore) getServiceAliasesCount(filter map[string]string) (uint32, error) { + baseStr := `select count(*) from + service as alias inner join service as source + on alias.reference = source.id and alias.flag != 1 ` + str, args := genServiceAliasWhereSQLAndArgs(baseStr, filter, nil, 0, 1) + return queryEntryCount(ss.master, str, args) +} + +/** + * @brief 根据相关条件查询对应服务,不包括别名 + */ +func (ss *serviceStore) getServices(sFilters, sMetas map[string]string, iFilters *store.InstanceArgs, + offset, limit uint32) ([]*model.Service, error) { + // 不查询任意内容,直接返回空数组 + if limit == 0 { + return make([]*model.Service, 0), nil + } + + // 构造SQL语句 + var args []interface{} + whereStr := " from service where (reference is null or reference = '') " + if len(sMetas) > 0 { + subStr, subArgs := filterMetadata(sMetas) + whereStr += " and service.id in " + subStr + args = append(args, subArgs...) + } + if iFilters != nil { + subStr, subArgs := filterInstance(iFilters) + whereStr += " and service.id in " + subStr + args = append(args, subArgs...) + } + str := genServiceSelectSQL() + whereStr + + filterStr, filterArgs := genServiceFilterSQL(sFilters) + if filterStr != "" { + str += " and " + filterStr + args = append(args, filterArgs...) + } + + order := &Order{"service.mtime", "desc"} + page := &Page{offset, limit} + opStr, opArgs := genOrderAndPage(order, page) + + str += opStr + args = append(args, opArgs...) + rows, err := ss.master.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] get services by filter query(%s) err: %s", str, err.Error()) + return nil, err + } + + out, err := ss.fetchRowServices(rows) + if err != nil { + log.Errorf("[Store][database] get row services err: %s", err) + return nil, err + } + + return out, nil +} + +/** + * @brief 根据相关条件查询对应服务数目,不包括别名 + */ +func (ss *serviceStore) getServicesCount( + sFilters, sMetas map[string]string, iFilters *store.InstanceArgs) (uint32, error) { + str := `select count(*) from service where (reference is null or reference = '')` + var args []interface{} + if len(sMetas) > 0 { + subStr, subArgs := filterMetadata(sMetas) + str += " and service.id in " + subStr + args = append(args, subArgs...) + } + if iFilters != nil { + subStr, subArgs := filterInstance(iFilters) + str += " and service.id in " + subStr + args = append(args, subArgs...) + } + + filterStr, filterArgs := genServiceFilterSQL(sFilters) + if filterStr != "" { + str += " and " + filterStr + args = append(args, filterArgs...) + } + return queryEntryCount(ss.master, str, args) +} + +// 根据rows,获取到services,并且批量获取对应的metadata +func (ss *serviceStore) fetchRowServices(rows *sql.Rows) ([]*model.Service, error) { + services, err := fetchServiceRows(rows) + if err != nil { + return nil, err + } + + data := make([]interface{}, 0, len(services)) + for idx := range services { + // 只获取valid为true的metadata + if services[idx].Valid { + data = append(data, services[idx]) + } + } + + err = BatchQuery("get-service-metadata", data, func(objects []interface{}) error { + rows, batchErr := batchQueryServiceMeta(ss.master.Query, objects) + if batchErr != nil { + return batchErr + } + metas := make(map[string]map[string]string) + batchErr = callFetchServiceMetaRows(rows, func(id, key, value string) (b bool, e error) { + if _, ok := metas[id]; !ok { + metas[id] = make(map[string]string) + } + metas[id][key] = value + return true, nil + }) + if batchErr != nil { + return batchErr + } + for id, meta := range metas { + for _, entry := range objects { + if entry.(*model.Service).ID == id { + entry.(*model.Service).Meta = meta + break + } + } + } + return nil + }) + if err != nil { + log.Errorf("[Store][database] get service metadata err: %s", err.Error()) + return nil, err + } + + return services, nil +} + +/** + * @brief 获取metadata数据 + */ +func (ss *serviceStore) getServiceMeta(id string) (map[string]string, error) { + if id == "" { + return nil, nil + } + + // 从metadata表中获取数据 + metaStr := "select `mkey`, `mvalue` from service_metadata where id = ?" + rows, err := ss.master.Query(metaStr, id) + if err != nil { + log.Errorf("[Store][database] get service metadata query err: %s", err.Error()) + return nil, err + } + return fetchServiceMeta(rows) +} + +// 获取service内部函数 +func (ss *serviceStore) getService(name string, namespace string) (*model.Service, error) { + if name == "" || namespace == "" { + return nil, errors.New("Get Service missing some params") + } + + out, err := ss.getServiceMain(name, namespace) + if err != nil { + return nil, err + } + if out == nil { + return nil, nil + } + + meta, err := ss.getServiceMeta(out.ID) + if err != nil { + return nil, err + } + + out.Meta = meta + return out, nil +} + +// 获取服务表的信息,不包括metadata +func (ss *serviceStore) getServiceMain(name string, namespace string) (*model.Service, error) { + str := genServiceSelectSQL() + " from service where name = ? and namespace = ?" + rows, err := ss.master.Query(str, name, namespace) + if err != nil { + log.Errorf("[Store][database] get service err: %s", err.Error()) + return nil, err + } + + out, err := fetchServiceRows(rows) + if err != nil { + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + + return out[0], nil +} + +// 根据服务ID获取服务详情的内部函数 +func (ss *serviceStore) getServiceByID(serviceID string) (*model.Service, error) { + str := genServiceSelectSQL() + " from service where service.id = ?" + rows, err := ss.master.Query(str, serviceID) + if err != nil { + log.Errorf("[Store][database] get service by id query err: %s", err.Error()) + return nil, err + } + + out, err := fetchServiceRows(rows) + if err != nil { + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + + meta, err := ss.getServiceMeta(out[0].ID) + if err != nil { + return nil, err + } + out[0].Meta = meta + + return out[0], nil +} + +// 清理无效数据,flag=1的数据 +// 只需要删除service即可 +func (ss *serviceStore) cleanService(name string, namespace string) error { + log.Infof("[Store][database] clean service(%s, %s)", name, namespace) + str := "delete from service where name = ? and namespace = ? and flag = 1" + _, err := ss.master.Exec(str, name, namespace) + if err != nil { + log.Errorf("[Store][database] clean service(%s, %s) err: %s", name, namespace, err.Error()) + return err + } + + return nil +} + +/** + * @brief 获取增量服务 + * @note 包括元数据 + */ +func getMoreServiceWithMeta(queryHandler QueryHandler, mtime time.Time, firstUpdate, disableBusiness bool) ( + map[string]*model.Service, error) { + // 首次拉取 + if firstUpdate { + // 获取全量服务 + services, err := getMoreServiceMain(queryHandler, mtime, firstUpdate, disableBusiness) + if err != nil { + log.Errorf("[Store][database] get more service main err: %s", err.Error()) + return nil, err + } + // 获取全量服务元数据 + str := "select id, mkey, mvalue from service_metadata" + rows, err := queryHandler(str) + if err != nil { + log.Errorf("[Store][database] acquire services meta query err: %s", err.Error()) + return nil, err + } + if err := fetchMoreServiceMeta(services, rows); err != nil { + return nil, err + } + return services, nil + } + + // 非首次拉取 + var args []interface{} + args = append(args, time2String(mtime)) + str := genServiceSelectSQL() + `, IFNULL(service_metadata.id, ""), IFNULL(mkey, ""), IFNULL(mvalue, "") ` + + `from service left join service_metadata on service.id = service_metadata.id where service.mtime >= ?` + if disableBusiness { + str += " and service.namespace = ?" + args = append(args, SystemNamespace) + } + rows, err := queryHandler(str, args...) + if err != nil { + log.Errorf("[Store][database] get more services with meta query err: %s", err.Error()) + return nil, err + } + return fetchServiceWithMetaRows(rows) +} + +/** + * @brief 获取service+metadata rows里面的数据 + */ +func fetchServiceWithMetaRows(rows *sql.Rows) (map[string]*model.Service, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + out := make(map[string]*model.Service) + var ctime, mtime int64 + var id, mKey, mValue string + var flag int + progress := 0 + for rows.Next() { + progress++ + if progress%100000 == 0 { + log.Infof("[Store][database] services+meta row next progress: %d", progress) + } + + var item model.Service + if err := rows.Scan(&item.ID, &item.Name, &item.Namespace, &item.Business, &item.Comment, + &item.Token, &item.Revision, &item.Owner, &flag, &ctime, &mtime, &item.Ports, + &item.Department, &item.CmdbMod1, &item.CmdbMod2, &item.CmdbMod3, + &item.Reference, &item.ReferFilter, &item.PlatformID, &id, &mKey, &mValue); err != nil { + log.Errorf("[Store][database] fetch service+meta rows scan err: %s", err.Error()) + return nil, err + } + item.CreateTime = time.Unix(ctime, 0) + item.ModifyTime = time.Unix(mtime, 0) + item.Valid = true + if flag == 1 { + item.Valid = false + } + + if _, ok := out[item.ID]; !ok { + out[item.ID] = &item + } + // 服务存在meta + if id != "" { + if out[item.ID].Meta == nil { + out[item.ID].Meta = make(map[string]string) + } + out[item.ID].Meta[mKey] = mValue + } + } + + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch service+meta rows next err: %s", err.Error()) + return nil, err + } + return out, nil +} + +// get more service main +func getMoreServiceMain(queryHandler QueryHandler, mtime time.Time, + firstUpdate, disableBusiness bool) (map[string]*model.Service, error) { + var args []interface{} + args = append(args, time2String(mtime)) + str := genServiceSelectSQL() + " from service where service.mtime >= ?" + if disableBusiness { + str += " and service.namespace = ?" + args = append(args, SystemNamespace) + } + if firstUpdate { + str += " and flag != 1" // nolint + } + rows, err := queryHandler(str, args...) + if err != nil { + log.Errorf("[Store][database] get more services query err: %s", err.Error()) + return nil, err + } + out := make(map[string]*model.Service) + err = callFetchServiceRows(rows, func(entry *model.Service) (b bool, e error) { + out[entry.ID] = entry + return true, nil + }) + if err != nil { + log.Errorf("[Store][database] call fetch service rows err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +// 批量查询service meta的封装 +func batchQueryServiceMeta(handler QueryHandler, services []interface{}) (*sql.Rows, error) { + if len(services) == 0 { + return nil, nil + } + + str := "select `id`, `mkey`, `mvalue` from service_metadata where id in(" + first := true + args := make([]interface{}, 0, len(services)) + for _, ele := range services { + if first { + str += "?" + first = false + } else { + str += ",?" + } + args = append(args, ele.(*model.Service).ID) + } + str += ")" + + rows, err := handler(str, args...) + if err != nil { + log.Errorf("[Store][database] batch query service meta err: %s", err.Error()) + return nil, err + } + + return rows, nil +} + +// fetch more service meta +func fetchMoreServiceMeta(services map[string]*model.Service, rows *sql.Rows) error { + err := callFetchServiceMetaRows(rows, func(id, key, value string) (b bool, e error) { + service, ok := services[id] + if !ok { + return true, nil + } + if service.Meta == nil { + service.Meta = make(map[string]string) + } + service.Meta[key] = value + return true, nil + }) + if err != nil { + log.Errorf("[Store][database] call fetch service meta rows err: %s", err.Error()) + return err + } + + return nil +} + +// 获取metadata的回调 +func callFetchServiceMetaRows(rows *sql.Rows, handler func(id, key, value string) (bool, error)) error { + if rows == nil { + return nil + } + defer rows.Close() + + var id, key, value string + progress := 0 + for rows.Next() { + progress++ + if progress%100000 == 0 { + log.Infof("[Store][database] fetch service meta rows progress: %d", progress) + } + if err := rows.Scan(&id, &key, &value); err != nil { + log.Errorf("[Store][database] multi get service metadata scan err: %s", err.Error()) + return err + } + ok, err := handler(id, key, value) + if err != nil { + return err + } + if !ok { + return nil + } + } + if err := rows.Err(); err != nil { + return err + } + return nil +} + +// rlock service +func rlockServiceWithID(queryRow func(query string, args ...interface{}) *sql.Row, + id string) (string, error) { + str := "select revision from service where id = ? and flag != 1 lock in share mode" + var revision string + err := queryRow(str, id).Scan(&revision) + switch { + case err == sql.ErrNoRows: + return "", nil + case err != nil: + return "", err + default: + return revision, nil + } +} + +// lock service +func lockServiceWithID(queryRow func(query string, args ...interface{}) *sql.Row, + id string) (string, error) { + str := "select revision from service where id = ? and flag != 1 for update" + var revision string + err := queryRow(str, id).Scan(&revision) + switch { + case err == sql.ErrNoRows: + return "", nil + case err != nil: + return "", err + default: + return revision, nil + } +} + +/** + * @brief 增加service主表数据 + */ +func addServiceMain(tx *BaseTx, s *model.Service) error { + // 先把主表填充 + mainStr := `insert into service + (id, name, namespace, ports, business, department, cmdb_mod1, cmdb_mod2, + cmdb_mod3, comment, token, reference, platform_id, revision, owner, ctime, mtime) + values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, sysdate(), sysdate())` + + _, err := tx.Exec(mainStr, s.ID, s.Name, s.Namespace, s.Ports, s.Business, s.Department, + s.CmdbMod1, s.CmdbMod2, s.CmdbMod3, s.Comment, s.Token, + s.Reference, s.PlatformID, s.Revision, s.Owner) + return err +} + +/** + * @brief 增加服务metadata + */ +func addServiceMeta(tx *BaseTx, id string, meta map[string]string) error { + if len(meta) == 0 { + return nil + } + str := "insert into service_metadata(id, `mkey`, `mvalue`, `ctime`, `mtime`) values " + cnt := 0 + args := make([]interface{}, 0, len(meta)*3) + for key, value := range meta { + cnt++ + if cnt == len(meta) { + str += "(?, ?, ?, sysdate(), sysdate())" // nolint + } else { + str += "(?, ?, ?, sysdate(), sysdate())," + } + + args = append(args, id) + args = append(args, key) + args = append(args, value) + } + + //log.Infof("str: %s, args: %+v", str, args) + _, err := tx.Exec(str, args...) + return err +} + +/** + * @brief 更新service主表 + */ +func updateServiceMain(tx *BaseTx, service *model.Service) error { + str := `update service set name = ?, namespace = ?, ports = ?, business = ?, + department = ?, cmdb_mod1 = ?, cmdb_mod2 = ?, cmdb_mod3 = ?, comment = ?, token = ?, platform_id = ?, + revision = ?, owner = ?, mtime = sysdate() where id = ?` + + _, err := tx.Exec(str, service.Name, service.Namespace, service.Ports, service.Business, + service.Department, service.CmdbMod1, service.CmdbMod2, service.CmdbMod3, + service.Comment, service.Token, service.PlatformID, service.Revision, service.Owner, service.ID) + return err +} + +/** + * @brief 更新service meta表 + */ +func updateServiceMeta(tx *BaseTx, id string, meta map[string]string) error { + // 只有metadata为nil的时候,则不用处理。 + // 如果metadata不为nil,但是len(metadata) == 0,则代表删除metadata + if meta == nil { + return nil + } + + str := "delete from service_metadata where id = ?" + if _, err := tx.Exec(str, id); err != nil { + return err + } + + return addServiceMeta(tx, id, meta) +} + +/** + * @brief 从rows里面获取metadata数据 + */ +func fetchServiceMeta(rows *sql.Rows) (map[string]string, error) { + if rows == nil { + return nil, nil + } + defer rows.Close() + + out := make(map[string]string) + var key, value string + for rows.Next() { + + if err := rows.Scan(&key, &value); err != nil { + log.Errorf("[Store][database] fetch service meta err: %s", err.Error()) + return nil, err + } + out[key] = value + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] service metadata rows err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +// 生成service查询语句 +func genServiceSelectSQL() string { + return `select service.id, name, namespace, IFNULL(business, ""), IFNULL(comment, ""), + token, service.revision, owner, service.flag, + UNIX_TIMESTAMP(service.ctime), UNIX_TIMESTAMP(service.mtime), + IFNULL(ports, ""), IFNULL(department, ""), IFNULL(cmdb_mod1, ""), IFNULL(cmdb_mod2, ""), + IFNULL(cmdb_mod3, ""), IFNULL(reference, ""), IFNULL(refer_filter, ""), IFNULL(platform_id, "") ` +} + +// call fetch service rows +func callFetchServiceRows(rows *sql.Rows, callback func(entry *model.Service) (bool, error)) error { + if rows == nil { + return nil + } + defer rows.Close() + + var ctime, mtime int64 + var flag int + progress := 0 + for rows.Next() { + progress++ + if progress%100000 == 0 { + log.Infof("[Store][database] services row next progress: %d", progress) + } + + var item model.Service + err := rows.Scan( + &item.ID, &item.Name, &item.Namespace, &item.Business, &item.Comment, + &item.Token, &item.Revision, &item.Owner, &flag, &ctime, &mtime, &item.Ports, + &item.Department, &item.CmdbMod1, &item.CmdbMod2, &item.CmdbMod3, + &item.Reference, &item.ReferFilter, &item.PlatformID) + + if err != nil { + log.Errorf("[Store][database] fetch service rows scan err: %s", err.Error()) + return err + } + + item.CreateTime = time.Unix(ctime, 0) + item.ModifyTime = time.Unix(mtime, 0) + item.Valid = true + if flag == 1 { + item.Valid = false + } + ok, err := callback(&item) + if err != nil { + return err + } + if !ok { + return nil + } + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch service rows next err: %s", err.Error()) + return err + } + return nil +} + +// 获取service rows里面的数据 +func fetchServiceRows(rows *sql.Rows) ([]*model.Service, error) { + var out []*model.Service + err := callFetchServiceRows(rows, func(entry *model.Service) (b bool, e error) { + out = append(out, entry) + return true, nil + }) + if err != nil { + return nil, err + } + + return out, nil +} + +// 查找service,根据instance属性过滤 +// 生成子查询语句 +func filterInstance(filters *store.InstanceArgs) (string, []interface{}) { + var args []interface{} + str := "(select service_id from instance where instance.flag != 1 and host in (" + + PlaceholdersN(len(filters.Hosts)) + ")" + if len(filters.Ports) > 0 { + str += "and port in (" + PlaceholdersN(len(filters.Ports)) + ")" + } + str += " group by service_id)" + for _, host := range filters.Hosts { + args = append(args, host) + } + for _, port := range filters.Ports { + args = append(args, port) + } + return str, args +} + +// 查找service,根据metadata属性过滤 +// 生成子查询语句 +// 多个metadata,取交集(and) +func filterMetadata(metas map[string]string) (string, []interface{}) { + str := "(select id from service_metadata where mkey = ? and mvalue = ?)" + args := make([]interface{}, 0, 2) + for key, value := range metas { + args = append(args, key) + args = append(args, value) + } + + return str, args +} + +//查询多个服务的id +func (ss *serviceStore) GetServicesBatch(services []*model.Service) ([]*model.Service, error) { + if len(services) == 0 { + return nil, nil + } + str := `select id, name, namespace,owner from service where flag = 0 and (name, namespace) in (` + args := make([]interface{}, 0, len(services)*2) + for key, value := range services { + str += "(" + PlaceholdersN(2) + ")" + if key != len(services)-1 { + str += "," + } + args = append(args, value.Name) + args = append(args, value.Namespace) + } + str += `)` + + rows, err := ss.master.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] query services batch err: %s", err.Error()) + return nil, err + } + + res := make([]*model.Service, 0, len(services)) + var namespace, name, id, owner string + for rows.Next() { + err := rows.Scan(&id, &name, &namespace, &owner) + if err != nil { + log.Errorf("[Store][database] fetch services batch scan err: %s", err.Error()) + return nil, err + } + res = append(res, &model.Service{ + ID: id, + Name: name, + Namespace: namespace, + Owner: owner, + }) + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] fetch services batch next err: %s", err.Error()) + return nil, err + } + return res, nil +} + +// 填充owner_service_map表 +func addOwnerServiceMap(tx *BaseTx, service, namespace, owner string) error { + addSql := "insert into owner_service_map(id,owner,service,namespace) values" + + // 根据; ,进行分割 + owners := strings.FieldsFunc(owner, func(r rune) bool { + return r == ';' || r == ',' + }) + args := make([]interface{}, 0) + + if len(owners) >= 1 { + for i := 0; i < len(owners); i++ { + addSql += "(?,?,?,?)," + args = append(args, naming.NewUUID(), owners[i], service, namespace) + } + if len(args) != 0 { + addSql = strings.TrimSuffix(addSql, ",") + if _, err := tx.Exec(addSql, args...); err != nil { + return err + } + } + } + return nil +} + +// 删除owner_service_map表中对应记录 +func deleteOwnerServiceMap(tx *BaseTx, service, namespace string) error { + log.Infof("[Store][database] delete service(%s) namespace(%s)", service, namespace) + delSql := "delete from owner_service_map where service=? and namespace=?" + if _, err := tx.Exec(delSql, service, namespace); err != nil { + return err + } + + return nil +} + +// owner_service_map表,先删除,后填充 +func updateOwnerServiceMap(tx *BaseTx, service, namespace, owner string) error { + // 删除 + if err := deleteOwnerServiceMap(tx, service, namespace); err != nil { + return err + } + // 填充 + if err := addOwnerServiceMap(tx, service, namespace, owner); err != nil { + return err + } + + return nil +} diff --git a/store/defaultStore/sql.go b/store/defaultStore/sql.go new file mode 100644 index 000000000..f916a9cc0 --- /dev/null +++ b/store/defaultStore/sql.go @@ -0,0 +1,304 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "fmt" + "strconv" + "strings" +) + +const ( + OwnerAttribute = "owner" + And = " and" +) + +// 排序结构体 +type Order struct { + Filed string + Sequence string +} + +// 分页结构体 +type Page struct { + Offset uint32 + Limit uint32 +} + +/** + * @brief 判断名字是否为通配名字,只支持前缀索引(名字最后为*) + */ +func isWildName(name string) bool { + length := len(name) + return length >= 1 && name[length-1:length] == "*" +} + +func boolToInt(v bool) int { + if v { + return 1 + } + return 0 +} + +// 根据filter生成where相关的语句 +func genFilterSQL(filter map[string]string) (string, []interface{}) { + if len(filter) == 0 { + return "", nil + } + + args := make([]interface{}, 0, len(filter)) + var str string + firstIndex := true + for key, value := range filter { + if !firstIndex { + str += And + } + firstIndex = false + // 这个查询组装,先这样完成,后续优化filter TODO + if key == OwnerAttribute || key == "alias."+OwnerAttribute || key == "business" { + str += fmt.Sprintf(" %s like ?", key) + value = "%" + value + "%" + } else if key == "name" && isWildName(value) { + str += " name like ?" + value = "%" + value[0:len(value)-1] + "%" + } else if key == "host" { + hosts := strings.Split(value, ",") + str += " host in (" + PlaceholdersN(len(hosts)) + ")" + for _, host := range hosts { + args = append(args, host) + } + } else if key == "managed" { + str += " managed = ?" + managed, _ := strconv.ParseBool(value) + args = append(args, boolToInt(managed)) + continue + } else { + str += " " + key + "=?" + } + if key != "host" { + args = append(args, value) + } + } + + return str, args +} + +// 根据service filter生成where相关的语句 +func genServiceFilterSQL(filter map[string]string) (string, []interface{}) { + if len(filter) == 0 { + return "", nil + } + + args := make([]interface{}, 0, len(filter)) + var str string + firstIndex := true + for key, value := range filter { + if !firstIndex { + str += And + } + firstIndex = false + + if key == OwnerAttribute { + str += " (service.name, service.namespace) in (select service,namespace from owner_service_map where owner=?)" + } else if key == "alias."+OwnerAttribute { + str += " (alias.name, alias.namespace) in (select service,namespace from owner_service_map where owner=?)" + } else if key == "business" { + str += fmt.Sprintf(" %s like ?", key) + value = "%" + value + "%" + } else if key == "name" && isWildName(value) { + str += " name like ?" + value = "%" + value[0:len(value)-1] + "%" + } else { + str += " " + key + "=?" + } + + args = append(args, value) + } + + return str, args +} + +// 根据规则的filter生成where相关的语句 +func genRuleFilterSQL(tableName string, filter map[string]string) (string, []interface{}) { + if len(filter) == 0 { + return "", nil + } + + args := make([]interface{}, 0, len(filter)) + var str string + firstIndex := true + for key, value := range filter { + if tableName != "" { + key = tableName + "." + key + } + if !firstIndex { + str += And + } + if key == OwnerAttribute || key == (tableName+"."+OwnerAttribute) { + str += fmt.Sprintf(" %s like ? ", key) + value = "%" + value + "%" + } else { + str += " " + key + " = ? " + } + args = append(args, value) + firstIndex = false + } + return str, args +} + +// 生成order和page相关语句 +func genOrderAndPage(order *Order, page *Page) (string, []interface{}) { + var str string + var args []interface{} + if order != nil { + str += " order by " + order.Filed + " " + order.Sequence + } + if page != nil { + str += " limit ?, ?" + args = append(args, page.Offset, page.Limit) + } + + return str, args +} + +/** + * @brief 生成service和instance查询数据的where语句和对应参数 + */ +func genWhereSQLAndArgs(str string, filter, metaFilter map[string]string, order *Order, offset uint32, limit uint32) ( + string, []interface{}) { + baseStr := str + var args []interface{} + filterStr, filterArgs := genFilterSQL(filter) + var conjunction string = " where " + if filterStr != "" { + baseStr += " where " + filterStr + conjunction = " and " + } + args = append(args, filterArgs...) + var metaStr string + var metaArgs []interface{} + if len(metaFilter) > 0 { + metaStr, metaArgs = genInstanceMetadataArgs(metaFilter) + args = append(args, metaArgs...) + baseStr += conjunction + metaStr + } + page := &Page{offset, limit} + opStr, opArgs := genOrderAndPage(order, page) + + return baseStr + opStr, append(args, opArgs...) +} + +func genInstanceMetadataArgs(metaFilter map[string]string) (string, []interface{}) { + str := `instance.id in (select id from instance_metadata where mkey = ? and mvalue = ?)` + args := make([]interface{}, 0, 2) + for k, v := range metaFilter { + args = append(args, k) + args = append(args, v) + } + return str, args +} + +/** + * @brief 生成service alias查询数据的where语句和对应参数 + */ +func genServiceAliasWhereSQLAndArgs(str string, filter map[string]string, order *Order, offset uint32, limit uint32) ( + string, []interface{}) { + baseStr := str + filterStr, filterArgs := genServiceFilterSQL(filter) + if filterStr != "" { + baseStr += " where " + } + page := &Page{offset, limit} + opStr, opArgs := genOrderAndPage(order, page) + + return baseStr + filterStr + opStr, append(filterArgs, opArgs...) +} + +/** + * @brief 生成namespace查询数据的where语句和对应参数 + */ +func genNamespaceWhereSQLAndArgs(str string, filter map[string][]string, order *Order, offset, limit int) ( + string, []interface{}) { + num := 0 + for _, value := range filter { + num += len(value) + } + args := make([]interface{}, 0, num+2) + + if num > 0 { + str += "where" + firstIndex := true + + for index, value := range filter { + if !firstIndex { + str += And + } + str += " (" + + firstItem := true + for _, item := range value { + if !firstItem { + str += " or " + } + if index == OwnerAttribute { + str += "owner like ?" + item = "%" + item + "%" + } else { + str += index + "=?" + } + args = append(args, item) + firstItem = false + } + firstIndex = false + str += ")" + } + } + + if order != nil { + str += " order by " + order.Filed + " " + order.Sequence + } + + str += " limit ?, ?" + args = append(args, offset, limit) + + return str, args +} + +// 根据metadata属性过滤 +// 生成子查询语句 +// 多个metadata,取交集(and) +func filterMetadataWithTable(table string, metas map[string]string) (string, []interface{}) { + str := "(select id from " + table + " where mkey = ? and mvalue = ?)" + args := make([]interface{}, 0, 2) + for key, value := range metas { + args = append(args, key) + args = append(args, value) + } + + return str, args +} + + +// 构造多个占位符 +func PlaceholdersN(size int) string { + if size <= 0 { + return "" + } + str := strings.Repeat("?,", size) + return str[0 : len(str)-1] +} diff --git a/store/defaultStore/sql_test.go b/store/defaultStore/sql_test.go new file mode 100644 index 000000000..4ed10a85f --- /dev/null +++ b/store/defaultStore/sql_test.go @@ -0,0 +1,32 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + . "github.com/smartystreets/goconvey/convey" + "testing" +) + +// 构造占位符的测试 +func TestPlaceholdersN(t *testing.T) { + Convey("可以正常输出", t, func() { + So(PlaceholdersN(-1), ShouldBeEmpty) + So(PlaceholdersN(1), ShouldEqual, "?") + So(PlaceholdersN(3), ShouldEqual, "?,?,?") + }) +} diff --git a/store/defaultStore/transaction.go b/store/defaultStore/transaction.go new file mode 100644 index 000000000..f991cf1ed --- /dev/null +++ b/store/defaultStore/transaction.go @@ -0,0 +1,255 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 defaultStore + +import ( + "crypto/rand" + "github.com/polarismesh/polaris-server/common/log" + "github.com/polarismesh/polaris-server/common/model" + "github.com/pkg/errors" + "math/big" +) + +// 事务 +// 不支持多协程并发操作,当前先支持单个协程串行操作 +type transaction struct { + tx *BaseTx + failed bool // 判断事务执行是否失败 + commit bool // 判断事务已经提交,如果已经提交,则Commit会立即返回 +} + +// 提交事务,释放tx +func (t *transaction) Commit() error { + if t.commit { + return nil + } + + t.commit = true + if t.failed { + return t.tx.Rollback() + } + + return t.tx.Commit() +} + +// 启动锁,限制Server启动的并发数 +func (t *transaction) LockBootstrap(key string, server string) error { + countStr := "select count(*) from start_lock where lock_key = ?" + var count int + if err := t.tx.QueryRow(countStr, key).Scan(&count); err != nil { + log.Errorf("[Store][database] lock bootstrap scan count err: %s", err.Error()) + t.failed = true + return err + } + + bid, err := rand.Int(rand.Reader, big.NewInt(1024)) + if err != nil { + log.Errorf("[Store][database] rand int err: %s", err.Error()) + return err + } + + log.Infof("[Store][database] get rand int: %d", bid.Int64()) + id := int(bid.Int64())%count + 1 + // innodb_lock_wait_timeout这个global变量表示锁超时的时间,cdb为7200秒 + log.Infof("[Store][database] update start lock_id: %d, lock_key: %s, lock server: %s", id, key, server) + lockStr := "update start_lock set server = ? where lock_id = ? and lock_key = ?" + if _, err := t.tx.Exec(lockStr, server, id, key); err != nil { + log.Errorf("[Store][database] update start lock err: %s", err.Error()) + t.failed = true + return err + } + + return nil +} + +// 排它锁,锁住指定命名空间 +func (t *transaction) LockNamespace(name string) (*model.Namespace, error) { + str := genNamespaceSelectSQL() + " where name = ? and flag != 1 for update" + return t.getValidNamespace(str, name) +} + +// 共享锁,锁住命名空间 +func (t *transaction) RLockNamespace(name string) (*model.Namespace, error) { + str := genNamespaceSelectSQL() + " where name = ? and flag != 1 lock in share mode" + return t.getValidNamespace(str, name) +} + +// 删除命名空间,并且提交事务 +func (t *transaction) DeleteNamespace(name string) error { + if err := t.finish(); err != nil { + return err + } + + str := "update namespace set flag = 1, mtime = sysdate() where name = ?" + if _, err := t.tx.Exec(str, name); err != nil { + t.failed = true + } + + return t.Commit() +} + +// 排它锁,锁住指定服务 +func (t *transaction) LockService(name string, namespace string) (*model.Service, error) { + str := genServiceSelectSQL() + + " from service where name = ? and namespace = ? and flag !=1 for update" + return t.getValidService(str, name, namespace) +} + +// 共享锁,锁住指定服务 +func (t *transaction) RLockService(name string, namespace string) (*model.Service, error) { + str := genServiceSelectSQL() + + " from service where name = ? and namespace = ? and flag !=1 lock in share mode" + return t.getValidService(str, name, namespace) +} + +// 批量锁住服务 +func (t *transaction) BatchRLockServices(ids map[string]bool) (map[string]bool, error) { + str := "select id, flag from service where id in ( " + first := true + args := make([]interface{}, 0, len(ids)) + for id := range ids { + if first { + str += "?" + first = false + } else { + str += ", ?" + } + args = append(args, id) + } + str += ") and flag != 1 lock in share mode" + log.Infof("[Store][database] RLock services: %+v", args) + rows, err := t.tx.Query(str, args...) + if err != nil { + log.Errorf("[Store][database] batch RLock services err: %s", err.Error()) + return nil, err + } + defer rows.Close() + + out := make(map[string]bool) + var flag int + var id string + for rows.Next() { + if err := rows.Scan(&id, &flag); err != nil { + log.Errorf("[Store][database] RLock services scan err: %s", err.Error()) + return nil, err + } + + if flag == 0 { + out[id] = true + } else { + out[id] = false + } + } + if err := rows.Err(); err != nil { + log.Errorf("[Store][database] RLock service rows next err: %s", err.Error()) + return nil, err + } + + return out, nil +} + +// 删除服务,并且提交事务 +func (t *transaction) DeleteService(name string, namespace string) error { + if err := t.finish(); err != nil { + return err + } + + str := "update service set flag = 1, mtime = sysdate() where name = ? and namespace = ?" + if _, err := t.tx.Exec(str, name, namespace); err != nil { + log.Errorf("[Store][database] delete service err: %s", err.Error()) + t.failed = true + return err + } + + return nil +} + +// 根据源服务的ID,删除其所有的别名 +func (t *transaction) DeleteAliasWithSourceID(sourceServiceID string) error { + if err := t.finish(); err != nil { + return err + } + + str := `update service set flag = 1, mtime = sysdate() where reference = ?` + if _, err := t.tx.Exec(str, sourceServiceID); err != nil { + log.Errorf("[Store][database] delete service alias err: %s", err.Error()) + t.failed = false + return err + } + + return nil +} + +// 判断事务是否已经提交 +func (t *transaction) finish() error { + if t.failed || t.commit { + return errors.New("transaction has failed") + } + + return nil +} + +// 获取有效的命名空间数据 +func (t *transaction) getValidNamespace(sql string, name string) (*model.Namespace, error) { + if err := t.finish(); err != nil { + return nil, err + } + + rows, err := t.tx.Query(sql, name) + if err != nil { + t.failed = true + return nil, err + } + + out, err := namespaceFetchRows(rows) + if err != nil { + t.failed = true + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + return out[0], nil +} + +// 获取有效的服务数据 +// 注意:该函数不会返回service_metadata +func (t *transaction) getValidService(sql string, name string, namespace string) (*model.Service, error) { + if err := t.finish(); err != nil { + return nil, err + } + + rows, err := t.tx.Query(sql, name, namespace) + if err != nil { + t.failed = true + return nil, err + } + + out, err := fetchServiceRows(rows) + if err != nil { + t.failed = true + return nil, err + } + + if len(out) == 0 { + return nil, nil + } + + return out[0], nil +} diff --git a/store/memory/memory.go b/store/memory/memory.go new file mode 100644 index 000000000..5a7aedf6e --- /dev/null +++ b/store/memory/memory.go @@ -0,0 +1,18 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 memory diff --git a/store/mock/README.md b/store/mock/README.md new file mode 100644 index 000000000..484b9f1f1 --- /dev/null +++ b/store/mock/README.md @@ -0,0 +1,7 @@ + # 对Store的API的mock + + ## mock文件生成方法 + 在`./store`目录执行 + ``` + mockgen -source=api.go -destination=./mock/api_mock.go -package=mock + ``` \ No newline at end of file diff --git a/store/mock/api_mock.go b/store/mock/api_mock.go new file mode 100644 index 000000000..4ff52c1c0 --- /dev/null +++ b/store/mock/api_mock.go @@ -0,0 +1,2960 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: api.go + +// Package mock is a generated GoMock package. +package mock + +import ( + model "github.com/polarismesh/polaris-server/common/model" + store "github.com/polarismesh/polaris-server/store" + gomock "github.com/golang/mock/gomock" + reflect "reflect" + time "time" +) + +// MockStore is a mock of Store interface +type MockStore struct { + ctrl *gomock.Controller + recorder *MockStoreMockRecorder +} + +// MockStoreMockRecorder is the mock recorder for MockStore +type MockStoreMockRecorder struct { + mock *MockStore +} + +// NewMockStore creates a new mock instance +func NewMockStore(ctrl *gomock.Controller) *MockStore { + mock := &MockStore{ctrl: ctrl} + mock.recorder = &MockStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockStore) EXPECT() *MockStoreMockRecorder { + return m.recorder +} + +// Name mocks base method +func (m *MockStore) Name() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Name") + ret0, _ := ret[0].(string) + return ret0 +} + +// Name indicates an expected call of Name +func (mr *MockStoreMockRecorder) Name() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Name", reflect.TypeOf((*MockStore)(nil).Name)) +} + +// Initialize mocks base method +func (m *MockStore) Initialize(c *store.Config) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Initialize", c) + ret0, _ := ret[0].(error) + return ret0 +} + +// Initialize indicates an expected call of Initialize +func (mr *MockStoreMockRecorder) Initialize(c interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Initialize", reflect.TypeOf((*MockStore)(nil).Initialize), c) +} + +// Destroy mocks base method +func (m *MockStore) Destroy() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Destroy") + ret0, _ := ret[0].(error) + return ret0 +} + +// Destroy indicates an expected call of Destroy +func (mr *MockStoreMockRecorder) Destroy() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Destroy", reflect.TypeOf((*MockStore)(nil).Destroy)) +} + +// CreateTransaction mocks base method +func (m *MockStore) CreateTransaction() (store.Transaction, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateTransaction") + ret0, _ := ret[0].(store.Transaction) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateTransaction indicates an expected call of CreateTransaction +func (mr *MockStoreMockRecorder) CreateTransaction() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateTransaction", reflect.TypeOf((*MockStore)(nil).CreateTransaction)) +} + +// AddNamespace mocks base method +func (m *MockStore) AddNamespace(namespace *model.Namespace) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddNamespace", namespace) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddNamespace indicates an expected call of AddNamespace +func (mr *MockStoreMockRecorder) AddNamespace(namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddNamespace", reflect.TypeOf((*MockStore)(nil).AddNamespace), namespace) +} + +// UpdateNamespace mocks base method +func (m *MockStore) UpdateNamespace(namespace *model.Namespace) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateNamespace", namespace) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateNamespace indicates an expected call of UpdateNamespace +func (mr *MockStoreMockRecorder) UpdateNamespace(namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateNamespace", reflect.TypeOf((*MockStore)(nil).UpdateNamespace), namespace) +} + +// UpdateNamespaceToken mocks base method +func (m *MockStore) UpdateNamespaceToken(name, token string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateNamespaceToken", name, token) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateNamespaceToken indicates an expected call of UpdateNamespaceToken +func (mr *MockStoreMockRecorder) UpdateNamespaceToken(name, token interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateNamespaceToken", reflect.TypeOf((*MockStore)(nil).UpdateNamespaceToken), name, token) +} + +// ListNamespaces mocks base method +func (m *MockStore) ListNamespaces(owner string) ([]*model.Namespace, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListNamespaces", owner) + ret0, _ := ret[0].([]*model.Namespace) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListNamespaces indicates an expected call of ListNamespaces +func (mr *MockStoreMockRecorder) ListNamespaces(owner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListNamespaces", reflect.TypeOf((*MockStore)(nil).ListNamespaces), owner) +} + +// GetNamespace mocks base method +func (m *MockStore) GetNamespace(name string) (*model.Namespace, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetNamespace", name) + ret0, _ := ret[0].(*model.Namespace) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetNamespace indicates an expected call of GetNamespace +func (mr *MockStoreMockRecorder) GetNamespace(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespace", reflect.TypeOf((*MockStore)(nil).GetNamespace), name) +} + +// GetNamespaces mocks base method +func (m *MockStore) GetNamespaces(filter map[string][]string, offset, limit int) ([]*model.Namespace, uint32, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetNamespaces", filter, offset, limit) + ret0, _ := ret[0].([]*model.Namespace) + ret1, _ := ret[1].(uint32) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetNamespaces indicates an expected call of GetNamespaces +func (mr *MockStoreMockRecorder) GetNamespaces(filter, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespaces", reflect.TypeOf((*MockStore)(nil).GetNamespaces), filter, offset, limit) +} + +// GetMoreNamespaces mocks base method +func (m *MockStore) GetMoreNamespaces(mtime time.Time) ([]*model.Namespace, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreNamespaces", mtime) + ret0, _ := ret[0].([]*model.Namespace) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreNamespaces indicates an expected call of GetMoreNamespaces +func (mr *MockStoreMockRecorder) GetMoreNamespaces(mtime interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreNamespaces", reflect.TypeOf((*MockStore)(nil).GetMoreNamespaces), mtime) +} + +// AddBusiness mocks base method +func (m *MockStore) AddBusiness(business *model.Business) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddBusiness", business) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddBusiness indicates an expected call of AddBusiness +func (mr *MockStoreMockRecorder) AddBusiness(business interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddBusiness", reflect.TypeOf((*MockStore)(nil).AddBusiness), business) +} + +// DeleteBusiness mocks base method +func (m *MockStore) DeleteBusiness(bid string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteBusiness", bid) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteBusiness indicates an expected call of DeleteBusiness +func (mr *MockStoreMockRecorder) DeleteBusiness(bid interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBusiness", reflect.TypeOf((*MockStore)(nil).DeleteBusiness), bid) +} + +// UpdateBusiness mocks base method +func (m *MockStore) UpdateBusiness(business *model.Business) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateBusiness", business) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateBusiness indicates an expected call of UpdateBusiness +func (mr *MockStoreMockRecorder) UpdateBusiness(business interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateBusiness", reflect.TypeOf((*MockStore)(nil).UpdateBusiness), business) +} + +// UpdateBusinessToken mocks base method +func (m *MockStore) UpdateBusinessToken(bid, token string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateBusinessToken", bid, token) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateBusinessToken indicates an expected call of UpdateBusinessToken +func (mr *MockStoreMockRecorder) UpdateBusinessToken(bid, token interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateBusinessToken", reflect.TypeOf((*MockStore)(nil).UpdateBusinessToken), bid, token) +} + +// ListBusiness mocks base method +func (m *MockStore) ListBusiness(owner string) ([]*model.Business, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListBusiness", owner) + ret0, _ := ret[0].([]*model.Business) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListBusiness indicates an expected call of ListBusiness +func (mr *MockStoreMockRecorder) ListBusiness(owner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListBusiness", reflect.TypeOf((*MockStore)(nil).ListBusiness), owner) +} + +// GetBusinessByID mocks base method +func (m *MockStore) GetBusinessByID(id string) (*model.Business, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetBusinessByID", id) + ret0, _ := ret[0].(*model.Business) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetBusinessByID indicates an expected call of GetBusinessByID +func (mr *MockStoreMockRecorder) GetBusinessByID(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBusinessByID", reflect.TypeOf((*MockStore)(nil).GetBusinessByID), id) +} + +// GetMoreBusiness mocks base method +func (m *MockStore) GetMoreBusiness(mtime time.Time) ([]*model.Business, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreBusiness", mtime) + ret0, _ := ret[0].([]*model.Business) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreBusiness indicates an expected call of GetMoreBusiness +func (mr *MockStoreMockRecorder) GetMoreBusiness(mtime interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreBusiness", reflect.TypeOf((*MockStore)(nil).GetMoreBusiness), mtime) +} + +// AddService mocks base method +func (m *MockStore) AddService(service *model.Service) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddService", service) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddService indicates an expected call of AddService +func (mr *MockStoreMockRecorder) AddService(service interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddService", reflect.TypeOf((*MockStore)(nil).AddService), service) +} + +// DeleteService mocks base method +func (m *MockStore) DeleteService(id, serviceName, namespaceName string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteService", id, serviceName, namespaceName) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteService indicates an expected call of DeleteService +func (mr *MockStoreMockRecorder) DeleteService(id, serviceName, namespaceName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteService", reflect.TypeOf((*MockStore)(nil).DeleteService), id, serviceName, namespaceName) +} + +// DeleteServiceAlias mocks base method +func (m *MockStore) DeleteServiceAlias(name, namespace string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteServiceAlias", name, namespace) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteServiceAlias indicates an expected call of DeleteServiceAlias +func (mr *MockStoreMockRecorder) DeleteServiceAlias(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteServiceAlias", reflect.TypeOf((*MockStore)(nil).DeleteServiceAlias), name, namespace) +} + +// UpdateServiceAlias mocks base method +func (m *MockStore) UpdateServiceAlias(alias *model.Service, needUpdateOwner bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateServiceAlias", alias, needUpdateOwner) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateServiceAlias indicates an expected call of UpdateServiceAlias +func (mr *MockStoreMockRecorder) UpdateServiceAlias(alias, needUpdateOwner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateServiceAlias", reflect.TypeOf((*MockStore)(nil).UpdateServiceAlias), alias, needUpdateOwner) +} + +// UpdateService mocks base method +func (m *MockStore) UpdateService(service *model.Service, needUpdateOwner bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateService", service, needUpdateOwner) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateService indicates an expected call of UpdateService +func (mr *MockStoreMockRecorder) UpdateService(service, needUpdateOwner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateService", reflect.TypeOf((*MockStore)(nil).UpdateService), service, needUpdateOwner) +} + +// UpdateServiceToken mocks base method +func (m *MockStore) UpdateServiceToken(serviceID, token, revision string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateServiceToken", serviceID, token, revision) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateServiceToken indicates an expected call of UpdateServiceToken +func (mr *MockStoreMockRecorder) UpdateServiceToken(serviceID, token, revision interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateServiceToken", reflect.TypeOf((*MockStore)(nil).UpdateServiceToken), serviceID, token, revision) +} + +// GetSourceServiceToken mocks base method +func (m *MockStore) GetSourceServiceToken(name, namespace string) (*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSourceServiceToken", name, namespace) + ret0, _ := ret[0].(*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetSourceServiceToken indicates an expected call of GetSourceServiceToken +func (mr *MockStoreMockRecorder) GetSourceServiceToken(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSourceServiceToken", reflect.TypeOf((*MockStore)(nil).GetSourceServiceToken), name, namespace) +} + +// GetService mocks base method +func (m *MockStore) GetService(name, namespace string) (*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetService", name, namespace) + ret0, _ := ret[0].(*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetService indicates an expected call of GetService +func (mr *MockStoreMockRecorder) GetService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetService", reflect.TypeOf((*MockStore)(nil).GetService), name, namespace) +} + +// GetServiceByID mocks base method +func (m *MockStore) GetServiceByID(id string) (*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServiceByID", id) + ret0, _ := ret[0].(*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetServiceByID indicates an expected call of GetServiceByID +func (mr *MockStoreMockRecorder) GetServiceByID(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServiceByID", reflect.TypeOf((*MockStore)(nil).GetServiceByID), id) +} + +// GetServices mocks base method +func (m *MockStore) GetServices(serviceFilters, serviceMetas map[string]string, instanceFilters *store.InstanceArgs, offset, limit uint32) (uint32, []*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServices", serviceFilters, serviceMetas, instanceFilters, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.Service) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetServices indicates an expected call of GetServices +func (mr *MockStoreMockRecorder) GetServices(serviceFilters, serviceMetas, instanceFilters, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServices", reflect.TypeOf((*MockStore)(nil).GetServices), serviceFilters, serviceMetas, instanceFilters, offset, limit) +} + +// GetServicesCount mocks base method +func (m *MockStore) GetServicesCount() (uint32, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServicesCount") + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetServicesCount indicates an expected call of GetServicesCount +func (mr *MockStoreMockRecorder) GetServicesCount() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServicesCount", reflect.TypeOf((*MockStore)(nil).GetServicesCount)) +} + +// GetMoreServices mocks base method +func (m *MockStore) GetMoreServices(mtime time.Time, firstUpdate, disableBusiness, needMeta bool) (map[string]*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreServices", mtime, firstUpdate, disableBusiness, needMeta) + ret0, _ := ret[0].(map[string]*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreServices indicates an expected call of GetMoreServices +func (mr *MockStoreMockRecorder) GetMoreServices(mtime, firstUpdate, disableBusiness, needMeta interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreServices", reflect.TypeOf((*MockStore)(nil).GetMoreServices), mtime, firstUpdate, disableBusiness, needMeta) +} + +// GetServiceAliases mocks base method +func (m *MockStore) GetServiceAliases(filter map[string]string, offset, limit uint32) (uint32, []*model.ServiceAlias, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServiceAliases", filter, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.ServiceAlias) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetServiceAliases indicates an expected call of GetServiceAliases +func (mr *MockStoreMockRecorder) GetServiceAliases(filter, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServiceAliases", reflect.TypeOf((*MockStore)(nil).GetServiceAliases), filter, offset, limit) +} + +// GetSystemServices mocks base method +func (m *MockStore) GetSystemServices() ([]*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSystemServices") + ret0, _ := ret[0].([]*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetSystemServices indicates an expected call of GetSystemServices +func (mr *MockStoreMockRecorder) GetSystemServices() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSystemServices", reflect.TypeOf((*MockStore)(nil).GetSystemServices)) +} + +// GetServicesBatch mocks base method +func (m *MockStore) GetServicesBatch(services []*model.Service) ([]*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServicesBatch", services) + ret0, _ := ret[0].([]*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetServicesBatch indicates an expected call of GetServicesBatch +func (mr *MockStoreMockRecorder) GetServicesBatch(services interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServicesBatch", reflect.TypeOf((*MockStore)(nil).GetServicesBatch), services) +} + +// AddInstance mocks base method +func (m *MockStore) AddInstance(instance *model.Instance) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddInstance", instance) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddInstance indicates an expected call of AddInstance +func (mr *MockStoreMockRecorder) AddInstance(instance interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddInstance", reflect.TypeOf((*MockStore)(nil).AddInstance), instance) +} + +// BatchAddInstances mocks base method +func (m *MockStore) BatchAddInstances(instances []*model.Instance) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BatchAddInstances", instances) + ret0, _ := ret[0].(error) + return ret0 +} + +// BatchAddInstances indicates an expected call of BatchAddInstances +func (mr *MockStoreMockRecorder) BatchAddInstances(instances interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchAddInstances", reflect.TypeOf((*MockStore)(nil).BatchAddInstances), instances) +} + +// UpdateInstance mocks base method +func (m *MockStore) UpdateInstance(instance *model.Instance) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateInstance", instance) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateInstance indicates an expected call of UpdateInstance +func (mr *MockStoreMockRecorder) UpdateInstance(instance interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateInstance", reflect.TypeOf((*MockStore)(nil).UpdateInstance), instance) +} + +// DeleteInstance mocks base method +func (m *MockStore) DeleteInstance(instanceID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteInstance", instanceID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteInstance indicates an expected call of DeleteInstance +func (mr *MockStoreMockRecorder) DeleteInstance(instanceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteInstance", reflect.TypeOf((*MockStore)(nil).DeleteInstance), instanceID) +} + +// BatchDeleteInstances mocks base method +func (m *MockStore) BatchDeleteInstances(ids []interface{}) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BatchDeleteInstances", ids) + ret0, _ := ret[0].(error) + return ret0 +} + +// BatchDeleteInstances indicates an expected call of BatchDeleteInstances +func (mr *MockStoreMockRecorder) BatchDeleteInstances(ids interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchDeleteInstances", reflect.TypeOf((*MockStore)(nil).BatchDeleteInstances), ids) +} + +// CleanInstance mocks base method +func (m *MockStore) CleanInstance(instanceID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CleanInstance", instanceID) + ret0, _ := ret[0].(error) + return ret0 +} + +// CleanInstance indicates an expected call of CleanInstance +func (mr *MockStoreMockRecorder) CleanInstance(instanceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CleanInstance", reflect.TypeOf((*MockStore)(nil).CleanInstance), instanceID) +} + +// CheckInstancesExisted mocks base method +func (m *MockStore) CheckInstancesExisted(ids map[string]bool) (map[string]bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CheckInstancesExisted", ids) + ret0, _ := ret[0].(map[string]bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CheckInstancesExisted indicates an expected call of CheckInstancesExisted +func (mr *MockStoreMockRecorder) CheckInstancesExisted(ids interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckInstancesExisted", reflect.TypeOf((*MockStore)(nil).CheckInstancesExisted), ids) +} + +// GetInstancesBrief mocks base method +func (m *MockStore) GetInstancesBrief(ids map[string]bool) (map[string]*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstancesBrief", ids) + ret0, _ := ret[0].(map[string]*model.Instance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstancesBrief indicates an expected call of GetInstancesBrief +func (mr *MockStoreMockRecorder) GetInstancesBrief(ids interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstancesBrief", reflect.TypeOf((*MockStore)(nil).GetInstancesBrief), ids) +} + +// GetInstance mocks base method +func (m *MockStore) GetInstance(instanceID string) (*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstance", instanceID) + ret0, _ := ret[0].(*model.Instance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstance indicates an expected call of GetInstance +func (mr *MockStoreMockRecorder) GetInstance(instanceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstance", reflect.TypeOf((*MockStore)(nil).GetInstance), instanceID) +} + +// GetInstancesCount mocks base method +func (m *MockStore) GetInstancesCount() (uint32, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstancesCount") + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstancesCount indicates an expected call of GetInstancesCount +func (mr *MockStoreMockRecorder) GetInstancesCount() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstancesCount", reflect.TypeOf((*MockStore)(nil).GetInstancesCount)) +} + +// GetInstancesMainByService mocks base method +func (m *MockStore) GetInstancesMainByService(serviceID, host string) ([]*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstancesMainByService", serviceID, host) + ret0, _ := ret[0].([]*model.Instance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstancesMainByService indicates an expected call of GetInstancesMainByService +func (mr *MockStoreMockRecorder) GetInstancesMainByService(serviceID, host interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstancesMainByService", reflect.TypeOf((*MockStore)(nil).GetInstancesMainByService), serviceID, host) +} + +// GetExpandInstances mocks base method +func (m *MockStore) GetExpandInstances(filter, metaFilter map[string]string, offset, limit uint32) (uint32, []*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetExpandInstances", filter, metaFilter, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.Instance) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetExpandInstances indicates an expected call of GetExpandInstances +func (mr *MockStoreMockRecorder) GetExpandInstances(filter, metaFilter, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetExpandInstances", reflect.TypeOf((*MockStore)(nil).GetExpandInstances), filter, metaFilter, offset, limit) +} + +// GetMoreInstances mocks base method +func (m *MockStore) GetMoreInstances(mtime time.Time, firstUpdate, needMeta bool, serviceID []string) (map[string]*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreInstances", mtime, firstUpdate, needMeta, serviceID) + ret0, _ := ret[0].(map[string]*model.Instance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreInstances indicates an expected call of GetMoreInstances +func (mr *MockStoreMockRecorder) GetMoreInstances(mtime, firstUpdate, needMeta, serviceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreInstances", reflect.TypeOf((*MockStore)(nil).GetMoreInstances), mtime, firstUpdate, needMeta, serviceID) +} + +// SetInstanceHealthStatus mocks base method +func (m *MockStore) SetInstanceHealthStatus(instanceID string, flag int, revision string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetInstanceHealthStatus", instanceID, flag, revision) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetInstanceHealthStatus indicates an expected call of SetInstanceHealthStatus +func (mr *MockStoreMockRecorder) SetInstanceHealthStatus(instanceID, flag, revision interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetInstanceHealthStatus", reflect.TypeOf((*MockStore)(nil).SetInstanceHealthStatus), instanceID, flag, revision) +} + +// BatchSetInstanceIsolate mocks base method +func (m *MockStore) BatchSetInstanceIsolate(ids []interface{}, isolate int, revision string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BatchSetInstanceIsolate", ids, isolate, revision) + ret0, _ := ret[0].(error) + return ret0 +} + +// BatchSetInstanceIsolate indicates an expected call of BatchSetInstanceIsolate +func (mr *MockStoreMockRecorder) BatchSetInstanceIsolate(ids, isolate, revision interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchSetInstanceIsolate", reflect.TypeOf((*MockStore)(nil).BatchSetInstanceIsolate), ids, isolate, revision) +} + +// CreateRoutingConfig mocks base method +func (m *MockStore) CreateRoutingConfig(conf *model.RoutingConfig) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateRoutingConfig", conf) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreateRoutingConfig indicates an expected call of CreateRoutingConfig +func (mr *MockStoreMockRecorder) CreateRoutingConfig(conf interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateRoutingConfig", reflect.TypeOf((*MockStore)(nil).CreateRoutingConfig), conf) +} + +// UpdateRoutingConfig mocks base method +func (m *MockStore) UpdateRoutingConfig(conf *model.RoutingConfig) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateRoutingConfig", conf) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateRoutingConfig indicates an expected call of UpdateRoutingConfig +func (mr *MockStoreMockRecorder) UpdateRoutingConfig(conf interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateRoutingConfig", reflect.TypeOf((*MockStore)(nil).UpdateRoutingConfig), conf) +} + +// DeleteRoutingConfig mocks base method +func (m *MockStore) DeleteRoutingConfig(serviceID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteRoutingConfig", serviceID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteRoutingConfig indicates an expected call of DeleteRoutingConfig +func (mr *MockStoreMockRecorder) DeleteRoutingConfig(serviceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteRoutingConfig", reflect.TypeOf((*MockStore)(nil).DeleteRoutingConfig), serviceID) +} + +// GetRoutingConfigsForCache mocks base method +func (m *MockStore) GetRoutingConfigsForCache(mtime time.Time, firstUpdate bool) ([]*model.RoutingConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRoutingConfigsForCache", mtime, firstUpdate) + ret0, _ := ret[0].([]*model.RoutingConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRoutingConfigsForCache indicates an expected call of GetRoutingConfigsForCache +func (mr *MockStoreMockRecorder) GetRoutingConfigsForCache(mtime, firstUpdate interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoutingConfigsForCache", reflect.TypeOf((*MockStore)(nil).GetRoutingConfigsForCache), mtime, firstUpdate) +} + +// GetRoutingConfigWithService mocks base method +func (m *MockStore) GetRoutingConfigWithService(name, namespace string) (*model.RoutingConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRoutingConfigWithService", name, namespace) + ret0, _ := ret[0].(*model.RoutingConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRoutingConfigWithService indicates an expected call of GetRoutingConfigWithService +func (mr *MockStoreMockRecorder) GetRoutingConfigWithService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoutingConfigWithService", reflect.TypeOf((*MockStore)(nil).GetRoutingConfigWithService), name, namespace) +} + +// GetRoutingConfigWithID mocks base method +func (m *MockStore) GetRoutingConfigWithID(id string) (*model.RoutingConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRoutingConfigWithID", id) + ret0, _ := ret[0].(*model.RoutingConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRoutingConfigWithID indicates an expected call of GetRoutingConfigWithID +func (mr *MockStoreMockRecorder) GetRoutingConfigWithID(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoutingConfigWithID", reflect.TypeOf((*MockStore)(nil).GetRoutingConfigWithID), id) +} + +// GetRoutingConfigs mocks base method +func (m *MockStore) GetRoutingConfigs(filter map[string]string, offset, limit uint32) (uint32, []*model.ExtendRoutingConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRoutingConfigs", filter, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.ExtendRoutingConfig) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetRoutingConfigs indicates an expected call of GetRoutingConfigs +func (mr *MockStoreMockRecorder) GetRoutingConfigs(filter, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoutingConfigs", reflect.TypeOf((*MockStore)(nil).GetRoutingConfigs), filter, offset, limit) +} + +// GetL5Extend mocks base method +func (m *MockStore) GetL5Extend(serviceID string) (map[string]interface{}, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetL5Extend", serviceID) + ret0, _ := ret[0].(map[string]interface{}) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetL5Extend indicates an expected call of GetL5Extend +func (mr *MockStoreMockRecorder) GetL5Extend(serviceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetL5Extend", reflect.TypeOf((*MockStore)(nil).GetL5Extend), serviceID) +} + +// SetL5Extend mocks base method +func (m *MockStore) SetL5Extend(serviceID string, meta map[string]interface{}) (map[string]interface{}, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetL5Extend", serviceID, meta) + ret0, _ := ret[0].(map[string]interface{}) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetL5Extend indicates an expected call of SetL5Extend +func (mr *MockStoreMockRecorder) SetL5Extend(serviceID, meta interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetL5Extend", reflect.TypeOf((*MockStore)(nil).SetL5Extend), serviceID, meta) +} + +// GenNextL5Sid mocks base method +func (m *MockStore) GenNextL5Sid(layoutID uint32) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GenNextL5Sid", layoutID) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GenNextL5Sid indicates an expected call of GenNextL5Sid +func (mr *MockStoreMockRecorder) GenNextL5Sid(layoutID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GenNextL5Sid", reflect.TypeOf((*MockStore)(nil).GenNextL5Sid), layoutID) +} + +// GetMoreL5Extend mocks base method +func (m *MockStore) GetMoreL5Extend(mtime time.Time) (map[string]map[string]interface{}, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5Extend", mtime) + ret0, _ := ret[0].(map[string]map[string]interface{}) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5Extend indicates an expected call of GetMoreL5Extend +func (mr *MockStoreMockRecorder) GetMoreL5Extend(mtime interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5Extend", reflect.TypeOf((*MockStore)(nil).GetMoreL5Extend), mtime) +} + +// GetMoreL5Routes mocks base method +func (m *MockStore) GetMoreL5Routes(flow uint32) ([]*model.Route, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5Routes", flow) + ret0, _ := ret[0].([]*model.Route) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5Routes indicates an expected call of GetMoreL5Routes +func (mr *MockStoreMockRecorder) GetMoreL5Routes(flow interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5Routes", reflect.TypeOf((*MockStore)(nil).GetMoreL5Routes), flow) +} + +// GetMoreL5Policies mocks base method +func (m *MockStore) GetMoreL5Policies(flow uint32) ([]*model.Policy, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5Policies", flow) + ret0, _ := ret[0].([]*model.Policy) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5Policies indicates an expected call of GetMoreL5Policies +func (mr *MockStoreMockRecorder) GetMoreL5Policies(flow interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5Policies", reflect.TypeOf((*MockStore)(nil).GetMoreL5Policies), flow) +} + +// GetMoreL5Sections mocks base method +func (m *MockStore) GetMoreL5Sections(flow uint32) ([]*model.Section, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5Sections", flow) + ret0, _ := ret[0].([]*model.Section) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5Sections indicates an expected call of GetMoreL5Sections +func (mr *MockStoreMockRecorder) GetMoreL5Sections(flow interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5Sections", reflect.TypeOf((*MockStore)(nil).GetMoreL5Sections), flow) +} + +// GetMoreL5IPConfigs mocks base method +func (m *MockStore) GetMoreL5IPConfigs(flow uint32) ([]*model.IPConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5IPConfigs", flow) + ret0, _ := ret[0].([]*model.IPConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5IPConfigs indicates an expected call of GetMoreL5IPConfigs +func (mr *MockStoreMockRecorder) GetMoreL5IPConfigs(flow interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5IPConfigs", reflect.TypeOf((*MockStore)(nil).GetMoreL5IPConfigs), flow) +} + +// CreateRateLimit mocks base method +func (m *MockStore) CreateRateLimit(limiting *model.RateLimit) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateRateLimit", limiting) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreateRateLimit indicates an expected call of CreateRateLimit +func (mr *MockStoreMockRecorder) CreateRateLimit(limiting interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateRateLimit", reflect.TypeOf((*MockStore)(nil).CreateRateLimit), limiting) +} + +// UpdateRateLimit mocks base method +func (m *MockStore) UpdateRateLimit(limiting *model.RateLimit) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateRateLimit", limiting) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateRateLimit indicates an expected call of UpdateRateLimit +func (mr *MockStoreMockRecorder) UpdateRateLimit(limiting interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateRateLimit", reflect.TypeOf((*MockStore)(nil).UpdateRateLimit), limiting) +} + +// DeleteRateLimit mocks base method +func (m *MockStore) DeleteRateLimit(limiting *model.RateLimit) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteRateLimit", limiting) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteRateLimit indicates an expected call of DeleteRateLimit +func (mr *MockStoreMockRecorder) DeleteRateLimit(limiting interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteRateLimit", reflect.TypeOf((*MockStore)(nil).DeleteRateLimit), limiting) +} + +// GetExtendRateLimits mocks base method +func (m *MockStore) GetExtendRateLimits(query map[string]string, offset, limit uint32) (uint32, []*model.ExtendRateLimit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetExtendRateLimits", query, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.ExtendRateLimit) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetExtendRateLimits indicates an expected call of GetExtendRateLimits +func (mr *MockStoreMockRecorder) GetExtendRateLimits(query, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetExtendRateLimits", reflect.TypeOf((*MockStore)(nil).GetExtendRateLimits), query, offset, limit) +} + +// GetRateLimitWithID mocks base method +func (m *MockStore) GetRateLimitWithID(id string) (*model.RateLimit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRateLimitWithID", id) + ret0, _ := ret[0].(*model.RateLimit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRateLimitWithID indicates an expected call of GetRateLimitWithID +func (mr *MockStoreMockRecorder) GetRateLimitWithID(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRateLimitWithID", reflect.TypeOf((*MockStore)(nil).GetRateLimitWithID), id) +} + +// GetRateLimitsForCache mocks base method +func (m *MockStore) GetRateLimitsForCache(mtime time.Time, firstUpdate bool) ([]*model.RateLimit, []*model.RateLimitRevision, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRateLimitsForCache", mtime, firstUpdate) + ret0, _ := ret[0].([]*model.RateLimit) + ret1, _ := ret[1].([]*model.RateLimitRevision) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetRateLimitsForCache indicates an expected call of GetRateLimitsForCache +func (mr *MockStoreMockRecorder) GetRateLimitsForCache(mtime, firstUpdate interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRateLimitsForCache", reflect.TypeOf((*MockStore)(nil).GetRateLimitsForCache), mtime, firstUpdate) +} + +// CreateCircuitBreaker mocks base method +func (m *MockStore) CreateCircuitBreaker(circuitBreaker *model.CircuitBreaker) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateCircuitBreaker", circuitBreaker) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreateCircuitBreaker indicates an expected call of CreateCircuitBreaker +func (mr *MockStoreMockRecorder) CreateCircuitBreaker(circuitBreaker interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateCircuitBreaker", reflect.TypeOf((*MockStore)(nil).CreateCircuitBreaker), circuitBreaker) +} + +// TagCircuitBreaker mocks base method +func (m *MockStore) TagCircuitBreaker(circuitBreaker *model.CircuitBreaker) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TagCircuitBreaker", circuitBreaker) + ret0, _ := ret[0].(error) + return ret0 +} + +// TagCircuitBreaker indicates an expected call of TagCircuitBreaker +func (mr *MockStoreMockRecorder) TagCircuitBreaker(circuitBreaker interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TagCircuitBreaker", reflect.TypeOf((*MockStore)(nil).TagCircuitBreaker), circuitBreaker) +} + +// ReleaseCircuitBreaker mocks base method +func (m *MockStore) ReleaseCircuitBreaker(circuitBreakerRelation *model.CircuitBreakerRelation) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReleaseCircuitBreaker", circuitBreakerRelation) + ret0, _ := ret[0].(error) + return ret0 +} + +// ReleaseCircuitBreaker indicates an expected call of ReleaseCircuitBreaker +func (mr *MockStoreMockRecorder) ReleaseCircuitBreaker(circuitBreakerRelation interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReleaseCircuitBreaker", reflect.TypeOf((*MockStore)(nil).ReleaseCircuitBreaker), circuitBreakerRelation) +} + +// UnbindCircuitBreaker mocks base method +func (m *MockStore) UnbindCircuitBreaker(serviceID, ruleID, ruleVersion string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UnbindCircuitBreaker", serviceID, ruleID, ruleVersion) + ret0, _ := ret[0].(error) + return ret0 +} + +// UnbindCircuitBreaker indicates an expected call of UnbindCircuitBreaker +func (mr *MockStoreMockRecorder) UnbindCircuitBreaker(serviceID, ruleID, ruleVersion interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnbindCircuitBreaker", reflect.TypeOf((*MockStore)(nil).UnbindCircuitBreaker), serviceID, ruleID, ruleVersion) +} + +// DeleteTagCircuitBreaker mocks base method +func (m *MockStore) DeleteTagCircuitBreaker(id, version string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteTagCircuitBreaker", id, version) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteTagCircuitBreaker indicates an expected call of DeleteTagCircuitBreaker +func (mr *MockStoreMockRecorder) DeleteTagCircuitBreaker(id, version interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTagCircuitBreaker", reflect.TypeOf((*MockStore)(nil).DeleteTagCircuitBreaker), id, version) +} + +// DeleteMasterCircuitBreaker mocks base method +func (m *MockStore) DeleteMasterCircuitBreaker(id string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteMasterCircuitBreaker", id) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteMasterCircuitBreaker indicates an expected call of DeleteMasterCircuitBreaker +func (mr *MockStoreMockRecorder) DeleteMasterCircuitBreaker(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteMasterCircuitBreaker", reflect.TypeOf((*MockStore)(nil).DeleteMasterCircuitBreaker), id) +} + +// UpdateCircuitBreaker mocks base method +func (m *MockStore) UpdateCircuitBreaker(circuitBraker *model.CircuitBreaker) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateCircuitBreaker", circuitBraker) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateCircuitBreaker indicates an expected call of UpdateCircuitBreaker +func (mr *MockStoreMockRecorder) UpdateCircuitBreaker(circuitBraker interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateCircuitBreaker", reflect.TypeOf((*MockStore)(nil).UpdateCircuitBreaker), circuitBraker) +} + +// GetCircuitBreaker mocks base method +func (m *MockStore) GetCircuitBreaker(id, version string) (*model.CircuitBreaker, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreaker", id, version) + ret0, _ := ret[0].(*model.CircuitBreaker) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreaker indicates an expected call of GetCircuitBreaker +func (mr *MockStoreMockRecorder) GetCircuitBreaker(id, version interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreaker", reflect.TypeOf((*MockStore)(nil).GetCircuitBreaker), id, version) +} + +// GetCircuitBreakerVersions mocks base method +func (m *MockStore) GetCircuitBreakerVersions(id string) ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakerVersions", id) + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakerVersions indicates an expected call of GetCircuitBreakerVersions +func (mr *MockStoreMockRecorder) GetCircuitBreakerVersions(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakerVersions", reflect.TypeOf((*MockStore)(nil).GetCircuitBreakerVersions), id) +} + +// GetCircuitBreakerMasterRelation mocks base method +func (m *MockStore) GetCircuitBreakerMasterRelation(ruleID string) ([]*model.CircuitBreakerRelation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakerMasterRelation", ruleID) + ret0, _ := ret[0].([]*model.CircuitBreakerRelation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakerMasterRelation indicates an expected call of GetCircuitBreakerMasterRelation +func (mr *MockStoreMockRecorder) GetCircuitBreakerMasterRelation(ruleID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakerMasterRelation", reflect.TypeOf((*MockStore)(nil).GetCircuitBreakerMasterRelation), ruleID) +} + +// GetCircuitBreakerRelation mocks base method +func (m *MockStore) GetCircuitBreakerRelation(ruleID, ruleVersion string) ([]*model.CircuitBreakerRelation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakerRelation", ruleID, ruleVersion) + ret0, _ := ret[0].([]*model.CircuitBreakerRelation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakerRelation indicates an expected call of GetCircuitBreakerRelation +func (mr *MockStoreMockRecorder) GetCircuitBreakerRelation(ruleID, ruleVersion interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakerRelation", reflect.TypeOf((*MockStore)(nil).GetCircuitBreakerRelation), ruleID, ruleVersion) +} + +// GetCircuitBreakerForCache mocks base method +func (m *MockStore) GetCircuitBreakerForCache(mtime time.Time, firstUpdate bool) ([]*model.ServiceWithCircuitBreaker, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakerForCache", mtime, firstUpdate) + ret0, _ := ret[0].([]*model.ServiceWithCircuitBreaker) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakerForCache indicates an expected call of GetCircuitBreakerForCache +func (mr *MockStoreMockRecorder) GetCircuitBreakerForCache(mtime, firstUpdate interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakerForCache", reflect.TypeOf((*MockStore)(nil).GetCircuitBreakerForCache), mtime, firstUpdate) +} + +// ListMasterCircuitBreakers mocks base method +func (m *MockStore) ListMasterCircuitBreakers(filters map[string]string, offset, limit uint32) (*model.CircuitBreakerDetail, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListMasterCircuitBreakers", filters, offset, limit) + ret0, _ := ret[0].(*model.CircuitBreakerDetail) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListMasterCircuitBreakers indicates an expected call of ListMasterCircuitBreakers +func (mr *MockStoreMockRecorder) ListMasterCircuitBreakers(filters, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListMasterCircuitBreakers", reflect.TypeOf((*MockStore)(nil).ListMasterCircuitBreakers), filters, offset, limit) +} + +// ListReleaseCircuitBreakers mocks base method +func (m *MockStore) ListReleaseCircuitBreakers(filters map[string]string, offset, limit uint32) (*model.CircuitBreakerDetail, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListReleaseCircuitBreakers", filters, offset, limit) + ret0, _ := ret[0].(*model.CircuitBreakerDetail) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListReleaseCircuitBreakers indicates an expected call of ListReleaseCircuitBreakers +func (mr *MockStoreMockRecorder) ListReleaseCircuitBreakers(filters, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListReleaseCircuitBreakers", reflect.TypeOf((*MockStore)(nil).ListReleaseCircuitBreakers), filters, offset, limit) +} + +// GetCircuitBreakersByService mocks base method +func (m *MockStore) GetCircuitBreakersByService(name, namespace string) (*model.CircuitBreaker, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakersByService", name, namespace) + ret0, _ := ret[0].(*model.CircuitBreaker) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakersByService indicates an expected call of GetCircuitBreakersByService +func (mr *MockStoreMockRecorder) GetCircuitBreakersByService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakersByService", reflect.TypeOf((*MockStore)(nil).GetCircuitBreakersByService), name, namespace) +} + +// CreatePlatform mocks base method +func (m *MockStore) CreatePlatform(platform *model.Platform) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreatePlatform", platform) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreatePlatform indicates an expected call of CreatePlatform +func (mr *MockStoreMockRecorder) CreatePlatform(platform interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePlatform", reflect.TypeOf((*MockStore)(nil).CreatePlatform), platform) +} + +// UpdatePlatform mocks base method +func (m *MockStore) UpdatePlatform(platform *model.Platform) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdatePlatform", platform) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdatePlatform indicates an expected call of UpdatePlatform +func (mr *MockStoreMockRecorder) UpdatePlatform(platform interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePlatform", reflect.TypeOf((*MockStore)(nil).UpdatePlatform), platform) +} + +// DeletePlatform mocks base method +func (m *MockStore) DeletePlatform(id string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeletePlatform", id) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeletePlatform indicates an expected call of DeletePlatform +func (mr *MockStoreMockRecorder) DeletePlatform(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePlatform", reflect.TypeOf((*MockStore)(nil).DeletePlatform), id) +} + +// GetPlatformById mocks base method +func (m *MockStore) GetPlatformById(id string) (*model.Platform, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPlatformById", id) + ret0, _ := ret[0].(*model.Platform) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetPlatformById indicates an expected call of GetPlatformById +func (mr *MockStoreMockRecorder) GetPlatformById(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlatformById", reflect.TypeOf((*MockStore)(nil).GetPlatformById), id) +} + +// GetPlatforms mocks base method +func (m *MockStore) GetPlatforms(query map[string]string, offset, limit uint32) (uint32, []*model.Platform, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPlatforms", query, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.Platform) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetPlatforms indicates an expected call of GetPlatforms +func (mr *MockStoreMockRecorder) GetPlatforms(query, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlatforms", reflect.TypeOf((*MockStore)(nil).GetPlatforms), query, offset, limit) +} + +// MockNamespaceStore is a mock of NamespaceStore interface +type MockNamespaceStore struct { + ctrl *gomock.Controller + recorder *MockNamespaceStoreMockRecorder +} + +// MockNamespaceStoreMockRecorder is the mock recorder for MockNamespaceStore +type MockNamespaceStoreMockRecorder struct { + mock *MockNamespaceStore +} + +// NewMockNamespaceStore creates a new mock instance +func NewMockNamespaceStore(ctrl *gomock.Controller) *MockNamespaceStore { + mock := &MockNamespaceStore{ctrl: ctrl} + mock.recorder = &MockNamespaceStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockNamespaceStore) EXPECT() *MockNamespaceStoreMockRecorder { + return m.recorder +} + +// AddNamespace mocks base method +func (m *MockNamespaceStore) AddNamespace(namespace *model.Namespace) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddNamespace", namespace) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddNamespace indicates an expected call of AddNamespace +func (mr *MockNamespaceStoreMockRecorder) AddNamespace(namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddNamespace", reflect.TypeOf((*MockNamespaceStore)(nil).AddNamespace), namespace) +} + +// UpdateNamespace mocks base method +func (m *MockNamespaceStore) UpdateNamespace(namespace *model.Namespace) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateNamespace", namespace) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateNamespace indicates an expected call of UpdateNamespace +func (mr *MockNamespaceStoreMockRecorder) UpdateNamespace(namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateNamespace", reflect.TypeOf((*MockNamespaceStore)(nil).UpdateNamespace), namespace) +} + +// UpdateNamespaceToken mocks base method +func (m *MockNamespaceStore) UpdateNamespaceToken(name, token string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateNamespaceToken", name, token) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateNamespaceToken indicates an expected call of UpdateNamespaceToken +func (mr *MockNamespaceStoreMockRecorder) UpdateNamespaceToken(name, token interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateNamespaceToken", reflect.TypeOf((*MockNamespaceStore)(nil).UpdateNamespaceToken), name, token) +} + +// ListNamespaces mocks base method +func (m *MockNamespaceStore) ListNamespaces(owner string) ([]*model.Namespace, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListNamespaces", owner) + ret0, _ := ret[0].([]*model.Namespace) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListNamespaces indicates an expected call of ListNamespaces +func (mr *MockNamespaceStoreMockRecorder) ListNamespaces(owner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListNamespaces", reflect.TypeOf((*MockNamespaceStore)(nil).ListNamespaces), owner) +} + +// GetNamespace mocks base method +func (m *MockNamespaceStore) GetNamespace(name string) (*model.Namespace, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetNamespace", name) + ret0, _ := ret[0].(*model.Namespace) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetNamespace indicates an expected call of GetNamespace +func (mr *MockNamespaceStoreMockRecorder) GetNamespace(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespace", reflect.TypeOf((*MockNamespaceStore)(nil).GetNamespace), name) +} + +// GetNamespaces mocks base method +func (m *MockNamespaceStore) GetNamespaces(filter map[string][]string, offset, limit int) ([]*model.Namespace, uint32, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetNamespaces", filter, offset, limit) + ret0, _ := ret[0].([]*model.Namespace) + ret1, _ := ret[1].(uint32) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetNamespaces indicates an expected call of GetNamespaces +func (mr *MockNamespaceStoreMockRecorder) GetNamespaces(filter, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetNamespaces", reflect.TypeOf((*MockNamespaceStore)(nil).GetNamespaces), filter, offset, limit) +} + +// GetMoreNamespaces mocks base method +func (m *MockNamespaceStore) GetMoreNamespaces(mtime time.Time) ([]*model.Namespace, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreNamespaces", mtime) + ret0, _ := ret[0].([]*model.Namespace) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreNamespaces indicates an expected call of GetMoreNamespaces +func (mr *MockNamespaceStoreMockRecorder) GetMoreNamespaces(mtime interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreNamespaces", reflect.TypeOf((*MockNamespaceStore)(nil).GetMoreNamespaces), mtime) +} + +// MockBusinessStore is a mock of BusinessStore interface +type MockBusinessStore struct { + ctrl *gomock.Controller + recorder *MockBusinessStoreMockRecorder +} + +// MockBusinessStoreMockRecorder is the mock recorder for MockBusinessStore +type MockBusinessStoreMockRecorder struct { + mock *MockBusinessStore +} + +// NewMockBusinessStore creates a new mock instance +func NewMockBusinessStore(ctrl *gomock.Controller) *MockBusinessStore { + mock := &MockBusinessStore{ctrl: ctrl} + mock.recorder = &MockBusinessStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockBusinessStore) EXPECT() *MockBusinessStoreMockRecorder { + return m.recorder +} + +// AddBusiness mocks base method +func (m *MockBusinessStore) AddBusiness(business *model.Business) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddBusiness", business) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddBusiness indicates an expected call of AddBusiness +func (mr *MockBusinessStoreMockRecorder) AddBusiness(business interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddBusiness", reflect.TypeOf((*MockBusinessStore)(nil).AddBusiness), business) +} + +// DeleteBusiness mocks base method +func (m *MockBusinessStore) DeleteBusiness(bid string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteBusiness", bid) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteBusiness indicates an expected call of DeleteBusiness +func (mr *MockBusinessStoreMockRecorder) DeleteBusiness(bid interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBusiness", reflect.TypeOf((*MockBusinessStore)(nil).DeleteBusiness), bid) +} + +// UpdateBusiness mocks base method +func (m *MockBusinessStore) UpdateBusiness(business *model.Business) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateBusiness", business) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateBusiness indicates an expected call of UpdateBusiness +func (mr *MockBusinessStoreMockRecorder) UpdateBusiness(business interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateBusiness", reflect.TypeOf((*MockBusinessStore)(nil).UpdateBusiness), business) +} + +// UpdateBusinessToken mocks base method +func (m *MockBusinessStore) UpdateBusinessToken(bid, token string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateBusinessToken", bid, token) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateBusinessToken indicates an expected call of UpdateBusinessToken +func (mr *MockBusinessStoreMockRecorder) UpdateBusinessToken(bid, token interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateBusinessToken", reflect.TypeOf((*MockBusinessStore)(nil).UpdateBusinessToken), bid, token) +} + +// ListBusiness mocks base method +func (m *MockBusinessStore) ListBusiness(owner string) ([]*model.Business, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListBusiness", owner) + ret0, _ := ret[0].([]*model.Business) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListBusiness indicates an expected call of ListBusiness +func (mr *MockBusinessStoreMockRecorder) ListBusiness(owner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListBusiness", reflect.TypeOf((*MockBusinessStore)(nil).ListBusiness), owner) +} + +// GetBusinessByID mocks base method +func (m *MockBusinessStore) GetBusinessByID(id string) (*model.Business, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetBusinessByID", id) + ret0, _ := ret[0].(*model.Business) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetBusinessByID indicates an expected call of GetBusinessByID +func (mr *MockBusinessStoreMockRecorder) GetBusinessByID(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBusinessByID", reflect.TypeOf((*MockBusinessStore)(nil).GetBusinessByID), id) +} + +// GetMoreBusiness mocks base method +func (m *MockBusinessStore) GetMoreBusiness(mtime time.Time) ([]*model.Business, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreBusiness", mtime) + ret0, _ := ret[0].([]*model.Business) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreBusiness indicates an expected call of GetMoreBusiness +func (mr *MockBusinessStoreMockRecorder) GetMoreBusiness(mtime interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreBusiness", reflect.TypeOf((*MockBusinessStore)(nil).GetMoreBusiness), mtime) +} + +// MockServiceStore is a mock of ServiceStore interface +type MockServiceStore struct { + ctrl *gomock.Controller + recorder *MockServiceStoreMockRecorder +} + +// MockServiceStoreMockRecorder is the mock recorder for MockServiceStore +type MockServiceStoreMockRecorder struct { + mock *MockServiceStore +} + +// NewMockServiceStore creates a new mock instance +func NewMockServiceStore(ctrl *gomock.Controller) *MockServiceStore { + mock := &MockServiceStore{ctrl: ctrl} + mock.recorder = &MockServiceStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockServiceStore) EXPECT() *MockServiceStoreMockRecorder { + return m.recorder +} + +// AddService mocks base method +func (m *MockServiceStore) AddService(service *model.Service) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddService", service) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddService indicates an expected call of AddService +func (mr *MockServiceStoreMockRecorder) AddService(service interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddService", reflect.TypeOf((*MockServiceStore)(nil).AddService), service) +} + +// DeleteService mocks base method +func (m *MockServiceStore) DeleteService(id, serviceName, namespaceName string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteService", id, serviceName, namespaceName) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteService indicates an expected call of DeleteService +func (mr *MockServiceStoreMockRecorder) DeleteService(id, serviceName, namespaceName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteService", reflect.TypeOf((*MockServiceStore)(nil).DeleteService), id, serviceName, namespaceName) +} + +// DeleteServiceAlias mocks base method +func (m *MockServiceStore) DeleteServiceAlias(name, namespace string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteServiceAlias", name, namespace) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteServiceAlias indicates an expected call of DeleteServiceAlias +func (mr *MockServiceStoreMockRecorder) DeleteServiceAlias(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteServiceAlias", reflect.TypeOf((*MockServiceStore)(nil).DeleteServiceAlias), name, namespace) +} + +// UpdateServiceAlias mocks base method +func (m *MockServiceStore) UpdateServiceAlias(alias *model.Service, needUpdateOwner bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateServiceAlias", alias, needUpdateOwner) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateServiceAlias indicates an expected call of UpdateServiceAlias +func (mr *MockServiceStoreMockRecorder) UpdateServiceAlias(alias, needUpdateOwner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateServiceAlias", reflect.TypeOf((*MockServiceStore)(nil).UpdateServiceAlias), alias, needUpdateOwner) +} + +// UpdateService mocks base method +func (m *MockServiceStore) UpdateService(service *model.Service, needUpdateOwner bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateService", service, needUpdateOwner) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateService indicates an expected call of UpdateService +func (mr *MockServiceStoreMockRecorder) UpdateService(service, needUpdateOwner interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateService", reflect.TypeOf((*MockServiceStore)(nil).UpdateService), service, needUpdateOwner) +} + +// UpdateServiceToken mocks base method +func (m *MockServiceStore) UpdateServiceToken(serviceID, token, revision string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateServiceToken", serviceID, token, revision) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateServiceToken indicates an expected call of UpdateServiceToken +func (mr *MockServiceStoreMockRecorder) UpdateServiceToken(serviceID, token, revision interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateServiceToken", reflect.TypeOf((*MockServiceStore)(nil).UpdateServiceToken), serviceID, token, revision) +} + +// GetSourceServiceToken mocks base method +func (m *MockServiceStore) GetSourceServiceToken(name, namespace string) (*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSourceServiceToken", name, namespace) + ret0, _ := ret[0].(*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetSourceServiceToken indicates an expected call of GetSourceServiceToken +func (mr *MockServiceStoreMockRecorder) GetSourceServiceToken(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSourceServiceToken", reflect.TypeOf((*MockServiceStore)(nil).GetSourceServiceToken), name, namespace) +} + +// GetService mocks base method +func (m *MockServiceStore) GetService(name, namespace string) (*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetService", name, namespace) + ret0, _ := ret[0].(*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetService indicates an expected call of GetService +func (mr *MockServiceStoreMockRecorder) GetService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetService", reflect.TypeOf((*MockServiceStore)(nil).GetService), name, namespace) +} + +// GetServiceByID mocks base method +func (m *MockServiceStore) GetServiceByID(id string) (*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServiceByID", id) + ret0, _ := ret[0].(*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetServiceByID indicates an expected call of GetServiceByID +func (mr *MockServiceStoreMockRecorder) GetServiceByID(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServiceByID", reflect.TypeOf((*MockServiceStore)(nil).GetServiceByID), id) +} + +// GetServices mocks base method +func (m *MockServiceStore) GetServices(serviceFilters, serviceMetas map[string]string, instanceFilters *store.InstanceArgs, offset, limit uint32) (uint32, []*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServices", serviceFilters, serviceMetas, instanceFilters, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.Service) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetServices indicates an expected call of GetServices +func (mr *MockServiceStoreMockRecorder) GetServices(serviceFilters, serviceMetas, instanceFilters, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServices", reflect.TypeOf((*MockServiceStore)(nil).GetServices), serviceFilters, serviceMetas, instanceFilters, offset, limit) +} + +// GetServicesCount mocks base method +func (m *MockServiceStore) GetServicesCount() (uint32, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServicesCount") + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetServicesCount indicates an expected call of GetServicesCount +func (mr *MockServiceStoreMockRecorder) GetServicesCount() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServicesCount", reflect.TypeOf((*MockServiceStore)(nil).GetServicesCount)) +} + +// GetMoreServices mocks base method +func (m *MockServiceStore) GetMoreServices(mtime time.Time, firstUpdate, disableBusiness, needMeta bool) (map[string]*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreServices", mtime, firstUpdate, disableBusiness, needMeta) + ret0, _ := ret[0].(map[string]*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreServices indicates an expected call of GetMoreServices +func (mr *MockServiceStoreMockRecorder) GetMoreServices(mtime, firstUpdate, disableBusiness, needMeta interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreServices", reflect.TypeOf((*MockServiceStore)(nil).GetMoreServices), mtime, firstUpdate, disableBusiness, needMeta) +} + +// GetServiceAliases mocks base method +func (m *MockServiceStore) GetServiceAliases(filter map[string]string, offset, limit uint32) (uint32, []*model.ServiceAlias, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServiceAliases", filter, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.ServiceAlias) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetServiceAliases indicates an expected call of GetServiceAliases +func (mr *MockServiceStoreMockRecorder) GetServiceAliases(filter, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServiceAliases", reflect.TypeOf((*MockServiceStore)(nil).GetServiceAliases), filter, offset, limit) +} + +// GetSystemServices mocks base method +func (m *MockServiceStore) GetSystemServices() ([]*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetSystemServices") + ret0, _ := ret[0].([]*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetSystemServices indicates an expected call of GetSystemServices +func (mr *MockServiceStoreMockRecorder) GetSystemServices() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSystemServices", reflect.TypeOf((*MockServiceStore)(nil).GetSystemServices)) +} + +// GetServicesBatch mocks base method +func (m *MockServiceStore) GetServicesBatch(services []*model.Service) ([]*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServicesBatch", services) + ret0, _ := ret[0].([]*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetServicesBatch indicates an expected call of GetServicesBatch +func (mr *MockServiceStoreMockRecorder) GetServicesBatch(services interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServicesBatch", reflect.TypeOf((*MockServiceStore)(nil).GetServicesBatch), services) +} + +// MockInstanceStore is a mock of InstanceStore interface +type MockInstanceStore struct { + ctrl *gomock.Controller + recorder *MockInstanceStoreMockRecorder +} + +// MockInstanceStoreMockRecorder is the mock recorder for MockInstanceStore +type MockInstanceStoreMockRecorder struct { + mock *MockInstanceStore +} + +// NewMockInstanceStore creates a new mock instance +func NewMockInstanceStore(ctrl *gomock.Controller) *MockInstanceStore { + mock := &MockInstanceStore{ctrl: ctrl} + mock.recorder = &MockInstanceStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockInstanceStore) EXPECT() *MockInstanceStoreMockRecorder { + return m.recorder +} + +// AddInstance mocks base method +func (m *MockInstanceStore) AddInstance(instance *model.Instance) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddInstance", instance) + ret0, _ := ret[0].(error) + return ret0 +} + +// AddInstance indicates an expected call of AddInstance +func (mr *MockInstanceStoreMockRecorder) AddInstance(instance interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddInstance", reflect.TypeOf((*MockInstanceStore)(nil).AddInstance), instance) +} + +// BatchAddInstances mocks base method +func (m *MockInstanceStore) BatchAddInstances(instances []*model.Instance) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BatchAddInstances", instances) + ret0, _ := ret[0].(error) + return ret0 +} + +// BatchAddInstances indicates an expected call of BatchAddInstances +func (mr *MockInstanceStoreMockRecorder) BatchAddInstances(instances interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchAddInstances", reflect.TypeOf((*MockInstanceStore)(nil).BatchAddInstances), instances) +} + +// UpdateInstance mocks base method +func (m *MockInstanceStore) UpdateInstance(instance *model.Instance) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateInstance", instance) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateInstance indicates an expected call of UpdateInstance +func (mr *MockInstanceStoreMockRecorder) UpdateInstance(instance interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateInstance", reflect.TypeOf((*MockInstanceStore)(nil).UpdateInstance), instance) +} + +// DeleteInstance mocks base method +func (m *MockInstanceStore) DeleteInstance(instanceID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteInstance", instanceID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteInstance indicates an expected call of DeleteInstance +func (mr *MockInstanceStoreMockRecorder) DeleteInstance(instanceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteInstance", reflect.TypeOf((*MockInstanceStore)(nil).DeleteInstance), instanceID) +} + +// BatchDeleteInstances mocks base method +func (m *MockInstanceStore) BatchDeleteInstances(ids []interface{}) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BatchDeleteInstances", ids) + ret0, _ := ret[0].(error) + return ret0 +} + +// BatchDeleteInstances indicates an expected call of BatchDeleteInstances +func (mr *MockInstanceStoreMockRecorder) BatchDeleteInstances(ids interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchDeleteInstances", reflect.TypeOf((*MockInstanceStore)(nil).BatchDeleteInstances), ids) +} + +// CleanInstance mocks base method +func (m *MockInstanceStore) CleanInstance(instanceID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CleanInstance", instanceID) + ret0, _ := ret[0].(error) + return ret0 +} + +// CleanInstance indicates an expected call of CleanInstance +func (mr *MockInstanceStoreMockRecorder) CleanInstance(instanceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CleanInstance", reflect.TypeOf((*MockInstanceStore)(nil).CleanInstance), instanceID) +} + +// CheckInstancesExisted mocks base method +func (m *MockInstanceStore) CheckInstancesExisted(ids map[string]bool) (map[string]bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CheckInstancesExisted", ids) + ret0, _ := ret[0].(map[string]bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CheckInstancesExisted indicates an expected call of CheckInstancesExisted +func (mr *MockInstanceStoreMockRecorder) CheckInstancesExisted(ids interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckInstancesExisted", reflect.TypeOf((*MockInstanceStore)(nil).CheckInstancesExisted), ids) +} + +// GetInstancesBrief mocks base method +func (m *MockInstanceStore) GetInstancesBrief(ids map[string]bool) (map[string]*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstancesBrief", ids) + ret0, _ := ret[0].(map[string]*model.Instance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstancesBrief indicates an expected call of GetInstancesBrief +func (mr *MockInstanceStoreMockRecorder) GetInstancesBrief(ids interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstancesBrief", reflect.TypeOf((*MockInstanceStore)(nil).GetInstancesBrief), ids) +} + +// GetInstance mocks base method +func (m *MockInstanceStore) GetInstance(instanceID string) (*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstance", instanceID) + ret0, _ := ret[0].(*model.Instance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstance indicates an expected call of GetInstance +func (mr *MockInstanceStoreMockRecorder) GetInstance(instanceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstance", reflect.TypeOf((*MockInstanceStore)(nil).GetInstance), instanceID) +} + +// GetInstancesCount mocks base method +func (m *MockInstanceStore) GetInstancesCount() (uint32, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstancesCount") + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstancesCount indicates an expected call of GetInstancesCount +func (mr *MockInstanceStoreMockRecorder) GetInstancesCount() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstancesCount", reflect.TypeOf((*MockInstanceStore)(nil).GetInstancesCount)) +} + +// GetInstancesMainByService mocks base method +func (m *MockInstanceStore) GetInstancesMainByService(serviceID, host string) ([]*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetInstancesMainByService", serviceID, host) + ret0, _ := ret[0].([]*model.Instance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInstancesMainByService indicates an expected call of GetInstancesMainByService +func (mr *MockInstanceStoreMockRecorder) GetInstancesMainByService(serviceID, host interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInstancesMainByService", reflect.TypeOf((*MockInstanceStore)(nil).GetInstancesMainByService), serviceID, host) +} + +// GetExpandInstances mocks base method +func (m *MockInstanceStore) GetExpandInstances(filter, metaFilter map[string]string, offset, limit uint32) (uint32, []*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetExpandInstances", filter, metaFilter, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.Instance) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetExpandInstances indicates an expected call of GetExpandInstances +func (mr *MockInstanceStoreMockRecorder) GetExpandInstances(filter, metaFilter, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetExpandInstances", reflect.TypeOf((*MockInstanceStore)(nil).GetExpandInstances), filter, metaFilter, offset, limit) +} + +// GetMoreInstances mocks base method +func (m *MockInstanceStore) GetMoreInstances(mtime time.Time, firstUpdate, needMeta bool, serviceID []string) (map[string]*model.Instance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreInstances", mtime, firstUpdate, needMeta, serviceID) + ret0, _ := ret[0].(map[string]*model.Instance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreInstances indicates an expected call of GetMoreInstances +func (mr *MockInstanceStoreMockRecorder) GetMoreInstances(mtime, firstUpdate, needMeta, serviceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreInstances", reflect.TypeOf((*MockInstanceStore)(nil).GetMoreInstances), mtime, firstUpdate, needMeta, serviceID) +} + +// SetInstanceHealthStatus mocks base method +func (m *MockInstanceStore) SetInstanceHealthStatus(instanceID string, flag int, revision string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetInstanceHealthStatus", instanceID, flag, revision) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetInstanceHealthStatus indicates an expected call of SetInstanceHealthStatus +func (mr *MockInstanceStoreMockRecorder) SetInstanceHealthStatus(instanceID, flag, revision interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetInstanceHealthStatus", reflect.TypeOf((*MockInstanceStore)(nil).SetInstanceHealthStatus), instanceID, flag, revision) +} + +// BatchSetInstanceIsolate mocks base method +func (m *MockInstanceStore) BatchSetInstanceIsolate(ids []interface{}, isolate int, revision string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BatchSetInstanceIsolate", ids, isolate, revision) + ret0, _ := ret[0].(error) + return ret0 +} + +// BatchSetInstanceIsolate indicates an expected call of BatchSetInstanceIsolate +func (mr *MockInstanceStoreMockRecorder) BatchSetInstanceIsolate(ids, isolate, revision interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchSetInstanceIsolate", reflect.TypeOf((*MockInstanceStore)(nil).BatchSetInstanceIsolate), ids, isolate, revision) +} + +// MockL5Store is a mock of L5Store interface +type MockL5Store struct { + ctrl *gomock.Controller + recorder *MockL5StoreMockRecorder +} + +// MockL5StoreMockRecorder is the mock recorder for MockL5Store +type MockL5StoreMockRecorder struct { + mock *MockL5Store +} + +// NewMockL5Store creates a new mock instance +func NewMockL5Store(ctrl *gomock.Controller) *MockL5Store { + mock := &MockL5Store{ctrl: ctrl} + mock.recorder = &MockL5StoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockL5Store) EXPECT() *MockL5StoreMockRecorder { + return m.recorder +} + +// GetL5Extend mocks base method +func (m *MockL5Store) GetL5Extend(serviceID string) (map[string]interface{}, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetL5Extend", serviceID) + ret0, _ := ret[0].(map[string]interface{}) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetL5Extend indicates an expected call of GetL5Extend +func (mr *MockL5StoreMockRecorder) GetL5Extend(serviceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetL5Extend", reflect.TypeOf((*MockL5Store)(nil).GetL5Extend), serviceID) +} + +// SetL5Extend mocks base method +func (m *MockL5Store) SetL5Extend(serviceID string, meta map[string]interface{}) (map[string]interface{}, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetL5Extend", serviceID, meta) + ret0, _ := ret[0].(map[string]interface{}) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetL5Extend indicates an expected call of SetL5Extend +func (mr *MockL5StoreMockRecorder) SetL5Extend(serviceID, meta interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetL5Extend", reflect.TypeOf((*MockL5Store)(nil).SetL5Extend), serviceID, meta) +} + +// GenNextL5Sid mocks base method +func (m *MockL5Store) GenNextL5Sid(layoutID uint32) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GenNextL5Sid", layoutID) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GenNextL5Sid indicates an expected call of GenNextL5Sid +func (mr *MockL5StoreMockRecorder) GenNextL5Sid(layoutID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GenNextL5Sid", reflect.TypeOf((*MockL5Store)(nil).GenNextL5Sid), layoutID) +} + +// GetMoreL5Extend mocks base method +func (m *MockL5Store) GetMoreL5Extend(mtime time.Time) (map[string]map[string]interface{}, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5Extend", mtime) + ret0, _ := ret[0].(map[string]map[string]interface{}) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5Extend indicates an expected call of GetMoreL5Extend +func (mr *MockL5StoreMockRecorder) GetMoreL5Extend(mtime interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5Extend", reflect.TypeOf((*MockL5Store)(nil).GetMoreL5Extend), mtime) +} + +// GetMoreL5Routes mocks base method +func (m *MockL5Store) GetMoreL5Routes(flow uint32) ([]*model.Route, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5Routes", flow) + ret0, _ := ret[0].([]*model.Route) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5Routes indicates an expected call of GetMoreL5Routes +func (mr *MockL5StoreMockRecorder) GetMoreL5Routes(flow interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5Routes", reflect.TypeOf((*MockL5Store)(nil).GetMoreL5Routes), flow) +} + +// GetMoreL5Policies mocks base method +func (m *MockL5Store) GetMoreL5Policies(flow uint32) ([]*model.Policy, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5Policies", flow) + ret0, _ := ret[0].([]*model.Policy) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5Policies indicates an expected call of GetMoreL5Policies +func (mr *MockL5StoreMockRecorder) GetMoreL5Policies(flow interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5Policies", reflect.TypeOf((*MockL5Store)(nil).GetMoreL5Policies), flow) +} + +// GetMoreL5Sections mocks base method +func (m *MockL5Store) GetMoreL5Sections(flow uint32) ([]*model.Section, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5Sections", flow) + ret0, _ := ret[0].([]*model.Section) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5Sections indicates an expected call of GetMoreL5Sections +func (mr *MockL5StoreMockRecorder) GetMoreL5Sections(flow interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5Sections", reflect.TypeOf((*MockL5Store)(nil).GetMoreL5Sections), flow) +} + +// GetMoreL5IPConfigs mocks base method +func (m *MockL5Store) GetMoreL5IPConfigs(flow uint32) ([]*model.IPConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMoreL5IPConfigs", flow) + ret0, _ := ret[0].([]*model.IPConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetMoreL5IPConfigs indicates an expected call of GetMoreL5IPConfigs +func (mr *MockL5StoreMockRecorder) GetMoreL5IPConfigs(flow interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMoreL5IPConfigs", reflect.TypeOf((*MockL5Store)(nil).GetMoreL5IPConfigs), flow) +} + +// MockRoutingConfigStore is a mock of RoutingConfigStore interface +type MockRoutingConfigStore struct { + ctrl *gomock.Controller + recorder *MockRoutingConfigStoreMockRecorder +} + +// MockRoutingConfigStoreMockRecorder is the mock recorder for MockRoutingConfigStore +type MockRoutingConfigStoreMockRecorder struct { + mock *MockRoutingConfigStore +} + +// NewMockRoutingConfigStore creates a new mock instance +func NewMockRoutingConfigStore(ctrl *gomock.Controller) *MockRoutingConfigStore { + mock := &MockRoutingConfigStore{ctrl: ctrl} + mock.recorder = &MockRoutingConfigStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRoutingConfigStore) EXPECT() *MockRoutingConfigStoreMockRecorder { + return m.recorder +} + +// CreateRoutingConfig mocks base method +func (m *MockRoutingConfigStore) CreateRoutingConfig(conf *model.RoutingConfig) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateRoutingConfig", conf) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreateRoutingConfig indicates an expected call of CreateRoutingConfig +func (mr *MockRoutingConfigStoreMockRecorder) CreateRoutingConfig(conf interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateRoutingConfig", reflect.TypeOf((*MockRoutingConfigStore)(nil).CreateRoutingConfig), conf) +} + +// UpdateRoutingConfig mocks base method +func (m *MockRoutingConfigStore) UpdateRoutingConfig(conf *model.RoutingConfig) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateRoutingConfig", conf) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateRoutingConfig indicates an expected call of UpdateRoutingConfig +func (mr *MockRoutingConfigStoreMockRecorder) UpdateRoutingConfig(conf interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateRoutingConfig", reflect.TypeOf((*MockRoutingConfigStore)(nil).UpdateRoutingConfig), conf) +} + +// DeleteRoutingConfig mocks base method +func (m *MockRoutingConfigStore) DeleteRoutingConfig(serviceID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteRoutingConfig", serviceID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteRoutingConfig indicates an expected call of DeleteRoutingConfig +func (mr *MockRoutingConfigStoreMockRecorder) DeleteRoutingConfig(serviceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteRoutingConfig", reflect.TypeOf((*MockRoutingConfigStore)(nil).DeleteRoutingConfig), serviceID) +} + +// GetRoutingConfigsForCache mocks base method +func (m *MockRoutingConfigStore) GetRoutingConfigsForCache(mtime time.Time, firstUpdate bool) ([]*model.RoutingConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRoutingConfigsForCache", mtime, firstUpdate) + ret0, _ := ret[0].([]*model.RoutingConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRoutingConfigsForCache indicates an expected call of GetRoutingConfigsForCache +func (mr *MockRoutingConfigStoreMockRecorder) GetRoutingConfigsForCache(mtime, firstUpdate interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoutingConfigsForCache", reflect.TypeOf((*MockRoutingConfigStore)(nil).GetRoutingConfigsForCache), mtime, firstUpdate) +} + +// GetRoutingConfigWithService mocks base method +func (m *MockRoutingConfigStore) GetRoutingConfigWithService(name, namespace string) (*model.RoutingConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRoutingConfigWithService", name, namespace) + ret0, _ := ret[0].(*model.RoutingConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRoutingConfigWithService indicates an expected call of GetRoutingConfigWithService +func (mr *MockRoutingConfigStoreMockRecorder) GetRoutingConfigWithService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoutingConfigWithService", reflect.TypeOf((*MockRoutingConfigStore)(nil).GetRoutingConfigWithService), name, namespace) +} + +// GetRoutingConfigWithID mocks base method +func (m *MockRoutingConfigStore) GetRoutingConfigWithID(id string) (*model.RoutingConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRoutingConfigWithID", id) + ret0, _ := ret[0].(*model.RoutingConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRoutingConfigWithID indicates an expected call of GetRoutingConfigWithID +func (mr *MockRoutingConfigStoreMockRecorder) GetRoutingConfigWithID(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoutingConfigWithID", reflect.TypeOf((*MockRoutingConfigStore)(nil).GetRoutingConfigWithID), id) +} + +// GetRoutingConfigs mocks base method +func (m *MockRoutingConfigStore) GetRoutingConfigs(filter map[string]string, offset, limit uint32) (uint32, []*model.ExtendRoutingConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRoutingConfigs", filter, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.ExtendRoutingConfig) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetRoutingConfigs indicates an expected call of GetRoutingConfigs +func (mr *MockRoutingConfigStoreMockRecorder) GetRoutingConfigs(filter, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRoutingConfigs", reflect.TypeOf((*MockRoutingConfigStore)(nil).GetRoutingConfigs), filter, offset, limit) +} + +// MockRateLimitStore is a mock of RateLimitStore interface +type MockRateLimitStore struct { + ctrl *gomock.Controller + recorder *MockRateLimitStoreMockRecorder +} + +// MockRateLimitStoreMockRecorder is the mock recorder for MockRateLimitStore +type MockRateLimitStoreMockRecorder struct { + mock *MockRateLimitStore +} + +// NewMockRateLimitStore creates a new mock instance +func NewMockRateLimitStore(ctrl *gomock.Controller) *MockRateLimitStore { + mock := &MockRateLimitStore{ctrl: ctrl} + mock.recorder = &MockRateLimitStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockRateLimitStore) EXPECT() *MockRateLimitStoreMockRecorder { + return m.recorder +} + +// CreateRateLimit mocks base method +func (m *MockRateLimitStore) CreateRateLimit(limiting *model.RateLimit) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateRateLimit", limiting) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreateRateLimit indicates an expected call of CreateRateLimit +func (mr *MockRateLimitStoreMockRecorder) CreateRateLimit(limiting interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateRateLimit", reflect.TypeOf((*MockRateLimitStore)(nil).CreateRateLimit), limiting) +} + +// UpdateRateLimit mocks base method +func (m *MockRateLimitStore) UpdateRateLimit(limiting *model.RateLimit) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateRateLimit", limiting) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateRateLimit indicates an expected call of UpdateRateLimit +func (mr *MockRateLimitStoreMockRecorder) UpdateRateLimit(limiting interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateRateLimit", reflect.TypeOf((*MockRateLimitStore)(nil).UpdateRateLimit), limiting) +} + +// DeleteRateLimit mocks base method +func (m *MockRateLimitStore) DeleteRateLimit(limiting *model.RateLimit) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteRateLimit", limiting) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteRateLimit indicates an expected call of DeleteRateLimit +func (mr *MockRateLimitStoreMockRecorder) DeleteRateLimit(limiting interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteRateLimit", reflect.TypeOf((*MockRateLimitStore)(nil).DeleteRateLimit), limiting) +} + +// GetExtendRateLimits mocks base method +func (m *MockRateLimitStore) GetExtendRateLimits(query map[string]string, offset, limit uint32) (uint32, []*model.ExtendRateLimit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetExtendRateLimits", query, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.ExtendRateLimit) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetExtendRateLimits indicates an expected call of GetExtendRateLimits +func (mr *MockRateLimitStoreMockRecorder) GetExtendRateLimits(query, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetExtendRateLimits", reflect.TypeOf((*MockRateLimitStore)(nil).GetExtendRateLimits), query, offset, limit) +} + +// GetRateLimitWithID mocks base method +func (m *MockRateLimitStore) GetRateLimitWithID(id string) (*model.RateLimit, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRateLimitWithID", id) + ret0, _ := ret[0].(*model.RateLimit) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRateLimitWithID indicates an expected call of GetRateLimitWithID +func (mr *MockRateLimitStoreMockRecorder) GetRateLimitWithID(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRateLimitWithID", reflect.TypeOf((*MockRateLimitStore)(nil).GetRateLimitWithID), id) +} + +// GetRateLimitsForCache mocks base method +func (m *MockRateLimitStore) GetRateLimitsForCache(mtime time.Time, firstUpdate bool) ([]*model.RateLimit, []*model.RateLimitRevision, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetRateLimitsForCache", mtime, firstUpdate) + ret0, _ := ret[0].([]*model.RateLimit) + ret1, _ := ret[1].([]*model.RateLimitRevision) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetRateLimitsForCache indicates an expected call of GetRateLimitsForCache +func (mr *MockRateLimitStoreMockRecorder) GetRateLimitsForCache(mtime, firstUpdate interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRateLimitsForCache", reflect.TypeOf((*MockRateLimitStore)(nil).GetRateLimitsForCache), mtime, firstUpdate) +} + +// MockCircuitBreakerStore is a mock of CircuitBreakerStore interface +type MockCircuitBreakerStore struct { + ctrl *gomock.Controller + recorder *MockCircuitBreakerStoreMockRecorder +} + +// MockCircuitBreakerStoreMockRecorder is the mock recorder for MockCircuitBreakerStore +type MockCircuitBreakerStoreMockRecorder struct { + mock *MockCircuitBreakerStore +} + +// NewMockCircuitBreakerStore creates a new mock instance +func NewMockCircuitBreakerStore(ctrl *gomock.Controller) *MockCircuitBreakerStore { + mock := &MockCircuitBreakerStore{ctrl: ctrl} + mock.recorder = &MockCircuitBreakerStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockCircuitBreakerStore) EXPECT() *MockCircuitBreakerStoreMockRecorder { + return m.recorder +} + +// CreateCircuitBreaker mocks base method +func (m *MockCircuitBreakerStore) CreateCircuitBreaker(circuitBreaker *model.CircuitBreaker) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateCircuitBreaker", circuitBreaker) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreateCircuitBreaker indicates an expected call of CreateCircuitBreaker +func (mr *MockCircuitBreakerStoreMockRecorder) CreateCircuitBreaker(circuitBreaker interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateCircuitBreaker", reflect.TypeOf((*MockCircuitBreakerStore)(nil).CreateCircuitBreaker), circuitBreaker) +} + +// TagCircuitBreaker mocks base method +func (m *MockCircuitBreakerStore) TagCircuitBreaker(circuitBreaker *model.CircuitBreaker) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TagCircuitBreaker", circuitBreaker) + ret0, _ := ret[0].(error) + return ret0 +} + +// TagCircuitBreaker indicates an expected call of TagCircuitBreaker +func (mr *MockCircuitBreakerStoreMockRecorder) TagCircuitBreaker(circuitBreaker interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TagCircuitBreaker", reflect.TypeOf((*MockCircuitBreakerStore)(nil).TagCircuitBreaker), circuitBreaker) +} + +// ReleaseCircuitBreaker mocks base method +func (m *MockCircuitBreakerStore) ReleaseCircuitBreaker(circuitBreakerRelation *model.CircuitBreakerRelation) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReleaseCircuitBreaker", circuitBreakerRelation) + ret0, _ := ret[0].(error) + return ret0 +} + +// ReleaseCircuitBreaker indicates an expected call of ReleaseCircuitBreaker +func (mr *MockCircuitBreakerStoreMockRecorder) ReleaseCircuitBreaker(circuitBreakerRelation interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReleaseCircuitBreaker", reflect.TypeOf((*MockCircuitBreakerStore)(nil).ReleaseCircuitBreaker), circuitBreakerRelation) +} + +// UnbindCircuitBreaker mocks base method +func (m *MockCircuitBreakerStore) UnbindCircuitBreaker(serviceID, ruleID, ruleVersion string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UnbindCircuitBreaker", serviceID, ruleID, ruleVersion) + ret0, _ := ret[0].(error) + return ret0 +} + +// UnbindCircuitBreaker indicates an expected call of UnbindCircuitBreaker +func (mr *MockCircuitBreakerStoreMockRecorder) UnbindCircuitBreaker(serviceID, ruleID, ruleVersion interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnbindCircuitBreaker", reflect.TypeOf((*MockCircuitBreakerStore)(nil).UnbindCircuitBreaker), serviceID, ruleID, ruleVersion) +} + +// DeleteTagCircuitBreaker mocks base method +func (m *MockCircuitBreakerStore) DeleteTagCircuitBreaker(id, version string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteTagCircuitBreaker", id, version) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteTagCircuitBreaker indicates an expected call of DeleteTagCircuitBreaker +func (mr *MockCircuitBreakerStoreMockRecorder) DeleteTagCircuitBreaker(id, version interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTagCircuitBreaker", reflect.TypeOf((*MockCircuitBreakerStore)(nil).DeleteTagCircuitBreaker), id, version) +} + +// DeleteMasterCircuitBreaker mocks base method +func (m *MockCircuitBreakerStore) DeleteMasterCircuitBreaker(id string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteMasterCircuitBreaker", id) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteMasterCircuitBreaker indicates an expected call of DeleteMasterCircuitBreaker +func (mr *MockCircuitBreakerStoreMockRecorder) DeleteMasterCircuitBreaker(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteMasterCircuitBreaker", reflect.TypeOf((*MockCircuitBreakerStore)(nil).DeleteMasterCircuitBreaker), id) +} + +// UpdateCircuitBreaker mocks base method +func (m *MockCircuitBreakerStore) UpdateCircuitBreaker(circuitBraker *model.CircuitBreaker) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateCircuitBreaker", circuitBraker) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdateCircuitBreaker indicates an expected call of UpdateCircuitBreaker +func (mr *MockCircuitBreakerStoreMockRecorder) UpdateCircuitBreaker(circuitBraker interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateCircuitBreaker", reflect.TypeOf((*MockCircuitBreakerStore)(nil).UpdateCircuitBreaker), circuitBraker) +} + +// GetCircuitBreaker mocks base method +func (m *MockCircuitBreakerStore) GetCircuitBreaker(id, version string) (*model.CircuitBreaker, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreaker", id, version) + ret0, _ := ret[0].(*model.CircuitBreaker) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreaker indicates an expected call of GetCircuitBreaker +func (mr *MockCircuitBreakerStoreMockRecorder) GetCircuitBreaker(id, version interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreaker", reflect.TypeOf((*MockCircuitBreakerStore)(nil).GetCircuitBreaker), id, version) +} + +// GetCircuitBreakerVersions mocks base method +func (m *MockCircuitBreakerStore) GetCircuitBreakerVersions(id string) ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakerVersions", id) + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakerVersions indicates an expected call of GetCircuitBreakerVersions +func (mr *MockCircuitBreakerStoreMockRecorder) GetCircuitBreakerVersions(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakerVersions", reflect.TypeOf((*MockCircuitBreakerStore)(nil).GetCircuitBreakerVersions), id) +} + +// GetCircuitBreakerMasterRelation mocks base method +func (m *MockCircuitBreakerStore) GetCircuitBreakerMasterRelation(ruleID string) ([]*model.CircuitBreakerRelation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakerMasterRelation", ruleID) + ret0, _ := ret[0].([]*model.CircuitBreakerRelation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakerMasterRelation indicates an expected call of GetCircuitBreakerMasterRelation +func (mr *MockCircuitBreakerStoreMockRecorder) GetCircuitBreakerMasterRelation(ruleID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakerMasterRelation", reflect.TypeOf((*MockCircuitBreakerStore)(nil).GetCircuitBreakerMasterRelation), ruleID) +} + +// GetCircuitBreakerRelation mocks base method +func (m *MockCircuitBreakerStore) GetCircuitBreakerRelation(ruleID, ruleVersion string) ([]*model.CircuitBreakerRelation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakerRelation", ruleID, ruleVersion) + ret0, _ := ret[0].([]*model.CircuitBreakerRelation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakerRelation indicates an expected call of GetCircuitBreakerRelation +func (mr *MockCircuitBreakerStoreMockRecorder) GetCircuitBreakerRelation(ruleID, ruleVersion interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakerRelation", reflect.TypeOf((*MockCircuitBreakerStore)(nil).GetCircuitBreakerRelation), ruleID, ruleVersion) +} + +// GetCircuitBreakerForCache mocks base method +func (m *MockCircuitBreakerStore) GetCircuitBreakerForCache(mtime time.Time, firstUpdate bool) ([]*model.ServiceWithCircuitBreaker, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakerForCache", mtime, firstUpdate) + ret0, _ := ret[0].([]*model.ServiceWithCircuitBreaker) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakerForCache indicates an expected call of GetCircuitBreakerForCache +func (mr *MockCircuitBreakerStoreMockRecorder) GetCircuitBreakerForCache(mtime, firstUpdate interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakerForCache", reflect.TypeOf((*MockCircuitBreakerStore)(nil).GetCircuitBreakerForCache), mtime, firstUpdate) +} + +// ListMasterCircuitBreakers mocks base method +func (m *MockCircuitBreakerStore) ListMasterCircuitBreakers(filters map[string]string, offset, limit uint32) (*model.CircuitBreakerDetail, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListMasterCircuitBreakers", filters, offset, limit) + ret0, _ := ret[0].(*model.CircuitBreakerDetail) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListMasterCircuitBreakers indicates an expected call of ListMasterCircuitBreakers +func (mr *MockCircuitBreakerStoreMockRecorder) ListMasterCircuitBreakers(filters, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListMasterCircuitBreakers", reflect.TypeOf((*MockCircuitBreakerStore)(nil).ListMasterCircuitBreakers), filters, offset, limit) +} + +// ListReleaseCircuitBreakers mocks base method +func (m *MockCircuitBreakerStore) ListReleaseCircuitBreakers(filters map[string]string, offset, limit uint32) (*model.CircuitBreakerDetail, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListReleaseCircuitBreakers", filters, offset, limit) + ret0, _ := ret[0].(*model.CircuitBreakerDetail) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListReleaseCircuitBreakers indicates an expected call of ListReleaseCircuitBreakers +func (mr *MockCircuitBreakerStoreMockRecorder) ListReleaseCircuitBreakers(filters, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListReleaseCircuitBreakers", reflect.TypeOf((*MockCircuitBreakerStore)(nil).ListReleaseCircuitBreakers), filters, offset, limit) +} + +// GetCircuitBreakersByService mocks base method +func (m *MockCircuitBreakerStore) GetCircuitBreakersByService(name, namespace string) (*model.CircuitBreaker, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCircuitBreakersByService", name, namespace) + ret0, _ := ret[0].(*model.CircuitBreaker) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCircuitBreakersByService indicates an expected call of GetCircuitBreakersByService +func (mr *MockCircuitBreakerStoreMockRecorder) GetCircuitBreakersByService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCircuitBreakersByService", reflect.TypeOf((*MockCircuitBreakerStore)(nil).GetCircuitBreakersByService), name, namespace) +} + +// MockPlatformStore is a mock of PlatformStore interface +type MockPlatformStore struct { + ctrl *gomock.Controller + recorder *MockPlatformStoreMockRecorder +} + +// MockPlatformStoreMockRecorder is the mock recorder for MockPlatformStore +type MockPlatformStoreMockRecorder struct { + mock *MockPlatformStore +} + +// NewMockPlatformStore creates a new mock instance +func NewMockPlatformStore(ctrl *gomock.Controller) *MockPlatformStore { + mock := &MockPlatformStore{ctrl: ctrl} + mock.recorder = &MockPlatformStoreMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockPlatformStore) EXPECT() *MockPlatformStoreMockRecorder { + return m.recorder +} + +// CreatePlatform mocks base method +func (m *MockPlatformStore) CreatePlatform(platform *model.Platform) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreatePlatform", platform) + ret0, _ := ret[0].(error) + return ret0 +} + +// CreatePlatform indicates an expected call of CreatePlatform +func (mr *MockPlatformStoreMockRecorder) CreatePlatform(platform interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePlatform", reflect.TypeOf((*MockPlatformStore)(nil).CreatePlatform), platform) +} + +// UpdatePlatform mocks base method +func (m *MockPlatformStore) UpdatePlatform(platform *model.Platform) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdatePlatform", platform) + ret0, _ := ret[0].(error) + return ret0 +} + +// UpdatePlatform indicates an expected call of UpdatePlatform +func (mr *MockPlatformStoreMockRecorder) UpdatePlatform(platform interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdatePlatform", reflect.TypeOf((*MockPlatformStore)(nil).UpdatePlatform), platform) +} + +// DeletePlatform mocks base method +func (m *MockPlatformStore) DeletePlatform(id string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeletePlatform", id) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeletePlatform indicates an expected call of DeletePlatform +func (mr *MockPlatformStoreMockRecorder) DeletePlatform(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePlatform", reflect.TypeOf((*MockPlatformStore)(nil).DeletePlatform), id) +} + +// GetPlatformById mocks base method +func (m *MockPlatformStore) GetPlatformById(id string) (*model.Platform, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPlatformById", id) + ret0, _ := ret[0].(*model.Platform) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetPlatformById indicates an expected call of GetPlatformById +func (mr *MockPlatformStoreMockRecorder) GetPlatformById(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlatformById", reflect.TypeOf((*MockPlatformStore)(nil).GetPlatformById), id) +} + +// GetPlatforms mocks base method +func (m *MockPlatformStore) GetPlatforms(query map[string]string, offset, limit uint32) (uint32, []*model.Platform, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPlatforms", query, offset, limit) + ret0, _ := ret[0].(uint32) + ret1, _ := ret[1].([]*model.Platform) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetPlatforms indicates an expected call of GetPlatforms +func (mr *MockPlatformStoreMockRecorder) GetPlatforms(query, offset, limit interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPlatforms", reflect.TypeOf((*MockPlatformStore)(nil).GetPlatforms), query, offset, limit) +} + +// MockTransaction is a mock of Transaction interface +type MockTransaction struct { + ctrl *gomock.Controller + recorder *MockTransactionMockRecorder +} + +// MockTransactionMockRecorder is the mock recorder for MockTransaction +type MockTransactionMockRecorder struct { + mock *MockTransaction +} + +// NewMockTransaction creates a new mock instance +func NewMockTransaction(ctrl *gomock.Controller) *MockTransaction { + mock := &MockTransaction{ctrl: ctrl} + mock.recorder = &MockTransactionMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockTransaction) EXPECT() *MockTransactionMockRecorder { + return m.recorder +} + +// Commit mocks base method +func (m *MockTransaction) Commit() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Commit") + ret0, _ := ret[0].(error) + return ret0 +} + +// Commit indicates an expected call of Commit +func (mr *MockTransactionMockRecorder) Commit() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Commit", reflect.TypeOf((*MockTransaction)(nil).Commit)) +} + +// LockBootstrap mocks base method +func (m *MockTransaction) LockBootstrap(key, server string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LockBootstrap", key, server) + ret0, _ := ret[0].(error) + return ret0 +} + +// LockBootstrap indicates an expected call of LockBootstrap +func (mr *MockTransactionMockRecorder) LockBootstrap(key, server interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LockBootstrap", reflect.TypeOf((*MockTransaction)(nil).LockBootstrap), key, server) +} + +// LockNamespace mocks base method +func (m *MockTransaction) LockNamespace(name string) (*model.Namespace, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LockNamespace", name) + ret0, _ := ret[0].(*model.Namespace) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// LockNamespace indicates an expected call of LockNamespace +func (mr *MockTransactionMockRecorder) LockNamespace(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LockNamespace", reflect.TypeOf((*MockTransaction)(nil).LockNamespace), name) +} + +// RLockNamespace mocks base method +func (m *MockTransaction) RLockNamespace(name string) (*model.Namespace, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RLockNamespace", name) + ret0, _ := ret[0].(*model.Namespace) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// RLockNamespace indicates an expected call of RLockNamespace +func (mr *MockTransactionMockRecorder) RLockNamespace(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RLockNamespace", reflect.TypeOf((*MockTransaction)(nil).RLockNamespace), name) +} + +// DeleteNamespace mocks base method +func (m *MockTransaction) DeleteNamespace(name string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteNamespace", name) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteNamespace indicates an expected call of DeleteNamespace +func (mr *MockTransactionMockRecorder) DeleteNamespace(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteNamespace", reflect.TypeOf((*MockTransaction)(nil).DeleteNamespace), name) +} + +// LockService mocks base method +func (m *MockTransaction) LockService(name, namespace string) (*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LockService", name, namespace) + ret0, _ := ret[0].(*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// LockService indicates an expected call of LockService +func (mr *MockTransactionMockRecorder) LockService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LockService", reflect.TypeOf((*MockTransaction)(nil).LockService), name, namespace) +} + +// RLockService mocks base method +func (m *MockTransaction) RLockService(name, namespace string) (*model.Service, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "RLockService", name, namespace) + ret0, _ := ret[0].(*model.Service) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// RLockService indicates an expected call of RLockService +func (mr *MockTransactionMockRecorder) RLockService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RLockService", reflect.TypeOf((*MockTransaction)(nil).RLockService), name, namespace) +} + +// BatchRLockServices mocks base method +func (m *MockTransaction) BatchRLockServices(ids map[string]bool) (map[string]bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BatchRLockServices", ids) + ret0, _ := ret[0].(map[string]bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BatchRLockServices indicates an expected call of BatchRLockServices +func (mr *MockTransactionMockRecorder) BatchRLockServices(ids interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchRLockServices", reflect.TypeOf((*MockTransaction)(nil).BatchRLockServices), ids) +} + +// DeleteService mocks base method +func (m *MockTransaction) DeleteService(name, namespace string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteService", name, namespace) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteService indicates an expected call of DeleteService +func (mr *MockTransactionMockRecorder) DeleteService(name, namespace interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteService", reflect.TypeOf((*MockTransaction)(nil).DeleteService), name, namespace) +} + +// DeleteAliasWithSourceID mocks base method +func (m *MockTransaction) DeleteAliasWithSourceID(sourceServiceID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteAliasWithSourceID", sourceServiceID) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteAliasWithSourceID indicates an expected call of DeleteAliasWithSourceID +func (mr *MockTransactionMockRecorder) DeleteAliasWithSourceID(sourceServiceID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAliasWithSourceID", reflect.TypeOf((*MockTransaction)(nil).DeleteAliasWithSourceID), sourceServiceID) +} diff --git a/store/sql.go b/store/sql.go new file mode 100644 index 000000000..5edf12a4d --- /dev/null +++ b/store/sql.go @@ -0,0 +1,24 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 store + +// 用于通过服务实例查询服务的参数 +type InstanceArgs struct { + Hosts []string + Ports []uint32 +} diff --git a/store/status.go b/store/status.go new file mode 100644 index 000000000..3dede6884 --- /dev/null +++ b/store/status.go @@ -0,0 +1,109 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 store + +import ( + "strings" +) + +// 存储层的状态码 +type StatusCode uint32 + +// 状态码定义 +const ( + Ok StatusCode = iota + EmptyParamsErr // 参数不合法 + OutOfRangeErr // 数据不合法,比如越级了,超过了字段大小 + DataConflictErr // 数据冲突,在并发更新metadata的时候可能会出现 + NotFoundNamespace // 找不到namespace,service插入依赖namespace是否存在 + NotFoundService // 找不到service,在instance等资源插入的时候依赖service是否存在 + NotFoundMasterConfig // 在标记规则前,需要保证规则的master版本存在 + NotFoundTagConfigOrService // 在发布规则前,需要保证规则已标记且服务存在 + ExistReleasedConfig // 在删除规则时,发现存在已经发布的版本 + AffectedRowsNotMatch // 操作的行数与预期不符合 + DuplicateEntryErr // 主键重复,一般是资源已存在了,提醒用户资源存在 + ForeignKeyErr // 外键错误,一般是操作不当导致的 + DeadlockErr // 数据库死锁 + NotFoundMeshOrService // 网格订阅服务的时候,网格或者服务不存在 + NotFoundMeshService // 更新订阅服务的时候,订阅服务不存在 + Unknown +) + +// 普通error转StatusError +func Error(err error) error { + if err == nil { + return nil + } + + // 已经是StatusError了,不再转换 + if _, ok := err.(*StatusError); ok { + return err + } + + s := &StatusError{message: err.Error()} + if strings.Contains(s.message, "Data too long") { + s.code = OutOfRangeErr + } else if strings.Contains(s.message, "Duplicate entry") { + s.code = DuplicateEntryErr + } else if strings.Contains(s.message, "a foreign key constraint fails") { + s.code = ForeignKeyErr + } else if strings.Contains(s.message, "Deadlock") { + s.code = DeadlockErr + } else { + s.code = Unknown + } + + return s +} + +// 根据code和message创建StatusError +func NewStatusError(code StatusCode, message string) error { + return &StatusError{ + code: code, + message: message, + } +} + +// 根据error接口,获取状态码 +func Code(err error) StatusCode { + if err == nil { + return Ok + } + + se, ok := err.(*StatusError) + if ok { + return se.code + } + + return Unknown +} + +// 包括了状态码的error接口 +type StatusError struct { + code StatusCode + message string +} + +// 实现error接口 +func (s *StatusError) Error() string { + if s == nil { + return "" + } + + return s.message +} diff --git a/store/store.go b/store/store.go new file mode 100644 index 000000000..9d71fe615 --- /dev/null +++ b/store/store.go @@ -0,0 +1,89 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 store + +import ( + "errors" + "fmt" + "os" + "sync" +) + +/** + * @brief Store的通用配置 + */ +type Config struct { + Name string + Option map[string]interface{} +} + +var ( + StoreSlots = make(map[string]Store) + once = &sync.Once{} + config = &Config{} +) + +/** + * @brief 注册一个新的Store + */ +func RegisterStore(s Store) error { + name := s.Name() + if _, ok := StoreSlots[name]; ok { + return errors.New("Store name is exist") + } + + StoreSlots[name] = s + return nil +} + +/** + * @brief 获取Store + */ +func GetStore() (Store, error) { + name := config.Name + if name == "" { + return nil, errors.New("Store Name is empty") + } + + store, ok := StoreSlots[name] + if !ok { + return nil, errors.New("No such name Store") + } + + initialize(store) + return store, nil +} + +/** + * @brief 设置store的conf + */ +func SetStoreConfig(conf *Config) { + config = conf +} + +/** + * @brief 包裹了初始化函数,在GetStore的时候会在自动调用,全局初始化一次 + */ +func initialize(s Store) { + once.Do(func() { + if err := s.Initialize(config); err != nil { + fmt.Printf("err: %s", err.Error()) + os.Exit(-1) + } + }) +} diff --git a/test/circuitbreaker_config_test.go b/test/circuitbreaker_config_test.go new file mode 100644 index 000000000..7a29af7e3 --- /dev/null +++ b/test/circuitbreaker_config_test.go @@ -0,0 +1,164 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "github.com/polarismesh/polaris-server/test/http" + "github.com/polarismesh/polaris-server/test/resource" + "testing" +) + +/** + * @brief 测试熔断规则 + */ +func TestCircuitBreaker(t *testing.T) { + t.Log("test circuit breaker interface") + + client := http.NewClient(httpserverAddress, httpserverVersion) + + //------------------------------------------------------- + namespaces := resource.CreateNamespaces() + // 创建命名空间 + ret, err := client.CreateNamespaces(namespaces) + if err != nil { + t.Fatalf("create namespaces fail,error: %s", err.Error()) + } + for index, item := range ret.GetResponses() { + namespaces[index].Token = item.GetNamespace().GetToken() + } + t.Log("create namepsaces success") + + circuitBreakers := resource.CreateCircuitBreakers(namespaces[0]) + + // 创建熔断规则 + ret, err = client.CreateCircuitBreakers(circuitBreakers) + if err != nil { + t.Fatalf("create circuit breakers fail, err: %s", err.Error()) + } + for index, item := range ret.GetResponses() { + circuitBreakers[index].Id = item.GetCircuitBreaker().GetId() + circuitBreakers[index].Version = item.GetCircuitBreaker().GetVersion() + circuitBreakers[index].Token = item.GetCircuitBreaker().GetToken() + } + t.Log("create rate limits success") + + // 查询熔断规则:根据id和version + if err = client.GetCircuitBreaker(circuitBreakers[0], circuitBreakers[0]); err != nil { + t.Fatalf("get circuit breaker fail, err : %s", err.Error()) + } + t.Log("get circuit breaker success") + + // 更新熔断规则 + resource.UpdateCircuitBreakers(circuitBreakers) + + if err := client.UpdateCircuitBreakers(circuitBreakers); err != nil { + t.Fatalf("update circuit breakers fail, err: %s", err.Error()) + } + t.Log("update circuit breaker success") + + // 查询熔断规则:根据id和version + if err = client.GetCircuitBreaker(circuitBreakers[0], circuitBreakers[0]); err != nil { + t.Fatalf("get circuit breaker fail, err : %s", err.Error()) + } + t.Log("get circuit breaker success") + + // 创建熔断规则版本 + newCircuitBreakers := resource.CreateCircuitBreakerVersions(circuitBreakers) + + ret, err = client.CreateCircuitBreakerVersions(newCircuitBreakers) + if err != nil { + t.Fatalf("create circuit breaker versions fail, err: %s", err.Error()) + } + for index, item := range ret.GetResponses() { + newCircuitBreakers[index].Id = item.GetCircuitBreaker().GetId() + } + t.Log("create circuit breaker versions success") + + // 查询熔断规则:根据id和version + if err = client.GetCircuitBreaker(circuitBreakers[0], newCircuitBreakers[0]); err != nil { + t.Fatalf("get circuit breaker fail, err: %s", err.Error()) + } + t.Log("get circuit breaker success") + + // 查询熔断规则的所有版本 + if err := client.GetCircuitBreakerVersions(newCircuitBreakers[0]); err != nil { + t.Fatalf("get circuit breaker version fail, err: %s", err.Error()) + } + + //------------------------------------------------------- + services := resource.CreateServices(namespaces[0]) + // 创建服务 + ret, err = client.CreateServices(services) + if err != nil { + t.Fatalf("create services fail,error: %s", err.Error()) + } + for index, item := range ret.GetResponses() { + services[index].Token = item.GetService().GetToken() + } + t.Log("create services success") + //------------------------------------------------------- + + // 发布熔断规则 + configReleases := resource.CreateConfigRelease(services, newCircuitBreakers) + if err := client.ReleaseCircuitBreakers(configReleases); err != nil { + t.Fatalf("release config release fail,error: %s", err.Error()) + } + t.Log("release circuit breakers success") + + // 查询熔断规则的已发布版本及绑定服务 + if err := client.GetCircuitBreakersRelease(newCircuitBreakers[0], services[0]); err != nil { + t.Fatalf("get circuit breakers tag err: %s", err.Error()) + } + t.Log("get circuit breakers tag success") + + // 查询服务绑定的熔断规则 + if err := client.GetCircuitBreakerByService(services[0], circuitBreakers[0], newCircuitBreakers[0]); err != nil { + t.Fatalf("get circuit breaker by service err: %s", err.Error()) + } + t.Log("get circuit breaker by service success") + + // 解绑熔断规则 + if err := client.UnbindCircuitBreakers(configReleases); err != nil { + t.Fatalf("unbind config release fail,error: %s", err.Error()) + } + t.Log("unbind circuit breakers success") + + // 删除熔断规则 + circuitBreakers = append(circuitBreakers, newCircuitBreakers...) + err = client.DeleteCircuitBreakers(circuitBreakers) + if err != nil { + t.Fatalf("delete rate limits fail,error: %s", err.Error()) + } + t.Log("delete rate limits success") + + //------------------------------------------------------- + + // 删除服务 + err = client.DeleteServices(services) + if err != nil { + t.Fatalf("delete services fail,error: %s", err.Error()) + } + t.Log("delete services success") + + // 删除命名空间 + err = client.DeleteNamespaces(namespaces) + if err != nil { + t.Fatalf("delete namespaces fail,error: %s", err.Error()) + } + t.Log("delete namepsaces success") +} diff --git a/test/client_grpc_test.go b/test/client_grpc_test.go new file mode 100644 index 000000000..f597276f1 --- /dev/null +++ b/test/client_grpc_test.go @@ -0,0 +1,124 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "testing" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/test/grpc" + "github.com/polarismesh/polaris-server/test/http" + "github.com/polarismesh/polaris-server/test/resource" +) + +/** + * @brief 测试客户端GRPC接口 + */ +func TestClientGRPC(t *testing.T) { + t.Log("test client grpc interface") + + clientHTTP := http.NewClient(httpserverAddress, httpserverVersion) + + namespaces := resource.CreateNamespaces() + services := resource.CreateServices(namespaces[0]) + + // 创建命名空间 + ret, err := clientHTTP.CreateNamespaces(namespaces) + if err != nil { + t.Fatalf("create namespaces fail") + } + for index, item := range ret.GetResponses() { + namespaces[index].Token = item.GetNamespace().GetToken() + } + t.Log("create namespaces success") + + // 创建服务 + ret, err = clientHTTP.CreateServices(services) + if err != nil { + t.Fatalf("create services fail") + } + for index, item := range ret.GetResponses() { + services[index].Token = item.GetService().GetToken() + } + t.Log("create services success") + + //------------------------------------------------------- + + clientGRPC, err := grpc.NewClient(grpcserverAddress) + if err != nil { + t.Fatalf("new grpc client fail") + } + defer clientGRPC.Close() + + client := resource.CreateClient(0) + instances := resource.CreateInstances(services[0]) + + // 上报客户端信息 + err = clientGRPC.ReportClient(client) + if err != nil { + t.Fatalf("report client fail") + } + t.Log("report client success") + + // 注册服务实例 + err = clientGRPC.RegisterInstance(instances[0]) + if err != nil { + t.Fatalf("register instance fail") + } + t.Log("register instance success") + + time.Sleep(3 * time.Second) // 延迟 + + // 上报心跳 + err = clientGRPC.Heartbeat(instances[0]) + if err != nil { + t.Fatalf("instance heartbeat fail") + } + t.Log("instance heartbeat success") + + time.Sleep(3 * time.Second) // 延迟 + + // 查询服务实例 + err = clientGRPC.Discover(api.DiscoverRequest_INSTANCE, services[0]) + if err != nil { + t.Fatalf("discover instance fail") + } + t.Log("discover instance success") + + // 反注册服务实例 + err = clientGRPC.DeregisterInstance(instances[0]) + if err != nil { + t.Fatalf("deregister instance fail") + } + t.Log("deregister instance success") + + // 删除服务 + err = clientHTTP.DeleteServices(services) + if err != nil { + t.Fatalf("delete services fail") + } + t.Log("delete services success") + + // 删除命名空间 + err = clientHTTP.DeleteNamespaces(namespaces) + if err != nil { + t.Fatalf("delete namespaces fail") + } + t.Log("delete namespaces success") +} diff --git a/test/common_test.go b/test/common_test.go new file mode 100644 index 000000000..5245bd624 --- /dev/null +++ b/test/common_test.go @@ -0,0 +1,24 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +const ( + httpserverAddress = "127.0.0.1:8090" + httpserverVersion = "v1" + grpcserverAddress = "127.0.0.1:8091" +) diff --git a/test/grpc/client.go b/test/grpc/client.go new file mode 100644 index 000000000..c912a56e1 --- /dev/null +++ b/test/grpc/client.go @@ -0,0 +1,59 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 grpc + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "google.golang.org/grpc" +) + +/** + * @brief 创建GRPC客户端 + */ +func NewClient(address string) (*Client, error) { + fmt.Printf("\nnew grpc client\n") + + conn, err := grpc.Dial(address, grpc.WithInsecure()) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + client := &Client{ + Conn: conn, + Worker: api.NewPolarisGRPCClient(conn), + } + + return client, nil +} + +/** + * @brief GRPC客户端 + */ +type Client struct { + Conn *grpc.ClientConn + Worker api.PolarisGRPCClient +} + +/** + * @brief 关闭连接 + */ +func (c *Client) Close() { + c.Conn.Close() +} diff --git a/test/grpc/discover.go b/test/grpc/discover.go new file mode 100644 index 000000000..49ca2cf72 --- /dev/null +++ b/test/grpc/discover.go @@ -0,0 +1,113 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 grpc + +import ( + "context" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/naming" + "google.golang.org/grpc/metadata" + "io" + "time" +) + +/** + * @brief 统一发现函数 + */ +func (c *Client) Discover(drt api.DiscoverRequest_DiscoverRequestType, service *api.Service) error { + fmt.Printf("\ndiscover\n") + + md := metadata.Pairs("request-id", naming.NewUUID()) + ctx := metadata.NewOutgoingContext(context.Background(), md) + + ctx, cancel := context.WithTimeout(ctx, time.Second) + defer cancel() + + worker, err := c.Worker.Discover(ctx) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + request := &api.DiscoverRequest{ + Type: drt, + Service: service, + } + if err := worker.Send(request); err != nil { + fmt.Printf("%v\n", err) + return err + } + worker.CloseSend() + + for { + rsp, err := worker.Recv() + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + + fmt.Printf("%v\n", rsp) + } +} + +/** + * @brief 统一发现函数 + */ +func (c *Client) DiscoverRequest(request *api.DiscoverRequest) (*api.DiscoverResponse, error) { + fmt.Printf("\ndiscover\n") + + md := metadata.Pairs("request-id", naming.NewUUID()) + ctx := metadata.NewOutgoingContext(context.Background(), md) + + ctx, cancel := context.WithTimeout(ctx, time.Second) + defer cancel() + + worker, err := c.Worker.Discover(ctx) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + if err := worker.Send(request); err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + worker.CloseSend() + + var latestResp *api.DiscoverResponse + + for { + rsp, err := worker.Recv() + if err != nil { + if err == io.EOF { + return latestResp, nil + } + + fmt.Printf("%v\n", err) + } + + fmt.Printf("%v\n", rsp) + latestResp = rsp + } + +} \ No newline at end of file diff --git a/test/grpc/heartbeat.go b/test/grpc/heartbeat.go new file mode 100644 index 000000000..d1cf49b37 --- /dev/null +++ b/test/grpc/heartbeat.go @@ -0,0 +1,51 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 grpc + +import ( + "context" + "fmt" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/naming" + "google.golang.org/grpc/metadata" +) + +/** + * @brief 上报心跳 + */ +func (c *Client) Heartbeat(instance *api.Instance) error { + fmt.Printf("\nheartbeat\n") + + md := metadata.Pairs("request-id", naming.NewUUID()) + ctx := metadata.NewOutgoingContext(context.Background(), md) + + ctx, cancel := context.WithTimeout(ctx, time.Second) + defer cancel() + + rsp, err := c.Worker.Heartbeat(ctx, instance) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + fmt.Printf("%v\n", rsp) + + return nil +} diff --git a/test/grpc/register.go b/test/grpc/register.go new file mode 100644 index 000000000..866d13f80 --- /dev/null +++ b/test/grpc/register.go @@ -0,0 +1,74 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 grpc + +import ( + "context" + "fmt" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/naming" + "google.golang.org/grpc/metadata" +) + +/** + * @brief 注册服务实例 + */ +func (c *Client) RegisterInstance(instance *api.Instance) error { + fmt.Printf("\nregister instance\n") + + md := metadata.Pairs("request-id", naming.NewUUID()) + ctx := metadata.NewOutgoingContext(context.Background(), md) + + ctx, cancel := context.WithTimeout(ctx, time.Second) + defer cancel() + + rsp, err := c.Worker.RegisterInstance(ctx, instance) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + fmt.Printf("%v\n", rsp) + + return nil +} + +/** + * @brief 反注册服务实例 + */ +func (c *Client) DeregisterInstance(instance *api.Instance) error { + fmt.Printf("\nderegister instance\n") + + md := metadata.Pairs("request-id", naming.NewUUID()) + ctx := metadata.NewOutgoingContext(context.Background(), md) + + ctx, cancel := context.WithTimeout(ctx, time.Second) + defer cancel() + + rsp, err := c.Worker.DeregisterInstance(ctx, instance) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + fmt.Printf("%v\n", rsp) + + return nil +} diff --git a/test/grpc/report_client.go b/test/grpc/report_client.go new file mode 100644 index 000000000..3e5d70640 --- /dev/null +++ b/test/grpc/report_client.go @@ -0,0 +1,51 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 grpc + +import ( + "context" + "fmt" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/naming" + "google.golang.org/grpc/metadata" +) + +/** + * @brief 上报客户端信息 + */ +func (c *Client) ReportClient(client *api.Client) error { + fmt.Printf("\nreport client\n") + + md := metadata.Pairs("request-id", naming.NewUUID()) + ctx := metadata.NewOutgoingContext(context.Background(), md) + + ctx, cancel := context.WithTimeout(ctx, time.Second) + defer cancel() + + rsp, err := c.Worker.ReportClient(ctx, client) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + fmt.Printf("%v\n", rsp) + + return nil +} diff --git a/test/http/circuitbreaker_config.go b/test/http/circuitbreaker_config.go new file mode 100644 index 000000000..ae8b48e1c --- /dev/null +++ b/test/http/circuitbreaker_config.go @@ -0,0 +1,590 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 http + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/jsonpb" + "io" +) + +/** + * @brief 熔断规则数组转JSON + */ +func JSONFromCircuitBreakers(circuitBreakers []*api.CircuitBreaker) (*bytes.Buffer, error) { + m := jsonpb.Marshaler{Indent: " "} + + buffer := bytes.NewBuffer([]byte{}) + + buffer.Write([]byte("[")) + for index, circuitBreaker := range circuitBreakers { + if index > 0 { + buffer.Write([]byte(",\n")) + } + err := m.Marshal(buffer, circuitBreaker) + if err != nil { + return nil, err + } + } + + buffer.Write([]byte("]")) + return buffer, nil +} + +/** + * @brief 发布规则转JSON + */ +func JSONFromConfigReleases(configReleases []*api.ConfigRelease) (*bytes.Buffer, error) { + m := jsonpb.Marshaler{Indent: " "} + + buffer := bytes.NewBuffer([]byte{}) + + buffer.Write([]byte("[")) + for index, configRelease := range configReleases { + if index > 0 { + buffer.Write([]byte(",\n")) + } + err := m.Marshal(buffer, configRelease) + if err != nil { + return nil, err + } + } + + buffer.Write([]byte("]")) + return buffer, nil +} + +/** + * @brief 创建熔断规则 + */ +func (c *Client) CreateCircuitBreakers(circuitBreakers []*api.CircuitBreaker) (*api.BatchWriteResponse, error) { + fmt.Printf("\ncreate circuit breakers\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreakers", c.Address, c.Version) + + body, err := JSONFromCircuitBreakers(circuitBreakers) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + ret, err := GetBatchWriteResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + return checkCreateCircuitBreakersResponse(ret, circuitBreakers) +} + +/** + * @brief 创建熔断规则版本 + */ +func (c *Client) CreateCircuitBreakerVersions(circuitBreakers []*api.CircuitBreaker) (*api.BatchWriteResponse, error) { + fmt.Printf("\ncreate circuit breaker versions\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreakers/version", c.Address, c.Version) + body, err := JSONFromCircuitBreakers(circuitBreakers) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + ret, err := GetBatchWriteResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + return checkCreateCircuitBreakersResponse(ret, circuitBreakers) +} + +/** + * @breif 更新熔断规则 + */ +func (c *Client) UpdateCircuitBreakers(circuitBreakers []*api.CircuitBreaker) error { + fmt.Printf("\nupdate circuit breakers\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreakers", c.Address, c.Version) + + body, err := JSONFromCircuitBreakers(circuitBreakers) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("PUT", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + return nil +} + +/** + * @brief 删除熔断规则 + */ +func (c *Client) DeleteCircuitBreakers(circuitBreakers []*api.CircuitBreaker) error { + fmt.Printf("\ndelete circuit breakers\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreakers/delete", c.Address, c.Version) + + body, err := JSONFromCircuitBreakers(circuitBreakers) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + return nil +} + +/** + * @brief 发布熔断规则 + */ +func (c *Client) ReleaseCircuitBreakers(configReleases []*api.ConfigRelease) error { + fmt.Printf("\nrelease circuit breakers\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreakers/release", c.Address, c.Version) + + body, err := JSONFromConfigReleases(configReleases) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + return nil +} + +/** + * @brief 解绑熔断规则 + */ +func (c *Client) UnbindCircuitBreakers(configReleases []*api.ConfigRelease) error { + fmt.Printf("\nunbind circuit breakers\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreakers/unbind", c.Address, c.Version) + + body, err := JSONFromConfigReleases(configReleases) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + return nil +} + +/** + * @brief 根据id和version查询熔断规则 + */ +func (c *Client) GetCircuitBreaker(masterCircuitBreaker, circuitBreaker *api.CircuitBreaker) error { + fmt.Printf("\nget circuit breaker by id and version\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreaker", c.Address, c.Version) + + params := map[string][]interface{}{ + "id": {circuitBreaker.GetId().GetValue()}, + "version": {circuitBreaker.GetVersion().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return errors.New("invalid batch code") + } + + size := 1 + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(size) { + return errors.New("invalid batch amount") + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(size) { + return errors.New("invalid batch size") + } + + item := ret.GetConfigWithServices() + if item == nil || len(item) != size { + return errors.New("invalid batch circuit breakers") + } + + if item[0].GetCircuitBreaker() == nil { + return errors.New("invalid circuit breakers") + } + + if result, err := compareCircuitBreaker(circuitBreaker, masterCircuitBreaker, item[0].GetCircuitBreaker()); !result { + return err + } + + return nil +} + +/** + * @brief 查询熔断规则的已发布规则及服务 + */ +func (c *Client) GetCircuitBreakersRelease(circuitBreaker *api.CircuitBreaker, correctService *api.Service) error { + fmt.Printf("\nget circuit breaker release\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreakers/release", c.Address, c.Version) + + params := map[string][]interface{}{ + "id": {circuitBreaker.GetId().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return errors.New("invalid batch code") + } + + size := 1 + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(size) { + return errors.New("invalid batch amount") + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(size) { + return errors.New("invalid batch size") + } + + configWithServices := ret.GetConfigWithServices() + if configWithServices == nil || len(configWithServices) != size { + return errors.New("invalid batch circuit breakers") + } + + if configWithServices[0].GetCircuitBreaker() == nil { + return errors.New("invalid circuit breakers") + } + + rule := configWithServices[0].GetCircuitBreaker() + + if circuitBreaker.GetId().GetValue() != rule.GetId().GetValue() || + circuitBreaker.GetVersion().GetValue() != rule.GetVersion().GetValue() { + return errors.New("error circuit breaker id or version") + } + + if configWithServices[0].GetServices() == nil || configWithServices[0].GetServices()[0] == nil { + return errors.New("invalid services") + } + + service := configWithServices[0].GetServices()[0] + serviceName := service.GetName().GetValue() + namespaceName := service.GetNamespace().GetValue() + + if serviceName != correctService.GetName().GetValue() || + namespaceName != correctService.GetNamespace().GetValue() { + return errors.New("invalid service name or namespace") + } + + return nil +} + +/** + * @brief 查询熔断规则所有版本 + */ +func (c *Client) GetCircuitBreakerVersions(circuitBreaker *api.CircuitBreaker) error { + fmt.Printf("\nget circuit breaker versions\n") + + url := fmt.Sprintf("http://%v/naming/%v/circuitbreaker/versions", c.Address, c.Version) + + params := map[string][]interface{}{ + "id": {circuitBreaker.GetId().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return errors.New("invalid batch code") + } + + size := 2 + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(size) { + return errors.New("invalid batch amount") + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(size) { + return errors.New("invalid batch size") + } + + configWithServices := ret.GetConfigWithServices() + if configWithServices == nil || len(configWithServices) != size { + return errors.New("invalid batch circuit breakers") + } + + versions := make([]string, 0, size) + for _, item := range configWithServices { + cb := item.GetCircuitBreaker() + if cb.GetId().GetValue() != circuitBreaker.GetId().GetValue() { + return errors.New("invalid circuit breaker id") + } + versions = append(versions, cb.GetVersion().GetValue()) + } + + correctVersions := map[string]bool{ + circuitBreaker.GetVersion().GetValue(): true, + "master": true, + } + + for _, version := range versions { + if _, ok := correctVersions[version]; !ok { + return errors.New("invalid circuit breaker version") + } + } + + return nil +} + +/** + * @brief 查询服务绑定的熔断规则 + */ +func (c *Client) GetCircuitBreakerByService(service *api.Service, masterCircuitBreaker, + circuitBreaker *api.CircuitBreaker) error { + fmt.Printf("\nget circuit breaker by service\n") + + url := fmt.Sprintf("http://%v/naming/%v/service/circuitbreaker", c.Address, c.Version) + + params := map[string][]interface{}{ + "service": {service.GetName().GetValue()}, + "namespace": {service.GetNamespace().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return errors.New("invalid batch code") + } + + size := 1 + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(size) { + return errors.New("invalid batch amount") + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(size) { + return errors.New("invalid batch size") + } + + configWithServices := ret.GetConfigWithServices() + if configWithServices == nil || len(configWithServices) != size { + return errors.New("invalid batch circuit breakers") + } + + rule := configWithServices[0].GetCircuitBreaker() + if rule == nil { + return errors.New("invalid circuit breaker") + } + + if result, err := compareCircuitBreaker(circuitBreaker, masterCircuitBreaker, rule); !result { + return err + } + + return nil +} + +/** + * @brief 检查创建熔断规则的回复 + */ +func checkCreateCircuitBreakersResponse(ret *api.BatchWriteResponse, circuitBreakers []*api.CircuitBreaker) ( + *api.BatchWriteResponse, error) { + switch { + case ret.GetCode().GetValue() != api.ExecuteSuccess: + return nil, errors.New("invalid batch code") + case ret.GetSize().GetValue() != uint32(len(circuitBreakers)): + return nil, errors.New("invalid batch size") + case len(ret.GetResponses()) != len(circuitBreakers): + return nil, errors.New("invalid batch response") + } + + for index, item := range ret.GetResponses() { + if item.GetCode().GetValue() != api.ExecuteSuccess { + return nil, errors.New("invalid code") + } + circuitBreaker := item.GetCircuitBreaker() + if circuitBreaker == nil { + return nil, errors.New("empty circuit breaker") + } + + if result, err := compareCircuitBreaker(circuitBreakers[index], circuitBreakers[index], circuitBreaker); !result { + return nil, err + } else { + return ret, nil + } + } + return ret, nil +} + +/** + * @brief 比较circuit breaker是否相等 + */ +func compareCircuitBreaker(correctItem, correctMaster *api.CircuitBreaker, item *api.CircuitBreaker) (bool, error) { + switch { + case item.GetId() == nil || item.GetId().GetValue() == "": + return false, errors.New("error id") + case item.GetVersion() == nil || item.GetVersion().GetValue() == "": + return false, errors.New("error version") + case correctMaster.GetName().GetValue() != item.GetName().GetValue(): + return false, errors.New("error name") + case correctMaster.GetNamespace().GetValue() != item.GetNamespace().GetValue(): + return false, errors.New("error namespace") + case correctMaster.GetOwners().GetValue() != item.GetOwners().GetValue(): + return false, errors.New("error owners") + case correctMaster.GetComment().GetValue() != item.GetComment().GetValue(): + return false, errors.New("error comment") + case correctMaster.GetBusiness().GetValue() != item.GetBusiness().GetValue(): + return false, errors.New("error business") + case correctMaster.GetDepartment().GetValue() != item.GetDepartment().GetValue(): + return false, errors.New("error department") + default: + break + } + + correctInbounds, err := json.Marshal(correctItem.GetInbounds()) + if err != nil { + panic(err) + } + inbounds, err := json.Marshal(item.GetInbounds()) + if err != nil { + panic(err) + } + if string(correctInbounds) != string(inbounds) { + return false, errors.New("error inbounds") + } + + correctOutbounds, err := json.Marshal(correctItem.GetOutbounds()) + if err != nil { + panic(err) + } + outbounds, err := json.Marshal(item.GetOutbounds()) + if err != nil { + panic(err) + } + if string(correctOutbounds) != string(outbounds) { + return false, errors.New("error inbounds") + } + return true, nil +} diff --git a/test/http/client.go b/test/http/client.go new file mode 100644 index 000000000..d6d74acee --- /dev/null +++ b/test/http/client.go @@ -0,0 +1,188 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 http + +import ( + "bytes" + "errors" + "fmt" + "io" + "net/http" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/jsonpb" +) + +/** + * @brief 创建HTTP客户端 + */ +func NewClient(address, version string) *Client { + return &Client{ + Address: address, + Version: version, + Worker: &http.Client{}, + } +} + +/** + * @brief HTTP客户端 + */ +type Client struct { + Address string + Version string + Worker *http.Client +} + +/** + * @brief HTTP Post/Put + */ +func (c *Client) SendRequest(method string, url string, body *bytes.Buffer) (*http.Response, error) { + var request *http.Request + var err error + + if body == nil { + request, err = http.NewRequest(method, url, nil) + } else { + request, err = http.NewRequest(method, url, body) + } + + if err != nil { + return nil, err + } + + request.Header.Add("Content-Type", "application/json") + request.Header.Add("Request-Id", "test") + + response, err := c.Worker.Do(request) + if err != nil { + return nil, err + } + + return response, nil +} + +/** + * @brief 生成GET请求的完整URL + */ +func (c *Client) CompleteURL(url string, params map[string][]interface{}) string { + count := 1 + url += "?" + + num := 0 + for _, param := range params { + num += len(param) + } + + for index, param := range params { + for _, item := range param { + url += fmt.Sprintf("%v=%v", index, item) + if count != num { + url += "&" + } + count++ + } + } + return url +} + +/** + * @brief 获取BatchWriteResponse + */ +func GetBatchWriteResponse(response *http.Response) (*api.BatchWriteResponse, error) { + // 打印回复 + fmt.Printf("http code: %v\n", response.StatusCode) + + ret := &api.BatchWriteResponse{} + checkErr := jsonpb.Unmarshal(response.Body, ret) + if checkErr == nil { + fmt.Printf("%+v\n", ret) + } else { + fmt.Printf("%v\n", checkErr) + } + + // 检查回复 + if response.StatusCode != 200 { + return nil, errors.New("invalid http code") + } + + if checkErr == nil { + return ret, nil + } else if checkErr == io.EOF { + return nil, io.EOF + } else { + return nil, errors.New("body decode failed") + } +} + +/** + * @brief 获取BatchQueryResponse + */ +func GetBatchQueryResponse(response *http.Response) (*api.BatchQueryResponse, error) { + // 打印回复 + fmt.Printf("http code: %v\n", response.StatusCode) + + ret := &api.BatchQueryResponse{} + checkErr := jsonpb.Unmarshal(response.Body, ret) + if checkErr == nil { + fmt.Printf("%+v\n", ret) + } else { + fmt.Printf("%v\n", checkErr) + } + + // 检查回复 + if response.StatusCode != 200 { + return nil, errors.New("invalid http code") + } + + if checkErr == nil { + return ret, nil + } else if checkErr == io.EOF { + return nil, io.EOF + } else { + return nil, errors.New("body decode failed") + } +} + +/** + * @brief 获取SimpleResponse + */ +func GetSimpleResponse(response *http.Response) (*api.Response, error) { + // 打印回复 + fmt.Printf("http code: %v\n", response.StatusCode) + + ret := &api.Response{} + checkErr := jsonpb.Unmarshal(response.Body, ret) + if checkErr == nil { + fmt.Printf("%+v\n", ret) + } else { + fmt.Printf("%v\n", checkErr) + } + + // 检查回复 + if response.StatusCode != 200 { + return nil, errors.New("invalid http code") + } + + if checkErr == nil { + return ret, nil + } else if checkErr == io.EOF { + return nil, io.EOF + } else { + return nil, errors.New("body decode failed") + } +} diff --git a/test/http/instance.go b/test/http/instance.go new file mode 100644 index 000000000..609675488 --- /dev/null +++ b/test/http/instance.go @@ -0,0 +1,307 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 http + +import ( + "bytes" + "errors" + "fmt" + "io" + "reflect" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/jsonpb" +) + +/** + * @brief 实例数组转JSON + */ +func JSONFromInstances(instances []*api.Instance) (*bytes.Buffer, error) { + m := jsonpb.Marshaler{Indent: " "} + + buffer := bytes.NewBuffer([]byte{}) + + buffer.Write([]byte("[")) + for index, instance := range instances { + if index > 0 { + buffer.Write([]byte(",\n")) + } + err := m.Marshal(buffer, instance) + if err != nil { + return nil, err + } + } + + buffer.Write([]byte("]")) + return buffer, nil +} + +/** + * @brief 创建实例 + */ +func (c *Client) CreateInstances(instances []*api.Instance) (*api.BatchWriteResponse, error) { + fmt.Printf("\ncreate instances\n") + + url := fmt.Sprintf("http://%v/naming/%v/instances", c.Address, c.Version) + + body, err := JSONFromInstances(instances) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + ret, err := GetBatchWriteResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + return checkCreateInstancesResponse(ret, instances) +} + +/** + * @brief 删除实例 + */ +func (c *Client) DeleteInstances(instances []*api.Instance) error { + fmt.Printf("\ndelete instances\n") + + url := fmt.Sprintf("http://%v/naming/%v/instances/delete", c.Address, c.Version) + + body, err := JSONFromInstances(instances) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + + return nil +} + +/** + * @brief 更新实例 + */ +func (c *Client) UpdateInstances(instances []*api.Instance) error { + fmt.Printf("\nupdate instances\n") + + url := fmt.Sprintf("http://%v/naming/%v/instances", c.Address, c.Version) + + body, err := JSONFromInstances(instances) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("PUT", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + + return nil +} + +/** + * @brief 查询实例 + */ +func (c *Client) GetInstances(instances []*api.Instance) error { + fmt.Printf("\nget instances\n") + + url := fmt.Sprintf("http://%v/naming/%v/instances", c.Address, c.Version) + + params := map[string][]interface{}{ + "service": {instances[0].GetService().GetValue()}, + "namespace" :{instances[0].GetNamespace().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return errors.New("invalid batch code") + } + + instancesSize := len(instances) + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(instancesSize) { + return errors.New("invalid batch amount") + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(instancesSize) { + return errors.New("invalid batch size") + } + + collection := make(map[string]*api.Instance) + for _, instance := range instances { + collection[instance.GetId().GetValue()] = instance + } + + items := ret.GetInstances() + if items == nil || len(items) != instancesSize { + return errors.New("invalid batch instances") + } + + for _, item := range items { + if correctItem, ok := collection[item.GetId().GetValue()]; ok { + if result := compareInstance(correctItem, item); !result { + return fmt.Errorf("invalid instance %v", item.GetId().GetValue()) + } + } else { + return fmt.Errorf("instance %v not found", item.GetId().GetValue()) + } + } + return nil +} + +/** + * @brief 检查创建实例的回复 + */ +func checkCreateInstancesResponse(ret *api.BatchWriteResponse, instances []*api.Instance) ( + *api.BatchWriteResponse, error) { + + switch { + case ret.GetCode().GetValue() != api.ExecuteSuccess: + return nil, errors.New("invalid batch code") + case ret.GetSize().GetValue() != uint32(len(instances)): + return nil, errors.New("invalid batch size") + case len(ret.GetResponses()) != len(instances): + return nil, errors.New("invalid batch response") + } + + return ret, checkInstancesResponseEntry(ret, instances) +} + +/** + * @brief 检查创建实例每个实例的信息 + */ +func checkInstancesResponseEntry(ret *api.BatchWriteResponse, instances []*api.Instance) error { + items := ret.GetResponses() + for index, item := range items { + instance := item.GetInstance() + switch { + case item.GetCode().GetValue() != api.ExecuteSuccess: + return errors.New("invalid code") + case item.GetInstance() == nil: + return errors.New("empty instance") + case item.GetInstance().GetId().GetValue() == "": + return errors.New("invalid instance id") + case instance.GetService().GetValue() != instances[index].GetService().GetValue(): + return errors.New("invalid service") + case instance.GetNamespace().GetValue() != instances[index].GetNamespace().GetValue(): + return errors.New("invalid namespace") + case instance.GetHost().GetValue() != instances[index].GetHost().GetValue(): + return errors.New("invalid host") + case instance.GetPort().GetValue() != instances[index].GetPort().GetValue(): + return errors.New("invalid port") + } + } + + return nil +} + +/** + * @brief 比较instance是否相等 + */ +func compareInstance(correctItem *api.Instance, item *api.Instance) bool { + // #lizard forgives + correctID := correctItem.GetId().GetValue() + correctService := correctItem.GetService().GetValue() + correctNamespace := correctItem.GetNamespace().GetValue() + correctHost := correctItem.GetHost().GetValue() + correctPort := correctItem.GetPort().GetValue() + correctProtocol := correctItem.GetProtocol().GetValue() + correctVersion := correctItem.GetVersion().GetValue() + correctPriority := correctItem.GetPriority().GetValue() + correctWeight := correctItem.GetWeight().GetValue() + correctHealthType := correctItem.GetHealthCheck().GetType() + correctHealthTTL := correctItem.GetHealthCheck().GetHeartbeat().GetTtl().GetValue() + correctHealthy := correctItem.GetHealthy().GetValue() + correctIsolate := correctItem.GetIsolate().GetValue() + correctMeta := correctItem.GetMetadata() + correctLogicSet := correctItem.GetLogicSet().GetValue() + /*correctCmdbRegion := correctItem.GetLocation().GetRegion().GetValue() + correctCmdbZone := correctItem.GetLocation().GetZone().GetValue() + correctCmdbCampus := correctItem.GetLocation().GetCampus().GetValue()*/ + + id := item.GetId().GetValue() + service := item.GetService().GetValue() + namespace := item.GetNamespace().GetValue() + host := item.GetHost().GetValue() + port := item.GetPort().GetValue() + protocol := item.GetProtocol().GetValue() + version := item.GetVersion().GetValue() + priority := item.GetPriority().GetValue() + weight := item.GetWeight().GetValue() + healthType := item.GetHealthCheck().GetType() + healthTTL := item.GetHealthCheck().GetHeartbeat().GetTtl().GetValue() + healthy := item.GetHealthy().GetValue() + isolate := item.GetIsolate().GetValue() + meta := item.GetMetadata() + logicSet := item.GetLogicSet().GetValue() + /*cmdbRegion := item.GetLocation().GetRegion().GetValue() + cmdbZone := item.GetLocation().GetZone().GetValue() + cmdbCampus := item.GetLocation().GetCampus().GetValue()*/ + + if correctID == id && correctService == service && correctNamespace == namespace && correctHost == host && + correctPort == port && correctProtocol == protocol && correctVersion == version && + correctPriority == priority && correctWeight == weight && correctHealthType == healthType && + correctHealthTTL == healthTTL && correctHealthy == healthy && correctIsolate == isolate && + reflect.DeepEqual(correctMeta, meta) && correctLogicSet == logicSet { + return true + } + return false +} diff --git a/test/http/namespace.go b/test/http/namespace.go new file mode 100644 index 000000000..483c80242 --- /dev/null +++ b/test/http/namespace.go @@ -0,0 +1,266 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 http + +import ( + "bytes" + "errors" + "fmt" + "io" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/jsonpb" +) + +/** + * @brief 命名空间数组转JSON + */ +func JSONFromNamespaces(namespaces []*api.Namespace) (*bytes.Buffer, error) { + m := jsonpb.Marshaler{Indent: " "} + + buffer := bytes.NewBuffer([]byte{}) + + buffer.Write([]byte("[")) + for index, namespace := range namespaces { + if index > 0 { + buffer.Write([]byte(",\n")) + } + err := m.Marshal(buffer, namespace) + if err != nil { + return nil, err + } + } + + buffer.Write([]byte("]")) + + return buffer, nil +} + +/** + * @brief 创建命名空间 + */ +func (c *Client) CreateNamespaces(namespaces []*api.Namespace) (*api.BatchWriteResponse, error) { + fmt.Printf("\ncreate namespaces\n") + + url := fmt.Sprintf("http://%v/naming/%v/namespaces", c.Address, c.Version) + + body, err := JSONFromNamespaces(namespaces) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + ret, err := GetBatchWriteResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + return checkCreateNamespacesResponse(ret, namespaces) +} + +/** + * @brief 删除命名空间 + */ +func (c *Client) DeleteNamespaces(namespaces []*api.Namespace) error { + fmt.Printf("\ndelete namespaces\n") + + url := fmt.Sprintf("http://%v/naming/%v/namespaces/delete", c.Address, c.Version) + + body, err := JSONFromNamespaces(namespaces) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + + return nil +} + +/** + * @brief 更新命名空间 + */ +func (c *Client) UpdateNamesapces(namespaces []*api.Namespace) error { + fmt.Printf("\nupdate namespaces\n") + + url := fmt.Sprintf("http://%v/naming/%v/namespaces", c.Address, c.Version) + + body, err := JSONFromNamespaces(namespaces) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("PUT", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + + return nil +} + +/** + * @brief 查询命名空间 + */ +func (c *Client) GetNamespaces(namespaces []*api.Namespace) error { + fmt.Printf("\nget namespaces\n") + + url := fmt.Sprintf("http://%v/naming/%v/namespaces", c.Address, c.Version) + + params := map[string][]interface{}{ + "name": {namespaces[0].GetName().GetValue(), namespaces[1].GetName().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return errors.New("invalid batch code") + } + + namespacesSize := len(namespaces) + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(namespacesSize) { + return errors.New("invalid batch amount") + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(namespacesSize) { + return errors.New("invalid batch size") + } + + collection := make(map[string]*api.Namespace) + for _, namespace := range namespaces { + collection[namespace.GetName().GetValue()] = namespace + } + + items := ret.GetNamespaces() + if items == nil || len(items) != namespacesSize { + return errors.New("invalid batch namespaces") + } + + for _, item := range items { + if correctItem, ok := collection[item.GetName().GetValue()]; ok { + if result := compareNamespace(correctItem, item); !result { + return errors.New("invalid namespace") + } + } else { + return errors.New("invalid namespace") + } + } + return nil +} + +/** + * @brief 检查创建命名空间的回复 + */ +func checkCreateNamespacesResponse(ret *api.BatchWriteResponse, namespaces []*api.Namespace) ( + *api.BatchWriteResponse, error) { + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return nil, errors.New("invalid batch code") + } + + namespacesSize := len(namespaces) + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(namespacesSize) { + return nil, errors.New("invalid batch size") + } + + items := ret.GetResponses() + if items == nil || len(items) != namespacesSize { + return nil, errors.New("invalid batch response") + } + + for index, item := range items { + if item.GetCode() == nil || item.GetCode().GetValue() != api.ExecuteSuccess { + return nil, errors.New("invalid code") + } + + namespace := item.GetNamespace() + if namespace == nil { + return nil, errors.New("empty namespace") + } + + name := namespaces[index].GetName().GetValue() + if namespace.GetName() == nil || namespace.GetName().GetValue() != name { + return nil, errors.New("invalid namespace name") + } + + if namespace.GetToken() == nil || namespace.GetToken().GetValue() == "" { + return nil, errors.New("invalid namespace token") + } + } + return ret, nil +} + +/** + * @brief 比较namespace是否相等 + */ +func compareNamespace(correctItem *api.Namespace, item *api.Namespace) bool { + correctName := correctItem.GetName().GetValue() + correctComment := correctItem.GetComment().GetValue() + correctOwners := correctItem.GetOwners().GetValue() + + name := item.GetName().GetValue() + comment := item.GetComment().GetValue() + owners := item.GetOwners().GetValue() + + if correctName == name && correctComment == comment && correctOwners == owners { + return true + } + return false +} diff --git a/test/http/platform.go b/test/http/platform.go new file mode 100644 index 000000000..5e976e584 --- /dev/null +++ b/test/http/platform.go @@ -0,0 +1,265 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 http + +import ( + "bytes" + "errors" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/jsonpb" + "io" +) + +/** + * @brief 平台数据转JSON + */ +func JSONFromPlatforms(platforms []*api.Platform) (*bytes.Buffer, error) { + m := jsonpb.Marshaler{Indent: " "} + + buffer := bytes.NewBuffer([]byte{}) + + buffer.Write([]byte("[")) + for index, service := range platforms { + if index > 0 { + buffer.Write([]byte(",\n")) + } + err := m.Marshal(buffer, service) + if err != nil { + return nil, err + } + } + + buffer.Write([]byte("]")) + return buffer, nil +} + +/** + * @brief 创建平台 + */ +func (c *Client) CreatePlatforms(platforms []*api.Platform) (*api.BatchWriteResponse, error) { + fmt.Printf("\ncreate platforms\n") + + url := fmt.Sprintf("http://%v/naming/%v/platforms", c.Address, c.Version) + + body, err := JSONFromPlatforms(platforms) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + ret, err := GetBatchWriteResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + return checkCreatePlatformsResponse(ret, platforms) +} + +/** + * @brief 删除平台 + */ +func (c *Client) DeletePlatforms(platforms []*api.Platform) error { + fmt.Printf("\ndelete platforms\n") + + url := fmt.Sprintf("http://%v/naming/%v/platforms/delete", c.Address, c.Version) + + body, err := JSONFromPlatforms(platforms) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + return nil +} + +/** + * @brief 更新平台 + */ +func (c *Client) UpdatePlatforms(platforms []*api.Platform) error { + fmt.Printf("\nupdate platforms\n") + + url := fmt.Sprintf("http://%v/naming/%v/platforms", c.Address, c.Version) + + body, err := JSONFromPlatforms(platforms) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("PUT", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + return nil +} + +/** + * @brief 查询平台 + */ +func (c *Client) GetPlatforms(platforms []*api.Platform) error { + fmt.Printf("\nget platforms\n") + + url := fmt.Sprintf("http://%v/naming/%v/platforms", c.Address, c.Version) + + params := map[string][]interface{}{ + "name": {platforms[0].GetName().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return fmt.Errorf("invalid batch code: %v", ret.GetCode().GetValue()) + } + + platformsSize := len(platforms) + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(platformsSize) { + return fmt.Errorf("invalid batch amount: %d, expect amount is %d", + ret.GetAmount().GetValue(), platformsSize) + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(platformsSize) { + return fmt.Errorf("invalid batch size: %d, expect size is %d", + ret.GetSize().GetValue(), platformsSize) + } + + collection := make(map[string]*api.Platform) + for _, platform := range platforms { + collection[platform.GetId().GetValue()] = platform + } + + items := ret.GetPlatforms() + if items == nil || len(items) != platformsSize { + return errors.New("invalid batch platforms") + } + + for _, item := range items { + if correctItem, ok := collection[item.GetId().GetValue()]; ok { + if result, err := comparePlatform(correctItem, item); !result { + return fmt.Errorf("invalid platform. id is %s, err is %s", item.GetId().GetValue(), err.Error()) + } + } else { + return fmt.Errorf("platform not found. id is %s", item.GetId().GetValue()) + } + } + return nil +} + +/** + * @brief 检查创建平台的回复 + */ +func checkCreatePlatformsResponse(ret *api.BatchWriteResponse, platforms []*api.Platform) ( + *api.BatchWriteResponse, error) { + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return nil, fmt.Errorf("invalid batch code: %v", ret.GetCode().GetValue()) + } + + platformsSize := len(platforms) + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(platformsSize) { + return nil, fmt.Errorf("invalid batch size, expect size is %d, actual size is %d", + platformsSize, ret.GetSize().GetValue()) + } + + items := ret.GetResponses() + if items == nil || len(items) != platformsSize { + return nil, errors.New("invalid batch response") + } + + for index, item := range items { + if item.GetCode() == nil || item.GetCode().GetValue() != api.ExecuteSuccess { + return nil, fmt.Errorf("invalid code: %v", item.GetCode().GetValue()) + } + + platform := item.GetPlatform() + if platform == nil { + return nil, errors.New("empty platform") + } + if _, err := comparePlatform(platforms[index], platform); err != nil { + return nil, fmt.Errorf("invalid platform. id is %s, err is %s", + platform.GetId().GetValue(), err.Error()) + } + } + return ret, nil +} + +/** + * @brief 比较平台信息是否相等 + */ +func comparePlatform(correctItem *api.Platform, item *api.Platform) (bool, error) { + switch { + case correctItem.GetId().GetValue() != item.GetId().GetValue(): + return false, errors.New("error id") + case correctItem.GetName().GetValue() != item.GetName().GetValue(): + return false, errors.New("error name") + case correctItem.GetDomain().GetValue() != item.GetDomain().GetValue(): + return false, errors.New("error domain") + case correctItem.GetQps().GetValue() != item.GetQps().GetValue(): + return false, errors.New("error qps") + case correctItem.GetOwner().GetValue() != item.GetOwner().GetValue(): + return false, errors.New("error owner") + case correctItem.GetDepartment().GetValue() != item.GetDepartment().GetValue(): + return false, errors.New("error department") + case correctItem.GetComment().GetValue() != item.GetComment().GetValue(): + return false, errors.New("error comment") + } + return true, nil +} diff --git a/test/http/ratelimit_config.go b/test/http/ratelimit_config.go new file mode 100644 index 000000000..e564c8711 --- /dev/null +++ b/test/http/ratelimit_config.go @@ -0,0 +1,307 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 http + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/jsonpb" + "io" +) + +/** + * @brief 限流规则数组转JSON + */ +func JSONFromRateLimits(rateLimits []*api.Rule) (*bytes.Buffer, error) { + m := jsonpb.Marshaler{Indent: " "} + + buffer := bytes.NewBuffer([]byte{}) + + buffer.Write([]byte("[")) + for index, rateLimit := range rateLimits { + if index > 0 { + buffer.Write([]byte(",\n")) + } + err := m.Marshal(buffer, rateLimit) + if err != nil { + return nil, err + } + } + + buffer.Write([]byte("]")) + return buffer, nil +} + +/** + * @brief 创建限流规则 + */ +func (c *Client) CreateRateLimits(rateLimits []*api.Rule) (*api.BatchWriteResponse, error) { + fmt.Printf("\ncreate rate limits\n") + + url := fmt.Sprintf("http://%v/naming/%v/ratelimits", c.Address, c.Version) + + body, err := JSONFromRateLimits(rateLimits) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + ret, err := GetBatchWriteResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + return checkCreateRateLimitsResponse(ret, rateLimits) +} + +/** + * @brief 删除限流规则 + */ +func (c *Client) DeleteRateLimits(rateLimits []*api.Rule) error { + fmt.Printf("\ndelete rate limits\n") + + url := fmt.Sprintf("http://%v/naming/%v/ratelimits/delete", c.Address, c.Version) + + body, err := JSONFromRateLimits(rateLimits) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + return nil +} + +/** + * @brief 更新限流规则 + */ +func (c *Client) UpdateRateLimits(rateLimits []*api.Rule) error { + fmt.Printf("\nupdate rate limits\n") + + url := fmt.Sprintf("http://%v/naming/%v/ratelimits", c.Address, c.Version) + + body, err := JSONFromRateLimits(rateLimits) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("PUT", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + return nil +} + +/** + * @brief 查询限流规则 + */ +func (c *Client) GetRateLimits(rateLimits []*api.Rule) error { + fmt.Printf("\nget rate limits\n") + + url := fmt.Sprintf("http://%v/naming/%v/ratelimits", c.Address, c.Version) + + params := map[string][]interface{}{ + "namespace": {rateLimits[0].GetNamespace().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return errors.New("invalid batch code") + } + + rateLimitsSize := len(rateLimits) + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(rateLimitsSize) { + return errors.New("invalid batch amount") + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(rateLimitsSize) { + return errors.New("invalid batch size") + } + + collection := make(map[string]*api.Rule) + for _, rateLimit := range rateLimits { + collection[rateLimit.GetService().GetValue()] = rateLimit + } + + items := ret.GetRateLimits() + if items == nil || len(items) != rateLimitsSize { + return errors.New("invalid batch rate limits") + } + + for _, item := range items { + if correctItem, ok := collection[item.GetService().GetValue()]; ok { + if result, err := compareRateLimit(correctItem, item); !result { + return fmt.Errorf("invalid rate limit. namespace is %v, service is %v, err is %s", + item.GetNamespace().GetValue(), item.GetService().GetValue(), err.Error()) + } + } else { + return fmt.Errorf("rate limit not found. namespace is %v, service is %v", + item.GetNamespace().GetValue(), item.GetService().GetValue()) + } + } + return nil +} + +/** + * @brief 检查创建限流规则的回复 + */ +func checkCreateRateLimitsResponse(ret *api.BatchWriteResponse, rateLimits []*api.Rule) ( + *api.BatchWriteResponse, error) { + switch { + case ret.GetCode().GetValue() != api.ExecuteSuccess: + return nil, errors.New("invalid batch code") + case ret.GetSize().GetValue() != uint32(len(rateLimits)): + return nil, errors.New("invalid batch size") + case len(ret.GetResponses()) != len(rateLimits): + return nil, errors.New("invalid batch response") + } + + for index, item := range ret.GetResponses() { + if item.GetCode().GetValue() != api.ExecuteSuccess { + return nil, errors.New("invalid code") + } + rateLimit := item.GetRateLimit() + if rateLimit == nil { + return nil, errors.New("empty rate limit") + } + if result, err := compareRateLimit(rateLimits[index], rateLimit); !result { + return nil, err + } + } + return ret, nil +} + +/** + * @brief 比较rate limit是否相等 + */ +func compareRateLimit(correctItem *api.Rule, item *api.Rule) (bool, error) { + switch { + case (correctItem.GetId().GetValue()) != "" && (correctItem.GetId().GetValue() != item.GetId().GetValue()): + return false, errors.New("invalid id") + case correctItem.GetService().GetValue() != item.GetService().GetValue(): + return false, errors.New("error service") + case correctItem.GetNamespace().GetValue() != item.GetNamespace().GetValue(): + return false, errors.New("error namespace") + case correctItem.GetPriority().GetValue() != item.GetPriority().GetValue(): + return false, errors.New("invalid priority") + case correctItem.GetResource() != item.GetResource(): + return false, errors.New("invalid resource") + case correctItem.GetType() != item.GetType(): + return false, errors.New("error type") + case correctItem.GetAction().GetValue() != item.GetAction().GetValue(): + return false, errors.New("error action") + case correctItem.GetDisable().GetValue() != item.GetDisable().GetValue(): + return false, errors.New("error disable") + case correctItem.GetRegexCombine().GetValue() != item.GetRegexCombine().GetValue(): + return false, errors.New("error regex combine") + case correctItem.GetAmountMode() != item.GetAmountMode(): + return false, errors.New("error amount mode") + case correctItem.GetFailover() != item.GetFailover(): + return false, errors.New("error fail over") + default: + break + } + + if equal, err := checkField(correctItem.GetSubset(), item.GetSubset(), "subset"); !equal { + return equal, err + } + if equal, err := checkField(correctItem.GetLabels(), item.GetLabels(), "labels"); !equal { + return equal, err + } + + if equal, err := checkField(correctItem.GetAmounts(), item.GetAmounts(), "amounts"); !equal { + return equal, err + } + + if equal, err := checkField(correctItem.GetReport(), item.GetReport(), "report"); !equal { + return equal, err + } + + if equal, err := checkField(correctItem.GetAdjuster(), item.GetAdjuster(), "adjuster"); !equal { + return equal, err + } + + return checkField(correctItem.GetCluster(), item.GetCluster(), "cluster") +} + +/** + * @brief 检查字段是否一致 + */ +func checkField(correctItem, actualItem interface{}, name string) (bool, error) { + expect, err := json.Marshal(correctItem) + if err != nil { + panic(err) + } + actual, err := json.Marshal(actualItem) + if err != nil { + panic(err) + } + + if string(expect) != string(actual) { + return false, fmt.Errorf("error %s", name) + } + return true, nil +} diff --git a/test/http/service.go b/test/http/service.go new file mode 100644 index 000000000..134586d86 --- /dev/null +++ b/test/http/service.go @@ -0,0 +1,291 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 http + +import ( + "bytes" + "errors" + "fmt" + "io" + "reflect" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/golang/protobuf/jsonpb" +) + +/** + * @brief 服务数组转JSON + */ +func JSONFromServices(services []*api.Service) (*bytes.Buffer, error) { + m := jsonpb.Marshaler{Indent: " "} + + buffer := bytes.NewBuffer([]byte{}) + + buffer.Write([]byte("[")) + for index, service := range services { + if index > 0 { + buffer.Write([]byte(",\n")) + } + err := m.Marshal(buffer, service) + if err != nil { + return nil, err + } + } + + buffer.Write([]byte("]")) + return buffer, nil +} + +/** + * @brief 创建服务 + */ +func (c *Client) CreateServices(services []*api.Service) (*api.BatchWriteResponse, error) { + fmt.Printf("\ncreate services\n") + + url := fmt.Sprintf("http://%v/naming/%v/services", c.Address, c.Version) + + body, err := JSONFromServices(services) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + ret, err := GetBatchWriteResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return nil, err + } + + return checkCreateServicesResponse(ret, services) +} + +/** + * @brief 删除服务 + */ +func (c *Client) DeleteServices(services []*api.Service) error { + fmt.Printf("\ndelete services\n") + + url := fmt.Sprintf("http://%v/naming/%v/services/delete", c.Address, c.Version) + + body, err := JSONFromServices(services) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("POST", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + + return nil +} + +/** + * @brief 更新服务 + */ +func (c *Client) UpdateServices(services []*api.Service) error { + fmt.Printf("\nupdate services\n") + + url := fmt.Sprintf("http://%v/naming/%v/services", c.Address, c.Version) + + body, err := JSONFromServices(services) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + response, err := c.SendRequest("PUT", url, body) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + _, err = GetBatchWriteResponse(response) + if err != nil { + if err == io.EOF { + return nil + } + + fmt.Printf("%v\n", err) + return err + } + + return nil +} + +/** + * @brief 查询服务 + */ +func (c *Client) GetServices(services []*api.Service) error { + fmt.Printf("\nget services\n") + + url := fmt.Sprintf("http://%v/naming/%v/services", c.Address, c.Version) + + params := map[string][]interface{}{ + "namespace": {services[0].GetNamespace().GetValue()}, + } + + url = c.CompleteURL(url, params) + response, err := c.SendRequest("GET", url, nil) + if err != nil { + return err + } + + ret, err := GetBatchQueryResponse(response) + if err != nil { + fmt.Printf("%v\n", err) + return err + } + + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return errors.New("invalid batch code") + } + + servicesSize := len(services) + + if ret.GetAmount() == nil || ret.GetAmount().GetValue() != uint32(servicesSize) { + return errors.New("invalid batch amount") + } + + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(servicesSize) { + return errors.New("invalid batch size") + } + + collection := make(map[string]*api.Service) + for _, service := range services { + collection[service.GetName().GetValue()] = service + } + + items := ret.GetServices() + if items == nil || len(items) != servicesSize { + return errors.New("invalid batch services") + } + + for _, item := range items { + if correctItem, ok := collection[item.GetName().GetValue()]; ok { + if result := compareService(correctItem, item); !result { + return errors.New("invalid service") + } + } else { + return errors.New("invalid service") + } + } + return nil +} + +/** + * @brief 检查创建服务的回复 + */ +func checkCreateServicesResponse(ret *api.BatchWriteResponse, services []*api.Service) ( + // #lizard forgives + *api.BatchWriteResponse, error) { + if ret.GetCode() == nil || ret.GetCode().GetValue() != api.ExecuteSuccess { + return nil, errors.New("invalid batch code") + } + + servicesSize := len(services) + if ret.GetSize() == nil || ret.GetSize().GetValue() != uint32(servicesSize) { + return nil, errors.New("invalid batch size") + } + + items := ret.GetResponses() + if items == nil || len(items) != servicesSize { + return nil, errors.New("invalid batch response") + } + + for index, item := range items { + if item.GetCode() == nil || item.GetCode().GetValue() != api.ExecuteSuccess { + return nil, errors.New("invalid code") + } + + service := item.GetService() + if service == nil { + return nil, errors.New("empty service") + } + + name := services[index].GetName().GetValue() + if service.GetName() == nil || service.GetName().GetValue() != name { + return nil, errors.New("invalid service name") + } + + namespace := services[index].GetNamespace().GetValue() + if service.GetNamespace() == nil || service.GetNamespace().GetValue() != namespace { + return nil, errors.New("invalid namespace") + } + + if service.GetToken() == nil || service.GetToken().GetValue() == "" { + return nil, errors.New("invalid service token") + } + } + return ret, nil +} + +/** + * @brief 比较service是否相等 + */ +func compareService(correctItem *api.Service, item *api.Service) bool { + correctName := correctItem.GetName().GetValue() + correctNamespace := correctItem.GetNamespace().GetValue() + correctMeta := correctItem.GetMetadata() + correctPorts := correctItem.GetPorts().GetValue() + correctBusiness := correctItem.GetBusiness().GetValue() + correctDepartment := correctItem.GetDepartment().GetValue() + correctCmdbMod1 := correctItem.GetCmdbMod1().GetValue() + correctCmdbMod2 := correctItem.GetCmdbMod2().GetValue() + correctCmdbMod3 := correctItem.GetCmdbMod3().GetValue() + correctComment := correctItem.GetComment().GetValue() + correctOwners := correctItem.GetOwners().GetValue() + + name := item.GetName().GetValue() + namespace := item.GetNamespace().GetValue() + meta := item.GetMetadata() + ports := item.GetPorts().GetValue() + business := item.GetBusiness().GetValue() + department := item.GetDepartment().GetValue() + cmdbMod1 := item.GetCmdbMod1().GetValue() + cmdbMod2 := item.GetCmdbMod2().GetValue() + cmdbMod3 := item.GetCmdbMod3().GetValue() + comment := item.GetComment().GetValue() + owners := item.GetOwners().GetValue() + + if correctName == name && correctNamespace == namespace && reflect.DeepEqual(correctMeta, meta) && + correctPorts == ports && correctBusiness == business && correctDepartment == department && + correctCmdbMod1 == cmdbMod1 && correctCmdbMod2 == cmdbMod2 && correctCmdbMod3 == cmdbMod3 && + correctComment == comment && correctOwners == owners { + return true + } + return false +} diff --git a/test/instance_test.go b/test/instance_test.go new file mode 100644 index 000000000..8d6c8b9e9 --- /dev/null +++ b/test/instance_test.go @@ -0,0 +1,117 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "testing" + + "github.com/polarismesh/polaris-server/test/http" + "github.com/polarismesh/polaris-server/test/resource" +) + +/** + * @brief 测试增删改查服务实例 + */ +func TestInstance(t *testing.T) { + t.Log("test instance interface") + + client := http.NewClient(httpserverAddress, httpserverVersion) + + namespaces := resource.CreateNamespaces() + services := resource.CreateServices(namespaces[0]) + + // 创建命名空间 + ret, err := client.CreateNamespaces(namespaces) + if err != nil { + t.Fatalf("create namespaces fail") + } + for index, item := range ret.GetResponses() { + namespaces[index].Token = item.GetNamespace().GetToken() + } + t.Log("create namepsaces success") + + // 创建服务 + ret, err = client.CreateServices(services) + if err != nil { + t.Fatalf("create services fail") + } + for index, item := range ret.GetResponses() { + services[index].Token = item.GetService().GetToken() + } + t.Log("create services success") + + //------------------------------------------------------- + + instances := resource.CreateInstances(services[0]) + + // 创建实例 + ret, err = client.CreateInstances(instances) + if err != nil { + t.Fatalf("create instances fail") + } + for index, item := range ret.GetResponses() { + instances[index].Id = item.GetInstance().GetId() + } + t.Log("create instances success") + + // 查询实例 + err = client.GetInstances(instances) + if err != nil { + t.Fatalf("get instances fail") + } + t.Log("get instances success") + + // 更新实例 + resource.UpdateInstances(instances) + + err = client.UpdateInstances(instances) + if err != nil { + t.Fatalf("update instances fail") + } + t.Log("update instances success") + + // 查询实例 + err = client.GetInstances(instances) + if err != nil { + t.Fatalf("get instances fail") + } + t.Log("get instances success") + + // 删除实例 + err = client.DeleteInstances(instances) + if err != nil { + t.Fatalf("delete instances fail") + } + t.Log("delete instances success") + + //------------------------------------------------------- + + // 删除服务 + err = client.DeleteServices(services) + if err != nil { + t.Fatalf("delete services fail") + } + t.Log("delete services success") + + // 删除命名空间 + err = client.DeleteNamespaces(namespaces) + if err != nil { + t.Fatalf("delete namespaces fail") + } + t.Log("delete namepsaces success") +} diff --git a/test/namespace_test.go b/test/namespace_test.go new file mode 100644 index 000000000..b2b7597fc --- /dev/null +++ b/test/namespace_test.go @@ -0,0 +1,76 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "testing" + + "github.com/polarismesh/polaris-server/test/http" + "github.com/polarismesh/polaris-server/test/resource" +) + +/** + * @brief 测试增删改查命名空间 + */ +func TestNamespace(t *testing.T) { + t.Log("test namepsace interface") + + client := http.NewClient(httpserverAddress, httpserverVersion) + + namespaces := resource.CreateNamespaces() + + // 创建命名空间 + ret, err := client.CreateNamespaces(namespaces) + if err != nil { + t.Fatalf("create namespaces fail") + } + for index, item := range ret.GetResponses() { + namespaces[index].Token = item.GetNamespace().GetToken() + } + t.Log("create namepsaces success") + + // 查询命名空间 + err = client.GetNamespaces(namespaces) + if err != nil { + t.Fatalf("get namespaces fail") + } + t.Log("get namespaces success") + + // 更新命名空间 + resource.UpdateNamespaces(namespaces) + + err = client.UpdateNamesapces(namespaces) + if err != nil { + t.Fatalf("update namespaces fail") + } + t.Log("update namespaces success") + + // 查询命名空间 + err = client.GetNamespaces(namespaces) + if err != nil { + t.Fatalf("get namespaces fail") + } + t.Log("get namespaces success") + + // 删除命名空间 + err = client.DeleteNamespaces(namespaces) + if err != nil { + t.Fatalf("delete namespaces fail") + } + t.Log("delete namepsaces success") +} diff --git a/test/platform_test.go b/test/platform_test.go new file mode 100644 index 000000000..cf58cefdc --- /dev/null +++ b/test/platform_test.go @@ -0,0 +1,75 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "github.com/polarismesh/polaris-server/test/http" + "github.com/polarismesh/polaris-server/test/resource" + "testing" +) + +/** + * @brief 测试增删改查平台 + */ +func TestPlatform(t *testing.T) { + t.Log("test platform interface") + + client := http.NewClient(httpserverAddress, httpserverVersion) + + platforms := resource.CreatePlatforms() + + // 创建平台 + ret, err := client.CreatePlatforms(platforms) + if err != nil { + t.Fatalf("create platforms fail: %s", err.Error()) + } + for index, item := range ret.GetResponses() { + platforms[index].Token = item.GetPlatform().GetToken() + } + t.Log("create platforms success") + + // 查询平台 + err = client.GetPlatforms(platforms) + if err != nil { + t.Fatalf("get platforms fail: %s", err.Error()) + } + t.Log("get platforms success") + + // 更新平台 + resource.UpdatePlatforms(platforms) + + err = client.UpdatePlatforms(platforms) + if err != nil { + t.Fatalf("update platforms fail: %s", err.Error()) + } + t.Log("update platforms success") + + // 查询平台 + err = client.GetPlatforms(platforms) + if err != nil { + t.Fatalf("get platforms fail: %s", err.Error()) + } + t.Log("get platforms success") + + // 删除平台 + err = client.DeletePlatforms(platforms) + if err != nil { + t.Fatalf("delete platforms fail: %s", err.Error()) + } + t.Log("delete platforms success") +} diff --git a/test/ratelimit_config_test.go b/test/ratelimit_config_test.go new file mode 100644 index 000000000..7c46bd106 --- /dev/null +++ b/test/ratelimit_config_test.go @@ -0,0 +1,120 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "github.com/polarismesh/polaris-server/test/http" + "github.com/polarismesh/polaris-server/test/resource" + "testing" +) + +/** + * @brief 测试增删改查限流规则 + */ + +/** + * @brief 测试增删改查限流规则 + */ +func TestRateLimit(t *testing.T) { + t.Log("test rate limit interface") + + client := http.NewClient(httpserverAddress, httpserverVersion) + + namespaces := resource.CreateNamespaces() + services := resource.CreateServices(namespaces[0]) + + // 创建命名空间 + ret, err := client.CreateNamespaces(namespaces) + if err != nil { + t.Fatalf("create namespaces fail, err is %s", err.Error()) + } + for index, item := range ret.GetResponses() { + namespaces[index].Token = item.GetNamespace().GetToken() + } + t.Log("create namepsaces success") + + // 创建服务 + ret, err = client.CreateServices(services) + if err != nil { + t.Fatalf("create services fail, err is %s", err.Error()) + } + for index, item := range ret.GetResponses() { + services[index].Token = item.GetService().GetToken() + } + t.Log("create services success") + + //------------------------------------------------------- + + rateLimits := resource.CreateRateLimits(services) + + // 创建限流规则 + ret, err = client.CreateRateLimits(rateLimits) + if err != nil { + t.Fatalf("create rate limits fail, err is %s", err.Error()) + } + for index, item := range ret.GetResponses() { + rateLimits[index].Id = item.GetRateLimit().GetId() + } + t.Log("create rate limits success") + + // 查询限流规则 + err = client.GetRateLimits(rateLimits) + if err != nil { + t.Fatalf("get rate limits fail, err is %s", err.Error()) + } + t.Log("get rate limits success") + + // 更新限流规则 + resource.UpdateRateLimits(rateLimits) + + err = client.UpdateRateLimits(rateLimits) + if err != nil { + t.Fatalf("update rate limits fail, err is %s", err.Error()) + } + t.Log("update rate limits success") + + // 查询限流规则 + err = client.GetRateLimits(rateLimits) + if err != nil { + t.Fatalf("get rate limits fail, err is %s", err.Error()) + } + t.Log("get rate limits success") + + // 删除限流规则 + err = client.DeleteRateLimits(rateLimits) + if err != nil { + t.Fatalf("delete rate limits fail, err is %s", err.Error()) + } + t.Log("delete rate limits success") + + //------------------------------------------------------- + + // 删除服务 + err = client.DeleteServices(services) + if err != nil { + t.Fatalf("delete services fail, err is %s", err.Error()) + } + t.Log("delete services success") + + // 删除命名空间 + err = client.DeleteNamespaces(namespaces) + if err != nil { + t.Fatalf("delete namespaces fail, err is %s", err.Error()) + } + t.Log("delete namespaces success") +} diff --git a/test/resource/circuitbreaker_config.go b/test/resource/circuitbreaker_config.go new file mode 100644 index 000000000..9218753cb --- /dev/null +++ b/test/resource/circuitbreaker_config.go @@ -0,0 +1,165 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 resource + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/golang/protobuf/ptypes/duration" +) + +const ( + circuitBreakerName = "test-name-%v" + circuitBreakerNamespace = "test-namespace-%v" +) + +/** + * @brief 创建测试熔断规则 + */ +func CreateCircuitBreakers(namespace *api.Namespace) []*api.CircuitBreaker { + var circuitBreakers []*api.CircuitBreaker + for index := 0; index < 2; index++ { + circuitBreaker := &api.CircuitBreaker{ + Name: utils.NewStringValue(fmt.Sprintf(circuitBreakerName, index)), + Namespace: namespace.GetName(), + Business: utils.NewStringValue("test"), + Department: utils.NewStringValue("test"), + Owners: utils.NewStringValue("test"), + Comment: utils.NewStringValue("test"), + } + ruleNum := 2 + // 填充source规则 + sources := make([]*api.SourceMatcher, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + source := &api.SourceMatcher{ + Service: utils.NewStringValue(fmt.Sprintf("service-test-%d", i)), + Namespace: utils.NewStringValue(fmt.Sprintf("namespace-test-%d", i)), + Labels: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", i): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i)), + }, + fmt.Sprintf("name-%d", i+1): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i+1)), + }, + }, + } + sources = append(sources, source) + } + + // 填充destination规则 + destinations := make([]*api.DestinationSet, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + destination := &api.DestinationSet{ + Service: utils.NewStringValue(fmt.Sprintf("service-test-%d", i)), + Namespace: utils.NewStringValue(fmt.Sprintf("namespace-test-%d", i)), + Metadata: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", i): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i)), + }, + fmt.Sprintf("name-%d", i+1): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", i+1)), + }, + }, + Resource: 0, + Type: 0, + Scope: 0, + MetricWindow: &duration.Duration{ + Seconds: int64(i), + }, + MetricPrecision: utils.NewUInt32Value(uint32(i)), + UpdateInterval: &duration.Duration{ + Seconds: int64(i), + }, + } + destinations = append(destinations, destination) + } + + // 填充inbound规则 + inbounds := make([]*api.CbRule, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + inbound := &api.CbRule{ + Sources: sources, + Destinations: destinations, + } + inbounds = append(inbounds, inbound) + } + // 填充outbound规则 + outbounds := make([]*api.CbRule, 0, ruleNum) + for i := 0; i < ruleNum; i++ { + outbound := &api.CbRule{ + Sources: sources, + Destinations: destinations, + } + outbounds = append(outbounds, outbound) + } + circuitBreaker.Inbounds = inbounds + circuitBreaker.Outbounds = outbounds + circuitBreakers = append(circuitBreakers, circuitBreaker) + } + return circuitBreakers +} + +/** + * @brief 更新测试熔断规则 + */ +func UpdateCircuitBreakers(circuitBreakers []*api.CircuitBreaker) { + for _, item := range circuitBreakers { + item.Inbounds = []*api.CbRule{} + item.Outbounds = []*api.CbRule{} + } +} + +/** + * @brief 创建熔断规则版本 + */ +func CreateCircuitBreakerVersions(circuitBreakers []*api.CircuitBreaker) []*api.CircuitBreaker { + var newCircuitBreakers []*api.CircuitBreaker + + for index, item := range circuitBreakers { + newCircuitBreaker := &api.CircuitBreaker{ + Id: item.GetId(), + Name: item.GetName(), + Namespace: item.GetNamespace(), + Token: item.GetToken(), + Version: utils.NewStringValue(fmt.Sprintf("test-version-%d", index)), + } + newCircuitBreakers = append(newCircuitBreakers, newCircuitBreaker) + } + + return newCircuitBreakers +} + +/** + * @brief 创建测试发布熔断规则 + */ +func CreateConfigRelease(services []*api.Service, circuitBreakers []*api.CircuitBreaker) []*api.ConfigRelease { + var configReleases []*api.ConfigRelease + for index := 0; index < 2; index++ { + configRelease := &api.ConfigRelease{ + Service: services[index], + CircuitBreaker: circuitBreakers[index], + } + configReleases = append(configReleases, configRelease) + } + return configReleases +} diff --git a/test/resource/client.go b/test/resource/client.go new file mode 100644 index 000000000..cc802ffa0 --- /dev/null +++ b/test/resource/client.go @@ -0,0 +1,40 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 resource + +import ( + "fmt" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" +) + +const ( + clientHost = "%v.%v.%v.%v" +) + +/** + * @brief 创建客户端 + */ +func CreateClient(index uint32) *api.Client { + return &api.Client{ + Host: utils.NewStringValue(fmt.Sprintf(clientHost, index, index, index, index)), + Type: api.Client_SDK, + Version: utils.NewStringValue("8.8.8"), + } +} diff --git a/test/resource/instance.go b/test/resource/instance.go new file mode 100644 index 000000000..86ef58393 --- /dev/null +++ b/test/resource/instance.go @@ -0,0 +1,77 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 resource + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" +) + +const ( + instanceHost = "%v.%v.%v.%v" +) + +/** + * @brief 创建测试服务实例 + */ +func CreateInstances(service *api.Service) []*api.Instance { + var instances []*api.Instance + for index := 0; index < 2; index++ { + host := fmt.Sprintf(instanceHost, index, index, index, index) + + instance := &api.Instance{ + Service: service.GetName(), + Namespace: service.GetNamespace(), + Host: utils.NewStringValue(host), + Port: utils.NewUInt32Value(8), + Protocol: utils.NewStringValue("test"), + Version: utils.NewStringValue("8.8.8"), + Priority: utils.NewUInt32Value(8), + Weight: utils.NewUInt32Value(8), + HealthCheck: &api.HealthCheck{ + Type: api.HealthCheck_HEARTBEAT, + Heartbeat: &api.HeartbeatHealthCheck{ + Ttl: utils.NewUInt32Value(8), + }, + }, + Healthy: utils.NewBoolValue(false), + Isolate: utils.NewBoolValue(false), + Metadata: map[string]string{"test": "test"}, + LogicSet: utils.NewStringValue("test"), + ServiceToken: service.GetToken(), + } + instances = append(instances, instance) + } + + return instances +} + +/** + * @brief 更新测试服务实例 + */ +func UpdateInstances(instances []*api.Instance) { + for _, instance := range instances { + instance.Protocol = utils.NewStringValue("update") + instance.Version = utils.NewStringValue("4.4.4") + instance.Priority = utils.NewUInt32Value(4) + instance.Weight = utils.NewUInt32Value(4) + instance.Metadata = map[string]string{"update": "update"} + instance.LogicSet = utils.NewStringValue("update") + } +} diff --git a/test/resource/namespace.go b/test/resource/namespace.go new file mode 100644 index 000000000..4b48b850b --- /dev/null +++ b/test/resource/namespace.go @@ -0,0 +1,61 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 resource + +import ( + "fmt" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" +) + +const ( + namespaceName = "test-ns-%v-%v" +) + +/** + * @brief 创建测试命名空间 + */ +func CreateNamespaces() []*api.Namespace { + nowStr := time.Now().Format("2006-01-02T15:04:05.000000") + + var namespaces []*api.Namespace + for index := 0; index < 2; index++ { + name := fmt.Sprintf(namespaceName, nowStr, index) + + namespace := &api.Namespace{ + Name: utils.NewStringValue(name), + Comment: utils.NewStringValue("test"), + Owners: utils.NewStringValue("test"), + } + namespaces = append(namespaces, namespace) + } + + return namespaces +} + +/** + * @brief 更新测试命名空间 + */ +func UpdateNamespaces(namespaces []*api.Namespace) { + for _, namespace := range namespaces { + namespace.Comment = utils.NewStringValue("update") + namespace.Owners = utils.NewStringValue("update") + } +} diff --git a/test/resource/platform.go b/test/resource/platform.go new file mode 100644 index 000000000..0c2bd4c77 --- /dev/null +++ b/test/resource/platform.go @@ -0,0 +1,61 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 resource + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "time" +) + +/** + * @brief 创建测试平台 + */ +func CreatePlatforms() []*api.Platform { + nowStr := time.Now().Format("2006-01-02T15-04-05") + var platforms []*api.Platform + for index := 1; index <= 2; index++ { + platform := &api.Platform{ + Id: utils.NewStringValue(fmt.Sprintf("id-%v-%v", index, nowStr)), + Name: utils.NewStringValue(fmt.Sprintf("name-%v", nowStr)), + Domain: utils.NewStringValue(fmt.Sprintf("domain-%v-%v", index, nowStr)), + Qps: utils.NewUInt32Value(uint32(index)), + Owner: utils.NewStringValue(fmt.Sprintf("owner-%v-%v", index, nowStr)), + Department: utils.NewStringValue(fmt.Sprintf("department-%v-%v", index, nowStr)), + Comment: utils.NewStringValue(fmt.Sprintf("comment-%v-%v", index, nowStr)), + } + platforms = append(platforms, platform) + } + + return platforms +} + +/** + * @brief 更新测试平台 + */ +func UpdatePlatforms(platforms []*api.Platform) { + for _, platform := range platforms { + platform.Name = utils.NewStringValue("update-name") + platform.Domain = utils.NewStringValue("update-domain") + platform.Qps = utils.NewUInt32Value(platform.GetQps().GetValue() + 1) + platform.Owner = utils.NewStringValue("update-owner") + platform.Department = utils.NewStringValue("update-department") + platform.Comment = utils.NewStringValue("update-comment") + } +} diff --git a/test/resource/ratelimit_config.go b/test/resource/ratelimit_config.go new file mode 100644 index 000000000..ab2dcf6bf --- /dev/null +++ b/test/resource/ratelimit_config.go @@ -0,0 +1,114 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 resource + +import ( + "fmt" + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" + "github.com/golang/protobuf/ptypes/duration" +) + +/** + * @brief 创建测试限流规则 + */ +func CreateRateLimits(services []*api.Service) []*api.Rule { + var rateLimits []*api.Rule + for index := 0; index < 2; index++ { + rateLimit := &api.Rule{ + Service: services[index].GetName(), + Namespace: services[index].GetNamespace(), + Subset: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", index): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", index)), + }, + fmt.Sprintf("name-%d", index+1): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", index+1)), + }, + }, + Priority: utils.NewUInt32Value(uint32(index)), + Resource: api.Rule_CONCURRENCY, + Type: api.Rule_LOCAL, + Labels: map[string]*api.MatchString{ + fmt.Sprintf("name-%d", index): { + Type: api.MatchString_REGEX, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", index)), + }, + fmt.Sprintf("name-%d", index+1): { + Type: api.MatchString_EXACT, + Value: utils.NewStringValue(fmt.Sprintf("value-%d", index+1)), + }, + }, + Amounts: []*api.Amount{ + { + MaxAmount: utils.NewUInt32Value(uint32(index)), + ValidDuration: &duration.Duration{ + Seconds: int64(index), + Nanos: int32(index), + }, + }, + }, + Action: utils.NewStringValue("REJECT"), + Disable: utils.NewBoolValue(true), + Report: &api.Report{ + Interval: &duration.Duration{ + Seconds: int64(index), + Nanos: int32(index), + }, + AmountPercent: utils.NewUInt32Value(uint32(index)), + }, + Adjuster: &api.AmountAdjuster{ + Climb: &api.ClimbConfig{ + Enable: utils.NewBoolValue(true), + Metric: &api.ClimbConfig_MetricConfig{ + Window: &duration.Duration{ + Seconds: int64(index), + Nanos: int32(index), + }, + Precision: utils.NewUInt32Value(uint32(index)), + ReportInterval: &duration.Duration{ + Seconds: int64(index), + Nanos: int32(index), + }, + }, + }, + }, + RegexCombine: utils.NewBoolValue(true), + AmountMode: api.Rule_SHARE_EQUALLY, + Failover: api.Rule_FAILOVER_PASS, + Cluster: &api.RateLimitCluster{ + Service: services[index].GetName(), + Namespace: services[index].GetNamespace(), + }, + ServiceToken: services[index].GetToken(), + } + rateLimits = append(rateLimits, rateLimit) + } + return rateLimits +} + +/** + * @brief 更新测试限流规则 + */ +func UpdateRateLimits(rateLimits []*api.Rule) { + for _, rateLimit := range rateLimits { + rateLimit.Labels = map[string]*api.MatchString{} + } +} diff --git a/test/resource/service.go b/test/resource/service.go new file mode 100644 index 000000000..fd9f0f055 --- /dev/null +++ b/test/resource/service.go @@ -0,0 +1,76 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 resource + +import ( + "fmt" + "time" + + api "github.com/polarismesh/polaris-server/common/api/v1" + "github.com/polarismesh/polaris-server/common/utils" +) + +const ( + serviceName = "test-service-%v-%v" +) + +/** + * @brief 创建测试服务 + */ +func CreateServices(namespace *api.Namespace) []*api.Service { + nowStr := time.Now().Format("2006-01-02T15:04:05.000000") + + var services []*api.Service + for index := 0; index < 2; index++ { + name := fmt.Sprintf(serviceName, nowStr, index) + + service := &api.Service{ + Name: utils.NewStringValue(name), + Namespace: namespace.GetName(), + Metadata: map[string]string{"test": "test"}, + Ports: utils.NewStringValue("8,8"), + Business: utils.NewStringValue("test"), + Department: utils.NewStringValue("test"), + CmdbMod1: utils.NewStringValue("test"), + CmdbMod2: utils.NewStringValue("test"), + CmdbMod3: utils.NewStringValue("test"), + Comment: utils.NewStringValue("test"), + Owners: utils.NewStringValue("test"), + } + services = append(services, service) + } + + return services +} + +/** + * @brief 更新测试服务 + */ +func UpdateServices(services []*api.Service) { + for _, service := range services { + service.Metadata = map[string]string{"update": "update"} + service.Ports = utils.NewStringValue("4,4") + service.Business = utils.NewStringValue("update") + service.Department = utils.NewStringValue("update") + service.CmdbMod1 = utils.NewStringValue("update") + service.CmdbMod2 = utils.NewStringValue("update") + service.CmdbMod3 = utils.NewStringValue("update") + service.Comment = utils.NewStringValue("update") + service.Owners = utils.NewStringValue("update") + } +} diff --git a/test/service_test.go b/test/service_test.go new file mode 100644 index 000000000..d020cc729 --- /dev/null +++ b/test/service_test.go @@ -0,0 +1,99 @@ +/** + * Tencent is pleased to support the open source community by making Polaris available. + * + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * 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 test + +import ( + "testing" + + "github.com/polarismesh/polaris-server/test/http" + "github.com/polarismesh/polaris-server/test/resource" +) + +/** + * @brief 测试增删改查服务 + */ +func TestService(t *testing.T) { + t.Log("test service interface") + + client := http.NewClient(httpserverAddress, httpserverVersion) + + namespaces := resource.CreateNamespaces() + + // 创建命名空间 + ret, err := client.CreateNamespaces(namespaces) + if err != nil { + t.Fatalf("create namespaces fail") + } + for index, item := range ret.GetResponses() { + namespaces[index].Token = item.GetNamespace().GetToken() + } + t.Log("create namepsaces success") + + //------------------------------------------------------- + + services := resource.CreateServices(namespaces[0]) + + // 创建服务 + ret, err = client.CreateServices(services) + if err != nil { + t.Fatalf("create services fail") + } + for index, item := range ret.GetResponses() { + services[index].Token = item.GetService().GetToken() + } + t.Log("create services success") + + // 查询服务 + err = client.GetServices(services) + if err != nil { + t.Fatalf("get services fail") + } + t.Log("get services success") + + // 更新服务 + resource.UpdateServices(services) + + err = client.UpdateServices(services) + if err != nil { + t.Fatalf("update services fail") + } + t.Log("update services success") + + // 查询服务 + err = client.GetServices(services) + if err != nil { + t.Fatalf("get services fail") + } + t.Log("get services success") + + // 删除服务 + err = client.DeleteServices(services) + if err != nil { + t.Fatalf("delete services fail") + } + t.Log("delete services success") + + //------------------------------------------------------- + + // 删除命名空间 + err = client.DeleteNamespaces(namespaces) + if err != nil { + t.Fatalf("delete namespaces fail") + } + t.Log("delete namepsaces success") +} diff --git a/tool/check.sh b/tool/check.sh new file mode 100644 index 000000000..ec10bb59f --- /dev/null +++ b/tool/check.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +curpath=$(pwd) + +if [ "${0:0:1}" == "/" ]; then + dir=$(dirname "$0") +else + dir=$(pwd)/$(dirname "$0") +fi + +cd $dir/.. +workdir=$(pwd) + +#------------------------------------------------------ +source tool/include + +pids=$(ps -e -o pid,cmd | grep -w "$cmdline" | grep -v "grep" | awk '{print $1}') +array=($pids) +if [ "${#array[@]}" == "0" ]; then + start +fi + +#------------------------------------------------------ + +cd $curpath diff --git a/tool/include b/tool/include new file mode 100644 index 000000000..8bad5517d --- /dev/null +++ b/tool/include @@ -0,0 +1,84 @@ +server_name="polaris-server" +cmdline="./polaris-server start" + +function log_date() { + echo $(date "+%Y-%m-%dT%H:%M:%S") +} + +function log_error() { + echo -e "\033[31m\033[01m$(log_date)\terror\t$1 \033[0m" +} + +function log_info() { + echo -e "\033[32m\033[01m$(log_date)\tinfo\t$1 \033[0m" +} + +function del_file() { + log_info "del file for $server_name" + + rm -rf ./log + rm -rf ./statis + rm -rf ./discover-statis +} + +function start() { + log_info "start $server_name" + + if [ ! -d "./log" ]; then + mkdir ./log + fi + + if [ ! -d "./statis" ]; then + mkdir ./statis + fi + + ulimit -n 409600 + nohup $cmdline >>./log/stdout 2>&1 & +} + +function stop() { + pids=$(ps -e -o pid,cmd | grep -w "$cmdline" | grep -v "grep" | awk '{print $1}') + array=($pids) + for pid in ${array[@]}; do + log_info "stop $server_name: pid=$pid" + + kill -15 $pid + done +} + +function reload() { + pids=$(ps -e -o pid,cmd | grep -w "$cmdline" | grep -v "grep" | awk '{print $1}') + array=($pids) + for pid in ${array[@]}; do + log_info "reload $server_name: pid=$pid" + + kill -10 $pid + done +} + +function add_cron() { + item="$workdir/tool/check.sh >>$workdir/log/check.log 2>&1" + exist=$(crontab -l | grep "$item" | grep -v "#" | wc -l) + if [ "$exist" == "0" ]; then + log_info "add cron for $server_name" + + cron=$(mktemp) + crontab -l > $cron + echo "*/1 * * * * $item" >> $cron + crontab $cron + rm -f $cron + fi +} + +function del_cron() { + item="$workdir/tool/check.sh >>$workdir/log/check.log 2>&1" + exist=$(crontab -l | grep "$item" | grep -v "#" | wc -l) + if [ "$exist" != "0" ]; then + log_info "del cron for $server_name" + + cron=$(mktemp) + crontab -l | grep -v "$item" > $cron + crontab $cron + rm -f $cron + fi +} diff --git a/tool/install-standalone.sh b/tool/install-standalone.sh new file mode 100644 index 000000000..46a0b3df6 --- /dev/null +++ b/tool/install-standalone.sh @@ -0,0 +1,576 @@ +# REQUIRED OS Centos7.8 + +#!/bin/bash +if [ "${0:0:1}" == "/" ]; then + install_path=$(dirname "$0") +else + install_path=$(pwd)/$(dirname "$0") +fi + +# 脚本名称 +program_name="install_standalone" +# 数据库使用密码 +general_password="Tse@123456" +# 是否启用数据库 +db_enable=false +db_name="polaris_server" +network_name="eth0" +db_ip="" +db_port="" +db_username="" +db_password="" +redis_enable=false +redis_ip="" +redis_port="" +redis_password="" + +function Usage(){ + echo "HELP: " + echo -e "$program_name [-h] [-v] [-e db_enable] [-i ] [-p ] [-u ] [-w ] [-n ]" +} + +function showParam() { + echo "PARAM INFO: " + echo -e "\t -db option" + echo -e "\t\t db_enable: $db_enable; db_ip: $db_ip; db_port: $db_port; db_username: $db_username; db_password: $db_password;" +} + +function installMysql() { + if [ $(command -v mysql) ]; then + echo "mysql has installed, please use \"$program_name -e\" to install polaris." + Usage + exit -1 + fi + + local target_mysql_rpm=mysql57-community-release-el7-11.noarch.rpm + if [ ! -f $target_mysql_rpm ]; then + wget -T10 -t3 https://repo.mysql.com//${target_mysql_rpm} + if [ $? -ne 0 ]; then + echo "download $target_mysql_rpm to $install_path fail, exit." + exit -1 + else + echo "download $target_mysql_rpm success." + fi + fi + + # 安装rpm + yum -y module disable mysql + yum -y install ${target_mysql_rpm} + yum -y install mysql-community-server + systemctl start mysqld + + # 检查mysql是否存在 + local mysql_num=$(ps -ef | grep mysql | grep -v grep | wc -l) + if [ $mysql_num -eq 0 ]; then + echo "mysql is not started, exit." + exit -1 + fi + + local pwdText=$(cat /var/log/mysqld.log |grep "temporary password") + if [ -z "$pwdText" ]; then + echo "cannot get tempopary password, exit." + exit -1 + fi + + local tmpPwd=${pwdText#*root@localhost: } + echo "replace old password $tmpPwd with general password $general_password ." + mysql -uroot -p$tmpPwd -e"ALTER USER USER() IDENTIFIED BY '$general_password'" --connect-expired-password + mysql -uroot -p$general_password -e "Grant all privileges on *.* to 'root'@'%' identified by '${general_password}' with grant option" + if [ $? -ne 0 ]; then + echo "replace password failed, exit." + exit -1 + fi + + db_enable=true + db_ip=$(ifconfig ${network_name} | grep inet |grep -v inet6|awk '{print $2}'|tr -d "addr:") + db_port="3306" + db_username="root" + db_password=$general_password + if [ $? -ne 0 ]; then + echo "failed to configure variable, exit." + exit -1 + fi + + if [ -z "$db_ip" ]; then + echo "failed to get ip, exit." + exit -1 + fi + + cd $install_path +} + +function paramCheck() { + if [ $db_enable = "true" ] + then + if [ -z $db_ip ] || [ -z $db_port ] || [ -z $db_username ] || [ -z $db_password ] + then + echo -e "not all required database options \033[31m[db_ip, db_port, db_username, db_password]\033[0m are configured, exit." + exit -1 + else + echo -e "database parameter check success." + fi + else + echo -e "database not enable, skip." + fi + + if [ $redis_enable = "true" ] + then + if [ -z $redis_ip ] || [ -z $redis_port ] || [ -z $redis_password ] + then + echo -e "not all required redis options \033[31m[redis_ip, redis_port, redis_password]\033[0m are configured, exit." + exit -1 + else + echo -e "redis parameter check success." + fi + else + echo -e "redis not enable, skip." + fi + + cd $install_path +} + +function connectCheck() { + mysql -u$db_username -h$db_ip -p$db_password -P$db_port -e";" + if [ $? -ne 0 ]; then + echo "mysql connect check fail, exit." + exit -1 + else + echo "mysql connect check success." + fi + + cd $install_path +} + +function importSchema() { + echo -e "import schema ..." + cd $install_path/database + + local database_num=$(mysql -u$db_username -h$db_ip -p$db_password -P$db_port -e "select count(*) from information_schema.SCHEMATA where SCHEMA_NAME=\"${db_name}\";") + if [ ${database_num:0-1:1} == 0 ]; + then + mysql -u$db_username -h$db_ip -p$db_password -P$db_port < polaris_server.sql + local result=$? + if [ "$result" == "0" ]; + then + echo -e "install database finish. " + else + echo -e "install database encountered err, exit." + exit $? + fi + else + echo -e "database has created, skip." + fi + + cd $install_path +} + +function installPolarisServer() { + echo -e "install polaris server ... " + local polaris_server_num=$(ps -ef | grep polaris-server | grep -v grep | wc -l) + if [ $polaris_server_num -ge 1 ]; then + echo -e "polaris-server is running, skip." + return + fi + + local polaris_server_tarnum=$(find . -name "polaris-server-release*.tar.gz" | wc -l) + if [ $polaris_server_tarnum != 1 ]; then + echo -e "number of polaris server tar not equal 1, exit." + exit -1 + fi + + local polaris_server_tarname=$(find . -name "polaris-server-release*.tar.gz") + local polaris_server_config_filename="polaris-server.yaml" + local polaris_server_dirname=$(basename ${polaris_server_tarname} .tar.gz) + if [ ! -e $polaris_server_dirname ] + then + tar -xf $polaris_server_tarname + else + echo -e "polaris-server-release.tar.gz has been decompressed, skip." + fi + + cd $polaris_server_dirname + sed -i "s/##DB_ADDR##/${db_ip}:${db_port}/g" $polaris_server_config_filename + sed -i "s/##DB_USER##/${db_username}/g" $polaris_server_config_filename + sed -i "s/##DB_PWD##/${db_password}/g" $polaris_server_config_filename + sed -i "s/##DB_NAME##/${db_name}/g" $polaris_server_config_filename + if [ $? != 0 ]; then + echo -e "error happen when prepare polaris server config file, exit." + exit $? + fi + + /bin/bash ./tool/install.sh + echo -e "install polaris server finish." + cd $install_path +} + +function installPolarisConsole() { + echo -e "install polaris console ... " + local polaris_console_num=$(ps -ef | grep polaris-console | grep -v grep | wc -l) + if [ $polaris_console_num -ge 1 ]; then + echo -e "polaris-console is running, skip." + return + fi + + local polaris_console_tarnum=$(find . -name "polaris-console-release*.tar.gz" | wc -l) + if [ $polaris_console_tarnum != 1 ]; then + echo -e "number of polaris console tar not equal 1, exit." + exit -1 + fi + + local polaris_console_tarname=$(find . -name "polaris-console-release*.tar.gz") + local polaris_console_dirname=$(basename ${polaris_console_tarname} .tar.gz) + if [ ! -e $polaris_console_dirname ] + then + tar -xf $polaris_console_tarname + else + echo -e "polaris-console-release.tar.gz has been decompressed, skip." + fi + + cd $polaris_console_dirname + /bin/bash ./tool/install.sh + echo -e "install polaris console finish." + cd $install_path +} + +function installPrometheus() { + echo -e "install prometheus ... " + local promethues_num=$(ps -ef | grep prometheus | grep -v grep | wc -l) + if [ $promethues_num -ge 1 ] + then + echo -e "prometheus is running, skip." + return + fi + + local target_prometheus="prometheus-2.28.0.linux-amd64.tar.gz" + if [ ! -f $target_prometheus ] + then + wget -T10 -t3 https://github.com/prometheus/prometheus/releases/download/v2.28.0/${target_prometheus} --no-check-certificate + if [ $? -ne 0 ]; then + echo "download $target_prometheus to $install_path fail, exit." + exit -1 + else + echo "download $target_prometheus success." + fi + fi + + tar -xf $target_prometheus + cd prometheus-2.28.0.linux-amd64 + echo "" >> prometheus.yml + echo " - job_name: 'push-metrics'" >> prometheus.yml + echo " static_configs:" >> prometheus.yml + echo " - targets: ['localhost:9091']" >> prometheus.yml + echo " honor_labels: true" >> prometheus.yml + nohup ./prometheus --web.enable-lifecycle --web.enable-admin-api >> prometheus.out 2>&1 & + + echo "install prometheus success." + cd $install_path +} + +function installPushGateway() { + echo -e "install pushgateway ... " + local pgw_num=$(ps -ef | grep pushgateway | grep -v grep | wc -l) + if [ $pgw_num -ge 1 ]; then + echo -e "pushgateway is running, skip." + return + fi + + local target_pgw=pushgateway-1.4.1.linux-amd64.tar.gz + if [ ! -f "$target_pgw" ]; then + wget -T10 -t3 https://github.com/prometheus/pushgateway/releases/download/v1.4.1/${target_pgw} --no-check-certificate + if [ $? -ne 0 ]; then + echo "download $target_pgw to $install_path fail, exit." + exit -1 + else + echo "download $target_pgw success." + fi + fi + + tar -xf $target_pgw + cd pushgateway-1.4.1.linux-amd64 + nohup ./pushgateway --web.enable-lifecycle --web.enable-admin-api >> pgw.out 2>&1 & + + echo "install pushgateway success." + cd $install_path +} + +function createPolarisService() { + local create_discover_rsp=$(curl -w "##%{http_code}" -H 'Content-Type: application/json;charset=UTF-8' -d '[{"name":"polaris-server","namespace":"Polaris","owners":"polaris","business":"polaris server","comment":"","metadata":{}}]' http://127.0.0.1/naming/v1/services) + local result=$? + if [ "$result" == "0" ]; + then + local http_code=${create_discover_rsp##*##} + local rsp_body=${create_discover_rsp%%##*} + echo -e "create polaris-server service response: $(echo ${rsp_body%%##*} | sed ":a;N;s/[ \t \n]//g;ta" )" + + if [ "$http_code" == "200" ]; + then + echo -e "create polaris-server service success." + else + local rsp_check=$(echo ${rsp_body%%##*}| grep "existed resource" | wc -l) + if [ $rsp_check -ge 1 ];then + echo "polaris-server is existed, skip." + return + fi + + echo -e "create polaris-server service fail, http_code=$http_code" + exit -1 + fi + else + echo -e "curl create polaris service fail: ret=$result" + exit -1 + fi + cd $install_path +} + +function aliasDiscover() { + local alias_rsp=$(curl -w "##%{http_code}" -H 'Content-Type: application/json;charset=UTF-8' -d '{"service":"polaris-server","namespace":"Polaris","type":0,"alias":"polaris.discover"}' http://127.0.0.1/naming/v1/service/alias) + local result=$? + if [ "$result" == "0" ]; + then + local http_code=${alias_rsp##*##} + local rsp_body=${alias_rsp%%##*} + echo -e "alias polaris.discover service response: $(echo ${rsp_body%%##*} | sed ":a;N;s/[ \t \n]//g;ta" )" + + if [ "$http_code" == "200" ]; + then + echo -e "alias polaris.discover service success." + else + local rsp_check=$(echo ${rsp_body%%##*}| grep "existed resource" | wc -l) + if [ $rsp_check -ge 1 ];then + echo "polaris.discover is existed, skip." + return + fi + + echo -e "alias polaris.discover service fail, http_code=$http_code" + exit -1 + fi + else + echo -e "curl alias discover service fail: ret=$result" + exit -1 + fi + cd $install_path +} + +function aliasHealthCheck() { + local alias_rsp=$(curl -w "##%{http_code}" -H 'Content-Type: application/json;charset=UTF-8' -d '{"service":"polaris-server","namespace":"Polaris","type":0,"alias":"polaris.healthcheck"}' http://127.0.0.1/naming/v1/service/alias) + local result=$? + if [ "$result" == "0" ]; + then + local http_code=${alias_rsp##*##} + local rsp_body=${alias_rsp%%##*} + echo -e "alias polaris.healthcheck service response: $(echo ${rsp_body%%##*} | sed ":a;N;s/[ \t \n]//g;ta" )" + + if [ "$http_code" == "200" ]; + then + echo -e "alias polaris.healthcheck service success." + else + local rsp_check=$(echo ${rsp_body%%##*}| grep "existed resource" | wc -l) + if [ $rsp_check -ge 1 ];then + echo "alias polaris.healthcheck is existed, skip." + return + fi + + echo -e "alias healthcheck service fail, http_code=$http_code" + exit -1 + fi + else + echo -e "alias healthcheck service fail: ret=$result" + exit -1 + fi + cd $install_path +} + +function createPushGatewayService() { + local pgw_rsp=$(curl -w "##%{http_code}" -H 'Content-Type: application/json;charset=UTF-8' -d '[{"name":"polaris.monitor","namespace":"Polaris","owners":"polaris","business":"polaris monitor","comment":"","metadata":{}}]' http://127.0.0.1/naming/v1/services) + local result=$? + if [ "$result" == "0" ]; + then + local http_code=${pgw_rsp##*##} + local rsp_body=${pgw_rsp%%##*} + echo -e "create push gateway service response: $(echo ${rsp_body%%##*} | sed ":a;N;s/[ \t \n]//g;ta" )" + + if [ "$http_code" == "200" ]; + then + echo -e "create push gateway service success." + else + local rsp_check=$(echo ${rsp_body%%##*}| grep "existed resource" | wc -l) + if [ $rsp_check -ge 1 ];then + echo "push gateway service is existed, skip." + return + fi + + echo -e "create push gateway fail, http_code=$http_code" + exit -1 + fi + else + echo -e "create push gateway fail: ret=$result" + exit -1 + fi + cd $install_path +} + +function registerPushGateway() { + local local_host=$(ifconfig ${network_name} | grep inet |grep -v inet6|awk '{print $2}'|tr -d "addr:") + if [ -z "$local_host" ];then + echo "get ip fail, exit." + exit + fi + + local pgw_rsp=$(curl -w "##%{http_code}" -H 'Content-Type: application/json;charset=UTF-8' -d '[{"service":"polaris.monitor","namespace":"Polaris","weight":100,"healthy":true,"isolate":false,"port":9091,"host":"'${local_host}'","enable_health_check":false,"metadata":{}}]' http://127.0.0.1/naming/v1/instances) + local result=$? + if [ "$result" == "0" ]; + then + local http_code=${pgw_rsp##*##} + local rsp_body=${pgw_rsp%%##*} + echo -e "register push gateway service response: $(echo ${rsp_body%%##*} | sed ":a;N;s/[ \t \n]//g;ta" )" + + if [ "$http_code" == "200" ]; + then + echo -e "register push gateway service success." + else + local rsp_check=$(echo ${rsp_body%%##*}| grep "existed resource" | wc -l) + if [ $rsp_check -ge 1 ];then + echo "register push gateway is existed, skip." + return + fi + + echo -e "register push gateway fail, http_code=$http_code" + exit -1 + fi + else + echo -e "register push gateway fail: ret=$result" + exit -1 + fi + cd $install_path +} + +function addRouteStrategy() { + local add_route_req_json='[{"namespace":"Polaris","service":"polaris-server","inbounds":'$(cat ${install_path}/route-rule/rule.yaml | sed ":a;N;s/[ \t \n]//g;ta")',"outbounds":[]}]' + local add_route_rsp=$(curl -w "##%{http_code}" -H 'Content-Type: application/json;charset=UTF-8' -d $add_route_req_json http://127.0.0.1/naming/v1/routings) + local result=$? + if [ "$result" == "0" ]; + then + local http_code=${add_route_rsp##*##} + local rsp_body=${add_route_rsp%%##*} + echo -e "add route response: $(echo ${rsp_body%%##*} | sed ":a;N;s/[ \t \n]//g;ta" )" + + if [ "$http_code" == "200" ]; + then + echo -e "add route success." + else + local rsp_check=$(echo ${rsp_body%%##*}| grep "existed resource" | wc -l) + if [ $rsp_check -ge 1 ];then + echo "polaris.discover route is existed, skip." + return + fi + + echo -e "add route fail, http_code=$http_code, exit." + exit -1 + fi + else + echo -e "curl route fail: ret=$result, exit." + exit -1 + fi + cd $install_path +} + +function restartPolarisServer() { + cd $install_path + local polaris_discover_tarname=$(find . -name "polaris-server-release*.tar.gz") + local polaris_discover_config_filename="polaris-server.yaml" + local polaris_discover_dirname=$(basename ${polaris_discover_tarname} .tar.gz) + cd $polaris_discover_dirname + + local enable_register_line=$(grep -n "enable_register:" $polaris_discover_config_filename | awk -F ":" '{print $1}') + sed -i ''$enable_register_line's/enable_register: false/enable_register: true/' $polaris_discover_config_filename + sed -i 's/isolated: true/isolated: false/' $polaris_discover_config_filename + + echo -e "restart polaris server... " + /bin/bash ./tool/stop.sh + sleep 2s + /bin/bash ./tool/start.sh + cd $install_path +} + +while getopts ':hvn:ei:p:u:w:EI:P:W:' varname; do + case $varname in + h) + Usage + exit 1 + ;; + v) + echo "version 1.0" + exit 1 + ;; + n) + network_name=$OPTARG + ;; + e) + db_enable=true + ;; + i) + db_ip=$OPTARG + ;; + p) + db_port=$OPTARG + ;; + u) + db_username=$OPTARG + ;; + w) + db_password=$OPTARG + ;; + E) + redis_enable=true + ;; + I) + redis_ip=$OPTARG + ;; + P) + redis_port=$OPTARG + ;; + W) + redis_password=$OPTARG + ;; + *) + echo "unexpected option '-$OPTARG'" + exit -1 + ;; + esac +done + +# 确认mysql是否已经安装 +if [ $db_enable = "false" ] +then + # 如果mysql已安装,则要求使用 -e 选项启动安装脚本 + # 如果mysql未安装,则安装mysql并初始化必要的变量 + installMysql +fi + +if [ $db_enable = "true" ] +then + # 参数检查 + paramCheck + # 数据库连通性检查 + connectCheck + # 导入数据 + importSchema + # 安装server + installPolarisServer + # 安装console + installPolarisConsole + # 配置server + createPolarisService + aliasDiscover + aliasHealthCheck + addRouteStrategy + restartPolarisServer + # 安装Prometheus和PushGateWay + installPrometheus + installPushGateway + createPushGatewayService + registerPushGateway +else + echo -e "database config needed." + exit -1 +fi diff --git a/tool/install.sh b/tool/install.sh new file mode 100644 index 000000000..695245965 --- /dev/null +++ b/tool/install.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +curpath=$(pwd) + +if [ "${0:0:1}" == "/" ]; then + dir=$(dirname "$0") +else + dir=$(pwd)/$(dirname "$0") +fi + +cd $dir/.. +workdir=$(pwd) + +#------------------------------------------------------ +source tool/include + +chmod 755 tool/*.sh $server_name + +item="$workdir/tool/check.sh >>$workdir/log/check.log 2>&1" +exist=$(crontab -l | grep "$item" | grep -v "#" | wc -l) +if [ "$exist" == "0" ]; then + start + add_cron +fi + +#------------------------------------------------------ + +cd $curpath diff --git a/tool/p.sh b/tool/p.sh new file mode 100644 index 000000000..36bd41e59 --- /dev/null +++ b/tool/p.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +curpath=$(pwd) + +if [ "${0:0:1}" == "/" ]; then + dir=$(dirname "$0") +else + dir=$(pwd)/$(dirname "$0") +fi + +cd $dir/.. +workdir=$(pwd) + +#------------------------------------------------------ +source tool/include + +ps -ef | grep -w "$cmdline" | grep -v "grep" + +#------------------------------------------------------ + +cd $curpath diff --git a/tool/reload.sh b/tool/reload.sh new file mode 100644 index 000000000..6e656c9f5 --- /dev/null +++ b/tool/reload.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +curpath=$(pwd) + +if [ "${0:0:1}" == "/" ]; then + dir=$(dirname "$0") +else + dir=$(pwd)/$(dirname "$0") +fi + +cd $dir/.. +workdir=$(pwd) + +#------------------------------------------------------ +source tool/include + +reload + +#------------------------------------------------------ + +cd $curpath + diff --git a/tool/start.sh b/tool/start.sh new file mode 100644 index 000000000..038133fbe --- /dev/null +++ b/tool/start.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +curpath=$(pwd) + +if [ "${0:0:1}" == "/" ]; then + dir=$(dirname "$0") +else + dir=$(pwd)/$(dirname "$0") +fi + +cd $dir/.. +workdir=$(pwd) + +#------------------------------------------------------ +source tool/include + +pids=$(ps -e -o pid,cmd | grep -w "$cmdline" | grep -v "grep" | awk '{print $1}') +array=($pids) +if [ "${#array[@]}" == "0" ]; then + start + add_cron +fi + +#------------------------------------------------------ + +cd $curpath diff --git a/tool/stop.sh b/tool/stop.sh new file mode 100644 index 000000000..38b4ac34b --- /dev/null +++ b/tool/stop.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +curpath=$(pwd) + +if [ "${0:0:1}" == "/" ]; then + dir=$(dirname "$0") +else + dir=$(pwd)/$(dirname "$0") +fi + +cd $dir/.. +workdir=$(pwd) + +#------------------------------------------------------ +source tool/include + +del_cron +stop + +#------------------------------------------------------ + +cd $curpath diff --git a/tool/uninstall.sh b/tool/uninstall.sh new file mode 100644 index 000000000..0d9ee4348 --- /dev/null +++ b/tool/uninstall.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +curpath=$(pwd) + +if [ "${0:0:1}" == "/" ]; then + dir=$(dirname "$0") +else + dir=$(pwd)/$(dirname "$0") +fi + +cd $dir/.. +workdir=$(pwd) + +#------------------------------------------------------ +source tool/include + +del_cron +stop +del_file + +#------------------------------------------------------ + +cd $curpath diff --git a/version b/version new file mode 100644 index 000000000..60453e690 --- /dev/null +++ b/version @@ -0,0 +1 @@ +v1.0.0 \ No newline at end of file diff --git a/vert.sh b/vert.sh new file mode 100644 index 000000000..b3f28f044 --- /dev/null +++ b/vert.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +set -ex # Exit on error; debugging enabled. +set -o pipefail # Fail a pipe if any sub-command fails. + +# not makes sure the command passed to it does not exit with a return code of 0. +not() { + # This is required instead of the earlier (! $COMMAND) because subshells and + # pipefail don't work the same on Darwin as in Linux. + ! "$@" +} + +die() { + echo "$@" >&2 + exit 1 +} + +fail_on_output() { + tee /dev/stderr | not read +} + +# Check to make sure it's safe to modify the user's git repo. +git status --porcelain | fail_on_output + +# Undo any edits made by this script. +cleanup() { + git reset --hard HEAD +} +trap cleanup EXIT + +PATH="${HOME}/go/bin:${GOROOT}/bin:${PATH}" +go version + +if [[ "$1" = "-install" ]]; then + # Install the pinned versions as defined in module tools. + pushd ./test/tools + go install \ + golang.org/x/lint/golint \ + golang.org/x/tools/cmd/goimports \ + honnef.co/go/tools/cmd/staticcheck \ + github.com/client9/misspell/cmd/misspell + popd + exit 0 +elif [[ "$#" -ne 0 ]]; then + die "Unknown argument(s): $*" +fi + +# - Ensure all source files contain a copyright message. +not git grep -L "\(Copyright (C) [0-9]\{4,\} THL A29 Limited, a Tencent company. All rights reserved.\)\|DO NOT EDIT" -- '*.go' + +# - Make sure all tests use leakcheck via Teardown. +not grep -r 'func Test[^(]' test/*.go + +# - Do not import x/net/context. +git grep -l 'x/net/context' -- "*.go" | not grep -v ".pb.go" + +# - Do not import math/rand for real library code. Use internal/grpcrand for +# thread safety. +git grep -l '"math/rand"' -- "*.go" 2>&1 | not grep -v 'scalable_rand.go\|scalable_rand_test.go\|^benchmark\|_suite.go' + +misspell -error . + +# - gofmt, goimports, golint (with exceptions for generated code), go vet, +# go mod tidy. +# Perform these checks on each module inside polaris-go. +for MOD_FILE in $(find . -name 'go.mod'); do + MOD_DIR=$(dirname ${MOD_FILE}) + pushd ${MOD_DIR} + go vet -all ./... | fail_on_output + #gofmt -s -d -l . 2>&1 | fail_on_output + #goimports -l . 2>&1 | not grep -vE "\.pb\.go" + #golint ./... 2>&1 | not grep -vE "\.pb\.go" + + go mod tidy + git status --porcelain 2>&1 | fail_on_output || \ + (git status; git --no-pager diff; exit 1) + popd +done + +# - Collection of static analysis checks +# +# TODO(dfawley): don't use deprecated functions in examples or first-party +# plugins. +#SC_OUT="$(mktemp)" +#staticcheck -go 1.9 -checks 'inherit,-ST1015' ./... > "${SC_OUT}" || true +## Error if anything other than deprecation warnings are printed. +#not grep -v "is deprecated:.*SA1019" "${SC_OUT}" + +## - special golint on package comments. +#lint_package_comment_per_package() { +# # Number of files in this go package. +# fileCount=$(go list -f '{{len .GoFiles}}' $1) +# if [ ${fileCount} -eq 0 ]; then +# return 0 +# fi +# # Number of package errors generated by golint. +# lintPackageCommentErrorsCount=$(golint --min_confidence 0 $1 | grep -c "should have a package comment") +# # golint complains about every file that's missing the package comment. If the +# # number of files for this package is greater than the number of errors, there's +# # at least one file with package comment, good. Otherwise, fail. +# if [ ${fileCount} -le ${lintPackageCommentErrorsCount} ]; then +# echo "Package $1 (with ${fileCount} files) is missing package comment" +# return 1 +# fi +#} +#lint_package_comment() { +# set +ex +# +# count=0 +# for i in $(go list ./...); do +# lint_package_comment_per_package "$i" +# ((count += $?)) +# done +# +# set -ex +# return $count +#} +#lint_package_comment + +echo SUCCESS \ No newline at end of file
  • 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�|A#W+wnk;;yn)MrN3g&Ng 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 z zFS-k;f%Wr3*c^68kA}^5k4#N7XFTCyX=brk_uuUmI>&i$gh207e`o7hn(3V4U;|7S zr_#*ypyq?`3=X!mDkJ{vxA6C8(pmL5pqT5bO#)0~j8g;WNEm?6w)0Y#JIy@p0=uCh zA^X({+Z~PB)4Ex@q$BEaBF+5qp`B@vd=wKGz5rE9ng+XP!TAptSeOZ-X}7TXNQ6ic z(aJet^2v3dMV`Ws`4DV%fUe%Y4&(vew`CCe27bxr=TlWAU|y=UPcs`+y52s zJq(EeC0&YOBo~)(>?u1cwbx}j!!ijmEgAcC9;b8`WkjK7WBfa>cO&L6SrzKVI}h;+ zsau4}J?0!?BvOb7lS2sM#`f0R`tMeme z4%ZN?M{8h^E#GVfB6EZOc-hzTa4R$1{}0OB1HT@AE5Yr#j_$Xb`C;jLvj%%!Z>?mo zlzAJ+TAL;5vbDAOEM1OsrVOp0pCKn(oA)wuC@+Ytwm5ikmW;XC?8=fpH=EwkhpAbY zEn99jN3&(w&E{OrP1KysmCm=AzIk%$X7f&-P}3)0=H6na=ga6@%)a~+dZO-CJLmTr|H92vM8D3p>-eQhd*P6jKWKtV5pGZR+)4rzGyjyddK0~K^a=eWh zftW!Xv(+x2s;3v~USB@vfCgGV*g!6_wYY=TzpWYG=!kW&tvP#r2WxIyGpVWUYHL0hS0LL?CG~t2(if%IlaIypMti_!wPsH+Blf$k(MoA4_B!TSFpKhqeGD^@ z$QHLwA(T7D2gm&HD7O0#@|8{G@r5ucjd1dVWDxr_;p;TkihFse%`aisMQUr5;U}ti z{}<_XS(be^k;=)9bn)GY&*zR4MVgeiy+~P^2GxeCBigC9k{eJ1N71I*kO)PW)K-cl zYC4L{sAFD*8?X*h{OH-*X0Ti9x!coq6#TNjj`_?TB__DZldWg)$eg-nf>$Ge%e+w{ zfRlV0<6GfNUsBhc^HpJ=xBM+Xt_zuNRm#kDON+pm$iyNuBt>2-GILX;eUaIeBFE~P z6DhL2p6Qb+tLmv{$f$Z|b856#J@b4>?_qc-XH}8;G8Ado$jk`K(T3Wc&lZ{GY0|E~ z>6<>wxxAsdm?@JRnu%F5w7z*OOS-ZlDl-YtMt?l8q3N5Q`c8ebHd{l3C$hgq&DtFK ztby5=BfA@z-np`-ftj2ua~ha8a%EHlvp-jQH87p>KqgZ&ReWq+ZCes{C5u{CerT%1XrbgcvK)xIlww@1eRg$QIS+NJ*$vo9D+x)KX z(WpY+w?^?Fwj7heJa)|adQ=IUccH=J2}29L!Yh-b8Xun;F`a$VHDX5iqNg*IpPl;A zepwTN0XaGco|AyqtPjW})K~)23H_Fo=!u9qkfQZprN~j9DplU#zEh(!GF6?1`l&&g z3JG*jx@MV^!RYBsvnr(ZyF+p;%XAIP>MZk0I65;+`yTaO(_~x}c5UexHLs^dPr=HP zoXS#70PfLPiHpu$WZJIPl4{~mBVRfnpe?d&`MDQ)$zKBVoGL5%nbia zjydUOM~W)-j0tMh{GgI%ZwyL*t`?LI5i=*G^?kzf75p!mv3mt_vKkD9b=rdPo;mY) zikU953|2L}d`e_n3V_HTQvaeyPNpcd>`aOoY7^vd^51hl#jFms~@E?C())Rfrh)iCs3=Kh-j`W>`d0|EtSGzBBTS(lo% z@i;p>k;;63UD$gV9t|W?4!V1s^Kx+0MMJ z0nJR@7|?HJH-JBcSD2FBGA{s!nw+%1k3D|vefEpd)bqtIc(2I)v}~~(8^htW1e@`7?*91JEeEFrfHvtNQ{{xs@aPxqvkj% za&#ncZBZR;*>jouCmglNv)-DQ!?!iUnwbMlnoP|$y8=C|p*e8!$f|7Qr8ek~Hy9kV z&53YiV2tkC|b_&&Sm_ORM0e(KR#7MQ7*oU%1fK`x-Eb~}4IXBC+Ko|e1wK&>pX__5XB zvLhV#DMcfJpQgxsa9XJ{Hs5?2oZ+BqN1A+;Z%%_W$v3^z?6$#SdmNHmrg;%ma^B4a!W)pj2nOb11iuqwnaRFiG7%!~!Wk7F@8Kh%nn$s30DQo{ zz3X|`qH2dvPUV@?5dMP!_6u-0lq9GJ$up6y;C9%WBA?p`;q!TBPO8>pSog~}$5WSB z{P;Z7a%#TW6TXeZ_SjfA$lL%2gLV6gcFy=Ah_^GDk=+GmT2xliv{9K_U=BrJw)g>m zKO0u&$ZBA5IXRTq=GNsAF2tJ_Gzw_PpY?Mju(yr3no0L6=CN9z7P9adVgah&hKd77 zIDn~znz6G74FgvzAj@0i>HdY#{LQu4ywdm6L4_!%4c8xE+6o3sQ|nS*6>Pbz(7YOw zQH4rhH=i?w8dI}2EDHp0%wV0ZCL`S-il5$wz2#I=WUL%Wkq5h$Sp4`{a@cSx{wlxq zpe*;OSp{tQB3Ynhhmx(!C}Pu#A)!P)-|bma4_sP?=n%*=Uo3cl>3lF$t%_T4w>Oa& zg|!yK7e7}_Gf53l%M7!kP|L7d2wy7|J6)a?}SnHv3FpkM1}Ou{v{%kq_)4|k)r@ZAb+2PgxKTo>0+iysR}FJQ|T?mxa$+pO}+^qRWp9$eFW;gxnZb?HU9 zpZ_l}*2MpkLwQ+B-a9q%xyZblSe>0Mew+)+do|7CP&;d3ZL=;c<7=C_X)Qmf$-F+< z;z#$0460>jMx;|Mb3W3^LDdXCwOVFvR94h7A4O$KEz>D`iSB!h53ZK!j#XL9yqDWw zt5z07MzNu=VYk}mwJLI|mU*YjFpD4ks|g#XR+AUFY_%N9v#Yn_fD5%_&G0IN&dE&k z;BD_`s=ory5OB2v843#fFhgl5p@JLlT4o)I==!2l1WQjSuW-wdh?(kXIU}ONx757q zm3Jd%zg_O@6HfO+;3W&gXlqJjOQyMyDz9V21?3dxLGTI6=R(c9Wir2LJ?742%%-&a zDGyE;_J1v1mSviC={b}~WaMzV({V#WdsbNxDXlLPg{B+g(44A094a01B80Z;)?h<< zXtHaq&nyoERX!lB4tJ2?8`Znf|H+7>WZ)Q&QZ`iS(h2Hw;#(t6llpEyVpiK6GDBfS z_|#I)nGbM*#UH-ph{R~+73D_K95(9MS<1zfMQ#wX*8WT7oByfn$d&O?A(L6ZOw3rh z8*KLLn<9^wB=FJKtpiUD&OYve^-b&xGb>dSe@d56J|9Q&u8IH4PazNJ38zv|sEoY|L3 z9H>gc)~=;bBnRTsBlfH48t1_ITkOg5YbzlaCN7xwi&m4h=sh`pf7qp~UcFNAwmKDZKZuAX^71BHE zKvkCb6rB5T33y>Dr}!y3sms0Acn^)I;TpP!?+%FRW3RRHZB$u&)b&=K?+zqBanZ5F zng$7*3;B>K^2;?I>vi{EO>9kZ+*56?=TgV2^gVp7Hq`ItR-SsERr7$Q4Q+R3ZP!eV z1oJtKvn*^9VxuJ4mH@dfI;&Y(KTx6gcGh#_99G$wqe`|(d;+-4`&H_lVk3Ox_%D0X z`6e-7Hi+b3nnE-={=LVBx+J)Z4iRl=P8z=S5mz9T5-}5um*rz^%EfOa;tFCnQ!;UWq6qh zkda73UgZ61Rs--NlVo{Up= zri%AVxL&+{D{9w@-=qCju7t`YHfn8b1sn)sX_fI zX|^FlHE!2tm|h+^n*k7^tF<>nwM^JN#4j&K%t!vwjtd!PLhwU9?Xbl4dKqhhL^Dor zHB^Jiz}(ZKpQS>O_8n_=X`?>T4!ZIrCF4&C?wN7mLtUH=ao$1p(PdkT`Ng(5UR9&n zxu2YCOQAwGq%}rsqF2`cfhy}P7(!3PZzxdbn8n)Bb{=TIX>B$BuAZOFA`hsaUsK1- z%k)|@^KR0aw;fl0Titn|d#XWTkZ>RIIjrP<*`>_;y>gIGV;M}^USEfh!dH^Km!heB zeR12xopj-E{|<&E2upWCVGyrNBw0xWMkZR0r3ZB`o;a&i=O*u!nJS}2i6#ohYG5!d z;n%xj5dGIeYoSBQSTDWN^2fD`zk}=WCpbZpf#v#p9z<2}A}T4XjBrB2K?PoogE%x{ zjBp~a`3L)YRn^S+lk)fXu)?ElQDgvmUsz%CBhSb0DOg9N6D{ihE{22QkwSHpYq!PE z@H;GzKP6RDsro)%2rg`&yV{RrJKO`BYDtI1gj|X#Xe%R8Q-T5HI8p)I{EhK@cgd;l zQm@8OvlzT_AjD49QuaftuiRZD$)KaXtX%FH7AjO*nIF;*RN_It+>z^sl8CHR-p<>UCK0~QY zxJs|FbzJx+*5dZM=0C7rx!Sseap}?37CitYnSDhJJ^x z=OHXwp~5P}QW#@K+x{~6ukAfUzhzHM0w$&s+xt7pI`mydfBj32DK#ty$9d4Dt z0;V(EQS%K2GYa}#j57$u5Z7TVJJ{ZE1D+(J_t-{9d!0h-i1R-gHdxn-867 z1Z|#oMTp0&fDh1?e+Lz^Nt}?{bayvcNEpYXIFXs~4fxC>zr&1t56YF)0iI#uuC%hX!0q?^}+(mfqH?i^|k#es(3 zC&eB%lZgQ6g37&%eBWy>xd_V%s&GLSoI{J6_c|z~YV2J?W{OW%AVTdI=rcYEIQxdp z(iHh5q%fpi=vxOj^XBQ}#UJSwkvm`=Ocd~9a~r$Iqa zl?{|HQDJg82%_RZTItTTl-sEyXUfMx2hx2j8zoh>^oujnjYY&EPlztCy?>S4= zpzZgf_4>bzWbZ^|?ALcWk*fMrrCu z?CeVWdM=x|*pfD1TuE+HV(v+0?SazsaI&wcYA5R|Iv})pk`_m)xx3ulndHot@KB3oytA1PskhFKVOM_MdVu#o8h*>_O&gwAEUD#QVY6*@Y;4F(P6B5%daX7B5* zNBIHDv3WSBi41a(z0pN^XAPt~O=hSK`YU_i@Ldg7sM*?v*ec;ByRM&AUlmL5k`ID> z*E<3XC(+dbT})BY4Vg4ZUI7e1wdIJmr|i^vpdat00DOtAfWs99jUX67>5BxXL}A}q z&k8iv9CWA8O*KnAawgTh=Skm}stBqfLGzY3y*oryK3NQ(nJ;}x&>Z&tH)puum-RvO zMKE?-KdrBVfOpARA9scCmb>bP>z1qzpWf94NY$Z&ha%q*MT(TWqMo}#-jBQL;8WN) zHR!^v@tGMCneQ_r-Q6v!7JB5M4bkwEC_Y`>z@luJ5^qSM6H7LK@O&n2- zN^=G7|3vybS(@}z@9#yc#dY$whXutV5KKBsfc`!UahT03Hd;T(NiON; zqbXisn*^2g*teXw$m$!gzdAP}nh`$LQ1AM+MrME`JgkwPWBLsWli%40gh}+xM&_7P zYX-Vxz;$N2E85{YrPSSU9c=93Mc0|p01R)?6o&KHDR}ANb)W{c=BVe^p*JWp^u6oN zNhox$H(kIhU2jGPq~G-zEV^|C2`i1w_Mn`(-kb``2iKc1p;1mYyblvsV}+otXl(jL z3a2#2+wd&)W3pszW3wKV?hWRJsC2!-%!|sI#%5zQysxpDoUJw6v*nd0=2UjLXA`qN zM{5q|$f+i#Z?3FsVkYHA=QS~1@;X~=cqL!PHZ{xhrB_okt3b{*F;fd=OH;GDFn3u~ zbFolfZEDt3`5Sxgsw!QZnKM2_cnjCFvMpu{B&CH_exig!Y)751}Gc&!$T0Lp+ zTGFk#SyW3-H8aO+$?j%mVeQQhHcY7}y_%a3QF)+!i)2)Dv$#mhdx~UEb0FzWDIcmY zdz+gf4P;Gov!X!}HC>D4qvmEyvF>@KSUzuV#y8BNyhc$vyv=VF$;+w02s@`LA*BhABk_sivkV@|PO8vG%5z1uoeD?-kQ6Rm0+l%M2YKZjio~c~X^x z#>JM4IYQnPeu!0SKr+h2DZ1ll=n|oy)`jqzC*531b56PQ8 zH8f@;N^8k0UJdtBGs~#+h@9>tpno6 zBgedEZ5-ayqCVm;>eRwK?JnSv-Vk}-Mk|xbGui!jgBFkU1lH`Sjw`_{l9Ze9wlWFL;p`5_PgoWMo+ zzBUab3S6i2<8YPn{+^P8>KG0>n6c?HTr=O_9DH`}^^nJY3o0M>1YR`H!2BC!M8 z8cIUXdM8y~;;>Nv@1&j6{PTs_XRcS(|K-l6$x1AxY`-KMGN`Mff9v#65>~_-#HsOs z0v(pY2XC2?@zI?P+{FWO#7?Pt-%_~)yBUa-4!6u5H!%O$p&jnee@_#9(|h9`rqoSc z#db`->2eL!tDZRNLfUktj!CkHled>Nd2)Saba|34pL~ks=S=>M>K>ux2V^#4AsYVO z7H`iaOEG3IRnFg$Y;DmXWmu6Z8vFhZ#Jj(bzu{Yzj_3!G{hBb@IQG(Skv*1qF!GMl z3|y)rcJW{YNYG0aR^bhMFoLfQuU5&qDsdo+ai8dcyKF)cG-=<&|;ei&kaq%4B<+%arj7a4kF-S*-3_8kd%-ye(ZO zuRz5ybL~DAi7s8~xMFW!Vn+uzc*;^c1t02W+lM+R{u0@IQtzMVV)Iak4nYh$o#UHJ zhdA}EU*#Y+AJTKaXP>jbLm~Ab!7jvgb@dDt#ht#6O&+tKBRWr(VI~Lfrv51ne@}>i z(7}7Dc@osBazWa?x$$-CY#*b&)m2MwLS41w4%SsmZgX9=nSqxebTGQeD3RFv7ui;Ru-ApNIfkwYf=h# z6hRsJEcH8sa;^wrbv^jaki6T-d=`?i^-ZsExNm*45ysU<=3-bj)Hj3D!i(ygJ!x9= zMVh?Qz>J16vc6fA9z9s!49@sH^&=wkZUeJ4B8wZCPa`t1f!UrZor=w=%-jk3!$ogV4Gk1u^uKV(29ywO| z@=8Os`Fb{l4|1n&=vqaVHZyo|&8%wwr2I~GInvPdsZmUMM-92y&K@?0vGlRG@!X)<>5~~j^NN3h#g8+A2#2gpSzsLuVu{4g zW<&4pf=@<0mz+JfzJ`YH(oBp$XbD4*0k$MmT%p;bhnHy-RC?}D=4Gtd7SQXJZ_Qj~ zZZ0*UCQrCmIbJWGJn5EImo(w(QOPr8nPc%4vl?%vvVMp%C*@MJiaqvTaS3j$jJ+5D zuQqYo53Q)IM95jvT&MS63QKeC^H}BQqszXXtB&!BE*2W05<`AsSfq5kqbx^@{bg0? z6A86#U>L63uqL-@C%BXDR^z6xgozpqgjJh#h@g_49Zyy6Ppa3FPaD*r&Z?jip1;QD z?Hp$529fSz(mfLqNU=ndeisTKpIjjtvYye@ND(=;CWoK+UI40bP7i!{TcOH7venrf5e0`hYIJ z=4x8{cCC8TqseYi3vXsG?`_l!@X4qY^M=nRT=q%36tmDT$4N7duUl4H>XiD4e3Hw< z8-4Z>d1gDad0vdz6_5I&JhR$C3chkL9LrP3KB-LasG|d&`R@5)tsgCsrVT`3u>a*nh=@H=4@Ez6__Du-$qrH41)qQ zBfS|5#0)uw`hkW&KFE;XWDRAIXkyN1$&^AfAc}!&Udj=2f~Mz8XCM9270Qq>wzjB` zG^qNAUeXj67MjCF^IO)lWb~Piy3iyamPP0aU1;)5M||dpmngEHtF%*GYs(-0k``-8 zBWd#Bmi#+uFw{%g50q42)ntvysFX{J{<7=`-`OS};W!c65iFH8f;rW{x zQ|E_erKPqB}h>MbUN{>p zEv2ZI!$m*Qx_SpvH2S>}*)`j@xDMX)fKsWvOnSFVI^)TAwK+xRvlJtNa$aO&fcLxA zqH3epq5dvkA&Jy8;-1HphTO(?<@+U}&!=n3Cw|j5@}A#3JHcAvS8}I5qzgLaBHnUm zU25KSR-fcI-CVi-{V@GEy6DsNN(SE{QvE%RVaseH)*@qkx~`!HhvFMPGs`pBn&vkr zOZr%n4P=j(Np;se_$7_v$;aE*NE*AfPb9^_${(Nf1Z6mJw7Q(BrR3a|z@c3c%c`vX zTG~$hI&n1Gpkgd$GA8C5jjP4h@PyfZV15y^1e$1=?AP+4TgkFExk1~>1)|dc0Pz^x z!si+jL7Ems1F}UfQqSyH)8gN@$Q8cfZgGUkPwUk%m_=`RHEWIZfXO&Pzz|yUxf>63 zlq+CAQok34AC~uy$XJh=&KJ|u5uG3~quosXY@!bEH8~@D#SA6#1!~3x zzr428w__$Fhy5!@GX#D}b0CVd$E_g0SKSJX>rP0`5&c5U2B+4;rnSON+HM47z&2N1 zYL@7FS5MZq-WL@1Id0g3B(GB?>Y;affuv!l(z2g*M&Cn`*roNv+yEkUkO;V<%~F?| z`EI0wD{@-%rK|J%E1(jpw;CBMI`UETJnsfJGG}D7s0?>M z$a`Gj_O^N)TNk@yz38_3+FEUuSnet5<1&AZTtw~2s?P7T1Q1-f)gvfp!N5h$MTZ=9 z5wwZyaA^`cHKQeVn$m0Z^1Q{#<4vhWb0x;7a>fzTX{%~`-zl#k+MonNB|e5S*2kq* zs%22sC;3uK?6k`Hwy*S$mL7wyeXaV<%&E4V_6;K)NL--@ZTG8cZG|`bOIht=7#QJF zu{nw}tj!Lx`FF=LZ$XXqKJvsu3mLW8VW|bp4M+X!QbK4>0lM%%6qYT|D#ay!9(aEi zTDRF3DQ|Cfd{*~k@7FA~*1pEx`f=$0#JtjE$4_#{v*8(anbcdzEwC)wSLK*zP5t~I z5JrprPMQd>d3*BtuJXI&Im(zn%jxs~**P%DaQ|91UF1fM-aM)4;D3FB62pw$*8axw zmc#r^m(#q-V7799HLm)1rMa_U%OihQJ?~&!;{5%o%S>i1|maZ6tQ|V@fKj#IIm4V{V)6M3TV&IbFQol>h)?jh_ z3^O1kl)nlUcjl~n6i`sbT|?i+eRY2#7Bve7UB<(nDa8@A-5-FDdGxVHkuyYeA$EIyEL2Bkhs z&4i$If>Lp2Tp;Rk{+I4U{0pXk}76M zhRTu6%82eqpe&+NWBVfMNR2JZl=lnGmdtb<98$NQ=MB!kn?kB z`J_WmKqrZ`qSFkE4{7$0k&s;wz!k;(F~`cV+cpvXSn_3-{4GC=fKjLjq~x=)J4+sQ zt~M$q?{D8?0tz!Rm0Y)#wSPH7Md_VO&Amy(on9bZ2I4Q2EK6~%>w}V3yo?7dSp$^h z?v=N`_@?(O=K)I_16OH_ODXL1oXU>LrTs6ocZHdAfjf3x!rim)m6*naU);mhed8mo z$<`{bY44hDE%U0YgCEa(dRd^(kT}%mr~t#L^R2Fj%FiV%dB^sC<>owcj&iq^vUe`! z(8aF(w3MC4SkXGIqHW1us6^ysC9#i@CNdf|G)1udN_tv4|JXwbpQ$l7$62IfYq`vZ z_k+4;L1HN_8PY%GAlv(fTJd+0opV`|LsLf8-|Df~{fe;rrHn_NmIMKtI*c_S$Fip2 zbPz-BfnwIJSpBiUl<|l_V3SJRZwY-X6%=oo7#lCG}e*$BakZdf5QAPrKqIvvtf+;}c%clQI7w|G$v07T3`r_0eMUmb-XW9g-89QYM11zmDnYmAC7lh`Gt4YMej1 zt=MexpR-mLD>ZVvy2>JVv<`BXcTxj!;pDoeT_`-Tu6aKsTkD!nL*eCh&9<<#uV+q% z!^i4E#3<7_Hcj5CXSyJdT+fV5j}EG5Ue1tn^~}tS^pEP9V;Q>7u!si6=R~A$k>){e zpq!}z^W&K^wAc*JlJiiXW z8koUV^lZDU$X5+a`>JxVff-R%YgSaB-*u}@XhP`o@)#TF6vg_CB&3wMXTA z0?Eg66aGJGjtkIKyTb=>0X?`VqBc&nuKXnmWBCVMlmCL9rX31fTr zzbwkZ!PHe`H~epGOSVN4?GM`zRiQ6BG5awwHKVW9k_Y^O{D17dWq?#ywg$S+samBi z)z#It+pE1Br)iwvgphyuBJ(;$QRR7^ zt;o$&Aya-nSLM_B2Md{y^3T1}@18ssi;)AAe-e=a5frY#$3i?#Pw(9^ey|Uk@&+5Q zWD-M|jh_u#qKLy9OEnm2*JB%QrL!OpunJEoXi7%_X#%e|+%Gn`&SOAh1dk&??mf5) zVhBLJ546!(3!{8jGU2qHYj0uIU>tMte66 z?r(qB`$w1Ob-6;?z9{!Xk-hW5S|)u4b8m6hqk?_w>EmKD_Z7Vd%-6{t?BDPMK7H@P zMW0rvc-A55hvSe%p?Pq;9`m+?TI$soAXnHVLiJ0K7VDrLrgsrf1%v!@JEnvc8j2uM ze%VfUEuyS4(khi^TZLL46Vr7&?X{Ib?(v1Z$ZI}3D(|NXb_oR^7h`geL6&bVM^Rz! zmBPvjnJtR!3x)Kj$2txk>vG8d&QH_79<#SczbSIx|5NnK0ux;DX8uR@y_K9bNxM)V z^77yGV%Qi5+d7Q0mD(Pt{@c4D2Ix{@*MFB z4?->%t9Ch(U4Af!rd!nd9J*rpJ?fx4cB&|>wpWoLhHQ2`(Z)+EQcFP3D$*c3_o_$- z?NWXnK(|UX+`->eq{R-krXr1X^59Ce(y5RQHY7wcz~+RwkpXrqMCy+Ym87r5p$bV~ zeZr&!Ip&iqLl;2xuS`p^?W|8{!X=-prAzIo4BBcbX&u4CtI&`L)wv1{cJnt?Xtvw6 zrV8DF&`Nz85y@?;(t=2Jxe8L@q-2qYmsX|S9yO^dO^K3{y-|F#DqV_FC#upCuat~b zJhnP5RNS*VXuSDeHEI#Hyyek~fE!RKnxmJD83i%w;zS+(e5rqt=2#n)=n z!8RvHbW_g>(Tj_VIHx^!5?Aqzv$tE0xr>(R> zR{-?Skkcf(lAX0D` z)2YP+g6*x=IsVvxWF?&Wg&@HHCKmqGzzS>Z?`!bO;LJ7Nt&(7#zVZwDar?(L#VTj$A-{6u_)Htcy$PUYvW}hqBU_igl5|VDRtgx=uUwj zf`^zT(V;(rq5<7}KDeu8KlWFH2GaTg`}ArlpK4u_`M<#1lBsK4NNXSjGP)J){?iiJh=MwMXNRMXci4sI{=Cs`+d2g8 zH5{bxW`=zLY|1VNO+<4V$iDUv#6o*I;UpAA8j$A$@`bF&OHSG*e$FGX5ker)!W~0s zxJ|NFH`;zccfc6R@0TiaDK6l^F|N+HZwPk6{CL~#$KVNq_ulzzwI8)c`XmqG9X@12 zcy_(Pj)j3VKyQX)cu$R{+kk-O-Ylxg%d)UBn~?&705v2y=)VHhYsSs+A zo5H5slumt|JR1!6P9Bj?JDuDmoh}2C4$6EijcGJ1M6F1pb)geAT(CJ@6s1mv^Zj(_ zGVy7!;3GjOT@r*)zBIzyB7-)#<;7K15r-(O$H*HJU){y zM!9-t(roWvaCWKUQ_z@Fye*SjM)T54Iu!l2e9O`CRa<4zrFiiOpG>GaEQ@9)a{Da0 zme@<)Xnqne%%Yn~`e+;{H$llaS^nm1j}SH3UTP+`2p6h_t3W(zDi;g}S~f}+f&nO0 zz&psnK4#)=p)|^@&kv=6%yJg!)=)^xseRx#ut>>K?6$(_2aBfz*bJ;5l#GJNUl=+* zp9rJ#HeMG7JH&&;pPlv(QF7O@RYRpgfyAG8(`1-c7c2Z-!Jq%mGXgfa_60s8T7C@6 zhe_XRheaecz>str0(9n|4$(WySD1$huqQTpr+7;yu&zSE6q(Y6&gOFpTvg~JXhn_d%VVazR6s=#$&Xw zakfw`;CySqqw>PR9!cDwD3_zHUI4Nx?-1@0PfKHok>)vBzIYp7WjI!KsI{RPZHV!? z;PF9*={yG=#xBc-JX3|xH25Jp!U{CIZi0jXSW`PNtuCzm2*07`L6}PLWU^#a_FnYs-%tquJ-3S$KsoYT6%)H{Q$lGrO9|lH--c3m+bg)+1sit>6V9_cp&KjvBRZ=vu0qcsPL_UaX9O%nf{G{^`1SM5*u+f#FVL1<#R7Hi3~4{=Cnt0&Zb zge$Z-YoUQlI$_!*xTIwUF6oSA;v=}E$G+Rc=gF%E#X016eVpI%G3W9-tb>=vqIpbh zAA*zUuhO3|bp;&7Dr+L1b!9LAL*5BZS;h^JU6QRocUe+4m zeLm*-F|fHu#6WZCKRd)o0>nCKyX)CF9&Tc2zOOZXg=2VOAl`M^{5p;SCF|=!@@Z`x zpR$P1duywj?x7#7+yaWEHrEA@uw=H25thtL(KO!9)5LqB21SWC6D1oQdh9)s(L(945+!aP6-|fSo}SUPJI3Gm8I?ukt)B3*{;JkKT}Y+Z zV(vwD1sI#PWRx@yY-Hblz24X0c?B;B1R4=RHDutRfZW1RTO6tLARw{y6r_j%dU}&( zy*|x?uR=}GpPjVO0pl1*VI-D};UtvL3E-<9x1JUy4OZlG=&c(E>Js2$0k%dTI|2&n zyv3_-G>B_jX$<}om|%zCm#ATK!dP6ByGLWY?76S7Ip#Cbbk6187fmxFxOWU3 zi*9JXc5(C47>r~0R2)ZcvKTXGUBGC-(+aZ)VwVsSgd`>){z%4ZZBl@MjW^3!g&_~I z%i+xZk%Ps24H;3aj$7!k>}S*2j@iRP z$K;Zmnqbuc*F@gF&a(hjlS2f}H(1~hOM;w^k!Xe(CrID`+cd;LiSC%VvlUXoC>;%_ zxRvIaQ5UZHc@O}VQiPngSZSQRD&&Zfv$s_aPk`pwiitYF+L$k)UrdxB0uJeOMb0sW zk^cs5_@8F{KZs=GdGgFBb5Z^Hv5nh5b}4>jQEkXCAxF;m2{-D`lqC@q-4KI7g_;us ze;dwh(0O?*x=6y5SQ>-vYAk}$>UxZ%Mt&a)btc!LSiz`{ibDdh>K2EvAMZlOhD9xl zqx%;8Vymp&28kC|bvX{|^B7hw?7TXj2HMq(c#w$#uLv&bHVNR8R+r$GB-4#3_mpH>>g6-ZwA<_6mrR4z3t+s6=H4mPKibnOg)T?)#uRE7<6eN{ zn5!T&#E)QfpP&S5eEtx5Suf_bH$Hy`VWHRaa$gHMpTGWNKfhW{5KKSg{&xCLg&4vv z&}!Qe*;Vi=Ow@TU^y863>43K4Y8^NM#9rV;IAkPh-vsBQgIa+S1W*GTU$N8nfOEl> z!DDo)xkiIDBeIN)FIJ+6K{*5Z71?x}OQ64h(D>uvqnt3&&_Lq#HVc@ZwL=)Tl5T0{b+a=IFi? z;R2;w5e_GqZ)&)Ne+Pz(2>6XK>Sk8Q!ax(6OmvrdqKo=kRA12CTl#5TB4~k)&$?h5 zs68&ql_=yS2aj~qaz_Hxer`GVas+jEs@w>usPk<%40t~4rcEKd8Od=Wo<(pif%rZW zK66)}NIDdD)E@>66))#Yc0@WEa0(wEBbGOWixJ7u%y6^@=r{- z1n<_!`%AI1{l8nmsqK*=j;{nR$_CH&3yP9I;gb9h4JnOBz5I|V0N)PZtLi$KjFLN% z*DMF%m29c4(}d$b@B6idcQ*R>V&fYn1%817kIFYOU8Ngc7uX_6otc%V1xYJ?3KXc#)H zO*{zHEpWBlsJ&SovC$rLNusVSSd?kZv+T5*J)`W@&VtR-ObcH?$id<|V5gx_;c$S^ z#nldkG&Xp^jY(Vf2>(PoC;!O$dp~13LuOl*YX1XD-M|QwZ}j{_7y94(gjz-mMSx}k z+kd3$4$$1kO)^9EGvjx3Bei$A&hyP6`F8{OJ=7$`1+z`=4cMgx_Fnl7^_2c`I2tz918Lrv64Sci?9`B{~4p(nDU7XwzP8X-|x|eP`d8e0phA05P1_0uv z0C?dYfMbR7OhxxY)d)o$!ntcS4GVYORrGy0PmiYdF88o#+UDXN(R9+~ULGweh*zWO zN`&heY6kqK=*}RY&+MZSf;2|gEwIcR1>ziO5vU;@-bC-U)gdJY@2GJV%9cPpev>}Y zBn&wZ?-YC?hWK%fK5qus3edQD*L610r)~5fkdYd=&TmKjE;`7LDDYDLI)CDzI(P*r zi!@rN4b^FOU>xGQ|AmUdSAM6YnBSRD9C-Pm;y__vuA>fc;JeqMmlL=P9yStV{&_H4 z!2M&qcOgZE%q|4l^|$j#O7MQzVKyG6ffFB*YvVTl*(BI>E95Tu?abR6{m;9n0>a4t z@ATN!2@ggazt=UmjZuczXw*xCh9v+H#>+hE(N8+>ZZU6bHGaNNqoT>%d^8NxS?OS8G3h4zT~2aQMQ*;H%_~a*=ejmsd{1Ae z(@CuY3a~vnk}gS&lS|PF6EDm}EQY&fAnNA24g4`EKQn0)@M9Ttoq0h9b+f3k8Pv`y z<-@H!ER!}^`DO;>CDn-x+F@I+;lx1aSGXOZ$~%Dk4dK0+7-_DRne<&K-_NA>VXkwT z)FzzAWzo=ZSFbF(5&kCd!h<7tQb{@;!56crh1>NFG#A|5yChvh>UsuL- zFxK=*97lP4sHlgqV?iBpSfLeA9IT9!kGH7!^T-of>hptVW!M%>X9TnG4N*5aX{h4B z>$nzNX;8loD5g9*hZk#3S}Pny53oSV`0xl8=wVk1j@cKOA|5yLgW`I{828_3*=X~3 zxqY+@`>RTZJ;HJb7sUwE+Wcsk3a&BHMo2b>`e1#HkyZ9cG&p0_=4e_Ajjhfxbl6&( zkOt2SV(AK`Vq>VY-8CtO+B^7E48%2DJ7Z|5le@*zT&L@H4Dxi|92JY$Iky9!8&daT zk&@$D5i1n)m*S`^hJGB)Lo_cA!E<#XR+4fSgU{aOo*YMABKU9|jf!w@iKD9#@1TCS zNEkzO)5D|UX=4<3i>Dsmf&LKszs$gV@S^@c{{N+M^~fl}-1UENoTSuF*rG$!lYxB& zu|hvx0P#464Lx4>PgWR$6ZB7bXB7QeEsYZ8q#f}h?|`(l7P`6+C8#KrK%RAp7b?EGQc1v9{s^gAf%Ti76DX z@8j15X8Xln+IbC{a6vy%&<~b3h2?K{DKB2@75VcP`0~a5-3rb%PtOVQDCqV_H8d{j ztyM(8x(ARF7JtkSFnGYa0M$UEDROSXa4qc$QoFVQPRb$NrNDQ!G680_%)~RTAb~(B zNV(UcRCdZE&3wp8v*d6mm~5`Y z$&0N*U>!VWa)R=i$VEjK2Rc3+MRi;)ekj8*4_y#ZI*XD$$Z;N zt@B+uRi? zd#+mufN8wc4v>m#63{J3m$QSgMPgd(OgzFtM@%jx>%pek;ebu!TH=s&LVO+OR!-#M zsPCYjAc@bq{K;We!0d8z{I*PLU^SWY(wSW#sy*oi_Y*QySN2#ANE`oNb$CBgAPD7CVS$n$7B zPYtC7cF&MdfEyS4-!G~R!_QfV_h|&s9vq(!T%OYOL14N3ZUy;rg_RXKfFC#maG_lM z$mgeKqgviX%dV=B`uST4x+)f7^12kA{w0zS-LSv1Y0 zkYU@=%u>h9Jxb7Kv$~7STPVXoA(?qm3AzKqgA%meA|+zM2a6C90`Pu=49KzSM;r`DCHR#3CfrojoWliBoL0*|Rc?GxQSD$s^Rx#!hH-d2IS z_|&2bbj&9uU6QzC4vkGx5Yz6K%(ruBe6sIU4xLZtRXNlqMNQA4&Z)emB8^Gq1r=#W zDvzy5=TcogE7J0`Slr=u8gHsZz0!Fhl(5rzVkO#=&V3CD?CTY&O@=yAk(y`9vqog{ zXpQAYFNL>bMfVdhJTGMEn}`qxr8 z;--U9oYi39U1iO>VBt$Xkk_dLK9HB70Fr6blW3&PH8=@^b|~m(=Oal-S#fPn5*i*r zs~y}k8Ms{cy(DUdT?H_&PWQBAIw<&e=w@F{rr{wfH<|7U!3IF^dsAo){NX8dI8+T! zq4km{dL@k8r-E8TT}`3hF20{iQ(V4tsbGHPb*a=bLd{C0PU1M9?dIuew8gCkr_og5 zfZrF%m(u8Rq&kpBnoe&_w2<0%kMWJjq%|?zB~zs7FJ#c&79q&Xgv8Lr{X_kz!ZBwQqZo=pa1b>oHm184XJ(0hvZ>SpuN{Kv=@&>YWIiOEpiFkQ2HG)}=)1Y<4Y6 zq_)g$d^C(*mlL5(#&dk2$Z(GYcfRyrSX-xjP^4EoeZoRaLR>N~2`n+LUP;tny6Xx% z?@OX@?P^sL%@E}Bw+`-~OjjMMb+YV=iB3EDb~0cB4EQ!utyU#dcVU8=8p>P2(-F#( z0o)E%{ZpV#fa0rRJSr7#XKtQKbHmm76dEj4Fl)e=kxGYMYFR36M&3pmos4idPosry zUY$m}-0m4^G$E3&r_qW?_t7-!=ix)?V9)SvNT;hF9+ysCqExSRY9Ukzlf2?VU*%Qs zpbwNDyh`!b3_7UP!VDoVh5%wTcgv*f(du@Fa2I1B$MB|1Y89*CfZrC2g3Gbo7Tq+? zb1jp$#G&B3I9{AZZQ?zXvuKm-!7s$~)hsMco?}^bJ7Jj9-;rMwg6_9o9Q`ox9F~L1 z@1?bTh&c@}Sm~$e?fE$l|M}~~PtnIa>VZBEb`A9Lg_&ksF@zI_Kef$TH^zq{! z>Ejckq>uLjw-E^YqG+PUwI+%>NSFQ^1ZiH{WL4nK7%5ZoG8uj|1Tn>fRPD_SL2s z+7;%T7bBTT@Ey$vSMVK8bMg3CTJ4JO7fW|td@F`}MR?A{(DxCzF@!I6#=^+*z%P4A z=IS1i;uRVf>A4vT$!Ng-4KtvT5J!E`WV*0Lp%P}2(31H3dfHzE2b5O_5Vkj(jD4uJ z^HcPvf6e|g+4ef7L@@hqd>I&a*W8!=8bN))_Wd$;w64=Hi{E|sD-xn#{)*_hOnHTJ zO|Aj2KoB*#Z4(;I{QWDkwO`Vdt}yRyB9eQvnt%^d4R1ojtWv%hG5S}9S*Yc!)ZC^n zHi6i+l()0i8O+3E_>e zQ_E1_+}CB1@BO+g^37kTlVQC44Z0uZoAL(D59a}I(6Mm7{yOM|)X~>PK4tEkV1V(B zdXrATY=4uwx%vDXG~TWDy+KPNd16!A8|mxYlzMo$Wm8({;lppzE|1#yCf$qT1#eM5 zZ~WM|Xp@(FzD3u){9RKpyQ^=T(wJzT^ENGsjvx6pU4g;=HVuj4b8pd{7_}GmW4UEB zG0!i)Lp|g8n|EkZT>P4MC^wF0zC(B7c<4JcFrGWUL#yKX)Z270UhRCFrX}*%&1hYs zdss6X;^TAg(i|V}eOFBNmG9CWpKsc`G&6|@y-VAYxZS&SD~XRcqh85sTQk~|!aLui z?^1kA-=nWndGLF*DOI(9k9MZ7p>{cS@*|p9 z9;n{K<$2M^^h0^~_>XC8HedLdPG`IKe@w^W;QWN{R&aIvgl6ZIf#sFM*FK@)6?y9? zG{2%+_z8`y#65mS3oE(renNv~FR`XFulN}quB@j1jAje%@!=}m^5^tJ6?O4vw52Kv z&R69VKc~Lcc*W0YS~WHG=hVA8if2~m`Jd8(>fHBJx>jAa{FJ^Co`N50aF<`u$Y=QM zr?l`HwdYeBE~<4KYVwj_(6O3o;xA}>Exz{)I$O(q_7}7i+L@oxzS{0VpV5>$ockHA zspH=C88xqqi{{nk1E16Oy7B8ir?&NY*5@?69{2d1*4I;aKcnOIx%roLw?3c$f+jZL zeP7VZ2EJ8a(9H%s{RY*|FMmn% z8>xd|Qn%+(F#ma;@fGcOUJdz*#=n4q9WU_Zujt$h>fl$j{6!QTeUYdBl74tm4f!Rl zZj6GHjrsI1=}u$M-e1znmr!v0B_8%Gy7iK$>#yk8%SRK7TC%0I zEH#nv`b}LJ4{A+a+Rst~FK)kjG|b{^1u{%aG)jQRx>%2QQf7MU)@F zMz21#wR5}rG|aB9)T40@USFSGKysMIG@uh9 zsz(Fb5-R2A;jDR<`oclefTo41!wqO$IREf0EerP@f0kOic=@w5#HFS@OQQkIXh@4A zeBU&r8xg#wA&mebK|^pPs%{NwTO=QUj?P5-wmnCqJiO>RanlTVj!t@1o9E~bq_Y~q zLE~G~h_-rpW+S=@8@UnnROg@B>BZ05JKob+(xi8TD1m5!^^-uJzc##ey z@~{`dN~b!#h?$<}HKsmEzR`_oe-gK7Oy4J|3op{mWFGhu^-S@#eM#o~V~sK2tF4Xc zdMe*}iMplvPQN7c{py!6->Vrf(Uo)__cC?PaQAwdj%4tTmmvb;Uh*>S&*XKl(D#|K zvtFSwSv>p|+M308vHWMLGcVJj67sz|m*gurThe{_6}nTBhc=-;rQ98xP><5Qz6nh% z?V8<$j+QQinxo3_z*lK=8NS+tPL@%*P3YUQa)&nMc+RUJQ&l5hrK{znq-S~V^%^ZI z&zD}M-R0GRS7|}El<&*tBd<}*3cTbs8dO0|e2tptNcqGZ?)*Bf%uzqQMl&k%n%8MV zMfc3tX;>w`{5s96+`O`1_9{@xpOvI?JlgSuDc zwQtabs_N@EXjL_y-johjqp(eaZYoFl` zZ_&YLd_Od${xx}DQ<_>+t!+xZYROY()#6ES(S}-{fp1Zd+EOyJHt&Cn*46f`dyBdY z_ZAG$@PamJ@MKn)eF`AuM@;~+IS?>egX{l8Cck`>-9O)!{i*lh(?G7{ zzMkq&S_A5HVHyqB)wnc~TSYtw>NV*SE4rOV2Tkf!nuNx;rqe~Udto}n%3;pzVg`il z9&_^y@JXxl>2$&Za|UzV=?oEHSdl@OtZHfo?YD93O#0sDzLY_eWs9`dE`*aO;1bBB zZVvJOjCUw_e|pPCX_`}<;hW)_2B6HzL$ZKEQ5~{`cm=ait8VeXM7 zXteM+YzgO6CBWUFc9x*U;s`k9;&COZd4%d!lJ>|p>1qUbEJZ`ze5xePb*r5vX|VXQ z7DV!)Qgl3$7nY*CkqYp!qvFkK9>p_D(?oz&O4G_Hb-NUe7mvUWFCQyS=e%lbY1*%N zR2lkSxx1C2wb8t*4CO|YYxkWiz6dQk`tat+UL)j^g=ai*c zacX2)nk(D?Bk?@59NmgnL(9>&1Qgs#;P1;(uS9jI9Gwv^q+ULrS)L~Q)X?(OQoKN; zlK8vwAm>zv%2V596pTye3E8wb+0#FpTBo33ObX{_)4~)F9OEq|Ml>pw`&FR%sh+kK zXk^-;u%av$U>fT{sKYp2JnJLq0vXdqMwWgeYXfig<73MI7kqEu>VfeWV~jtfwa8Q^ z<1fY-e=!foU#v0yVvO+@V~jt5LoogT2+13NamM(IGsa)+!|@kqjK4Tz{KXmLFWwk` zfP>h1c09FnxJJa&O$VQZD5ui}xCvNkf%FUEeo)K|QLPfFqd4Ejhw`li+5zWr0-Xz0 zD-&p&INvUY@s>pKP)te`4@JL3>MLVz89c~|wBM!9B?=GoQXhzz-IILcJcf6Bi`xzF z_NYicp9JFNcz6RZNAjv98sy;-Ni@r&x+Kx^C|;Kg;`aEt$<)ou1Cwct*V7@HT8sB> zjN&WFU~l&vO%`egbn0lHm_qZTJp)o`WXx21k&8-DA1!QA$?x&&VmLGm?dt;tHg@bC>O)va1d8w~Ak%WtT{9m8c_`OF`D_ahaMB&i`#6Sw z2eLzhY$8Xr*7k{9WfwW3P7aYK>Ll?QJhHH!Cgpkmf;lLIH9&%o^COsla?!d%aL4&@ z(Ep4_rlG~EJzS^?12UmWWt}JvJ`=!{qQz!|1?dW_R#=(*Vg-;;D5@=d7_WIIX$ZXl zyeqW|NlGZBRzbjXFcTu~6Qse4PeoHOO4Z*AA=_x}J>vz6T(0v2IPJ%A!Xg`m4B3mnC}One5qRwmCrD=jl~ zKOqWmx3x*ahn!^*$vDd%h-3g8g_71{e&e^Cs;BXVIK18_5B=VSh{#Hf_rwXD_6EWr zx;o~ebMSw}3FX+{DA6jP5d|N&8Ui9kNM6L@F?=OTq*@P038~qNINHKI)Jp)db@b96 zi_j(_DmdFK@)tO}!^&3ythK6KFDrPR7H~= zYM>Ivd<06)J0(yuD}+)15JV%Q=|+g!fd7&31z>HMyESa2Fge>UT;R3C!xiAQpwLIj z5F>Ol*To2(K-CnXlZ!41o$QHF1LLSUwga)^|JVS;yW0b(?SM$`5J%G@-9Nn--j)Fphr$Y)Ae%7fp9Uwv$6m&+gUpGO3K_e9XR9 zTKh5M4s%L)Q5wvMl?Rb@JOI$*hVxBjxmO9$F5k(b#x1ndkh(?uI}14?rLfUN&gHm7 zx~8jMi3sBGkwm&_a&Jzgb!ORyVqx#>qrU9c011HjL- z#U~6}Fk`#e)J-4lvvGe&DS)yNBxZJ=mjpDH8VwK!BHvjcDdNe=qL0!R=B-nG4@NVm zl(&V0FPVmgs97jS2hWlSc*_)88>%iQi+&PHc7*Yw6gn5id_pRXbo1#{iG(9U-XW5ErP0VpfqZO@l$xzPyd;eV10jyB zzDG*#d-zNm^^a1!)1aaxB?G-Y3dv+%)h(SmDJhw)_+UD1QEGjB-?TVEfI&lnOsRfOTf%%f-+`nMM*^ z-%2xNvLZ>8+V-2Nj|p`Fh5gP<8%(hMjlnHJ5#cWSHU6TvM9bE^oMd!0k&Ld-JV6;< zp(XflRLA{G?BD#AV?V&(-w9kpm~lxq$*A5tj*UT9s!|ii~}=+nRTAobCc;R zKVv+rR3=Wm&L?&H(!E=!>7ZpaA%Q9M2JWXb2nia-fxNaYrIn{Qv>6ne+Px*Pd-Z)>S)Lx!zc_C zn{PTrQwPkm2R2~weGdh%#qAyi(-vpG9q!MKZDF1+oYWvVUTp)WxoZ$7bv_#xKi>b5 z`PLgV0Yhtx0awn|_yd)Yy6<92xy#yA^Xo-#e5KZ@i(uhV!Y&17Xbil^O zKwd@lG}72mat52L7zwg$1?~ZJa1sr+@bFlgZ&96NC6N^+09g;mEDOcgSka7MkLBFP z?c->UOjOX zUS1BQpw|P`;BX}+%N2j;qi>bx5O_1iCy4Gkj2{;=25}lfOz+cr)LmudU@HgwC*|tpw zO_g74tT211NL#4DpbXy4K6&63+dop+UalB+%}+Sa9=kIu(&&LrV{8nb=g+iH(EfjO zypd-u;g^+Pw`hYXum}4QHqm=&v4j=x5?I1D&jA+q#uBUSRQg+}o37ef=nNPsEbvHr z7Fxh}C1+1T3D1JX%ykeY5GO%S2*gROa7=P{B!#f&K9WnU{vK(}vOz3ek-h}+6JcWb zko!O6$*Lkt*7H2p45EWsCh+vQN67-neawiR$AAgBBm74uAt%~nq7}MlwTTuAt`@CQ z#2tT%ewcsq|9`y?%Etbo{(*FfI+cR9@;|a~72U7!ghGvJ>2FX9@eIa%u?U8k0Z~Ne zbzV|R(Pxs<;=1XO#)1{{UmjQ?NUhqVBU9e9S_jQ^;e94OE=|~hHtXo9Q*_YTdcZ1= z`3UCHB~9$5ZGrhH#@~yu)&5d8-RMPAGzsM!Z`)LsoXpcED=flz zJ<1!0Nj2Me_q2q4;__+2e{ zn)?Z37*CwLetP_Hh4NSvK%cTri1Iv3O@3$`GSAwXX|V3OZju!{r`2peu{vWLJiP=0x@{It(| zgqHBfeT7HZuy70PQ69@Hh$`Drf0`nC<i8Yqzu7j!()(_ zdvGp8aM^p2@*$lKxd)Rnfy-9?G7(-$GRRMRWYIikkj_9n5@a;PEI=V_v@o(ku330W z7In3%0r2HmfkGH<<31%s$oe}dciPmqz!KPbMhWWfa1ALz#~h5LxjPQ`79`U-85n`H zPWSy1v{7O)*FtzzN$MJ^kV|)5qM%*FxOFKS7p5+iq`MOTgz)64QnWgpSCyhe;c9v* zS}F0*BQ9Q8nmR>r|I$ENsn(^bgW$2pxfu|F?SR&nrn7+7mKKi-crYS)Ss94Ws>x*p zZqU3e4FLH~83=dsjIz|u>mE{;4tV)!S-R$RZz)R~6b~#<#}v0MPu-&hBQPP_2aLes zXx>nc?gDXJj>g4suX403M%^zodsdnx5)<{UNZh>gz~-=NG|d0 z6uJt!&=lG)qwoe)x#i3JsG{xZcGFQ|YKntxu(G5j-S~&P2F7q|p*L zZ%L!QZZ}kXCr5JI3|bw@-=~Y0{}9}nMheh!56?-b!yX=)P9387K3t?x>RcL~@QS?d zJ+BY)x+@gV&A`@Mjmn^{0zjRV z*oFLnxSyia=UXj}wd_a7Vk z%w3DOndxm_YKE6~s+sy~F+s2(7}uqk8=D1Br*Qh@=)8HG|%o5zs*usbTZ;cg7Oq^?#th!rPL=(BUp&|@L z;Y-jgw9!bY6&i8+J2vqs^aYzM@JXOHG4lqyB#9ljOX&Qbotj&Ox*ufzGeI!|?iWlu zRzB&VMLP6I`2sByxG8&xgeMWg@V_8Mdt{q>z2@Vzu>o(Dd*(HH`; zAgVPk5^?9X5TXuzv`GXl0Pa?J50G*p#xz+(5TK(<(*o5J>$lhXT7>hqC%i8v?rj0Z z%NZ$x0J?Es+s6-kX-H>npceGZ2?z(Cg>Ljnw=2_uGz1HS1~VNN+QrXId{$zGLRL7RYn{ zxACa-*UK6kp}APXrH%UQyxk;JcG!EFBow~MRL!UuUq1&i@(o(!TL_QK=?!`dt)-c+ znWBvIjuP1j3g=B7juN$?Y||~!>W-4xprbdYNqjp;$y)f0x(Ci-+0UkmxS!0IdB^x9 z^Yb5mk7%CGi*&88JaMl4w--VJ!FZ3ndAy}o<*cq525k{>%KY>AV9oK!JT7k#(M8KS zFZ7;zClhrQZ-KnAIIz#;HN+pp z2bjm>V=K+|@#`7ad8)|_+nBF|!d^cisnk`Ca#sq@=eWP5*Z5PwUyZV~^ID(OwwW{( zd8L^&E8U>9NY_DWu_S|0-a+g^ymxqp4%b_=KVcGwXe6M!tDlu`a#FZ zRdV3e&{7eA!nDv0T<5xe&jfO}oWmyCZFA_| zA0=(XkkS}4&1_8{E3W+<@MPW6{jFgC1nl8BZQS6I5BS25ylei?;SG2mxQxn-)@Whi z`a+6=J8DQe-lqxr&8I&9`}#kB5VT@{N-z7**=le-D4-hkY_+*z-hhpJm8a=2m$1ni ztJT2a9qfO*hfkfjOi^553`78+7QzayxFSzYmrPqCht4!41b*sEZ{U z#~TB)e0(JjsAP|&yl~lZ*SvSuuq!n zeyM@N%HkV$!n20y4SO%aq4)>%Iwxoi@2kS95s&ftYu#nJfR*R zl9xcteY+O1Mn}wBj`!>SeR}Cs#zwP&P!jx3W;2)sFh8(|!to;Q4_)!U&K-cj2%6t) zv0M{iA>)-J#A>e*|5waUe-Z*!qtNl2h+LVb!u_9`aW??L^3FZ-$)>nE;JHRU=Y7b8 zFb&Pyp+|Bfm=VUQkoMYMeTA7;o6*Qdk~XWkR#c^Sv)rJ7fZSFsH2XpD3vwy7r>Vc&yRb9Ul&qHTT1XH&MZh^A-vL=hyVawlJX1rA73wXJA zxuYltwJ~H3jAF#r;kM|hpVozx!e1oTc=h2Lh@bOt3*ko5SPh$%yuEQ)I%@ruM?F+X ztrp4sm=d`o+8xdm_$2X_(9jwWG}B6*TQORKzXyN=+9HPdJp9cD=Pnu{ykaQ!9skKQ zG@2anAblbbi6d<~{~Y4G^9ofR2Ke*|NiL<3v<}JzEcC<}cuH-kfCx{t9UC7xYX2CH5D9567@EuE%Ei zfqoB${I>vkPt)KsI~4fwY?XiluN|lxZ- z#{s1L8I^=;dn5b}tn^T-dYgP$MQT2r#BJ`1jY*QR@l^^vpO*R(_8X+|@y`kd4fDiIjkjv>(ge!I zUV2STgCU0haCV?PB!z!Vb@@Fbpn&TO?W-Y9w`}SfKG^(}4t+h(zaQp?-|6KXICb(w zt|C%+wT|K0TAT6EABMtKCKQg+zQeh|;tpf#jR*HEiv|6^{NEbo51r+Y)(Niv#N+ta z_<{+YW4}q{Qd^m!5Zy(?q5>DW(O9V&ya$W5##rjn;)~62<;>Kua$hu+LDBv|HAjy0 zG5E8Mi)=X$yBE&1e(1FfKJ(ParSKbk77iN0ExDj2lQ-3p}OBm453w(%mtierW47ZY4>?H&;0Q~guWlPyx)uN8r>1V&jSGWlAI6EA% zJi{)i-(5D*PhM<87TM<$urD`zP`;6Qi17uG3we`yzYPM&NhpCjM`t_rvhr=z3uTv&(@|J`5~H!Mmz1&PlkAv@f*CCa{kVj>MP^Y}!eDMkq#&tP~(O6S2u+RL6* zz;hr3omT66i)KzK7eX zTN;Xb$8#%yNaDZ3v4KKDmkIu|A!70bd4ZN`Fr@Eh0@uQ0OGuokX9-DN1@rm@b2A)| z$U^QOj|KgV?UIh7n-CVvqT!(eE}Ij^ld`~@#j}t!=;8UG zZ}l+hj8(h@1jRAD64b3p|5zyrcxaOujD|C0pJLMlgSvsq_vLEN_3M@aSJ4bfBfI)Fke2 zT=&Zn|cT8R(`vcJA+{#ZI2>rVSxH!VRUxCa7~Elozl@kb}m21WWY?#@2i%qr_3v6^4gxNSYx6$z7TdQcHBaaftCuQz=!tH+B zj2B1A?Vvr3+d+F6x7!s3=XEU{&$9CVDC%VA+$a&bIuu1ioO~uqnD0+T(Tos25hVoK zs5v*BFGkT7DC&3xwuj{A6Hu-5LM?~8d8tp794`|NpeMXf^=7=nDy`ndCVAX9tu#aD zZ>@9=xrbJ|1%QcFe2OQK*=>=y@ij{#j>i=BO>?j*4%jFu4H+(mFIhYcm>`)Jn|LKt zb8|ZlA94fpPJuBI)bw?l@iL?7yV#|zZo-(wyCE)(ce9Bc=Uy9~H%s{f<`XEfa;}Z8 zSQBwPCNP&eYv&-jXt9RuKWPdi)-^+-WWzj%4nF?}l}h^<6Jy@_M?Qx}V=60E`iln! za{ddRzJl)=JgO-J{rqR)xJ6gkEIEt3TWmGIrzZOqi3$FW=jnbUA5M*BIyl>TogpD* z@b4hCX@buCkX5OdF<#x3f&12hUH=KN3%~SR(#3dIVV8xZ!vKE{?xk1#w<)ZSyBr?Z zP~86#D?!&WULvkZLj?4WY1JUaI$Q?)d=n#7`Ge^N|LM0HVxN3gtA>5@1UU`o46r~g z%>L8i@4k*AO{|9QdOhQcG_f{66jS3jJXMFCGC-%{1~(;QA4d>z4cHawVmbdQ0UjW9 zwkxm}<%RZZIsJh7N8sLs7?J-O*p#%_5cU6)n6JhozQFzufk`YdR@opAvdSKxB$o)o z9A53gHresDw+ZO#s#Vrai~}&`Z?e)j>BZ1c8DpDqjwov;(N!5M$R1dzwbz+iRMcxSpMNw~(% zLrP%RRU5m#|M7o*{-uwN{KvJ>htc7LK!VG0Cry?g3ErU=A(#=crtx&F^sVDtcSsW04MNM{^qQ9 z8{If?MPyQpq>|x+k5d74g6qP#QFa^;GSM?J2w8nD#^`@bM<1)n=N%ef*Cl*@LSka6 zC>a{KS5%rz3^o4-2NA{q;xzD!8h4wfm7JxGfM$WtJJUo5d1)HF6vL#b5A0_sAMkTH zUSZ)uK#fA}C!Jmu)FYVysbPfa|=}b zu$$MErvs6^ygX7;o{mKET7ba4e6>97^2%{{V9m2>Q4HTHPluq<3M_a$ z&&#IO5N61x!|^;Tn+_!K%xt=pP-9Rw9Z%x@*$_?Pz1cJ%rN**s(9!XsZ0e99qAWu) zY8=a^`&m4+0u3m^gDcS75r#Tg)B9-GAx&%M;h8XT>*5&m%UnoG zSUc(XaM^yz)*bd9Fv6L%EOLW}52K>^W+oks;uC=JdWTE3ma#k)#0arM`v6<7PZkYG z;4QG-AVLdP!bGwDj)SKfwxMsaJP>5lfc8#F!EVaqUY7k@~5K)o!1G6qhtE*0(^Pcw@OH%OeW2n3>{Q983H;+)kItOqO3k|lqA?ASB%9w(M80Vf70kPY8 z|CRtkbkXMlanwbV17fKM+U)LL`Yj-)d+ED?IO4_Oojc!C%Y-noSWcFpr-Z_GZbd$? zjjo6xrxO(sQnm}vggRY8q>_FtUIzV*`T5T717t&#_aSx!pYeiuXFQGH{Z>q z`xDew*I#XQ?cJh{v(8U0J|*BDkRqx|QtLybAtr(Nh{RHznd^4z)RRPe8~p~Al#OlY zXg(nu`wb(*+kzK%=&H z_~BRh+|D5cCfivW8U%eggcGQ;ZFQDGxlKW6V1Kk5{R$@G|4lLl1$OAr4RM8kt3=%c z;v@Rr$2yp4K1RPGeN3Z0J~14p1RoT;wUBe%Hd~JN<19~I{oLJ4KJmR{hTQ1qSOfF@ z9Kd3NUz~JLkr(}9te1}XIqvs1zvvk-S`Xa*I82+8Lx%n)Q&i)zyohBJ_{{HOAHsiT ztd_josB7=OLwkULmock6*m;|RO>dKy+21cF>NLR1V$duvvs*#}T48It-pjm}zxl*T z`sjNvMoYWu!{Hmrdg(3ZU;iB&d8&xCS2iTS%HBlHmc zyMH-^R->`W%xBv(8POTWX~^2>rdcWCw3|kxhz=g=n!=ioOUYuDhmIzTBOcnKoLCkm zV@V|3Kh{U*Qp5@$9ZC`VeY8FWtUcMt{~W$!sbXJ%W~3r&It@z|y@DKysZAIiNELI! z(s2*I=F7+rr(>z&7@!~zPu-zHm8YxG1R7< z*a@;s$Q&_rI8C&U4IV5jro}c|T2{0zMH9=4vDmxIio>P;_EVY|9seG#PD}`_D=Std z&?*r8B+_M+O{9xu5g;uEwe2ch=~`Jas7wsf+f6~E*|W6W2^G{rpdaN4Ip4{|I-fc5 z$?V`CZK=gfr#MGhNT0Bm!kPY42hDbZ{5%XLpk-N_i^Yx3;G;-`$l*|X$qbyyPDz-& z_%+^k4}6EACp+k1DCkCq5yJ8;tQ0`$*q*-R0RL&t!JtOruj4y=0N@=2YZ;A(9fsX+ zmsag#5DrTki{}NntE}j!K_@ScK}k@Sqh&8g_#fMQf*0ftpeiO7vW{_WZ5%YOoEYMu zG3CS-2Tm4Zr;ENRC%$vh4)_A`GBFH{P36U04+H#8dr%4VMF?os2cAk09DFcX{@^FX zt?C@0ljX(mFceuF##*GEVXTOn8{QgA%$7(x2;m@-bw-<_?uCn9G(lp)D}_3!cg)|R z!HuP*6~zp&omLdT#Nv*lr3f3tFQw=}MZ~(hQ;6XZdn<_p@w+7)6*nXj92LJwq=V_A zLup!Ee1BC|w~-cB(AeCDTup#OP%Dx)LaaX(Q@Mrumh` zg=89ANpwtY2GJyy*^n=#(rD}tY1bX<)p)A*(5`6)TP@y{0^{*n4C(heOPcBDGwd)g zA3s5*iLt)`K1|6>oKV6o)h%9Xu{}RK#cUz7Xc=x*&h(y zf<{;4EATP?o;pykLrn}6<_bwj4>OnHdiQ5R*1Ia{6Q|gW)3#HLvk_3sOKh~jDYn~K zLOccE1bm~Ef&6p!j8piKoP4C@SDQ(9=AcLOrklZVs_t>u&j8xwl)TF*QHLH0!3?AC z&zj7Z^$f_bo3sp&18g!a>(w64#!_%dW*>p7Ud!&{!jU)|s{L!WtbH!HLu9mZi=XWo z*sOnce2Fi`=t_>cG}tf$n?Bwa4sWwHL$Sj5i69iZv;!f z)R>o{zl2;*tYc$MTgUwdo*=%MzmW(QHXmT?>syT93K?WndsTC7b?UeEom;LIQpNwC z>>Q9io8^PUSE#p=U(@<#OtPH?V|K=DgD?QKz@$;1B4a$$1I`mMeXsAZO z$h7B!4HO_(b+O;{9Z(jlRG5A5qL;<<#`lD7jxU?)w&x^fPReU0^w>O&~t{@vGRXD%5C7O3Or~7~$P=mr1<^LV3-1>k1 zd-DIb-kU#dz1Nx!-IqV_roXL7PD?sanhmY*v1bDy6d^yrr?7!vl$E~JN#$HhChmV-!}6;#hZ9hPev?lY-h$F<+oD8`ik4`fAzlHDVTQxS%2mCy}{U> z;5j@ZA17<*zL2ja?!yU^Kh`F@it^>TS$!d&pa0f<*f8osIs9}kXeCe%=!lV!J=ymF z`WSpF)&as&Q@sxGfbTM9r@tg5$D5*FK_6nyY_CbJ;96kp&6YG@4>V&u&-+}}M6)Vq z3ji*kGj2D(Wk$~d?WAfbsHFmKv+fId_$1M2F{{Y`b#X~nqF9&y&^K2+{&arg;x?Wy zEIdkn5?uWvRF3mAryHdVkd7;6&4%3o@AK*n z@L2q41^q2}u2|P8v{Uf@mMEjLa1qLh2~y%nugtRmx0~-xPnIzc5!@nL%f51gCYNY# z9IDsz7HHg|hMW78H-@(~>NGk#H<4W6W1hn58^F&(2Rn(V%Z9?&a`;K{8oM*&z zs6)Weze=CT96WQ8@gRaJLvge|tTnZ`!4+MgfS2WNVzorwu$y4Wiknx&>@Nn7YkRp? z!qfkRzKQvgms2u+oVHKN&Ec&bmFvPJh+`g5=lq>xqUQTq&=M5NgJLIF0JJ)yS@QYb zJoj0y6_#JnmS&-&QEO`{=`BZ9^!spJf5up#3@JiAL!R*tW7#gmE8JG1Kxn-KUf}koI>WcQFmee#(?I~#1y>`D*;(~ zr}2G-)fZZWyU5yIborfH!uf2uT5kftNNDL-FR~fk9}?k9uyz;GHt%so^$qj!FKcDU z%3qRuc`93q@-(zgQA^q~opV`FLL3iV?hmAcx5HzCcSLNCFiNV~`QOOH=K|*vpfGul zE&5x@d8b9)SM)o=hir}ruk@7h)$=Ojfi`axd$1Z=zx${9 zrY&QY|9#}4Ew^}>7boA#M}(%iBx{L}XMb%2txQ+h1_UTN^( znGTJu*P_O>I;z9LOo%jWAM9KByz%_rYTyjH15Rmg8ozmn0Ead-F?9|8uHuwSNM|(j zUF{?&ci;gq2!K~O?P~19Y4j=nPyYzDk&sQRb?SgQ3r??rk7c z;1;`E6HtCEV`p>YLUJW0^RLYw=WV4169FiA#_8f3c!PBIQ&KH(hw>OV3SkkbnMzk| z;_ehMWxUIzh->71^KFQx8aWnTr5cT37uNE~IjOUo>n}E=_TN{E`xN?n?_KpTy8t*3 zf*)?CBoIrs(V~&FL~D82#lRcT$L-N4Nc`wcG~FexP&uSQ@wU_@&f3+52~OJT5h zdhE5eFe>WlVbcJz^&P_OQioNZ9aZUF$a2rX_tkh?8SKw@H^G|^dP}&KZZL;8z#9#S zodAkoZoaNir}_VTU#dUZ4X3Q&d_be%1nL4}CmJ~iK?VYVlulb*;z#{6i68I;_}V3g z*vlb(01ox=%W|j-2yX@Z>@>I06PW*V2p-V!W!!NX&SCsl9rb4s08UZ5H|S+`Pu*Ng=OdZv;Prbg28MME{SgN+CeI>crAEIx zfYiSY>9cx$KvMu(V@g0cQ33pJXEMM6_WJDgg6Mco(Z|6#UpUws=7f2s%WuFg_cWS@ zC-5j6Q+l?x87hKH+7lqxKcdqlI8fWt)G))W`ZD~*L+MafZ^pW&VE}*Vs zfC7cDXh)oy<+I2+4p(hFlYSf0pV;aHvV%ycu-U_J5SVlDD_oiO^dBUjcK^pZ8GxiS6(d2SVHie;Dq5@!v&pAG1VtW`W7V zVoNLHV4Zg&-s@&_il5hNgTkN`Xw%C7x{5nakPDO&BXst&#+1=($nq^=(gb{G zsf3%xE?a_te&Ll34!O+!zA$i?KRA-%D<3)lVcPK2Dd^iOK<89|3bcT%VphiO7Ero? zEWR`Mbci&+RdoU^xaUQ_<>II|xWU4PZgK-5{yS6uQKsqvW8}!hMfJ0&Yu7n$#MC@`PSy_Q z({s8TTI2lYz8&kE!c4FzZi{ZSuo?=>SD>9H5O5zTtLDf5{l=vEUpyY34&aNjFz5nD zI87q@FnW!TFZe1$UoOZ%Y6Cn}+8w5PfcVG=rBvfPIT%~bvG1XkN*O*Qf=LX=3;np_7eF z3Y=)+ZtvjJ3tU=8=*KifAM0K*(=dvVFaCt5T8U6(vxC7*KoN5N7X=; zu6N+184}Cg|D^s>EHcL`Y>%u8uM#}h4lo~EjxwcJ>+E=V$wpI2TqBxk7hCKz^2_HQHk5Q3VMPMs=K>N42M2QCAa>>Ivde#fw~|(R_A$=r2bR`v~FC8=}!t zZ=J(r!GF%y+W{c&R*zAAuo_1!fG|8PH)KJuF59>#OM-JcoSIZOAo-usa9CtZn^p}+ zm)4ds3I}^4V!aIm2_ar+FY_6T813*qvafBO;-*<(2L#+`gL`>r=&g^JYr_~?`<+89 zaME{9#DI)i6()MS=?k~$;fY!kCYE_-Xt-&opB*Wt1%Bod8yK%$^s7eWJtdB<@a^oU z8?iD_z%oR`Y-6>9c9!*3Ri5ATexWp3p%5wf9z(p*VRICDH_mo|IEO+8q`pQtTOt-WYWzk~Mia&NL2?xO83G1wioJ6Uw}5d2||dE$^i*+(aRVuhc6 z^Rqk1fFP)*X%R>o!s)AUu@b>SBgM%`nh+(vi2A~Y0xROFO@bJmFo^KuK(g^3O7Q7{ zG5KE{JP)59FxASX+?=xMMu%4uwXutRb{YU5EeB0?igqqq?h=Pw=QX$_|KPoaO*S%` zTo3+x5^L;HTZ7^=2c30@)le?Dm|gZbjZUCPSZa&g2ibvWj$Mp$Bp`jzTuh1L!?eG8#6(e}%6HiPEU{Ct}mgV&4Ff3~xN2C)?| zgclLn(w>SOFrjP>h@Q@L1h_fsq~0#^sf#YS;K!PZoZ0T{HeB9ry7?77A|(?BgC8)= z(GUwj!=pwd3{MPM0UBm7DP9W6n6DA^z-_g6KrOPv^8V@>4>pC;`#Ip5$9#X_fanRO zg*_EHTO9W+fw!QGesPH%ZtCU{?Ys%dS!Ry@t$dbx$)=Jj5|GWFfxx_2E^{P_HApDnu0~X#7HF_NEn}9yZ4@I&un>j__@~s%UWF(Frz0 zRVF9I7*FcIz!dnNk?(p5Y@s-4shi%%F@9T^=*P8z^zL++=t2(2+3(FW=`_VX1` z?KTVfPy`w6>dlN1!pUB=@o-&_XkdOTj?)EZBnX3$eSVH<@9(<`?rEbjmMA zxanKJ*y&lWA#16h&ich6KOueHbP?tn^8d{X$j3>mq(Qi>Z98y3;qeNPS%?e=>qF-h=Wr%@LE5ZT|`8cG-aMs9WL=HYv7tBv^V+J$r zQY~B68M{gQ#1HbDAbs_i_$^5L9utSdh8ljyQIDW|uh21KdbzI%BJ~cND&$YWg?pK$ zSD7v_78O&ezn!~=!!C4`mq87x(P4r&WFL8rM0cuz3xiC(jb(b2#HQ$O%G~KWcnJ$M z#C;dFl{ufQD<$Il}MP_dK5Rb+FmvvD9N%sGl@V=drj7epy-d6e3>1Qyt-4 zWCEhZ9M?2l#py`hiz&i&MBay=Pdx<(1JL6gmaG<3`B7yb;+XGm<9)%;9d9!9zM?WQ z_Fd)MV|k8{g_$q6BQ({y6-&T&49lZuR zv5h`Ve(DA93hdzAi~22@WVQ?Lfax2U7X0X}50G%6UuNSUbEsNJmsn+|>rU~Dy#-Vj zmmTGhGs?7mN8fz{^KUWHwsPOv2gvvrZUX_X9H@0CaJR;RXn?36VVO4kZi9aU zeZ@N2a0iDWT4}7J@vno5p}p2{zX}-%QgXfFbpqeoC&p45kya5tMtp31C*ib&_TBg- z{7DUkcr(7I;>S}Dbz@HS`%v(Tes)@A7ZU(Zv5URt#7}%FdolF-a)iV;rTEe|>lvMK znzUhK;t`5s^2I?i{H(?#8wWKoZ5d%c!qjcx^73E(Sa9e@CB3S3^+yUo!#HCbY7krW} zIl#isVJ$K!!ObVM+Wx>U4&QQo^k1pakid_r+rnVOLCgxc8estkkEzOZmNmVO@hjA) zoBQ}!_p{t|(Kbha1+@5YYa~Yx&?!4CVITX#IHY*fbDk=`4!deMW@AVXSr5r$ib5X( zkvYB=yD{uH7JTk?8NrVB4axvH{0eo*jkypR4YHKC9{)v&V$k9AG6&)&`S=ncC<9Fw zios&uUs!&z>rZ3;sJrPp2eyJb@NEP_fxt8ZAU;XZom`UUf|1z*_dUtFuQ#ZT4VwaP zM36S%g^q#`2b|Ho@OPEvG?#k(q6@P!^bvFzG>vgVIbanyrbI8 z+h|NBP;`DN-2d+55CMSh1CJzlHI4fV%a6zX?{ob}urFKcFYJD!KUe^vFYAKdYUPaj zje0NzP!BkE)XT@Lk2LZ-srr?O3tiB+$vXm2e(MmbZNM*MOdV6%$(hj?bi{B$`KlN#f(4K$`Zm5oEW|Z4l7; z_NYqLk4o%`5M$cQMo69r2{UoEH%ojP8@cL6NaC|lB_i)(2B0UIDqq(bDbx7Woc z`xF~P-mU?%oOzg5V4{^xkp_=ZUm*Cj$hJ-}{4KE|YqcW*cb;?5WH9QO8u*8j(ZYR9 z3iM3O2p^*|!Edxf#%%S0Xcm_~(K*P$Y5ji0Oj&NjJpRqrNgv^77XA)?G1*D2{c!r4 zVMA7TA2SJU@I9`&+*#H{@u%2m^j6G-FqWpzguxRrW=|Nx6E^D_&Lr;;fClrc0R1cu zdOP&Sr^3Y)8}$hn$80k-`~U~x)NtleoDeQfIO36mhL?qliO%(eAD4Wz8aMelz0glP z!^OA$wGuxr1i8ZPVROw9uUr}e_&3^lT^!cwN5tYWCqVvM`+QgvKyLT7Ej`Zk0W;3DTQ)f$7*Xugg)q$;YuPy?9? z7{!dAdF!>x9?{hyj6qI{hbO{Y@x`KtYW3 zPO}eAOJGbZw#ReNehtvmcIIsbkO(+yhUNMX!8t9&uN24ly8*Hx=pPm5)^e>e#M*`W zld46(EN}2(0c7K8$Z!>;O-9uC9bfA0ifxvHwb0 zkc)SAzxl*=X(%0VL)^WnV47?Qqj(PhoYjZWaqSqE=jHQ|2PdQ7wu;8=%7 z%|;7(5_jT82%aIRssR|NLQ7rY=UAaNhQ)i4*|z8X{T$;1jMzr=Z}Sc`N#f(i@1o_S zxVuqiqHNe1mLPtpFSW+U5&hS!*w3y6k7qy%S@I2$>4G&9xu+FA5Cg8zUBeKaSVhVU>SwX zJ01`ijniATAdV!^eM}@KEJe-|{f*rWF-TlPSV3tyF$Ji4n1nksK#txYj>v+E#zAuZ zGr%+)71Y=xd62A&A>yRIFYbtZ4ph~~;H1(^qKWoUD4JA$@+&T{>aZ}4IV}@0Pujx9 zm4|t(23C+4(o*#vJ;l{#3iSHqg>tg=A&^O9E+5eOuE!K!ab$~@(!{?oW56`**SI6%b z(BMC0%tg!R&Wi!x%~1oNGiNH_{ZKC5SOIrGN>3{HWG>Bj|2a4EX90Ix0xYV#??DVN z)4%8s-(9k&EZ*JfdrgW?!s1m05qp6D+s3HJWB?hjBCrY2cp3y}Jp1hrW*-QLhfwU^ z2v8(0mcNF>-|Bh%SZ$kTUlGB8ppg+`rl&38$NC`6fC4_aL*mDQ2xF`Rkx`h9_1?xN z2Y`U8v~roT60RnDegQDu*_j{R@sc1^Ve?jh6iCSq`CTkfxWHS2cTrGB89Gk(%jh-1|0b(0vaOA>888|@k)pd05 zp;}@l@WHhZ=ZUUnh*Netks+2i`bu2r?4r4~#Ap|dt|d;o2suCmuCE1#cuo)U(1J{S zm^3a^oJRnp24aerj%A8fUfP-|=KDHJWbO6Syex6SPh+w~p8$Q5C8h@G=S(pa@va(( zg+c04TkHzb#Vn34bR;3nUmJeIzyEhd-Zt7}WqcXh-!rD$IrMklYSBSys0 z%sOIKe0KM2#9`PbXJ(5%W%_Yf+b7e>x?*@TZLcdXCBKcFcByovo*0=*o9l_sQ)yv6 zu`iXz*AtghsdqimD~*1wD_WQ32U$>-y4M$9mZdB8#Kv;8sJ=K}uB#kdUo5UbyX%Xc z6=-FBv8iI(clE`-bXs(qIG;`vZWEI$wL;;!mFdK7VoPQE@-{K13iY~OEUrS=ZWBLO z;j6=|y*u%CF}MadGrtB6Yaq7Opw11%yqYwlf!Nvr^8z!nK|=zgbSoO}G>!x7B)iT* z!voj35gH9}A!;-$;%De{