@@ -32,15 +32,7 @@ The principle of seata-go is consistent with that of Seata-java, which is compos | |||
## How to run? | |||
1. Start the seata-server service with the docker file under the sample/dockercomposer folder | |||
~~~shell | |||
cd sample/dockercompose | |||
docker-compose -f docker-compose.yml up -d seata-server | |||
~~~ | |||
2. Just execute the main function under samples/ in the root directory | |||
if you want to know how to use and integrate seata-go, please refer to [seata/seata-go-samples](https://github.com/seata/seata-go-samples) | |||
## How to join us? | |||
@@ -8,9 +8,9 @@ | |||
## 什么是 seata-go? | |||
Seata是一个非常成熟的分布式事务框架,在Java领域是事实上的分布式事务技术标准平台。Seata-go 是 seata 多语言生态中的Go语言实现版本,实现了 Java 和 Go 之间的互通,让 Go 开发者也能使用 seata-go 来实现分布式事务。请访问[Seata 官网](https://seata.io/zh-cn/)查看快速开始和文档。 | |||
Seata 是一个非常成熟的分布式事务框架,在 Java 领域是事实上的分布式事务技术标准平台。Seata-go 是 seata 多语言生态中的 Go 语言实现版本,实现了 Java 和 Go 之间的互通,让 Go 开发者也能使用 seata-go 来实现分布式事务。请访问[Seata 官网](https://seata.io/zh-cn/)查看快速开始和文档。 | |||
Seata-go 的原理和 Seata-java 保持一致,都是由 TM、RM 和 TC 组成,其中 TC 的功能复用 Java 的,TM和RM功能后面会和 Seata-java对齐,整体流程如下: | |||
Seata-go 的原理和 Seata-java 保持一致,都是由 TM、RM 和 TC 组成,其中 TC 的功能复用 Java 的,TM 和 RM 功能后面会和 Seata-java 对齐,整体流程如下: | |||
 | |||
@@ -26,20 +26,13 @@ Seata-go 的原理和 Seata-java 保持一致,都是由 TM、RM 和 TC 组成 | |||
- [x] 空补偿 | |||
- [ ] 配置中心 | |||
- [ ] 注册中心 | |||
- [ ] Metric监控 | |||
- [x] Sample例子 | |||
- [ ] Metric 监控 | |||
- [x] Sample 例子 | |||
## 如何运行项目? | |||
1. 用 sample/dockercomposer 文件夹下的 docker 文件启动 seata-server 服务 | |||
~~~shell | |||
cd sample/dockercompose | |||
docker-compose -f docker-compose.yml up -d seata-server | |||
~~~ | |||
2. 执行根目录下的 samples/ 下的 main 函数即可 | |||
关于如何使用和集成 seata-go 的示例,可以参考 [seata/seata-go-samples](https://github.com/seata/seata-go-samples) | |||
## 如何给Seata-go贡献代码? | |||
@@ -8,6 +8,7 @@ require ( | |||
github.com/agiledragon/gomonkey/v2 v2.2.0 | |||
github.com/apache/dubbo-getty v1.4.9-0.20220825024508-3da63c3257fa | |||
github.com/arana-db/parser v0.2.5 | |||
github.com/bluele/gcache v0.0.2 | |||
github.com/dsnet/compress v0.0.1 | |||
github.com/dubbogo/gost v1.12.6-0.20220824084206-300e27e9e524 | |||
github.com/gin-gonic/gin v1.8.0 | |||
@@ -17,7 +18,6 @@ require ( | |||
github.com/google/uuid v1.3.0 | |||
github.com/knadh/koanf v1.4.3 | |||
github.com/natefinch/lumberjack v2.0.0+incompatible | |||
github.com/parnurzeal/gorequest v0.2.16 | |||
github.com/pierrec/lz4/v4 v4.1.17 | |||
github.com/pkg/errors v0.9.1 | |||
github.com/prometheus/client_golang v1.12.2 | |||
@@ -27,61 +27,28 @@ require ( | |||
go.uber.org/atomic v1.9.0 | |||
go.uber.org/zap v1.21.0 | |||
google.golang.org/grpc v1.49.0 | |||
google.golang.org/protobuf v1.28.1 | |||
gopkg.in/yaml.v2 v2.4.0 | |||
vimagination.zapto.org/byteio v0.0.0-20200222190125-d27cba0f0b10 | |||
) | |||
require ( | |||
contrib.go.opencensus.io/exporter/prometheus v0.4.1 // indirect | |||
github.com/RoaringBitmap/roaring v1.2.0 // indirect | |||
github.com/Workiva/go-datastructures v1.0.52 // indirect | |||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect | |||
github.com/alibaba/sentinel-golang v1.0.4 // indirect | |||
github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 // indirect | |||
github.com/apache/dubbo-go-hessian2 v1.11.1 // indirect | |||
github.com/benbjohnson/clock v1.1.0 // indirect | |||
github.com/beorn7/perks v1.0.1 // indirect | |||
github.com/bits-and-blooms/bitset v1.2.0 // indirect | |||
github.com/bluele/gcache v0.0.2 // indirect | |||
github.com/buger/jsonparser v1.1.1 // indirect | |||
github.com/census-instrumentation/opencensus-proto v0.2.1 // indirect | |||
github.com/cespare/xxhash/v2 v2.1.2 // indirect | |||
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 // indirect | |||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 // indirect | |||
github.com/coreos/go-semver v0.3.0 // indirect | |||
github.com/coreos/go-systemd/v22 v22.3.2 // indirect | |||
github.com/creasty/defaults v1.5.2 // indirect | |||
github.com/davecgh/go-spew v1.1.1 // indirect | |||
github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 // indirect | |||
github.com/dubbogo/grpc-go v1.42.10 // indirect | |||
github.com/dubbogo/triple v1.1.9 // indirect | |||
github.com/emicklei/go-restful/v3 v3.8.0 // indirect | |||
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 // indirect | |||
github.com/envoyproxy/protoc-gen-validate v0.1.0 // indirect | |||
github.com/ghodss/yaml v1.0.0 // indirect | |||
github.com/gin-contrib/sse v0.1.0 // indirect | |||
github.com/go-co-op/gocron v1.9.0 // indirect | |||
github.com/go-errors/errors v1.0.1 // indirect | |||
github.com/go-kit/log v0.1.0 // indirect | |||
github.com/go-logfmt/logfmt v0.5.0 // indirect | |||
github.com/go-logr/logr v1.2.3 // indirect | |||
github.com/go-logr/stdr v1.2.2 // indirect | |||
github.com/go-ole/go-ole v1.2.6 // indirect | |||
github.com/go-playground/locales v0.14.0 // indirect | |||
github.com/go-playground/universal-translator v0.18.0 // indirect | |||
github.com/go-resty/resty/v2 v2.7.0 // indirect | |||
github.com/gogo/protobuf v1.3.2 // indirect | |||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect | |||
github.com/golang/protobuf v1.5.2 // indirect | |||
github.com/golang/snappy v0.0.4 // indirect | |||
github.com/gorilla/websocket v1.4.2 // indirect | |||
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect | |||
github.com/hashicorp/errwrap v1.1.0 // indirect | |||
github.com/hashicorp/go-multierror v1.1.1 // indirect | |||
github.com/hashicorp/vault/sdk v0.6.0 // indirect | |||
github.com/jinzhu/copier v0.3.5 // indirect | |||
github.com/jmespath/go-jmespath v0.4.0 // indirect | |||
github.com/json-iterator/go v1.1.12 // indirect | |||
github.com/k0kubun/pp v3.0.1+incompatible // indirect | |||
github.com/leodido/go-urn v1.2.1 // indirect | |||
@@ -89,65 +56,41 @@ require ( | |||
github.com/magiconair/properties v1.8.6 // indirect | |||
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect | |||
github.com/mitchellh/copystructure v1.2.0 // indirect | |||
github.com/mitchellh/go-homedir v1.1.0 // indirect | |||
github.com/mitchellh/mapstructure v1.5.0 // indirect | |||
github.com/mitchellh/reflectwalk v1.0.2 // indirect | |||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | |||
github.com/modern-go/reflect2 v1.0.2 // indirect | |||
github.com/mschoch/smat v0.2.0 // indirect | |||
github.com/nacos-group/nacos-sdk-go v1.1.2 // indirect | |||
github.com/opentracing/opentracing-go v1.2.0 // indirect | |||
github.com/pelletier/go-toml/v2 v2.0.1 // indirect | |||
github.com/pierrec/lz4 v2.5.2+incompatible // indirect | |||
github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63 // indirect | |||
github.com/pmezard/go-difflib v1.0.0 // indirect | |||
github.com/polarismesh/polaris-go v1.1.0 // indirect | |||
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect | |||
github.com/prometheus/client_model v0.2.0 // indirect | |||
github.com/prometheus/procfs v0.7.3 // indirect | |||
github.com/prometheus/statsd_exporter v0.21.0 // indirect | |||
github.com/robfig/cron/v3 v3.0.1 // indirect | |||
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect | |||
github.com/shirou/gopsutil/v3 v3.22.2 // indirect | |||
github.com/spaolacci/murmur3 v1.1.0 // indirect | |||
github.com/tklauser/go-sysconf v0.3.10 // indirect | |||
github.com/tklauser/numcpus v0.4.0 // indirect | |||
github.com/uber/jaeger-client-go v2.29.1+incompatible // indirect | |||
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect | |||
github.com/ugorji/go/codec v1.2.7 // indirect | |||
github.com/yusufpapurcu/wmi v1.2.2 // indirect | |||
go.etcd.io/etcd/api/v3 v3.5.5 // indirect | |||
go.etcd.io/etcd/client/pkg/v3 v3.5.5 // indirect | |||
go.etcd.io/etcd/client/v3 v3.5.5 // indirect | |||
go.opencensus.io v0.23.0 // indirect | |||
go.opentelemetry.io/otel v1.9.0 // indirect | |||
go.opentelemetry.io/otel/trace v1.9.0 // indirect | |||
go.uber.org/multierr v1.7.0 // indirect | |||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect | |||
golang.org/x/text v0.3.7 // indirect | |||
google.golang.org/appengine v1.6.7 // indirect | |||
google.golang.org/protobuf v1.28.1 // indirect | |||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect | |||
gopkg.in/yaml.v3 v3.0.1 // indirect | |||
) | |||
require ( | |||
cloud.google.com/go v0.93.3 // indirect | |||
github.com/BurntSushi/toml v1.1.0 // indirect | |||
github.com/elazarl/goproxy v0.0.0-20220901064549-fbd10ff4f5a1 // indirect | |||
github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect | |||
github.com/go-playground/validator/v10 v10.11.1 // indirect | |||
github.com/klauspost/compress v1.15.11 | |||
github.com/mattn/go-colorable v0.1.8 // indirect | |||
github.com/mattn/go-isatty v0.0.16 // indirect | |||
github.com/pelletier/go-toml v1.9.3 // indirect | |||
github.com/pingcap/log v0.0.0-20210906054005-afc726e70354 // indirect | |||
go.etcd.io/etcd/client/v2 v2.305.0 // indirect | |||
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect | |||
golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect | |||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect | |||
golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 // indirect | |||
google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 // indirect | |||
gopkg.in/ini.v1 v1.62.0 // indirect | |||
moul.io/http2curl v1.0.0 // indirect | |||
vimagination.zapto.org/memio v0.0.0-20200222190306-588ebc67b97d // indirect | |||
) |
@@ -13,17 +13,6 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV | |||
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= | |||
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= | |||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= | |||
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= | |||
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= | |||
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= | |||
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= | |||
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= | |||
cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= | |||
cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= | |||
cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= | |||
cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= | |||
cloud.google.com/go v0.93.3 h1:wPBktZFzYBcCZVARvwVKqH1uEj+aLXofJEtrb4oOsio= | |||
cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= | |||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= | |||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= | |||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= | |||
@@ -42,7 +31,6 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo | |||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= | |||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= | |||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= | |||
contrib.go.opencensus.io/exporter/prometheus v0.4.1 h1:oObVeKo2NxpdF/fIfrPsNj6K0Prg0R0mHM+uANlYMiM= | |||
contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZsuFq26mDGid/JwCEXp+gTG/9U= | |||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= | |||
dubbo.apache.org/dubbo-go/v3 v3.0.3-rc2 h1:avSjSWlQQVqRtHP48uv9SSkUutRHnGcYbmvP+RgzV3c= | |||
@@ -54,7 +42,6 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym | |||
github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= | |||
github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= | |||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= | |||
github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= | |||
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= | |||
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= | |||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= | |||
@@ -66,9 +53,7 @@ github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrU | |||
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= | |||
github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI= | |||
github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= | |||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= | |||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= | |||
github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= | |||
github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= | |||
github.com/agiledragon/gomonkey/v2 v2.2.0 h1:QJWqpdEhGV/JJy70sZ/LDnhbSlMrqHAWHcNOjz1kyuI= | |||
github.com/agiledragon/gomonkey/v2 v2.2.0/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY= | |||
@@ -78,9 +63,7 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy | |||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | |||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | |||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= | |||
github.com/alibaba/sentinel-golang v1.0.4 h1:i0wtMvNVdy7vM4DdzYrlC4r/Mpk1OKUUBurKKkWhEo8= | |||
github.com/alibaba/sentinel-golang v1.0.4/go.mod h1:Lag5rIYyJiPOylK8Kku2P+a23gdKMMqzQS7wTnjWEpk= | |||
github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 h1:zOVTBdCKFd9JbCKz9/nt+FovbjPFmb7mUnp8nH9fQBA= | |||
github.com/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk= | |||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= | |||
github.com/apache/dubbo-getty v1.4.9-0.20220825024508-3da63c3257fa h1:siT9WaTLlbR8McWqiCAyo5DtH3NNPWS4D6oJXjbX0tc= | |||
@@ -125,11 +108,9 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm | |||
github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw= | |||
github.com/bluele/gcache v0.0.2/go.mod h1:m15KV+ECjptwSPxKhOhQoAFQVtUFjTVkc3H8o0t/fp0= | |||
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= | |||
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= | |||
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= | |||
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= | |||
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= | |||
github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= | |||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= | |||
github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= | |||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= | |||
@@ -144,15 +125,12 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp | |||
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= | |||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= | |||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= | |||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | |||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | |||
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI= | |||
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= | |||
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | |||
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | |||
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | |||
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | |||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 h1:zH8ljVhhq7yC0MIeUL/IviMtY8hx2mK8cN9wEYb8ggw= | |||
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | |||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= | |||
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= | |||
@@ -162,12 +140,10 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE | |||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= | |||
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= | |||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | |||
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= | |||
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | |||
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | |||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | |||
github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= | |||
github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= | |||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= | |||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= | |||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= | |||
@@ -190,46 +166,35 @@ github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= | |||
github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= | |||
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= | |||
github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= | |||
github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 h1:XoR8SSVziXe698dt4uZYDfsmHpKLemqAgFyndQsq5Kw= | |||
github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= | |||
github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8= | |||
github.com/dubbogo/gost v1.11.18/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI= | |||
github.com/dubbogo/gost v1.12.6-0.20220824084206-300e27e9e524 h1:QgDFv0rwH6RTVSpYc9oEZsAGM4DGg0YN5XHk69vZshU= | |||
github.com/dubbogo/gost v1.12.6-0.20220824084206-300e27e9e524/go.mod h1:0YHTGJtjHiYlWtVEkZnyrvhr7rR+23GczNaJrgc2v38= | |||
github.com/dubbogo/grpc-go v1.42.9/go.mod h1:F1T9hnUvYGW4JLK1QNriavpOkhusU677ovPzLkk6zHM= | |||
github.com/dubbogo/grpc-go v1.42.10 h1:CoyCdtqKJEar/3rPa6peZbDqYZ/mVsCqAxB6TfTSkhQ= | |||
github.com/dubbogo/grpc-go v1.42.10/go.mod h1:JMkPt1mIHL96GAFeYsMoMjew6f1ROKycikGzZQH1s5U= | |||
github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU= | |||
github.com/dubbogo/net v0.0.4/go.mod h1:1CGOnM7X3he+qgGNqjeADuE5vKZQx/eMSeUkpU3ujIc= | |||
github.com/dubbogo/triple v1.0.9/go.mod h1:1t9me4j4CTvNDcsMZy6/OGarbRyAUSY0tFXGXHCp7Iw= | |||
github.com/dubbogo/triple v1.1.9 h1:U3ZDh9tyeitp/arSB5qR4wFnbK8MMYm/F4kzn6JokaA= | |||
github.com/dubbogo/triple v1.1.9/go.mod h1:9pgEahtmsY/avYJp3dzUQE8CMMVe1NtGBmUhfICKLJk= | |||
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= | |||
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= | |||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= | |||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= | |||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= | |||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= | |||
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= | |||
github.com/elazarl/goproxy v0.0.0-20220901064549-fbd10ff4f5a1 h1:ecIiM5NYeEOhy5trm8xel6wpUhYH+QWteUKnwcbCMl4= | |||
github.com/elazarl/goproxy v0.0.0-20220901064549-fbd10ff4f5a1/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= | |||
github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= | |||
github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= | |||
github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= | |||
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= | |||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= | |||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= | |||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= | |||
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= | |||
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | |||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | |||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= | |||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= | |||
github.com/envoyproxy/go-control-plane v0.10.0/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= | |||
github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= | |||
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 h1:xvqufLtNVwAhN8NMyWklVgxnWohi+wtMGQMhtxexlm0= | |||
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= | |||
github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= | |||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= | |||
github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= | |||
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= | |||
@@ -239,27 +204,21 @@ github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL | |||
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= | |||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= | |||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= | |||
github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8= | |||
github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= | |||
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= | |||
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= | |||
github.com/frankban/quicktest v1.10.0 h1:Gfh+GAJZOAoKZsIZeZbdn2JF10kN1XHNvjsvQK8gVkE= | |||
github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= | |||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | |||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= | |||
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= | |||
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= | |||
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= | |||
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= | |||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | |||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= | |||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= | |||
github.com/gin-gonic/gin v1.8.0 h1:4WFH5yycBMA3za5Hnl425yd9ymdw1XPm4666oab+hv4= | |||
github.com/gin-gonic/gin v1.8.0/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= | |||
github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= | |||
github.com/go-co-op/gocron v1.9.0 h1:+V+DDenw3ryB7B+tK1bAIC5p0ruw4oX9IqAsdRnGIf0= | |||
github.com/go-co-op/gocron v1.9.0/go.mod h1:DbJm9kdgr1sEvWpHCA7dFFs/PGHPMil9/97EXCRPr4k= | |||
github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= | |||
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= | |||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= | |||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= | |||
@@ -267,18 +226,14 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 | |||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | |||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | |||
github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= | |||
github.com/go-kit/log v0.1.0 h1:DGJh0Sm43HbOeYDNnVZFl8BvcYVvjD5bqYJvp0REbwQ= | |||
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= | |||
github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= | |||
github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= | |||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= | |||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | |||
github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= | |||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= | |||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | |||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= | |||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= | |||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= | |||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= | |||
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= | |||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= | |||
@@ -292,12 +247,10 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl | |||
github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= | |||
github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= | |||
github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= | |||
github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= | |||
github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= | |||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= | |||
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= | |||
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= | |||
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= | |||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | |||
github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= | |||
github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= | |||
@@ -310,7 +263,6 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a | |||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | |||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= | |||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= | |||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= | |||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= | |||
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= | |||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= | |||
@@ -321,7 +273,6 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er | |||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | |||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | |||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | |||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= | |||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | |||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | |||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | |||
@@ -348,12 +299,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD | |||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | |||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | |||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | |||
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= | |||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= | |||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | |||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | |||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | |||
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | |||
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= | |||
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | |||
github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= | |||
@@ -364,7 +313,6 @@ github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2 | |||
github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= | |||
github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs= | |||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | |||
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= | |||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | |||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= | |||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= | |||
@@ -373,7 +321,6 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ | |||
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | |||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | |||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | |||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | |||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | |||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | |||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | |||
@@ -385,8 +332,6 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN | |||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | |||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | |||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | |||
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | |||
github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= | |||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | |||
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= | |||
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | |||
@@ -394,13 +339,6 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf | |||
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | |||
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | |||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | |||
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||
github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||
github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | |||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | |||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | |||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | |||
@@ -410,7 +348,6 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ | |||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | |||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= | |||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | |||
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw= | |||
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | |||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= | |||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= | |||
@@ -420,16 +357,12 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U | |||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | |||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= | |||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= | |||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0= | |||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= | |||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= | |||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= | |||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | |||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | |||
github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= | |||
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= | |||
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= | |||
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= | |||
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= | |||
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= | |||
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= | |||
@@ -438,7 +371,6 @@ github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyN | |||
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= | |||
github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= | |||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= | |||
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= | |||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= | |||
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= | |||
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= | |||
@@ -453,7 +385,6 @@ github.com/hashicorp/go-kms-wrapping/entropy/v2 v2.0.0/go.mod h1:xvb32K2keAc+R8D | |||
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= | |||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= | |||
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= | |||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= | |||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= | |||
github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= | |||
github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= | |||
@@ -493,7 +424,6 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J | |||
github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= | |||
github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= | |||
github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= | |||
github.com/hashicorp/vault/sdk v0.6.0 h1:6Z+In5DXHiUfZvIZdMx7e2loL1PPyDjA4bVh9ZTIAhs= | |||
github.com/hashicorp/vault/sdk v0.6.0/go.mod h1:+DRpzoXIdMvKc88R4qxr+edwy/RvH5QK8itmxLiDHLc= | |||
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= | |||
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= | |||
@@ -502,7 +432,6 @@ github.com/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEF | |||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= | |||
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= | |||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | |||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | |||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= | |||
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= | |||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag= | |||
@@ -511,14 +440,11 @@ github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyX | |||
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= | |||
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= | |||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= | |||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= | |||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= | |||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= | |||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= | |||
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= | |||
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= | |||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= | |||
github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= | |||
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= | |||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= | |||
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= | |||
@@ -532,7 +458,6 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr | |||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | |||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= | |||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= | |||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= | |||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= | |||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= | |||
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= | |||
@@ -604,7 +529,6 @@ github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFW | |||
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= | |||
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= | |||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | |||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= | |||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= | |||
github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= | |||
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= | |||
@@ -632,7 +556,6 @@ github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOl | |||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | |||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | |||
github.com/nacos-group/nacos-sdk-go v1.0.8/go.mod h1:hlAPn3UdzlxIlSILAyOXKxjFSvDJ9oLzTJ9hLAK1KzA= | |||
github.com/nacos-group/nacos-sdk-go v1.1.2 h1:lWTpf5SXLetQetS7p31eGic/ncqsnn0Zbau1i3eC25Y= | |||
github.com/nacos-group/nacos-sdk-go v1.1.2/go.mod h1:I8Vj4M8ZLpBk7EY2A8RXQE1SbfCA7b56TJBPIFTrUYE= | |||
github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= | |||
github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= | |||
@@ -657,15 +580,12 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go | |||
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= | |||
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= | |||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= | |||
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= | |||
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= | |||
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= | |||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= | |||
github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= | |||
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= | |||
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= | |||
github.com/parnurzeal/gorequest v0.2.16 h1:T/5x+/4BT+nj+3eSknXmCTnEVGSzFzPGdpqmUVVZXHQ= | |||
github.com/parnurzeal/gorequest v0.2.16/go.mod h1:3Kh2QUMJoqw3icWAecsyzkpY7UzRfDhbRdTjtNwNiUE= | |||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= | |||
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= | |||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= | |||
@@ -678,7 +598,6 @@ github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZO | |||
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= | |||
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= | |||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | |||
github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= | |||
github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= | |||
github.com/pierrec/lz4/v4 v4.1.17 h1:kV4Ip+/hUBC+8T6+2EgburRtkE9ef4nbY3f4dFhGjMc= | |||
github.com/pierrec/lz4/v4 v4.1.17/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= | |||
@@ -696,7 +615,6 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE | |||
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= | |||
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/polarismesh/polaris-go v1.1.0 h1:nFvn3q3XaVFhzF7pBnIySrN0ZZBwvbbYXC5r2DpsQN0= | |||
github.com/polarismesh/polaris-go v1.1.0/go.mod h1:tquawfjEKp1W3ffNJQSzhfditjjoZ7tvhOCElN7Efzs= | |||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= | |||
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= | |||
@@ -745,17 +663,14 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O | |||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | |||
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= | |||
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | |||
github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= | |||
github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= | |||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= | |||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= | |||
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= | |||
github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= | |||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= | |||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= | |||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= | |||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= | |||
github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= | |||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | |||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= | |||
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= | |||
@@ -779,19 +694,14 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx | |||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | |||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= | |||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= | |||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= | |||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= | |||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= | |||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | |||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | |||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= | |||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | |||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | |||
github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5 h1:GJTW+uNMIV1RKwox+T4aN0/sQlYRg78uHZf2H0aBcDw= | |||
github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= | |||
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= | |||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | |||
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= | |||
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | |||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= | |||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | |||
@@ -808,7 +718,6 @@ github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3 | |||
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= | |||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | |||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | |||
github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= | |||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= | |||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | |||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | |||
@@ -832,13 +741,10 @@ github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hM | |||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | |||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | |||
github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | |||
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA= | |||
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | |||
github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3/go.mod h1:QDlpd3qS71vYtakd2hmdpqhJ9nwv6mD6A30bQ1BPBFE= | |||
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= | |||
github.com/uber/jaeger-client-go v2.29.1+incompatible h1:R9ec3zO3sGpzs0abd43Y+fBZRJ9uiH6lXyR/+u6brW4= | |||
github.com/uber/jaeger-client-go v2.29.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= | |||
github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= | |||
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= | |||
github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= | |||
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= | |||
@@ -848,7 +754,6 @@ github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95 | |||
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= | |||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= | |||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= | |||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= | |||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= | |||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | |||
@@ -859,31 +764,19 @@ github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPR | |||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= | |||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= | |||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= | |||
go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= | |||
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= | |||
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= | |||
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= | |||
go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw= | |||
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= | |||
go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= | |||
go.etcd.io/etcd/api/v3 v3.5.5 h1:BX4JIbQ7hl7+jL+g+2j5UAr0o1bctCm6/Ct+ArBGkf0= | |||
go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= | |||
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= | |||
go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= | |||
go.etcd.io/etcd/client/pkg/v3 v3.5.5 h1:9S0JUVvmrVl7wCF39iTQthdaaNIiAaQbmK75ogO6GU8= | |||
go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= | |||
go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU= | |||
go.etcd.io/etcd/client/v2 v2.305.0 h1:ftQ0nOOHMcbMS3KIaDQ0g5Qcd6bhaBrQT6b89DfwLTs= | |||
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= | |||
go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8= | |||
go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= | |||
go.etcd.io/etcd/client/v3 v3.5.5 h1:q++2WTJbUgpQu4B6hCuT7VkdwaTP7Qz6Daak3WzbrlI= | |||
go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= | |||
go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0 h1:3yLUEC0nFCxw/RArImOyRUI4OAFbg4PFpBbAhSNzKNY= | |||
go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY= | |||
go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0 h1:DvYJotxV9q1Lkn7pknzAbFO/CLtCVidCr2K9qRLJ8pA= | |||
go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0/go.mod h1:FAwse6Zlm5v4tEWZaTjmNhe17Int4Oxbu7+2r0DiD3w= | |||
go.etcd.io/etcd/server/v3 v3.5.0-alpha.0 h1:fYv7CmmdyuIu27UmKQjS9K/1GtcCa+XnPKqiKBbQkrk= | |||
go.etcd.io/etcd/server/v3 v3.5.0-alpha.0/go.mod h1:tsKetYpt980ZTpzl/gb+UOJj9RkIyCb1u4wjzMg90BQ= | |||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= | |||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= | |||
@@ -892,12 +785,8 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= | |||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | |||
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | |||
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | |||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= | |||
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= | |||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= | |||
go.opentelemetry.io/otel v1.9.0 h1:8WZNQFIB2a71LnANS9JeyidJKKGOOremcUtb/OtHISw= | |||
go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= | |||
go.opentelemetry.io/otel/trace v1.9.0 h1:oZaCNJUjWcg60VXWee8lJKlqhPbXAPB51URuR47pQYc= | |||
go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= | |||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= | |||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | |||
@@ -971,7 +860,6 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl | |||
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= | |||
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | |||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | |||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | |||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | |||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= | |||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= | |||
@@ -981,8 +869,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB | |||
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= | |||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | |||
golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | |||
@@ -1023,16 +909,11 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R | |||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | |||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | |||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | |||
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | |||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | |||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | |||
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | |||
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | |||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | |||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= | |||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | |||
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= | |||
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | |||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | |||
golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | |||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | |||
@@ -1045,16 +926,7 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr | |||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | |||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | |||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | |||
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= | |||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | |||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
@@ -1067,8 +939,6 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ | |||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= | |||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | |||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | |||
@@ -1119,32 +989,22 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w | |||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | |||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | |||
@@ -1163,7 +1023,6 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 | |||
golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | |||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | |||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | |||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | |||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | |||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | |||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= | |||
@@ -1173,7 +1032,6 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb | |||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | |||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | |||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | |||
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE= | |||
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | |||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | |||
@@ -1228,18 +1086,10 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY | |||
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | |||
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | |||
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | |||
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= | |||
golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= | |||
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |||
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |||
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |||
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | |||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= | |||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | |||
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | |||
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | |||
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | |||
golang.org/x/tools v0.1.5/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= | |||
@@ -1266,16 +1116,6 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M | |||
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= | |||
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= | |||
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= | |||
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= | |||
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= | |||
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= | |||
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= | |||
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= | |||
google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= | |||
google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= | |||
google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= | |||
google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= | |||
google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= | |||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | |||
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | |||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | |||
@@ -1283,8 +1123,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 | |||
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= | |||
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= | |||
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= | |||
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= | |||
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= | |||
google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= | |||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= | |||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= | |||
@@ -1320,27 +1158,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D | |||
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | |||
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= | |||
google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= | |||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= | |||
google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= | |||
google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= | |||
google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= | |||
google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= | |||
google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= | |||
google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= | |||
google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= | |||
google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= | |||
google.golang.org/genproto v0.0.0-20211104193956-4c6863e31247/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | |||
google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 h1:q4zUJDd0+knPFB9x20S3vnxzlYNBbt8Yd7zBMVMteeM= | |||
google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= | |||
@@ -1364,26 +1183,17 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa | |||
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= | |||
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | |||
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | |||
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | |||
google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | |||
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= | |||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= | |||
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= | |||
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | |||
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | |||
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= | |||
google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | |||
google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | |||
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= | |||
google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= | |||
google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= | |||
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= | |||
google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= | |||
google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= | |||
google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= | |||
google.golang.org/grpc v1.49.0 h1:WTLtQzmQori5FUH25Pq4WT22oCsv8USpQ+F6rqtsmxw= | |||
google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= | |||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= | |||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= | |||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= | |||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= | |||
@@ -1414,8 +1224,6 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy | |||
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= | |||
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | |||
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | |||
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= | |||
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | |||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= | |||
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= | |||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= | |||
@@ -1459,14 +1267,11 @@ modernc.org/sortutil v1.0.0/go.mod h1:1QO0q8IlIlmjBIwm6t/7sof874+xCfZouyqZMLIAtx | |||
modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= | |||
modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= | |||
modernc.org/y v1.0.1/go.mod h1:Ho86I+LVHEI+LYXoUKlmOMAM1JTXOCfj8qi1T8PsClE= | |||
moul.io/http2curl v1.0.0 h1:6XwpyZOYsgZJrU8exnG87ncVkU1FVCcTRpwzOkTDUi8= | |||
moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= | |||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= | |||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= | |||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= | |||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= | |||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= | |||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= | |||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= | |||
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= | |||
vimagination.zapto.org/byteio v0.0.0-20200222190125-d27cba0f0b10 h1:pxt6fVJP67Hxo1qk8JalUghLlk3abYByl+3e0JYfUlE= | |||
@@ -35,7 +35,7 @@ import ( | |||
"github.com/seata/seata-go/pkg/rm" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/dubbo/client/service" | |||
//"github.com/seata/seata-go/sample/tcc/dubbo/client/service" | |||
testdata2 "github.com/seata/seata-go/testdata" | |||
) | |||
@@ -46,6 +46,13 @@ var ( | |||
values = make([]reflect.Value, 0, 2) | |||
) | |||
type UserProvider struct { | |||
Prepare func(ctx context.Context, params ...interface{}) (bool, error) `seataTwoPhaseAction:"prepare" seataTwoPhaseServiceName:"TwoPhaseDemoService"` | |||
Commit func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) `seataTwoPhaseAction:"commit"` | |||
Rollback func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) `seataTwoPhaseAction:"rollback"` | |||
GetActionName func() string | |||
} | |||
func InitMock() { | |||
log.Init() | |||
var ( | |||
@@ -239,7 +246,7 @@ func TestNewTCCServiceProxy(t *testing.T) { | |||
service interface{} | |||
} | |||
userProvider := &service.UserProvider{} | |||
userProvider := &UserProvider{} | |||
args1 := args{service: userProvider} | |||
args2 := args{service: userProvider} | |||
@@ -290,7 +297,7 @@ func TestTCCGetTransactionInfo(t1 *testing.T) { | |||
TCCResource *TCCResource | |||
} | |||
userProvider := &service.UserProvider{} | |||
userProvider := &UserProvider{} | |||
twoPhaseAction1, _ := rm.ParseTwoPhaseAction(userProvider) | |||
tests := struct { | |||
@@ -25,10 +25,35 @@ import ( | |||
"github.com/stretchr/testify/assert" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/sample/tcc/dubbo/client/service" | |||
testdata2 "github.com/seata/seata-go/testdata" | |||
) | |||
var UserProviderInstance = NewTwoPhaseDemoService() | |||
type UserProvider struct { | |||
Prepare func(ctx context.Context, params ...interface{}) (bool, error) `seataTwoPhaseAction:"prepare" seataTwoPhaseServiceName:"TwoPhaseDemoService"` | |||
Commit func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) `seataTwoPhaseAction:"commit"` | |||
Rollback func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) `seataTwoPhaseAction:"rollback"` | |||
GetActionName func() string | |||
} | |||
func NewTwoPhaseDemoService() *UserProvider { | |||
return &UserProvider{ | |||
Prepare: func(ctx context.Context, params ...interface{}) (bool, error) { | |||
return false, fmt.Errorf("execute two phase prepare method, param %v", params) | |||
}, | |||
Commit: func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
return false, fmt.Errorf("execute two phase commit method, xid %v", businessActionContext.Xid) | |||
}, | |||
Rollback: func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
return true, nil | |||
}, | |||
GetActionName: func() string { | |||
return "TwoPhaseDemoService" | |||
}, | |||
} | |||
} | |||
func TestParseTwoPhaseActionGetMethodName(t *testing.T) { | |||
tests := []struct { | |||
service interface{} | |||
@@ -211,7 +236,7 @@ func TestParseTwoPhaseActionExecuteMethod2(t *testing.T) { | |||
func TestIsTwoPhaseAction(t *testing.T) { | |||
userProvider := &testdata2.TestTwoPhaseService{} | |||
userProvider1 := service.UserProviderInstance | |||
userProvider1 := UserProviderInstance | |||
type args struct { | |||
v interface{} | |||
} | |||
@@ -237,7 +262,7 @@ func TestParseTwoPhaseAction(t *testing.T) { | |||
v interface{} | |||
} | |||
userProvider := service.UserProviderInstance | |||
userProvider := UserProviderInstance | |||
twoPhaseAction, _ := ParseTwoPhaseAction(userProvider) | |||
args1 := args{v: userProvider} | |||
@@ -262,7 +287,7 @@ func TestParseTwoPhaseActionByInterface(t *testing.T) { | |||
v interface{} | |||
} | |||
userProvider := &service.UserProvider{} | |||
userProvider := &UserProvider{} | |||
twoPhaseAction, _ := ParseTwoPhaseAction(userProvider) | |||
args1 := args{v: userProvider} | |||
@@ -1,85 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"fmt" | |||
"time" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/tm" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
initService() | |||
tm.WithGlobalTx(context.Background(), &tm.GtxConfig{ | |||
Name: "ATSampleLocalGlobalTx", | |||
Timeout: time.Second * 30, | |||
}, insertData) | |||
<-make(chan struct{}) | |||
} | |||
func insertData(ctx context.Context) error { | |||
sql := "INSERT INTO `order_tbl` (`id`, `user_id`, `commodity_code`, `count`, `money`, `descs`) VALUES (?, ?, ?, ?, ?, ?);" | |||
ret, err := db.ExecContext(ctx, sql, 333, "NO-100001", "C100000", 100, nil, "init desc") | |||
if err != nil { | |||
fmt.Printf("insert failed, err:%v\n", err) | |||
return err | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("insert failed, err:%v\n", err) | |||
return err | |||
} | |||
fmt.Printf("insert success: %d.\n", rows) | |||
return nil | |||
} | |||
func deleteData(ctx context.Context) error { | |||
sql := "delete from order_tbl where id=?" | |||
ret, err := db.ExecContext(ctx, sql, 2) | |||
if err != nil { | |||
fmt.Printf("delete failed, err:%v\n", err) | |||
return err | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("delete failed, err:%v\n", err) | |||
return err | |||
} | |||
fmt.Printf("delete success: %d.\n", rows) | |||
return nil | |||
} | |||
func updateData(ctx context.Context) error { | |||
sql := "update order_tbl set descs=? where id=?" | |||
ret, err := db.ExecContext(ctx, sql, fmt.Sprintf("NewDescs-%d", time.Now().UnixMilli()), 1) | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return err | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return err | |||
} | |||
fmt.Printf("update success: %d.\n", rows) | |||
return nil | |||
} |
@@ -1,36 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"database/sql" | |||
sql2 "github.com/seata/seata-go/pkg/datasource/sql" | |||
) | |||
var ( | |||
db *sql.DB | |||
) | |||
func initService() { | |||
var err error | |||
db, err = sql.Open(sql2.SeataATMySQLDriver, "root:12345678@tcp(127.0.0.1:3306)/seata_client?multiStatements=true&interpolateParams=true") | |||
if err != nil { | |||
panic("init service error") | |||
} | |||
} |
@@ -1,66 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"flag" | |||
"fmt" | |||
"net/http" | |||
"time" | |||
"github.com/parnurzeal/gorequest" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/constant" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
var serverIpPort = "http://127.0.0.1:8080" | |||
func main() { | |||
flag.Parse() | |||
client.InitPath("./sample/conf/seatago.yml") | |||
bgCtx, cancel := context.WithTimeout(context.Background(), time.Minute*10) | |||
defer cancel() | |||
transInfo := &tm.GtxConfig{ | |||
Name: "ATSampleLocalGlobalTx", | |||
Timeout: time.Second * 30, | |||
} | |||
if err := tm.WithGlobalTx(bgCtx, transInfo, updateData); err != nil { | |||
panic(fmt.Sprintf("tm update data err, %v", err)) | |||
} | |||
} | |||
func updateData(ctx context.Context) (re error) { | |||
request := gorequest.New() | |||
log.Infof("branch transaction begin") | |||
request.Post(serverIpPort+"/updateDataSuccess"). | |||
Set(constant.XidKey, tm.GetXID(ctx)). | |||
End(func(response gorequest.Response, body string, errs []error) { | |||
if response.StatusCode != http.StatusOK { | |||
re = fmt.Errorf("update data fail") | |||
} | |||
}) | |||
return | |||
} |
@@ -1,53 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"net/http" | |||
"github.com/gin-gonic/gin" | |||
"github.com/seata/seata-go/pkg/client" | |||
ginmiddleware "github.com/seata/seata-go/pkg/integration/gin" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
initService() | |||
r := gin.Default() | |||
// NOTE: when use gin,must set ContextWithFallback true when gin version >= 1.8.1 | |||
// r.ContextWithFallback = true | |||
r.Use(ginmiddleware.TransactionMiddleware()) | |||
r.POST("/updateDataSuccess", func(c *gin.Context) { | |||
log.Infof("get tm updateData") | |||
if err := updateDataSuccess(c); err != nil { | |||
c.JSON(http.StatusBadRequest, "updateData failure") | |||
return | |||
} | |||
c.JSON(http.StatusOK, "updateData ok") | |||
}) | |||
if err := r.Run(":8080"); err != nil { | |||
log.Fatalf("start tcc server fatal: %v", err) | |||
} | |||
} |
@@ -1,56 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"database/sql" | |||
"fmt" | |||
"time" | |||
sql2 "github.com/seata/seata-go/pkg/datasource/sql" | |||
) | |||
var ( | |||
db *sql.DB | |||
) | |||
func initService() { | |||
var err error | |||
db, err = sql.Open(sql2.SeataATMySQLDriver, "root:12345678@tcp(127.0.0.1:3306)/seata_client?multiStatements=true&interpolateParams=true") | |||
if err != nil { | |||
panic("init service error") | |||
} | |||
} | |||
func updateDataSuccess(ctx context.Context) error { | |||
sql := "update order_tbl set descs=? where id=?" | |||
ret, err := db.ExecContext(ctx, sql, fmt.Sprintf("NewDescs1-%d", time.Now().UnixMilli()), 1) | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return nil | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return nil | |||
} | |||
fmt.Printf("update success: %d.\n", rows) | |||
return nil | |||
} |
@@ -1,207 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"database/sql" | |||
"errors" | |||
"fmt" | |||
"time" | |||
"github.com/seata/seata-go/pkg/client" | |||
) | |||
type OrderTbl struct { | |||
id int | |||
userID string | |||
commodityCode string | |||
count int64 | |||
money int64 | |||
descs string | |||
} | |||
var ( | |||
count = time.Now().UnixMilli() | |||
userID = fmt.Sprintf("NO-%d", count) | |||
commodityCode = fmt.Sprintf("C%d", count) | |||
descs = fmt.Sprintf("desc %d", count) | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
initService() | |||
insertId := insertData() | |||
//insertDuplicateData(insertId) | |||
selectData(insertId) | |||
updateData(insertId) | |||
selectData(insertId) | |||
deleteData(insertId) | |||
selectData(insertId) | |||
userIds := batchInsertData() | |||
batchDeleteData(userIds) | |||
<-make(chan struct{}) | |||
} | |||
func insertData() int64 { | |||
ret, err := db.Exec("insert into order_tbl (`user_id`, `commodity_code`, `count`, `money`, `descs`) values (?, ?, ?, ?, ?)", | |||
userID, commodityCode, 100, 100, descs) | |||
if err != nil { | |||
panic(err) | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("insert failed, err:%v\n", err) | |||
panic(err) | |||
} | |||
insertId, err := ret.LastInsertId() | |||
if err != nil { | |||
fmt.Printf("get insert id failed, err:%v\n", err) | |||
panic(err) | |||
} | |||
fmt.Printf("insert success: %d.\n", rows) | |||
return insertId | |||
} | |||
func batchInsertData() []string { | |||
var userIds []string | |||
sql := "insert into order_tbl (`user_id`, `commodity_code`, `count`, `money`, `descs`) values " | |||
for i := 0; i < 5; i++ { | |||
tmpCount := time.Now().UnixMilli() | |||
tmpUserID := fmt.Sprintf("NO-%d", tmpCount) | |||
userIds = append(userIds, tmpUserID) | |||
tmpCommodityCode := fmt.Sprintf("C%d", tmpCount) | |||
tmpDescs := fmt.Sprintf("desc %d", tmpCount) | |||
sql += fmt.Sprintf("('%s','%s',1000,100,'%s'),", tmpUserID, tmpCommodityCode, tmpDescs) | |||
} | |||
sql = sql[:len(sql)-1] | |||
ret, err := db.Exec(sql) | |||
if err != nil { | |||
panic(err) | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("insert failed, err:%v\n", err) | |||
panic(err) | |||
} | |||
fmt.Printf("insert success: %d.\n", rows) | |||
return userIds | |||
} | |||
func insertDuplicateData(id int64) int64 { | |||
ret, err := db.Exec("insert into order_tbl (`id`, `user_id`, `commodity_code`, `count`, `money`, `descs`) values (?,?, ?, ?, ?, ?)", | |||
id, userID, commodityCode, 100, 100, descs) | |||
if err != nil { | |||
panic(err) | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("insert failed, err:%v\n", err) | |||
panic(err) | |||
} | |||
insertId, err := ret.LastInsertId() | |||
if err != nil { | |||
fmt.Printf("get insert id failed, err:%v\n", err) | |||
panic(err) | |||
} | |||
fmt.Printf("insert success: %d.\n", rows) | |||
return insertId | |||
} | |||
func selectData(id int64) { | |||
var orderTbl OrderTbl | |||
row := db.QueryRow("select id,user_id,commodity_code,count,money,descs from order_tbl where id = ? ", id) | |||
err := row.Scan(&orderTbl.id, &orderTbl.userID, &orderTbl.commodityCode, &orderTbl.count, &orderTbl.money, &orderTbl.descs) | |||
if err != nil { | |||
if errors.Is(err, sql.ErrNoRows) { | |||
fmt.Println("select return null") | |||
return | |||
} | |||
panic(err) | |||
} | |||
fmt.Printf("select --> : %v\n", orderTbl) | |||
} | |||
func updateData(insertID int64) error { | |||
sql := "update order_tbl set descs=? where id=?" | |||
ret, err := db.Exec(sql, fmt.Sprintf("NewDescs-%d", time.Now().UnixMilli()), insertID) | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return nil | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return nil | |||
} | |||
fmt.Printf("update success: %d.\n", rows) | |||
return nil | |||
} | |||
func deleteData(insertID int64) error { | |||
sql := "delete from order_tbl where id=?" | |||
ret, err := db.Exec(sql, insertID) | |||
if err != nil { | |||
fmt.Printf("delete failed, err:%v\n", err) | |||
return nil | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("delete failed, err:%v\n", err) | |||
return nil | |||
} | |||
fmt.Printf("delete success: %d.\n", rows) | |||
return nil | |||
} | |||
func batchDeleteData(userIds []string) error { | |||
var sql string | |||
for _, v := range userIds { | |||
sql += fmt.Sprintf("delete from order_tbl where user_id = '%s';", v) | |||
} | |||
ret, err := db.Exec(sql) | |||
if err != nil { | |||
fmt.Printf("batch delete failed, err:%v\n", err) | |||
return nil | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("batch delete failed, err:%v\n", err) | |||
return nil | |||
} | |||
fmt.Printf("batch delete success: %d.\n", rows) | |||
return nil | |||
} |
@@ -1,36 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"database/sql" | |||
sql2 "github.com/seata/seata-go/pkg/datasource/sql" | |||
) | |||
var ( | |||
db *sql.DB | |||
) | |||
func initService() { | |||
var err error | |||
db, err = sql.Open(sql2.SeataATMySQLDriver, "root:12345678@tcp(127.0.0.1:3306)/seata_client?multiStatements=true&interpolateParams=true") | |||
if err != nil { | |||
panic("init service error") | |||
} | |||
} |
@@ -1,77 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"flag" | |||
"fmt" | |||
"net/http" | |||
"time" | |||
"github.com/parnurzeal/gorequest" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/constant" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
var ( | |||
serverIpPort = "http://127.0.0.1:8080" | |||
serverIpPort2 = "http://127.0.0.1:8081" | |||
) | |||
func main() { | |||
flag.Parse() | |||
client.InitPath("./sample/conf/seatago.yml") | |||
bgCtx, cancel := context.WithTimeout(context.Background(), time.Minute*10) | |||
defer cancel() | |||
transInfo := &tm.GtxConfig{ | |||
Name: "ATSampleLocalGlobalTx", | |||
Timeout: time.Second * 30, | |||
} | |||
if err := tm.WithGlobalTx(bgCtx, transInfo, updateData); err != nil { | |||
panic(fmt.Sprintf("tm update data err, %v", err)) | |||
} | |||
} | |||
func updateData(ctx context.Context) (re error) { | |||
request := gorequest.New() | |||
log.Infof("branch transaction begin") | |||
request.Post(serverIpPort+"/updateDataSuccess"). | |||
Set(constant.XidKey, tm.GetXID(ctx)). | |||
End(func(response gorequest.Response, body string, errs []error) { | |||
if response.StatusCode != http.StatusOK { | |||
re = fmt.Errorf("update data fail") | |||
} | |||
}) | |||
request.Post(serverIpPort2+"/updateDataFail"). | |||
Set(constant.XidKey, tm.GetXID(ctx)). | |||
End(func(response gorequest.Response, body string, errs1 []error) { | |||
if response.StatusCode != http.StatusOK { | |||
re = fmt.Errorf("update data fail") | |||
} | |||
}) | |||
return | |||
} |
@@ -1,83 +0,0 @@ | |||
-- | |||
-- | |||
CREATE database if NOT EXISTS `seata_client1` default character set utf8mb4 collate utf8mb4_unicode_ci; | |||
USE `seata_client1`; | |||
SET NAMES utf8mb4; | |||
SET FOREIGN_KEY_CHECKS = 0; | |||
CREATE TABLE IF NOT EXISTS `order_tbl` ( | |||
`id` int(11) NOT NULL AUTO_INCREMENT, | |||
`user_id` varchar(255) DEFAULT NULL, | |||
`commodity_code` varchar(255) DEFAULT NULL, | |||
`count` int(11) DEFAULT '0', | |||
`money` int(11) DEFAULT '0', | |||
`descs` varchar(255) DEFAULT '', | |||
PRIMARY KEY (`id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
INSERT INTO `seata_client1`.`order_tbl` (`id`, `user_id`, `commodity_code`, `count`, `money`, `descs`) VALUES (1, 'NO-100001', 'C100000', 100, 10, 'init desc'); | |||
DROP TABLE IF EXISTS `undo_log`; | |||
CREATE TABLE `undo_log` ( | |||
`id` bigint NOT NULL AUTO_INCREMENT, | |||
`branch_id` bigint NOT NULL, | |||
`xid` varchar(100) NOT NULL, | |||
`context` varchar(128) NOT NULL, | |||
`rollback_info` longblob NOT NULL, | |||
`log_status` int NOT NULL, | |||
`log_created` datetime NOT NULL, | |||
`log_modified` datetime NOT NULL, | |||
`ext` varchar(100) DEFAULT NULL, | |||
PRIMARY KEY (`id`), | |||
KEY `idx_unionkey` (`xid`,`branch_id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
CREATE database if NOT EXISTS `seata_client` default character set utf8mb4 collate utf8mb4_unicode_ci; | |||
USE `seata_client`; | |||
SET NAMES utf8mb4; | |||
SET FOREIGN_KEY_CHECKS = 0; | |||
CREATE TABLE IF NOT EXISTS `order_tbl` ( | |||
`id` int(11) NOT NULL AUTO_INCREMENT, | |||
`user_id` varchar(255) DEFAULT NULL, | |||
`commodity_code` varchar(255) DEFAULT NULL, | |||
`count` int(11) DEFAULT '0', | |||
`money` int(11) DEFAULT '0', | |||
`descs` varchar(255) DEFAULT '', | |||
PRIMARY KEY (`id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
INSERT INTO `seata_client`.`order_tbl` (`id`, `user_id`, `commodity_code`, `count`, `money`, `descs`) VALUES (1, 'NO-100001', 'C100000', 100, 10, 'init desc'); | |||
DROP TABLE IF EXISTS `undo_log`; | |||
CREATE TABLE `undo_log` ( | |||
`id` bigint NOT NULL AUTO_INCREMENT, | |||
`branch_id` bigint NOT NULL, | |||
`xid` varchar(100) NOT NULL, | |||
`context` varchar(128) NOT NULL, | |||
`rollback_info` longblob NOT NULL, | |||
`log_status` int NOT NULL, | |||
`log_created` datetime NOT NULL, | |||
`log_modified` datetime NOT NULL, | |||
`ext` varchar(100) DEFAULT NULL, | |||
PRIMARY KEY (`id`), | |||
KEY `idx_unionkey` (`xid`,`branch_id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
@@ -1,53 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"net/http" | |||
"github.com/gin-gonic/gin" | |||
"github.com/seata/seata-go/pkg/client" | |||
ginmiddleware "github.com/seata/seata-go/pkg/integration/gin" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
initService() | |||
r := gin.Default() | |||
// NOTE: when use gin,must set ContextWithFallback true when gin version >= 1.8.1 | |||
// r.ContextWithFallback = true | |||
r.Use(ginmiddleware.TransactionMiddleware()) | |||
r.POST("/updateDataSuccess", func(c *gin.Context) { | |||
log.Infof("get tm updateData") | |||
if err := updateDataSuccess(c); err != nil { | |||
c.JSON(http.StatusBadRequest, "updateData failure") | |||
return | |||
} | |||
c.JSON(http.StatusOK, "updateData ok") | |||
}) | |||
if err := r.Run(":8080"); err != nil { | |||
log.Fatalf("start tcc server fatal: %v", err) | |||
} | |||
} |
@@ -1,56 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"database/sql" | |||
"fmt" | |||
"time" | |||
sql2 "github.com/seata/seata-go/pkg/datasource/sql" | |||
) | |||
var ( | |||
db *sql.DB | |||
) | |||
func initService() { | |||
var err error | |||
db, err = sql.Open(sql2.SeataATMySQLDriver, "root:12345678@tcp(127.0.0.1:3306)/seata_client?multiStatements=true&interpolateParams=true") | |||
if err != nil { | |||
panic("init service error") | |||
} | |||
} | |||
func updateDataSuccess(ctx context.Context) error { | |||
sql := "update order_tbl set descs=? where id=?" | |||
ret, err := db.ExecContext(ctx, sql, fmt.Sprintf("NewDescs100-%d", time.Now().UnixMilli()), 1) | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return err | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return err | |||
} | |||
fmt.Printf("update success: %d.\n", rows) | |||
return nil | |||
} |
@@ -1,53 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"net/http" | |||
"github.com/gin-gonic/gin" | |||
"github.com/seata/seata-go/pkg/client" | |||
ginmiddleware "github.com/seata/seata-go/pkg/integration/gin" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
initService() | |||
r := gin.Default() | |||
// NOTE: when use gin,must set ContextWithFallback true when gin version >= 1.8.1 | |||
// r.ContextWithFallback = true | |||
r.Use(ginmiddleware.TransactionMiddleware()) | |||
r.POST("/updateDataFail", func(c *gin.Context) { | |||
log.Infof("get tm updateData") | |||
if err := updateDataFail(c); err != nil { | |||
c.JSON(http.StatusBadRequest, "updateData failure") | |||
return | |||
} | |||
c.JSON(http.StatusOK, "updateData ok") | |||
}) | |||
if err := r.Run(":8081"); err != nil { | |||
log.Fatalf("start tcc server fatal: %v", err) | |||
} | |||
} |
@@ -1,59 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"database/sql" | |||
"fmt" | |||
"time" | |||
sql2 "github.com/seata/seata-go/pkg/datasource/sql" | |||
) | |||
var ( | |||
db *sql.DB | |||
) | |||
func initService() { | |||
var err error | |||
db, err = sql.Open(sql2.SeataATMySQLDriver, "root:12345678@tcp(127.0.0.1:3306)/seata_client1?multiStatements=true&interpolateParams=true") | |||
if err != nil { | |||
panic("init service error") | |||
} | |||
} | |||
func updateDataFail(ctx context.Context) error { | |||
sql := "update order_tbl set descs=? where id=?" | |||
ret, err := db.ExecContext(ctx, sql, fmt.Sprintf("NewDescs1-%d", time.Now().UnixMilli()), 10000) | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return err | |||
} | |||
rows, err := ret.RowsAffected() | |||
if err != nil { | |||
fmt.Printf("update failed, err:%v\n", err) | |||
return err | |||
} | |||
fmt.Printf("update success: %d.\n", rows) | |||
if rows == 0 { | |||
return fmt.Errorf("rows affected 0") | |||
} | |||
return nil | |||
} |
@@ -1,160 +0,0 @@ | |||
# Licensed to the Apache Software Foundation (ASF) under one or more | |||
# contributor license agreements. See the NOTICE file distributed with | |||
# this work for additional information regarding copyright ownership. | |||
# The ASF licenses this file to You under the Apache License, Version 2.0 | |||
# (the "License"); you may not use this file except in compliance with | |||
# the License. You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# time 时间单位对应的是 time.Duration(1) | |||
seata: | |||
enabled: true | |||
# application id | |||
application-id: applicationName | |||
# service group | |||
tx-service-group: default_tx_group | |||
access-key: aliyunAccessKey | |||
secret-key: aliyunSecretKey | |||
enable-auto-data-source-proxy: true | |||
data-source-proxy-mode: AT | |||
client: | |||
rm: | |||
# Maximum cache length of asynchronous queue | |||
async-commit-buffer-limit: 10000 | |||
# The maximum number of retries when report reports the status | |||
report-retry-count: 5 | |||
# The interval for regularly checking the metadata of the db(AT) | |||
table-meta-check-enable: false | |||
# Whether to report the status if the transaction is successfully executed(AT) | |||
report-success-enable: false | |||
# Whether to allow regular check of db metadata(AT) | |||
saga-branch-register-enable: false | |||
saga-json-parser: fastjson | |||
saga-retry-persist-mode-update: false | |||
saga-compensate-persist-mode-update: false | |||
#Ordered.HIGHEST_PRECEDENCE + 1000 # | |||
tcc-action-interceptor-order: -2147482648 | |||
# Parse SQL parser selection | |||
sql-parser-type: druid | |||
lock: | |||
retry-interval: 10 | |||
retry-times: 30s | |||
retry-policy-branch-rollback-on-conflict: true | |||
tm: | |||
commit-retry-count: 5 | |||
rollback-retry-count: 5 | |||
default-global-transaction-timeout: 60s | |||
degrade-check: false | |||
degrade-check-period: 2000 | |||
degrade-check-allow-times: 10s | |||
interceptor-order: -2147482648 | |||
undo: | |||
# Judge whether the before image and after image are the same,If it is the same, undo will not be recorded | |||
data-validation: true | |||
# Serialization method | |||
log-serialization: jackson | |||
# undo log table name | |||
log-table: undo_log | |||
# Only store modified fields | |||
only-care-update-columns: true | |||
compress: | |||
# Whether compression is required | |||
enable: true | |||
# Compression type | |||
type: zip | |||
# Compression threshold Unit: k | |||
threshold: 64k | |||
load-balance: | |||
type: RandomLoadBalance | |||
virtual-nodes: 10 | |||
service: | |||
vgroup-mapping: | |||
# Prefix for Print Log | |||
default_tx_group: default | |||
grouplist: | |||
default: 127.0.0.1:8091 | |||
enable-degrade: false | |||
# close the transaction | |||
disable-global-transaction: false | |||
transport: | |||
shutdown: | |||
wait: 3s | |||
# Netty related configurations | |||
# type | |||
type: TCP | |||
server: NIO | |||
heartbeat: true | |||
# Encoding and decoding mode | |||
serialization: seata | |||
# Message compression mode | |||
compressor: none | |||
# Allow batch sending of requests (TM) | |||
enable-tm-client-batch-send-request: false | |||
# Allow batch sending of requests (RM) | |||
enable-rm-client-batch-send-request: true | |||
# RM send request timeout | |||
rpc-rm-request-timeout: 30s | |||
# TM send request timeout | |||
rpc-tm-request-timeout: 30s | |||
# Configuration Center | |||
config: | |||
type: file | |||
file: | |||
name: config.conf | |||
nacos: | |||
namespace: "" | |||
server-addr: 127.0.0.1:8848 | |||
group: SEATA_GROUP | |||
username: "" | |||
password: "" | |||
##if use MSE Nacos with auth, mutex with username/password attribute | |||
#access-key: "" | |||
#secret-key: "" | |||
data-id: seata.properties | |||
# Registration Center | |||
registry: | |||
type: file | |||
file: | |||
name: registry.conf | |||
nacos: | |||
application: seata-server | |||
server-addr: 127.0.0.1:8848 | |||
group: "SEATA_GROUP" | |||
namespace: "" | |||
username: "" | |||
password: "" | |||
##if use MSE Nacos with auth, mutex with username/password attribute # | |||
#access-key: "" # | |||
#secret-key: "" # | |||
log: | |||
exception-rate: 100 | |||
tcc: | |||
fence: | |||
# Anti suspension table name | |||
log-table-name: tcc_fence_log_test | |||
clean-period: 60s | |||
# getty configuration | |||
getty: | |||
reconnect-interval: 0 | |||
# temporary not supported connection-num | |||
connection-num: 1 | |||
session: | |||
compress-encoding: false | |||
tcp-no-delay: true | |||
tcp-keep-alive: true | |||
keep-alive-period: 120s | |||
tcp-r-buf-size: 262144 | |||
tcp-w-buf-size: 65536 | |||
tcp-read-timeout: 5s | |||
tcp-write-timeout: 5s | |||
wait-timeout: 1s | |||
max-msg-len: 16498688 | |||
session-name: client_test | |||
cron-period: 1s |
@@ -1,45 +0,0 @@ | |||
# | |||
# Licensed to the Apache Software Foundation (ASF) under one or more | |||
# contributor license agreements. See the NOTICE file distributed with | |||
# this work for additional information regarding copyright ownership. | |||
# The ASF licenses this file to You under the Apache License, Version 2.0 | |||
# (the "License"); you may not use this file except in compliance with | |||
# the License. You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# | |||
version: '3' | |||
services: | |||
seata-server: | |||
image: seataio/seata-server:1.5.2 | |||
ports: | |||
- "8091:8091" | |||
- "7091:7091" | |||
environment: | |||
- SEATA_PORT=8091 | |||
- STORE_MODE=file | |||
zookeeper: | |||
image: zookeeper | |||
ports: | |||
- "2181:2181" | |||
restart: on-failure | |||
mysql: | |||
image: mysql:5.7 | |||
container_name: mysql | |||
environment: | |||
- MYSQL_ROOT_PASSWORD=12345678 | |||
command: --default-authentication-plugin=mysql_native_password --default-time-zone='+08:00' | |||
volumes: | |||
- ./mysql:/docker-entrypoint-initdb.d | |||
- ./mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf | |||
ports: | |||
- "3306:3306" |
@@ -1,30 +0,0 @@ | |||
# | |||
# Licensed to the Apache Software Foundation (ASF) under one or more | |||
# contributor license agreements. See the NOTICE file distributed with | |||
# this work for additional information regarding copyright ownership. | |||
# The ASF licenses this file to You under the Apache License, Version 2.0 | |||
# (the "License"); you may not use this file except in compliance with | |||
# the License. You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# | |||
curl 127.0.0.1:7091 | |||
res=$? | |||
passCode=52 | |||
while [ "$res" != "$passCode" ];do | |||
sleep 5 | |||
curl 127.0.0.1:7091 | |||
res=$? | |||
done | |||
sleep 5 | |||
curl http://127.0.0.1:7091 | |||
sleep 10 | |||
@@ -1,37 +0,0 @@ | |||
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. | |||
# | |||
# This program is free software; you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License, version 2.0, | |||
# as published by the Free Software Foundation. | |||
# | |||
# This program is also distributed with certain software (including | |||
# but not limited to OpenSSL) that is licensed under separate terms, | |||
# as designated in a particular file or component or in included license | |||
# documentation. The authors of MySQL hereby grant you an additional | |||
# permission to link the program and your derivative works with the | |||
# separately licensed software that they have included with MySQL. | |||
# | |||
# This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
# GNU General Public License, version 2.0, for more details. | |||
# | |||
# You should have received a copy of the GNU General Public License | |||
# along with this program; if not, write to the Free Software | |||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |||
# | |||
# The MySQL Server configuration file. | |||
# | |||
# For explanations see | |||
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html | |||
[mysqld] | |||
pid-file = /var/run/mysqld/mysqld.pid | |||
socket = /var/run/mysqld/mysqld.sock | |||
datadir = /var/lib/mysql | |||
#log-error = /var/log/mysql/error.log | |||
# By default we only accept connections from localhost | |||
bind-address = 0.0.0.0 | |||
# Disabling symbolic-links is recommended to prevent assorted security risks | |||
symbolic-links=0 |
@@ -1,83 +0,0 @@ | |||
-- | |||
-- | |||
CREATE database if NOT EXISTS `seata_client` default character set utf8mb4 collate utf8mb4_unicode_ci; | |||
USE `seata_client`; | |||
SET NAMES utf8mb4; | |||
SET FOREIGN_KEY_CHECKS = 0; | |||
CREATE TABLE IF NOT EXISTS `order_tbl` ( | |||
`id` int(11) NOT NULL AUTO_INCREMENT, | |||
`user_id` varchar(255) DEFAULT NULL, | |||
`commodity_code` varchar(255) DEFAULT NULL, | |||
`count` int(11) DEFAULT '0', | |||
`money` int(11) DEFAULT '0', | |||
`descs` varchar(255) DEFAULT '', | |||
PRIMARY KEY (`id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
INSERT INTO `seata_client`.`order_tbl` (`id`, `user_id`, `commodity_code`, `count`, `money`, `descs`) VALUES (1, 'NO-100001', 'C100000', 100, 10, 'init desc'); | |||
DROP TABLE IF EXISTS `undo_log`; | |||
CREATE TABLE `undo_log` ( | |||
`id` bigint NOT NULL AUTO_INCREMENT, | |||
`branch_id` bigint NOT NULL, | |||
`xid` varchar(100) NOT NULL, | |||
`context` varchar(128) NOT NULL, | |||
`rollback_info` longblob NOT NULL, | |||
`log_status` int NOT NULL, | |||
`log_created` datetime NOT NULL, | |||
`log_modified` datetime NOT NULL, | |||
`ext` varchar(100) DEFAULT NULL, | |||
PRIMARY KEY (`id`), | |||
KEY `idx_unionkey` (`xid`,`branch_id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
CREATE database if NOT EXISTS `seata_client1` default character set utf8mb4 collate utf8mb4_unicode_ci; | |||
USE `seata_client1`; | |||
SET NAMES utf8mb4; | |||
SET FOREIGN_KEY_CHECKS = 0; | |||
CREATE TABLE IF NOT EXISTS `order_tbl` ( | |||
`id` int(11) NOT NULL AUTO_INCREMENT, | |||
`user_id` varchar(255) DEFAULT NULL, | |||
`commodity_code` varchar(255) DEFAULT NULL, | |||
`count` int(11) DEFAULT '0', | |||
`money` int(11) DEFAULT '0', | |||
`descs` varchar(255) DEFAULT '', | |||
PRIMARY KEY (`id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
INSERT INTO `seata_client1`.`order_tbl` (`id`, `user_id`, `commodity_code`, `count`, `money`, `descs`) VALUES (1, 'NO-100001', 'C100000', 100, 10, 'init desc'); | |||
DROP TABLE IF EXISTS `undo_log`; | |||
CREATE TABLE `undo_log` ( | |||
`id` bigint NOT NULL AUTO_INCREMENT, | |||
`branch_id` bigint NOT NULL, | |||
`xid` varchar(100) NOT NULL, | |||
`context` varchar(128) NOT NULL, | |||
`rollback_info` longblob NOT NULL, | |||
`log_status` int NOT NULL, | |||
`log_created` datetime NOT NULL, | |||
`log_modified` datetime NOT NULL, | |||
`ext` varchar(100) DEFAULT NULL, | |||
PRIMARY KEY (`id`), | |||
KEY `idx_unionkey` (`xid`,`branch_id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
@@ -1,55 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"dubbo.apache.org/dubbo-go/v3/config" | |||
_ "dubbo.apache.org/dubbo-go/v3/imports" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/dubbo/client/service" | |||
) | |||
// need to setup environment variable "DUBBO_GO_CONFIG_PATH" to "conf/dubbogo.yml" before run | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
config.SetConsumerService(service.UserProviderInstance) | |||
if err := config.Load(); err != nil { | |||
panic(err) | |||
} | |||
run() | |||
} | |||
func run() { | |||
tm.WithGlobalTx(context.Background(), &tm.GtxConfig{ | |||
Name: "TccSampleLocalGlobalTx", | |||
}, business) | |||
<-make(chan struct{}) | |||
} | |||
func business(ctx context.Context) (re error) { | |||
if resp, re := service.UserProviderInstance.Prepare(ctx, 1); re != nil { | |||
log.Infof("response prepare: %v", re) | |||
} else { | |||
log.Infof("get resp %#v", resp) | |||
} | |||
return | |||
} |
@@ -1,32 +0,0 @@ | |||
# | |||
# Licensed to the Apache Software Foundation (ASF) under one or more | |||
# contributor license agreements. See the NOTICE file distributed with | |||
# this work for additional information regarding copyright ownership. | |||
# The ASF licenses this file to You under the Apache License, Version 2.0 | |||
# (the "License"); you may not use this file except in compliance with | |||
# the License. You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# | |||
# dubbo client yaml configure file | |||
dubbo: | |||
registries: | |||
demoZK: | |||
protocol: zookeeper | |||
address: 127.0.0.1:2181 | |||
consumer: | |||
filter: seataDubboFilter | |||
references: | |||
UserProvider: | |||
protocol: dubbo | |||
interface: com.github.seata.sample.UserProvider | |||
logger: | |||
zap-config: | |||
level: info |
@@ -1,51 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package service | |||
import ( | |||
"context" | |||
"fmt" | |||
"github.com/seata/seata-go/pkg/tm" | |||
) | |||
var UserProviderInstance = NewTwoPhaseDemoService() | |||
type UserProvider struct { | |||
Prepare func(ctx context.Context, params ...interface{}) (bool, error) `seataTwoPhaseAction:"prepare" seataTwoPhaseServiceName:"TwoPhaseDemoService"` | |||
Commit func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) `seataTwoPhaseAction:"commit"` | |||
Rollback func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) `seataTwoPhaseAction:"rollback"` | |||
GetActionName func() string | |||
} | |||
func NewTwoPhaseDemoService() *UserProvider { | |||
return &UserProvider{ | |||
Prepare: func(ctx context.Context, params ...interface{}) (bool, error) { | |||
return false, fmt.Errorf("execute two phase prepare method, param %v", params) | |||
}, | |||
Commit: func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
return false, fmt.Errorf("execute two phase commit method, xid %v", businessActionContext.Xid) | |||
}, | |||
Rollback: func(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
return true, nil | |||
}, | |||
GetActionName: func() string { | |||
return "TwoPhaseDemoService" | |||
}, | |||
} | |||
} |
@@ -1,70 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"fmt" | |||
"os" | |||
"os/signal" | |||
"syscall" | |||
"time" | |||
"dubbo.apache.org/dubbo-go/v3/config" | |||
_ "dubbo.apache.org/dubbo-go/v3/imports" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/rm/tcc" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/dubbo/server/service" | |||
) | |||
// need to setup environment variable "DUBBO_GO_CONFIG_PATH" to "conf/dubbogo.yml" before run | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
userProviderProxy, err := tcc.NewTCCServiceProxy(&service.UserProvider{}) | |||
if err != nil { | |||
log.Errorf("get userProviderProxy tcc service proxy error, %v", err.Error()) | |||
return | |||
} | |||
config.SetProviderService(userProviderProxy) | |||
if err := config.Load(); err != nil { | |||
panic(err) | |||
} | |||
initSignal() | |||
} | |||
func initSignal() { | |||
signals := make(chan os.Signal, 1) | |||
// It is not possible to block SIGKILL or syscall.SIGSTOP | |||
signal.Notify(signals, os.Interrupt, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT) | |||
for { | |||
sig := <-signals | |||
log.Infof("get signal %s", sig.String()) | |||
switch sig { | |||
case syscall.SIGHUP: | |||
// reload() | |||
default: | |||
time.AfterFunc(time.Duration(int(3e9)), func() { | |||
log.Warnf("app exit now by force...") | |||
os.Exit(1) | |||
}) | |||
// The program exits normally or timeout forcibly exits. | |||
fmt.Println("provider app exit now...") | |||
return | |||
} | |||
} | |||
} |
@@ -1,36 +0,0 @@ | |||
# | |||
# Licensed to the Apache Software Foundation (ASF) under one or more | |||
# contributor license agreements. See the NOTICE file distributed with | |||
# this work for additional information regarding copyright ownership. | |||
# The ASF licenses this file to You under the Apache License, Version 2.0 | |||
# (the "License"); you may not use this file except in compliance with | |||
# the License. You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# | |||
# dubbo server yaml configure file | |||
dubbo: | |||
registries: | |||
demoZK: | |||
protocol: zookeeper | |||
timeout: 3s | |||
address: 127.0.0.1:2181 | |||
protocols: | |||
dubbo: | |||
name: dubbo | |||
port: 20000 | |||
provider: | |||
services: | |||
UserProvider: | |||
interface: com.github.seata.sample.UserProvider | |||
filter: seataDubboFilter | |||
logger: | |||
zap-config: | |||
level: info |
@@ -1,47 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package service | |||
import ( | |||
"context" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
type UserProvider struct{} | |||
func (t *UserProvider) Prepare(ctx context.Context, params interface{}) (bool, error) { | |||
log.Infof("Prepare result: %v, xid %v", params, tm.GetXID(ctx)) | |||
return true, nil | |||
} | |||
func (t *UserProvider) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("Commit result: %v, xid %s", businessActionContext, tm.GetXID(ctx)) | |||
return true, nil | |||
} | |||
func (t *UserProvider) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("Rollback result: %v, xid %s", businessActionContext, tm.GetXID(ctx)) | |||
return true, nil | |||
} | |||
func (t *UserProvider) GetActionName() string { | |||
log.Infof("GetActionName result") | |||
return "TwoPhaseDemoService" | |||
} |
@@ -1,9 +0,0 @@ | |||
## 用例介绍 | |||
此用例介绍如何在tcc本地模式下使用防悬挂功能 | |||
## 使用步骤 | |||
- 在您的数据库中使用``./sample/tcc/fence/script/mysql.sql``脚本创建防悬挂所需的日志记录表,如果您使用的是其他数据库则运行对应数据库的脚本文件。 | |||
- 在``./sample/tcc/fence/service/service.go``中修改数据库驱动名为对应数据库类型并引入相关驱动包,mysql无需修改。此外需要注意用户名和密码是否正确。 | |||
- 启动``seata tc server`` | |||
- 使用以下命令运行用例``go run ./sample/tcc/fence/cmd/main.go`` |
@@ -1,54 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
_ "github.com/go-sql-driver/mysql" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/fence/service" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
tm.WithGlobalTx(context.Background(), &tm.GtxConfig{ | |||
Name: "TccSampleLocalGlobalTx", | |||
}, business) | |||
<-make(chan struct{}) | |||
} | |||
func business(ctx context.Context) (re error) { | |||
tccService := service.NewTestTCCServiceBusinessProxy() | |||
tccService2 := service.NewTestTCCServiceBusiness2Proxy() | |||
_, re = tccService.Prepare(ctx, 1) | |||
if re != nil { | |||
log.Errorf("TestTCCServiceBusiness prepare error, %v", re.Error()) | |||
return | |||
} | |||
_, re = tccService2.Prepare(ctx, 3) | |||
if re != nil { | |||
log.Errorf("TestTCCServiceBusiness2 prepare error, %v", re.Error()) | |||
return | |||
} | |||
return | |||
} |
@@ -1,31 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
CREATE TABLE IF NOT EXISTS `tcc_fence_log` | |||
( | |||
`xid` VARCHAR(128) NOT NULL COMMENT 'global id', | |||
`branch_id` BIGINT NOT NULL COMMENT 'branch id', | |||
`action_name` VARCHAR(64) NOT NULL COMMENT 'action name', | |||
`status` TINYINT NOT NULL COMMENT 'status(tried:1;committed:2;rollbacked:3;suspended:4)', | |||
`gmt_create` DATETIME(3) NOT NULL COMMENT 'create time', | |||
`gmt_modified` DATETIME(3) NOT NULL COMMENT 'update time', | |||
PRIMARY KEY (`xid`, `branch_id`), | |||
KEY `idx_gmt_modified` (`gmt_modified`), | |||
KEY `idx_status` (`status`) | |||
) ENGINE = InnoDB | |||
DEFAULT CHARSET = utf8mb4; |
@@ -1,30 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
CREATE TABLE tcc_fence_log | |||
( | |||
xid VARCHAR2(128) NOT NULL, | |||
branch_id NUMBER(19) NOT NULL, | |||
action_name VARCHAR2(64) NOT NULL, | |||
status NUMBER(3) NOT NULL, | |||
gmt_create TIMESTAMP(3) NOT NULL, | |||
gmt_modified TIMESTAMP(3) NOT NULL, | |||
PRIMARY KEY (xid, branch_id) | |||
); | |||
CREATE INDEX idx_gmt_modified ON tcc_fence_log (gmt_modified); | |||
CREATE INDEX idx_status ON tcc_fence_log (status); |
@@ -1,30 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
CREATE TABLE IF NOT EXISTS public.tcc_fence_log | |||
( | |||
xid VARCHAR(128) NOT NULL, | |||
branch_id BIGINT NOT NULL, | |||
action_name VARCHAR(64) NOT NULL, | |||
status SMALLINT NOT NULL, | |||
gmt_create TIMESTAMP(3) NOT NULL, | |||
gmt_modified TIMESTAMP(3) NOT NULL, | |||
CONSTRAINT pk_tcc_fence_log PRIMARY KEY (xid, branch_id) | |||
); | |||
CREATE INDEX idx_gmt_modified ON public.tcc_fence_log (gmt_modified); | |||
CREATE INDEX idx_status ON public.tcc_fence_log (status); |
@@ -1,254 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package service | |||
import ( | |||
"context" | |||
"database/sql" | |||
"fmt" | |||
"sync" | |||
"github.com/seata/seata-go/pkg/rm/tcc" | |||
"github.com/seata/seata-go/pkg/rm/tcc/fence" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
const ( | |||
DriverName = "mysql" | |||
Url = "root:root@tcp(127.0.0.1:3306)/seata?charset=utf8&parseTime=True" | |||
) | |||
var ( | |||
tccService *tcc.TCCServiceProxy | |||
tccServiceOnce sync.Once | |||
tccService2 *tcc.TCCServiceProxy | |||
tccService2Once sync.Once | |||
commitTimes int | |||
commitFenceTimes int | |||
rollbackTimes int | |||
rollbackFenceTimes int | |||
) | |||
type TestTCCServiceBusiness struct{} | |||
func NewTestTCCServiceBusinessProxy() *tcc.TCCServiceProxy { | |||
if tccService != nil { | |||
return tccService | |||
} | |||
tccServiceOnce.Do(func() { | |||
var err error | |||
tccService, err = tcc.NewTCCServiceProxy(&TestTCCServiceBusiness{}) | |||
if err != nil { | |||
panic(fmt.Errorf("get TestTCCServiceBusiness tcc service proxy error, %v", err.Error())) | |||
} | |||
}) | |||
return tccService | |||
} | |||
func (T TestTCCServiceBusiness) Prepare(ctx context.Context, params interface{}) (b bool, err error) { | |||
db, err := sql.Open(DriverName, Url) | |||
if err != nil { | |||
return false, fmt.Errorf("database connect failed, msg :%s", err.Error()) | |||
} | |||
defer db.Close() | |||
tx, err := db.Begin() | |||
if err != nil { | |||
return false, fmt.Errorf("transaction begin failed, msg :%s", err.Error()) | |||
} | |||
defer func() { | |||
if err != nil { | |||
err = fmt.Errorf("business method throw error: %s, rollback result: %s", err, tx.Rollback()) | |||
return | |||
} | |||
b, err = true, tx.Commit() | |||
}() | |||
err = fence.WithFence(ctx, tx, func() error { | |||
log.Infof("TestTCCServiceBusiness Prepare, param %v", params) | |||
return nil | |||
}) | |||
return | |||
} | |||
func (T TestTCCServiceBusiness) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (b bool, err error) { | |||
db, err := sql.Open(DriverName, Url) | |||
if err != nil { | |||
return false, fmt.Errorf("database connect failed, msg :%s", err.Error()) | |||
} | |||
defer db.Close() | |||
tx, err := db.Begin() | |||
if err != nil { | |||
return false, fmt.Errorf("transaction begin failed, msg :%s", err.Error()) | |||
} | |||
defer func() { | |||
if err != nil { | |||
err = fmt.Errorf("business method throw error: %s, rollback result: %s", err, tx.Rollback()) | |||
return | |||
} | |||
b, err = true, tx.Commit() | |||
}() | |||
err = fence.WithFence(ctx, tx, func() error { | |||
log.Infof("TestTCCServiceBusiness Commit, param %v", businessActionContext) | |||
return nil | |||
}) | |||
return | |||
} | |||
func (T TestTCCServiceBusiness) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (b bool, err error) { | |||
db, err := sql.Open(DriverName, Url) | |||
if err != nil { | |||
return false, fmt.Errorf("database connect failed, msg :%s", err.Error()) | |||
} | |||
defer db.Close() | |||
tx, err := db.Begin() | |||
if err != nil { | |||
return false, fmt.Errorf("transaction begin failed, msg :%s", err.Error()) | |||
} | |||
defer func() { | |||
if err != nil { | |||
err = fmt.Errorf("business method throw error: %s, rollback result: %s", err, tx.Rollback()) | |||
return | |||
} | |||
b, err = true, tx.Commit() | |||
}() | |||
err = fence.WithFence(ctx, tx, func() error { | |||
log.Infof("TestTCCServiceBusiness Rollback, param %v", businessActionContext) | |||
return nil | |||
}) | |||
return | |||
} | |||
func (T TestTCCServiceBusiness) GetActionName() string { | |||
return "TestTCCServiceBusiness" | |||
} | |||
type TestTCCServiceBusiness2 struct{} | |||
func NewTestTCCServiceBusiness2Proxy() *tcc.TCCServiceProxy { | |||
if tccService2 != nil { | |||
return tccService2 | |||
} | |||
tccService2Once.Do(func() { | |||
var err error | |||
tccService2, err = tcc.NewTCCServiceProxy(&TestTCCServiceBusiness2{}) | |||
if err != nil { | |||
panic(fmt.Errorf("TestTCCServiceBusiness2 get tcc service proxy error, %v", err.Error())) | |||
} | |||
if err != nil { | |||
panic(fmt.Errorf("TestTCCServiceBusiness2 register resource error, %v", err.Error())) | |||
} | |||
}) | |||
return tccService2 | |||
} | |||
func (T TestTCCServiceBusiness2) Prepare(ctx context.Context, params interface{}) (b bool, err error) { | |||
db, err := sql.Open(DriverName, Url) | |||
if err != nil { | |||
return false, fmt.Errorf("database connect failed, msg :%s", err.Error()) | |||
} | |||
defer db.Close() | |||
tx, err := db.Begin() | |||
if err != nil { | |||
return false, fmt.Errorf("transaction begin failed, msg :%s", err.Error()) | |||
} | |||
defer func() { | |||
if err != nil { | |||
err = fmt.Errorf("business method throw error: %s, rollback result: %s", err, tx.Rollback()) | |||
return | |||
} | |||
b, err = true, tx.Commit() | |||
}() | |||
err = fence.WithFence(ctx, tx, func() error { | |||
log.Infof("TestTCCServiceBusiness2 Prepare, param %v", params) | |||
return nil | |||
}) | |||
return | |||
} | |||
func (T TestTCCServiceBusiness2) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (b bool, err error) { | |||
db, err := sql.Open(DriverName, Url) | |||
if err != nil { | |||
return false, fmt.Errorf("database connect failed, msg :%s", err.Error()) | |||
} | |||
defer db.Close() | |||
tx, err := db.Begin() | |||
if err != nil { | |||
return false, fmt.Errorf("transaction begin failed, msg :%s", err.Error()) | |||
} | |||
defer func() { | |||
if err != nil { | |||
err = fmt.Errorf("business method throw error: %s, rollback result: %s", err, tx.Rollback()) | |||
return | |||
} | |||
b, err = true, tx.Commit() | |||
}() | |||
err = fence.WithFence(ctx, tx, func() error { | |||
log.Infof("TestTCCServiceBusiness2 Commit, param %v", businessActionContext) | |||
return nil | |||
}) | |||
return | |||
} | |||
func (T TestTCCServiceBusiness2) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (b bool, err error) { | |||
db, err := sql.Open(DriverName, Url) | |||
if err != nil { | |||
return false, fmt.Errorf("database connect failed, msg :%s", err.Error()) | |||
} | |||
defer db.Close() | |||
tx, err := db.Begin() | |||
if err != nil { | |||
return false, fmt.Errorf("transaction begin failed, msg :%s", err.Error()) | |||
} | |||
defer func() { | |||
if err != nil { | |||
err = fmt.Errorf("business method throw error: %s, rollback result: %s", err, tx.Rollback()) | |||
return | |||
} | |||
b, err = true, tx.Commit() | |||
}() | |||
err = fence.WithFence(ctx, tx, func() error { | |||
log.Infof("TestTCCServiceBusiness2 Rollback, param %v", businessActionContext) | |||
return nil | |||
}) | |||
return | |||
} | |||
func (T TestTCCServiceBusiness2) GetActionName() string { | |||
return "TestTCCServiceBusiness2" | |||
} |
@@ -1,6 +0,0 @@ | |||
# gin | |||
when use gin for tcc rm, need some condition: | |||
1. go >= 1.18 | |||
2. must set ContextWithFallback true when gin version >= 1.8.1 |
@@ -1,57 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"flag" | |||
"time" | |||
"github.com/parnurzeal/gorequest" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/constant" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
func main() { | |||
flag.Parse() | |||
client.InitPath("./sample/conf/seatago.yml") | |||
bgCtx, cancel := context.WithTimeout(context.Background(), time.Minute*10) | |||
defer cancel() | |||
serverIpPort := "http://127.0.0.1:8080" | |||
tm.WithGlobalTx( | |||
bgCtx, | |||
&tm.GtxConfig{ | |||
Name: "TccSampleLocalGlobalTx", | |||
}, | |||
func(ctx context.Context) (re error) { | |||
request := gorequest.New() | |||
log.Infof("branch transaction begin") | |||
request.Post(serverIpPort+"/prepare"). | |||
Set(constant.XidKey, tm.GetXID(ctx)). | |||
End(func(response gorequest.Response, body string, errs []error) { | |||
if len(errs) != 0 { | |||
re = errs[0] | |||
} | |||
}) | |||
return | |||
}) | |||
} |
@@ -1,58 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"net/http" | |||
"github.com/gin-gonic/gin" | |||
"github.com/seata/seata-go/pkg/client" | |||
ginmiddleware "github.com/seata/seata-go/pkg/integration/gin" | |||
"github.com/seata/seata-go/pkg/rm/tcc" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
r := gin.Default() | |||
// NOTE: when use gin,must set ContextWithFallback true when gin version >= 1.8.1 | |||
// r.ContextWithFallback = true | |||
r.Use(ginmiddleware.TransactionMiddleware()) | |||
userProviderProxy, err := tcc.NewTCCServiceProxy(&RMService{}) | |||
if err != nil { | |||
log.Errorf("get userProviderProxy tcc service proxy error, %v", err.Error()) | |||
return | |||
} | |||
r.POST("/prepare", func(c *gin.Context) { | |||
if _, err := userProviderProxy.Prepare(c, ""); err != nil { | |||
c.JSON(http.StatusOK, "prepare failure") | |||
return | |||
} | |||
c.JSON(http.StatusOK, "prepare ok") | |||
}) | |||
if err := r.Run(":8080"); err != nil { | |||
log.Fatalf("start tcc server fatal: %v", err) | |||
} | |||
} |
@@ -1,46 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
type RMService struct{} | |||
func (b *RMService) Prepare(ctx context.Context, params interface{}) (bool, error) { | |||
log.Infof("TRMService Prepare, param %v", params) | |||
return true, nil | |||
} | |||
func (b *RMService) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("RMService Commit, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (b *RMService) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("RMService Rollback, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (b *RMService) GetActionName() string { | |||
return "ginTccRMService" | |||
} |
@@ -1,72 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
// Package main implements a client for Greeter service. | |||
package main | |||
import ( | |||
"context" | |||
"flag" | |||
"google.golang.org/grpc" | |||
"google.golang.org/grpc/credentials/insecure" | |||
"github.com/seata/seata-go/pkg/client" | |||
grpc2 "github.com/seata/seata-go/pkg/integration/grpc" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/grpc/pb" | |||
) | |||
func main() { | |||
flag.Parse() | |||
// to set up grpc env | |||
// set up a connection to the server. | |||
conn, err := grpc.Dial("localhost:50051", | |||
grpc.WithTransportCredentials(insecure.NewCredentials()), | |||
grpc.WithUnaryInterceptor(grpc2.ClientTransactionInterceptor)) | |||
if err != nil { | |||
log.Fatalf("did not connect: %v", err) | |||
} | |||
defer conn.Close() | |||
c1, c2 := pb.NewTCCServiceBusiness1Client(conn), pb.NewTCCServiceBusiness2Client(conn) | |||
client.InitPath("./sample/conf/seatago.yml") | |||
tm.WithGlobalTx( | |||
context.Background(), | |||
&tm.GtxConfig{ | |||
Name: "TccSampleLocalGlobalTx", | |||
}, | |||
func(ctx context.Context) (re error) { | |||
r1, re := c1.Remoting(ctx, &pb.Params{A: "1", B: "2"}) | |||
if re != nil { | |||
log.Fatalf("could not do TestTCCServiceBusiness 1: %v", re) | |||
return | |||
} | |||
log.Infof("TestTCCServiceBusiness#Prepare res: %s", r1) | |||
r2, re := c2.Remoting(ctx, &pb.Params{A: "3", B: "4"}) | |||
if re != nil { | |||
log.Fatalf("could not do TestTCCServiceBusiness 2: %v", re) | |||
return | |||
} | |||
log.Infof("TestTCCServiceBusiness#Prepare res: %v", r2) | |||
return | |||
}) | |||
<-make(chan struct{}) | |||
} |
@@ -1,64 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
// Package main implements a business for Greeter service. | |||
package main | |||
import ( | |||
"fmt" | |||
"net" | |||
"google.golang.org/grpc" | |||
"github.com/seata/seata-go/pkg/client" | |||
grpc2 "github.com/seata/seata-go/pkg/integration/grpc" | |||
"github.com/seata/seata-go/pkg/rm/tcc" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/grpc/pb" | |||
"github.com/seata/seata-go/sample/tcc/grpc/service" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 50051)) | |||
if err != nil { | |||
log.Fatalf("failed to listen: %v", err) | |||
} | |||
log.Infof("server register") | |||
s := grpc.NewServer(grpc.UnaryInterceptor(grpc2.ServerTransactionInterceptor)) | |||
b1 := &service.Business1{} | |||
b2 := &service.Business2{} | |||
proxy1, err := tcc.NewTCCServiceProxy(b1) | |||
if err != nil { | |||
log.Fatalf(err.Error()) | |||
return | |||
} | |||
proxy2, err := tcc.NewTCCServiceProxy(b2) | |||
if err != nil { | |||
log.Fatalf(err.Error()) | |||
return | |||
} | |||
pb.RegisterTCCServiceBusiness1Server(s, &service.GrpcBusinessService1{Business1: proxy1}) | |||
pb.RegisterTCCServiceBusiness2Server(s, &service.GrpcBusinessService2{Business2: proxy2}) | |||
log.Infof("business listening at %v", lis.Addr()) | |||
if err := s.Serve(lis); err != nil { | |||
log.Fatalf("failed to serve: %v", err) | |||
} | |||
} |
@@ -1,193 +0,0 @@ | |||
// | |||
// Licensed to the Apache Software Foundation (ASF) under one or more | |||
// contributor license agreements. See the NOTICE file distributed with | |||
// this work for additional information regarding copyright ownership. | |||
// The ASF licenses this file to You under the Apache License, Version 2.0 | |||
// (the "License"); you may not use this file except in compliance with | |||
// the License. You may obtain a copy of the License at | |||
// | |||
// http://www.apache.org/licenses/LICENSE-2.0 | |||
// | |||
// Unless required by applicable law or agreed to in writing, software | |||
// distributed under the License is distributed on an "AS IS" BASIS, | |||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
// See the License for the specific language governing permissions and | |||
// limitations under the License. | |||
// Code generated by protoc-gen-go. DO NOT EDIT. | |||
// versions: | |||
// protoc-gen-go v1.28.0 | |||
// protoc v3.21.2 | |||
// source: sample/tcc/grpc/pb/tcc_grpc.proto | |||
package pb | |||
import ( | |||
reflect "reflect" | |||
sync "sync" | |||
protoreflect "google.golang.org/protobuf/reflect/protoreflect" | |||
protoimpl "google.golang.org/protobuf/runtime/protoimpl" | |||
anypb "google.golang.org/protobuf/types/known/anypb" | |||
wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" | |||
) | |||
const ( | |||
// Verify that this generated code is sufficiently up-to-date. | |||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) | |||
// Verify that runtime/protoimpl is sufficiently up-to-date. | |||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) | |||
) | |||
type Params struct { | |||
state protoimpl.MessageState | |||
sizeCache protoimpl.SizeCache | |||
unknownFields protoimpl.UnknownFields | |||
A string `protobuf:"bytes,1,opt,name=a,proto3" json:"a,omitempty"` | |||
B string `protobuf:"bytes,2,opt,name=b,proto3" json:"b,omitempty"` | |||
} | |||
func (x *Params) Reset() { | |||
*x = Params{} | |||
if protoimpl.UnsafeEnabled { | |||
mi := &file_sample_tcc_grpc_pb_tcc_grpc_proto_msgTypes[0] | |||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
ms.StoreMessageInfo(mi) | |||
} | |||
} | |||
func (x *Params) String() string { | |||
return protoimpl.X.MessageStringOf(x) | |||
} | |||
func (*Params) ProtoMessage() {} | |||
func (x *Params) ProtoReflect() protoreflect.Message { | |||
mi := &file_sample_tcc_grpc_pb_tcc_grpc_proto_msgTypes[0] | |||
if protoimpl.UnsafeEnabled && x != nil { | |||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
if ms.LoadMessageInfo() == nil { | |||
ms.StoreMessageInfo(mi) | |||
} | |||
return ms | |||
} | |||
return mi.MessageOf(x) | |||
} | |||
// Deprecated: Use Params.ProtoReflect.Descriptor instead. | |||
func (*Params) Descriptor() ([]byte, []int) { | |||
return file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDescGZIP(), []int{0} | |||
} | |||
func (x *Params) GetA() string { | |||
if x != nil { | |||
return x.A | |||
} | |||
return "" | |||
} | |||
func (x *Params) GetB() string { | |||
if x != nil { | |||
return x.B | |||
} | |||
return "" | |||
} | |||
var File_sample_tcc_grpc_pb_tcc_grpc_proto protoreflect.FileDescriptor | |||
var file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDesc = []byte{ | |||
0x0a, 0x21, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x63, 0x63, 0x2f, 0x67, 0x72, 0x70, | |||
0x63, 0x2f, 0x70, 0x62, 0x2f, 0x74, 0x63, 0x63, 0x5f, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, | |||
0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, | |||
0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, | |||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, | |||
0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, | |||
0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, | |||
0x01, 0x28, 0x09, 0x52, 0x01, 0x61, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, | |||
0x09, 0x52, 0x01, 0x62, 0x32, 0x48, 0x0a, 0x13, 0x54, 0x43, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, | |||
0x63, 0x65, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x31, 0x12, 0x31, 0x0a, 0x08, 0x52, | |||
0x65, 0x6d, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x07, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, | |||
0x1a, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, | |||
0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x00, 0x32, 0x42, | |||
0x0a, 0x13, 0x54, 0x43, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x75, 0x73, 0x69, | |||
0x6e, 0x65, 0x73, 0x73, 0x32, 0x12, 0x2b, 0x0a, 0x08, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x69, 0x6e, | |||
0x67, 0x12, 0x07, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, | |||
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, | |||
0x22, 0x00, 0x42, 0x2e, 0x5a, 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, | |||
0x2f, 0x73, 0x65, 0x61, 0x74, 0x61, 0x2f, 0x73, 0x65, 0x61, 0x74, 0x61, 0x2d, 0x67, 0x6f, 0x2f, | |||
0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2f, 0x74, 0x63, 0x63, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, | |||
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |||
} | |||
var ( | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDescOnce sync.Once | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDescData = file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDesc | |||
) | |||
func file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDescGZIP() []byte { | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDescOnce.Do(func() { | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDescData) | |||
}) | |||
return file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDescData | |||
} | |||
var ( | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_msgTypes = make([]protoimpl.MessageInfo, 1) | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_goTypes = []interface{}{ | |||
(*Params)(nil), // 0: Params | |||
(*wrapperspb.BoolValue)(nil), // 1: google.protobuf.BoolValue | |||
(*anypb.Any)(nil), // 2: google.protobuf.Any | |||
} | |||
) | |||
var file_sample_tcc_grpc_pb_tcc_grpc_proto_depIdxs = []int32{ | |||
0, // 0: TCCServiceBusiness1.Remoting:input_type -> Params | |||
0, // 1: TCCServiceBusiness2.Remoting:input_type -> Params | |||
1, // 2: TCCServiceBusiness1.Remoting:output_type -> google.protobuf.BoolValue | |||
2, // 3: TCCServiceBusiness2.Remoting:output_type -> google.protobuf.Any | |||
2, // [2:4] is the sub-list for method output_type | |||
0, // [0:2] is the sub-list for method input_type | |||
0, // [0:0] is the sub-list for extension type_name | |||
0, // [0:0] is the sub-list for extension extendee | |||
0, // [0:0] is the sub-list for field type_name | |||
} | |||
func init() { file_sample_tcc_grpc_pb_tcc_grpc_proto_init() } | |||
func file_sample_tcc_grpc_pb_tcc_grpc_proto_init() { | |||
if File_sample_tcc_grpc_pb_tcc_grpc_proto != nil { | |||
return | |||
} | |||
if !protoimpl.UnsafeEnabled { | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { | |||
switch v := v.(*Params); i { | |||
case 0: | |||
return &v.state | |||
case 1: | |||
return &v.sizeCache | |||
case 2: | |||
return &v.unknownFields | |||
default: | |||
return nil | |||
} | |||
} | |||
} | |||
type x struct{} | |||
out := protoimpl.TypeBuilder{ | |||
File: protoimpl.DescBuilder{ | |||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | |||
RawDescriptor: file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDesc, | |||
NumEnums: 0, | |||
NumMessages: 1, | |||
NumExtensions: 0, | |||
NumServices: 2, | |||
}, | |||
GoTypes: file_sample_tcc_grpc_pb_tcc_grpc_proto_goTypes, | |||
DependencyIndexes: file_sample_tcc_grpc_pb_tcc_grpc_proto_depIdxs, | |||
MessageInfos: file_sample_tcc_grpc_pb_tcc_grpc_proto_msgTypes, | |||
}.Build() | |||
File_sample_tcc_grpc_pb_tcc_grpc_proto = out.File | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_rawDesc = nil | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_goTypes = nil | |||
file_sample_tcc_grpc_pb_tcc_grpc_proto_depIdxs = nil | |||
} |
@@ -1,36 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
syntax = "proto3"; | |||
option go_package="github.com/seata/seata-go/sample/tcc/grpc/pb"; | |||
import "google/protobuf/any.proto"; | |||
import "google/protobuf/wrappers.proto"; | |||
message Params { | |||
string a = 1; | |||
string b = 2; | |||
} | |||
service TCCServiceBusiness1 { | |||
rpc Remoting (Params) returns (google.protobuf.BoolValue){ | |||
} | |||
} | |||
service TCCServiceBusiness2 { | |||
rpc Remoting (Params) returns (google.protobuf.Any){ | |||
} | |||
} |
@@ -1,209 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
// Code generated by protoc-gen-go-grpc. DO NOT EDIT. | |||
// versions: | |||
// - protoc-gen-go-grpc v1.2.0 | |||
// - protoc v3.21.2 | |||
// source: sample/tcc/grpc/pb/tcc_grpc.proto | |||
package pb | |||
import ( | |||
context "context" | |||
grpc "google.golang.org/grpc" | |||
codes "google.golang.org/grpc/codes" | |||
status "google.golang.org/grpc/status" | |||
anypb "google.golang.org/protobuf/types/known/anypb" | |||
wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" | |||
) | |||
// This is a compile-time assertion to ensure that this generated file | |||
// is compatible with the grpc package it is being compiled against. | |||
// Requires gRPC-Go v1.32.0 or later. | |||
const _ = grpc.SupportPackageIsVersion7 | |||
// TCCServiceBusiness1Client is the client API for TCCServiceBusiness1 service. | |||
// | |||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. | |||
type TCCServiceBusiness1Client interface { | |||
Remoting(ctx context.Context, in *Params, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) | |||
} | |||
type tCCServiceBusiness1Client struct { | |||
cc grpc.ClientConnInterface | |||
} | |||
func NewTCCServiceBusiness1Client(cc grpc.ClientConnInterface) TCCServiceBusiness1Client { | |||
return &tCCServiceBusiness1Client{cc} | |||
} | |||
func (c *tCCServiceBusiness1Client) Remoting(ctx context.Context, in *Params, opts ...grpc.CallOption) (*wrapperspb.BoolValue, error) { | |||
out := new(wrapperspb.BoolValue) | |||
err := c.cc.Invoke(ctx, "/TCCServiceBusiness1/Remoting", in, out, opts...) | |||
if err != nil { | |||
return nil, err | |||
} | |||
return out, nil | |||
} | |||
// TCCServiceBusiness1Server is the server API for TCCServiceBusiness1 service. | |||
// All implementations must embed UnimplementedTCCServiceBusiness1Server | |||
// for forward compatibility | |||
type TCCServiceBusiness1Server interface { | |||
Remoting(context.Context, *Params) (*wrapperspb.BoolValue, error) | |||
mustEmbedUnimplementedTCCServiceBusiness1Server() | |||
} | |||
// UnimplementedTCCServiceBusiness1Server must be embedded to have forward compatible implementations. | |||
type UnimplementedTCCServiceBusiness1Server struct{} | |||
func (UnimplementedTCCServiceBusiness1Server) Remoting(context.Context, *Params) (*wrapperspb.BoolValue, error) { | |||
return nil, status.Errorf(codes.Unimplemented, "method Remoting not implemented") | |||
} | |||
func (UnimplementedTCCServiceBusiness1Server) mustEmbedUnimplementedTCCServiceBusiness1Server() {} | |||
// UnsafeTCCServiceBusiness1Server may be embedded to opt out of forward compatibility for this service. | |||
// Use of this interface is not recommended, as added methods to TCCServiceBusiness1Server will | |||
// result in compilation errors. | |||
type UnsafeTCCServiceBusiness1Server interface { | |||
mustEmbedUnimplementedTCCServiceBusiness1Server() | |||
} | |||
func RegisterTCCServiceBusiness1Server(s grpc.ServiceRegistrar, srv TCCServiceBusiness1Server) { | |||
s.RegisterService(&TCCServiceBusiness1_ServiceDesc, srv) | |||
} | |||
func _TCCServiceBusiness1_Remoting_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||
in := new(Params) | |||
if err := dec(in); err != nil { | |||
return nil, err | |||
} | |||
if interceptor == nil { | |||
return srv.(TCCServiceBusiness1Server).Remoting(ctx, in) | |||
} | |||
info := &grpc.UnaryServerInfo{ | |||
Server: srv, | |||
FullMethod: "/TCCServiceBusiness1/Remoting", | |||
} | |||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
return srv.(TCCServiceBusiness1Server).Remoting(ctx, req.(*Params)) | |||
} | |||
return interceptor(ctx, in, info, handler) | |||
} | |||
// TCCServiceBusiness1_ServiceDesc is the grpc.ServiceDesc for TCCServiceBusiness1 service. | |||
// It's only intended for direct use with grpc.RegisterService, | |||
// and not to be introspected or modified (even as a copy) | |||
var TCCServiceBusiness1_ServiceDesc = grpc.ServiceDesc{ | |||
ServiceName: "TCCServiceBusiness1", | |||
HandlerType: (*TCCServiceBusiness1Server)(nil), | |||
Methods: []grpc.MethodDesc{ | |||
{ | |||
MethodName: "Remoting", | |||
Handler: _TCCServiceBusiness1_Remoting_Handler, | |||
}, | |||
}, | |||
Streams: []grpc.StreamDesc{}, | |||
Metadata: "sample/tcc/grpc/pb/tcc_grpc.proto", | |||
} | |||
// TCCServiceBusiness2Client is the client API for TCCServiceBusiness2 service. | |||
// | |||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. | |||
type TCCServiceBusiness2Client interface { | |||
Remoting(ctx context.Context, in *Params, opts ...grpc.CallOption) (*anypb.Any, error) | |||
} | |||
type tCCServiceBusiness2Client struct { | |||
cc grpc.ClientConnInterface | |||
} | |||
func NewTCCServiceBusiness2Client(cc grpc.ClientConnInterface) TCCServiceBusiness2Client { | |||
return &tCCServiceBusiness2Client{cc} | |||
} | |||
func (c *tCCServiceBusiness2Client) Remoting(ctx context.Context, in *Params, opts ...grpc.CallOption) (*anypb.Any, error) { | |||
out := new(anypb.Any) | |||
err := c.cc.Invoke(ctx, "/TCCServiceBusiness2/Remoting", in, out, opts...) | |||
if err != nil { | |||
return nil, err | |||
} | |||
return out, nil | |||
} | |||
// TCCServiceBusiness2Server is the server API for TCCServiceBusiness2 service. | |||
// All implementations must embed UnimplementedTCCServiceBusiness2Server | |||
// for forward compatibility | |||
type TCCServiceBusiness2Server interface { | |||
Remoting(context.Context, *Params) (*anypb.Any, error) | |||
mustEmbedUnimplementedTCCServiceBusiness2Server() | |||
} | |||
// UnimplementedTCCServiceBusiness2Server must be embedded to have forward compatible implementations. | |||
type UnimplementedTCCServiceBusiness2Server struct{} | |||
func (UnimplementedTCCServiceBusiness2Server) Remoting(context.Context, *Params) (*anypb.Any, error) { | |||
return nil, status.Errorf(codes.Unimplemented, "method Remoting not implemented") | |||
} | |||
func (UnimplementedTCCServiceBusiness2Server) mustEmbedUnimplementedTCCServiceBusiness2Server() {} | |||
// UnsafeTCCServiceBusiness2Server may be embedded to opt out of forward compatibility for this service. | |||
// Use of this interface is not recommended, as added methods to TCCServiceBusiness2Server will | |||
// result in compilation errors. | |||
type UnsafeTCCServiceBusiness2Server interface { | |||
mustEmbedUnimplementedTCCServiceBusiness2Server() | |||
} | |||
func RegisterTCCServiceBusiness2Server(s grpc.ServiceRegistrar, srv TCCServiceBusiness2Server) { | |||
s.RegisterService(&TCCServiceBusiness2_ServiceDesc, srv) | |||
} | |||
func _TCCServiceBusiness2_Remoting_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||
in := new(Params) | |||
if err := dec(in); err != nil { | |||
return nil, err | |||
} | |||
if interceptor == nil { | |||
return srv.(TCCServiceBusiness2Server).Remoting(ctx, in) | |||
} | |||
info := &grpc.UnaryServerInfo{ | |||
Server: srv, | |||
FullMethod: "/TCCServiceBusiness2/Remoting", | |||
} | |||
handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
return srv.(TCCServiceBusiness2Server).Remoting(ctx, req.(*Params)) | |||
} | |||
return interceptor(ctx, in, info, handler) | |||
} | |||
// TCCServiceBusiness2_ServiceDesc is the grpc.ServiceDesc for TCCServiceBusiness2 service. | |||
// It's only intended for direct use with grpc.RegisterService, | |||
// and not to be introspected or modified (even as a copy) | |||
var TCCServiceBusiness2_ServiceDesc = grpc.ServiceDesc{ | |||
ServiceName: "TCCServiceBusiness2", | |||
HandlerType: (*TCCServiceBusiness2Server)(nil), | |||
Methods: []grpc.MethodDesc{ | |||
{ | |||
MethodName: "Remoting", | |||
Handler: _TCCServiceBusiness2_Remoting_Handler, | |||
}, | |||
}, | |||
Streams: []grpc.StreamDesc{}, | |||
Metadata: "sample/tcc/grpc/pb/tcc_grpc.proto", | |||
} |
@@ -1,110 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package service | |||
import ( | |||
"context" | |||
"github.com/seata/seata-go/pkg/rm/tcc" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/grpc/pb" | |||
"google.golang.org/protobuf/types/known/anypb" | |||
"google.golang.org/protobuf/types/known/wrapperspb" | |||
) | |||
type GrpcBusinessService1 struct { | |||
pb.UnimplementedTCCServiceBusiness1Server | |||
Business1 *tcc.TCCServiceProxy | |||
} | |||
type Business1 struct{} | |||
// Remoting is your rpc method be defined in proto IDL, you must use TccServiceProxy to proxy your business Object in rpc method , e.g. the Remoting method | |||
func (b *GrpcBusinessService1) Remoting(ctx context.Context, params *pb.Params) (*wrapperspb.BoolValue, error) { | |||
log.Infof("Remoting be called") | |||
res, err := b.Business1.Prepare(ctx, params) | |||
if err != nil { | |||
return wrapperspb.Bool(false), err | |||
} | |||
return wrapperspb.Bool(res.(bool)), nil | |||
} | |||
func (b *Business1) Prepare(ctx context.Context, params interface{}) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness1 Prepare, param %v", params) | |||
return true, nil | |||
} | |||
func (b *Business1) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness1 Commit, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (b *Business1) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness1 Rollback, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (b *Business1) GetActionName() string { | |||
return "TCCServiceBusiness1" | |||
} | |||
type GrpcBusinessService2 struct { | |||
pb.UnimplementedTCCServiceBusiness2Server | |||
Business2 *tcc.TCCServiceProxy | |||
} | |||
type Business2 struct{} | |||
// Remoting is your rpc method be defined in proto IDL, you must use TccServiceProxy to proxy your business Object in rpc method , e.g. the Remoting method | |||
func (b *GrpcBusinessService2) Remoting(ctx context.Context, params *pb.Params) (*anypb.Any, error) { | |||
log.Infof("Remoting be called") | |||
anyFalse, err := anypb.New(wrapperspb.Bool(false)) | |||
if err != nil { | |||
return nil, err | |||
} | |||
res, err := b.Business2.Prepare(ctx, params) | |||
if err != nil { | |||
return anyFalse, err | |||
} | |||
AnyBool, err := anypb.New(wrapperspb.Bool(res.(bool))) | |||
if err != nil { | |||
return nil, err | |||
} | |||
return AnyBool, nil | |||
} | |||
func (b *Business2) Prepare(ctx context.Context, params interface{}) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness2 Prepare, param %v", params) | |||
return true, nil | |||
} | |||
func (b *Business2) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness2 Commit, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (b *Business2) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness2 Rollback, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (b *Business2) GetActionName() string { | |||
return "TCCServiceBusiness2" | |||
} |
@@ -1,48 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/local/service" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
tm.WithGlobalTx(context.Background(), &tm.GtxConfig{ | |||
Name: "TccSampleLocalGlobalTx", | |||
}, business) | |||
<-make(chan struct{}) | |||
} | |||
func business(ctx context.Context) (re error) { | |||
if _, re = service.NewTestTCCServiceBusiness1Proxy().Prepare(ctx, 1); re != nil { | |||
log.Errorf("TestTCCServiceBusiness1 prepare error, %v", re) | |||
return | |||
} | |||
if _, re = service.NewTestTCCServiceBusiness2Proxy().Prepare(ctx, 3); re != nil { | |||
log.Errorf("TestTCCServiceBusiness2 prepare error, %v", re) | |||
return | |||
} | |||
return | |||
} |
@@ -1,107 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package service | |||
import ( | |||
"context" | |||
"fmt" | |||
"sync" | |||
"github.com/seata/seata-go/pkg/rm/tcc" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
var ( | |||
tccService *tcc.TCCServiceProxy | |||
tccServiceOnce sync.Once | |||
tccService2 *tcc.TCCServiceProxy | |||
tccService2Once sync.Once | |||
) | |||
type TestTCCServiceBusiness struct{} | |||
func NewTestTCCServiceBusiness1Proxy() *tcc.TCCServiceProxy { | |||
if tccService != nil { | |||
return tccService | |||
} | |||
tccServiceOnce.Do(func() { | |||
var err error | |||
tccService, err = tcc.NewTCCServiceProxy(&TestTCCServiceBusiness{}) | |||
if err != nil { | |||
panic(fmt.Errorf("get TestTCCServiceBusiness tcc service proxy error, %v", err.Error())) | |||
} | |||
}) | |||
return tccService | |||
} | |||
func (T TestTCCServiceBusiness) Prepare(ctx context.Context, params interface{}) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness Prepare, param %v", params) | |||
return true, nil | |||
} | |||
func (T TestTCCServiceBusiness) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness Commit, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (T TestTCCServiceBusiness) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness Rollback, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (T TestTCCServiceBusiness) GetActionName() string { | |||
return "TestTCCServiceBusiness" | |||
} | |||
type TestTCCServiceBusiness2 struct{} | |||
func NewTestTCCServiceBusiness2Proxy() *tcc.TCCServiceProxy { | |||
if tccService2 != nil { | |||
return tccService2 | |||
} | |||
tccService2Once.Do(func() { | |||
var err error | |||
tccService2, err = tcc.NewTCCServiceProxy(&TestTCCServiceBusiness2{}) | |||
if err != nil { | |||
panic(fmt.Errorf("TestTCCServiceBusiness2 get tcc service proxy error, %v", err.Error())) | |||
} | |||
}) | |||
return tccService2 | |||
} | |||
func (T TestTCCServiceBusiness2) Prepare(ctx context.Context, params interface{}) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness2 Prepare, param %v", params) | |||
return true, nil | |||
} | |||
func (T TestTCCServiceBusiness2) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness2 Commit, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (T TestTCCServiceBusiness2) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("TestTCCServiceBusiness2 Rollback, param %v", businessActionContext) | |||
return true, nil | |||
} | |||
func (T TestTCCServiceBusiness2) GetActionName() string { | |||
return "TestTCCServiceBusiness2" | |||
} |
@@ -1,15 +0,0 @@ | |||
## 用例介绍 | |||
此用例介绍如何在tcc本地模式下使用事务传播特性,编排多个全局事务的传播关系 | |||
## 使用步骤 | |||
- 在``./sample/tcc/propagation/first/main.go``中修改 TestTCCServiceBusiness 的 Prepare 方法,在 WithGlobalTx 方法的配置参数 GtxConfig 设置传播性 Propagation,它将会影响第 second 全局事务如何处理 first 全局事务中传递来的 xid。其中 first 全局事务的传播性为默认值 Require。 | |||
- 启动``seata tc server`` | |||
- 使用以下命令运行用例``go run ./sample/tcc/propagation/first/main.go`` | |||
注意:sample 中设置的传播级别为 Mandatory,因此 second 会继承 first | |||
的 xid, 且在 second 的 prepare 方法中会抛出一个 error,预期的行为是 second 不执行回滚,first 执行回滚,同时将 second 中绑定的 branch 一起回滚 | |||
## 预期的 TC 日志 | |||
 | |||
