Commit Graph

512 Commits (c1c7584de1d6f6130e30aea26d9ef31a74179ff1)

Author SHA1 Message Date
chenquan cf683411ee
feature(retry): Delete retry mechanism (#1279) 3 years ago
Kevin Wan de5ed6a677
feat: support %w in logx.Errorf (#1278) 3 years ago
Kevin Wan a7a6753118
fixes #1257 (#1271)
* fixes #1257

* chore: format code

* test: add more tests
3 years ago
FabioCircle 11c485a5ed
Duplicate temporary variable (#1244)
Co-authored-by: fabiowzhang <fabiowzhang@wesure.cn>
3 years ago
Kevin Wan 11f85d1b80
chore: remove conf.CheckedDuration (#1235) 3 years ago
Kevin Wan 4f5c30e083
chore: remove unused const (#1224) 3 years ago
an 3a510a9138
chore: redislock use stringx.randn replace randomStr func (#1220) 3 years ago
anqiansong 69a4d213a3
Fix issue 1205 (#1211)
* fix #1205

* move builder into stores

* remove xrom

* Remove unused code

* Remove unused code

* refactor builderx to builder

Co-authored-by: anqiansong <anqiansong@bytedance.com>
3 years ago
Kevin Wan e8efcef108
update dependencies. (#1210)
* chore: update dependencies

* chore: update dependencies

* chore: update dependencies

* chore: update dependencies

* chore: fix test failure
3 years ago
yedf2 6aba5f74fc
feat: add NewSessionFromTx to interact with other orm (#1202)
Co-authored-by: yedongfu <dongfuye@163.com>
3 years ago
Kevin Wan 785d100be9
feat: slow threshold customizable in sqlx (#1188) 3 years ago
Kevin Wan f13e6f1149
feat: slow threshold customizable in redis (#1187) 3 years ago
Kevin Wan 8be0f77d96
feat: slow threshold customizable in mongo (#1186) 3 years ago
Kevin Wan 429f85a9de
feat: slow threshold customizable in redis (#1185)
* feat: slow threshold customizable in redis

* chore: improve config robustness
3 years ago
Kevin Wan 3c1cfd4c1e
feat: support multiple trace agents (#1183)
* feat: support multiple trace agents

* feat: support multiple trace agents, let later calls run if error happens

* test: add more tests
3 years ago
Kevin Wan a71a210704
feat: let different services start prometheus on demand (#1182) 3 years ago
Kevin Wan 59b9687f31
feat: support auth account for etcd (#1174) 3 years ago
Kevin Wan bd26783b33
test: add more tests (#1166)
* chore: reverse the order of stopping services

* chore: reverse the order of stopping services

* test: add more tests
3 years ago
Kevin Wan eda8230521
chore: reorg imports, format code, make MaxRetires default to 0 (#1165)
* chore: reverse the order of stopping services

* chore: reverse the order of stopping services

* chore: reorg imports, format code

* chore: format code, and refactor

* feat: change MaxRetries default to 0, disable retry
3 years ago
chenquan 462ddbb145
Add grpc retry (#1160)
* Add grpc retry

* Update grpc retry

* Add tests

* Fix a bug

* Add api && some tests

* Add comment

* Add double check

* Add server retry quota

* Update optimize code

* Fix bug

* Update optimize code

* Update optimize code

* Fix bug
3 years ago
Kevin Wan 7109d6d635
chore: reverse the order of stopping services (#1159)
* chore: reverse the order of stopping services

* chore: reverse the order of stopping services
3 years ago
Kevin Wan a6bdffd225
test: add more tests (#1154) 3 years ago
Kevin Wan eab77e21dd
test: add more tests (#1147)
* test: add more tests

* test: add more tests
3 years ago
Kevin Wan 265b1f2459
test: add more tests (#1138) 3 years ago
Kevin Wan c92ea59228
test: add more tests (#1137) 3 years ago
Kevin Wan fa4dc151ca
test: add more tests (#1134) 3 years ago
Mikael 837a9ffa03
go-zero/core/hash/hash_test.go 增加测试 TestMd5Hex (#1128) 3 years ago
Kevin Wan 10e7922597
feat: opentelemetry integration, removed self designed tracing (#1111)
* feat: opentelemetry integration, removed self designed tracing

* feat: support zipkin on opentelemetry integration

* feat: support zipkin on opentelemetry integration, enable it in conf

* style: format code

* fix: support logx without exporter configured

* fix: check return values

* refactor: simplify code

* refactor: simplify opentelemetry integration

* ci: fix staticcheck errors
3 years ago
Kevin Wan ed15ca04f4
fix: opentelemetry traceid not correct (#1108) 3 years ago
Kevin Wan d1e702e8a3
test: add more tests (#1106)
* style: format code

* test: add more tests

* fix: staticcheck errors
3 years ago
chenquan d1bfb5ef61
Fix the `resources` variable not reset after the resource manager is closed (#1105)
* Fix the resource variable not reset after the resource manager is closed

* Format code
3 years ago
Kevin Wan e43357164c
chore: replace redis.NewRedis with redis.New (#1103) 3 years ago
Kevin Wan cd21c9fa74
chore: mark redis.NewRedis as Deprecated, use redis.New instead. (#1100)
* chore: mark redis.NewRedis as Deprecated

* chore: mark redis.NewRedis as Deprecated
3 years ago
Kevin Wan 65905b914d
ci: add reviewdog (#1096) 3 years ago
Kevin Wan 8403ed16ae
ci: add Lint check on commits (#1086)
* ci: add Lint check on commits

* ci: fix Lint script error

* test: fix go vet errors

* test: fix go vet errors, remove gofumpt to check go vet

* test: fix go vet errors, try gofumpt

* test: fix go vet errors, try gofumpt, round 1

* test: fix go vet errors, try gofumpt, round 2

* ci: fix Lint errors
3 years ago
NevS 004ee488a6
fix AtomicError panic when Set nil (#1049) (#1050) 3 years ago
Kevin Wan 2e12cd2c99
coding style (#1083) 3 years ago
neosu 2695c30886
we can use otel.ErrorHandlerFunc instead of custom struct when we update OpenTelemetry to 1.0.0 (#1081) 3 years ago
Kevin Wan c9db9588b7
chore: fix comment issues (#1056) 3 years ago
Kevin Wan 872c50b71a
chore: make comment accurate (#1055) 3 years ago
Kevin Wan f4bb9f5635
fix test error on ubuntu (#1048) 3 years ago
Kevin Wan 71c0288023
fix symlink issue on windows for goctl (#1034)
* fix symlink issue on windows for goctl

* move readlink into separate file
3 years ago
Kevin Wan 24fd34413f
fix golint issues (#1027) 3 years ago
Kevin Wan 3f47251892
fix proc.Done not found in windows (#1026) 3 years ago
Kevin Wan 0b6bc69afa
reorg imports, format code (#1024) 3 years ago
Kevin Wan 5cc9eb0de4
rename sharedcalls to singleflight (#1017) 3 years ago
Kevin Wan f070d447ef
refactor for better error reporting on sql error (#1016)
* refactor for better error reporting on sql error

* fix errors

* add docs
3 years ago
Kevin Wan f6d9e19ecb
expose sql.DB to let orm operate on it (#1015)
* expose sql.DB to let orm operate on it

* add missing RawDB methods

* add NewSqlConnFromDB for cooperate with dtm
3 years ago
Kevin Wan c837dc21bb
refactoring tracing interceptors. (#1009)
* refactor tracing interceptors

* add stream tracing interceptor
3 years ago
Kevin Wan bdec5f2349
use sdktrace instead of trace for opentelemetry to avoid conflicts (#1005)
* use sdktrace instead of trace for opentelemetry to avoid conflicts

* disable opentelemetry for right now
3 years ago
neosu dec6309c55
add opentelemetry test (#1002) 3 years ago
Kevin Wan 10805577f5
reorg imports, format code (#1000) 3 years ago
SunJun a4d8286e36
开启otel后,tracelog自动获取otle的traceId和spanId (#946)
* 开启otel后,tracelog自动获取otle的traceId和spanId

* 去除opentelemetry判断

* 通过 IsRecording 判断span是否活跃
3 years ago
Kevin Wan 79eab0ea2f
refactor to shorter config name (#997) 3 years ago
Kevin Wan 58874779e7
move opentelemetry into trace package, and refactoring (#996)
* move opentelemetry into trace package, and refactoring

* rename rewritten package names
3 years ago
Kevin Wan 9bdadf2381
fix golint issues (#992) 3 years ago
Kevin Wan 20f665ede8
implement k8s service discovery (#988)
* implement k8s service discovery

* simplify code

* use default namespace if not provided

* disable codecov bot comment

* ignore adhoc dir

* simplify building target in NewClient

* reformat code

* Fix filepath (#990)

* format code, and reorg imports (#991)

* add more unit test

Co-authored-by: anqiansong <anqiansong@gmail.com>
3 years ago
Kevin Wan db95b3f0e3
configurable for load and stat statistics logs (#980) 3 years ago
Kevin Wan 7618139dad
refactor (#977) 3 years ago
Kevin Wan d0f9e57022
fix #957 (#959) 3 years ago
zhoushuguang 280e837c9e
rest otel support (#943) 3 years ago
Kevin Wan cd15c19250
fix lint errors (#937) 3 years ago
neosu 5b35fa17de
add the opentelemetry tracing (#908)
* add the opentelemetry tracing

* fix the error sampler config

* 添加stream的链路跟踪

* fix the error field name
3 years ago
Kevin Wan bf3ce16823
fix #820 (#934) 3 years ago
Kevin Wan 9c1ee50497
refactor (#920) 3 years ago
chenquan 7c842f22d0
Add traceId to the response headers (#919)
* Add traceId to the request headers

* Add test cases

* Update refactor code
3 years ago
Kevin Wan c7f5aad83a
add stringx.FirstN with ellipsis (#916) 3 years ago
lucaq e77747cff8
redis.go,type StringCmd = red.StringCmd (#790)
* Add Sinter,Sinterstore; Modify TestRedis_Set

* type StringCmd

* redis.go,type StringCmd = red.StringCmd

Co-authored-by: lucq <lucq@toopsoon.com>
3 years ago
Kevin Wan f2612db4b1
add stringx.FirstN (#914) 3 years ago
Kevin Wan a21ff71373
fix #889 (#912) 3 years ago
Kevin Wan fbf2eebc42
add Errorv/Infov/Slowv (#909) 3 years ago
Kevin Wan 69935c1ba3
refactor goctl, fix golint issues (#903) 3 years ago
Kevin Wan 1fb356f328
refactor goctl (#902) 3 years ago
市民233 0b0406f41a
fix: 解决golint 部分警告 (#897)
* feat:  解决goreportcard的警报
ps: warning: if block ends with a return statement, so drop this else and outdent its block (golint)

* feat: 优化golint警告,将processFieldPrimitiveWithJsonNumber 改成 processFieldPrimitiveWithJSONNumber
unmarshaler.go:248:23: method processFieldPrimitiveWithJsonNumber should be processFieldPrimitiveWithJSONNumber

* feat: 添加 WithCanonicalKeyFunc 注释

* feat: 添加DisableStat的注释

* feat: 添加 RegisterGoctlHome 注释

* feat: 添加 PostgreSqlJoin 注释

* feat: 解决goline警告should not use basic type string as key in context.WithValue问题

* feat: 解决golint警告信息: should not use basic type string as key in context.WithValue

* fix: 定义自定义字段类型,导致go test fail 问题

* update: 恢复原有测试用例

* fix golint warning
3 years ago
Kevin Wan e024aebb66
fix golint issues (#899) 3 years ago
Kevin Wan 54d57c7d4b
refactor rest code (#895) 3 years ago
voidint 28a7c9d38f
fix http header binding failure bug #885 (#887) 3 years ago
Kevin Wan 872e75e10d
add logx.DisableStat() to disable stat logs (#893)
* add logx.DisableStat() to disable stat logs

* refactor logx code
3 years ago
Kevin Wan 6793f7a1de
fix bug that proc.SetTimeToForceQuit not working in windows (#869) 3 years ago
aaffo 598fda0c97
optimized (#819) 3 years ago
Kevin Wan 5b22823018
fix bug that empty query in transaction (#801) 3 years ago
Kevin Wan 9ccb997ed8
refactor mapping (#782) 3 years ago
skykiss 01c92a6bc5
fix: Fix problems with non support for multidimensional arrays and basic type pointer arrays (#778)
Co-authored-by: shaoqian <shaoqian.zhang@appshahe.com>
3 years ago
lucaq c9a2a60e28
Add Sinter,Sinterstore & Modify TestRedis_Set (#779)
* Add Sinter,Sinterstore; Modify TestRedis_Set

* Update redis_test.go

fix test failure

Co-authored-by: lucq <lucq@toopsoon.com>
Co-authored-by: Kevin Wan <wanjunfeng@gmail.com>
3 years ago
Kevin Wan 3e8cec5c78
upgrade grpc & etcd dependencies (#771) 3 years ago
Kevin Wan 74ee163761
fix bug that etcd stream cancelled without re-watch (#770) 3 years ago
Kevin Wan 8520db4fd9
refactor fx (#759)
* refactor fx

* refactor fx, format code
4 years ago
Chen Quan 14141fed62
Add some stream features (#712)
* Add some stream features

* Update empty

* Fix initialization loop

* Delete ForeachOrdered && Fix FindFirst

* Add test case && Delete redundant code

* Update test case

* Delete SplitSteam

* Delete redundant code
4 years ago
Kevin Wan aaa3623404
optimize nested conditional (#709) 4 years ago
heyanfu 8998f16054
optimize nested conditional (#708)
Co-authored-by: heyanfu <heyanfu@kingsoft.com>
4 years ago
Kevin Wan aaa39e17a3
print entire sql statements in logx if necessary (#704) 4 years ago
Bo-Yi Wu 73906f996d
chore(format): change by gofumpt tool (#697)
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
4 years ago
Kevin Wan 491213afb8
fix #683 (#690)
* fix #683

* fix errors
4 years ago
Kevin Wan a87978568a
fix #676 (#682) 4 years ago
heyanfu a5962f677f
fix some typo (#677) 4 years ago
heyanfu 97d889103a
fix some typo (#667) 4 years ago
Kevin Wan 06eeef2cf3
disable prometheus if not configured (#663) 4 years ago
Kevin Wan 9adc7d4cb9
fix comment function names (#649) 4 years ago
heyanfu 7405d7f506
spelling mistakes (#634) 4 years ago
Bo-Yi Wu afd9ff889e
chore: update code format. (#628) 4 years ago
Kevin Wan 08fb980ad2
add syncx.Guard func (#620) 4 years ago
Kevin Wan ee630b8b57
add code coverage (#615)
* add code coverage

* simplify redis code
4 years ago
Kevin Wan 9963ffb1c1
simplify redis tls implementation (#606) 4 years ago
r00mz 8cb6490724
redis增加tls支持 (#595)
* redis连接增加支持tls选项

* 优化redis tls config 写法

* redis增加tls支持

* 增加redis tls测试用例,但redis tls local server不支持,测试用例全部NotNil

Co-authored-by: liuyi <liuyi@fangyb.com>
Co-authored-by: yi.liu <yi.liu@xshoppy.com>
4 years ago
Kevin Wan 05e37ee20f
refactor - remove ShrinkDeadline, it's the same as context.WithTimeout (#599) 4 years ago
zjbztianya d88da4cc88
Replace contextx.ShrinkDeadline with context.WithTimeout (#598) 4 years ago
Oraoto 425430f67c
Simplify contextx.ShrinkDeadline (#596) 4 years ago
Zcc、 4e0d91f6c0
fix (#592)
Co-authored-by: zhoudeyu <zhoudeyu@xiaoheiban.cn>
4 years ago
Kevin Wan b19c5223a9
update regression test comment (#589) 4 years ago
bittoy 99a2d95433
remove rt mode log (#587) 4 years ago
Ted Chen 9db222bf5b
fix a simple typo (#588) 4 years ago
Kevin Wan bbb4ce586f
fix golint issues (#584) 4 years ago
Kevin Wan bd623aaac3
support postgresql (#583)
support postgresql
4 years ago
Kevin Wan 9e6c2ba2c0
avoid goroutine leak after timeout (#575) 4 years ago
Kevin Wan c0db8d017d
gofmt logs (#574) 4 years ago
TonyWang 52b4f8ca91
add timezone and timeformat (#572)
* add timezone and timeformat

* rm time zone and keep time format

Co-authored-by: Tony Wang <tonywang.data@gmail.com>
4 years ago
Kevin Wan fcd15c9b17
refactor, and add comments to describe graceful shutdown (#564) 4 years ago
hanhotfox c954568b61
Hdel support for multiple key deletion (#542)
* Hdel support for multiple key deletion

* Hdel field -> fields

Co-authored-by: duanyan <duanyan@xiaoheiban.cn>
4 years ago
Kevin Wan 39540e21d2
fix golint issues (#540) 4 years ago
hexiaoen b321622c95
暴露redis EvalSha 以及ScriptLoad接口 (#538)
Co-authored-by: shanehe <shanehe@zego.im>
4 years ago
kingxt a25cba5380
fix collection breaker (#537)
* fix collection breaker

* optimized

* optimized

* optimized
4 years ago
Kevin Wan c4b2cddef7
fix golint issues (#532) 4 years ago
Kevin Wan 791e76bcf0
fix broken build (#528) 4 years ago
Kevin Wan c566b5ff82
fix golint issues in core/stores (#527) 4 years ago
Kevin Wan 490241d639
fix golint issues in core/syncx (#526) 4 years ago
Kevin Wan f02711a9cb
golint core/discov (#525) 4 years ago
Kevin Wan ad32f9de23
fix golint issues in core/threading (#524) 4 years ago
Kevin Wan f309e9f80c
fix golint issues in core/utils (#520)
* fix golint issues in core/utils

* fix golint issues in core/trace

* fix golint issues in core/trace
4 years ago
Kevin Wan ef146cf5ba
fix golint issues in core/timex (#517) 4 years ago
Kevin Wan 04b0f26182
fix golint issues in core/stringx (#516) 4 years ago
Kevin Wan acdaee0fb6
fix golint issues in core/stat (#515)
* change to use ServiceGroup to make it more clear

* fix golint issues in core/stat
4 years ago
Kevin Wan 56ad4776d4
fix misspelling (#513) 4 years ago
Kevin Wan 904d168f18
fix golint issues in core/service (#512) 4 years ago
Kevin Wan 4bd4981bfb
fix golint issues in core/search (#509) 4 years ago
Kevin Wan 90562df826
fix golint issues in core/rescue (#508) 4 years ago
Kevin Wan 497762ab47
fix golint issues in core/queue (#507) 4 years ago
Kevin Wan 6e4c98e52d
fix golint issues in core/prometheus (#506) 4 years ago
Kevin Wan a58fac9000
fix golint issues in core/prof (#503) 4 years ago
Kevin Wan d84e3d4b53
fix golint issues in core/proc (#502) 4 years ago
Kevin Wan 221f923fae
fix golint issues in core/netx (#501) 4 years ago
Kevin Wan bbb9126302
fix golint issues in core/mr (#500) 4 years ago
Kevin Wan e7c9ef16fe
fix golint issues in core/metric (#499) 4 years ago
Kevin Wan 8872d7cbd3
fix golint issues in core/mathx (#498) 4 years ago
Kevin Wan 334ee4213f
fix golint issues in core/mapping (#497) 4 years ago
Kevin Wan 226513ed60
fix golint issues in core/logx (#496) 4 years ago
Kevin Wan dac00d10c1
fix golint issues in core/load (#495) 4 years ago
Kevin Wan 84d2b6f8f5
fix golint issues in core/limit (#494) 4 years ago
Kevin Wan 059027bc9d
fix golint issues in core/lang (#492) 4 years ago
Kevin Wan af68caeaf6
fix golint issues in core/jsonx (#491) 4 years ago
Zcc、 fdeacfc89f
add redis bitmap command (#490)
Co-authored-by: zhoudeyu <zhoudeyu@xiaoheiban.cn>
4 years ago
Kevin Wan 5b33dd59d9
fix golint issues in core/jsontype (#489) 4 years ago
Kevin Wan 1f92bfde6a
fix golint issues in core/iox (#488) 4 years ago
Kevin Wan 0c094cb2d7
fix golint issues in core/hash (#487) 4 years ago
Kevin Wan f238290dd3
fix golint issues in core/fx (#486) 4 years ago
Kevin Wan c376ffc351
fix golint issues in core/filex (#485) 4 years ago
Kevin Wan 802549ac7c
fix golint issues in core/executors (#484) 4 years ago
Zcc、 72580dee38
redis add bitcount (#483)
Co-authored-by: zhoudeyu <zhoudeyu@xiaoheiban.cn>
4 years ago
Kevin Wan 7472d1e70b
fix golint issues in core/errorx (#480) 4 years ago
Kevin Wan 2446d8a668
fix golint issues in core/discov (#479) 4 years ago
Kevin Wan f6894448bd
fix golint issues in core/contextx (#477) 4 years ago
Kevin Wan 425be6b4a1
fix golint issues in core/conf (#476) 4 years ago
Kevin Wan 457048bfac
fix golint issues in core/collection, refine cache interface (#475) 4 years ago
Kevin Wan 8f1c88e07d
fix golint issues in core/codec (#473) 4 years ago
Kevin Wan 38abfb80ed
fix gocyclo warnings (#468) 4 years ago
Kevin Wan 87938bcc09
fix golint issues in core/cmdline (#467) 4 years ago
Kevin Wan 8ebf6750b9
fix golint issues in core/breaker (#466) 4 years ago
Kevin Wan 6f92daae12
fix golint issues in core/bloom (#465) 4 years ago
Kevin Wan 80e1c85b50
add more tests for service (#463) 4 years ago
Kevin Wan 395a1db22f
add more tests for rest (#462) 4 years ago
bittoy 28009c4224
Update serviceconf.go (#460)
add regression environment config
4 years ago
Kevin Wan 211f3050e9
fix golint issues (#459) 4 years ago
Kevin Wan 03b5fd4a10
fix golint issues (#458) 4 years ago
Kevin Wan 5e969cbef0
fix golint issues, else blocks (#457) 4 years ago
Kevin Wan 42883d0899
fix golint issues, redis methods (#455) 4 years ago
Kevin Wan 06f6dc9937
fix golint issues, package comments (#454) 4 years ago
Kevin Wan 54414db91d
fix golint issues, exported doc (#451) 4 years ago
Kevin Wan 9b0625bb83
fix golint issues (#450) 4 years ago
Kevin Wan 0dda05fd57
add api doc (#449) 4 years ago
Kevin Wan 5b79ba2618
add discov tests (#448) 4 years ago
Kevin Wan 22a1fa649e
remove etcd facade, added for testing purpose (#447) 4 years ago
Kevin Wan 745e76c335
add more tests for stores (#446) 4 years ago
Kevin Wan 852891dbd8
add more tests for stores (#445) 4 years ago
Kevin Wan 316195e912
add more tests for mongoc (#443) 4 years ago
Kevin Wan 8e889d694d
add more tests for sqlx (#442)
* add more tests for sqlx

* add more tests for sqlx
4 years ago
Kevin Wan c282bb1d86
add more tests for sqlx (#440) 4 years ago
Kevin Wan d04b54243d
add more tests for proc (#439) 4 years ago
Kevin Wan b88ba14597
fixes issue #425 (#438) 4 years ago
理工男 7b3c3de35e
ring struct add lock (#434)
Co-authored-by: liuhuan210 <liuhuan210@jd.com>
4 years ago
Kevin Wan 30f5ab0b99
update readme for broken links (#432) 4 years ago
foyon 8b273a075c
Support redis command Rpop (#431)
* ss

* ss

* add go-zero:stores:redis-command:Rpop and redis_test

* Delete 1.go

* support redis command Rpop

Co-authored-by: fanhongyi <fanhongyi@tal.com>
4 years ago
Hkesd 04284e31cd
support hscan in redis (#428) 4 years ago
Kevin Wan c3b9c3c5ab
use english readme as default, because of github ranking (#427) 4 years ago
Kevin Wan a784982030
support zunionstore in redis (#410) 4 years ago
Kevin Wan ebec5aafab
use env if necessary in loading config (#409) 4 years ago
Kevin Wan 6887fb22de
add more tests for codec (#391) 4 years ago
ALMAS c77b8489d7
Update periodicalexecutor.go (#389) 4 years ago
Kevin Wan 744c18b7cb
simplify cgroup controller separation (#384) 4 years ago
miaogaolin 8d6f6f933e
fix cgroup bug (#380) 4 years ago
Kevin Wan 37c3b9f5c1
make sure unlock safe even if listeners panic (#383)
* make sure unlock safe even if listeners panic

* fix #378

* fix #378
4 years ago
卢永杰 1f1dcd16e6
fix server.start return nil points (#379)
Co-authored-by: luyongjie <luyongjie@37.com>
4 years ago