如图红色划线处,两个回滚成功的 branch 分别来自 first 和 second,回滚成功的 global transaction 来自 first |
@@ -1,91 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package main | |||
import ( | |||
"context" | |||
"fmt" | |||
"sync" | |||
"github.com/seata/seata-go/pkg/client" | |||
"github.com/seata/seata-go/pkg/rm/tcc" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
"github.com/seata/seata-go/sample/tcc/propagation/second" | |||
) | |||
func main() { | |||
client.InitPath("./sample/conf/seatago.yml") | |||
log.Info(tm.WithGlobalTx(context.Background(), &tm.GtxConfig{ | |||
Name: "TccSampleLocalGlobalTxFirst", | |||
}, business)) | |||
<-make(chan struct{}) | |||
} | |||
func business(ctx context.Context) (re error) { | |||
log.Infof("FirstBusiness: propagation tx xid %v", tm.GetXID(ctx)) | |||
if _, re = New().Prepare(ctx, 1); re != nil { | |||
log.Errorf("FirstBusiness prepare error, %v", re) | |||
return | |||
} | |||
return | |||
} | |||
var ( | |||
tccService *tcc.TCCServiceProxy | |||
tccServiceOnce sync.Once | |||
) | |||
type TestTCCServiceBusiness struct{} | |||
func New() *tcc.TCCServiceProxy { | |||
if tccService != nil { | |||
return tccService | |||
} | |||
tccServiceOnce.Do(func() { | |||
var err error | |||
tccService, err = tcc.NewTCCServiceProxy(&TestTCCServiceBusiness{}) | |||
if err != nil { | |||
panic(fmt.Errorf("get TestTccServiceBusiness tcc service proxy error, %v", err.Error())) | |||
} | |||
}) | |||
return tccService | |||
} | |||
func (T TestTCCServiceBusiness) Prepare(ctx context.Context, params interface{}) (bool, error) { | |||
log.Infof("FirstPrepare: propagation tx xid %v", tm.GetXID(ctx)) | |||
err := tm.WithGlobalTx(ctx, &tm.GtxConfig{ | |||
Name: "TccSampleLocalGlobalTxSecond", | |||
Propagation: tm.Mandatory, | |||
}, second.Business) | |||
return err == nil, err | |||
} | |||
func (T TestTCCServiceBusiness) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("FirstCommit: propagation tx xid %v", tm.GetXID(ctx)) | |||
return true, nil | |||
} | |||
func (T TestTCCServiceBusiness) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("FirstRollback: propagation tx xid %v", tm.GetXID(ctx)) | |||
return true, nil | |||
} | |||
func (T TestTCCServiceBusiness) GetActionName() string { | |||
return "TestTCCServiceBusinessFirst" | |||
} |
@@ -1,78 +0,0 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
package second | |||
import ( | |||
"context" | |||
"fmt" | |||
"sync" | |||
"github.com/seata/seata-go/pkg/rm/tcc" | |||
"github.com/seata/seata-go/pkg/tm" | |||
"github.com/seata/seata-go/pkg/util/log" | |||
) | |||
var ( | |||
tccService *tcc.TCCServiceProxy | |||
tccServiceOnce sync.Once | |||
) | |||
type TestTccServiceBusiness struct{} | |||
func NewTccServiceProxy() *tcc.TCCServiceProxy { | |||
if tccService != nil { | |||
return tccService | |||
} | |||
tccServiceOnce.Do(func() { | |||
var err error | |||
tccService, err = tcc.NewTCCServiceProxy(&TestTccServiceBusiness{}) | |||
if err != nil { | |||
panic(fmt.Errorf("get TestTccServiceBusiness tcc service proxy error, %v", err.Error())) | |||
} | |||
}) | |||
return tccService | |||
} | |||
func (T TestTccServiceBusiness) Prepare(ctx context.Context, params interface{}) (bool, error) { | |||
log.Infof("SecondPrepare: propagation tx %s/%s, case to rollback", tm.GetTxName(ctx), tm.GetXID(ctx)) | |||
return false, fmt.Errorf("SecondPrepare: propagation tx %s/%s, case to rollback", tm.GetTxName(ctx), tm.GetXID(ctx)) | |||
} | |||
func (T TestTccServiceBusiness) Commit(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("SecondCommit: propagation tx xid %v", tm.GetXID(ctx)) | |||
return true, nil | |||
} | |||
func (T TestTccServiceBusiness) Rollback(ctx context.Context, businessActionContext *tm.BusinessActionContext) (bool, error) { | |||
log.Infof("SecondRollback: propagation tx xid %v", tm.GetXID(ctx)) | |||
return true, nil | |||
} | |||
func (T TestTccServiceBusiness) GetActionName() string { | |||
return "TestTCCServiceBusinessSecond" | |||
} | |||
func Business(ctx context.Context) (re error) { | |||
log.Infof("SecondBusiness: propagation tx xid %v", tm.GetXID(ctx)) | |||
if _, re = NewTccServiceProxy().Prepare(ctx, 1); re != nil { | |||
log.Errorf("SecondBusiness prepare error, %v", re) | |||
return | |||
} | |||
return | |||
} |